[{"data":1,"prerenderedAt":173434},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-er-wei-shu-zu-de-suo-yin-yu-qie-pian":3,"wiki-doc-nav":545},{"id":4,"title":5,"body":6,"description":537,"extension":538,"meta":539,"navigation":540,"path":541,"seo":542,"stem":543,"__hash__":544},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":8,"toc":535},"minimark",[9,13,17,24,74,77,118,121,155,158,280,283,323,326,427,430,483,486,528,531],[10,11,5],"h1",{"id":12},"_4二维数组的索引与切片",[14,15,16],"p",{},"①获取指定单个元素",[14,18,19],{},[20,21],"img",{"alt":22,"src":23},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[25,26,30],"pre",{"className":27,"code":28,"language":29,"meta":22,"style":22},"language-python shiki shiki-themes github-light github-dark","#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n","python",[31,32,33,42,48,54],"code",{"__ignoreMap":22},[34,35,38],"span",{"class":36,"line":37},"line",1,[34,39,41],{"class":40},"sJ8bj","#获取元素9\n",[34,43,45],{"class":36,"line":44},2,[34,46,47],{"class":40},"#先获取所在行，再获取所在列\n",[34,49,51],{"class":36,"line":50},3,[34,52,53],{"class":40},"#数组[行索引号，列索引号]\n",[34,55,57,61,65,68,71],{"class":36,"line":56},4,[34,58,60],{"class":59},"sVt8B","a[",[34,62,64],{"class":63},"sj4cs","1",[34,66,67],{"class":59},",",[34,69,70],{"class":63},"2",[34,72,73],{"class":59},"]\n",[14,75,76],{},"②获取整行元素",[25,78,80],{"className":27,"code":79,"language":29,"meta":22,"style":22},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[31,81,82,87,92,100,105],{"__ignoreMap":22},[34,83,84],{"class":36,"line":37},[34,85,86],{"class":40},"#获取整行 数组[行索引号]\n",[34,88,89],{"class":36,"line":44},[34,90,91],{"class":40},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[34,93,94,96,98],{"class":36,"line":50},[34,95,60],{"class":59},[34,97,70],{"class":63},[34,99,73],{"class":59},[34,101,102],{"class":36,"line":56},[34,103,104],{"class":40},"#也可以负索引获取一行\n",[34,106,108,110,114,116],{"class":36,"line":107},5,[34,109,60],{"class":59},[34,111,113],{"class":112},"szBVR","-",[34,115,64],{"class":63},[34,117,73],{"class":59},[14,119,120],{},"③获取整列元素",[25,122,124],{"className":27,"code":123,"language":29,"meta":22,"style":22},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[31,125,126,131,140,145],{"__ignoreMap":22},[34,127,128],{"class":36,"line":37},[34,129,130],{"class":40},"#获取整列 数组名[:,列索引]\n",[34,132,133,136,138],{"class":36,"line":44},[34,134,135],{"class":59},"a[:,",[34,137,70],{"class":63},[34,139,73],{"class":59},[34,141,142],{"class":36,"line":50},[34,143,144],{"class":40},"#也可以负索引获取一列\n",[34,146,147,149,151,153],{"class":36,"line":56},[34,148,135],{"class":59},[34,150,113],{"class":112},[34,152,64],{"class":63},[34,154,73],{"class":59},[14,156,157],{},"④部分行部分列的元素",[25,159,161],{"className":27,"code":160,"language":29,"meta":22,"style":22},"#部分行部分列 数组名[行切片，列切片]\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",[31,162,163,168,178,183,189,194,200,205,220,225,230,236,242,248,254,259,265],{"__ignoreMap":22},[34,164,165],{"class":36,"line":37},[34,166,167],{"class":40},"#部分行部分列 数组名[行切片，列切片]\n",[34,169,170,173,175],{"class":36,"line":44},[34,171,172],{"class":59},"a[:",[34,174,70],{"class":63},[34,176,177],{"class":59},",:]\n",[34,179,180],{"class":36,"line":50},[34,181,182],{"class":40},"#结果：\n",[34,184,185],{"class":36,"line":56},[34,186,188],{"class":187},"sZZnC","'''\n",[34,190,191],{"class":36,"line":107},[34,192,193],{"class":187},"array([[ 1,  2,  3,  4,  5,  6],\n",[34,195,197],{"class":36,"line":196},6,[34,198,199],{"class":187},"       [ 7,  8,  9, 10, 11, 12]])\n",[34,201,203],{"class":36,"line":202},7,[34,204,188],{"class":187},[34,206,208,210,212,215,218],{"class":36,"line":207},8,[34,209,135],{"class":59},[34,211,64],{"class":63},[34,213,214],{"class":59},":",[34,216,217],{"class":63},"4",[34,219,73],{"class":59},[34,221,223],{"class":36,"line":222},9,[34,224,182],{"class":40},[34,226,228],{"class":36,"line":227},10,[34,229,188],{"class":187},[34,231,233],{"class":36,"line":232},11,[34,234,235],{"class":187},"array([[ 2,  3,  4],\n",[34,237,239],{"class":36,"line":238},12,[34,240,241],{"class":187},"       [ 8,  9, 10],\n",[34,243,245],{"class":36,"line":244},13,[34,246,247],{"class":187},"       [14, 15, 16],\n",[34,249,251],{"class":36,"line":250},14,[34,252,253],{"class":187},"       [20, 21, 22]])\n",[34,255,257],{"class":36,"line":256},15,[34,258,188],{"class":187},[34,260,262],{"class":36,"line":261},16,[34,263,264],{"class":40},"#对列行同时进行切片，使用了step参数\n",[34,266,268,271,273,276,278],{"class":36,"line":267},17,[34,269,270],{"class":59},"a[::",[34,272,70],{"class":63},[34,274,275],{"class":59},",::",[34,277,70],{"class":63},[34,279,73],{"class":59},[14,281,282],{},"⑤同时获取两个元素",[25,284,286],{"className":27,"code":285,"language":29,"meta":22,"style":22},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[31,287,288,293,298],{"__ignoreMap":22},[34,289,290],{"class":36,"line":37},[34,291,292],{"class":40},"#同时获取第三行第二列，第四行第一列\n",[34,294,295],{"class":36,"line":44},[34,296,297],{"class":40},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[34,299,300,303,305,307,310,313,315,317,320],{"class":36,"line":50},[34,301,302],{"class":59},"a[(",[34,304,70],{"class":63},[34,306,67],{"class":59},[34,308,309],{"class":63},"3",[34,311,312],{"class":59},"),(",[34,314,64],{"class":63},[34,316,67],{"class":59},[34,318,319],{"class":63},"0",[34,321,322],{"class":59},")]\n",[14,324,325],{},"⑥切片，对行进行反向获取",[25,327,329],{"className":27,"code":328,"language":29,"meta":22,"style":22},"#切片 对所有行进行反向获取\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",[31,330,331,336,346,350,354,359,364,369,374,378,383,399,403,408,413,418,423],{"__ignoreMap":22},[34,332,333],{"class":36,"line":37},[34,334,335],{"class":40},"#切片 对所有行进行反向获取\n",[34,337,338,340,342,344],{"class":36,"line":44},[34,339,270],{"class":59},[34,341,113],{"class":112},[34,343,64],{"class":63},[34,345,73],{"class":59},[34,347,348],{"class":36,"line":50},[34,349,182],{"class":40},[34,351,352],{"class":36,"line":56},[34,353,188],{"class":187},[34,355,356],{"class":36,"line":107},[34,357,358],{"class":187},"array([[19, 20, 21, 22, 23, 24],\n",[34,360,361],{"class":36,"line":196},[34,362,363],{"class":187},"       [13, 14, 15, 16, 17, 18],\n",[34,365,366],{"class":36,"line":202},[34,367,368],{"class":187},"       [ 7,  8,  9, 10, 11, 12],\n",[34,370,371],{"class":36,"line":207},[34,372,373],{"class":187},"       [ 1,  2,  3,  4,  5,  6]])\n",[34,375,376],{"class":36,"line":222},[34,377,188],{"class":187},[34,379,380],{"class":36,"line":227},[34,381,382],{"class":40},"#对行列都进行反向切片获取\n",[34,384,385,387,389,391,393,395,397],{"class":36,"line":232},[34,386,270],{"class":59},[34,388,113],{"class":112},[34,390,64],{"class":63},[34,392,275],{"class":59},[34,394,113],{"class":112},[34,396,64],{"class":63},[34,398,73],{"class":59},[34,400,401],{"class":36,"line":238},[34,402,188],{"class":187},[34,404,405],{"class":36,"line":244},[34,406,407],{"class":187},"array([[24, 23, 22, 21, 20, 19],\n",[34,409,410],{"class":36,"line":250},[34,411,412],{"class":187},"       [18, 17, 16, 15, 14, 13],\n",[34,414,415],{"class":36,"line":256},[34,416,417],{"class":187},"       [12, 11, 10,  9,  8,  7],\n",[34,419,420],{"class":36,"line":261},[34,421,422],{"class":187},"       [ 6,  5,  4,  3,  2,  1]])\n",[34,424,425],{"class":36,"line":267},[34,426,188],{"class":187},[14,428,429],{},"⑦修改元素",[25,431,433],{"className":27,"code":432,"language":29,"meta":22,"style":22},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[31,434,435,440,459,464],{"__ignoreMap":22},[34,436,437],{"class":36,"line":37},[34,438,439],{"class":40},"#获取前两行和前两列\n",[34,441,442,445,448,450,452,455,457],{"class":36,"line":44},[34,443,444],{"class":59},"sub_a",[34,446,447],{"class":112},"=",[34,449,172],{"class":59},[34,451,70],{"class":63},[34,453,454],{"class":59},",:",[34,456,70],{"class":63},[34,458,73],{"class":59},[34,460,461],{"class":36,"line":50},[34,462,463],{"class":40},"#修改sub_a第一个元素的值\n",[34,465,466,469,471,473,475,478,480],{"class":36,"line":56},[34,467,468],{"class":59},"sub_a[",[34,470,319],{"class":63},[34,472,67],{"class":59},[34,474,319],{"class":63},[34,476,477],{"class":59},"]",[34,479,447],{"class":112},[34,481,482],{"class":63},"100\n",[14,484,485],{},"⑧数组复制copy()",[25,487,489],{"className":27,"code":488,"language":29,"meta":22,"style":22},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[31,490,491,496,506,511],{"__ignoreMap":22},[34,492,493],{"class":36,"line":37},[34,494,495],{"class":40},"#数组复制\n",[34,497,498,501,503],{"class":36,"line":44},[34,499,500],{"class":59},"copy_a",[34,502,447],{"class":112},[34,504,505],{"class":59},"np.copy(sub_a)\n",[34,507,508],{"class":36,"line":50},[34,509,510],{"class":40},"#修改copy_a后不影响原数组\n",[34,512,513,516,518,520,522,524,526],{"class":36,"line":56},[34,514,515],{"class":59},"copy_a[",[34,517,319],{"class":63},[34,519,67],{"class":59},[34,521,319],{"class":63},[34,523,477],{"class":59},[34,525,447],{"class":112},[34,527,482],{"class":63},[14,529,530],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[532,533,534],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .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":22,"searchDepth":44,"depth":44,"links":536},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":5,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",[546,5626,6734,8154,11143,12494,13983,15072,23835,23847,24446,24472,24596,24837,24902,24920,24933,24980,25104,25273,25472,25652,25857,25993,26088,26125,26138,26448,27189,27897,27918,28938,30569,30720,30733,30745,31044,50854,50869,50886,50919,53791,77139,93284,93305,93418,93539,94308,94970,95331,95369,95475,95575,95618,95644,95705,97359,97460,97485,97904,98404,99484,99767,100509,101011,101023,103039,104703,106206,107904,109821,111740,113762,117232,117664,118127,118876,121820,122168,122190,122546,125853,125865,126268,126291,126438,126605,126810,127111,127668,128325,130256,131854,132503,133997,135428,136663,138357,140109,142519,142635,143570,143781,144666,145901,146129,146142,147297,149709,152077,155398,157875,159519,161296,163309,166361,168541,171068,173262],{"id":547,"title":548,"body":549,"description":22,"extension":538,"meta":5621,"navigation":540,"path":5622,"seo":5623,"stem":5624,"__hash__":5625},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":550,"toc":5593},[551,554,559,562,566,579,583,588,591,594,597,600,603,631,635,638,641,644,647,695,699,717,719,733,736,744,747,1603,1610,1627,1631,1717,1721,1727,1813,1817,1855,1859,1923,1927,1931,1937,1948,1952,1957,1961,1966,1970,1975,1979,1983,1988,2251,2256,2394,2399,2656,2659,2667,2671,2676,2779,2782,3088,3097,3198,3201,3204,3207,3210,3470,3475,3615,3618,3797,3800,3928,3931,4083,4087,4092,4095,4106,4114,4117,4224,4228,4232,4237,4287,4292,4297,4321,4326,4379,4382,4387,4564,4569,4854,4859,5256,5260,5265,5322,5327,5335,5338,5478,5481,5590],[10,552,548],{"id":553},"_1基础入门",[555,556,558],"h2",{"id":557},"_11注释","1.1注释",[14,560,561],{},"\u002F\u002F或者\u002F* *\u002F",[555,563,565],{"id":564},"_12命名","1.2命名",[567,568,569,573,576],"ol",{},[570,571,572],"li",{},"字母数字下划线",[570,574,575],{},"开头必须是字母或_",[570,577,578],{},"不能使用关键词",[555,580,582],{"id":581},"_13数据类型","1.3数据类型",[584,585,587],"h3",{"id":586},"_131整形","1.3.1整形",[14,589,590],{},"short 短整形 2",[14,592,593],{},"int 整形 4",[14,595,596],{},"long 长整形 win4 linux32位4 linux64位8",[14,598,599],{},"long long 长长整形 8",[14,601,602],{},"利用sizeof可以求数据类型占用的内存空间大小",[25,604,608],{"className":605,"code":606,"language":607,"meta":22,"style":22},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[31,609,610,624],{"__ignoreMap":22},[34,611,612,615,618,621],{"class":36,"line":37},[34,613,614],{"class":112},"sizeof",[34,616,617],{"class":59},"(",[34,619,620],{"class":112},"int",[34,622,623],{"class":59},")\n",[34,625,626,628],{"class":36,"line":44},[34,627,614],{"class":112},[34,629,630],{"class":59},"(num)\n",[584,632,634],{"id":633},"_132浮点型","1.3.2浮点型",[14,636,637],{},"float 单精度 4节 7位有效数字",[14,639,640],{},"double 双精度 8节 15-16有效数字",[14,642,643],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,645,646],{},"注意点：",[25,648,650],{"className":605,"code":649,"language":607,"meta":22,"style":22},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[31,651,652,674],{"__ignoreMap":22},[34,653,654,657,660,662,665,668,671],{"class":36,"line":37},[34,655,656],{"class":112},"float",[34,658,659],{"class":59}," f1",[34,661,447],{"class":112},[34,663,664],{"class":63},"3.14",[34,666,667],{"class":112},"f",[34,669,670],{"class":59},";",[34,672,673],{"class":40}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[34,675,676,678,681,683,685,688,690,692],{"class":36,"line":44},[34,677,656],{"class":112},[34,679,680],{"class":59}," f2",[34,682,447],{"class":112},[34,684,309],{"class":63},[34,686,687],{"class":112},"e",[34,689,70],{"class":63},[34,691,670],{"class":59},[34,693,694],{"class":40}," \u002F\u002F科学记数法\n",[584,696,698],{"id":697},"_133字符型","1.3.3字符型",[25,700,702],{"className":605,"code":701,"language":607,"meta":22,"style":22},"char ch='a'\n",[31,703,704],{"__ignoreMap":22},[34,705,706,709,712,714],{"class":36,"line":37},[34,707,708],{"class":112},"char",[34,710,711],{"class":59}," ch",[34,713,447],{"class":112},[34,715,716],{"class":187},"'a'\n",[14,718,646],{},[567,720,721,724,727,730],{},[570,722,723],{},"在显示字符型变量时，只能单引号，双引号x",[570,725,726],{},"单引号内只能一个字符，不能字符串",[570,728,729],{},"c和c++字符型变量只占用一个字符",[570,731,732],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,734,735],{},"ASCII码大致由以下两部分组成：",[567,737,738,741],{},[570,739,740],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[570,742,743],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,745,746],{},"ASCII码表格：",[748,749,750,794],"table",{},[751,752,753],"thead",{},[754,755,756,764,769,773,778,782,786,790],"tr",{},[757,758,759,763],"th",{},[760,761,762],"strong",{},"ASCII","值",[757,765,766],{},[760,767,768],{},"控制字符",[757,770,771,763],{},[760,772,762],{},[757,774,775],{},[760,776,777],{},"字符",[757,779,780,763],{},[760,781,762],{},[757,783,784],{},[760,785,777],{},[757,787,788,763],{},[760,789,762],{},[757,791,792],{},[760,793,777],{},[795,796,797,823,848,873,898,923,948,973,998,1023,1049,1075,1101,1126,1151,1177,1203,1227,1252,1277,1302,1327,1352,1377,1402,1427,1452,1477,1502,1527,1551,1577],"tbody",{},[754,798,799,802,805,808,811,814,817,820],{},[800,801,319],"td",{},[800,803,804],{},"NUT",[800,806,807],{},"32",[800,809,810],{},"(space)",[800,812,813],{},"64",[800,815,816],{},"@",[800,818,819],{},"96",[800,821,822],{},"、",[754,824,825,827,830,833,836,839,842,845],{},[800,826,64],{},[800,828,829],{},"SOH",[800,831,832],{},"33",[800,834,835],{},"!",[800,837,838],{},"65",[800,840,841],{},"A",[800,843,844],{},"97",[800,846,847],{},"a",[754,849,850,852,855,858,861,864,867,870],{},[800,851,70],{},[800,853,854],{},"STX",[800,856,857],{},"34",[800,859,860],{},"\"",[800,862,863],{},"66",[800,865,866],{},"B",[800,868,869],{},"98",[800,871,872],{},"b",[754,874,875,877,880,883,886,889,892,895],{},[800,876,309],{},[800,878,879],{},"ETX",[800,881,882],{},"35",[800,884,885],{},"#",[800,887,888],{},"67",[800,890,891],{},"C",[800,893,894],{},"99",[800,896,897],{},"c",[754,899,900,902,905,908,911,914,917,920],{},[800,901,217],{},[800,903,904],{},"EOT",[800,906,907],{},"36",[800,909,910],{},"$",[800,912,913],{},"68",[800,915,916],{},"D",[800,918,919],{},"100",[800,921,922],{},"d",[754,924,925,928,931,934,937,940,943,946],{},[800,926,927],{},"5",[800,929,930],{},"ENQ",[800,932,933],{},"37",[800,935,936],{},"%",[800,938,939],{},"69",[800,941,942],{},"E",[800,944,945],{},"101",[800,947,687],{},[754,949,950,953,956,959,962,965,968,971],{},[800,951,952],{},"6",[800,954,955],{},"ACK",[800,957,958],{},"38",[800,960,961],{},"&",[800,963,964],{},"70",[800,966,967],{},"F",[800,969,970],{},"102",[800,972,667],{},[754,974,975,978,981,984,986,989,992,995],{},[800,976,977],{},"7",[800,979,980],{},"BEL",[800,982,983],{},"39",[800,985,67],{},[800,987,988],{},"71",[800,990,991],{},"G",[800,993,994],{},"103",[800,996,997],{},"g",[754,999,1000,1003,1006,1009,1011,1014,1017,1020],{},[800,1001,1002],{},"8",[800,1004,1005],{},"BS",[800,1007,1008],{},"40",[800,1010,617],{},[800,1012,1013],{},"72",[800,1015,1016],{},"H",[800,1018,1019],{},"104",[800,1021,1022],{},"h",[754,1024,1025,1028,1031,1034,1037,1040,1043,1046],{},[800,1026,1027],{},"9",[800,1029,1030],{},"HT",[800,1032,1033],{},"41",[800,1035,1036],{},")",[800,1038,1039],{},"73",[800,1041,1042],{},"I",[800,1044,1045],{},"105",[800,1047,1048],{},"i",[754,1050,1051,1054,1057,1060,1063,1066,1069,1072],{},[800,1052,1053],{},"10",[800,1055,1056],{},"LF",[800,1058,1059],{},"42",[800,1061,1062],{},"*",[800,1064,1065],{},"74",[800,1067,1068],{},"J",[800,1070,1071],{},"106",[800,1073,1074],{},"j",[754,1076,1077,1080,1083,1086,1089,1092,1095,1098],{},[800,1078,1079],{},"11",[800,1081,1082],{},"VT",[800,1084,1085],{},"43",[800,1087,1088],{},"+",[800,1090,1091],{},"75",[800,1093,1094],{},"K",[800,1096,1097],{},"107",[800,1099,1100],{},"k",[754,1102,1103,1106,1109,1112,1114,1117,1120,1123],{},[800,1104,1105],{},"12",[800,1107,1108],{},"FF",[800,1110,1111],{},"44",[800,1113,67],{},[800,1115,1116],{},"76",[800,1118,1119],{},"L",[800,1121,1122],{},"108",[800,1124,1125],{},"l",[754,1127,1128,1131,1134,1137,1139,1142,1145,1148],{},[800,1129,1130],{},"13",[800,1132,1133],{},"CR",[800,1135,1136],{},"45",[800,1138,113],{},[800,1140,1141],{},"77",[800,1143,1144],{},"M",[800,1146,1147],{},"109",[800,1149,1150],{},"m",[754,1152,1153,1156,1159,1162,1165,1168,1171,1174],{},[800,1154,1155],{},"14",[800,1157,1158],{},"SO",[800,1160,1161],{},"46",[800,1163,1164],{},".",[800,1166,1167],{},"78",[800,1169,1170],{},"N",[800,1172,1173],{},"110",[800,1175,1176],{},"n",[754,1178,1179,1182,1185,1188,1191,1194,1197,1200],{},[800,1180,1181],{},"15",[800,1183,1184],{},"SI",[800,1186,1187],{},"47",[800,1189,1190],{},"\u002F",[800,1192,1193],{},"79",[800,1195,1196],{},"O",[800,1198,1199],{},"111",[800,1201,1202],{},"o",[754,1204,1205,1208,1211,1214,1216,1219,1222,1225],{},[800,1206,1207],{},"16",[800,1209,1210],{},"DLE",[800,1212,1213],{},"48",[800,1215,319],{},[800,1217,1218],{},"80",[800,1220,1221],{},"P",[800,1223,1224],{},"112",[800,1226,14],{},[754,1228,1229,1232,1235,1238,1240,1243,1246,1249],{},[800,1230,1231],{},"17",[800,1233,1234],{},"DCI",[800,1236,1237],{},"49",[800,1239,64],{},[800,1241,1242],{},"81",[800,1244,1245],{},"Q",[800,1247,1248],{},"113",[800,1250,1251],{},"q",[754,1253,1254,1257,1260,1263,1265,1268,1271,1274],{},[800,1255,1256],{},"18",[800,1258,1259],{},"DC2",[800,1261,1262],{},"50",[800,1264,70],{},[800,1266,1267],{},"82",[800,1269,1270],{},"R",[800,1272,1273],{},"114",[800,1275,1276],{},"r",[754,1278,1279,1282,1285,1288,1290,1293,1296,1299],{},[800,1280,1281],{},"19",[800,1283,1284],{},"DC3",[800,1286,1287],{},"51",[800,1289,309],{},[800,1291,1292],{},"83",[800,1294,1295],{},"S",[800,1297,1298],{},"115",[800,1300,1301],{},"s",[754,1303,1304,1307,1310,1313,1315,1318,1321,1324],{},[800,1305,1306],{},"20",[800,1308,1309],{},"DC4",[800,1311,1312],{},"52",[800,1314,217],{},[800,1316,1317],{},"84",[800,1319,1320],{},"T",[800,1322,1323],{},"116",[800,1325,1326],{},"t",[754,1328,1329,1332,1335,1338,1340,1343,1346,1349],{},[800,1330,1331],{},"21",[800,1333,1334],{},"NAK",[800,1336,1337],{},"53",[800,1339,927],{},[800,1341,1342],{},"85",[800,1344,1345],{},"U",[800,1347,1348],{},"117",[800,1350,1351],{},"u",[754,1353,1354,1357,1360,1363,1365,1368,1371,1374],{},[800,1355,1356],{},"22",[800,1358,1359],{},"SYN",[800,1361,1362],{},"54",[800,1364,952],{},[800,1366,1367],{},"86",[800,1369,1370],{},"V",[800,1372,1373],{},"118",[800,1375,1376],{},"v",[754,1378,1379,1382,1385,1388,1390,1393,1396,1399],{},[800,1380,1381],{},"23",[800,1383,1384],{},"TB",[800,1386,1387],{},"55",[800,1389,977],{},[800,1391,1392],{},"87",[800,1394,1395],{},"W",[800,1397,1398],{},"119",[800,1400,1401],{},"w",[754,1403,1404,1407,1410,1413,1415,1418,1421,1424],{},[800,1405,1406],{},"24",[800,1408,1409],{},"CAN",[800,1411,1412],{},"56",[800,1414,1002],{},[800,1416,1417],{},"88",[800,1419,1420],{},"X",[800,1422,1423],{},"120",[800,1425,1426],{},"x",[754,1428,1429,1432,1435,1438,1440,1443,1446,1449],{},[800,1430,1431],{},"25",[800,1433,1434],{},"EM",[800,1436,1437],{},"57",[800,1439,1027],{},[800,1441,1442],{},"89",[800,1444,1445],{},"Y",[800,1447,1448],{},"121",[800,1450,1451],{},"y",[754,1453,1454,1457,1460,1463,1465,1468,1471,1474],{},[800,1455,1456],{},"26",[800,1458,1459],{},"SUB",[800,1461,1462],{},"58",[800,1464,214],{},[800,1466,1467],{},"90",[800,1469,1470],{},"Z",[800,1472,1473],{},"122",[800,1475,1476],{},"z",[754,1478,1479,1482,1485,1488,1490,1493,1496,1499],{},[800,1480,1481],{},"27",[800,1483,1484],{},"ESC",[800,1486,1487],{},"59",[800,1489,670],{},[800,1491,1492],{},"91",[800,1494,1495],{},"[",[800,1497,1498],{},"123",[800,1500,1501],{},"{",[754,1503,1504,1507,1510,1513,1516,1519,1521,1524],{},[800,1505,1506],{},"28",[800,1508,1509],{},"FS",[800,1511,1512],{},"60",[800,1514,1515],{},"\u003C",[800,1517,1518],{},"92",[800,1520,1190],{},[800,1522,1523],{},"124",[800,1525,1526],{},"|",[754,1528,1529,1532,1535,1538,1540,1543,1545,1548],{},[800,1530,1531],{},"29",[800,1533,1534],{},"GS",[800,1536,1537],{},"61",[800,1539,447],{},[800,1541,1542],{},"93",[800,1544,477],{},[800,1546,1547],{},"125",[800,1549,1550],{},"}",[754,1552,1553,1556,1559,1562,1565,1568,1571,1574],{},[800,1554,1555],{},"30",[800,1557,1558],{},"RS",[800,1560,1561],{},"62",[800,1563,1564],{},">",[800,1566,1567],{},"94",[800,1569,1570],{},"^",[800,1572,1573],{},"126",[800,1575,1576],{},"`",[754,1578,1579,1582,1585,1588,1591,1594,1597,1600],{},[800,1580,1581],{},"31",[800,1583,1584],{},"US",[800,1586,1587],{},"63",[800,1589,1590],{},"?",[800,1592,1593],{},"95",[800,1595,1596],{},"_",[800,1598,1599],{},"127",[800,1601,1602],{},"DEL",[14,1604,1605,1606,1609],{},"ASCII 码大致由以下",[760,1607,1608],{},"两部分组","成：",[1611,1612,1613,1620],"ul",{},[570,1614,1615,1616,1619],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[760,1617,1618],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[570,1621,1622,1623,1626],{},"ASCII 打印字符：数字 ",[760,1624,1625],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[584,1628,1630],{"id":1629},"_134转义字符","1.3.4转义字符",[25,1632,1634],{"className":605,"code":1633,"language":607,"meta":22,"style":22},"\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",[31,1635,1636,1641,1657,1671,1676,1689,1694],{"__ignoreMap":22},[34,1637,1638],{"class":36,"line":37},[34,1639,1640],{"class":40},"\u002F\u002F换行符\n",[34,1642,1643,1646,1649,1652,1654],{"class":36,"line":44},[34,1644,1645],{"class":59},"cout ",[34,1647,1648],{"class":112},"\u003C\u003C",[34,1650,1651],{"class":187},"\"hello world\u002Fn\"",[34,1653,670],{"class":59},[34,1655,1656],{"class":40}," \u002F\u002F就等同于如下：\n",[34,1658,1659,1661,1663,1666,1668],{"class":36,"line":50},[34,1660,1645],{"class":59},[34,1662,1648],{"class":112},[34,1664,1665],{"class":187},"\"hello world\"",[34,1667,1648],{"class":112},[34,1669,1670],{"class":59},"endl;\n",[34,1672,1673],{"class":36,"line":56},[34,1674,1675],{"class":40},"\u002F\u002F反斜杠\n",[34,1677,1678,1680,1682,1685,1687],{"class":36,"line":107},[34,1679,1645],{"class":59},[34,1681,1648],{"class":112},[34,1683,1684],{"class":187},"\"\u002F\u002F\"",[34,1686,1648],{"class":112},[34,1688,1670],{"class":59},[34,1690,1691],{"class":36,"line":196},[34,1692,1693],{"class":40},"\u002F\u002F水平制表符\n",[34,1695,1696,1698,1700,1703,1706,1709,1711,1714],{"class":36,"line":202},[34,1697,1645],{"class":59},[34,1699,1648],{"class":112},[34,1701,1702],{"class":187},"\"aaaa",[34,1704,1705],{"class":63},"\\t",[34,1707,1708],{"class":187},"helloworld\"",[34,1710,1648],{"class":112},[34,1712,1713],{"class":59},"endl;",[34,1715,1716],{"class":40}," \u002F\u002F输出窗口时有对齐效果\n",[584,1718,1720],{"id":1719},"_135字符串型","1.3.5字符串型",[14,1722,1723,1724,1726],{},"char 变量名",[34,1725],{},"=\"字符串值\"",[25,1728,1730],{"className":605,"code":1729,"language":607,"meta":22,"style":22},"\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",[31,1731,1732,1737,1742,1747,1752,1766,1779,1784,1789,1800],{"__ignoreMap":22},[34,1733,1734],{"class":36,"line":37},[34,1735,1736],{"class":40},"\u002F\u002Fc风格字符串\n",[34,1738,1739],{"class":36,"line":44},[34,1740,1741],{"class":40},"\u002F\u002F注意事项：\n",[34,1743,1744],{"class":36,"line":50},[34,1745,1746],{"class":40},"\u002F\u002F1.char字符串名[]\n",[34,1748,1749],{"class":36,"line":56},[34,1750,1751],{"class":40},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[34,1753,1754,1756,1759,1761,1763],{"class":36,"line":107},[34,1755,708],{"class":112},[34,1757,1758],{"class":59}," str[]",[34,1760,447],{"class":112},[34,1762,1665],{"class":187},[34,1764,1765],{"class":59},";\n",[34,1767,1768,1770,1772,1775,1777],{"class":36,"line":196},[34,1769,1645],{"class":59},[34,1771,1648],{"class":112},[34,1773,1774],{"class":59},"str",[34,1776,1648],{"class":112},[34,1778,1670],{"class":59},[34,1780,1781],{"class":36,"line":202},[34,1782,1783],{"class":40},"\u002F\u002Fc++风格字符串\n",[34,1785,1786],{"class":36,"line":207},[34,1787,1788],{"class":40},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[34,1790,1791,1794,1796,1798],{"class":36,"line":222},[34,1792,1793],{"class":59},"string str2",[34,1795,447],{"class":112},[34,1797,1665],{"class":187},[34,1799,1765],{"class":59},[34,1801,1802,1804,1806,1809,1811],{"class":36,"line":227},[34,1803,1645],{"class":59},[34,1805,1648],{"class":112},[34,1807,1808],{"class":59},"str2",[34,1810,1648],{"class":112},[34,1812,1670],{"class":59},[584,1814,1816],{"id":1815},"_136布尔类型bool","1.3.6布尔类型bool",[25,1818,1820],{"className":605,"code":1819,"language":607,"meta":22,"style":22},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[31,1821,1822,1837],{"__ignoreMap":22},[34,1823,1824,1827,1830,1832,1835],{"class":36,"line":37},[34,1825,1826],{"class":112},"bool",[34,1828,1829],{"class":59}," flag",[34,1831,447],{"class":112},[34,1833,1834],{"class":63},"true",[34,1836,1765],{"class":59},[34,1838,1839,1842,1845,1848,1850,1852],{"class":36,"line":44},[34,1840,1841],{"class":59},"cout",[34,1843,1844],{"class":112},"\u003C\u003Csizeof",[34,1846,1847],{"class":59},"(flag)",[34,1849,1648],{"class":112},[34,1851,1713],{"class":59},[34,1853,1854],{"class":40}," \u002F\u002F查看布尔占内存空间\n",[555,1856,1858],{"id":1857},"_14键盘输入cin","1.4键盘输入cin",[25,1860,1862],{"className":605,"code":1861,"language":607,"meta":22,"style":22},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[31,1863,1864,1877,1894,1905],{"__ignoreMap":22},[34,1865,1866,1868,1871,1873,1875],{"class":36,"line":37},[34,1867,620],{"class":112},[34,1869,1870],{"class":59}," a",[34,1872,447],{"class":112},[34,1874,319],{"class":63},[34,1876,1765],{"class":59},[34,1878,1879,1881,1883,1886,1888,1890,1892],{"class":36,"line":44},[34,1880,1841],{"class":59},[34,1882,1648],{"class":112},[34,1884,1885],{"class":187},"\"请给整型变量a赋值\"",[34,1887,1648],{"class":112},[34,1889,847],{"class":59},[34,1891,1648],{"class":112},[34,1893,1670],{"class":59},[34,1895,1896,1899,1902],{"class":36,"line":50},[34,1897,1898],{"class":59},"cin ",[34,1900,1901],{"class":112},">>",[34,1903,1904],{"class":59}," a;\n",[34,1906,1907,1909,1911,1914,1917,1919,1921],{"class":36,"line":56},[34,1908,1645],{"class":59},[34,1910,1648],{"class":112},[34,1912,1913],{"class":187}," \"整型变量a=\"",[34,1915,1916],{"class":112}," \u003C\u003C",[34,1918,847],{"class":59},[34,1920,1648],{"class":112},[34,1922,1670],{"class":59},[555,1924,1926],{"id":1925},"_15运算符","1.5运算符",[584,1928,1930],{"id":1929},"_151算术运算符","1.5.1算术运算符",[14,1932,1933,1936],{},[20,1934],{"alt":22,"src":1935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[567,1938,1939,1942,1945],{},[570,1940,1941],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[570,1943,1944],{},"两个小数不可以做取模运算",[570,1946,1947],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[584,1949,1951],{"id":1950},"_152赋值运算符","1.5.2赋值运算符",[14,1953,1954],{},[20,1955],{"alt":22,"src":1956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[584,1958,1960],{"id":1959},"_153比较运算符","1.5.3比较运算符",[14,1962,1963],{},[20,1964],{"alt":22,"src":1965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[584,1967,1969],{"id":1968},"_154逻辑运算符","1.5.4逻辑运算符",[14,1971,1972],{},[20,1973],{"alt":22,"src":1974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[555,1976,1978],{"id":1977},"_16程序流程结构","1.6程序流程结构",[584,1980,1982],{"id":1981},"_161选择结构","1.6.1选择结构",[567,1984,1985],{},[570,1986,1987],{},"if语句\n单行、多行、多条件if语句",[25,1989,1991],{"className":605,"code":1990,"language":607,"meta":22,"style":22},"\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",[31,1992,1993,1998,2013,2018,2032,2037,2042,2051,2064,2068,2081,2085,2090,2094,2107,2111,2116,2136,2141,2155,2160,2189,2194,2211,2216,2221,2226,2240,2245],{"__ignoreMap":22},[34,1994,1995],{"class":36,"line":37},[34,1996,1997],{"class":40},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[34,1999,2000,2003,2006,2008,2011],{"class":36,"line":44},[34,2001,2002],{"class":112},"if",[34,2004,2005],{"class":59},"(score",[34,2007,1564],{"class":112},[34,2009,2010],{"class":63},"600",[34,2012,623],{"class":59},[34,2014,2015],{"class":36,"line":50},[34,2016,2017],{"class":59},"{\n",[34,2019,2020,2023,2025,2028,2030],{"class":36,"line":56},[34,2021,2022],{"class":59},"    cout",[34,2024,1648],{"class":112},[34,2026,2027],{"class":187},"'这是单行if语句'",[34,2029,1648],{"class":112},[34,2031,1670],{"class":59},[34,2033,2034],{"class":36,"line":107},[34,2035,2036],{"class":59},"}\n",[34,2038,2039],{"class":36,"line":196},[34,2040,2041],{"class":40},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[34,2043,2044,2046,2048],{"class":36,"line":202},[34,2045,1898],{"class":59},[34,2047,1901],{"class":112},[34,2049,2050],{"class":59}," score\n",[34,2052,2053,2055,2057,2060,2062],{"class":36,"line":207},[34,2054,2002],{"class":112},[34,2056,2005],{"class":59},[34,2058,2059],{"class":112},"\u003C=",[34,2061,2010],{"class":63},[34,2063,623],{"class":59},[34,2065,2066],{"class":36,"line":222},[34,2067,2017],{"class":59},[34,2069,2070,2072,2074,2077,2079],{"class":36,"line":227},[34,2071,2022],{"class":59},[34,2073,1901],{"class":112},[34,2075,2076],{"class":187},"\"小于等于600\"",[34,2078,1648],{"class":112},[34,2080,1670],{"class":59},[34,2082,2083],{"class":36,"line":232},[34,2084,2036],{"class":59},[34,2086,2087],{"class":36,"line":238},[34,2088,2089],{"class":112},"else\n",[34,2091,2092],{"class":36,"line":244},[34,2093,2017],{"class":59},[34,2095,2096,2098,2100,2103,2105],{"class":36,"line":250},[34,2097,2022],{"class":59},[34,2099,1901],{"class":112},[34,2101,2102],{"class":187},"\"大于600\"",[34,2104,1901],{"class":112},[34,2106,1670],{"class":59},[34,2108,2109],{"class":36,"line":256},[34,2110,2036],{"class":59},[34,2112,2113],{"class":36,"line":261},[34,2114,2115],{"class":40},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[34,2117,2118,2120,2123,2125,2127,2130,2132,2134],{"class":36,"line":267},[34,2119,2002],{"class":112},[34,2121,2122],{"class":59}," (",[34,2124,319],{"class":63},[34,2126,1515],{"class":112},[34,2128,2129],{"class":59},"num",[34,2131,1515],{"class":112},[34,2133,919],{"class":63},[34,2135,623],{"class":59},[34,2137,2139],{"class":36,"line":2138},18,[34,2140,2017],{"class":59},[34,2142,2144,2146,2148,2151,2153],{"class":36,"line":2143},19,[34,2145,2022],{"class":59},[34,2147,1648],{"class":112},[34,2149,2150],{"class":187},"\"小于100\"",[34,2152,1648],{"class":112},[34,2154,1670],{"class":59},[34,2156,2158],{"class":36,"line":2157},20,[34,2159,2036],{"class":59},[34,2161,2163,2166,2169,2172,2175,2177,2180,2182,2184,2187],{"class":36,"line":2162},21,[34,2164,2165],{"class":112},"else",[34,2167,2168],{"class":112}," if",[34,2170,2171],{"class":59}," (nmu",[34,2173,2174],{"class":112},">=",[34,2176,919],{"class":63},[34,2178,2179],{"class":112},"&&",[34,2181,2129],{"class":59},[34,2183,1515],{"class":112},[34,2185,2186],{"class":63},"200",[34,2188,623],{"class":59},[34,2190,2192],{"class":36,"line":2191},22,[34,2193,2017],{"class":59},[34,2195,2197,2199,2201,2204,2206,2208],{"class":36,"line":2196},23,[34,2198,2022],{"class":59},[34,2200,1648],{"class":112},[34,2202,2203],{"class":187},"\"不小于100且小于200\"",[34,2205,1648],{"class":112},[34,2207,1713],{"class":59},[34,2209,2210],{"class":40}," \u002F\u002F可以无限else if,python中是elif：\n",[34,2212,2214],{"class":36,"line":2213},24,[34,2215,2036],{"class":59},[34,2217,2219],{"class":36,"line":2218},25,[34,2220,2089],{"class":112},[34,2222,2224],{"class":36,"line":2223},26,[34,2225,2017],{"class":59},[34,2227,2229,2231,2233,2236,2238],{"class":36,"line":2228},27,[34,2230,2022],{"class":59},[34,2232,1648],{"class":112},[34,2234,2235],{"class":187},"\"不小于200\"",[34,2237,1648],{"class":112},[34,2239,1670],{"class":59},[34,2241,2243],{"class":36,"line":2242},28,[34,2244,2036],{"class":59},[34,2246,2248],{"class":36,"line":2247},29,[34,2249,2250],{"class":40},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[567,2252,2253],{"start":44},[570,2254,2255],{},"三目运算符",[25,2257,2259],{"className":605,"code":2258,"language":607,"meta":22,"style":22},"\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",[31,2260,2261,2266,2271,2297,2319,2336,2341,2364,2379],{"__ignoreMap":22},[34,2262,2263],{"class":36,"line":37},[34,2264,2265],{"class":40},"\u002F\u002F创建三个变量a,b,c\n",[34,2267,2268],{"class":36,"line":44},[34,2269,2270],{"class":40},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[34,2272,2273,2275,2277,2279,2281,2284,2286,2288,2291,2293,2295],{"class":36,"line":50},[34,2274,620],{"class":112},[34,2276,1870],{"class":59},[34,2278,447],{"class":112},[34,2280,1306],{"class":63},[34,2282,2283],{"class":59},",b",[34,2285,447],{"class":112},[34,2287,1053],{"class":63},[34,2289,2290],{"class":59},",c",[34,2292,447],{"class":112},[34,2294,319],{"class":63},[34,2296,1765],{"class":59},[34,2298,2299,2301,2303,2306,2308,2310,2312,2314,2316],{"class":36,"line":56},[34,2300,897],{"class":59},[34,2302,447],{"class":112},[34,2304,2305],{"class":59},"(a",[34,2307,1564],{"class":112},[34,2309,872],{"class":59},[34,2311,1590],{"class":112},[34,2313,847],{"class":59},[34,2315,214],{"class":112},[34,2317,2318],{"class":59},"b)\n",[34,2320,2321,2323,2325,2328,2330,2332,2334],{"class":36,"line":107},[34,2322,1841],{"class":59},[34,2324,1648],{"class":112},[34,2326,2327],{"class":187},"\"c=\"",[34,2329,1648],{"class":112},[34,2331,897],{"class":59},[34,2333,1648],{"class":112},[34,2335,1670],{"class":59},[34,2337,2338],{"class":36,"line":196},[34,2339,2340],{"class":40},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[34,2342,2343,2345,2347,2349,2351,2353,2355,2358,2360,2362],{"class":36,"line":202},[34,2344,2305],{"class":59},[34,2346,1564],{"class":112},[34,2348,872],{"class":59},[34,2350,1590],{"class":112},[34,2352,847],{"class":59},[34,2354,214],{"class":112},[34,2356,2357],{"class":59},"b)",[34,2359,447],{"class":112},[34,2361,919],{"class":63},[34,2363,1765],{"class":59},[34,2365,2366,2368,2370,2372,2374,2376],{"class":36,"line":207},[34,2367,1841],{"class":59},[34,2369,1648],{"class":112},[34,2371,847],{"class":59},[34,2373,1648],{"class":112},[34,2375,1713],{"class":59},[34,2377,2378],{"class":40}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[34,2380,2381,2383,2385,2387,2389,2391],{"class":36,"line":222},[34,2382,1841],{"class":59},[34,2384,1648],{"class":112},[34,2386,872],{"class":59},[34,2388,1648],{"class":112},[34,2390,1713],{"class":59},[34,2392,2393],{"class":40}," \u002F\u002F10   a>b,b还是原值\n",[567,2395,2396],{"start":50},[570,2397,2398],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[25,2400,2402],{"className":605,"code":2401,"language":607,"meta":22,"style":22},"\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",[31,2403,2404,2409,2417,2431,2441,2445,2459,2472,2482,2490,2495,2520,2541,2563,2584,2606,2627,2647,2652],{"__ignoreMap":22},[34,2405,2406],{"class":36,"line":37},[34,2407,2408],{"class":40},"\u002F\u002F案例-电影打分\n",[34,2410,2411,2414],{"class":36,"line":44},[34,2412,2413],{"class":112},"#include",[34,2415,2416],{"class":187},"\u003Ciostream>\n",[34,2418,2419,2422,2425,2429],{"class":36,"line":50},[34,2420,2421],{"class":112},"using",[34,2423,2424],{"class":112}," namespace",[34,2426,2428],{"class":2427},"sScJk"," std",[34,2430,1765],{"class":59},[34,2432,2433,2435,2438],{"class":36,"line":56},[34,2434,620],{"class":112},[34,2436,2437],{"class":2427}," main",[34,2439,2440],{"class":59},"()\n",[34,2442,2443],{"class":36,"line":107},[34,2444,2017],{"class":59},[34,2446,2447,2450,2453,2455,2457],{"class":36,"line":196},[34,2448,2449],{"class":112},"    int",[34,2451,2452],{"class":59}," score",[34,2454,447],{"class":112},[34,2456,319],{"class":63},[34,2458,1765],{"class":59},[34,2460,2461,2463,2465,2468,2470],{"class":36,"line":202},[34,2462,2022],{"class":59},[34,2464,1648],{"class":112},[34,2466,2467],{"class":187},"\"电影打分：\"",[34,2469,1648],{"class":112},[34,2471,1670],{"class":59},[34,2473,2474,2477,2479],{"class":36,"line":207},[34,2475,2476],{"class":59},"    cin",[34,2478,1901],{"class":112},[34,2480,2481],{"class":59},"score;\n",[34,2483,2484,2487],{"class":36,"line":222},[34,2485,2486],{"class":112},"    switch",[34,2488,2489],{"class":59},"(score)\n",[34,2491,2492],{"class":36,"line":227},[34,2493,2494],{"class":59},"    {\n",[34,2496,2497,2500,2503,2506,2508,2511,2513,2515,2518],{"class":36,"line":232},[34,2498,2499],{"class":112},"        case",[34,2501,2502],{"class":63}," 10",[34,2504,2505],{"class":59},":cout",[34,2507,1648],{"class":112},[34,2509,2510],{"class":187},"\"经典\"",[34,2512,1648],{"class":112},[34,2514,1713],{"class":59},[34,2516,2517],{"class":112},"break",[34,2519,1765],{"class":59},[34,2521,2522,2524,2527,2529,2531,2533,2535,2537,2539],{"class":36,"line":238},[34,2523,2499],{"class":112},[34,2525,2526],{"class":63}," 9",[34,2528,2505],{"class":59},[34,2530,1648],{"class":112},[34,2532,2510],{"class":187},[34,2534,1648],{"class":112},[34,2536,1713],{"class":59},[34,2538,2517],{"class":112},[34,2540,1765],{"class":59},[34,2542,2543,2545,2548,2550,2552,2555,2557,2559,2561],{"class":36,"line":244},[34,2544,2499],{"class":112},[34,2546,2547],{"class":63}," 8",[34,2549,2505],{"class":59},[34,2551,1648],{"class":112},[34,2553,2554],{"class":187},"\"非常好\"",[34,2556,1648],{"class":112},[34,2558,1713],{"class":59},[34,2560,2517],{"class":112},[34,2562,1765],{"class":59},[34,2564,2565,2567,2570,2572,2574,2576,2578,2580,2582],{"class":36,"line":250},[34,2566,2499],{"class":112},[34,2568,2569],{"class":63}," 7",[34,2571,2505],{"class":59},[34,2573,1648],{"class":112},[34,2575,2554],{"class":187},[34,2577,1648],{"class":112},[34,2579,1713],{"class":59},[34,2581,2517],{"class":112},[34,2583,1765],{"class":59},[34,2585,2586,2588,2591,2593,2595,2598,2600,2602,2604],{"class":36,"line":256},[34,2587,2499],{"class":112},[34,2589,2590],{"class":63}," 6",[34,2592,2505],{"class":59},[34,2594,1648],{"class":112},[34,2596,2597],{"class":187},"\"一般\"",[34,2599,1648],{"class":112},[34,2601,1713],{"class":59},[34,2603,2517],{"class":112},[34,2605,1765],{"class":59},[34,2607,2608,2610,2613,2615,2617,2619,2621,2623,2625],{"class":36,"line":261},[34,2609,2499],{"class":112},[34,2611,2612],{"class":63}," 5",[34,2614,2505],{"class":59},[34,2616,1648],{"class":112},[34,2618,2597],{"class":187},[34,2620,1648],{"class":112},[34,2622,1713],{"class":59},[34,2624,2517],{"class":112},[34,2626,1765],{"class":59},[34,2628,2629,2632,2634,2636,2639,2641,2643,2645],{"class":36,"line":267},[34,2630,2631],{"class":112},"        default",[34,2633,2505],{"class":59},[34,2635,1648],{"class":112},[34,2637,2638],{"class":187},"\"烂片\"",[34,2640,1648],{"class":112},[34,2642,1713],{"class":59},[34,2644,2517],{"class":112},[34,2646,1765],{"class":59},[34,2648,2649],{"class":36,"line":2138},[34,2650,2651],{"class":59},"    }\n",[34,2653,2654],{"class":36,"line":2143},[34,2655,2036],{"class":59},[14,2657,2658],{},"if和switch区别：",[1611,2660,2661,2664],{},[570,2662,2663],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[570,2665,2666],{},"switch优点：结构清晰，执行效率高",[584,2668,2670],{"id":2669},"_162循环结构","1.6.2循环结构",[567,2672,2673],{},[570,2674,2675],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[25,2677,2679],{"className":605,"code":2678,"language":607,"meta":22,"style":22},"\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",[31,2680,2681,2686,2694,2698,2711,2725,2729,2749,2759,2763,2775],{"__ignoreMap":22},[34,2682,2683],{"class":36,"line":37},[34,2684,2685],{"class":40},"\u002F\u002F打印0-9数字\n",[34,2687,2688,2690,2692],{"class":36,"line":44},[34,2689,620],{"class":112},[34,2691,2437],{"class":2427},[34,2693,2440],{"class":59},[34,2695,2696],{"class":36,"line":50},[34,2697,2017],{"class":59},[34,2699,2700,2702,2705,2707,2709],{"class":36,"line":56},[34,2701,2449],{"class":112},[34,2703,2704],{"class":59}," num",[34,2706,447],{"class":112},[34,2708,319],{"class":63},[34,2710,1765],{"class":59},[34,2712,2713,2716,2719,2721,2723],{"class":36,"line":107},[34,2714,2715],{"class":112},"    while",[34,2717,2718],{"class":59},"(num",[34,2720,1515],{"class":112},[34,2722,1053],{"class":63},[34,2724,623],{"class":59},[34,2726,2727],{"class":36,"line":196},[34,2728,2494],{"class":59},[34,2730,2731,2734,2737,2739,2741,2743,2746],{"class":36,"line":202},[34,2732,2733],{"class":2427},"       std",[34,2735,2736],{"class":59},"::cout",[34,2738,1648],{"class":112},[34,2740,2129],{"class":59},[34,2742,1648],{"class":112},[34,2744,2745],{"class":2427},"std",[34,2747,2748],{"class":59},"::endl;\n",[34,2750,2751,2754,2757],{"class":36,"line":207},[34,2752,2753],{"class":59},"        num",[34,2755,2756],{"class":112},"++",[34,2758,1765],{"class":59},[34,2760,2761],{"class":36,"line":222},[34,2762,2651],{"class":59},[34,2764,2765,2768,2770,2773],{"class":36,"line":227},[34,2766,2767],{"class":2427},"    system",[34,2769,617],{"class":59},[34,2771,2772],{"class":187},"\"pause\"",[34,2774,623],{"class":59},[34,2776,2777],{"class":36,"line":232},[34,2778,2036],{"class":59},[14,2780,2781],{},"注意：写好循环条件，避免死循环情况",[25,2783,2785],{"className":605,"code":2784,"language":607,"meta":22,"style":22},"\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",[31,2786,2787,2792,2799,2806,2816,2824,2828,2833,2860,2865,2870,2878,2905,2910,2915,2928,2938,2942,2952,2957,2970,2975,2989,2994,3009,3013,3026,3030,3035,3039,3053,3061,3066,3072,3078,3083],{"__ignoreMap":22},[34,2788,2789],{"class":36,"line":37},[34,2790,2791],{"class":40},"\u002F\u002F循环结构-猜数字\n",[34,2793,2794,2796],{"class":36,"line":44},[34,2795,2413],{"class":112},[34,2797,2798],{"class":187}," \u003Ciostream>\n",[34,2800,2801,2803],{"class":36,"line":50},[34,2802,2413],{"class":112},[34,2804,2805],{"class":187}," \u003Cctime>\n",[34,2807,2808,2810,2812,2814],{"class":36,"line":56},[34,2809,2421],{"class":112},[34,2811,2424],{"class":112},[34,2813,2428],{"class":2427},[34,2815,1765],{"class":59},[34,2817,2818,2820,2822],{"class":36,"line":107},[34,2819,620],{"class":112},[34,2821,2437],{"class":2427},[34,2823,2440],{"class":59},[34,2825,2826],{"class":36,"line":196},[34,2827,2017],{"class":59},[34,2829,2830],{"class":36,"line":202},[34,2831,2832],{"class":40},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[34,2834,2835,2838,2841,2844,2847,2849,2852,2854,2857],{"class":36,"line":207},[34,2836,2837],{"class":2427},"    srand",[34,2839,2840],{"class":59},"((",[34,2842,2843],{"class":112},"unsigned",[34,2845,2846],{"class":112}," int",[34,2848,1036],{"class":59},[34,2850,2851],{"class":2427},"time",[34,2853,617],{"class":59},[34,2855,2856],{"class":63},"NULL",[34,2858,2859],{"class":59},"));\n",[34,2861,2862],{"class":36,"line":222},[34,2863,2864],{"emptyLinePlaceholder":540},"\n",[34,2866,2867],{"class":36,"line":227},[34,2868,2869],{"class":40},"    \u002F\u002F1.系统生成随机数\n",[34,2871,2872,2875],{"class":36,"line":232},[34,2873,2874],{"class":40},"    \u002F\u002Frand()%100",[34,2876,2877],{"class":40}," \u002F\u002F生成0-99的随机数\n",[34,2879,2880,2882,2884,2886,2889,2892,2894,2896,2898,2900,2902],{"class":36,"line":238},[34,2881,2449],{"class":112},[34,2883,2704],{"class":59},[34,2885,447],{"class":112},[34,2887,2888],{"class":2427},"rand",[34,2890,2891],{"class":59},"()",[34,2893,936],{"class":112},[34,2895,919],{"class":63},[34,2897,1088],{"class":112},[34,2899,64],{"class":63},[34,2901,670],{"class":59},[34,2903,2904],{"class":40}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[34,2906,2907],{"class":36,"line":244},[34,2908,2909],{"class":40},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[34,2911,2912],{"class":36,"line":250},[34,2913,2914],{"class":40},"    \u002F\u002F2.玩家猜测\n",[34,2916,2917,2919,2922,2924,2926],{"class":36,"line":256},[34,2918,2449],{"class":112},[34,2920,2921],{"class":59}," val",[34,2923,447],{"class":112},[34,2925,319],{"class":63},[34,2927,1765],{"class":59},[34,2929,2930,2932,2934,2936],{"class":36,"line":261},[34,2931,2715],{"class":112},[34,2933,2122],{"class":59},[34,2935,64],{"class":63},[34,2937,623],{"class":59},[34,2939,2940],{"class":36,"line":267},[34,2941,2494],{"class":59},[34,2943,2944,2947,2949],{"class":36,"line":2138},[34,2945,2946],{"class":59},"        cin",[34,2948,1901],{"class":112},[34,2950,2951],{"class":59},"val;\n",[34,2953,2954],{"class":36,"line":2143},[34,2955,2956],{"class":40},"        \u002F\u002F3.判断玩家猜测\n",[34,2958,2959,2962,2965,2967],{"class":36,"line":2157},[34,2960,2961],{"class":112},"        if",[34,2963,2964],{"class":59},"(val",[34,2966,1515],{"class":112},[34,2968,2969],{"class":59},"num) \n",[34,2971,2972],{"class":36,"line":2162},[34,2973,2974],{"class":59},"        {\n",[34,2976,2977,2980,2982,2985,2987],{"class":36,"line":2191},[34,2978,2979],{"class":59},"            cout",[34,2981,1648],{"class":112},[34,2983,2984],{"class":187},"\"猜小了！\"",[34,2986,1648],{"class":112},[34,2988,1670],{"class":59},[34,2990,2991],{"class":36,"line":2196},[34,2992,2993],{"class":59},"        }\n",[34,2995,2996,2999,3001,3004,3006],{"class":36,"line":2213},[34,2997,2998],{"class":112},"        else",[34,3000,2168],{"class":112},[34,3002,3003],{"class":59}," (val",[34,3005,1564],{"class":112},[34,3007,3008],{"class":59},"num)\n",[34,3010,3011],{"class":36,"line":2218},[34,3012,2974],{"class":59},[34,3014,3015,3017,3019,3022,3024],{"class":36,"line":2223},[34,3016,2979],{"class":59},[34,3018,1648],{"class":112},[34,3020,3021],{"class":187},"\"猜大了！\"",[34,3023,1648],{"class":112},[34,3025,1670],{"class":59},[34,3027,3028],{"class":36,"line":2228},[34,3029,2993],{"class":59},[34,3031,3032],{"class":36,"line":2242},[34,3033,3034],{"class":112},"        else\n",[34,3036,3037],{"class":36,"line":2247},[34,3038,2974],{"class":59},[34,3040,3042,3044,3046,3049,3051],{"class":36,"line":3041},30,[34,3043,2979],{"class":59},[34,3045,1648],{"class":112},[34,3047,3048],{"class":187},"\"猜对了！\"",[34,3050,1648],{"class":112},[34,3052,1670],{"class":59},[34,3054,3056,3059],{"class":36,"line":3055},31,[34,3057,3058],{"class":112},"            break",[34,3060,1765],{"class":59},[34,3062,3064],{"class":36,"line":3063},32,[34,3065,2993],{"class":59},[34,3067,3069],{"class":36,"line":3068},33,[34,3070,3071],{"class":40},"        \u002F\u002F猜对 退出游戏\n",[34,3073,3075],{"class":36,"line":3074},34,[34,3076,3077],{"class":40},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[34,3079,3081],{"class":36,"line":3080},35,[34,3082,2651],{"class":59},[34,3084,3086],{"class":36,"line":3085},36,[34,3087,2036],{"class":59},[567,3089,3090],{"start":44},[570,3091,3092,3093,3096],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[760,3094,3095],{},"do...while会先执行一次循环语句","，在判断循环语句",[25,3098,3100],{"className":605,"code":3099,"language":607,"meta":22,"style":22},"\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",[31,3101,3102,3107,3115,3119,3131,3139,3143,3160,3167,3171,3184,3194],{"__ignoreMap":22},[34,3103,3104],{"class":36,"line":37},[34,3105,3106],{"class":40},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[34,3108,3109,3111,3113],{"class":36,"line":44},[34,3110,620],{"class":112},[34,3112,2437],{"class":2427},[34,3114,2440],{"class":59},[34,3116,3117],{"class":36,"line":50},[34,3118,2017],{"class":59},[34,3120,3121,3123,3125,3127,3129],{"class":36,"line":56},[34,3122,2449],{"class":112},[34,3124,2704],{"class":59},[34,3126,447],{"class":112},[34,3128,319],{"class":63},[34,3130,1765],{"class":59},[34,3132,3133,3136],{"class":36,"line":107},[34,3134,3135],{"class":112},"    do",[34,3137,3138],{"class":59}," \n",[34,3140,3141],{"class":36,"line":196},[34,3142,2494],{"class":59},[34,3144,3145,3148,3150,3152,3154,3156,3158],{"class":36,"line":202},[34,3146,3147],{"class":2427},"        std",[34,3149,2736],{"class":59},[34,3151,1648],{"class":112},[34,3153,2129],{"class":59},[34,3155,1648],{"class":112},[34,3157,2745],{"class":2427},[34,3159,2748],{"class":59},[34,3161,3162,3164],{"class":36,"line":207},[34,3163,2753],{"class":59},[34,3165,3166],{"class":112},"++\n",[34,3168,3169],{"class":36,"line":222},[34,3170,2651],{"class":59},[34,3172,3173,3175,3177,3179,3181],{"class":36,"line":227},[34,3174,2715],{"class":112},[34,3176,2718],{"class":59},[34,3178,1515],{"class":112},[34,3180,1053],{"class":63},[34,3182,3183],{"class":59},");\n",[34,3185,3186,3188,3190,3192],{"class":36,"line":232},[34,3187,2767],{"class":2427},[34,3189,617],{"class":59},[34,3191,2772],{"class":187},[34,3193,3183],{"class":59},[34,3195,3196],{"class":36,"line":238},[34,3197,2036],{"class":59},[14,3199,3200],{},"案例-水仙花数",[14,3202,3203],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3205,3206],{},"例如：1^3+5^3+3^3=153",[14,3208,3209],{},"请用do...while语句，求出所有3位数的水仙花数",[25,3211,3213],{"className":605,"code":3212,"language":607,"meta":22,"style":22},"#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",[31,3214,3215,3221,3231,3239,3243,3248,3260,3266,3270,3275,3291,3307,3323,3338,3357,3372,3420,3424,3436,3440,3448,3452,3466],{"__ignoreMap":22},[34,3216,3217,3219],{"class":36,"line":37},[34,3218,2413],{"class":112},[34,3220,2798],{"class":187},[34,3222,3223,3225,3227,3229],{"class":36,"line":44},[34,3224,2421],{"class":112},[34,3226,2424],{"class":112},[34,3228,2428],{"class":2427},[34,3230,1765],{"class":59},[34,3232,3233,3235,3237],{"class":36,"line":50},[34,3234,620],{"class":112},[34,3236,2437],{"class":2427},[34,3238,2440],{"class":59},[34,3240,3241],{"class":36,"line":56},[34,3242,2017],{"class":59},[34,3244,3245],{"class":36,"line":107},[34,3246,3247],{"class":40},"    \u002F\u002F1.先打印所有三位数字\n",[34,3249,3250,3252,3254,3256,3258],{"class":36,"line":196},[34,3251,2449],{"class":112},[34,3253,2704],{"class":59},[34,3255,447],{"class":112},[34,3257,919],{"class":63},[34,3259,1765],{"class":59},[34,3261,3262,3264],{"class":36,"line":202},[34,3263,3135],{"class":112},[34,3265,3138],{"class":59},[34,3267,3268],{"class":36,"line":207},[34,3269,2494],{"class":59},[34,3271,3272],{"class":36,"line":222},[34,3273,3274],{"class":40},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[34,3276,3277,3280,3282,3284,3286,3288],{"class":36,"line":227},[34,3278,3279],{"class":112},"        int",[34,3281,1870],{"class":59},[34,3283,447],{"class":112},[34,3285,319],{"class":63},[34,3287,670],{"class":59},[34,3289,3290],{"class":40}," \u002F\u002F个位\n",[34,3292,3293,3295,3298,3300,3302,3304],{"class":36,"line":232},[34,3294,3279],{"class":112},[34,3296,3297],{"class":59}," b",[34,3299,447],{"class":112},[34,3301,319],{"class":63},[34,3303,670],{"class":59},[34,3305,3306],{"class":40}," \u002F\u002F十位\n",[34,3308,3309,3311,3314,3316,3318,3320],{"class":36,"line":238},[34,3310,3279],{"class":112},[34,3312,3313],{"class":59}," c",[34,3315,447],{"class":112},[34,3317,319],{"class":63},[34,3319,670],{"class":59},[34,3321,3322],{"class":40}," \u002F\u002F百位\n",[34,3324,3325,3328,3330,3332,3334,3336],{"class":36,"line":244},[34,3326,3327],{"class":59},"        a",[34,3329,447],{"class":112},[34,3331,2129],{"class":59},[34,3333,936],{"class":112},[34,3335,1053],{"class":63},[34,3337,1765],{"class":59},[34,3339,3340,3343,3345,3347,3349,3351,3353,3355],{"class":36,"line":250},[34,3341,3342],{"class":59},"        b",[34,3344,447],{"class":112},[34,3346,2129],{"class":59},[34,3348,1190],{"class":112},[34,3350,1053],{"class":63},[34,3352,936],{"class":112},[34,3354,1053],{"class":63},[34,3356,1765],{"class":59},[34,3358,3359,3362,3364,3366,3368,3370],{"class":36,"line":256},[34,3360,3361],{"class":59},"        c",[34,3363,447],{"class":112},[34,3365,2129],{"class":59},[34,3367,1190],{"class":112},[34,3369,919],{"class":63},[34,3371,1765],{"class":59},[34,3373,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3411,3414,3417],{"class":36,"line":261},[34,3375,2961],{"class":112},[34,3377,2305],{"class":59},[34,3379,1062],{"class":112},[34,3381,847],{"class":59},[34,3383,1062],{"class":112},[34,3385,847],{"class":59},[34,3387,1088],{"class":112},[34,3389,872],{"class":59},[34,3391,1062],{"class":112},[34,3393,872],{"class":59},[34,3395,1062],{"class":112},[34,3397,872],{"class":59},[34,3399,1088],{"class":112},[34,3401,897],{"class":59},[34,3403,1062],{"class":112},[34,3405,897],{"class":59},[34,3407,1062],{"class":112},[34,3409,3410],{"class":59},"c ",[34,3412,3413],{"class":112},"==",[34,3415,3416],{"class":59}," num)",[34,3418,3419],{"class":40}," \u002F\u002F如果是水仙花数，才打印\n",[34,3421,3422],{"class":36,"line":267},[34,3423,2974],{"class":59},[34,3425,3426,3428,3430,3432,3434],{"class":36,"line":2138},[34,3427,2979],{"class":59},[34,3429,1648],{"class":112},[34,3431,2129],{"class":59},[34,3433,1648],{"class":112},[34,3435,1670],{"class":59},[34,3437,3438],{"class":36,"line":2143},[34,3439,2993],{"class":59},[34,3441,3442,3444,3446],{"class":36,"line":2157},[34,3443,2753],{"class":59},[34,3445,2756],{"class":112},[34,3447,1765],{"class":59},[34,3449,3450],{"class":36,"line":2162},[34,3451,2651],{"class":59},[34,3453,3454,3456,3459,3461,3464],{"class":36,"line":2191},[34,3455,2715],{"class":112},[34,3457,3458],{"class":59}," (num ",[34,3460,1515],{"class":112},[34,3462,3463],{"class":63}," 1000",[34,3465,3183],{"class":59},[34,3467,3468],{"class":36,"line":2196},[34,3469,2036],{"class":59},[567,3471,3472],{"start":50},[570,3473,3474],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[25,3476,3478],{"className":605,"code":3477,"language":607,"meta":22,"style":22},"\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",[31,3479,3480,3485,3514,3518,3530,3534,3539,3550,3557,3561,3575,3579,3586,3590,3602,3611],{"__ignoreMap":22},[34,3481,3482],{"class":36,"line":37},[34,3483,3484],{"class":40},"\u002F\u002F从数字0-9打印\n",[34,3486,3487,3490,3492,3494,3497,3499,3501,3504,3506,3508,3510,3512],{"class":36,"line":44},[34,3488,3489],{"class":112},"for",[34,3491,617],{"class":59},[34,3493,620],{"class":112},[34,3495,3496],{"class":59}," i",[34,3498,447],{"class":112},[34,3500,319],{"class":63},[34,3502,3503],{"class":59},";i",[34,3505,1515],{"class":112},[34,3507,1053],{"class":63},[34,3509,3503],{"class":59},[34,3511,2756],{"class":112},[34,3513,623],{"class":59},[34,3515,3516],{"class":36,"line":50},[34,3517,2017],{"class":59},[34,3519,3520,3522,3524,3526,3528],{"class":36,"line":56},[34,3521,2022],{"class":59},[34,3523,1648],{"class":112},[34,3525,1048],{"class":59},[34,3527,1648],{"class":112},[34,3529,1670],{"class":59},[34,3531,3532],{"class":36,"line":107},[34,3533,2036],{"class":59},[34,3535,3536],{"class":36,"line":196},[34,3537,3538],{"class":40},"\u002F\u002F上式可以进行拆分\n",[34,3540,3541,3543,3545,3547],{"class":36,"line":202},[34,3542,620],{"class":112},[34,3544,3496],{"class":59},[34,3546,447],{"class":112},[34,3548,3549],{"class":63},"0\n",[34,3551,3552,3554],{"class":36,"line":207},[34,3553,3489],{"class":112},[34,3555,3556],{"class":59},"(;;;)\n",[34,3558,3559],{"class":36,"line":222},[34,3560,2017],{"class":59},[34,3562,3563,3566,3569,3571,3573],{"class":36,"line":227},[34,3564,3565],{"class":112},"    if",[34,3567,3568],{"class":59},"(i",[34,3570,2174],{"class":112},[34,3572,1053],{"class":63},[34,3574,623],{"class":59},[34,3576,3577],{"class":36,"line":232},[34,3578,2494],{"class":59},[34,3580,3581,3584],{"class":36,"line":238},[34,3582,3583],{"class":112},"        break",[34,3585,1765],{"class":59},[34,3587,3588],{"class":36,"line":244},[34,3589,2651],{"class":59},[34,3591,3592,3594,3596,3598,3600],{"class":36,"line":250},[34,3593,2022],{"class":59},[34,3595,1648],{"class":112},[34,3597,1048],{"class":59},[34,3599,1648],{"class":112},[34,3601,1670],{"class":59},[34,3603,3604,3607,3609],{"class":36,"line":256},[34,3605,3606],{"class":59},"    i",[34,3608,2756],{"class":112},[34,3610,1765],{"class":59},[34,3612,3613],{"class":36,"line":261},[34,3614,2036],{"class":59},[14,3616,3617],{},"小练习",[25,3619,3621],{"className":605,"code":3620,"language":607,"meta":22,"style":22},"#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",[31,3622,3623,3629,3639,3647,3651,3656,3661,3689,3693,3698,3703,3744,3748,3761,3765,3769,3773,3785,3789,3793],{"__ignoreMap":22},[34,3624,3625,3627],{"class":36,"line":37},[34,3626,2413],{"class":112},[34,3628,2416],{"class":187},[34,3630,3631,3633,3635,3637],{"class":36,"line":44},[34,3632,2421],{"class":112},[34,3634,2424],{"class":112},[34,3636,2428],{"class":2427},[34,3638,1765],{"class":59},[34,3640,3641,3643,3645],{"class":36,"line":50},[34,3642,620],{"class":112},[34,3644,2437],{"class":2427},[34,3646,2440],{"class":59},[34,3648,3649],{"class":36,"line":56},[34,3650,2017],{"class":59},[34,3652,3653],{"class":36,"line":107},[34,3654,3655],{"class":40},"    \u002F\u002F敲桌子案例\n",[34,3657,3658],{"class":36,"line":196},[34,3659,3660],{"class":40},"    \u002F\u002F1.先输出1-100的数字\n",[34,3662,3663,3666,3668,3670,3672,3674,3676,3679,3681,3683,3685,3687],{"class":36,"line":202},[34,3664,3665],{"class":112},"    for",[34,3667,617],{"class":59},[34,3669,620],{"class":112},[34,3671,3496],{"class":59},[34,3673,447],{"class":112},[34,3675,64],{"class":63},[34,3677,3678],{"class":59},"; i",[34,3680,2059],{"class":112},[34,3682,919],{"class":63},[34,3684,3678],{"class":59},[34,3686,2756],{"class":112},[34,3688,623],{"class":59},[34,3690,3691],{"class":36,"line":207},[34,3692,2494],{"class":59},[34,3694,3695],{"class":36,"line":222},[34,3696,3697],{"class":40},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[34,3699,3700],{"class":36,"line":227},[34,3701,3702],{"class":40},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[34,3704,3705,3707,3709,3711,3713,3715,3717,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742],{"class":36,"line":232},[34,3706,2961],{"class":112},[34,3708,3568],{"class":59},[34,3710,936],{"class":112},[34,3712,977],{"class":63},[34,3714,3413],{"class":112},[34,3716,319],{"class":63},[34,3718,3719],{"class":112}," ||",[34,3721,3496],{"class":59},[34,3723,936],{"class":112},[34,3725,1053],{"class":63},[34,3727,3413],{"class":112},[34,3729,977],{"class":63},[34,3731,3719],{"class":112},[34,3733,3496],{"class":59},[34,3735,1190],{"class":112},[34,3737,1053],{"class":63},[34,3739,3413],{"class":112},[34,3741,977],{"class":63},[34,3743,623],{"class":59},[34,3745,3746],{"class":36,"line":238},[34,3747,2974],{"class":59},[34,3749,3750,3752,3754,3757,3759],{"class":36,"line":244},[34,3751,2979],{"class":59},[34,3753,1648],{"class":112},[34,3755,3756],{"class":187},"\"敲桌子\"",[34,3758,1648],{"class":112},[34,3760,1670],{"class":59},[34,3762,3763],{"class":36,"line":250},[34,3764,2993],{"class":59},[34,3766,3767],{"class":36,"line":256},[34,3768,3034],{"class":112},[34,3770,3771],{"class":36,"line":261},[34,3772,2974],{"class":59},[34,3774,3775,3777,3779,3781,3783],{"class":36,"line":267},[34,3776,2979],{"class":59},[34,3778,1648],{"class":112},[34,3780,1048],{"class":59},[34,3782,1648],{"class":112},[34,3784,1670],{"class":59},[34,3786,3787],{"class":36,"line":2138},[34,3788,2993],{"class":59},[34,3790,3791],{"class":36,"line":2143},[34,3792,2651],{"class":59},[34,3794,3795],{"class":36,"line":2157},[34,3796,2036],{"class":59},[14,3798,3799],{},"嵌套实现星图",[25,3801,3803],{"className":605,"code":3802,"language":607,"meta":22,"style":22},"#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",[31,3804,3805,3811,3821,3829,3833,3859,3863,3892,3896,3907,3911,3920,3924],{"__ignoreMap":22},[34,3806,3807,3809],{"class":36,"line":37},[34,3808,2413],{"class":112},[34,3810,2416],{"class":187},[34,3812,3813,3815,3817,3819],{"class":36,"line":44},[34,3814,2421],{"class":112},[34,3816,2424],{"class":112},[34,3818,2428],{"class":2427},[34,3820,1765],{"class":59},[34,3822,3823,3825,3827],{"class":36,"line":50},[34,3824,620],{"class":112},[34,3826,2437],{"class":2427},[34,3828,2440],{"class":59},[34,3830,3831],{"class":36,"line":56},[34,3832,2017],{"class":59},[34,3834,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857],{"class":36,"line":107},[34,3836,3665],{"class":112},[34,3838,2122],{"class":59},[34,3840,620],{"class":112},[34,3842,3496],{"class":59},[34,3844,447],{"class":112},[34,3846,319],{"class":63},[34,3848,3503],{"class":59},[34,3850,1515],{"class":112},[34,3852,1053],{"class":63},[34,3854,3503],{"class":59},[34,3856,2756],{"class":112},[34,3858,623],{"class":59},[34,3860,3861],{"class":36,"line":196},[34,3862,2494],{"class":59},[34,3864,3865,3868,3870,3872,3875,3877,3879,3882,3884,3886,3888,3890],{"class":36,"line":202},[34,3866,3867],{"class":112},"        for",[34,3869,2122],{"class":59},[34,3871,620],{"class":112},[34,3873,3874],{"class":59}," j",[34,3876,447],{"class":112},[34,3878,319],{"class":63},[34,3880,3881],{"class":59},";j",[34,3883,1515],{"class":112},[34,3885,1053],{"class":63},[34,3887,3881],{"class":59},[34,3889,2756],{"class":112},[34,3891,623],{"class":59},[34,3893,3894],{"class":36,"line":207},[34,3895,2974],{"class":59},[34,3897,3898,3900,3902,3905],{"class":36,"line":222},[34,3899,2979],{"class":59},[34,3901,1648],{"class":112},[34,3903,3904],{"class":187},"\"*\"",[34,3906,1765],{"class":59},[34,3908,3909],{"class":36,"line":227},[34,3910,2993],{"class":59},[34,3912,3913,3916,3918],{"class":36,"line":232},[34,3914,3915],{"class":59},"        cout",[34,3917,1648],{"class":112},[34,3919,1670],{"class":59},[34,3921,3922],{"class":36,"line":238},[34,3923,2651],{"class":59},[34,3925,3926],{"class":36,"line":244},[34,3927,2036],{"class":59},[14,3929,3930],{},"乘法口诀表",[25,3932,3934],{"className":605,"code":3933,"language":607,"meta":22,"style":22},"#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",[31,3935,3936,3942,3952,3960,3964,3990,3994,4019,4023,4063,4067,4075,4079],{"__ignoreMap":22},[34,3937,3938,3940],{"class":36,"line":37},[34,3939,2413],{"class":112},[34,3941,2798],{"class":187},[34,3943,3944,3946,3948,3950],{"class":36,"line":44},[34,3945,2421],{"class":112},[34,3947,2424],{"class":112},[34,3949,2428],{"class":2427},[34,3951,1765],{"class":59},[34,3953,3954,3956,3958],{"class":36,"line":50},[34,3955,620],{"class":112},[34,3957,2437],{"class":2427},[34,3959,2440],{"class":59},[34,3961,3962],{"class":36,"line":56},[34,3963,2017],{"class":59},[34,3965,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988],{"class":36,"line":107},[34,3967,3665],{"class":112},[34,3969,617],{"class":59},[34,3971,620],{"class":112},[34,3973,3496],{"class":59},[34,3975,447],{"class":112},[34,3977,64],{"class":63},[34,3979,3503],{"class":59},[34,3981,1515],{"class":112},[34,3983,1053],{"class":63},[34,3985,3503],{"class":59},[34,3987,2756],{"class":112},[34,3989,623],{"class":59},[34,3991,3992],{"class":36,"line":196},[34,3993,2494],{"class":59},[34,3995,3996,3998,4000,4002,4004,4006,4008,4010,4012,4015,4017],{"class":36,"line":202},[34,3997,3867],{"class":112},[34,3999,617],{"class":59},[34,4001,620],{"class":112},[34,4003,3874],{"class":59},[34,4005,447],{"class":112},[34,4007,64],{"class":63},[34,4009,3881],{"class":59},[34,4011,2059],{"class":112},[34,4013,4014],{"class":59},"i;j",[34,4016,2756],{"class":112},[34,4018,623],{"class":59},[34,4020,4021],{"class":36,"line":207},[34,4022,2974],{"class":59},[34,4024,4025,4027,4029,4031,4033,4035,4037,4039,4041,4044,4046,4048,4050,4052,4054,4057,4059,4061],{"class":36,"line":222},[34,4026,2979],{"class":59},[34,4028,1648],{"class":112},[34,4030,1074],{"class":59},[34,4032,1648],{"class":112},[34,4034,3904],{"class":187},[34,4036,1648],{"class":112},[34,4038,1048],{"class":59},[34,4040,1648],{"class":112},[34,4042,4043],{"class":187},"\"=\"",[34,4045,1648],{"class":112},[34,4047,1048],{"class":59},[34,4049,1062],{"class":112},[34,4051,1074],{"class":59},[34,4053,1648],{"class":112},[34,4055,4056],{"class":187},"'",[34,4058,1705],{"class":63},[34,4060,4056],{"class":187},[34,4062,1765],{"class":59},[34,4064,4065],{"class":36,"line":227},[34,4066,2993],{"class":59},[34,4068,4069,4071,4073],{"class":36,"line":232},[34,4070,3915],{"class":59},[34,4072,1648],{"class":112},[34,4074,1670],{"class":59},[34,4076,4077],{"class":36,"line":238},[34,4078,2651],{"class":59},[34,4080,4081],{"class":36,"line":244},[34,4082,2036],{"class":59},[584,4084,4086],{"id":4085},"_163跳出语句","1.6.3跳出语句",[567,4088,4089],{},[570,4090,4091],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,4093,4094],{},"break使用时机：",[1611,4096,4097,4100,4103],{},[570,4098,4099],{},"出现在switch条件语句中，作用是终止case并跳出switch",[570,4101,4102],{},"出现在循环结构中，作用是跳出当前的循环结构",[570,4104,4105],{},"出现在嵌套循环中，跳出最近的内层循环语句",[567,4107,4108,4111],{"start":44},[570,4109,4110],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[570,4112,4113],{},"goto语句\n语法：goto 标记;",[14,4115,4116],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[25,4118,4120],{"className":605,"code":4119,"language":607,"meta":22,"style":22},"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",[31,4121,4122,4130,4134,4147,4157,4170,4183,4196,4204,4220],{"__ignoreMap":22},[34,4123,4124,4126,4128],{"class":36,"line":37},[34,4125,620],{"class":112},[34,4127,2437],{"class":2427},[34,4129,2440],{"class":59},[34,4131,4132],{"class":36,"line":44},[34,4133,2017],{"class":59},[34,4135,4136,4138,4140,4143,4145],{"class":36,"line":50},[34,4137,2022],{"class":59},[34,4139,1648],{"class":112},[34,4141,4142],{"class":187},"\"1\"",[34,4144,1648],{"class":112},[34,4146,1670],{"class":59},[34,4148,4149,4152,4155],{"class":36,"line":56},[34,4150,4151],{"class":112},"    goto",[34,4153,4154],{"class":2427}," FLAG",[34,4156,1765],{"class":59},[34,4158,4159,4161,4163,4166,4168],{"class":36,"line":107},[34,4160,2022],{"class":59},[34,4162,1648],{"class":112},[34,4164,4165],{"class":187},"\"2\"",[34,4167,1648],{"class":112},[34,4169,1670],{"class":59},[34,4171,4172,4174,4176,4179,4181],{"class":36,"line":196},[34,4173,2022],{"class":59},[34,4175,1648],{"class":112},[34,4177,4178],{"class":187},"\"3\"",[34,4180,1648],{"class":112},[34,4182,1670],{"class":59},[34,4184,4185,4187,4189,4192,4194],{"class":36,"line":202},[34,4186,2022],{"class":59},[34,4188,1648],{"class":112},[34,4190,4191],{"class":187},"\"4\"",[34,4193,1648],{"class":112},[34,4195,1670],{"class":59},[34,4197,4198,4201],{"class":36,"line":207},[34,4199,4200],{"class":2427},"    FLAG",[34,4202,4203],{"class":59},":\n",[34,4205,4206,4208,4210,4213,4215,4217],{"class":36,"line":222},[34,4207,2022],{"class":59},[34,4209,1648],{"class":112},[34,4211,4212],{"class":187},"\"5\"",[34,4214,1648],{"class":112},[34,4216,1713],{"class":59},[34,4218,4219],{"class":40},"\u002F\u002F跳过了2,3,4,直接到5\n",[34,4221,4222],{"class":36,"line":227},[34,4223,2036],{"class":59},[555,4225,4227],{"id":4226},"_17数组","1.7数组",[584,4229,4231],{"id":4230},"_171一维数组","1.7.1一维数组",[567,4233,4234],{},[570,4235,4236],{},"一维数组定义方式",[748,4238,4239,4249],{},[751,4240,4241],{},[754,4242,4243,4246],{},[757,4244,4245],{},"方式",[757,4247,4248],{},"注意事项",[795,4250,4251,4265,4275],{},[754,4252,4253,4259],{},[800,4254,4255,4256,670],{},"数据类型 数组名",[34,4257,4258],{},"数组长度",[800,4260,4261,4262,4264],{},"这种方式是先定义再arr",[34,4263,1048],{},"赋值",[754,4266,4267,4272],{},[800,4268,4255,4269,4271],{},[34,4270,4258],{},"={值1,值2....};",[800,4273,4274],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[754,4276,4277,4281],{},[800,4278,4255,4279,4271],{},[34,4280],{},[800,4282,4283,4284,4286],{},"int arr",[34,4285],{},";这是不正确的，按照这样的方式定义必须有初始长度",[567,4288,4289],{"start":44},[570,4290,4291],{},"一维数组数组名\n用途：",[1611,4293,4294],{},[570,4295,4296],{},"1.可以统计整个数组在内存中的长度：",[25,4298,4300],{"className":605,"code":4299,"language":607,"meta":22,"style":22},"sizeof(arr);\nsizeof(arr[0]);\n",[31,4301,4302,4309],{"__ignoreMap":22},[34,4303,4304,4306],{"class":36,"line":37},[34,4305,614],{"class":112},[34,4307,4308],{"class":59},"(arr);\n",[34,4310,4311,4313,4316,4318],{"class":36,"line":44},[34,4312,614],{"class":112},[34,4314,4315],{"class":59},"(arr[",[34,4317,319],{"class":63},[34,4319,4320],{"class":59},"]);\n",[1611,4322,4323],{},[570,4324,4325],{},"2.可以获取数组在内存中的首地址:",[25,4327,4329],{"className":605,"code":4328,"language":607,"meta":22,"style":22},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[31,4330,4331,4336,4349,4354],{"__ignoreMap":22},[34,4332,4333],{"class":36,"line":37},[34,4334,4335],{"class":40},"\u002F\u002F查看16进制的首地址\n",[34,4337,4338,4340,4342,4345,4347],{"class":36,"line":44},[34,4339,1841],{"class":59},[34,4341,1648],{"class":112},[34,4343,4344],{"class":59},"arr",[34,4346,1648],{"class":112},[34,4348,1670],{"class":59},[34,4350,4351],{"class":36,"line":50},[34,4352,4353],{"class":40},"\u002F\u002F看10进制数\n",[34,4355,4356,4358,4360,4362,4364,4366,4368,4371,4373,4375,4377],{"class":36,"line":56},[34,4357,1841],{"class":59},[34,4359,1648],{"class":112},[34,4361,617],{"class":59},[34,4363,620],{"class":112},[34,4365,1036],{"class":59},[34,4367,961],{"class":112},[34,4369,4370],{"class":59},"arr[",[34,4372,319],{"class":63},[34,4374,477],{"class":59},[34,4376,1648],{"class":112},[34,4378,1670],{"class":59},[14,4380,4381],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1611,4383,4384],{},[570,4385,4386],{},"1️⃣五只小猪称体重",[25,4388,4390],{"className":605,"code":4389,"language":607,"meta":22,"style":22},"#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",[31,4391,4392,4398,4408,4416,4420,4460,4473,4499,4503,4515,4519,4529,4533,4537,4550,4560],{"__ignoreMap":22},[34,4393,4394,4396],{"class":36,"line":37},[34,4395,2413],{"class":112},[34,4397,2416],{"class":187},[34,4399,4400,4402,4404,4406],{"class":36,"line":44},[34,4401,2421],{"class":112},[34,4403,2424],{"class":112},[34,4405,2428],{"class":2427},[34,4407,1765],{"class":59},[34,4409,4410,4412,4414],{"class":36,"line":50},[34,4411,620],{"class":112},[34,4413,2437],{"class":2427},[34,4415,2440],{"class":59},[34,4417,4418],{"class":36,"line":56},[34,4419,2017],{"class":59},[34,4421,4422,4424,4427,4429,4431,4433,4435,4438,4440,4443,4445,4447,4449,4452,4454,4457],{"class":36,"line":107},[34,4423,2449],{"class":112},[34,4425,4426],{"class":59}," arr[",[34,4428,927],{"class":63},[34,4430,477],{"class":59},[34,4432,447],{"class":112},[34,4434,1501],{"class":59},[34,4436,4437],{"class":63},"300",[34,4439,67],{"class":59},[34,4441,4442],{"class":63},"350",[34,4444,67],{"class":59},[34,4446,2186],{"class":63},[34,4448,67],{"class":59},[34,4450,4451],{"class":63},"400",[34,4453,67],{"class":59},[34,4455,4456],{"class":63},"250",[34,4458,4459],{"class":59},"};\n",[34,4461,4462,4464,4467,4469,4471],{"class":36,"line":196},[34,4463,2449],{"class":112},[34,4465,4466],{"class":59}," tmp",[34,4468,447],{"class":112},[34,4470,319],{"class":63},[34,4472,1765],{"class":59},[34,4474,4475,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497],{"class":36,"line":202},[34,4476,3665],{"class":112},[34,4478,2122],{"class":59},[34,4480,620],{"class":112},[34,4482,3496],{"class":59},[34,4484,447],{"class":112},[34,4486,319],{"class":63},[34,4488,3503],{"class":59},[34,4490,1515],{"class":112},[34,4492,927],{"class":63},[34,4494,3503],{"class":59},[34,4496,2756],{"class":112},[34,4498,623],{"class":59},[34,4500,4501],{"class":36,"line":207},[34,4502,2494],{"class":59},[34,4504,4505,4507,4510,4512],{"class":36,"line":222},[34,4506,2961],{"class":112},[34,4508,4509],{"class":59},"(tmp",[34,4511,1515],{"class":112},[34,4513,4514],{"class":59},"arr[i])\n",[34,4516,4517],{"class":36,"line":227},[34,4518,2974],{"class":59},[34,4520,4521,4524,4526],{"class":36,"line":232},[34,4522,4523],{"class":59},"            tmp",[34,4525,447],{"class":112},[34,4527,4528],{"class":59},"arr[i];\n",[34,4530,4531],{"class":36,"line":238},[34,4532,2993],{"class":59},[34,4534,4535],{"class":36,"line":244},[34,4536,2651],{"class":59},[34,4538,4539,4541,4543,4546,4548],{"class":36,"line":250},[34,4540,2022],{"class":59},[34,4542,1648],{"class":112},[34,4544,4545],{"class":59},"tmp",[34,4547,1648],{"class":112},[34,4549,1670],{"class":59},[34,4551,4552,4555,4558],{"class":36,"line":256},[34,4553,4554],{"class":112},"    return",[34,4556,4557],{"class":63}," 0",[34,4559,1765],{"class":59},[34,4561,4562],{"class":36,"line":261},[34,4563,2036],{"class":59},[1611,4565,4566],{},[570,4567,4568],{},"2️⃣数组元素逆置",[25,4570,4572],{"className":605,"code":4571,"language":607,"meta":22,"style":22},"\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",[31,4573,4574,4579,4585,4595,4603,4607,4642,4658,4690,4703,4708,4713,4725,4735,4745,4750,4759,4769,4774,4779,4806,4810,4826,4830,4841,4850],{"__ignoreMap":22},[34,4575,4576],{"class":36,"line":37},[34,4577,4578],{"class":40},"\u002F\u002F元素逆置\n",[34,4580,4581,4583],{"class":36,"line":44},[34,4582,2413],{"class":112},[34,4584,2416],{"class":187},[34,4586,4587,4589,4591,4593],{"class":36,"line":50},[34,4588,2421],{"class":112},[34,4590,2424],{"class":112},[34,4592,2428],{"class":2427},[34,4594,1765],{"class":59},[34,4596,4597,4599,4601],{"class":36,"line":56},[34,4598,620],{"class":112},[34,4600,2437],{"class":2427},[34,4602,2440],{"class":59},[34,4604,4605],{"class":36,"line":107},[34,4606,2017],{"class":59},[34,4608,4609,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636,4638,4640],{"class":36,"line":196},[34,4610,4611],{"class":112},"   int",[34,4613,4426],{"class":59},[34,4615,927],{"class":63},[34,4617,477],{"class":59},[34,4619,447],{"class":112},[34,4621,1501],{"class":59},[34,4623,64],{"class":63},[34,4625,67],{"class":59},[34,4627,70],{"class":63},[34,4629,67],{"class":59},[34,4631,309],{"class":63},[34,4633,67],{"class":59},[34,4635,217],{"class":63},[34,4637,67],{"class":59},[34,4639,927],{"class":63},[34,4641,4459],{"class":59},[34,4643,4644,4646,4649,4651,4653,4655],{"class":36,"line":202},[34,4645,4611],{"class":112},[34,4647,4648],{"class":59}," start",[34,4650,447],{"class":112},[34,4652,319],{"class":63},[34,4654,670],{"class":59},[34,4656,4657],{"class":40},"\u002F\u002F起始下标\n",[34,4659,4660,4662,4665,4668,4671,4674,4676,4678,4681,4683,4685,4687],{"class":36,"line":207},[34,4661,4611],{"class":112},[34,4663,4664],{"class":59}," end",[34,4666,4667],{"class":112},"=sizeof",[34,4669,4670],{"class":59},"(arr)",[34,4672,4673],{"class":112},"\u002Fsizeof",[34,4675,4315],{"class":59},[34,4677,319],{"class":63},[34,4679,4680],{"class":59},"])",[34,4682,113],{"class":112},[34,4684,64],{"class":63},[34,4686,670],{"class":59},[34,4688,4689],{"class":40},"\u002F\u002F结束下标\n",[34,4691,4692,4695,4698,4700],{"class":36,"line":222},[34,4693,4694],{"class":112},"   while",[34,4696,4697],{"class":59}," (start",[34,4699,1515],{"class":112},[34,4701,4702],{"class":59},"end)\n",[34,4704,4705],{"class":36,"line":227},[34,4706,4707],{"class":59},"   {\n",[34,4709,4710],{"class":36,"line":232},[34,4711,4712],{"class":40},"    \u002F\u002F实现元素互换代码\n",[34,4714,4715,4717,4720,4722],{"class":36,"line":238},[34,4716,2449],{"class":112},[34,4718,4719],{"class":59}," temp",[34,4721,447],{"class":112},[34,4723,4724],{"class":59},"arr[start];\n",[34,4726,4727,4730,4732],{"class":36,"line":244},[34,4728,4729],{"class":59},"    arr[start]",[34,4731,447],{"class":112},[34,4733,4734],{"class":59},"arr[end];\n",[34,4736,4737,4740,4742],{"class":36,"line":250},[34,4738,4739],{"class":59},"    arr[end]",[34,4741,447],{"class":112},[34,4743,4744],{"class":59},"temp;\n",[34,4746,4747],{"class":36,"line":256},[34,4748,4749],{"class":40},"    \u002F\u002F下标更新\n",[34,4751,4752,4755,4757],{"class":36,"line":261},[34,4753,4754],{"class":59},"    start",[34,4756,2756],{"class":112},[34,4758,1765],{"class":59},[34,4760,4761,4764,4767],{"class":36,"line":267},[34,4762,4763],{"class":59},"    end",[34,4765,4766],{"class":112},"--",[34,4768,1765],{"class":59},[34,4770,4771],{"class":36,"line":2138},[34,4772,4773],{"class":59},"   }\n",[34,4775,4776],{"class":36,"line":2143},[34,4777,4778],{"class":40},"   \u002F\u002F输出逆置后的数组\n",[34,4780,4781,4784,4786,4788,4790,4792,4794,4796,4798,4800,4802,4804],{"class":36,"line":2157},[34,4782,4783],{"class":112},"   for",[34,4785,2122],{"class":59},[34,4787,620],{"class":112},[34,4789,3496],{"class":59},[34,4791,447],{"class":112},[34,4793,319],{"class":63},[34,4795,3503],{"class":59},[34,4797,1515],{"class":112},[34,4799,927],{"class":63},[34,4801,3503],{"class":59},[34,4803,2756],{"class":112},[34,4805,623],{"class":59},[34,4807,4808],{"class":36,"line":2162},[34,4809,4707],{"class":59},[34,4811,4812,4814,4816,4819,4821,4824],{"class":36,"line":2191},[34,4813,2022],{"class":59},[34,4815,1648],{"class":112},[34,4817,4818],{"class":59},"arr[i]",[34,4820,1648],{"class":112},[34,4822,4823],{"class":187},"\" \"",[34,4825,1765],{"class":59},[34,4827,4828],{"class":36,"line":2196},[34,4829,4773],{"class":59},[34,4831,4832,4835,4837,4839],{"class":36,"line":2213},[34,4833,4834],{"class":2427},"   system",[34,4836,617],{"class":59},[34,4838,2772],{"class":187},[34,4840,3183],{"class":59},[34,4842,4843,4846,4848],{"class":36,"line":2218},[34,4844,4845],{"class":112},"   return",[34,4847,4557],{"class":63},[34,4849,1765],{"class":59},[34,4851,4852],{"class":36,"line":2223},[34,4853,2036],{"class":59},[1611,4855,4856],{},[570,4857,4858],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[25,4860,4862],{"className":605,"code":4861,"language":607,"meta":22,"style":22},"\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",[31,4863,4864,4869,4875,4885,4893,4897,4949,4962,4988,4992,5006,5010,5015,5020,5050,5054,5059,5093,5097,5102,5122,5127,5139,5155,5170,5175,5179,5183,5196,5222,5226,5240,5244,5252],{"__ignoreMap":22},[34,4865,4866],{"class":36,"line":37},[34,4867,4868],{"class":40},"\u002F\u002F冒泡排序,升序\n",[34,4870,4871,4873],{"class":36,"line":44},[34,4872,2413],{"class":112},[34,4874,2416],{"class":187},[34,4876,4877,4879,4881,4883],{"class":36,"line":50},[34,4878,2421],{"class":112},[34,4880,2424],{"class":112},[34,4882,2428],{"class":2427},[34,4884,1765],{"class":59},[34,4886,4887,4889,4891],{"class":36,"line":56},[34,4888,620],{"class":112},[34,4890,2437],{"class":2427},[34,4892,2440],{"class":59},[34,4894,4895],{"class":36,"line":107},[34,4896,2017],{"class":59},[34,4898,4899,4901,4903,4905,4908,4910,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4933,4935,4937,4939,4941,4943,4945,4947],{"class":36,"line":196},[34,4900,2449],{"class":112},[34,4902,4426],{"class":59},[34,4904,1027],{"class":63},[34,4906,4907],{"class":59},"] ",[34,4909,447],{"class":112},[34,4911,4912],{"class":59}," {",[34,4914,217],{"class":63},[34,4916,67],{"class":59},[34,4918,70],{"class":63},[34,4920,67],{"class":59},[34,4922,1002],{"class":63},[34,4924,67],{"class":59},[34,4926,319],{"class":63},[34,4928,67],{"class":59},[34,4930,927],{"class":63},[34,4932,67],{"class":59},[34,4934,977],{"class":63},[34,4936,67],{"class":59},[34,4938,64],{"class":63},[34,4940,67],{"class":59},[34,4942,309],{"class":63},[34,4944,67],{"class":59},[34,4946,1027],{"class":63},[34,4948,4459],{"class":59},[34,4950,4951,4953,4955,4958,4960],{"class":36,"line":202},[34,4952,2022],{"class":59},[34,4954,1648],{"class":112},[34,4956,4957],{"class":187},"\"排序前：\"",[34,4959,1648],{"class":112},[34,4961,1670],{"class":59},[34,4963,4964,4966,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986],{"class":36,"line":207},[34,4965,3665],{"class":112},[34,4967,2122],{"class":59},[34,4969,620],{"class":112},[34,4971,3496],{"class":59},[34,4973,447],{"class":112},[34,4975,319],{"class":63},[34,4977,3503],{"class":59},[34,4979,1515],{"class":112},[34,4981,1027],{"class":63},[34,4983,3503],{"class":59},[34,4985,2756],{"class":112},[34,4987,623],{"class":59},[34,4989,4990],{"class":36,"line":222},[34,4991,2494],{"class":59},[34,4993,4994,4996,4998,5000,5002,5004],{"class":36,"line":227},[34,4995,3915],{"class":59},[34,4997,1648],{"class":112},[34,4999,4818],{"class":59},[34,5001,1648],{"class":112},[34,5003,4823],{"class":187},[34,5005,1765],{"class":59},[34,5007,5008],{"class":36,"line":232},[34,5009,2651],{"class":59},[34,5011,5012],{"class":36,"line":238},[34,5013,5014],{"class":40},"    \u002F\u002F开始冒泡排序\n",[34,5016,5017],{"class":36,"line":244},[34,5018,5019],{"class":40},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[34,5021,5022,5024,5026,5028,5030,5032,5034,5036,5038,5040,5042,5044,5046,5048],{"class":36,"line":250},[34,5023,3665],{"class":112},[34,5025,2122],{"class":59},[34,5027,620],{"class":112},[34,5029,3496],{"class":59},[34,5031,447],{"class":112},[34,5033,319],{"class":63},[34,5035,3503],{"class":59},[34,5037,1515],{"class":112},[34,5039,1027],{"class":63},[34,5041,113],{"class":112},[34,5043,64],{"class":63},[34,5045,3503],{"class":59},[34,5047,2756],{"class":112},[34,5049,623],{"class":59},[34,5051,5052],{"class":36,"line":256},[34,5053,2494],{"class":59},[34,5055,5056],{"class":36,"line":261},[34,5057,5058],{"class":40},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[34,5060,5061,5063,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089,5091],{"class":36,"line":267},[34,5062,3867],{"class":112},[34,5064,2122],{"class":59},[34,5066,620],{"class":112},[34,5068,3874],{"class":59},[34,5070,447],{"class":112},[34,5072,319],{"class":63},[34,5074,3881],{"class":59},[34,5076,1515],{"class":112},[34,5078,1027],{"class":63},[34,5080,113],{"class":112},[34,5082,1048],{"class":59},[34,5084,113],{"class":112},[34,5086,64],{"class":63},[34,5088,3881],{"class":59},[34,5090,2756],{"class":112},[34,5092,623],{"class":59},[34,5094,5095],{"class":36,"line":2138},[34,5096,2974],{"class":59},[34,5098,5099],{"class":36,"line":2143},[34,5100,5101],{"class":40},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[34,5103,5104,5107,5110,5112,5115,5117,5119],{"class":36,"line":2157},[34,5105,5106],{"class":112},"            if",[34,5108,5109],{"class":59},"(arr[j]",[34,5111,1564],{"class":112},[34,5113,5114],{"class":59},"arr[j",[34,5116,1088],{"class":112},[34,5118,64],{"class":63},[34,5120,5121],{"class":59},"])\n",[34,5123,5124],{"class":36,"line":2162},[34,5125,5126],{"class":59},"            {\n",[34,5128,5129,5132,5134,5136],{"class":36,"line":2191},[34,5130,5131],{"class":112},"                int",[34,5133,4719],{"class":59},[34,5135,447],{"class":112},[34,5137,5138],{"class":59},"arr[j];\n",[34,5140,5141,5144,5146,5148,5150,5152],{"class":36,"line":2196},[34,5142,5143],{"class":59},"                arr[j]",[34,5145,447],{"class":112},[34,5147,5114],{"class":59},[34,5149,1088],{"class":112},[34,5151,64],{"class":63},[34,5153,5154],{"class":59},"];\n",[34,5156,5157,5160,5162,5164,5166,5168],{"class":36,"line":2213},[34,5158,5159],{"class":59},"                arr[j",[34,5161,1088],{"class":112},[34,5163,64],{"class":63},[34,5165,477],{"class":59},[34,5167,447],{"class":112},[34,5169,4744],{"class":59},[34,5171,5172],{"class":36,"line":2218},[34,5173,5174],{"class":59},"            }\n",[34,5176,5177],{"class":36,"line":2223},[34,5178,2993],{"class":59},[34,5180,5181],{"class":36,"line":2228},[34,5182,2651],{"class":59},[34,5184,5185,5187,5189,5192,5194],{"class":36,"line":2242},[34,5186,2022],{"class":59},[34,5188,1648],{"class":112},[34,5190,5191],{"class":187},"\"排序后：\"",[34,5193,1648],{"class":112},[34,5195,1670],{"class":59},[34,5197,5198,5200,5202,5204,5206,5208,5210,5212,5214,5216,5218,5220],{"class":36,"line":2247},[34,5199,3665],{"class":112},[34,5201,2122],{"class":59},[34,5203,620],{"class":112},[34,5205,3496],{"class":59},[34,5207,447],{"class":112},[34,5209,319],{"class":63},[34,5211,3503],{"class":59},[34,5213,1515],{"class":112},[34,5215,1027],{"class":63},[34,5217,3503],{"class":59},[34,5219,2756],{"class":112},[34,5221,623],{"class":59},[34,5223,5224],{"class":36,"line":3041},[34,5225,2494],{"class":59},[34,5227,5228,5230,5232,5234,5236,5238],{"class":36,"line":3055},[34,5229,3915],{"class":59},[34,5231,1648],{"class":112},[34,5233,4818],{"class":59},[34,5235,1648],{"class":112},[34,5237,4823],{"class":187},[34,5239,1765],{"class":59},[34,5241,5242],{"class":36,"line":3063},[34,5243,2651],{"class":59},[34,5245,5246,5248,5250],{"class":36,"line":3068},[34,5247,4554],{"class":112},[34,5249,4557],{"class":63},[34,5251,1765],{"class":59},[34,5253,5254],{"class":36,"line":3074},[34,5255,2036],{"class":59},[584,5257,5259],{"id":5258},"_172二维数组","1.7.2二维数组",[567,5261,5262],{},[570,5263,5264],{},"二维数组的四种定义方式",[748,5266,5267,5276],{},[751,5268,5269],{},[754,5270,5271,5274],{},[757,5272,5273],{},"序号",[757,5275,4245],{},[795,5277,5278,5288,5297,5306,5315],{},[754,5279,5280,5282],{},[800,5281,64],{},[800,5283,5284,5285,670],{},"数据类型 数组名[行数]",[34,5286,5287],{},"列数",[754,5289,5290,5292],{},[800,5291,70],{},[800,5293,5284,5294,5296],{},[34,5295,5287],{},"={ {数据1,数据2}，{数据3，数据4}... }",[754,5298,5299,5301],{},[800,5300,309],{},[800,5302,5284,5303,5305],{},[34,5304,5287],{},"={数据1,数据2,数据3...}",[754,5307,5308,5310],{},[800,5309,217],{},[800,5311,5312,5313,5305],{},"数据类型 数组名[]",[34,5314,5287],{},[754,5316,5317,5320],{},[800,5318,5319],{},"注意：不能只省略列数",[800,5321],{},[567,5323,5324],{"start":44},[570,5325,5326],{},"二维数组数组名",[1611,5328,5329,5332],{},[570,5330,5331],{},"1.查看二维数组所占内存空间",[570,5333,5334],{},"2.获取二维数组首地址",[14,5336,5337],{},"已知二维数组，求二维数组的行数与列数",[25,5339,5341],{"className":605,"code":5340,"language":607,"meta":22,"style":22},"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",[31,5342,5343,5351,5355,5373,5377,5395,5411,5416,5441,5474],{"__ignoreMap":22},[34,5344,5345,5347,5349],{"class":36,"line":37},[34,5346,620],{"class":112},[34,5348,2437],{"class":2427},[34,5350,2440],{"class":59},[34,5352,5353],{"class":36,"line":44},[34,5354,2017],{"class":59},[34,5356,5357,5359,5361,5363,5366,5368,5370],{"class":36,"line":50},[34,5358,2449],{"class":112},[34,5360,4426],{"class":59},[34,5362,70],{"class":63},[34,5364,5365],{"class":59},"][",[34,5367,309],{"class":63},[34,5369,477],{"class":59},[34,5371,5372],{"class":112},"=\n",[34,5374,5375],{"class":36,"line":56},[34,5376,2494],{"class":59},[34,5378,5379,5382,5384,5386,5388,5390,5392],{"class":36,"line":107},[34,5380,5381],{"class":59},"        {",[34,5383,64],{"class":63},[34,5385,67],{"class":59},[34,5387,70],{"class":63},[34,5389,67],{"class":59},[34,5391,309],{"class":63},[34,5393,5394],{"class":59},"},\n",[34,5396,5397,5399,5401,5403,5405,5407,5409],{"class":36,"line":196},[34,5398,5381],{"class":59},[34,5400,217],{"class":63},[34,5402,67],{"class":59},[34,5404,927],{"class":63},[34,5406,67],{"class":59},[34,5408,952],{"class":63},[34,5410,2036],{"class":59},[34,5412,5413],{"class":36,"line":202},[34,5414,5415],{"class":59},"    };\n",[34,5417,5418,5420,5422,5425,5427,5429,5431,5433,5435,5437,5439],{"class":36,"line":207},[34,5419,2022],{"class":59},[34,5421,1648],{"class":112},[34,5423,5424],{"class":187},"\"二维数组的行数\"",[34,5426,1844],{"class":112},[34,5428,4670],{"class":59},[34,5430,4673],{"class":112},[34,5432,4315],{"class":59},[34,5434,319],{"class":63},[34,5436,4680],{"class":59},[34,5438,1648],{"class":112},[34,5440,1670],{"class":59},[34,5442,5443,5445,5447,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472],{"class":36,"line":222},[34,5444,2022],{"class":59},[34,5446,1648],{"class":112},[34,5448,5449],{"class":187},"\"二维数组的列数\"",[34,5451,1844],{"class":112},[34,5453,4315],{"class":59},[34,5455,319],{"class":63},[34,5457,4680],{"class":59},[34,5459,4673],{"class":112},[34,5461,4315],{"class":59},[34,5463,319],{"class":63},[34,5465,5365],{"class":59},[34,5467,319],{"class":63},[34,5469,4680],{"class":59},[34,5471,1648],{"class":112},[34,5473,1670],{"class":59},[34,5475,5476],{"class":36,"line":227},[34,5477,2036],{"class":59},[14,5479,5480],{},"查看二维数组首地址",[25,5482,5484],{"className":605,"code":5483,"language":607,"meta":22,"style":22},"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",[31,5485,5486,5503,5529,5554],{"__ignoreMap":22},[34,5487,5488,5490,5492,5495,5497,5499,5501],{"class":36,"line":37},[34,5489,1841],{"class":59},[34,5491,1648],{"class":112},[34,5493,5494],{"class":187},"\"二维数组首地址：\"",[34,5496,1648],{"class":112},[34,5498,4344],{"class":59},[34,5500,1648],{"class":112},[34,5502,1670],{"class":59},[34,5504,5505,5507,5509,5512,5514,5516,5518,5521,5523,5525,5527],{"class":36,"line":44},[34,5506,1841],{"class":59},[34,5508,1648],{"class":112},[34,5510,5511],{"class":187},"\"二维数组第一行的首地址：\"",[34,5513,1648],{"class":112},[34,5515,617],{"class":59},[34,5517,620],{"class":112},[34,5519,5520],{"class":59},")arr[",[34,5522,319],{"class":63},[34,5524,477],{"class":59},[34,5526,1648],{"class":112},[34,5528,1670],{"class":59},[34,5530,5531,5533,5535,5538,5540,5542,5544,5546,5548,5550,5552],{"class":36,"line":50},[34,5532,1841],{"class":59},[34,5534,1648],{"class":112},[34,5536,5537],{"class":187},"\"二维数组第二行的首地址：\"",[34,5539,1648],{"class":112},[34,5541,617],{"class":59},[34,5543,620],{"class":112},[34,5545,5520],{"class":59},[34,5547,64],{"class":63},[34,5549,477],{"class":59},[34,5551,1648],{"class":112},[34,5553,1670],{"class":59},[34,5555,5556,5558,5560,5563,5565,5567,5569,5571,5573,5575,5577,5579,5581,5583,5585,5587],{"class":36,"line":56},[34,5557,1841],{"class":59},[34,5559,1648],{"class":112},[34,5561,5562],{"class":187},"\"二维数组第一个元素的首地址:\"",[34,5564,1648],{"class":112},[34,5566,617],{"class":59},[34,5568,620],{"class":112},[34,5570,1036],{"class":59},[34,5572,961],{"class":112},[34,5574,4370],{"class":59},[34,5576,319],{"class":63},[34,5578,5365],{"class":59},[34,5580,319],{"class":63},[34,5582,477],{"class":59},[34,5584,1648],{"class":112},[34,5586,1713],{"class":59},[34,5588,5589],{"class":40},"\u002F\u002F对于数，要加取址符\n",[532,5591,5592],{},"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":22,"searchDepth":44,"depth":44,"links":5594},[5595,5596,5597,5605,5606,5612,5617],{"id":557,"depth":44,"text":558},{"id":564,"depth":44,"text":565},{"id":581,"depth":44,"text":582,"children":5598},[5599,5600,5601,5602,5603,5604],{"id":586,"depth":50,"text":587},{"id":633,"depth":50,"text":634},{"id":697,"depth":50,"text":698},{"id":1629,"depth":50,"text":1630},{"id":1719,"depth":50,"text":1720},{"id":1815,"depth":50,"text":1816},{"id":1857,"depth":44,"text":1858},{"id":1925,"depth":44,"text":1926,"children":5607},[5608,5609,5610,5611],{"id":1929,"depth":50,"text":1930},{"id":1950,"depth":50,"text":1951},{"id":1959,"depth":50,"text":1960},{"id":1968,"depth":50,"text":1969},{"id":1977,"depth":44,"text":1978,"children":5613},[5614,5615,5616],{"id":1981,"depth":50,"text":1982},{"id":2669,"depth":50,"text":2670},{"id":4085,"depth":50,"text":4086},{"id":4226,"depth":44,"text":4227,"children":5618},[5619,5620],{"id":4230,"depth":50,"text":4231},{"id":5258,"depth":50,"text":5259},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":548,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5627,"title":5628,"body":5629,"description":22,"extension":538,"meta":6729,"navigation":540,"path":6730,"seo":6731,"stem":6732,"__hash__":6733},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5630,"toc":6721},[5631,5634,5638,5646,5654,5657,5723,5727,5730,5806,5810,5813,5816,5819,6032,6036,6041,6105,6110,6177,6182,6273,6276,6381,6385,6388,6394,6538,6542,6545,6559,6562,6607,6610,6718],[10,5632,5628],{"id":5633},"_2函数",[555,5635,5637],{"id":5636},"_21函数概述","2.1函数概述",[567,5639,5640,5643],{},[570,5641,5642],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[570,5644,5645],{},"语法：",[25,5647,5652],{"className":5648,"code":5650,"language":5651,"meta":22},[5649],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[31,5653,5650],{"__ignoreMap":22},[14,5655,5656],{},"小案例",[25,5658,5660],{"className":605,"code":5659,"language":607,"meta":22,"style":22},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[31,5661,5662,5667,5691,5695,5712,5719],{"__ignoreMap":22},[34,5663,5664],{"class":36,"line":37},[34,5665,5666],{"class":40},"\u002F\u002Fnum1,num2形参\n",[34,5668,5669,5671,5674,5676,5678,5682,5684,5686,5689],{"class":36,"line":44},[34,5670,620],{"class":112},[34,5672,5673],{"class":2427}," add",[34,5675,617],{"class":59},[34,5677,620],{"class":112},[34,5679,5681],{"class":5680},"s4XuR"," num1",[34,5683,67],{"class":59},[34,5685,620],{"class":112},[34,5687,5688],{"class":5680}," num2",[34,5690,623],{"class":59},[34,5692,5693],{"class":36,"line":50},[34,5694,2017],{"class":59},[34,5696,5697,5699,5702,5704,5707,5709],{"class":36,"line":56},[34,5698,2449],{"class":112},[34,5700,5701],{"class":59}," sum",[34,5703,447],{"class":112},[34,5705,5706],{"class":59},"num1",[34,5708,1088],{"class":112},[34,5710,5711],{"class":59},"num2;\n",[34,5713,5714,5716],{"class":36,"line":107},[34,5715,4554],{"class":112},[34,5717,5718],{"class":59}," sum;\n",[34,5720,5721],{"class":36,"line":196},[34,5722,2036],{"class":59},[555,5724,5726],{"id":5725},"_22函数调用","2.2函数调用",[14,5728,5729],{},"调用刚刚写的求和函数",[25,5731,5733],{"className":605,"code":5732,"language":607,"meta":22,"style":22},"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",[31,5734,5735,5743,5747,5752,5764,5776,5785,5790,5802],{"__ignoreMap":22},[34,5736,5737,5739,5741],{"class":36,"line":37},[34,5738,620],{"class":112},[34,5740,2437],{"class":2427},[34,5742,2440],{"class":59},[34,5744,5745],{"class":36,"line":44},[34,5746,2017],{"class":59},[34,5748,5749],{"class":36,"line":50},[34,5750,5751],{"class":40},"    \u002F\u002Fa,b实参\n",[34,5753,5754,5756,5758,5760,5762],{"class":36,"line":56},[34,5755,2449],{"class":112},[34,5757,1870],{"class":59},[34,5759,447],{"class":112},[34,5761,319],{"class":63},[34,5763,1765],{"class":59},[34,5765,5766,5768,5770,5772,5774],{"class":36,"line":107},[34,5767,2449],{"class":112},[34,5769,3297],{"class":59},[34,5771,447],{"class":112},[34,5773,319],{"class":63},[34,5775,1765],{"class":59},[34,5777,5778,5780,5782],{"class":36,"line":196},[34,5779,2476],{"class":59},[34,5781,1901],{"class":112},[34,5783,5784],{"class":59},"a,b;\n",[34,5786,5787],{"class":36,"line":202},[34,5788,5789],{"class":40},"    \u002F\u002F调用函数时，实参值传给了形参\n",[34,5791,5792,5794,5796,5799],{"class":36,"line":207},[34,5793,2022],{"class":59},[34,5795,1648],{"class":112},[34,5797,5798],{"class":2427},"add",[34,5800,5801],{"class":59},"(a,b);\n",[34,5803,5804],{"class":36,"line":222},[34,5805,2036],{"class":59},[555,5807,5809],{"id":5808},"_23值传递","2.3值传递",[14,5811,5812],{},"值传递就是函数调用时实参将数值传给形参",[14,5814,5815],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5817,5818],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[25,5820,5822],{"className":605,"code":5821,"language":607,"meta":22,"style":22},"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",[31,5823,5824,5846,5850,5863,5880,5898,5909,5918,5927,5940,5956,5972,5981,5985,5993,5997,6009,6021,6028],{"__ignoreMap":22},[34,5825,5826,5829,5832,5834,5836,5838,5840,5842,5844],{"class":36,"line":37},[34,5827,5828],{"class":112},"void",[34,5830,5831],{"class":2427}," swap",[34,5833,617],{"class":59},[34,5835,620],{"class":112},[34,5837,5681],{"class":5680},[34,5839,67],{"class":59},[34,5841,620],{"class":112},[34,5843,5688],{"class":5680},[34,5845,623],{"class":59},[34,5847,5848],{"class":36,"line":44},[34,5849,2017],{"class":59},[34,5851,5852,5854,5856,5859,5861],{"class":36,"line":50},[34,5853,2022],{"class":59},[34,5855,1648],{"class":112},[34,5857,5858],{"class":187},"\"交换前：\"",[34,5860,1648],{"class":112},[34,5862,1670],{"class":59},[34,5864,5865,5867,5869,5872,5874,5876,5878],{"class":36,"line":56},[34,5866,2022],{"class":59},[34,5868,1648],{"class":112},[34,5870,5871],{"class":187},"\"num1=\"",[34,5873,1648],{"class":112},[34,5875,5706],{"class":59},[34,5877,1648],{"class":112},[34,5879,1670],{"class":59},[34,5881,5882,5884,5886,5889,5891,5894,5896],{"class":36,"line":107},[34,5883,2022],{"class":59},[34,5885,1648],{"class":112},[34,5887,5888],{"class":187},"\"num2=\"",[34,5890,1648],{"class":112},[34,5892,5893],{"class":59},"num2",[34,5895,1648],{"class":112},[34,5897,1670],{"class":59},[34,5899,5900,5902,5904,5906],{"class":36,"line":196},[34,5901,2449],{"class":112},[34,5903,4719],{"class":59},[34,5905,447],{"class":112},[34,5907,5908],{"class":59},"num1;\n",[34,5910,5911,5914,5916],{"class":36,"line":202},[34,5912,5913],{"class":59},"    num1",[34,5915,447],{"class":112},[34,5917,5711],{"class":59},[34,5919,5920,5923,5925],{"class":36,"line":207},[34,5921,5922],{"class":59},"    num2",[34,5924,447],{"class":112},[34,5926,4744],{"class":59},[34,5928,5929,5931,5933,5936,5938],{"class":36,"line":222},[34,5930,2022],{"class":59},[34,5932,1648],{"class":112},[34,5934,5935],{"class":187},"\"交换后：\"",[34,5937,1648],{"class":112},[34,5939,1670],{"class":59},[34,5941,5942,5944,5946,5948,5950,5952,5954],{"class":36,"line":227},[34,5943,2022],{"class":59},[34,5945,1648],{"class":112},[34,5947,5871],{"class":187},[34,5949,1648],{"class":112},[34,5951,5706],{"class":59},[34,5953,1648],{"class":112},[34,5955,1670],{"class":59},[34,5957,5958,5960,5962,5964,5966,5968,5970],{"class":36,"line":232},[34,5959,2022],{"class":59},[34,5961,1648],{"class":112},[34,5963,5888],{"class":187},[34,5965,1648],{"class":112},[34,5967,5893],{"class":59},[34,5969,1648],{"class":112},[34,5971,1670],{"class":59},[34,5973,5974,5976,5978],{"class":36,"line":238},[34,5975,4554],{"class":112},[34,5977,670],{"class":59},[34,5979,5980],{"class":40},"\u002F\u002F或者不写\n",[34,5982,5983],{"class":36,"line":244},[34,5984,2036],{"class":59},[34,5986,5987,5989,5991],{"class":36,"line":250},[34,5988,620],{"class":112},[34,5990,2437],{"class":2427},[34,5992,2440],{"class":59},[34,5994,5995],{"class":36,"line":256},[34,5996,2017],{"class":59},[34,5998,5999,6001,6003,6005,6007],{"class":36,"line":261},[34,6000,2449],{"class":112},[34,6002,1870],{"class":59},[34,6004,447],{"class":112},[34,6006,1053],{"class":63},[34,6008,1765],{"class":59},[34,6010,6011,6013,6015,6017,6019],{"class":36,"line":267},[34,6012,2449],{"class":112},[34,6014,3297],{"class":59},[34,6016,447],{"class":112},[34,6018,1306],{"class":63},[34,6020,1765],{"class":59},[34,6022,6023,6026],{"class":36,"line":2138},[34,6024,6025],{"class":2427},"    swap",[34,6027,5801],{"class":59},[34,6029,6030],{"class":36,"line":2143},[34,6031,2036],{"class":59},[555,6033,6035],{"id":6034},"_24函数的常见形式","2.4函数的常见形式",[567,6037,6038],{},[570,6039,6040],{},"无参无返",[25,6042,6044],{"className":605,"code":6043,"language":607,"meta":22,"style":22},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[31,6045,6046,6055,6059,6072,6076,6084,6088,6093,6101],{"__ignoreMap":22},[34,6047,6048,6050,6053],{"class":36,"line":37},[34,6049,5828],{"class":112},[34,6051,6052],{"class":2427}," test01",[34,6054,2440],{"class":59},[34,6056,6057],{"class":36,"line":44},[34,6058,2017],{"class":59},[34,6060,6061,6063,6065,6068,6070],{"class":36,"line":50},[34,6062,2022],{"class":59},[34,6064,1648],{"class":112},[34,6066,6067],{"class":187},"\"你好\"",[34,6069,1648],{"class":112},[34,6071,1670],{"class":59},[34,6073,6074],{"class":36,"line":56},[34,6075,2036],{"class":59},[34,6077,6078,6080,6082],{"class":36,"line":107},[34,6079,620],{"class":112},[34,6081,2437],{"class":2427},[34,6083,2440],{"class":59},[34,6085,6086],{"class":36,"line":196},[34,6087,2017],{"class":59},[34,6089,6090],{"class":36,"line":202},[34,6091,6092],{"class":40},"    \u002F\u002F函数调用\n",[34,6094,6095,6098],{"class":36,"line":207},[34,6096,6097],{"class":2427},"    test01",[34,6099,6100],{"class":59},"();\n",[34,6102,6103],{"class":36,"line":222},[34,6104,2036],{"class":59},[567,6106,6107],{"start":44},[570,6108,6109],{},"有参无返",[25,6111,6113],{"className":605,"code":6112,"language":607,"meta":22,"style":22},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[31,6114,6115,6130,6134,6146,6150,6158,6162,6173],{"__ignoreMap":22},[34,6116,6117,6119,6122,6124,6126,6128],{"class":36,"line":37},[34,6118,5828],{"class":112},[34,6120,6121],{"class":2427}," test02",[34,6123,617],{"class":59},[34,6125,620],{"class":112},[34,6127,1870],{"class":5680},[34,6129,623],{"class":59},[34,6131,6132],{"class":36,"line":44},[34,6133,2017],{"class":59},[34,6135,6136,6138,6140,6142,6144],{"class":36,"line":50},[34,6137,2022],{"class":59},[34,6139,1648],{"class":112},[34,6141,6067],{"class":187},[34,6143,1648],{"class":112},[34,6145,1670],{"class":59},[34,6147,6148],{"class":36,"line":56},[34,6149,2036],{"class":59},[34,6151,6152,6154,6156],{"class":36,"line":107},[34,6153,620],{"class":112},[34,6155,2437],{"class":2427},[34,6157,2440],{"class":59},[34,6159,6160],{"class":36,"line":196},[34,6161,2017],{"class":59},[34,6163,6164,6167,6169,6171],{"class":36,"line":202},[34,6165,6166],{"class":2427},"    test02",[34,6168,617],{"class":59},[34,6170,919],{"class":63},[34,6172,3183],{"class":59},[34,6174,6175],{"class":36,"line":207},[34,6176,2036],{"class":59},[567,6178,6179],{"start":50},[570,6180,6181],{},"无参有返",[25,6183,6185],{"className":605,"code":6184,"language":607,"meta":22,"style":22},"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",[31,6186,6187,6196,6200,6212,6221,6225,6233,6237,6250,6269],{"__ignoreMap":22},[34,6188,6189,6191,6194],{"class":36,"line":37},[34,6190,620],{"class":112},[34,6192,6193],{"class":2427}," test03",[34,6195,2440],{"class":59},[34,6197,6198],{"class":36,"line":44},[34,6199,2017],{"class":59},[34,6201,6202,6204,6206,6208,6210],{"class":36,"line":50},[34,6203,2022],{"class":59},[34,6205,1648],{"class":112},[34,6207,6067],{"class":187},[34,6209,1648],{"class":112},[34,6211,1670],{"class":59},[34,6213,6214,6216,6219],{"class":36,"line":56},[34,6215,4554],{"class":112},[34,6217,6218],{"class":63}," 100",[34,6220,1765],{"class":59},[34,6222,6223],{"class":36,"line":107},[34,6224,2036],{"class":59},[34,6226,6227,6229,6231],{"class":36,"line":196},[34,6228,620],{"class":112},[34,6230,2437],{"class":2427},[34,6232,2440],{"class":59},[34,6234,6235],{"class":36,"line":202},[34,6236,2017],{"class":59},[34,6238,6239,6241,6243,6245,6248],{"class":36,"line":207},[34,6240,2449],{"class":112},[34,6242,5681],{"class":59},[34,6244,447],{"class":112},[34,6246,6247],{"class":2427},"test03",[34,6249,6100],{"class":59},[34,6251,6252,6254,6256,6258,6260,6262,6264,6266],{"class":36,"line":222},[34,6253,2022],{"class":59},[34,6255,1648],{"class":112},[34,6257,5871],{"class":187},[34,6259,1648],{"class":112},[34,6261,5706],{"class":59},[34,6263,1648],{"class":112},[34,6265,1713],{"class":59},[34,6267,6268],{"class":40}," \u002F\u002F100\n",[34,6270,6271],{"class":36,"line":227},[34,6272,2036],{"class":59},[14,6274,6275],{},"4.有参有返",[25,6277,6279],{"className":605,"code":6278,"language":607,"meta":22,"style":22},"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",[31,6280,6281,6296,6300,6313,6319,6323,6332,6336,6348,6362,6377],{"__ignoreMap":22},[34,6282,6283,6285,6288,6290,6292,6294],{"class":36,"line":37},[34,6284,620],{"class":112},[34,6286,6287],{"class":2427}," test04",[34,6289,617],{"class":59},[34,6291,620],{"class":112},[34,6293,1870],{"class":5680},[34,6295,623],{"class":59},[34,6297,6298],{"class":36,"line":44},[34,6299,2017],{"class":59},[34,6301,6302,6304,6306,6309,6311],{"class":36,"line":50},[34,6303,2022],{"class":59},[34,6305,1648],{"class":112},[34,6307,6308],{"class":187},"\"hello\"",[34,6310,1648],{"class":112},[34,6312,1670],{"class":59},[34,6314,6315,6317],{"class":36,"line":56},[34,6316,4554],{"class":112},[34,6318,1904],{"class":59},[34,6320,6321],{"class":36,"line":107},[34,6322,2036],{"class":59},[34,6324,6325,6327,6330],{"class":36,"line":196},[34,6326,620],{"class":112},[34,6328,6329],{"class":2427}," mian",[34,6331,2440],{"class":59},[34,6333,6334],{"class":36,"line":202},[34,6335,2017],{"class":59},[34,6337,6338,6340,6342,6344,6346],{"class":36,"line":207},[34,6339,2449],{"class":112},[34,6341,3297],{"class":59},[34,6343,447],{"class":112},[34,6345,64],{"class":63},[34,6347,1765],{"class":59},[34,6349,6350,6352,6354,6356,6359],{"class":36,"line":222},[34,6351,2449],{"class":112},[34,6353,3313],{"class":59},[34,6355,447],{"class":112},[34,6357,6358],{"class":2427},"test04",[34,6360,6361],{"class":59},"(b);\n",[34,6363,6364,6366,6368,6370,6372,6374],{"class":36,"line":227},[34,6365,2022],{"class":59},[34,6367,1648],{"class":112},[34,6369,897],{"class":59},[34,6371,1648],{"class":112},[34,6373,1713],{"class":59},[34,6375,6376],{"class":40}," \u002F\u002F1\n",[34,6378,6379],{"class":36,"line":232},[34,6380,2036],{"class":59},[555,6382,6384],{"id":6383},"_25函数的声明","2.5函数的声明",[14,6386,6387],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6389,6390,6391],{},"函数的",[760,6392,6393],{},"声明可以多次，但是函数的定义只能有一次",[25,6395,6397],{"className":605,"code":6396,"language":607,"meta":22,"style":22},"\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",[31,6398,6399,6404,6409,6434,6443,6447,6459,6471,6487,6491,6511,6515,6534],{"__ignoreMap":22},[34,6400,6401],{"class":36,"line":37},[34,6402,6403],{"class":40},"\u002F\u002F函数声明\n",[34,6405,6406],{"class":36,"line":44},[34,6407,6408],{"class":40},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[34,6410,6411,6413,6416,6418,6420,6422,6424,6426,6428,6431],{"class":36,"line":50},[34,6412,620],{"class":112},[34,6414,6415],{"class":2427}," max",[34,6417,617],{"class":59},[34,6419,620],{"class":112},[34,6421,1870],{"class":5680},[34,6423,67],{"class":59},[34,6425,620],{"class":112},[34,6427,3297],{"class":5680},[34,6429,6430],{"class":59},");",[34,6432,6433],{"class":40},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[34,6435,6436,6438,6440],{"class":36,"line":56},[34,6437,620],{"class":112},[34,6439,2437],{"class":2427},[34,6441,6442],{"class":59},"() \n",[34,6444,6445],{"class":36,"line":107},[34,6446,2017],{"class":59},[34,6448,6449,6451,6453,6455,6457],{"class":36,"line":196},[34,6450,2449],{"class":112},[34,6452,1870],{"class":59},[34,6454,447],{"class":112},[34,6456,1053],{"class":63},[34,6458,1765],{"class":59},[34,6460,6461,6463,6465,6467,6469],{"class":36,"line":202},[34,6462,2449],{"class":112},[34,6464,3297],{"class":59},[34,6466,447],{"class":112},[34,6468,1306],{"class":63},[34,6470,1765],{"class":59},[34,6472,6473,6475,6477,6480,6483,6485],{"class":36,"line":207},[34,6474,2022],{"class":59},[34,6476,1648],{"class":112},[34,6478,6479],{"class":2427},"max",[34,6481,6482],{"class":59},"(a,b)",[34,6484,1648],{"class":112},[34,6486,1670],{"class":59},[34,6488,6489],{"class":36,"line":222},[34,6490,2036],{"class":59},[34,6492,6493,6495,6497,6499,6501,6503,6505,6507,6509],{"class":36,"line":227},[34,6494,620],{"class":112},[34,6496,6415],{"class":2427},[34,6498,617],{"class":59},[34,6500,620],{"class":112},[34,6502,1870],{"class":5680},[34,6504,67],{"class":59},[34,6506,620],{"class":112},[34,6508,3297],{"class":5680},[34,6510,623],{"class":59},[34,6512,6513],{"class":36,"line":232},[34,6514,2017],{"class":59},[34,6516,6517,6519,6521,6523,6525,6527,6529,6531],{"class":36,"line":238},[34,6518,4554],{"class":112},[34,6520,1870],{"class":59},[34,6522,1564],{"class":112},[34,6524,872],{"class":59},[34,6526,1590],{"class":112},[34,6528,847],{"class":59},[34,6530,214],{"class":112},[34,6532,6533],{"class":59},"b;\n",[34,6535,6536],{"class":36,"line":244},[34,6537,2036],{"class":59},[555,6539,6541],{"id":6540},"_26函数的分文件编写","2.6函数的分文件编写",[14,6543,6544],{},"4个步骤：",[1611,6546,6547,6550,6553,6556],{},[570,6548,6549],{},"1.创建后缀名为.h的头文件",[570,6551,6552],{},"2.创建后缀名为.cpp的源文件",[570,6554,6555],{},"3.在头文件中写函数的定义",[570,6557,6558],{},"4.在源文件中写函数的定义\n示例：",[14,6560,6561],{},"头文件：swap.h",[25,6563,6565],{"className":605,"code":6564,"language":607,"meta":22,"style":22},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[31,6566,6567,6573,6583,6587],{"__ignoreMap":22},[34,6568,6569,6571],{"class":36,"line":37},[34,6570,2413],{"class":112},[34,6572,2416],{"class":187},[34,6574,6575,6577,6579,6581],{"class":36,"line":44},[34,6576,2421],{"class":112},[34,6578,2424],{"class":112},[34,6580,2428],{"class":2427},[34,6582,1765],{"class":59},[34,6584,6585],{"class":36,"line":50},[34,6586,6403],{"class":40},[34,6588,6589,6591,6593,6595,6597,6599,6601,6603,6605],{"class":36,"line":56},[34,6590,5828],{"class":112},[34,6592,5831],{"class":2427},[34,6594,617],{"class":59},[34,6596,620],{"class":112},[34,6598,1870],{"class":5680},[34,6600,67],{"class":59},[34,6602,620],{"class":112},[34,6604,3297],{"class":5680},[34,6606,3183],{"class":59},[14,6608,6609],{},"源文件：swap.cpp",[25,6611,6613],{"className":605,"code":6612,"language":607,"meta":22,"style":22},"#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",[31,6614,6615,6622,6627,6647,6651,6662,6671,6680,6697,6714],{"__ignoreMap":22},[34,6616,6617,6619],{"class":36,"line":37},[34,6618,2413],{"class":112},[34,6620,6621],{"class":187}," \"swap.h\"\n",[34,6623,6624],{"class":36,"line":44},[34,6625,6626],{"class":40},"\u002F\u002F函数的定义\n",[34,6628,6629,6631,6633,6635,6637,6639,6641,6643,6645],{"class":36,"line":50},[34,6630,5828],{"class":112},[34,6632,5831],{"class":2427},[34,6634,617],{"class":59},[34,6636,620],{"class":112},[34,6638,1870],{"class":5680},[34,6640,67],{"class":59},[34,6642,620],{"class":112},[34,6644,3297],{"class":5680},[34,6646,623],{"class":59},[34,6648,6649],{"class":36,"line":56},[34,6650,2017],{"class":59},[34,6652,6653,6655,6657,6659],{"class":36,"line":107},[34,6654,2449],{"class":112},[34,6656,4719],{"class":59},[34,6658,447],{"class":112},[34,6660,6661],{"class":59},"a;\n",[34,6663,6664,6667,6669],{"class":36,"line":196},[34,6665,6666],{"class":59},"    a",[34,6668,447],{"class":112},[34,6670,6533],{"class":59},[34,6672,6673,6676,6678],{"class":36,"line":202},[34,6674,6675],{"class":59},"    b",[34,6677,447],{"class":112},[34,6679,4744],{"class":59},[34,6681,6682,6684,6686,6689,6691,6693,6695],{"class":36,"line":207},[34,6683,2022],{"class":59},[34,6685,1648],{"class":112},[34,6687,6688],{"class":187},"\"a=\"",[34,6690,1648],{"class":112},[34,6692,847],{"class":59},[34,6694,1648],{"class":112},[34,6696,1670],{"class":59},[34,6698,6699,6701,6703,6706,6708,6710,6712],{"class":36,"line":222},[34,6700,2022],{"class":59},[34,6702,1648],{"class":112},[34,6704,6705],{"class":187},"\"b=\"",[34,6707,1648],{"class":112},[34,6709,872],{"class":59},[34,6711,1648],{"class":112},[34,6713,1670],{"class":59},[34,6715,6716],{"class":36,"line":227},[34,6717,2036],{"class":59},[532,6719,6720],{},"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":22,"searchDepth":44,"depth":44,"links":6722},[6723,6724,6725,6726,6727,6728],{"id":5636,"depth":44,"text":5637},{"id":5725,"depth":44,"text":5726},{"id":5808,"depth":44,"text":5809},{"id":6034,"depth":44,"text":6035},{"id":6383,"depth":44,"text":6384},{"id":6540,"depth":44,"text":6541},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5628,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6735,"title":6736,"body":6737,"description":6744,"extension":538,"meta":8149,"navigation":540,"path":8150,"seo":8151,"stem":8152,"__hash__":8153},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6738,"toc":8139},[6739,6742,6745,6749,6911,6915,6918,6921,6924,6927,7067,7071,7074,7077,7080,7145,7149,7154,7221,7224,7228,7231,7242,7247,7267,7270,7275,7294,7297,7301,7320,7323,7327,7562,7566,7569,7572,7575,7737,7740,7744,7747,7753,8136],[10,6740,6736],{"id":6741},"_3指针",[14,6743,6744],{},"通过指针保存一个地址，指针就是个地址",[555,6746,6748],{"id":6747},"_31定义指针","3.1定义指针",[25,6750,6752],{"className":605,"code":6751,"language":607,"meta":22,"style":22},"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",[31,6753,6754,6762,6766,6771,6783,6788,6796,6806,6824,6844,6848,6853,6858,6863,6877,6893,6907],{"__ignoreMap":22},[34,6755,6756,6758,6760],{"class":36,"line":37},[34,6757,620],{"class":112},[34,6759,2437],{"class":2427},[34,6761,2440],{"class":59},[34,6763,6764],{"class":36,"line":44},[34,6765,2017],{"class":59},[34,6767,6768],{"class":36,"line":50},[34,6769,6770],{"class":40},"    \u002F\u002F1.定义指针\n",[34,6772,6773,6775,6777,6779,6781],{"class":36,"line":56},[34,6774,2449],{"class":112},[34,6776,1870],{"class":59},[34,6778,447],{"class":112},[34,6780,1053],{"class":63},[34,6782,1765],{"class":59},[34,6784,6785],{"class":36,"line":107},[34,6786,6787],{"class":40},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[34,6789,6790,6793],{"class":36,"line":196},[34,6791,6792],{"class":112},"    int*",[34,6794,6795],{"class":59},"p;\n",[34,6797,6798,6801,6804],{"class":36,"line":202},[34,6799,6800],{"class":59},"    p",[34,6802,6803],{"class":112},"=&",[34,6805,6661],{"class":59},[34,6807,6808,6810,6812,6815,6818,6820,6822],{"class":36,"line":207},[34,6809,2022],{"class":59},[34,6811,1648],{"class":112},[34,6813,6814],{"class":187},"\"a的地址为：\"",[34,6816,6817],{"class":112},"\u003C\u003C&",[34,6819,847],{"class":59},[34,6821,1648],{"class":112},[34,6823,1670],{"class":59},[34,6825,6826,6828,6830,6833,6835,6837,6839,6841],{"class":36,"line":222},[34,6827,2022],{"class":59},[34,6829,1648],{"class":112},[34,6831,6832],{"class":187},"\"指针p为：\"",[34,6834,1648],{"class":112},[34,6836,14],{"class":59},[34,6838,1648],{"class":112},[34,6840,1713],{"class":59},[34,6842,6843],{"class":40},"\u002F\u002F指针p表示的就是a的地址\n",[34,6845,6846],{"class":36,"line":227},[34,6847,2864],{"emptyLinePlaceholder":540},[34,6849,6850],{"class":36,"line":232},[34,6851,6852],{"class":40},"    \u002F\u002F2.使用指针\n",[34,6854,6855],{"class":36,"line":238},[34,6856,6857],{"class":40},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[34,6859,6860],{"class":36,"line":244},[34,6861,6862],{"class":40},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[34,6864,6865,6868,6870,6872,6875],{"class":36,"line":250},[34,6866,6867],{"class":112},"    *",[34,6869,14],{"class":59},[34,6871,447],{"class":112},[34,6873,6874],{"class":63},"1000",[34,6876,1765],{"class":59},[34,6878,6879,6881,6884,6886,6888,6890],{"class":36,"line":256},[34,6880,2022],{"class":59},[34,6882,6883],{"class":112},"\u003C\u003C*",[34,6885,14],{"class":59},[34,6887,1648],{"class":112},[34,6889,1713],{"class":59},[34,6891,6892],{"class":40},"\u002F\u002F1000\n",[34,6894,6895,6897,6899,6901,6903,6905],{"class":36,"line":261},[34,6896,2022],{"class":59},[34,6898,1648],{"class":112},[34,6900,847],{"class":59},[34,6902,1648],{"class":112},[34,6904,1713],{"class":59},[34,6906,6892],{"class":40},[34,6908,6909],{"class":36,"line":267},[34,6910,2036],{"class":59},[555,6912,6914],{"id":6913},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6916,6917],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6919,6920],{},"在32位操作系统下：占用4个字节空间",[14,6922,6923],{},"在64位操作系统下：占用8个字节空间",[14,6925,6926],{},"上方是不管啥数据类型的",[25,6928,6930],{"className":605,"code":6929,"language":607,"meta":22,"style":22},"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",[31,6931,6932,6940,6944,6949,6961,6966,6971,6976,6989,7011,7037,7063],{"__ignoreMap":22},[34,6933,6934,6936,6938],{"class":36,"line":37},[34,6935,620],{"class":112},[34,6937,2437],{"class":2427},[34,6939,2440],{"class":59},[34,6941,6942],{"class":36,"line":44},[34,6943,2017],{"class":59},[34,6945,6946],{"class":36,"line":50},[34,6947,6948],{"class":40},"    \u002F\u002F指针所占内存空间\n",[34,6950,6951,6953,6955,6957,6959],{"class":36,"line":56},[34,6952,2449],{"class":112},[34,6954,1870],{"class":59},[34,6956,447],{"class":112},[34,6958,1053],{"class":63},[34,6960,1765],{"class":59},[34,6962,6963],{"class":36,"line":107},[34,6964,6965],{"class":40},"    \u002F\u002Fint *p;\n",[34,6967,6968],{"class":36,"line":196},[34,6969,6970],{"class":40},"    \u002F\u002Fp=&a;\n",[34,6972,6973],{"class":36,"line":202},[34,6974,6975],{"class":40},"    \u002F\u002F上述可以写为以下：\n",[34,6977,6978,6980,6983,6985,6987],{"class":36,"line":207},[34,6979,2449],{"class":112},[34,6981,6982],{"class":112}," *",[34,6984,14],{"class":59},[34,6986,6803],{"class":112},[34,6988,6661],{"class":59},[34,6990,6991,6994,6996,6999,7001,7004,7006,7008],{"class":36,"line":222},[34,6992,6993],{"class":59},"    cout ",[34,6995,1648],{"class":112},[34,6997,6998],{"class":187},"\"sizeof(int *)\"",[34,7000,1844],{"class":112},[34,7002,7003],{"class":59},"(p)",[34,7005,1648],{"class":112},[34,7007,1713],{"class":59},[34,7009,7010],{"class":40},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[34,7012,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031,7034],{"class":36,"line":227},[34,7014,6993],{"class":59},[34,7016,1648],{"class":112},[34,7018,6998],{"class":187},[34,7020,1844],{"class":112},[34,7022,617],{"class":59},[34,7024,620],{"class":112},[34,7026,6982],{"class":112},[34,7028,1036],{"class":59},[34,7030,1648],{"class":112},[34,7032,7033],{"class":59},"endl",[34,7035,7036],{"class":40},"  \u002F\u002F4字节(32位的话)\n",[34,7038,7039,7041,7043,7046,7048,7050,7052,7054,7056,7058,7060],{"class":36,"line":232},[34,7040,6993],{"class":59},[34,7042,1648],{"class":112},[34,7044,7045],{"class":187},"\"sizeof(char *)\"",[34,7047,1844],{"class":112},[34,7049,617],{"class":59},[34,7051,708],{"class":112},[34,7053,6982],{"class":112},[34,7055,1036],{"class":59},[34,7057,1648],{"class":112},[34,7059,1713],{"class":59},[34,7061,7062],{"class":40}," \u002F\u002F4字节(32位的话)\n",[34,7064,7065],{"class":36,"line":238},[34,7066,2036],{"class":59},[555,7068,7070],{"id":7069},"_33空指针","3.3空指针",[14,7072,7073],{},"空指针：指针变量指向内存中编号为0的空间",[14,7075,7076],{},"用途：初始化指针变量",[14,7078,7079],{},"注意：空指针指向的内存是不可以访问的",[25,7081,7083],{"className":605,"code":7082,"language":607,"meta":22,"style":22},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[31,7084,7085,7093,7097,7102,7116,7121,7136,7141],{"__ignoreMap":22},[34,7086,7087,7089,7091],{"class":36,"line":37},[34,7088,620],{"class":112},[34,7090,2437],{"class":2427},[34,7092,2440],{"class":59},[34,7094,7095],{"class":36,"line":44},[34,7096,2017],{"class":59},[34,7098,7099],{"class":36,"line":50},[34,7100,7101],{"class":40},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[34,7103,7104,7106,7108,7110,7112,7114],{"class":36,"line":56},[34,7105,2449],{"class":112},[34,7107,6982],{"class":112},[34,7109,14],{"class":59},[34,7111,447],{"class":112},[34,7113,2856],{"class":63},[34,7115,1765],{"class":59},[34,7117,7118],{"class":36,"line":107},[34,7119,7120],{"class":40},"    \u002F\u002F2.空指针不能进行访问\n",[34,7122,7123,7125,7127,7129,7131,7133],{"class":36,"line":196},[34,7124,6867],{"class":112},[34,7126,14],{"class":59},[34,7128,447],{"class":112},[34,7130,919],{"class":63},[34,7132,670],{"class":59},[34,7134,7135],{"class":40},"\u002F\u002F直接报错，压根不能访问\n",[34,7137,7138],{"class":36,"line":202},[34,7139,7140],{"class":40},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[34,7142,7143],{"class":36,"line":207},[34,7144,2036],{"class":59},[555,7146,7148],{"id":7147},"_34野指针","3.4野指针",[14,7150,7151],{},[760,7152,7153],{},"指针变量指向非法的内存空间",[25,7155,7157],{"className":605,"code":7156,"language":607,"meta":22,"style":22},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[31,7158,7159,7167,7171,7200,7205,7217],{"__ignoreMap":22},[34,7160,7161,7163,7165],{"class":36,"line":37},[34,7162,620],{"class":112},[34,7164,2437],{"class":2427},[34,7166,2440],{"class":59},[34,7168,7169],{"class":36,"line":44},[34,7170,2017],{"class":59},[34,7172,7173,7175,7177,7179,7181,7183,7185,7187,7189,7192,7195,7197],{"class":36,"line":50},[34,7174,2449],{"class":112},[34,7176,6982],{"class":112},[34,7178,14],{"class":59},[34,7180,447],{"class":112},[34,7182,617],{"class":59},[34,7184,620],{"class":112},[34,7186,6982],{"class":112},[34,7188,1036],{"class":59},[34,7190,7191],{"class":112},"0x",[34,7193,7194],{"class":63},"1100",[34,7196,670],{"class":59},[34,7198,7199],{"class":40}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[34,7201,7202],{"class":36,"line":56},[34,7203,7204],{"class":40},"    \u002F\u002F访问野指针报错\n",[34,7206,7207,7209,7211,7213,7215],{"class":36,"line":107},[34,7208,2022],{"class":59},[34,7210,6883],{"class":112},[34,7212,14],{"class":59},[34,7214,1648],{"class":112},[34,7216,1670],{"class":59},[34,7218,7219],{"class":36,"line":196},[34,7220,2036],{"class":59},[14,7222,7223],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[555,7225,7227],{"id":7226},"_35const修饰指针","3.5const修饰指针",[14,7229,7230],{},"三种情况：",[1611,7232,7233,7236,7239],{},[570,7234,7235],{},"const修饰指针 常量指针",[570,7237,7238],{},"const修饰常量 指针常量",[570,7240,7241],{},"const即修饰指针，又修饰常量",[567,7243,7244],{},[570,7245,7246],{},"常量指针",[25,7248,7250],{"className":605,"code":7249,"language":607,"meta":22,"style":22},"const int *p=&a;\n",[31,7251,7252],{"__ignoreMap":22},[34,7253,7254,7257,7259,7261,7263,7265],{"class":36,"line":37},[34,7255,7256],{"class":112},"const",[34,7258,2846],{"class":112},[34,7260,6982],{"class":112},[34,7262,14],{"class":59},[34,7264,6803],{"class":112},[34,7266,6661],{"class":59},[14,7268,7269],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[567,7271,7272],{"start":44},[570,7273,7274],{},"指针常量",[25,7276,7278],{"className":605,"code":7277,"language":607,"meta":22,"style":22},"int *const p=&a;\n",[31,7279,7280],{"__ignoreMap":22},[34,7281,7282,7284,7287,7290,7292],{"class":36,"line":37},[34,7283,620],{"class":112},[34,7285,7286],{"class":112}," *const",[34,7288,7289],{"class":59}," p",[34,7291,6803],{"class":112},[34,7293,6661],{"class":59},[14,7295,7296],{},"指针的指向不可以改，指针指向的值可以改",[567,7298,7299],{"start":50},[570,7300,7241],{},[25,7302,7304],{"className":605,"code":7303,"language":607,"meta":22,"style":22},"const int *const p=&a;\n",[31,7305,7306],{"__ignoreMap":22},[34,7307,7308,7310,7312,7314,7316,7318],{"class":36,"line":37},[34,7309,7256],{"class":112},[34,7311,2846],{"class":112},[34,7313,7286],{"class":112},[34,7315,7289],{"class":59},[34,7317,6803],{"class":112},[34,7319,6661],{"class":59},[14,7321,7322],{},"指针的指向和指针指向的值都不可以改变",[555,7324,7326],{"id":7325},"_36指针和数组","3.6指针和数组",[25,7328,7330],{"className":605,"code":7329,"language":607,"meta":22,"style":22},"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",[31,7331,7332,7340,7344,7349,7403,7424,7440,7456,7467,7484,7489,7503,7529,7533,7545,7554,7558],{"__ignoreMap":22},[34,7333,7334,7336,7338],{"class":36,"line":37},[34,7335,620],{"class":112},[34,7337,2437],{"class":2427},[34,7339,2440],{"class":59},[34,7341,7342],{"class":36,"line":44},[34,7343,2017],{"class":59},[34,7345,7346],{"class":36,"line":50},[34,7347,7348],{"class":40},"    \u002F\u002F利用指针访问数组中的元素\n",[34,7350,7351,7353,7355,7357,7359,7361,7363,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395,7397,7399,7401],{"class":36,"line":56},[34,7352,2449],{"class":112},[34,7354,4426],{"class":59},[34,7356,1053],{"class":63},[34,7358,477],{"class":59},[34,7360,447],{"class":112},[34,7362,1501],{"class":59},[34,7364,64],{"class":63},[34,7366,67],{"class":59},[34,7368,70],{"class":63},[34,7370,67],{"class":59},[34,7372,309],{"class":63},[34,7374,67],{"class":59},[34,7376,217],{"class":63},[34,7378,67],{"class":59},[34,7380,927],{"class":63},[34,7382,67],{"class":59},[34,7384,952],{"class":63},[34,7386,67],{"class":59},[34,7388,977],{"class":63},[34,7390,67],{"class":59},[34,7392,1002],{"class":63},[34,7394,67],{"class":59},[34,7396,1027],{"class":63},[34,7398,67],{"class":59},[34,7400,1053],{"class":63},[34,7402,4459],{"class":59},[34,7404,7405,7407,7409,7412,7414,7416,7418,7420,7422],{"class":36,"line":107},[34,7406,2022],{"class":59},[34,7408,1648],{"class":112},[34,7410,7411],{"class":187},"\"数组的第一个元素为：\"",[34,7413,1648],{"class":112},[34,7415,4370],{"class":59},[34,7417,319],{"class":63},[34,7419,477],{"class":59},[34,7421,1648],{"class":112},[34,7423,1670],{"class":59},[34,7425,7426,7428,7430,7432,7434,7437],{"class":36,"line":196},[34,7427,2449],{"class":112},[34,7429,6982],{"class":112},[34,7431,14],{"class":59},[34,7433,447],{"class":112},[34,7435,7436],{"class":59},"arr;",[34,7438,7439],{"class":40},"\u002F\u002F注意数才要加取地址符号&\n",[34,7441,7442,7444,7446,7448,7450,7452,7454],{"class":36,"line":202},[34,7443,2022],{"class":59},[34,7445,1648],{"class":112},[34,7447,7411],{"class":187},[34,7449,6883],{"class":112},[34,7451,14],{"class":59},[34,7453,1648],{"class":112},[34,7455,1670],{"class":59},[34,7457,7458,7460,7462,7464],{"class":36,"line":207},[34,7459,6800],{"class":59},[34,7461,2756],{"class":112},[34,7463,670],{"class":59},[34,7465,7466],{"class":40}," \u002F\u002F让指针向后偏移4个字节\n",[34,7468,7469,7471,7473,7476,7478,7480,7482],{"class":36,"line":222},[34,7470,2022],{"class":59},[34,7472,1648],{"class":112},[34,7474,7475],{"class":187},"\"数组的第二个元素为：\"",[34,7477,6883],{"class":112},[34,7479,14],{"class":59},[34,7481,1648],{"class":112},[34,7483,1670],{"class":59},[34,7485,7486],{"class":36,"line":227},[34,7487,7488],{"class":40},"    \u002F\u002F利用指针遍历数组\n",[34,7490,7491,7493,7495,7498,7500],{"class":36,"line":232},[34,7492,2449],{"class":112},[34,7494,6982],{"class":112},[34,7496,7497],{"class":59},"p2",[34,7499,447],{"class":112},[34,7501,7502],{"class":59},"arr;\n",[34,7504,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527],{"class":36,"line":238},[34,7506,3665],{"class":112},[34,7508,2122],{"class":59},[34,7510,620],{"class":112},[34,7512,3496],{"class":59},[34,7514,447],{"class":112},[34,7516,319],{"class":63},[34,7518,3503],{"class":59},[34,7520,1515],{"class":112},[34,7522,1053],{"class":63},[34,7524,3503],{"class":59},[34,7526,2756],{"class":112},[34,7528,623],{"class":59},[34,7530,7531],{"class":36,"line":244},[34,7532,2494],{"class":59},[34,7534,7535,7537,7539,7541,7543],{"class":36,"line":250},[34,7536,3915],{"class":59},[34,7538,6883],{"class":112},[34,7540,7497],{"class":59},[34,7542,1648],{"class":112},[34,7544,1670],{"class":59},[34,7546,7547,7550,7552],{"class":36,"line":256},[34,7548,7549],{"class":59},"        p2",[34,7551,2756],{"class":112},[34,7553,1765],{"class":59},[34,7555,7556],{"class":36,"line":261},[34,7557,2651],{"class":59},[34,7559,7560],{"class":36,"line":267},[34,7561,2036],{"class":59},[555,7563,7565],{"id":7564},"_37指针和函数","3.7指针和函数",[14,7567,7568],{},"利用指针做函数参数，可以修改实参的值",[14,7570,7571],{},"值传递：只改变形参，不改变实参",[14,7573,7574],{},"地址传递：",[25,7576,7578],{"className":605,"code":7577,"language":607,"meta":22,"style":22},"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",[31,7579,7580,7605,7609,7621,7632,7642,7646,7654,7658,7670,7682,7687,7703,7718,7733],{"__ignoreMap":22},[34,7581,7582,7584,7586,7588,7590,7592,7595,7597,7599,7601,7603],{"class":36,"line":37},[34,7583,5828],{"class":112},[34,7585,5831],{"class":2427},[34,7587,617],{"class":59},[34,7589,620],{"class":112},[34,7591,6982],{"class":112},[34,7593,7594],{"class":5680},"p1",[34,7596,67],{"class":59},[34,7598,620],{"class":112},[34,7600,6982],{"class":112},[34,7602,7497],{"class":5680},[34,7604,623],{"class":59},[34,7606,7607],{"class":36,"line":44},[34,7608,2017],{"class":59},[34,7610,7611,7613,7615,7618],{"class":36,"line":50},[34,7612,2449],{"class":112},[34,7614,4719],{"class":59},[34,7616,7617],{"class":112},"=*",[34,7619,7620],{"class":59},"p1;\n",[34,7622,7623,7625,7627,7629],{"class":36,"line":56},[34,7624,6867],{"class":112},[34,7626,7594],{"class":59},[34,7628,7617],{"class":112},[34,7630,7631],{"class":59},"p2;\n",[34,7633,7634,7636,7638,7640],{"class":36,"line":107},[34,7635,6867],{"class":112},[34,7637,7497],{"class":59},[34,7639,447],{"class":112},[34,7641,4744],{"class":59},[34,7643,7644],{"class":36,"line":196},[34,7645,2036],{"class":59},[34,7647,7648,7650,7652],{"class":36,"line":202},[34,7649,620],{"class":112},[34,7651,2437],{"class":2427},[34,7653,2440],{"class":59},[34,7655,7656],{"class":36,"line":207},[34,7657,2017],{"class":59},[34,7659,7660,7662,7664,7666,7668],{"class":36,"line":222},[34,7661,2449],{"class":112},[34,7663,1870],{"class":59},[34,7665,447],{"class":112},[34,7667,1053],{"class":63},[34,7669,1765],{"class":59},[34,7671,7672,7674,7676,7678,7680],{"class":36,"line":227},[34,7673,2449],{"class":112},[34,7675,3297],{"class":59},[34,7677,447],{"class":112},[34,7679,1306],{"class":63},[34,7681,1765],{"class":59},[34,7683,7684],{"class":36,"line":232},[34,7685,7686],{"class":40},"    \u002F\u002F地址传递\n",[34,7688,7689,7691,7693,7695,7698,7700],{"class":36,"line":238},[34,7690,6025],{"class":2427},[34,7692,617],{"class":59},[34,7694,961],{"class":112},[34,7696,7697],{"class":59},"a,",[34,7699,961],{"class":112},[34,7701,7702],{"class":59},"b);\n",[34,7704,7705,7707,7709,7711,7713,7715],{"class":36,"line":244},[34,7706,2022],{"class":59},[34,7708,1648],{"class":112},[34,7710,847],{"class":59},[34,7712,1648],{"class":112},[34,7714,1713],{"class":59},[34,7716,7717],{"class":40},"\u002F\u002F20\n",[34,7719,7720,7722,7724,7726,7728,7730],{"class":36,"line":250},[34,7721,2022],{"class":59},[34,7723,1648],{"class":112},[34,7725,872],{"class":59},[34,7727,1648],{"class":112},[34,7729,1713],{"class":59},[34,7731,7732],{"class":40},"\u002F\u002F10\n",[34,7734,7735],{"class":36,"line":256},[34,7736,2036],{"class":59},[14,7738,7739],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[555,7741,7743],{"id":7742},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7745,7746],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7748,7749,7750,7752],{},"例如数组：int arr",[34,7751,1053],{},"={4,3,6,9,1,2,10,8,7,5}",[25,7754,7756],{"className":605,"code":7755,"language":607,"meta":22,"style":22},"#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",[31,7757,7758,7764,7774,7798,7802,7833,7837,7871,7875,7893,7897,7908,7923,7938,7942,7946,7950,7954,7958,7966,7970,7975,8029,8041,8053,8058,8066,8070,8075,8100,8104,8119,8128,8132],{"__ignoreMap":22},[34,7759,7760,7762],{"class":36,"line":37},[34,7761,2413],{"class":112},[34,7763,2416],{"class":187},[34,7765,7766,7768,7770,7772],{"class":36,"line":44},[34,7767,2421],{"class":112},[34,7769,2424],{"class":112},[34,7771,2428],{"class":2427},[34,7773,1765],{"class":59},[34,7775,7776,7778,7781,7783,7785,7787,7789,7791,7793,7796],{"class":36,"line":50},[34,7777,5828],{"class":112},[34,7779,7780],{"class":2427}," bubbleSort",[34,7782,617],{"class":59},[34,7784,620],{"class":112},[34,7786,6982],{"class":112},[34,7788,14],{"class":5680},[34,7790,67],{"class":59},[34,7792,620],{"class":112},[34,7794,7795],{"class":5680}," len",[34,7797,623],{"class":59},[34,7799,7800],{"class":36,"line":56},[34,7801,2017],{"class":59},[34,7803,7804,7806,7808,7810,7812,7814,7816,7818,7820,7823,7825,7827,7829,7831],{"class":36,"line":107},[34,7805,3665],{"class":112},[34,7807,617],{"class":59},[34,7809,620],{"class":112},[34,7811,3496],{"class":59},[34,7813,447],{"class":112},[34,7815,319],{"class":63},[34,7817,3503],{"class":59},[34,7819,1515],{"class":112},[34,7821,7822],{"class":59},"len",[34,7824,113],{"class":112},[34,7826,64],{"class":63},[34,7828,3503],{"class":59},[34,7830,2756],{"class":112},[34,7832,623],{"class":59},[34,7834,7835],{"class":36,"line":196},[34,7836,2494],{"class":59},[34,7838,7839,7841,7843,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867,7869],{"class":36,"line":202},[34,7840,3867],{"class":112},[34,7842,617],{"class":59},[34,7844,620],{"class":112},[34,7846,3874],{"class":59},[34,7848,447],{"class":112},[34,7850,319],{"class":63},[34,7852,3881],{"class":59},[34,7854,1515],{"class":112},[34,7856,7822],{"class":59},[34,7858,113],{"class":112},[34,7860,1048],{"class":59},[34,7862,113],{"class":112},[34,7864,64],{"class":63},[34,7866,3881],{"class":59},[34,7868,2756],{"class":112},[34,7870,623],{"class":59},[34,7872,7873],{"class":36,"line":207},[34,7874,2974],{"class":59},[34,7876,7877,7879,7882,7884,7887,7889,7891],{"class":36,"line":222},[34,7878,5106],{"class":112},[34,7880,7881],{"class":59},"(p[j]",[34,7883,1564],{"class":112},[34,7885,7886],{"class":59},"p[j",[34,7888,1088],{"class":112},[34,7890,64],{"class":63},[34,7892,5121],{"class":59},[34,7894,7895],{"class":36,"line":227},[34,7896,5126],{"class":59},[34,7898,7899,7901,7903,7905],{"class":36,"line":232},[34,7900,5131],{"class":112},[34,7902,4719],{"class":59},[34,7904,447],{"class":112},[34,7906,7907],{"class":59},"p[j];\n",[34,7909,7910,7913,7915,7917,7919,7921],{"class":36,"line":238},[34,7911,7912],{"class":59},"                p[j]",[34,7914,447],{"class":112},[34,7916,7886],{"class":59},[34,7918,1088],{"class":112},[34,7920,64],{"class":63},[34,7922,5154],{"class":59},[34,7924,7925,7928,7930,7932,7934,7936],{"class":36,"line":244},[34,7926,7927],{"class":59},"                p[j",[34,7929,1088],{"class":112},[34,7931,64],{"class":63},[34,7933,477],{"class":59},[34,7935,447],{"class":112},[34,7937,4744],{"class":59},[34,7939,7940],{"class":36,"line":250},[34,7941,5174],{"class":59},[34,7943,7944],{"class":36,"line":256},[34,7945,2993],{"class":59},[34,7947,7948],{"class":36,"line":261},[34,7949,2651],{"class":59},[34,7951,7952],{"class":36,"line":267},[34,7953,2036],{"class":59},[34,7955,7956],{"class":36,"line":2138},[34,7957,2864],{"emptyLinePlaceholder":540},[34,7959,7960,7962,7964],{"class":36,"line":2143},[34,7961,620],{"class":112},[34,7963,2437],{"class":2427},[34,7965,2440],{"class":59},[34,7967,7968],{"class":36,"line":2157},[34,7969,2017],{"class":59},[34,7971,7972],{"class":36,"line":2162},[34,7973,7974],{"class":40},"    \u002F\u002F 1.创建数组\n",[34,7976,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995,7997,7999,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027],{"class":36,"line":2191},[34,7978,2449],{"class":112},[34,7980,4426],{"class":59},[34,7982,1053],{"class":63},[34,7984,477],{"class":59},[34,7986,447],{"class":112},[34,7988,1501],{"class":59},[34,7990,217],{"class":63},[34,7992,67],{"class":59},[34,7994,309],{"class":63},[34,7996,67],{"class":59},[34,7998,952],{"class":63},[34,8000,67],{"class":59},[34,8002,1027],{"class":63},[34,8004,67],{"class":59},[34,8006,64],{"class":63},[34,8008,67],{"class":59},[34,8010,70],{"class":63},[34,8012,67],{"class":59},[34,8014,1053],{"class":63},[34,8016,67],{"class":59},[34,8018,1002],{"class":63},[34,8020,67],{"class":59},[34,8022,977],{"class":63},[34,8024,67],{"class":59},[34,8026,927],{"class":63},[34,8028,4459],{"class":59},[34,8030,8031,8033,8035,8037,8039],{"class":36,"line":2196},[34,8032,2449],{"class":112},[34,8034,7795],{"class":59},[34,8036,447],{"class":112},[34,8038,1053],{"class":63},[34,8040,1765],{"class":59},[34,8042,8043,8045,8047,8049,8051],{"class":36,"line":2213},[34,8044,2449],{"class":112},[34,8046,6982],{"class":112},[34,8048,14],{"class":59},[34,8050,447],{"class":112},[34,8052,7502],{"class":59},[34,8054,8055],{"class":36,"line":2218},[34,8056,8057],{"class":40},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[34,8059,8060,8063],{"class":36,"line":2223},[34,8061,8062],{"class":2427},"    bubbleSort",[34,8064,8065],{"class":59},"(p,len);\n",[34,8067,8068],{"class":36,"line":2228},[34,8069,2864],{"emptyLinePlaceholder":540},[34,8071,8072],{"class":36,"line":2242},[34,8073,8074],{"class":40},"    \u002F\u002F 3.打印排序后的数组\n",[34,8076,8077,8079,8081,8083,8085,8087,8089,8091,8093,8096,8098],{"class":36,"line":2247},[34,8078,3665],{"class":112},[34,8080,2122],{"class":59},[34,8082,620],{"class":112},[34,8084,3496],{"class":59},[34,8086,447],{"class":112},[34,8088,319],{"class":63},[34,8090,3678],{"class":59},[34,8092,1515],{"class":112},[34,8094,8095],{"class":59},"len; i",[34,8097,2756],{"class":112},[34,8099,623],{"class":59},[34,8101,8102],{"class":36,"line":3041},[34,8103,2494],{"class":59},[34,8105,8106,8108,8110,8112,8114,8117],{"class":36,"line":3055},[34,8107,3915],{"class":59},[34,8109,6883],{"class":112},[34,8111,14],{"class":59},[34,8113,1648],{"class":112},[34,8115,8116],{"class":187},"\"\"",[34,8118,1765],{"class":59},[34,8120,8121,8124,8126],{"class":36,"line":3063},[34,8122,8123],{"class":59},"        p",[34,8125,2756],{"class":112},[34,8127,1765],{"class":59},[34,8129,8130],{"class":36,"line":3068},[34,8131,2651],{"class":59},[34,8133,8134],{"class":36,"line":3074},[34,8135,2036],{"class":59},[532,8137,8138],{},"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":22,"searchDepth":44,"depth":44,"links":8140},[8141,8142,8143,8144,8145,8146,8147,8148],{"id":6747,"depth":44,"text":6748},{"id":6913,"depth":44,"text":6914},{"id":7069,"depth":44,"text":7070},{"id":7147,"depth":44,"text":7148},{"id":7226,"depth":44,"text":7227},{"id":7325,"depth":44,"text":7326},{"id":7564,"depth":44,"text":7565},{"id":7742,"depth":44,"text":7743},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6736,"description":6744},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8155,"title":8156,"body":8157,"description":8164,"extension":538,"meta":11138,"navigation":540,"path":11139,"seo":11140,"stem":11141,"__hash__":11142},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8158,"toc":11129},[8159,8162,8165,8169,8172,8175,8186,8524,8527,8531,8534,8541,8796,8800,8803,8806,8961,8965,8968,8971,9177,9181,9184,9487,9490,9498,9502,9505,9656,9658,9669,9726,9730,9735,10392,10400,10403,10497,10500,11120,11126],[10,8160,8156],{"id":8161},"_4结构体",[14,8163,8164],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[555,8166,8168],{"id":8167},"_41结构体定义与使用","4.1结构体定义与使用",[14,8170,8171],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8173,8174],{},"通过结构体创建变量的方式：",[1611,8176,8177,8180,8183],{},[570,8178,8179],{},"struct 结构体名 变量名",[570,8181,8182],{},"struct 结构体名 变量名={成员1值，成员2值...}",[570,8184,8185],{},"定义结构体时顺便创建变量",[25,8187,8189],{"className":605,"code":8188,"language":607,"meta":22,"style":22},"#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",[31,8190,8191,8197,8207,8214,8219,8227,8231,8236,8240,8245,8250,8255,8262,8267,8274,8278,8285,8289,8293,8297,8301,8305,8309,8315,8319,8325,8333,8341,8345,8350,8355,8366,8371,8383,8394,8405,8410,8434,8439,8445,8472,8477,8483,8495,8507,8519],{"__ignoreMap":22},[34,8192,8193,8195],{"class":36,"line":37},[34,8194,2413],{"class":112},[34,8196,2416],{"class":187},[34,8198,8199,8201,8203,8205],{"class":36,"line":44},[34,8200,2421],{"class":112},[34,8202,2424],{"class":112},[34,8204,2428],{"class":2427},[34,8206,1765],{"class":59},[34,8208,8209,8211],{"class":36,"line":50},[34,8210,2413],{"class":112},[34,8212,8213],{"class":187},"\u003Cstring>\n",[34,8215,8216],{"class":36,"line":56},[34,8217,8218],{"class":40},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[34,8220,8221,8224],{"class":36,"line":107},[34,8222,8223],{"class":112},"struct",[34,8225,8226],{"class":2427}," Student\n",[34,8228,8229],{"class":36,"line":196},[34,8230,2017],{"class":59},[34,8232,8233],{"class":36,"line":202},[34,8234,8235],{"class":40},"    \u002F\u002F成员列表\n",[34,8237,8238],{"class":36,"line":207},[34,8239,2864],{"emptyLinePlaceholder":540},[34,8241,8242],{"class":36,"line":222},[34,8243,8244],{"class":40},"    \u002F\u002F姓名\n",[34,8246,8247],{"class":36,"line":227},[34,8248,8249],{"class":59},"    string name;\n",[34,8251,8252],{"class":36,"line":232},[34,8253,8254],{"class":40},"    \u002F\u002F年龄\n",[34,8256,8257,8259],{"class":36,"line":238},[34,8258,2449],{"class":112},[34,8260,8261],{"class":59}," age;\n",[34,8263,8264],{"class":36,"line":244},[34,8265,8266],{"class":40},"    \u002F\u002F分数\n",[34,8268,8269,8271],{"class":36,"line":250},[34,8270,2449],{"class":112},[34,8272,8273],{"class":59}," score;\n",[34,8275,8276],{"class":36,"line":256},[34,8277,4459],{"class":59},[34,8279,8280,8282],{"class":36,"line":261},[34,8281,8223],{"class":112},[34,8283,8284],{"class":2427}," School\n",[34,8286,8287],{"class":36,"line":267},[34,8288,2017],{"class":59},[34,8290,8291],{"class":36,"line":2138},[34,8292,8235],{"class":40},[34,8294,8295],{"class":36,"line":2143},[34,8296,2864],{"emptyLinePlaceholder":540},[34,8298,8299],{"class":36,"line":2157},[34,8300,8244],{"class":40},[34,8302,8303],{"class":36,"line":2162},[34,8304,8249],{"class":59},[34,8306,8307],{"class":36,"line":2191},[34,8308,8254],{"class":40},[34,8310,8311,8313],{"class":36,"line":2196},[34,8312,2449],{"class":112},[34,8314,8261],{"class":59},[34,8316,8317],{"class":36,"line":2213},[34,8318,8266],{"class":40},[34,8320,8321,8323],{"class":36,"line":2218},[34,8322,2449],{"class":112},[34,8324,8273],{"class":59},[34,8326,8327,8330],{"class":36,"line":2223},[34,8328,8329],{"class":59},"} s3;",[34,8331,8332],{"class":40}," \u002F\u002F创建结构体时就创建了变量\n",[34,8334,8335,8337,8339],{"class":36,"line":2228},[34,8336,620],{"class":112},[34,8338,2437],{"class":2427},[34,8340,2440],{"class":59},[34,8342,8343],{"class":36,"line":2242},[34,8344,2017],{"class":59},[34,8346,8347],{"class":36,"line":2247},[34,8348,8349],{"class":40},"    \u002F\u002F2.通过学生类型创建具体学生\n",[34,8351,8352],{"class":36,"line":3041},[34,8353,8354],{"class":40},"    \u002F\u002F2.1 struct Student s1;\n",[34,8356,8357,8360,8363],{"class":36,"line":3055},[34,8358,8359],{"class":112},"    struct",[34,8361,8362],{"class":2427}," Student",[34,8364,8365],{"class":59}," s1;\n",[34,8367,8368],{"class":36,"line":3063},[34,8369,8370],{"class":40},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[34,8372,8373,8376,8378,8381],{"class":36,"line":3068},[34,8374,8375],{"class":59},"    s1.name",[34,8377,447],{"class":112},[34,8379,8380],{"class":187},"\"张三\"",[34,8382,1765],{"class":59},[34,8384,8385,8388,8390,8392],{"class":36,"line":3074},[34,8386,8387],{"class":59},"    s1.age",[34,8389,447],{"class":112},[34,8391,1256],{"class":63},[34,8393,1765],{"class":59},[34,8395,8396,8399,8401,8403],{"class":36,"line":3080},[34,8397,8398],{"class":59},"    s1.score",[34,8400,447],{"class":112},[34,8402,863],{"class":63},[34,8404,1765],{"class":59},[34,8406,8407],{"class":36,"line":3085},[34,8408,8409],{"class":40},"    \u002F\u002F输出结果\n",[34,8411,8413,8415,8417,8420,8422,8425,8427,8430,8432],{"class":36,"line":8412},37,[34,8414,2022],{"class":59},[34,8416,1648],{"class":112},[34,8418,8419],{"class":59},"s1.name",[34,8421,1648],{"class":112},[34,8423,8424],{"class":59},"s1.age",[34,8426,1648],{"class":112},[34,8428,8429],{"class":59},"s1.score",[34,8431,1648],{"class":112},[34,8433,1670],{"class":59},[34,8435,8437],{"class":36,"line":8436},38,[34,8438,2864],{"emptyLinePlaceholder":540},[34,8440,8442],{"class":36,"line":8441},39,[34,8443,8444],{"class":40},"    \u002F\u002F2.2 struct Student s2={...}\n",[34,8446,8448,8450,8452,8455,8457,8459,8462,8464,8466,8468,8470],{"class":36,"line":8447},40,[34,8449,8359],{"class":112},[34,8451,8362],{"class":2427},[34,8453,8454],{"class":59}," s2",[34,8456,447],{"class":112},[34,8458,1501],{"class":59},[34,8460,8461],{"class":187},"\"王五\"",[34,8463,67],{"class":59},[34,8465,1256],{"class":63},[34,8467,67],{"class":59},[34,8469,863],{"class":63},[34,8471,4459],{"class":59},[34,8473,8475],{"class":36,"line":8474},41,[34,8476,2864],{"emptyLinePlaceholder":540},[34,8478,8480],{"class":36,"line":8479},42,[34,8481,8482],{"class":40},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[34,8484,8486,8489,8491,8493],{"class":36,"line":8485},43,[34,8487,8488],{"class":59},"    s3.name",[34,8490,447],{"class":112},[34,8492,4142],{"class":187},[34,8494,1765],{"class":59},[34,8496,8498,8501,8503,8505],{"class":36,"line":8497},44,[34,8499,8500],{"class":59},"    s3.age",[34,8502,447],{"class":112},[34,8504,1256],{"class":63},[34,8506,1765],{"class":59},[34,8508,8510,8513,8515,8517],{"class":36,"line":8509},45,[34,8511,8512],{"class":59},"    s3.score",[34,8514,447],{"class":112},[34,8516,1306],{"class":63},[34,8518,1765],{"class":59},[34,8520,8522],{"class":36,"line":8521},46,[34,8523,2036],{"class":59},[14,8525,8526],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[555,8528,8530],{"id":8529},"_42结构体数组","4.2结构体数组",[14,8532,8533],{},"将自定义的结构体放入到数组中方便维护",[14,8535,8536,8537,8540],{},"语法：struct 结构体名 数组名",[34,8538,8539],{},"元素个数","={ {}，{},...{} };",[25,8542,8544],{"className":605,"code":8543,"language":607,"meta":22,"style":22},"#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",[31,8545,8546,8552,8562,8568,8573,8579,8583,8587,8593,8599,8603,8607,8615,8619,8624,8639,8643,8659,8675,8679,8684,8700,8715,8730,8735,8761,8765,8788,8792],{"__ignoreMap":22},[34,8547,8548,8550],{"class":36,"line":37},[34,8549,2413],{"class":112},[34,8551,2416],{"class":187},[34,8553,8554,8556,8558,8560],{"class":36,"line":44},[34,8555,2421],{"class":112},[34,8557,2424],{"class":112},[34,8559,2428],{"class":2427},[34,8561,1765],{"class":59},[34,8563,8564,8566],{"class":36,"line":50},[34,8565,2413],{"class":112},[34,8567,8213],{"class":187},[34,8569,8570],{"class":36,"line":56},[34,8571,8572],{"class":40},"\u002F\u002F1.定义结构体\n",[34,8574,8575,8577],{"class":36,"line":107},[34,8576,8223],{"class":112},[34,8578,8226],{"class":2427},[34,8580,8581],{"class":36,"line":196},[34,8582,2017],{"class":59},[34,8584,8585],{"class":36,"line":202},[34,8586,8249],{"class":59},[34,8588,8589,8591],{"class":36,"line":207},[34,8590,2449],{"class":112},[34,8592,8261],{"class":59},[34,8594,8595,8597],{"class":36,"line":222},[34,8596,2449],{"class":112},[34,8598,8273],{"class":59},[34,8600,8601],{"class":36,"line":227},[34,8602,2864],{"emptyLinePlaceholder":540},[34,8604,8605],{"class":36,"line":232},[34,8606,4459],{"class":59},[34,8608,8609,8611,8613],{"class":36,"line":238},[34,8610,620],{"class":112},[34,8612,2437],{"class":2427},[34,8614,2440],{"class":59},[34,8616,8617],{"class":36,"line":244},[34,8618,2017],{"class":59},[34,8620,8621],{"class":36,"line":250},[34,8622,8623],{"class":40},"    \u002F\u002F2.创建结构体数组\n",[34,8625,8626,8628,8630,8633,8635,8637],{"class":36,"line":256},[34,8627,8359],{"class":112},[34,8629,8362],{"class":2427},[34,8631,8632],{"class":59}," stuArray[",[34,8634,70],{"class":63},[34,8636,477],{"class":59},[34,8638,5372],{"class":112},[34,8640,8641],{"class":36,"line":261},[34,8642,2494],{"class":59},[34,8644,8645,8647,8649,8651,8653,8655,8657],{"class":36,"line":267},[34,8646,5381],{"class":59},[34,8648,8380],{"class":187},[34,8650,67],{"class":59},[34,8652,1256],{"class":63},[34,8654,67],{"class":59},[34,8656,919],{"class":63},[34,8658,5394],{"class":59},[34,8660,8661,8663,8665,8667,8669,8671,8673],{"class":36,"line":2138},[34,8662,5381],{"class":59},[34,8664,4142],{"class":187},[34,8666,67],{"class":59},[34,8668,1181],{"class":63},[34,8670,67],{"class":59},[34,8672,1181],{"class":63},[34,8674,2036],{"class":59},[34,8676,8677],{"class":36,"line":2143},[34,8678,2651],{"class":59},[34,8680,8681],{"class":36,"line":2157},[34,8682,8683],{"class":40},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[34,8685,8686,8689,8691,8694,8696,8698],{"class":36,"line":2162},[34,8687,8688],{"class":59},"    stuArray[",[34,8690,64],{"class":63},[34,8692,8693],{"class":59},"].name",[34,8695,447],{"class":112},[34,8697,4165],{"class":187},[34,8699,1765],{"class":59},[34,8701,8702,8704,8706,8709,8711,8713],{"class":36,"line":2191},[34,8703,8688],{"class":59},[34,8705,64],{"class":63},[34,8707,8708],{"class":59},"].age",[34,8710,447],{"class":112},[34,8712,70],{"class":63},[34,8714,1765],{"class":59},[34,8716,8717,8719,8721,8724,8726,8728],{"class":36,"line":2196},[34,8718,8688],{"class":59},[34,8720,64],{"class":63},[34,8722,8723],{"class":59},"].score",[34,8725,447],{"class":112},[34,8727,70],{"class":63},[34,8729,1765],{"class":59},[34,8731,8732],{"class":36,"line":2213},[34,8733,8734],{"class":40},"    \u002F\u002F4.遍历结构体数组\n",[34,8736,8737,8739,8741,8743,8745,8747,8749,8751,8753,8755,8757,8759],{"class":36,"line":2218},[34,8738,3665],{"class":112},[34,8740,2122],{"class":59},[34,8742,620],{"class":112},[34,8744,3496],{"class":59},[34,8746,447],{"class":112},[34,8748,319],{"class":63},[34,8750,3503],{"class":59},[34,8752,1515],{"class":112},[34,8754,70],{"class":63},[34,8756,3503],{"class":59},[34,8758,2756],{"class":112},[34,8760,623],{"class":59},[34,8762,8763],{"class":36,"line":2223},[34,8764,2494],{"class":59},[34,8766,8767,8769,8771,8774,8776,8779,8781,8784,8786],{"class":36,"line":2228},[34,8768,3915],{"class":59},[34,8770,1648],{"class":112},[34,8772,8773],{"class":59},"stuArray[i].name",[34,8775,1648],{"class":112},[34,8777,8778],{"class":59},"stuArray[i].age",[34,8780,1648],{"class":112},[34,8782,8783],{"class":59},"stuArray[i].score",[34,8785,1648],{"class":112},[34,8787,1670],{"class":59},[34,8789,8790],{"class":36,"line":2242},[34,8791,2651],{"class":59},[34,8793,8794],{"class":36,"line":2247},[34,8795,2036],{"class":59},[555,8797,8799],{"id":8798},"_43结构体指针","4.3结构体指针",[14,8801,8802],{},"作用：通过指针访问结构体中的成员",[14,8804,8805],{},"利用操作符->可以通过结构体指针访问结构体属性",[25,8807,8809],{"className":605,"code":8808,"language":607,"meta":22,"style":22},"#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",[31,8810,8811,8817,8827,8833,8837,8843,8847,8851,8857,8863,8867,8875,8879,8884,8909,8914,8929,8934,8957],{"__ignoreMap":22},[34,8812,8813,8815],{"class":36,"line":37},[34,8814,2413],{"class":112},[34,8816,2416],{"class":187},[34,8818,8819,8821,8823,8825],{"class":36,"line":44},[34,8820,2421],{"class":112},[34,8822,2424],{"class":112},[34,8824,2428],{"class":2427},[34,8826,1765],{"class":59},[34,8828,8829,8831],{"class":36,"line":50},[34,8830,2413],{"class":112},[34,8832,8213],{"class":187},[34,8834,8835],{"class":36,"line":56},[34,8836,8572],{"class":40},[34,8838,8839,8841],{"class":36,"line":107},[34,8840,8223],{"class":112},[34,8842,8226],{"class":2427},[34,8844,8845],{"class":36,"line":196},[34,8846,2017],{"class":59},[34,8848,8849],{"class":36,"line":202},[34,8850,8249],{"class":59},[34,8852,8853,8855],{"class":36,"line":207},[34,8854,2449],{"class":112},[34,8856,8261],{"class":59},[34,8858,8859,8861],{"class":36,"line":222},[34,8860,2449],{"class":112},[34,8862,8273],{"class":59},[34,8864,8865],{"class":36,"line":227},[34,8866,4459],{"class":59},[34,8868,8869,8871,8873],{"class":36,"line":232},[34,8870,620],{"class":112},[34,8872,2437],{"class":2427},[34,8874,2440],{"class":59},[34,8876,8877],{"class":36,"line":238},[34,8878,2017],{"class":59},[34,8880,8881],{"class":36,"line":244},[34,8882,8883],{"class":40},"    \u002F\u002F创建学生结构体变量\n",[34,8885,8886,8888,8890,8893,8895,8897,8899,8901,8903,8905,8907],{"class":36,"line":250},[34,8887,8359],{"class":112},[34,8889,8362],{"class":2427},[34,8891,8892],{"class":59}," s",[34,8894,447],{"class":112},[34,8896,1501],{"class":59},[34,8898,8380],{"class":187},[34,8900,67],{"class":59},[34,8902,1256],{"class":63},[34,8904,67],{"class":59},[34,8906,2186],{"class":63},[34,8908,4459],{"class":59},[34,8910,8911],{"class":36,"line":256},[34,8912,8913],{"class":40},"    \u002F\u002F通过指针指向结构体变量\n",[34,8915,8916,8918,8920,8922,8924,8926],{"class":36,"line":261},[34,8917,8359],{"class":112},[34,8919,8362],{"class":2427},[34,8921,6982],{"class":112},[34,8923,14],{"class":59},[34,8925,6803],{"class":112},[34,8927,8928],{"class":59},"s\n",[34,8930,8931],{"class":36,"line":267},[34,8932,8933],{"class":40},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[34,8935,8936,8938,8940,8943,8945,8948,8950,8953,8955],{"class":36,"line":2138},[34,8937,2022],{"class":59},[34,8939,1648],{"class":112},[34,8941,8942],{"class":59},"p->name",[34,8944,1648],{"class":112},[34,8946,8947],{"class":59},"p->age",[34,8949,1648],{"class":112},[34,8951,8952],{"class":59},"p->score",[34,8954,1648],{"class":112},[34,8956,1670],{"class":59},[34,8958,8959],{"class":36,"line":2143},[34,8960,2036],{"class":59},[555,8962,8964],{"id":8963},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8966,8967],{},"作用：结构体中的成员可以是另一个结构体",[14,8969,8970],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[25,8972,8974],{"className":605,"code":8973,"language":607,"meta":22,"style":22},"#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",[31,8975,8976,8982,8992,8998,9003,9011,9015,9019,9025,9031,9035,9040,9047,9051,9058,9062,9068,9073,9077,9085,9089,9094,9099,9104,9115,9127,9138,9151,9162,9173],{"__ignoreMap":22},[34,8977,8978,8980],{"class":36,"line":37},[34,8979,2413],{"class":112},[34,8981,2416],{"class":187},[34,8983,8984,8986,8988,8990],{"class":36,"line":44},[34,8985,2421],{"class":112},[34,8987,2424],{"class":112},[34,8989,2428],{"class":2427},[34,8991,1765],{"class":59},[34,8993,8994,8996],{"class":36,"line":50},[34,8995,2413],{"class":112},[34,8997,8213],{"class":187},[34,8999,9000],{"class":36,"line":56},[34,9001,9002],{"class":40},"\u002F\u002F定义学生结构体\n",[34,9004,9005,9007,9009],{"class":36,"line":107},[34,9006,8223],{"class":112},[34,9008,8362],{"class":2427},[34,9010,3138],{"class":59},[34,9012,9013],{"class":36,"line":196},[34,9014,2017],{"class":59},[34,9016,9017],{"class":36,"line":202},[34,9018,8249],{"class":59},[34,9020,9021,9023],{"class":36,"line":207},[34,9022,2449],{"class":112},[34,9024,8261],{"class":59},[34,9026,9027,9029],{"class":36,"line":222},[34,9028,2449],{"class":112},[34,9030,8273],{"class":59},[34,9032,9033],{"class":36,"line":227},[34,9034,2036],{"class":59},[34,9036,9037],{"class":36,"line":232},[34,9038,9039],{"class":40},"\u002F\u002F定义老师结构体\n",[34,9041,9042,9044],{"class":36,"line":238},[34,9043,8223],{"class":112},[34,9045,9046],{"class":2427}," Teacher\n",[34,9048,9049],{"class":36,"line":244},[34,9050,2017],{"class":59},[34,9052,9053,9055],{"class":36,"line":250},[34,9054,2449],{"class":112},[34,9056,9057],{"class":59}," id;\n",[34,9059,9060],{"class":36,"line":256},[34,9061,8249],{"class":59},[34,9063,9064,9066],{"class":36,"line":261},[34,9065,2449],{"class":112},[34,9067,8261],{"class":59},[34,9069,9070],{"class":36,"line":267},[34,9071,9072],{"class":59},"    Student stu;\n",[34,9074,9075],{"class":36,"line":2138},[34,9076,2036],{"class":59},[34,9078,9079,9081,9083],{"class":36,"line":2143},[34,9080,620],{"class":112},[34,9082,2437],{"class":2427},[34,9084,6442],{"class":59},[34,9086,9087],{"class":36,"line":2157},[34,9088,2017],{"class":59},[34,9090,9091],{"class":36,"line":2162},[34,9092,9093],{"class":40},"    \u002F\u002F结构体嵌套结构体\n",[34,9095,9096],{"class":36,"line":2191},[34,9097,9098],{"class":40},"    \u002F\u002F创建老师\n",[34,9100,9101],{"class":36,"line":2196},[34,9102,9103],{"class":59},"    Teacher t;\n",[34,9105,9106,9109,9111,9113],{"class":36,"line":2213},[34,9107,9108],{"class":59},"    t.id",[34,9110,447],{"class":112},[34,9112,919],{"class":63},[34,9114,1765],{"class":59},[34,9116,9117,9120,9122,9125],{"class":36,"line":2218},[34,9118,9119],{"class":59},"    t.name",[34,9121,447],{"class":112},[34,9123,9124],{"class":187},"\"老王\"",[34,9126,1765],{"class":59},[34,9128,9129,9132,9134,9136],{"class":36,"line":2223},[34,9130,9131],{"class":59},"    t.age",[34,9133,447],{"class":112},[34,9135,1256],{"class":63},[34,9137,1765],{"class":59},[34,9139,9140,9143,9145,9148],{"class":36,"line":2228},[34,9141,9142],{"class":59},"    t.stu.name",[34,9144,447],{"class":112},[34,9146,9147],{"class":187},"\"小王\"",[34,9149,9150],{"class":59},"；\n",[34,9152,9153,9156,9158,9160],{"class":36,"line":2242},[34,9154,9155],{"class":59},"    t.stu.age",[34,9157,447],{"class":112},[34,9159,1306],{"class":63},[34,9161,1765],{"class":59},[34,9163,9164,9167,9169,9171],{"class":36,"line":2247},[34,9165,9166],{"class":59},"    t.stu.score",[34,9168,447],{"class":112},[34,9170,952],{"class":63},[34,9172,1765],{"class":59},[34,9174,9175],{"class":36,"line":3041},[34,9176,2036],{"class":59},[555,9178,9180],{"id":9179},"_45结构体做函数参数","4.5结构体做函数参数",[14,9182,9183],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[25,9185,9187],{"className":605,"code":9186,"language":607,"meta":22,"style":22},"#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",[31,9188,9189,9195,9205,9211,9217,9221,9225,9231,9237,9241,9246,9251,9268,9272,9305,9309,9314,9333,9337,9368,9372,9380,9384,9393,9405,9417,9429,9442,9450,9463,9475,9483],{"__ignoreMap":22},[34,9190,9191,9193],{"class":36,"line":37},[34,9192,2413],{"class":112},[34,9194,2416],{"class":187},[34,9196,9197,9199,9201,9203],{"class":36,"line":44},[34,9198,2421],{"class":112},[34,9200,2424],{"class":112},[34,9202,2428],{"class":2427},[34,9204,1765],{"class":59},[34,9206,9207,9209],{"class":36,"line":50},[34,9208,2413],{"class":112},[34,9210,8213],{"class":187},[34,9212,9213,9215],{"class":36,"line":56},[34,9214,8223],{"class":112},[34,9216,8226],{"class":2427},[34,9218,9219],{"class":36,"line":107},[34,9220,2017],{"class":59},[34,9222,9223],{"class":36,"line":196},[34,9224,8249],{"class":59},[34,9226,9227,9229],{"class":36,"line":202},[34,9228,2449],{"class":112},[34,9230,8261],{"class":59},[34,9232,9233,9235],{"class":36,"line":207},[34,9234,2449],{"class":112},[34,9236,8273],{"class":59},[34,9238,9239],{"class":36,"line":222},[34,9240,4459],{"class":59},[34,9242,9243],{"class":36,"line":227},[34,9244,9245],{"class":40},"\u002F\u002F打印学生信息的函数\n",[34,9247,9248],{"class":36,"line":232},[34,9249,9250],{"class":40},"\u002F\u002F值传递\n",[34,9252,9253,9255,9258,9260,9262,9264,9266],{"class":36,"line":238},[34,9254,5828],{"class":112},[34,9256,9257],{"class":2427}," printStudent1",[34,9259,617],{"class":59},[34,9261,8223],{"class":112},[34,9263,8362],{"class":2427},[34,9265,8892],{"class":5680},[34,9267,623],{"class":59},[34,9269,9270],{"class":36,"line":244},[34,9271,2017],{"class":59},[34,9273,9274,9276,9278,9281,9283,9286,9288,9291,9293,9295,9297,9300,9302],{"class":36,"line":250},[34,9275,6993],{"class":59},[34,9277,1648],{"class":112},[34,9279,9280],{"class":59}," s.name ",[34,9282,1648],{"class":112},[34,9284,9285],{"class":187}," \" \"",[34,9287,1916],{"class":112},[34,9289,9290],{"class":59}," s.age ",[34,9292,1648],{"class":112},[34,9294,9285],{"class":187},[34,9296,1916],{"class":112},[34,9298,9299],{"class":59}," s.score ",[34,9301,1648],{"class":112},[34,9303,9304],{"class":59}," endl;\n",[34,9306,9307],{"class":36,"line":256},[34,9308,2036],{"class":59},[34,9310,9311],{"class":36,"line":261},[34,9312,9313],{"class":40},"\u002F\u002F地址传递\n",[34,9315,9316,9318,9321,9323,9325,9327,9329,9331],{"class":36,"line":267},[34,9317,5828],{"class":112},[34,9319,9320],{"class":2427}," printStudent2",[34,9322,617],{"class":59},[34,9324,8223],{"class":112},[34,9326,8362],{"class":2427},[34,9328,6982],{"class":112},[34,9330,1301],{"class":5680},[34,9332,623],{"class":59},[34,9334,9335],{"class":36,"line":2138},[34,9336,2017],{"class":59},[34,9338,9339,9341,9343,9346,9348,9350,9352,9355,9357,9359,9361,9364,9366],{"class":36,"line":2143},[34,9340,6993],{"class":59},[34,9342,1648],{"class":112},[34,9344,9345],{"class":59}," s->name ",[34,9347,1648],{"class":112},[34,9349,9285],{"class":187},[34,9351,1916],{"class":112},[34,9353,9354],{"class":59}," s->age ",[34,9356,1648],{"class":112},[34,9358,9285],{"class":187},[34,9360,1916],{"class":112},[34,9362,9363],{"class":59}," s->score ",[34,9365,1648],{"class":112},[34,9367,9304],{"class":59},[34,9369,9370],{"class":36,"line":2157},[34,9371,2036],{"class":59},[34,9373,9374,9376,9378],{"class":36,"line":2162},[34,9375,620],{"class":112},[34,9377,2437],{"class":2427},[34,9379,2440],{"class":59},[34,9381,9382],{"class":36,"line":2191},[34,9383,2017],{"class":59},[34,9385,9386,9388,9390],{"class":36,"line":2196},[34,9387,8359],{"class":112},[34,9389,8362],{"class":2427},[34,9391,9392],{"class":59}," s;\n",[34,9394,9395,9398,9400,9403],{"class":36,"line":2213},[34,9396,9397],{"class":59},"    s.name ",[34,9399,447],{"class":112},[34,9401,9402],{"class":187}," \"张三\"",[34,9404,1765],{"class":59},[34,9406,9407,9410,9412,9415],{"class":36,"line":2218},[34,9408,9409],{"class":59},"    s.age ",[34,9411,447],{"class":112},[34,9413,9414],{"class":63}," 20",[34,9416,1765],{"class":59},[34,9418,9419,9422,9424,9427],{"class":36,"line":2223},[34,9420,9421],{"class":59},"    s.score ",[34,9423,447],{"class":112},[34,9425,9426],{"class":63}," 85",[34,9428,1765],{"class":59},[34,9430,9431,9433,9435,9438,9440],{"class":36,"line":2228},[34,9432,2022],{"class":59},[34,9434,1648],{"class":112},[34,9436,9437],{"class":187},"\"值传递:\"",[34,9439,1648],{"class":112},[34,9441,1670],{"class":59},[34,9443,9444,9447],{"class":36,"line":2242},[34,9445,9446],{"class":2427},"    printStudent1",[34,9448,9449],{"class":59},"(s);\n",[34,9451,9452,9454,9456,9459,9461],{"class":36,"line":2247},[34,9453,2022],{"class":59},[34,9455,1648],{"class":112},[34,9457,9458],{"class":187},"\"地址传递:\"",[34,9460,1648],{"class":112},[34,9462,1670],{"class":59},[34,9464,9465,9468,9470,9472],{"class":36,"line":3041},[34,9466,9467],{"class":2427},"    printStudent2",[34,9469,617],{"class":59},[34,9471,961],{"class":112},[34,9473,9474],{"class":59},"s); \n",[34,9476,9477,9479,9481],{"class":36,"line":3055},[34,9478,4554],{"class":112},[34,9480,4557],{"class":63},[34,9482,1765],{"class":59},[34,9484,9485],{"class":36,"line":3063},[34,9486,2036],{"class":59},[14,9488,9489],{},"注意：",[1611,9491,9492,9495],{},[570,9493,9494],{},"1.先定义结构体，不要在函数中写结构体的定义",[570,9496,9497],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[555,9499,9501],{"id":9500},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9503,9504],{},"用const防止误操作",[25,9506,9508],{"className":605,"code":9507,"language":607,"meta":22,"style":22},"#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",[31,9509,9510,9516,9526,9532,9537,9541,9545,9551,9557,9561,9577,9581,9604,9608,9616,9620,9641,9648,9652],{"__ignoreMap":22},[34,9511,9512,9514],{"class":36,"line":37},[34,9513,2413],{"class":112},[34,9515,2416],{"class":187},[34,9517,9518,9520,9522,9524],{"class":36,"line":44},[34,9519,2421],{"class":112},[34,9521,2424],{"class":112},[34,9523,2428],{"class":2427},[34,9525,1765],{"class":59},[34,9527,9528,9530],{"class":36,"line":50},[34,9529,2413],{"class":112},[34,9531,8213],{"class":187},[34,9533,9534],{"class":36,"line":56},[34,9535,9536],{"class":59},"sctuct Student\n",[34,9538,9539],{"class":36,"line":107},[34,9540,2017],{"class":59},[34,9542,9543],{"class":36,"line":196},[34,9544,8249],{"class":59},[34,9546,9547,9549],{"class":36,"line":202},[34,9548,2449],{"class":112},[34,9550,8261],{"class":59},[34,9552,9553,9555],{"class":36,"line":207},[34,9554,2449],{"class":112},[34,9556,8273],{"class":59},[34,9558,9559],{"class":36,"line":222},[34,9560,4459],{"class":59},[34,9562,9563,9565,9568,9570,9573,9575],{"class":36,"line":227},[34,9564,5828],{"class":112},[34,9566,9567],{"class":2427}," printStudents",[34,9569,617],{"class":59},[34,9571,9572],{"class":2427},"student",[34,9574,8892],{"class":5680},[34,9576,623],{"class":59},[34,9578,9579],{"class":36,"line":232},[34,9580,2017],{"class":59},[34,9582,9583,9585,9587,9590,9592,9595,9597,9600,9602],{"class":36,"line":238},[34,9584,2022],{"class":59},[34,9586,1648],{"class":112},[34,9588,9589],{"class":59},"s.name",[34,9591,1648],{"class":112},[34,9593,9594],{"class":59},"s.age",[34,9596,1648],{"class":112},[34,9598,9599],{"class":59},"s.score",[34,9601,1648],{"class":112},[34,9603,1670],{"class":59},[34,9605,9606],{"class":36,"line":244},[34,9607,2036],{"class":59},[34,9609,9610,9612,9614],{"class":36,"line":250},[34,9611,620],{"class":112},[34,9613,2437],{"class":2427},[34,9615,6442],{"class":59},[34,9617,9618],{"class":36,"line":256},[34,9619,2017],{"class":59},[34,9621,9622,9625,9627,9629,9631,9633,9635,9637,9639],{"class":36,"line":261},[34,9623,9624],{"class":59},"    Student s",[34,9626,447],{"class":112},[34,9628,1501],{"class":59},[34,9630,8380],{"class":187},[34,9632,67],{"class":59},[34,9634,1256],{"class":63},[34,9636,67],{"class":59},[34,9638,1256],{"class":63},[34,9640,4459],{"class":59},[34,9642,9643,9646],{"class":36,"line":267},[34,9644,9645],{"class":2427},"    printStudent",[34,9647,9449],{"class":59},[34,9649,9650],{"class":36,"line":2138},[34,9651,2864],{"emptyLinePlaceholder":540},[34,9653,9654],{"class":36,"line":2143},[34,9655,2036],{"class":59},[14,9657,9489],{},[1611,9659,9660,9663,9666],{},[570,9661,9662],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[570,9664,9665],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[570,9667,9668],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[25,9670,9672],{"className":605,"code":9671,"language":607,"meta":22,"style":22},"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",[31,9673,9674,9693,9697,9702,9722],{"__ignoreMap":22},[34,9675,9676,9678,9680,9682,9684,9687,9689,9691],{"class":36,"line":37},[34,9677,5828],{"class":112},[34,9679,9567],{"class":2427},[34,9681,617],{"class":59},[34,9683,7256],{"class":112},[34,9685,9686],{"class":2427}," student",[34,9688,6982],{"class":112},[34,9690,1301],{"class":5680},[34,9692,623],{"class":59},[34,9694,9695],{"class":36,"line":44},[34,9696,2017],{"class":59},[34,9698,9699],{"class":36,"line":50},[34,9700,9701],{"class":40},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[34,9703,9704,9706,9708,9710,9712,9714,9716,9718,9720],{"class":36,"line":56},[34,9705,2022],{"class":59},[34,9707,1648],{"class":112},[34,9709,9589],{"class":59},[34,9711,1648],{"class":112},[34,9713,9594],{"class":59},[34,9715,1648],{"class":112},[34,9717,9599],{"class":59},[34,9719,1648],{"class":112},[34,9721,1670],{"class":59},[34,9723,9724],{"class":36,"line":107},[34,9725,2036],{"class":59},[555,9727,9729],{"id":9728},"_47案例","4.7案例",[567,9731,9732],{},[570,9733,9734],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[25,9736,9738],{"className":605,"code":9737,"language":607,"meta":22,"style":22},"#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",[31,9739,9740,9746,9756,9762,9769,9773,9779,9783,9788,9794,9800,9804,9808,9814,9818,9823,9828,9841,9845,9850,9876,9880,9892,9919,9923,9935,9945,9949,9954,9983,9987,9999,10008,10035,10046,10056,10060,10064,10068,10073,10097,10101,10125,10129,10148,10174,10178,10203,10226,10250,10255,10260,10265,10274,10279,10285,10306,10312,10326,10332,10359,10368,10374,10382,10387],{"__ignoreMap":22},[34,9741,9742,9744],{"class":36,"line":37},[34,9743,2413],{"class":112},[34,9745,2416],{"class":187},[34,9747,9748,9750,9752,9754],{"class":36,"line":44},[34,9749,2421],{"class":112},[34,9751,2424],{"class":112},[34,9753,2428],{"class":2427},[34,9755,1765],{"class":59},[34,9757,9758,9760],{"class":36,"line":50},[34,9759,2413],{"class":112},[34,9761,8213],{"class":187},[34,9763,9764,9766],{"class":36,"line":56},[34,9765,2413],{"class":112},[34,9767,9768],{"class":187},"\u003Cctime>\n",[34,9770,9771],{"class":36,"line":107},[34,9772,9002],{"class":40},[34,9774,9775,9777],{"class":36,"line":196},[34,9776,8223],{"class":112},[34,9778,8226],{"class":2427},[34,9780,9781],{"class":36,"line":202},[34,9782,2017],{"class":59},[34,9784,9785],{"class":36,"line":207},[34,9786,9787],{"class":59},"    string sName;\n",[34,9789,9790,9792],{"class":36,"line":222},[34,9791,2449],{"class":112},[34,9793,8261],{"class":59},[34,9795,9796,9798],{"class":36,"line":227},[34,9797,2449],{"class":112},[34,9799,8273],{"class":59},[34,9801,9802],{"class":36,"line":232},[34,9803,4459],{"class":59},[34,9805,9806],{"class":36,"line":238},[34,9807,9039],{"class":40},[34,9809,9810,9812],{"class":36,"line":244},[34,9811,8223],{"class":112},[34,9813,9046],{"class":2427},[34,9815,9816],{"class":36,"line":250},[34,9817,2017],{"class":59},[34,9819,9820],{"class":36,"line":256},[34,9821,9822],{"class":59},"    string tName;\n",[34,9824,9825],{"class":36,"line":261},[34,9826,9827],{"class":40},"    \u002F\u002F学生数组\n",[34,9829,9830,9832,9834,9837,9839],{"class":36,"line":267},[34,9831,8359],{"class":112},[34,9833,8362],{"class":2427},[34,9835,9836],{"class":59}," sArray[",[34,9838,927],{"class":63},[34,9840,5154],{"class":59},[34,9842,9843],{"class":36,"line":2138},[34,9844,4459],{"class":59},[34,9846,9847],{"class":36,"line":2143},[34,9848,9849],{"class":40},"\u002F\u002F给老师和学生赋值的函数\n",[34,9851,9852,9854,9857,9859,9861,9864,9867,9870,9872,9874],{"class":36,"line":2157},[34,9853,5828],{"class":112},[34,9855,9856],{"class":2427}," allocateSpace",[34,9858,617],{"class":59},[34,9860,8223],{"class":112},[34,9862,9863],{"class":2427}," Teacher",[34,9865,9866],{"class":5680}," tArray",[34,9868,9869],{"class":59},"[],",[34,9871,620],{"class":112},[34,9873,7795],{"class":5680},[34,9875,623],{"class":59},[34,9877,9878],{"class":36,"line":2162},[34,9879,2017],{"class":59},[34,9881,9882,9885,9887,9890],{"class":36,"line":2191},[34,9883,9884],{"class":59},"    string nameSeed",[34,9886,447],{"class":112},[34,9888,9889],{"class":187},"\"ABCDE\"",[34,9891,1765],{"class":59},[34,9893,9894,9896,9898,9900,9903,9905,9907,9910,9912,9915,9917],{"class":36,"line":2196},[34,9895,3665],{"class":112},[34,9897,2122],{"class":59},[34,9899,620],{"class":112},[34,9901,9902],{"class":59}," i ",[34,9904,447],{"class":112},[34,9906,4557],{"class":63},[34,9908,9909],{"class":59},"; i ",[34,9911,1515],{"class":112},[34,9913,9914],{"class":59}," len; i",[34,9916,2756],{"class":112},[34,9918,623],{"class":59},[34,9920,9921],{"class":36,"line":2213},[34,9922,2494],{"class":59},[34,9924,9925,9928,9930,9933],{"class":36,"line":2218},[34,9926,9927],{"class":59},"        tArray[i].tName ",[34,9929,447],{"class":112},[34,9931,9932],{"class":187}," \"Teacher_\"",[34,9934,1765],{"class":59},[34,9936,9937,9939,9942],{"class":36,"line":2223},[34,9938,9927],{"class":59},[34,9940,9941],{"class":112},"+=",[34,9943,9944],{"class":59},"nameSeed[i];\n",[34,9946,9947],{"class":36,"line":2228},[34,9948,2864],{"emptyLinePlaceholder":540},[34,9950,9951],{"class":36,"line":2242},[34,9952,9953],{"class":40},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[34,9955,9956,9958,9960,9962,9965,9967,9969,9972,9974,9976,9979,9981],{"class":36,"line":2247},[34,9957,3867],{"class":112},[34,9959,2122],{"class":59},[34,9961,620],{"class":112},[34,9963,9964],{"class":59}," j ",[34,9966,447],{"class":112},[34,9968,4557],{"class":63},[34,9970,9971],{"class":59},"; j ",[34,9973,1515],{"class":112},[34,9975,2612],{"class":63},[34,9977,9978],{"class":59},"; j",[34,9980,2756],{"class":112},[34,9982,623],{"class":59},[34,9984,9985],{"class":36,"line":3041},[34,9986,2974],{"class":59},[34,9988,9989,9992,9994,9997],{"class":36,"line":3055},[34,9990,9991],{"class":59},"            tArray[i].sArray[j].sName ",[34,9993,447],{"class":112},[34,9995,9996],{"class":187}," \"Student_\"",[34,9998,1765],{"class":59},[34,10000,10001,10003,10005],{"class":36,"line":3063},[34,10002,9991],{"class":59},[34,10004,9941],{"class":112},[34,10006,10007],{"class":59}," nameSeed[j];\n",[34,10009,10010,10013,10016,10018,10020,10022,10024,10026,10028,10030,10032],{"class":36,"line":3068},[34,10011,10012],{"class":112},"            int",[34,10014,10015],{"class":59}," random",[34,10017,447],{"class":112},[34,10019,2888],{"class":2427},[34,10021,2891],{"class":59},[34,10023,936],{"class":112},[34,10025,1512],{"class":63},[34,10027,1088],{"class":112},[34,10029,1008],{"class":63},[34,10031,670],{"class":59},[34,10033,10034],{"class":40},"\u002F\u002F40~99\n",[34,10036,10037,10040,10042,10044],{"class":36,"line":3074},[34,10038,10039],{"class":59},"            tArray[i].sArray[j].age ",[34,10041,447],{"class":112},[34,10043,9414],{"class":63},[34,10045,1765],{"class":59},[34,10047,10048,10051,10053],{"class":36,"line":3080},[34,10049,10050],{"class":59},"            tArray[i].sArray[j].score ",[34,10052,447],{"class":112},[34,10054,10055],{"class":59}," random;\n",[34,10057,10058],{"class":36,"line":3085},[34,10059,2993],{"class":59},[34,10061,10062],{"class":36,"line":8412},[34,10063,2651],{"class":59},[34,10065,10066],{"class":36,"line":8436},[34,10067,2036],{"class":59},[34,10069,10070],{"class":36,"line":8441},[34,10071,10072],{"class":40},"\u002F\u002F打印所有信息的函数\n",[34,10074,10075,10077,10080,10082,10084,10086,10088,10091,10093,10095],{"class":36,"line":8447},[34,10076,5828],{"class":112},[34,10078,10079],{"class":2427}," printInfo",[34,10081,617],{"class":59},[34,10083,8223],{"class":112},[34,10085,9863],{"class":2427},[34,10087,9866],{"class":5680},[34,10089,10090],{"class":59},"[], ",[34,10092,620],{"class":112},[34,10094,7795],{"class":5680},[34,10096,623],{"class":59},[34,10098,10099],{"class":36,"line":8474},[34,10100,2017],{"class":59},[34,10102,10103,10105,10107,10109,10111,10113,10115,10117,10119,10121,10123],{"class":36,"line":8479},[34,10104,3665],{"class":112},[34,10106,2122],{"class":59},[34,10108,620],{"class":112},[34,10110,9902],{"class":59},[34,10112,447],{"class":112},[34,10114,4557],{"class":63},[34,10116,9909],{"class":59},[34,10118,1515],{"class":112},[34,10120,9914],{"class":59},[34,10122,2756],{"class":112},[34,10124,623],{"class":59},[34,10126,10127],{"class":36,"line":8485},[34,10128,2494],{"class":59},[34,10130,10131,10134,10136,10139,10141,10144,10146],{"class":36,"line":8497},[34,10132,10133],{"class":59},"        cout ",[34,10135,1648],{"class":112},[34,10137,10138],{"class":187}," \"Teacher: \"",[34,10140,1916],{"class":112},[34,10142,10143],{"class":59}," tArray[i].tName ",[34,10145,1648],{"class":112},[34,10147,9304],{"class":59},[34,10149,10150,10152,10154,10156,10158,10160,10162,10164,10166,10168,10170,10172],{"class":36,"line":8509},[34,10151,3867],{"class":112},[34,10153,2122],{"class":59},[34,10155,620],{"class":112},[34,10157,9964],{"class":59},[34,10159,447],{"class":112},[34,10161,4557],{"class":63},[34,10163,9971],{"class":59},[34,10165,1515],{"class":112},[34,10167,2612],{"class":63},[34,10169,9978],{"class":59},[34,10171,2756],{"class":112},[34,10173,623],{"class":59},[34,10175,10176],{"class":36,"line":8521},[34,10177,2974],{"class":59},[34,10179,10181,10184,10186,10189,10191,10194,10196,10199,10201],{"class":36,"line":10180},47,[34,10182,10183],{"class":59},"            cout ",[34,10185,1648],{"class":112},[34,10187,10188],{"class":187}," \"",[34,10190,1705],{"class":63},[34,10192,10193],{"class":187},"Student: \"",[34,10195,1916],{"class":112},[34,10197,10198],{"class":59}," tArray[i].sArray[j].sName",[34,10200,1648],{"class":112},[34,10202,1670],{"class":59},[34,10204,10206,10208,10210,10212,10214,10217,10219,10222,10224],{"class":36,"line":10205},48,[34,10207,10183],{"class":59},[34,10209,1648],{"class":112},[34,10211,10188],{"class":187},[34,10213,1705],{"class":63},[34,10215,10216],{"class":187},"Age: \"",[34,10218,1916],{"class":112},[34,10220,10221],{"class":59}," tArray[i].sArray[j].age ",[34,10223,1648],{"class":112},[34,10225,9304],{"class":59},[34,10227,10229,10231,10233,10235,10237,10240,10242,10245,10247],{"class":36,"line":10228},49,[34,10230,10183],{"class":59},[34,10232,1648],{"class":112},[34,10234,10188],{"class":187},[34,10236,1705],{"class":63},[34,10238,10239],{"class":187},"Score: \"",[34,10241,1916],{"class":112},[34,10243,10244],{"class":59}," tArray[i].sArray[j].score ",[34,10246,1648],{"class":112},[34,10248,10249],{"class":59}," endl;   \n",[34,10251,10253],{"class":36,"line":10252},50,[34,10254,2993],{"class":59},[34,10256,10258],{"class":36,"line":10257},51,[34,10259,2651],{"class":59},[34,10261,10263],{"class":36,"line":10262},52,[34,10264,2036],{"class":59},[34,10266,10268,10270,10272],{"class":36,"line":10267},53,[34,10269,620],{"class":112},[34,10271,2437],{"class":2427},[34,10273,2440],{"class":59},[34,10275,10277],{"class":36,"line":10276},54,[34,10278,2017],{"class":59},[34,10280,10282],{"class":36,"line":10281},55,[34,10283,10284],{"class":40},"    \u002F\u002F随机数种子\n",[34,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304],{"class":36,"line":10287},56,[34,10289,2837],{"class":2427},[34,10291,2840],{"class":59},[34,10293,2843],{"class":112},[34,10295,2846],{"class":112},[34,10297,1036],{"class":59},[34,10299,2851],{"class":2427},[34,10301,617],{"class":59},[34,10303,2856],{"class":63},[34,10305,2859],{"class":59},[34,10307,10309],{"class":36,"line":10308},57,[34,10310,10311],{"class":40},"    \u002F\u002F1.创建3名老师的数组\n",[34,10313,10315,10317,10319,10322,10324],{"class":36,"line":10314},58,[34,10316,8359],{"class":112},[34,10318,9863],{"class":2427},[34,10320,10321],{"class":59}," tArray[",[34,10323,309],{"class":63},[34,10325,5154],{"class":59},[34,10327,10329],{"class":36,"line":10328},59,[34,10330,10331],{"class":40},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[34,10333,10335,10337,10340,10342,10345,10348,10350,10352,10355,10357],{"class":36,"line":10334},60,[34,10336,2449],{"class":112},[34,10338,10339],{"class":59}," len ",[34,10341,447],{"class":112},[34,10343,10344],{"class":112}," sizeof",[34,10346,10347],{"class":59},"(tArray) ",[34,10349,1190],{"class":112},[34,10351,10344],{"class":112},[34,10353,10354],{"class":59},"(tArray[",[34,10356,319],{"class":63},[34,10358,4320],{"class":59},[34,10360,10362,10365],{"class":36,"line":10361},61,[34,10363,10364],{"class":2427},"    allocateSpace",[34,10366,10367],{"class":59},"(tArray, len);\n",[34,10369,10371],{"class":36,"line":10370},62,[34,10372,10373],{"class":40},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[34,10375,10377,10380],{"class":36,"line":10376},63,[34,10378,10379],{"class":2427},"    printInfo",[34,10381,10367],{"class":59},[34,10383,10385],{"class":36,"line":10384},64,[34,10386,2864],{"emptyLinePlaceholder":540},[34,10388,10390],{"class":36,"line":10389},65,[34,10391,2036],{"class":59},[567,10393,10394],{"start":44},[570,10395,10396,10399],{},[760,10397,10398],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10401,10402],{},"五名英雄信息如下：",[25,10404,10408],{"className":10405,"code":10406,"language":10407,"meta":22,"style":22},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[31,10409,10410,10428,10445,10462,10479],{"__ignoreMap":22},[34,10411,10412,10414,10417,10419,10421,10423,10426],{"class":36,"line":37},[34,10413,5381],{"class":59},[34,10415,10416],{"class":187},"\"刘备\"",[34,10418,67],{"class":59},[34,10420,1381],{"class":63},[34,10422,67],{"class":59},[34,10424,10425],{"class":187},"\"男\"",[34,10427,5394],{"class":59},[34,10429,10430,10432,10435,10437,10439,10441,10443],{"class":36,"line":44},[34,10431,5381],{"class":59},[34,10433,10434],{"class":187},"\"关羽\"",[34,10436,67],{"class":59},[34,10438,1356],{"class":63},[34,10440,67],{"class":59},[34,10442,10425],{"class":187},[34,10444,5394],{"class":59},[34,10446,10447,10449,10452,10454,10456,10458,10460],{"class":36,"line":50},[34,10448,5381],{"class":59},[34,10450,10451],{"class":187},"\"张飞\"",[34,10453,67],{"class":59},[34,10455,1306],{"class":63},[34,10457,67],{"class":59},[34,10459,10425],{"class":187},[34,10461,5394],{"class":59},[34,10463,10464,10466,10469,10471,10473,10475,10477],{"class":36,"line":56},[34,10465,5381],{"class":59},[34,10467,10468],{"class":187},"\"赵云\"",[34,10470,67],{"class":59},[34,10472,1331],{"class":63},[34,10474,67],{"class":59},[34,10476,10425],{"class":187},[34,10478,5394],{"class":59},[34,10480,10481,10483,10486,10488,10490,10492,10495],{"class":36,"line":107},[34,10482,5381],{"class":59},[34,10484,10485],{"class":187},"\"貂蝉\"",[34,10487,67],{"class":59},[34,10489,1281],{"class":63},[34,10491,67],{"class":59},[34,10493,10494],{"class":187},"\"女\"",[34,10496,5394],{"class":59},[14,10498,10499],{},"代码：",[25,10501,10503],{"className":605,"code":10502,"language":607,"meta":22,"style":22},"#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",[31,10504,10505,10511,10521,10527,10534,10538,10542,10548,10553,10557,10562,10585,10589,10614,10618,10651,10656,10685,10690,10705,10731,10751,10756,10761,10765,10769,10774,10796,10800,10824,10828,10890,10894,10898,10906,10910,10915,10926,10930,10946,10962,10978,10994,11010,11014,11034,11056,11061,11074,11081,11086,11092,11097,11110,11116],{"__ignoreMap":22},[34,10506,10507,10509],{"class":36,"line":37},[34,10508,2413],{"class":112},[34,10510,2416],{"class":187},[34,10512,10513,10515,10517,10519],{"class":36,"line":44},[34,10514,2421],{"class":112},[34,10516,2424],{"class":112},[34,10518,2428],{"class":2427},[34,10520,1765],{"class":59},[34,10522,10523,10525],{"class":36,"line":50},[34,10524,2413],{"class":112},[34,10526,8213],{"class":187},[34,10528,10529,10531],{"class":36,"line":56},[34,10530,8223],{"class":112},[34,10532,10533],{"class":2427}," Sanguo\n",[34,10535,10536],{"class":36,"line":107},[34,10537,2017],{"class":59},[34,10539,10540],{"class":36,"line":196},[34,10541,8249],{"class":59},[34,10543,10544,10546],{"class":36,"line":202},[34,10545,2449],{"class":112},[34,10547,8261],{"class":59},[34,10549,10550],{"class":36,"line":207},[34,10551,10552],{"class":59},"    string gender;\n",[34,10554,10555],{"class":36,"line":222},[34,10556,4459],{"class":59},[34,10558,10559],{"class":36,"line":227},[34,10560,10561],{"class":40},"\u002F\u002F定义排序函数\n",[34,10563,10564,10566,10568,10570,10573,10575,10577,10579,10581,10583],{"class":36,"line":232},[34,10565,5828],{"class":112},[34,10567,7780],{"class":2427},[34,10569,617],{"class":59},[34,10571,10572],{"class":2427},"Sanguo",[34,10574,6982],{"class":112},[34,10576,1301],{"class":5680},[34,10578,67],{"class":59},[34,10580,620],{"class":112},[34,10582,7795],{"class":5680},[34,10584,623],{"class":59},[34,10586,10587],{"class":36,"line":238},[34,10588,2017],{"class":59},[34,10590,10591,10593,10595,10597,10599,10601,10603,10605,10607,10610,10612],{"class":36,"line":244},[34,10592,3665],{"class":112},[34,10594,617],{"class":59},[34,10596,620],{"class":112},[34,10598,3496],{"class":59},[34,10600,447],{"class":112},[34,10602,319],{"class":63},[34,10604,3503],{"class":59},[34,10606,1515],{"class":112},[34,10608,10609],{"class":59},"len;i",[34,10611,2756],{"class":112},[34,10613,623],{"class":59},[34,10615,10616],{"class":36,"line":250},[34,10617,2494],{"class":59},[34,10619,10620,10623,10625,10627,10629,10631,10633,10635,10637,10639,10641,10643,10645,10647,10649],{"class":36,"line":256},[34,10621,10622],{"class":112},"     for",[34,10624,2122],{"class":59},[34,10626,620],{"class":112},[34,10628,3874],{"class":59},[34,10630,447],{"class":112},[34,10632,319],{"class":63},[34,10634,3881],{"class":59},[34,10636,1515],{"class":112},[34,10638,7822],{"class":59},[34,10640,113],{"class":112},[34,10642,64],{"class":63},[34,10644,113],{"class":112},[34,10646,4014],{"class":59},[34,10648,2756],{"class":112},[34,10650,623],{"class":59},[34,10652,10653],{"class":36,"line":261},[34,10654,10655],{"class":59},"     {\n",[34,10657,10658,10661,10664,10666,10669,10671,10674,10676,10678,10680,10682],{"class":36,"line":267},[34,10659,10660],{"class":112},"         if",[34,10662,10663],{"class":59}," ((s",[34,10665,1088],{"class":112},[34,10667,10668],{"class":59},"j)->age ",[34,10670,1564],{"class":112},[34,10672,10673],{"class":59}," (s",[34,10675,1088],{"class":112},[34,10677,1074],{"class":59},[34,10679,1088],{"class":112},[34,10681,64],{"class":63},[34,10683,10684],{"class":59},")->age)\n",[34,10686,10687],{"class":36,"line":2138},[34,10688,10689],{"class":59},"         {\n",[34,10691,10692,10695,10697,10700,10702],{"class":36,"line":2143},[34,10693,10694],{"class":59},"             Sanguo temp",[34,10696,7617],{"class":112},[34,10698,10699],{"class":59},"(s",[34,10701,1088],{"class":112},[34,10703,10704],{"class":59},"j);\n",[34,10706,10707,10710,10712,10714,10717,10719,10721,10723,10725,10727,10729],{"class":36,"line":2157},[34,10708,10709],{"class":112},"             *",[34,10711,10699],{"class":59},[34,10713,1088],{"class":112},[34,10715,10716],{"class":59},"j)",[34,10718,7617],{"class":112},[34,10720,10699],{"class":59},[34,10722,1088],{"class":112},[34,10724,1074],{"class":59},[34,10726,1088],{"class":112},[34,10728,64],{"class":63},[34,10730,3183],{"class":59},[34,10732,10733,10735,10737,10739,10741,10743,10745,10747,10749],{"class":36,"line":2162},[34,10734,10709],{"class":112},[34,10736,10699],{"class":59},[34,10738,1088],{"class":112},[34,10740,1074],{"class":59},[34,10742,1088],{"class":112},[34,10744,64],{"class":63},[34,10746,1036],{"class":59},[34,10748,447],{"class":112},[34,10750,4744],{"class":59},[34,10752,10753],{"class":36,"line":2191},[34,10754,10755],{"class":59},"         }\n",[34,10757,10758],{"class":36,"line":2196},[34,10759,10760],{"class":59},"     }\n",[34,10762,10763],{"class":36,"line":2213},[34,10764,2651],{"class":59},[34,10766,10767],{"class":36,"line":2218},[34,10768,2036],{"class":59},[34,10770,10771],{"class":36,"line":2223},[34,10772,10773],{"class":40},"\u002F\u002F定义打印函数\n",[34,10775,10776,10778,10780,10782,10784,10786,10788,10790,10792,10794],{"class":36,"line":2228},[34,10777,5828],{"class":112},[34,10779,10079],{"class":2427},[34,10781,617],{"class":59},[34,10783,10572],{"class":2427},[34,10785,6982],{"class":112},[34,10787,1301],{"class":5680},[34,10789,67],{"class":59},[34,10791,620],{"class":112},[34,10793,7795],{"class":5680},[34,10795,623],{"class":59},[34,10797,10798],{"class":36,"line":2242},[34,10799,2017],{"class":59},[34,10801,10802,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822],{"class":36,"line":2247},[34,10803,3665],{"class":112},[34,10805,2122],{"class":59},[34,10807,620],{"class":112},[34,10809,3496],{"class":59},[34,10811,447],{"class":112},[34,10813,319],{"class":63},[34,10815,3503],{"class":59},[34,10817,1515],{"class":112},[34,10819,10609],{"class":59},[34,10821,2756],{"class":112},[34,10823,623],{"class":59},[34,10825,10826],{"class":36,"line":3041},[34,10827,2494],{"class":59},[34,10829,10830,10832,10834,10836,10838,10841,10843,10845,10847,10850,10852,10854,10856,10859,10861,10863,10865,10868,10870,10872,10874,10877,10879,10881,10883,10886,10888],{"class":36,"line":3055},[34,10831,3915],{"class":59},[34,10833,1648],{"class":112},[34,10835,860],{"class":187},[34,10837,1705],{"class":63},[34,10839,10840],{"class":187},"姓名：\"",[34,10842,1648],{"class":112},[34,10844,10699],{"class":59},[34,10846,1088],{"class":112},[34,10848,10849],{"class":59},"i)->name",[34,10851,1648],{"class":112},[34,10853,860],{"class":187},[34,10855,1705],{"class":63},[34,10857,10858],{"class":187},"年龄：\"",[34,10860,1648],{"class":112},[34,10862,10699],{"class":59},[34,10864,1088],{"class":112},[34,10866,10867],{"class":59},"i)->age",[34,10869,1648],{"class":112},[34,10871,860],{"class":187},[34,10873,1705],{"class":63},[34,10875,10876],{"class":187},"性别：\"",[34,10878,1648],{"class":112},[34,10880,10699],{"class":59},[34,10882,1088],{"class":112},[34,10884,10885],{"class":59},"i)->gender",[34,10887,1648],{"class":112},[34,10889,1670],{"class":59},[34,10891,10892],{"class":36,"line":3063},[34,10893,2651],{"class":59},[34,10895,10896],{"class":36,"line":3068},[34,10897,2036],{"class":59},[34,10899,10900,10902,10904],{"class":36,"line":3074},[34,10901,620],{"class":112},[34,10903,2437],{"class":2427},[34,10905,2440],{"class":59},[34,10907,10908],{"class":36,"line":3080},[34,10909,2017],{"class":59},[34,10911,10912],{"class":36,"line":3085},[34,10913,10914],{"class":40},"    \u002F\u002F定义结构体变量\n",[34,10916,10917,10920,10922,10924],{"class":36,"line":8412},[34,10918,10919],{"class":59},"    Sanguo s1[",[34,10921,927],{"class":63},[34,10923,477],{"class":59},[34,10925,5372],{"class":112},[34,10927,10928],{"class":36,"line":8436},[34,10929,2494],{"class":59},[34,10931,10932,10934,10936,10938,10940,10942,10944],{"class":36,"line":8441},[34,10933,5381],{"class":59},[34,10935,10416],{"class":187},[34,10937,67],{"class":59},[34,10939,1381],{"class":63},[34,10941,67],{"class":59},[34,10943,10425],{"class":187},[34,10945,5394],{"class":59},[34,10947,10948,10950,10952,10954,10956,10958,10960],{"class":36,"line":8447},[34,10949,5381],{"class":59},[34,10951,10434],{"class":187},[34,10953,67],{"class":59},[34,10955,1356],{"class":63},[34,10957,67],{"class":59},[34,10959,10425],{"class":187},[34,10961,5394],{"class":59},[34,10963,10964,10966,10968,10970,10972,10974,10976],{"class":36,"line":8474},[34,10965,5381],{"class":59},[34,10967,10451],{"class":187},[34,10969,67],{"class":59},[34,10971,1306],{"class":63},[34,10973,67],{"class":59},[34,10975,10425],{"class":187},[34,10977,5394],{"class":59},[34,10979,10980,10982,10984,10986,10988,10990,10992],{"class":36,"line":8479},[34,10981,5381],{"class":59},[34,10983,10468],{"class":187},[34,10985,67],{"class":59},[34,10987,1331],{"class":63},[34,10989,67],{"class":59},[34,10991,10425],{"class":187},[34,10993,5394],{"class":59},[34,10995,10996,10998,11000,11002,11004,11006,11008],{"class":36,"line":8485},[34,10997,5381],{"class":59},[34,10999,10485],{"class":187},[34,11001,67],{"class":59},[34,11003,1281],{"class":63},[34,11005,67],{"class":59},[34,11007,10494],{"class":187},[34,11009,5394],{"class":59},[34,11011,11012],{"class":36,"line":8497},[34,11013,5415],{"class":59},[34,11015,11016,11018,11020,11022,11025,11027,11030,11032],{"class":36,"line":8509},[34,11017,2449],{"class":112},[34,11019,7795],{"class":59},[34,11021,4667],{"class":112},[34,11023,11024],{"class":59},"(s1)",[34,11026,4673],{"class":112},[34,11028,11029],{"class":59},"(s1[",[34,11031,319],{"class":63},[34,11033,4320],{"class":59},[34,11035,11036,11039,11041,11044,11046,11049,11052,11054],{"class":36,"line":8521},[34,11037,11038],{"class":59},"    Sanguo ",[34,11040,1062],{"class":112},[34,11042,11043],{"class":59},"s ",[34,11045,447],{"class":112},[34,11047,11048],{"class":112}," &",[34,11050,11051],{"class":59},"s1[",[34,11053,319],{"class":63},[34,11055,5154],{"class":59},[34,11057,11058],{"class":36,"line":10180},[34,11059,11060],{"class":40},"    \u002F\u002F排序前：\n",[34,11062,11063,11065,11067,11070,11072],{"class":36,"line":10205},[34,11064,6993],{"class":59},[34,11066,1648],{"class":112},[34,11068,11069],{"class":187}," \"排序前：\"",[34,11071,1916],{"class":112},[34,11073,9304],{"class":59},[34,11075,11076,11078],{"class":36,"line":10228},[34,11077,10379],{"class":2427},[34,11079,11080],{"class":59},"(s,len);\n",[34,11082,11083],{"class":36,"line":10252},[34,11084,11085],{"class":40},"    \u002F\u002F调用排序函数\n",[34,11087,11088,11090],{"class":36,"line":10257},[34,11089,8062],{"class":2427},[34,11091,11080],{"class":59},[34,11093,11094],{"class":36,"line":10262},[34,11095,11096],{"class":40},"    \u002F\u002F排序后\n",[34,11098,11099,11101,11103,11106,11108],{"class":36,"line":10267},[34,11100,6993],{"class":59},[34,11102,1648],{"class":112},[34,11104,11105],{"class":187}," \"排序后：\"",[34,11107,1916],{"class":112},[34,11109,9304],{"class":59},[34,11111,11112,11114],{"class":36,"line":10276},[34,11113,10379],{"class":2427},[34,11115,11080],{"class":59},[34,11117,11118],{"class":36,"line":10281},[34,11119,2036],{"class":59},[14,11121,11122,11123,11125],{},"注意：使用指针时直接用传首地址**&s",[34,11124,319],{},"**",[532,11127,11128],{},"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":22,"searchDepth":44,"depth":44,"links":11130},[11131,11132,11133,11134,11135,11136,11137],{"id":8167,"depth":44,"text":8168},{"id":8529,"depth":44,"text":8530},{"id":8798,"depth":44,"text":8799},{"id":8963,"depth":44,"text":8964},{"id":9179,"depth":44,"text":9180},{"id":9500,"depth":44,"text":9501},{"id":9728,"depth":44,"text":9729},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8156,"description":8164},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11144,"title":11145,"body":11146,"description":22,"extension":538,"meta":12489,"navigation":540,"path":12490,"seo":12491,"stem":12492,"__hash__":12493},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11147,"toc":12483},[11148,11151,11155,11161,11175,11180,11183,11187,11194,11200,11203,11210,11216,11221,11224,11227,11230,11794,11797,11811,11815,11820,11836,11976,11979,11985,11988,11993,12001,12109,12112,12117,12120,12125,12128,12134,12137,12480],[10,11149,11145],{"id":11150},"_5程序内存模型",[555,11152,11154],{"id":11153},"_51内存分区模型","5.1内存分区模型",[14,11156,11157,11158],{},"C++程序在执行时，将内存大方向划分为",[760,11159,11160],{},"4个区域",[1611,11162,11163,11166,11169,11172],{},[570,11164,11165],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[570,11167,11168],{},"全局区：存放全局变量和静态变量以及常量",[570,11170,11171],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[570,11173,11174],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11176,11177],{},[760,11178,11179],{},"内存四区意义：",[14,11181,11182],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[584,11184,11186],{"id":11185},"_511程序运行前","5.1.1程序运行前",[14,11188,11189,11190,11193],{},"​\t在程序编译后，生成了exe可执行程序，",[760,11191,11192],{},"未执行该程序前","分为两个区域",[14,11195,11196,11197],{},"​\t",[760,11198,11199],{},"代码区：",[14,11201,11202],{},"​\t\t存放 CPU 执行的机器指令",[14,11204,11205,11206,11209],{},"​\t\t代码区是",[760,11207,11208],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11211,11205,11212,11215],{},[760,11213,11214],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11217,11196,11218],{},[760,11219,11220],{},"全局区：",[14,11222,11223],{},"​\t\t全局变量和静态变量存放在此.",[14,11225,11226],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11228,11229],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[25,11231,11233],{"className":605,"code":11232,"language":607,"meta":22,"style":22},"\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",[31,11234,11235,11240,11253,11266,11270,11275,11290,11305,11309,11318,11322,11327,11340,11353,11357,11362,11388,11414,11418,11445,11471,11475,11480,11496,11511,11515,11541,11567,11571,11596,11621,11625,11651,11677,11681,11697,11712,11738,11764,11768,11778,11782,11790],{"__ignoreMap":22},[34,11236,11237],{"class":36,"line":37},[34,11238,11239],{"class":40},"\u002F\u002F全局变量\n",[34,11241,11242,11244,11247,11249,11251],{"class":36,"line":44},[34,11243,620],{"class":112},[34,11245,11246],{"class":59}," g_a ",[34,11248,447],{"class":112},[34,11250,2502],{"class":63},[34,11252,1765],{"class":59},[34,11254,11255,11257,11260,11262,11264],{"class":36,"line":50},[34,11256,620],{"class":112},[34,11258,11259],{"class":59}," g_b ",[34,11261,447],{"class":112},[34,11263,2502],{"class":63},[34,11265,1765],{"class":59},[34,11267,11268],{"class":36,"line":56},[34,11269,2864],{"emptyLinePlaceholder":540},[34,11271,11272],{"class":36,"line":107},[34,11273,11274],{"class":40},"\u002F\u002F全局常量\n",[34,11276,11277,11279,11281,11284,11286,11288],{"class":36,"line":196},[34,11278,7256],{"class":112},[34,11280,2846],{"class":112},[34,11282,11283],{"class":59}," c_g_a ",[34,11285,447],{"class":112},[34,11287,2502],{"class":63},[34,11289,1765],{"class":59},[34,11291,11292,11294,11296,11299,11301,11303],{"class":36,"line":202},[34,11293,7256],{"class":112},[34,11295,2846],{"class":112},[34,11297,11298],{"class":59}," c_g_b ",[34,11300,447],{"class":112},[34,11302,2502],{"class":63},[34,11304,1765],{"class":59},[34,11306,11307],{"class":36,"line":207},[34,11308,2864],{"emptyLinePlaceholder":540},[34,11310,11311,11313,11315],{"class":36,"line":222},[34,11312,620],{"class":112},[34,11314,2437],{"class":2427},[34,11316,11317],{"class":59},"() {\n",[34,11319,11320],{"class":36,"line":227},[34,11321,2864],{"emptyLinePlaceholder":540},[34,11323,11324],{"class":36,"line":232},[34,11325,11326],{"class":40},"    \u002F\u002F局部变量\n",[34,11328,11329,11331,11334,11336,11338],{"class":36,"line":238},[34,11330,2449],{"class":112},[34,11332,11333],{"class":59}," a ",[34,11335,447],{"class":112},[34,11337,2502],{"class":63},[34,11339,1765],{"class":59},[34,11341,11342,11344,11347,11349,11351],{"class":36,"line":244},[34,11343,2449],{"class":112},[34,11345,11346],{"class":59}," b ",[34,11348,447],{"class":112},[34,11350,2502],{"class":63},[34,11352,1765],{"class":59},[34,11354,11355],{"class":36,"line":250},[34,11356,2864],{"emptyLinePlaceholder":540},[34,11358,11359],{"class":36,"line":256},[34,11360,11361],{"class":40},"    \u002F\u002F打印地址\n",[34,11363,11364,11366,11368,11371,11373,11375,11377,11379,11381,11384,11386],{"class":36,"line":261},[34,11365,6993],{"class":59},[34,11367,1648],{"class":112},[34,11369,11370],{"class":187}," \"局部变量a地址为： \"",[34,11372,1916],{"class":112},[34,11374,2122],{"class":59},[34,11376,620],{"class":112},[34,11378,1036],{"class":59},[34,11380,961],{"class":112},[34,11382,11383],{"class":59},"a ",[34,11385,1648],{"class":112},[34,11387,9304],{"class":59},[34,11389,11390,11392,11394,11397,11399,11401,11403,11405,11407,11410,11412],{"class":36,"line":267},[34,11391,6993],{"class":59},[34,11393,1648],{"class":112},[34,11395,11396],{"class":187}," \"局部变量b地址为： \"",[34,11398,1916],{"class":112},[34,11400,2122],{"class":59},[34,11402,620],{"class":112},[34,11404,1036],{"class":59},[34,11406,961],{"class":112},[34,11408,11409],{"class":59},"b ",[34,11411,1648],{"class":112},[34,11413,9304],{"class":59},[34,11415,11416],{"class":36,"line":2138},[34,11417,2864],{"emptyLinePlaceholder":540},[34,11419,11420,11422,11424,11427,11429,11432,11434,11436,11438,11441,11443],{"class":36,"line":2143},[34,11421,6993],{"class":59},[34,11423,1648],{"class":112},[34,11425,11426],{"class":187}," \"全局变量g_a地址为： \"",[34,11428,1916],{"class":112},[34,11430,11431],{"class":59},"  (",[34,11433,620],{"class":112},[34,11435,1036],{"class":59},[34,11437,961],{"class":112},[34,11439,11440],{"class":59},"g_a ",[34,11442,1648],{"class":112},[34,11444,9304],{"class":59},[34,11446,11447,11449,11451,11454,11456,11458,11460,11462,11464,11467,11469],{"class":36,"line":2157},[34,11448,6993],{"class":59},[34,11450,1648],{"class":112},[34,11452,11453],{"class":187}," \"全局变量g_b地址为： \"",[34,11455,1916],{"class":112},[34,11457,11431],{"class":59},[34,11459,620],{"class":112},[34,11461,1036],{"class":59},[34,11463,961],{"class":112},[34,11465,11466],{"class":59},"g_b ",[34,11468,1648],{"class":112},[34,11470,9304],{"class":59},[34,11472,11473],{"class":36,"line":2162},[34,11474,2864],{"emptyLinePlaceholder":540},[34,11476,11477],{"class":36,"line":2191},[34,11478,11479],{"class":40},"    \u002F\u002F静态变量\n",[34,11481,11482,11485,11487,11490,11492,11494],{"class":36,"line":2196},[34,11483,11484],{"class":112},"    static",[34,11486,2846],{"class":112},[34,11488,11489],{"class":59}," s_a ",[34,11491,447],{"class":112},[34,11493,2502],{"class":63},[34,11495,1765],{"class":59},[34,11497,11498,11500,11502,11505,11507,11509],{"class":36,"line":2213},[34,11499,11484],{"class":112},[34,11501,2846],{"class":112},[34,11503,11504],{"class":59}," s_b ",[34,11506,447],{"class":112},[34,11508,2502],{"class":63},[34,11510,1765],{"class":59},[34,11512,11513],{"class":36,"line":2218},[34,11514,2864],{"emptyLinePlaceholder":540},[34,11516,11517,11519,11521,11524,11526,11528,11530,11532,11534,11537,11539],{"class":36,"line":2223},[34,11518,6993],{"class":59},[34,11520,1648],{"class":112},[34,11522,11523],{"class":187}," \"静态变量s_a地址为： \"",[34,11525,1916],{"class":112},[34,11527,2122],{"class":59},[34,11529,620],{"class":112},[34,11531,1036],{"class":59},[34,11533,961],{"class":112},[34,11535,11536],{"class":59},"s_a ",[34,11538,1648],{"class":112},[34,11540,9304],{"class":59},[34,11542,11543,11545,11547,11550,11552,11554,11556,11558,11560,11563,11565],{"class":36,"line":2228},[34,11544,6993],{"class":59},[34,11546,1648],{"class":112},[34,11548,11549],{"class":187}," \"静态变量s_b地址为： \"",[34,11551,1916],{"class":112},[34,11553,2122],{"class":59},[34,11555,620],{"class":112},[34,11557,1036],{"class":59},[34,11559,961],{"class":112},[34,11561,11562],{"class":59},"s_b ",[34,11564,1648],{"class":112},[34,11566,9304],{"class":59},[34,11568,11569],{"class":36,"line":2242},[34,11570,2864],{"emptyLinePlaceholder":540},[34,11572,11573,11575,11577,11580,11582,11584,11586,11588,11590,11592,11594],{"class":36,"line":2247},[34,11574,6993],{"class":59},[34,11576,1648],{"class":112},[34,11578,11579],{"class":187}," \"字符串常量地址为： \"",[34,11581,1916],{"class":112},[34,11583,2122],{"class":59},[34,11585,620],{"class":112},[34,11587,1036],{"class":59},[34,11589,961],{"class":112},[34,11591,1665],{"class":187},[34,11593,1916],{"class":112},[34,11595,9304],{"class":59},[34,11597,11598,11600,11602,11604,11606,11608,11610,11612,11614,11617,11619],{"class":36,"line":3041},[34,11599,6993],{"class":59},[34,11601,1648],{"class":112},[34,11603,11579],{"class":187},[34,11605,1916],{"class":112},[34,11607,2122],{"class":59},[34,11609,620],{"class":112},[34,11611,1036],{"class":59},[34,11613,961],{"class":112},[34,11615,11616],{"class":187},"\"hello world1\"",[34,11618,1916],{"class":112},[34,11620,9304],{"class":59},[34,11622,11623],{"class":36,"line":3055},[34,11624,2864],{"emptyLinePlaceholder":540},[34,11626,11627,11629,11631,11634,11636,11638,11640,11642,11644,11647,11649],{"class":36,"line":3063},[34,11628,6993],{"class":59},[34,11630,1648],{"class":112},[34,11632,11633],{"class":187}," \"全局常量c_g_a地址为： \"",[34,11635,1916],{"class":112},[34,11637,2122],{"class":59},[34,11639,620],{"class":112},[34,11641,1036],{"class":59},[34,11643,961],{"class":112},[34,11645,11646],{"class":59},"c_g_a ",[34,11648,1648],{"class":112},[34,11650,9304],{"class":59},[34,11652,11653,11655,11657,11660,11662,11664,11666,11668,11670,11673,11675],{"class":36,"line":3068},[34,11654,6993],{"class":59},[34,11656,1648],{"class":112},[34,11658,11659],{"class":187}," \"全局常量c_g_b地址为： \"",[34,11661,1916],{"class":112},[34,11663,2122],{"class":59},[34,11665,620],{"class":112},[34,11667,1036],{"class":59},[34,11669,961],{"class":112},[34,11671,11672],{"class":59},"c_g_b ",[34,11674,1648],{"class":112},[34,11676,9304],{"class":59},[34,11678,11679],{"class":36,"line":3074},[34,11680,2864],{"emptyLinePlaceholder":540},[34,11682,11683,11686,11688,11691,11693,11695],{"class":36,"line":3080},[34,11684,11685],{"class":112},"    const",[34,11687,2846],{"class":112},[34,11689,11690],{"class":59}," c_l_a ",[34,11692,447],{"class":112},[34,11694,2502],{"class":63},[34,11696,1765],{"class":59},[34,11698,11699,11701,11703,11706,11708,11710],{"class":36,"line":3085},[34,11700,11685],{"class":112},[34,11702,2846],{"class":112},[34,11704,11705],{"class":59}," c_l_b ",[34,11707,447],{"class":112},[34,11709,2502],{"class":63},[34,11711,1765],{"class":59},[34,11713,11714,11716,11718,11721,11723,11725,11727,11729,11731,11734,11736],{"class":36,"line":8412},[34,11715,6993],{"class":59},[34,11717,1648],{"class":112},[34,11719,11720],{"class":187}," \"局部常量c_l_a地址为： \"",[34,11722,1916],{"class":112},[34,11724,2122],{"class":59},[34,11726,620],{"class":112},[34,11728,1036],{"class":59},[34,11730,961],{"class":112},[34,11732,11733],{"class":59},"c_l_a ",[34,11735,1648],{"class":112},[34,11737,9304],{"class":59},[34,11739,11740,11742,11744,11747,11749,11751,11753,11755,11757,11760,11762],{"class":36,"line":8436},[34,11741,6993],{"class":59},[34,11743,1648],{"class":112},[34,11745,11746],{"class":187}," \"局部常量c_l_b地址为： \"",[34,11748,1916],{"class":112},[34,11750,2122],{"class":59},[34,11752,620],{"class":112},[34,11754,1036],{"class":59},[34,11756,961],{"class":112},[34,11758,11759],{"class":59},"c_l_b ",[34,11761,1648],{"class":112},[34,11763,9304],{"class":59},[34,11765,11766],{"class":36,"line":8441},[34,11767,2864],{"emptyLinePlaceholder":540},[34,11769,11770,11772,11774,11776],{"class":36,"line":8447},[34,11771,2767],{"class":2427},[34,11773,617],{"class":59},[34,11775,2772],{"class":187},[34,11777,3183],{"class":59},[34,11779,11780],{"class":36,"line":8474},[34,11781,2864],{"emptyLinePlaceholder":540},[34,11783,11784,11786,11788],{"class":36,"line":8479},[34,11785,4554],{"class":112},[34,11787,4557],{"class":63},[34,11789,1765],{"class":59},[34,11791,11792],{"class":36,"line":8485},[34,11793,2036],{"class":59},[14,11795,11796],{},"总结：",[1611,11798,11799,11802,11805,11808],{},[570,11800,11801],{},"c++中程序运行前分为全局区和代码区",[570,11803,11804],{},"代码区特点是共享和只读",[570,11806,11807],{},"全局区中存放全局变量、静态变量、常量",[570,11809,11810],{},"常量区中存放const修饰的全局常量和字符串常量",[584,11812,11814],{"id":11813},"_512程序运行后","5.1.2程序运行后",[567,11816,11817],{},[570,11818,11819],{},"栈区：",[1611,11821,11822,11829],{},[570,11823,11824,11825,11828],{},"由编译器自动分配释放, 存放",[760,11826,11827],{},"函数的参数值,局部变量","等",[570,11830,11831,11832,11835],{},"注意事项：",[760,11833,11834],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[25,11837,11839],{"className":605,"code":11838,"language":607,"meta":22,"style":22},"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",[31,11840,11841,11852,11856,11871,11883,11887,11891,11899,11904,11919,11937,11954,11964,11972],{"__ignoreMap":22},[34,11842,11843,11845,11847,11850],{"class":36,"line":37},[34,11844,620],{"class":112},[34,11846,6982],{"class":112},[34,11848,11849],{"class":2427}," func",[34,11851,2440],{"class":59},[34,11853,11854],{"class":36,"line":44},[34,11855,2017],{"class":59},[34,11857,11858,11860,11862,11864,11866,11868],{"class":36,"line":50},[34,11859,2449],{"class":112},[34,11861,11333],{"class":59},[34,11863,447],{"class":112},[34,11865,2502],{"class":63},[34,11867,670],{"class":59},[34,11869,11870],{"class":40}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[34,11872,11873,11875,11877,11880],{"class":36,"line":56},[34,11874,4554],{"class":112},[34,11876,11048],{"class":112},[34,11878,11879],{"class":59},"a;",[34,11881,11882],{"class":40}," \u002F\u002F放回局部变量的地址\n",[34,11884,11885],{"class":36,"line":107},[34,11886,2036],{"class":59},[34,11888,11889],{"class":36,"line":196},[34,11890,2864],{"emptyLinePlaceholder":540},[34,11892,11893,11895,11897],{"class":36,"line":202},[34,11894,620],{"class":112},[34,11896,2437],{"class":2427},[34,11898,11317],{"class":59},[34,11900,11901],{"class":36,"line":207},[34,11902,11903],{"class":40},"    \u002F\u002F接受func的返回值\n",[34,11905,11906,11908,11910,11913,11915,11917],{"class":36,"line":222},[34,11907,2449],{"class":112},[34,11909,6982],{"class":112},[34,11911,11912],{"class":59},"p ",[34,11914,447],{"class":112},[34,11916,11849],{"class":2427},[34,11918,6100],{"class":59},[34,11920,11921,11923,11925,11927,11929,11931,11934],{"class":36,"line":227},[34,11922,6993],{"class":59},[34,11924,1648],{"class":112},[34,11926,6982],{"class":112},[34,11928,11912],{"class":59},[34,11930,1648],{"class":112},[34,11932,11933],{"class":59}," endl;",[34,11935,11936],{"class":40}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[34,11938,11939,11941,11943,11945,11947,11949,11951],{"class":36,"line":232},[34,11940,6993],{"class":59},[34,11942,1648],{"class":112},[34,11944,6982],{"class":112},[34,11946,11912],{"class":59},[34,11948,1648],{"class":112},[34,11950,11933],{"class":59},[34,11952,11953],{"class":40}," \u002F\u002F第二次这个数据不再保留\n",[34,11955,11956,11958,11960,11962],{"class":36,"line":238},[34,11957,2767],{"class":2427},[34,11959,617],{"class":59},[34,11961,2772],{"class":187},[34,11963,3183],{"class":59},[34,11965,11966,11968,11970],{"class":36,"line":244},[34,11967,4554],{"class":112},[34,11969,4557],{"class":63},[34,11971,1765],{"class":59},[34,11973,11974],{"class":36,"line":250},[34,11975,2036],{"class":59},[14,11977,11978],{},"输出结果：",[14,11980,11981],{},[20,11982],{"alt":11983,"src":11984},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11986,11987],{},"总结：不要返回局部变量的地址",[567,11989,11990],{"start":44},[570,11991,11992],{},"堆区",[1611,11994,11995,11998],{},[570,11996,11997],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[570,11999,12000],{},"在c++中主要利用new在堆区开辟内存",[25,12002,12004],{"className":605,"code":12003,"language":607,"meta":22,"style":22},"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",[31,12005,12006,12021,12025,12030,12051,12058,12062,12070,12074,12079,12093,12105],{"__ignoreMap":22},[34,12007,12008,12010,12013,12016,12018],{"class":36,"line":37},[34,12009,620],{"class":112},[34,12011,12012],{"class":112},"  *",[34,12014,12015],{"class":2427},"func",[34,12017,2891],{"class":59},[34,12019,12020],{"class":40},"  \u002F\u002F函数返回指针\n",[34,12022,12023],{"class":36,"line":44},[34,12024,2017],{"class":59},[34,12026,12027],{"class":36,"line":50},[34,12028,12029],{"class":40},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[34,12031,12032,12034,12036,12038,12040,12043,12045,12047,12049],{"class":36,"line":56},[34,12033,4611],{"class":112},[34,12035,6982],{"class":112},[34,12037,14],{"class":59},[34,12039,447],{"class":112},[34,12041,12042],{"class":112}," new",[34,12044,2846],{"class":112},[34,12046,617],{"class":59},[34,12048,1053],{"class":63},[34,12050,3183],{"class":59},[34,12052,12053,12055],{"class":36,"line":107},[34,12054,4845],{"class":112},[34,12056,12057],{"class":59}," p;\n",[34,12059,12060],{"class":36,"line":196},[34,12061,2036],{"class":59},[34,12063,12064,12066,12068],{"class":36,"line":202},[34,12065,620],{"class":112},[34,12067,2437],{"class":2427},[34,12069,2440],{"class":59},[34,12071,12072],{"class":36,"line":207},[34,12073,2017],{"class":59},[34,12075,12076],{"class":36,"line":222},[34,12077,12078],{"class":40},"    \u002F\u002F在堆区开辟数据\n",[34,12080,12081,12083,12085,12087,12089,12091],{"class":36,"line":227},[34,12082,2449],{"class":112},[34,12084,6982],{"class":112},[34,12086,14],{"class":59},[34,12088,447],{"class":112},[34,12090,12015],{"class":2427},[34,12092,6100],{"class":59},[34,12094,12095,12097,12099,12101,12103],{"class":36,"line":232},[34,12096,2022],{"class":59},[34,12098,6883],{"class":112},[34,12100,14],{"class":59},[34,12102,1648],{"class":112},[34,12104,1670],{"class":59},[34,12106,12107],{"class":36,"line":238},[34,12108,2036],{"class":59},[14,12110,12111],{},"图片展示：",[14,12113,12114],{},[20,12115],{"alt":11983,"src":12116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12118,12119],{},"堆区内存由程序员管生死！！！",[567,12121,12122],{"start":50},[570,12123,12124],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12126,12127],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12129,12130,12131],{},"​语法：",[31,12132,12133],{}," new 数据类型",[14,12135,12136],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[25,12138,12140],{"className":605,"code":12139,"language":607,"meta":22,"style":22},"\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",[31,12141,12142,12147,12157,12161,12166,12171,12193,12197,12205,12209,12223,12235,12247,12259,12264,12269,12280,12284,12289,12297,12301,12306,12328,12354,12358,12376,12380,12406,12410,12422,12426,12431,12436,12444,12448,12452,12460,12464,12470,12476],{"__ignoreMap":22},[34,12143,12144],{"class":36,"line":37},[34,12145,12146],{"class":40},"\u002F\u002F1.new的基本语法\n",[34,12148,12149,12151,12153,12155],{"class":36,"line":44},[34,12150,620],{"class":112},[34,12152,6982],{"class":112},[34,12154,12015],{"class":2427},[34,12156,2440],{"class":59},[34,12158,12159],{"class":36,"line":50},[34,12160,2017],{"class":59},[34,12162,12163],{"class":36,"line":56},[34,12164,12165],{"class":40},"    \u002F\u002F在堆区创建整型数据\n",[34,12167,12168],{"class":36,"line":107},[34,12169,12170],{"class":40},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[34,12172,12173,12175,12177,12179,12182,12184,12186,12188,12190],{"class":36,"line":196},[34,12174,2449],{"class":112},[34,12176,6982],{"class":112},[34,12178,14],{"class":59},[34,12180,12181],{"class":112},"=new",[34,12183,2846],{"class":112},[34,12185,617],{"class":59},[34,12187,1053],{"class":63},[34,12189,6430],{"class":59},[34,12191,12192],{"class":40},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[34,12194,12195],{"class":36,"line":202},[34,12196,2036],{"class":59},[34,12198,12199,12201,12203],{"class":36,"line":207},[34,12200,5828],{"class":112},[34,12202,6052],{"class":2427},[34,12204,2440],{"class":59},[34,12206,12207],{"class":36,"line":222},[34,12208,2017],{"class":59},[34,12210,12211,12213,12215,12217,12219,12221],{"class":36,"line":227},[34,12212,2449],{"class":112},[34,12214,6982],{"class":112},[34,12216,14],{"class":59},[34,12218,447],{"class":112},[34,12220,12015],{"class":2427},[34,12222,6100],{"class":59},[34,12224,12225,12227,12229,12231,12233],{"class":36,"line":232},[34,12226,2022],{"class":59},[34,12228,6883],{"class":112},[34,12230,14],{"class":59},[34,12232,1648],{"class":112},[34,12234,1670],{"class":59},[34,12236,12237,12239,12241,12243,12245],{"class":36,"line":238},[34,12238,2022],{"class":59},[34,12240,6883],{"class":112},[34,12242,14],{"class":59},[34,12244,1648],{"class":112},[34,12246,1670],{"class":59},[34,12248,12249,12251,12253,12255,12257],{"class":36,"line":244},[34,12250,2022],{"class":59},[34,12252,6883],{"class":112},[34,12254,14],{"class":59},[34,12256,1648],{"class":112},[34,12258,1670],{"class":59},[34,12260,12261],{"class":36,"line":250},[34,12262,12263],{"class":40},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[34,12265,12266],{"class":36,"line":256},[34,12267,12268],{"class":40},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[34,12270,12271,12274,12277],{"class":36,"line":261},[34,12272,12273],{"class":112},"    delete",[34,12275,12276],{"class":59}," p;",[34,12278,12279],{"class":40},"\u002F\u002F删除这块地址\n",[34,12281,12282],{"class":36,"line":267},[34,12283,2036],{"class":59},[34,12285,12286],{"class":36,"line":2138},[34,12287,12288],{"class":40},"\u002F\u002F2.在堆区利用new开辟数组\n",[34,12290,12291,12293,12295],{"class":36,"line":2143},[34,12292,5828],{"class":112},[34,12294,6121],{"class":2427},[34,12296,2440],{"class":59},[34,12298,12299],{"class":36,"line":2157},[34,12300,2017],{"class":59},[34,12302,12303],{"class":36,"line":2162},[34,12304,12305],{"class":40},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[34,12307,12308,12310,12312,12314,12316,12318,12320,12322,12325],{"class":36,"line":2191},[34,12309,2449],{"class":112},[34,12311,6982],{"class":112},[34,12313,4344],{"class":59},[34,12315,12181],{"class":112},[34,12317,2846],{"class":112},[34,12319,1495],{"class":59},[34,12321,1053],{"class":63},[34,12323,12324],{"class":59},"];",[34,12326,12327],{"class":40},"\u002F\u002F10代表数组有10个元素\n",[34,12329,12330,12332,12334,12336,12338,12340,12342,12344,12346,12348,12350,12352],{"class":36,"line":2196},[34,12331,3665],{"class":112},[34,12333,2122],{"class":59},[34,12335,620],{"class":112},[34,12337,3496],{"class":59},[34,12339,447],{"class":112},[34,12341,319],{"class":63},[34,12343,3503],{"class":59},[34,12345,1515],{"class":112},[34,12347,1053],{"class":63},[34,12349,3503],{"class":59},[34,12351,2756],{"class":112},[34,12353,623],{"class":59},[34,12355,12356],{"class":36,"line":2213},[34,12357,2494],{"class":59},[34,12359,12360,12363,12365,12367,12369,12371,12373],{"class":36,"line":2218},[34,12361,12362],{"class":59},"        arr[i]",[34,12364,447],{"class":112},[34,12366,1048],{"class":59},[34,12368,1088],{"class":112},[34,12370,919],{"class":63},[34,12372,670],{"class":59},[34,12374,12375],{"class":40},"\u002F\u002F给10个元素赋值100～109\n",[34,12377,12378],{"class":36,"line":2223},[34,12379,2651],{"class":59},[34,12381,12382,12384,12386,12388,12390,12392,12394,12396,12398,12400,12402,12404],{"class":36,"line":2228},[34,12383,3665],{"class":112},[34,12385,2122],{"class":59},[34,12387,620],{"class":112},[34,12389,3496],{"class":59},[34,12391,447],{"class":112},[34,12393,319],{"class":63},[34,12395,3503],{"class":59},[34,12397,1515],{"class":112},[34,12399,1053],{"class":63},[34,12401,3503],{"class":59},[34,12403,2756],{"class":112},[34,12405,623],{"class":59},[34,12407,12408],{"class":36,"line":2242},[34,12409,2494],{"class":59},[34,12411,12412,12414,12416,12418,12420],{"class":36,"line":2247},[34,12413,3915],{"class":59},[34,12415,1648],{"class":112},[34,12417,4818],{"class":59},[34,12419,1648],{"class":112},[34,12421,1670],{"class":59},[34,12423,12424],{"class":36,"line":3041},[34,12425,2651],{"class":59},[34,12427,12428],{"class":36,"line":3055},[34,12429,12430],{"class":40},"    \u002F\u002F释放堆区数组\n",[34,12432,12433],{"class":36,"line":3063},[34,12434,12435],{"class":40},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[34,12437,12438,12441],{"class":36,"line":3068},[34,12439,12440],{"class":112},"    delete[]",[34,12442,12443],{"class":59}," arr;\n",[34,12445,12446],{"class":36,"line":3074},[34,12447,2036],{"class":59},[34,12449,12450],{"class":36,"line":3080},[34,12451,2864],{"emptyLinePlaceholder":540},[34,12453,12454,12456,12458],{"class":36,"line":3085},[34,12455,620],{"class":112},[34,12457,2437],{"class":2427},[34,12459,2440],{"class":59},[34,12461,12462],{"class":36,"line":8412},[34,12463,2017],{"class":59},[34,12465,12466,12468],{"class":36,"line":8436},[34,12467,6097],{"class":2427},[34,12469,6100],{"class":59},[34,12471,12472,12474],{"class":36,"line":8441},[34,12473,6166],{"class":2427},[34,12475,6100],{"class":59},[34,12477,12478],{"class":36,"line":8447},[34,12479,2036],{"class":59},[532,12481,12482],{},"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":22,"searchDepth":44,"depth":44,"links":12484},[12485],{"id":11153,"depth":44,"text":11154,"children":12486},[12487,12488],{"id":11185,"depth":50,"text":11186},{"id":11813,"depth":50,"text":11814},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11145,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12495,"title":12496,"body":12497,"description":22,"extension":538,"meta":13978,"navigation":540,"path":13979,"seo":13980,"stem":13981,"__hash__":13982},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12498,"toc":13970},[12499,12502,12506,12509,12512,12681,12685,12690,12707,12712,12864,12868,12871,12874,13268,13272,13275,13280,13283,13595,13599,13605,13765,13767,13775,13779,13782,13789,13967],[10,12500,12496],{"id":12501},"_6引用",[555,12503,12505],{"id":12504},"_61引用基本用法","6.1引用基本用法",[14,12507,12508],{},"引用的本质：给变量起别名",[14,12510,12511],{},"语法：数据类型 &别名=原名",[25,12513,12515],{"className":605,"code":12514,"language":607,"meta":22,"style":22},"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",[31,12516,12517,12525,12529,12541,12553,12557,12576,12595,12599,12610,12614,12633,12651,12655,12665,12669,12677],{"__ignoreMap":22},[34,12518,12519,12521,12523],{"class":36,"line":37},[34,12520,620],{"class":112},[34,12522,2437],{"class":2427},[34,12524,11317],{"class":59},[34,12526,12527],{"class":36,"line":44},[34,12528,2864],{"emptyLinePlaceholder":540},[34,12530,12531,12533,12535,12537,12539],{"class":36,"line":50},[34,12532,2449],{"class":112},[34,12534,11333],{"class":59},[34,12536,447],{"class":112},[34,12538,2502],{"class":63},[34,12540,1765],{"class":59},[34,12542,12543,12545,12547,12549,12551],{"class":36,"line":56},[34,12544,2449],{"class":112},[34,12546,11048],{"class":112},[34,12548,11409],{"class":59},[34,12550,447],{"class":112},[34,12552,1904],{"class":59},[34,12554,12555],{"class":36,"line":107},[34,12556,2864],{"emptyLinePlaceholder":540},[34,12558,12559,12561,12563,12566,12568,12570,12572,12574],{"class":36,"line":196},[34,12560,6993],{"class":59},[34,12562,1648],{"class":112},[34,12564,12565],{"class":187}," \"a = \"",[34,12567,1916],{"class":112},[34,12569,11333],{"class":59},[34,12571,1648],{"class":112},[34,12573,11933],{"class":59},[34,12575,7732],{"class":40},[34,12577,12578,12580,12582,12585,12587,12589,12591,12593],{"class":36,"line":202},[34,12579,6993],{"class":59},[34,12581,1648],{"class":112},[34,12583,12584],{"class":187}," \"b = \"",[34,12586,1916],{"class":112},[34,12588,11346],{"class":59},[34,12590,1648],{"class":112},[34,12592,11933],{"class":59},[34,12594,7732],{"class":40},[34,12596,12597],{"class":36,"line":207},[34,12598,2864],{"emptyLinePlaceholder":540},[34,12600,12601,12604,12606,12608],{"class":36,"line":222},[34,12602,12603],{"class":59},"    b ",[34,12605,447],{"class":112},[34,12607,6218],{"class":63},[34,12609,1765],{"class":59},[34,12611,12612],{"class":36,"line":227},[34,12613,2864],{"emptyLinePlaceholder":540},[34,12615,12616,12618,12620,12622,12624,12626,12628,12630],{"class":36,"line":232},[34,12617,6993],{"class":59},[34,12619,1648],{"class":112},[34,12621,12565],{"class":187},[34,12623,1916],{"class":112},[34,12625,11333],{"class":59},[34,12627,1648],{"class":112},[34,12629,11933],{"class":59},[34,12631,12632],{"class":40},"\u002F\u002F100\n",[34,12634,12635,12637,12639,12641,12643,12645,12647,12649],{"class":36,"line":238},[34,12636,6993],{"class":59},[34,12638,1648],{"class":112},[34,12640,12584],{"class":187},[34,12642,1916],{"class":112},[34,12644,11346],{"class":59},[34,12646,1648],{"class":112},[34,12648,11933],{"class":59},[34,12650,12632],{"class":40},[34,12652,12653],{"class":36,"line":244},[34,12654,2864],{"emptyLinePlaceholder":540},[34,12656,12657,12659,12661,12663],{"class":36,"line":250},[34,12658,2767],{"class":2427},[34,12660,617],{"class":59},[34,12662,2772],{"class":187},[34,12664,3183],{"class":59},[34,12666,12667],{"class":36,"line":256},[34,12668,2864],{"emptyLinePlaceholder":540},[34,12670,12671,12673,12675],{"class":36,"line":261},[34,12672,4554],{"class":112},[34,12674,4557],{"class":63},[34,12676,1765],{"class":59},[34,12678,12679],{"class":36,"line":267},[34,12680,2036],{"class":59},[555,12682,12684],{"id":12683},"_62引用的注意事项","6.2引用的注意事项",[567,12686,12687],{},[570,12688,12689],{},"引用必须要初始化",[25,12691,12693],{"className":605,"code":12692,"language":607,"meta":22,"style":22},"int &b;\u002F\u002F非常错误！\n",[31,12694,12695],{"__ignoreMap":22},[34,12696,12697,12699,12701,12704],{"class":36,"line":37},[34,12698,620],{"class":112},[34,12700,11048],{"class":112},[34,12702,12703],{"class":59},"b;",[34,12705,12706],{"class":40},"\u002F\u002F非常错误！\n",[567,12708,12709],{"start":44},[570,12710,12711],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[25,12713,12715],{"className":605,"code":12714,"language":607,"meta":22,"style":22},"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",[31,12716,12717,12725,12737,12749,12757,12773,12786,12804,12822,12842,12852,12860],{"__ignoreMap":22},[34,12718,12719,12721,12723],{"class":36,"line":37},[34,12720,620],{"class":112},[34,12722,2437],{"class":2427},[34,12724,11317],{"class":59},[34,12726,12727,12729,12731,12733,12735],{"class":36,"line":44},[34,12728,2449],{"class":112},[34,12730,11333],{"class":59},[34,12732,447],{"class":112},[34,12734,2502],{"class":63},[34,12736,1765],{"class":59},[34,12738,12739,12741,12743,12745,12747],{"class":36,"line":50},[34,12740,2449],{"class":112},[34,12742,11346],{"class":59},[34,12744,447],{"class":112},[34,12746,9414],{"class":63},[34,12748,1765],{"class":59},[34,12750,12751,12754],{"class":36,"line":56},[34,12752,12753],{"class":40},"    \u002F\u002Fint &c;",[34,12755,12756],{"class":40}," \u002F\u002F错误，引用必须初始化\n",[34,12758,12759,12761,12763,12765,12767,12770],{"class":36,"line":107},[34,12760,2449],{"class":112},[34,12762,11048],{"class":112},[34,12764,3410],{"class":59},[34,12766,447],{"class":112},[34,12768,12769],{"class":59}," a;",[34,12771,12772],{"class":40}," \u002F\u002F一旦初始化后，就不可以更改\n",[34,12774,12775,12778,12780,12783],{"class":36,"line":196},[34,12776,12777],{"class":59},"    c ",[34,12779,447],{"class":112},[34,12781,12782],{"class":59}," b;",[34,12784,12785],{"class":40}," \u002F\u002F这是赋值操作，不是更改引用\n",[34,12787,12788,12790,12792,12794,12796,12798,12800,12802],{"class":36,"line":202},[34,12789,6993],{"class":59},[34,12791,1648],{"class":112},[34,12793,12565],{"class":187},[34,12795,1916],{"class":112},[34,12797,11333],{"class":59},[34,12799,1648],{"class":112},[34,12801,11933],{"class":59},[34,12803,7717],{"class":40},[34,12805,12806,12808,12810,12812,12814,12816,12818,12820],{"class":36,"line":207},[34,12807,6993],{"class":59},[34,12809,1648],{"class":112},[34,12811,12584],{"class":187},[34,12813,1916],{"class":112},[34,12815,11346],{"class":59},[34,12817,1648],{"class":112},[34,12819,11933],{"class":59},[34,12821,7717],{"class":40},[34,12823,12824,12826,12828,12831,12833,12836,12838,12840],{"class":36,"line":222},[34,12825,6993],{"class":59},[34,12827,1648],{"class":112},[34,12829,12830],{"class":187}," \"c = \"",[34,12832,1916],{"class":112},[34,12834,12835],{"class":59}," c ",[34,12837,1648],{"class":112},[34,12839,11933],{"class":59},[34,12841,7717],{"class":40},[34,12843,12844,12846,12848,12850],{"class":36,"line":227},[34,12845,2767],{"class":2427},[34,12847,617],{"class":59},[34,12849,2772],{"class":187},[34,12851,3183],{"class":59},[34,12853,12854,12856,12858],{"class":36,"line":232},[34,12855,4554],{"class":112},[34,12857,4557],{"class":63},[34,12859,1765],{"class":59},[34,12861,12862],{"class":36,"line":238},[34,12863,2036],{"class":59},[555,12865,12867],{"id":12866},"_63引用做函数参数","6.3引用做函数参数",[14,12869,12870],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12872,12873],{},"优点：可以简化指针修改实参",[25,12875,12877],{"className":605,"code":12876,"language":607,"meta":22,"style":22},"\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",[31,12878,12879,12884,12907,12918,12928,12937,12941,12945,12950,12972,12984,12996,13006,13010,13014,13019,13041,13051,13059,13067,13071,13075,13083,13087,13099,13111,13115,13126,13152,13156,13176,13200,13204,13214,13238,13242,13252,13256,13264],{"__ignoreMap":22},[34,12880,12881],{"class":36,"line":37},[34,12882,12883],{"class":40},"\u002F\u002F1. 值传递\n",[34,12885,12886,12888,12891,12893,12895,12897,12900,12902,12904],{"class":36,"line":44},[34,12887,5828],{"class":112},[34,12889,12890],{"class":2427}," mySwap01",[34,12892,617],{"class":59},[34,12894,620],{"class":112},[34,12896,1870],{"class":5680},[34,12898,12899],{"class":59},", ",[34,12901,620],{"class":112},[34,12903,3297],{"class":5680},[34,12905,12906],{"class":59},") {\n",[34,12908,12909,12911,12914,12916],{"class":36,"line":50},[34,12910,2449],{"class":112},[34,12912,12913],{"class":59}," temp ",[34,12915,447],{"class":112},[34,12917,1904],{"class":59},[34,12919,12920,12923,12925],{"class":36,"line":56},[34,12921,12922],{"class":59},"    a ",[34,12924,447],{"class":112},[34,12926,12927],{"class":59}," b;\n",[34,12929,12930,12932,12934],{"class":36,"line":107},[34,12931,12603],{"class":59},[34,12933,447],{"class":112},[34,12935,12936],{"class":59}," temp;\n",[34,12938,12939],{"class":36,"line":196},[34,12940,2036],{"class":59},[34,12942,12943],{"class":36,"line":202},[34,12944,2864],{"emptyLinePlaceholder":540},[34,12946,12947],{"class":36,"line":207},[34,12948,12949],{"class":40},"\u002F\u002F2. 地址传递\n",[34,12951,12952,12954,12957,12959,12962,12964,12966,12968,12970],{"class":36,"line":222},[34,12953,5828],{"class":112},[34,12955,12956],{"class":2427}," mySwap02",[34,12958,617],{"class":59},[34,12960,12961],{"class":112},"int*",[34,12963,1870],{"class":5680},[34,12965,12899],{"class":59},[34,12967,12961],{"class":112},[34,12969,3297],{"class":5680},[34,12971,12906],{"class":59},[34,12973,12974,12976,12978,12980,12982],{"class":36,"line":227},[34,12975,2449],{"class":112},[34,12977,12913],{"class":59},[34,12979,447],{"class":112},[34,12981,6982],{"class":112},[34,12983,6661],{"class":59},[34,12985,12986,12988,12990,12992,12994],{"class":36,"line":232},[34,12987,6867],{"class":112},[34,12989,11383],{"class":59},[34,12991,447],{"class":112},[34,12993,6982],{"class":112},[34,12995,6533],{"class":59},[34,12997,12998,13000,13002,13004],{"class":36,"line":238},[34,12999,6867],{"class":112},[34,13001,11409],{"class":59},[34,13003,447],{"class":112},[34,13005,12936],{"class":59},[34,13007,13008],{"class":36,"line":244},[34,13009,2036],{"class":59},[34,13011,13012],{"class":36,"line":250},[34,13013,2864],{"emptyLinePlaceholder":540},[34,13015,13016],{"class":36,"line":256},[34,13017,13018],{"class":40},"\u002F\u002F3. 引用传递\n",[34,13020,13021,13023,13026,13028,13031,13033,13035,13037,13039],{"class":36,"line":261},[34,13022,5828],{"class":112},[34,13024,13025],{"class":2427}," mySwap03",[34,13027,617],{"class":59},[34,13029,13030],{"class":112},"int&",[34,13032,1870],{"class":5680},[34,13034,12899],{"class":59},[34,13036,13030],{"class":112},[34,13038,3297],{"class":5680},[34,13040,12906],{"class":59},[34,13042,13043,13045,13047,13049],{"class":36,"line":267},[34,13044,2449],{"class":112},[34,13046,12913],{"class":59},[34,13048,447],{"class":112},[34,13050,1904],{"class":59},[34,13052,13053,13055,13057],{"class":36,"line":2138},[34,13054,12922],{"class":59},[34,13056,447],{"class":112},[34,13058,12927],{"class":59},[34,13060,13061,13063,13065],{"class":36,"line":2143},[34,13062,12603],{"class":59},[34,13064,447],{"class":112},[34,13066,12936],{"class":59},[34,13068,13069],{"class":36,"line":2157},[34,13070,2036],{"class":59},[34,13072,13073],{"class":36,"line":2162},[34,13074,2864],{"emptyLinePlaceholder":540},[34,13076,13077,13079,13081],{"class":36,"line":2191},[34,13078,620],{"class":112},[34,13080,2437],{"class":2427},[34,13082,11317],{"class":59},[34,13084,13085],{"class":36,"line":2196},[34,13086,2864],{"emptyLinePlaceholder":540},[34,13088,13089,13091,13093,13095,13097],{"class":36,"line":2213},[34,13090,2449],{"class":112},[34,13092,11333],{"class":59},[34,13094,447],{"class":112},[34,13096,2502],{"class":63},[34,13098,1765],{"class":59},[34,13100,13101,13103,13105,13107,13109],{"class":36,"line":2218},[34,13102,2449],{"class":112},[34,13104,11346],{"class":59},[34,13106,447],{"class":112},[34,13108,9414],{"class":63},[34,13110,1765],{"class":59},[34,13112,13113],{"class":36,"line":2223},[34,13114,2864],{"emptyLinePlaceholder":540},[34,13116,13117,13120,13123],{"class":36,"line":2228},[34,13118,13119],{"class":2427},"    mySwap01",[34,13121,13122],{"class":59},"(a, b);",[34,13124,13125],{"class":40},"\u002F\u002F值传递，形参不会修饰实参\n",[34,13127,13128,13130,13132,13135,13137,13139,13141,13144,13146,13148,13150],{"class":36,"line":2242},[34,13129,6993],{"class":59},[34,13131,1648],{"class":112},[34,13133,13134],{"class":187}," \"a:\"",[34,13136,1916],{"class":112},[34,13138,11333],{"class":59},[34,13140,1648],{"class":112},[34,13142,13143],{"class":187}," \" b:\"",[34,13145,1916],{"class":112},[34,13147,11346],{"class":59},[34,13149,1648],{"class":112},[34,13151,9304],{"class":59},[34,13153,13154],{"class":36,"line":2247},[34,13155,2864],{"emptyLinePlaceholder":540},[34,13157,13158,13161,13163,13165,13168,13170,13173],{"class":36,"line":3041},[34,13159,13160],{"class":2427},"    mySwap02",[34,13162,617],{"class":59},[34,13164,961],{"class":112},[34,13166,13167],{"class":59},"a, ",[34,13169,961],{"class":112},[34,13171,13172],{"class":59},"b);",[34,13174,13175],{"class":40},"\u002F\u002F地址传递，形参会修饰实参\n",[34,13177,13178,13180,13182,13184,13186,13188,13190,13192,13194,13196,13198],{"class":36,"line":3055},[34,13179,6993],{"class":59},[34,13181,1648],{"class":112},[34,13183,13134],{"class":187},[34,13185,1916],{"class":112},[34,13187,11333],{"class":59},[34,13189,1648],{"class":112},[34,13191,13143],{"class":187},[34,13193,1916],{"class":112},[34,13195,11346],{"class":59},[34,13197,1648],{"class":112},[34,13199,9304],{"class":59},[34,13201,13202],{"class":36,"line":3063},[34,13203,2864],{"emptyLinePlaceholder":540},[34,13205,13206,13209,13211],{"class":36,"line":3068},[34,13207,13208],{"class":2427},"    mySwap03",[34,13210,13122],{"class":59},[34,13212,13213],{"class":40},"\u002F\u002F引用传递，形参会修饰实参\n",[34,13215,13216,13218,13220,13222,13224,13226,13228,13230,13232,13234,13236],{"class":36,"line":3074},[34,13217,6993],{"class":59},[34,13219,1648],{"class":112},[34,13221,13134],{"class":187},[34,13223,1916],{"class":112},[34,13225,11333],{"class":59},[34,13227,1648],{"class":112},[34,13229,13143],{"class":187},[34,13231,1916],{"class":112},[34,13233,11346],{"class":59},[34,13235,1648],{"class":112},[34,13237,9304],{"class":59},[34,13239,13240],{"class":36,"line":3080},[34,13241,2864],{"emptyLinePlaceholder":540},[34,13243,13244,13246,13248,13250],{"class":36,"line":3085},[34,13245,2767],{"class":2427},[34,13247,617],{"class":59},[34,13249,2772],{"class":187},[34,13251,3183],{"class":59},[34,13253,13254],{"class":36,"line":8412},[34,13255,2864],{"emptyLinePlaceholder":540},[34,13257,13258,13260,13262],{"class":36,"line":8436},[34,13259,4554],{"class":112},[34,13261,4557],{"class":63},[34,13263,1765],{"class":59},[34,13265,13266],{"class":36,"line":8441},[34,13267,2036],{"class":59},[555,13269,13271],{"id":13270},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13273,13274],{},"作用：引用是可以作为函数的返回值存在的",[14,13276,9489,13277],{},[760,13278,13279],{},"不要返回局部变量引用",[14,13281,13282],{},"用法：函数调用作为左值",[25,13284,13286],{"className":10405,"code":13285,"language":10407,"meta":22,"style":22},"\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",[31,13287,13288,13293,13301,13316,13322,13326,13330,13335,13343,13360,13366,13370,13374,13382,13386,13391,13405,13425,13444,13448,13453,13466,13486,13504,13508,13524,13528,13547,13565,13569,13579,13583,13591],{"__ignoreMap":22},[34,13289,13290],{"class":36,"line":37},[34,13291,13292],{"class":40},"\u002F\u002F返回局部变量引用\n",[34,13294,13295,13297,13299],{"class":36,"line":44},[34,13296,13030],{"class":112},[34,13298,6052],{"class":2427},[34,13300,11317],{"class":59},[34,13302,13303,13305,13307,13309,13311,13313],{"class":36,"line":50},[34,13304,2449],{"class":112},[34,13306,11333],{"class":59},[34,13308,447],{"class":112},[34,13310,2502],{"class":63},[34,13312,670],{"class":59},[34,13314,13315],{"class":40}," \u002F\u002F局部变量\n",[34,13317,13318,13320],{"class":36,"line":56},[34,13319,4554],{"class":112},[34,13321,1904],{"class":59},[34,13323,13324],{"class":36,"line":107},[34,13325,2036],{"class":59},[34,13327,13328],{"class":36,"line":196},[34,13329,2864],{"emptyLinePlaceholder":540},[34,13331,13332],{"class":36,"line":202},[34,13333,13334],{"class":40},"\u002F\u002F返回静态变量引用\n",[34,13336,13337,13339,13341],{"class":36,"line":207},[34,13338,13030],{"class":112},[34,13340,6121],{"class":2427},[34,13342,11317],{"class":59},[34,13344,13345,13347,13349,13351,13353,13355,13357],{"class":36,"line":222},[34,13346,11484],{"class":112},[34,13348,2846],{"class":112},[34,13350,11333],{"class":59},[34,13352,447],{"class":112},[34,13354,9414],{"class":63},[34,13356,670],{"class":59},[34,13358,13359],{"class":40},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[34,13361,13362,13364],{"class":36,"line":227},[34,13363,4554],{"class":112},[34,13365,1904],{"class":59},[34,13367,13368],{"class":36,"line":232},[34,13369,2036],{"class":59},[34,13371,13372],{"class":36,"line":238},[34,13373,2864],{"emptyLinePlaceholder":540},[34,13375,13376,13378,13380],{"class":36,"line":244},[34,13377,620],{"class":112},[34,13379,2437],{"class":2427},[34,13381,11317],{"class":59},[34,13383,13384],{"class":36,"line":250},[34,13385,2864],{"emptyLinePlaceholder":540},[34,13387,13388],{"class":36,"line":256},[34,13389,13390],{"class":40},"    \u002F\u002F不能返回局部变量的引用\n",[34,13392,13393,13396,13399,13401,13403],{"class":36,"line":261},[34,13394,13395],{"class":112},"    int&",[34,13397,13398],{"class":59}," ref ",[34,13400,447],{"class":112},[34,13402,6052],{"class":2427},[34,13404,6100],{"class":59},[34,13406,13407,13409,13411,13414,13416,13418,13420,13422],{"class":36,"line":267},[34,13408,6993],{"class":59},[34,13410,1648],{"class":112},[34,13412,13413],{"class":187}," \"ref = \"",[34,13415,1916],{"class":112},[34,13417,13398],{"class":59},[34,13419,1648],{"class":112},[34,13421,11933],{"class":59},[34,13423,13424],{"class":40},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[34,13426,13427,13429,13431,13433,13435,13437,13439,13441],{"class":36,"line":2138},[34,13428,6993],{"class":59},[34,13430,1648],{"class":112},[34,13432,13413],{"class":187},[34,13434,1916],{"class":112},[34,13436,13398],{"class":59},[34,13438,1648],{"class":112},[34,13440,11933],{"class":59},[34,13442,13443],{"class":40},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[34,13445,13446],{"class":36,"line":2143},[34,13447,2864],{"emptyLinePlaceholder":540},[34,13449,13450],{"class":36,"line":2157},[34,13451,13452],{"class":40},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[34,13454,13455,13457,13460,13462,13464],{"class":36,"line":2162},[34,13456,13395],{"class":112},[34,13458,13459],{"class":59}," ref2 ",[34,13461,447],{"class":112},[34,13463,6121],{"class":2427},[34,13465,6100],{"class":59},[34,13467,13468,13470,13472,13475,13477,13479,13481,13483],{"class":36,"line":2191},[34,13469,6993],{"class":59},[34,13471,1648],{"class":112},[34,13473,13474],{"class":187}," \"ref2 = \"",[34,13476,1916],{"class":112},[34,13478,13459],{"class":59},[34,13480,1648],{"class":112},[34,13482,11933],{"class":59},[34,13484,13485],{"class":40}," \u002F\u002F20\n",[34,13487,13488,13490,13492,13494,13496,13498,13500,13502],{"class":36,"line":2196},[34,13489,6993],{"class":59},[34,13491,1648],{"class":112},[34,13493,13474],{"class":187},[34,13495,1916],{"class":112},[34,13497,13459],{"class":59},[34,13499,1648],{"class":112},[34,13501,11933],{"class":59},[34,13503,13485],{"class":40},[34,13505,13506],{"class":36,"line":2213},[34,13507,2864],{"emptyLinePlaceholder":540},[34,13509,13510,13512,13515,13517,13519,13521],{"class":36,"line":2218},[34,13511,6166],{"class":2427},[34,13513,13514],{"class":59},"() ",[34,13516,447],{"class":112},[34,13518,3463],{"class":63},[34,13520,670],{"class":59},[34,13522,13523],{"class":40},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[34,13525,13526],{"class":36,"line":2223},[34,13527,2864],{"emptyLinePlaceholder":540},[34,13529,13530,13532,13534,13536,13538,13540,13542,13544],{"class":36,"line":2228},[34,13531,6993],{"class":59},[34,13533,1648],{"class":112},[34,13535,13474],{"class":187},[34,13537,1916],{"class":112},[34,13539,13459],{"class":59},[34,13541,1648],{"class":112},[34,13543,11933],{"class":59},[34,13545,13546],{"class":40}," \u002F\u002F1000\n",[34,13548,13549,13551,13553,13555,13557,13559,13561,13563],{"class":36,"line":2242},[34,13550,6993],{"class":59},[34,13552,1648],{"class":112},[34,13554,13474],{"class":187},[34,13556,1916],{"class":112},[34,13558,13459],{"class":59},[34,13560,1648],{"class":112},[34,13562,11933],{"class":59},[34,13564,13546],{"class":40},[34,13566,13567],{"class":36,"line":2247},[34,13568,2864],{"emptyLinePlaceholder":540},[34,13570,13571,13573,13575,13577],{"class":36,"line":3041},[34,13572,2767],{"class":2427},[34,13574,617],{"class":59},[34,13576,2772],{"class":187},[34,13578,3183],{"class":59},[34,13580,13581],{"class":36,"line":3055},[34,13582,2864],{"emptyLinePlaceholder":540},[34,13584,13585,13587,13589],{"class":36,"line":3063},[34,13586,4554],{"class":112},[34,13588,4557],{"class":63},[34,13590,1765],{"class":59},[34,13592,13593],{"class":36,"line":3068},[34,13594,2036],{"class":59},[555,13596,13598],{"id":13597},"_65引用的本质","6.5引用的本质",[14,13600,13601,13602],{},"本质：",[760,13603,13604],{},"引用的本质在c++内部实现是一个指针常量.",[25,13606,13608],{"className":605,"code":13607,"language":607,"meta":22,"style":22},"\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",[31,13609,13610,13615,13631,13645,13649,13658,13670,13675,13680,13691,13704,13708,13724,13741,13745,13753,13761],{"__ignoreMap":22},[34,13611,13612],{"class":36,"line":37},[34,13613,13614],{"class":40},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[34,13616,13617,13619,13621,13623,13625,13628],{"class":36,"line":44},[34,13618,5828],{"class":112},[34,13620,11849],{"class":2427},[34,13622,617],{"class":59},[34,13624,13030],{"class":112},[34,13626,13627],{"class":5680}," ref",[34,13629,13630],{"class":59},"){\n",[34,13632,13633,13636,13638,13640,13642],{"class":36,"line":50},[34,13634,13635],{"class":59},"    ref ",[34,13637,447],{"class":112},[34,13639,6218],{"class":63},[34,13641,670],{"class":59},[34,13643,13644],{"class":40}," \u002F\u002F ref是引用，转换为*ref = 100\n",[34,13646,13647],{"class":36,"line":56},[34,13648,2036],{"class":59},[34,13650,13651,13653,13655],{"class":36,"line":107},[34,13652,620],{"class":112},[34,13654,2437],{"class":2427},[34,13656,13657],{"class":59},"(){\n",[34,13659,13660,13662,13664,13666,13668],{"class":36,"line":196},[34,13661,2449],{"class":112},[34,13663,11333],{"class":59},[34,13665,447],{"class":112},[34,13667,2502],{"class":63},[34,13669,1765],{"class":59},[34,13671,13672],{"class":36,"line":202},[34,13673,13674],{"class":59},"    \n",[34,13676,13677],{"class":36,"line":207},[34,13678,13679],{"class":40},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[34,13681,13682,13684,13686,13688],{"class":36,"line":222},[34,13683,13395],{"class":112},[34,13685,13398],{"class":59},[34,13687,447],{"class":112},[34,13689,13690],{"class":59}," a; \n",[34,13692,13693,13695,13697,13699,13701],{"class":36,"line":227},[34,13694,13635],{"class":59},[34,13696,447],{"class":112},[34,13698,9414],{"class":63},[34,13700,670],{"class":59},[34,13702,13703],{"class":40}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[34,13705,13706],{"class":36,"line":232},[34,13707,13674],{"class":59},[34,13709,13710,13712,13714,13716,13718,13720,13722],{"class":36,"line":238},[34,13711,6993],{"class":59},[34,13713,1648],{"class":112},[34,13715,13134],{"class":187},[34,13717,1916],{"class":112},[34,13719,11333],{"class":59},[34,13721,1648],{"class":112},[34,13723,9304],{"class":59},[34,13725,13726,13728,13730,13733,13735,13737,13739],{"class":36,"line":244},[34,13727,6993],{"class":59},[34,13729,1648],{"class":112},[34,13731,13732],{"class":187}," \"ref:\"",[34,13734,1916],{"class":112},[34,13736,13398],{"class":59},[34,13738,1648],{"class":112},[34,13740,9304],{"class":59},[34,13742,13743],{"class":36,"line":250},[34,13744,13674],{"class":59},[34,13746,13747,13750],{"class":36,"line":256},[34,13748,13749],{"class":2427},"    func",[34,13751,13752],{"class":59},"(a);\n",[34,13754,13755,13757,13759],{"class":36,"line":261},[34,13756,4554],{"class":112},[34,13758,4557],{"class":63},[34,13760,1765],{"class":59},[34,13762,13763],{"class":36,"line":267},[34,13764,2036],{"class":59},[14,13766,11796],{},[567,13768,13769,13772],{},[570,13770,13771],{},"引用的本质，就是一个指针常量",[570,13773,13774],{},"引用一旦初始化，就不可以发生改变",[555,13776,13778],{"id":13777},"_66常量引用","6.6常量引用",[14,13780,13781],{},"作用：常量引用主要用来修饰形参",[14,13783,13784,13785,13788],{},"在函数形参列表中，可以加",[760,13786,13787],{},"const修饰形参","，防止形参改变实参",[25,13790,13792],{"className":605,"code":13791,"language":607,"meta":22,"style":22},"\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",[31,13793,13794,13799,13804,13823,13828,13841,13845,13849,13857,13861,13866,13871,13885,13889,13897,13909,13913,13918,13930,13937,13941,13951,13955,13963],{"__ignoreMap":22},[34,13795,13796],{"class":36,"line":37},[34,13797,13798],{"class":40},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[34,13800,13801],{"class":36,"line":44},[34,13802,13803],{"class":40},"\u002F\u002F加上const就不能修改实参的\n",[34,13805,13806,13808,13811,13813,13815,13818,13821],{"class":36,"line":50},[34,13807,5828],{"class":112},[34,13809,13810],{"class":2427}," showValue",[34,13812,617],{"class":59},[34,13814,7256],{"class":112},[34,13816,13817],{"class":112}," int&",[34,13819,13820],{"class":5680}," v",[34,13822,12906],{"class":59},[34,13824,13825],{"class":36,"line":56},[34,13826,13827],{"class":40},"    \u002F\u002Fv += 100;\n",[34,13829,13830,13832,13834,13837,13839],{"class":36,"line":107},[34,13831,6993],{"class":59},[34,13833,1648],{"class":112},[34,13835,13836],{"class":59}," v ",[34,13838,1648],{"class":112},[34,13840,9304],{"class":59},[34,13842,13843],{"class":36,"line":196},[34,13844,2036],{"class":59},[34,13846,13847],{"class":36,"line":202},[34,13848,2864],{"emptyLinePlaceholder":540},[34,13850,13851,13853,13855],{"class":36,"line":207},[34,13852,620],{"class":112},[34,13854,2437],{"class":2427},[34,13856,11317],{"class":59},[34,13858,13859],{"class":36,"line":222},[34,13860,2864],{"emptyLinePlaceholder":540},[34,13862,13863],{"class":36,"line":227},[34,13864,13865],{"class":40},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[34,13867,13868],{"class":36,"line":232},[34,13869,13870],{"class":40},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[34,13872,13873,13875,13877,13879,13881,13883],{"class":36,"line":238},[34,13874,11685],{"class":112},[34,13876,13817],{"class":112},[34,13878,13398],{"class":59},[34,13880,447],{"class":112},[34,13882,2502],{"class":63},[34,13884,1765],{"class":59},[34,13886,13887],{"class":36,"line":244},[34,13888,2864],{"emptyLinePlaceholder":540},[34,13890,13891,13894],{"class":36,"line":250},[34,13892,13893],{"class":40},"    \u002F\u002Fref = 100;",[34,13895,13896],{"class":40},"  \u002F\u002F加入const后不可以修改变量\n",[34,13898,13899,13901,13903,13905,13907],{"class":36,"line":256},[34,13900,6993],{"class":59},[34,13902,1648],{"class":112},[34,13904,13398],{"class":59},[34,13906,1648],{"class":112},[34,13908,9304],{"class":59},[34,13910,13911],{"class":36,"line":261},[34,13912,2864],{"emptyLinePlaceholder":540},[34,13914,13915],{"class":36,"line":267},[34,13916,13917],{"class":40},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[34,13919,13920,13922,13924,13926,13928],{"class":36,"line":2138},[34,13921,2449],{"class":112},[34,13923,11333],{"class":59},[34,13925,447],{"class":112},[34,13927,2502],{"class":63},[34,13929,1765],{"class":59},[34,13931,13932,13935],{"class":36,"line":2143},[34,13933,13934],{"class":2427},"    showValue",[34,13936,13752],{"class":59},[34,13938,13939],{"class":36,"line":2157},[34,13940,2864],{"emptyLinePlaceholder":540},[34,13942,13943,13945,13947,13949],{"class":36,"line":2162},[34,13944,2767],{"class":2427},[34,13946,617],{"class":59},[34,13948,2772],{"class":187},[34,13950,3183],{"class":59},[34,13952,13953],{"class":36,"line":2191},[34,13954,2864],{"emptyLinePlaceholder":540},[34,13956,13957,13959,13961],{"class":36,"line":2196},[34,13958,4554],{"class":112},[34,13960,4557],{"class":63},[34,13962,1765],{"class":59},[34,13964,13965],{"class":36,"line":2213},[34,13966,2036],{"class":59},[532,13968,13969],{},"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":22,"searchDepth":44,"depth":44,"links":13971},[13972,13973,13974,13975,13976,13977],{"id":12504,"depth":44,"text":12505},{"id":12683,"depth":44,"text":12684},{"id":12866,"depth":44,"text":12867},{"id":13270,"depth":44,"text":13271},{"id":13597,"depth":44,"text":13598},{"id":13777,"depth":44,"text":13778},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12496,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13984,"title":13985,"body":13986,"description":22,"extension":538,"meta":15067,"navigation":540,"path":15068,"seo":15069,"stem":15070,"__hash__":15071},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13987,"toc":15059},[13988,13991,13995,13998,14003,14235,14237,14248,14252,14255,14263,14367,14370,14374,14377,14381,14384,14389,14411,14417,14744,14747,14751,14759,15056],[10,13989,13985],{"id":13990},"_7函数高级部分",[555,13992,13994],{"id":13993},"_71函数默认参数","7.1函数默认参数",[14,13996,13997],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13999,5645,14000],{},[31,14001,14002],{}," 返回值类型  函数名 （参数= 默认值）{}",[25,14004,14006],{"className":605,"code":14005,"language":607,"meta":22,"style":22},"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",[31,14007,14008,14043,14058,14062,14066,14071,14076,14105,14125,14135,14139,14143,14151,14155,14183,14205,14209,14219,14223,14231],{"__ignoreMap":22},[34,14009,14010,14012,14014,14016,14018,14020,14022,14024,14026,14029,14031,14033,14035,14037,14039,14041],{"class":36,"line":37},[34,14011,620],{"class":112},[34,14013,11849],{"class":2427},[34,14015,617],{"class":59},[34,14017,620],{"class":112},[34,14019,1870],{"class":5680},[34,14021,12899],{"class":59},[34,14023,620],{"class":112},[34,14025,3297],{"class":5680},[34,14027,14028],{"class":112}," =",[34,14030,2502],{"class":63},[34,14032,12899],{"class":59},[34,14034,620],{"class":112},[34,14036,3313],{"class":5680},[34,14038,14028],{"class":112},[34,14040,2502],{"class":63},[34,14042,12906],{"class":59},[34,14044,14045,14047,14049,14051,14053,14055],{"class":36,"line":44},[34,14046,4554],{"class":112},[34,14048,11333],{"class":59},[34,14050,1088],{"class":112},[34,14052,11346],{"class":59},[34,14054,1088],{"class":112},[34,14056,14057],{"class":59}," c;\n",[34,14059,14060],{"class":36,"line":50},[34,14061,2036],{"class":59},[34,14063,14064],{"class":36,"line":56},[34,14065,2864],{"emptyLinePlaceholder":540},[34,14067,14068],{"class":36,"line":107},[34,14069,14070],{"class":40},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[34,14072,14073],{"class":36,"line":196},[34,14074,14075],{"class":40},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[34,14077,14078,14080,14083,14085,14087,14089,14091,14093,14095,14097,14099,14101,14103],{"class":36,"line":202},[34,14079,620],{"class":112},[34,14081,14082],{"class":2427}," func2",[34,14084,617],{"class":59},[34,14086,620],{"class":112},[34,14088,1870],{"class":5680},[34,14090,14028],{"class":112},[34,14092,2502],{"class":63},[34,14094,12899],{"class":59},[34,14096,620],{"class":112},[34,14098,3297],{"class":5680},[34,14100,14028],{"class":112},[34,14102,2502],{"class":63},[34,14104,3183],{"class":59},[34,14106,14107,14109,14111,14113,14115,14117,14119,14121,14123],{"class":36,"line":207},[34,14108,620],{"class":112},[34,14110,14082],{"class":2427},[34,14112,617],{"class":59},[34,14114,620],{"class":112},[34,14116,1870],{"class":5680},[34,14118,12899],{"class":59},[34,14120,620],{"class":112},[34,14122,3297],{"class":5680},[34,14124,12906],{"class":59},[34,14126,14127,14129,14131,14133],{"class":36,"line":222},[34,14128,4554],{"class":112},[34,14130,11333],{"class":59},[34,14132,1088],{"class":112},[34,14134,12927],{"class":59},[34,14136,14137],{"class":36,"line":227},[34,14138,2036],{"class":59},[34,14140,14141],{"class":36,"line":232},[34,14142,2864],{"emptyLinePlaceholder":540},[34,14144,14145,14147,14149],{"class":36,"line":238},[34,14146,620],{"class":112},[34,14148,2437],{"class":2427},[34,14150,11317],{"class":59},[34,14152,14153],{"class":36,"line":244},[34,14154,2864],{"emptyLinePlaceholder":540},[34,14156,14157,14159,14161,14164,14166,14168,14170,14172,14174,14176,14179,14181],{"class":36,"line":250},[34,14158,6993],{"class":59},[34,14160,1648],{"class":112},[34,14162,14163],{"class":187}," \"ret = \"",[34,14165,1916],{"class":112},[34,14167,11849],{"class":2427},[34,14169,617],{"class":59},[34,14171,1306],{"class":63},[34,14173,12899],{"class":59},[34,14175,1306],{"class":63},[34,14177,14178],{"class":59},") ",[34,14180,1648],{"class":112},[34,14182,9304],{"class":59},[34,14184,14185,14187,14189,14191,14193,14195,14197,14199,14201,14203],{"class":36,"line":256},[34,14186,6993],{"class":59},[34,14188,1648],{"class":112},[34,14190,14163],{"class":187},[34,14192,1916],{"class":112},[34,14194,11849],{"class":2427},[34,14196,617],{"class":59},[34,14198,919],{"class":63},[34,14200,14178],{"class":59},[34,14202,1648],{"class":112},[34,14204,9304],{"class":59},[34,14206,14207],{"class":36,"line":261},[34,14208,2864],{"emptyLinePlaceholder":540},[34,14210,14211,14213,14215,14217],{"class":36,"line":267},[34,14212,2767],{"class":2427},[34,14214,617],{"class":59},[34,14216,2772],{"class":187},[34,14218,3183],{"class":59},[34,14220,14221],{"class":36,"line":2138},[34,14222,2864],{"emptyLinePlaceholder":540},[34,14224,14225,14227,14229],{"class":36,"line":2143},[34,14226,4554],{"class":112},[34,14228,4557],{"class":63},[34,14230,1765],{"class":59},[34,14232,14233],{"class":36,"line":2157},[34,14234,2036],{"class":59},[14,14236,11796],{},[567,14238,14239,14242,14245],{},[570,14240,14241],{},"我传就用我；没传就用你",[570,14243,14244],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[570,14246,14247],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[555,14249,14251],{"id":14250},"_72函数的占位参数","7.2函数的占位参数",[14,14253,14254],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14256,14257,14259,14260],{},[760,14258,5645],{}," ",[31,14261,14262],{},"返回值类型 函数名 (数据类型){}",[25,14264,14266],{"className":605,"code":14265,"language":607,"meta":22,"style":22},"\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",[31,14267,14268,14273,14291,14304,14308,14316,14320,14337,14341,14351,14355,14363],{"__ignoreMap":22},[34,14269,14270],{"class":36,"line":37},[34,14271,14272],{"class":40},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[34,14274,14275,14277,14279,14281,14283,14285,14287,14289],{"class":36,"line":44},[34,14276,5828],{"class":112},[34,14278,11849],{"class":2427},[34,14280,617],{"class":59},[34,14282,620],{"class":112},[34,14284,1870],{"class":5680},[34,14286,12899],{"class":59},[34,14288,620],{"class":112},[34,14290,12906],{"class":59},[34,14292,14293,14295,14297,14300,14302],{"class":36,"line":50},[34,14294,6993],{"class":59},[34,14296,1648],{"class":112},[34,14298,14299],{"class":187}," \"this is func\"",[34,14301,1916],{"class":112},[34,14303,9304],{"class":59},[34,14305,14306],{"class":36,"line":56},[34,14307,2036],{"class":59},[34,14309,14310,14312,14314],{"class":36,"line":107},[34,14311,620],{"class":112},[34,14313,2437],{"class":2427},[34,14315,11317],{"class":59},[34,14317,14318],{"class":36,"line":196},[34,14319,2864],{"emptyLinePlaceholder":540},[34,14321,14322,14324,14326,14328,14330,14332,14334],{"class":36,"line":202},[34,14323,13749],{"class":2427},[34,14325,617],{"class":59},[34,14327,1053],{"class":63},[34,14329,67],{"class":59},[34,14331,1053],{"class":63},[34,14333,6430],{"class":59},[34,14335,14336],{"class":40}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[34,14338,14339],{"class":36,"line":207},[34,14340,2864],{"emptyLinePlaceholder":540},[34,14342,14343,14345,14347,14349],{"class":36,"line":222},[34,14344,2767],{"class":2427},[34,14346,617],{"class":59},[34,14348,2772],{"class":187},[34,14350,3183],{"class":59},[34,14352,14353],{"class":36,"line":227},[34,14354,2864],{"emptyLinePlaceholder":540},[34,14356,14357,14359,14361],{"class":36,"line":232},[34,14358,4554],{"class":112},[34,14360,4557],{"class":63},[34,14362,1765],{"class":59},[34,14364,14365],{"class":36,"line":238},[34,14366,2036],{"class":59},[14,14368,14369],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[555,14371,14373],{"id":14372},"_73函数重载","7.3函数重载",[14,14375,14376],{},"意思是函数名是可以相同的",[584,14378,14380],{"id":14379},"_731基本语法","7.3.1基本语法",[14,14382,14383],{},"作用：函数名可以相同，提高复用性",[14,14385,14386],{},[760,14387,14388],{},"函数重载满足条件：",[1611,14390,14391,14394,14397],{},[570,14392,14393],{},"同一个作用域下",[570,14395,14396],{},"函数名称相同",[570,14398,14399,14400,14403,14404,14407,14408],{},"函数参数",[760,14401,14402],{},"类型不同","  或者 ",[760,14405,14406],{},"个数不同"," 或者 ",[760,14409,14410],{},"顺序不同",[14,14412,14413,14416],{},[760,14414,14415],{},"注意:","  函数的返回值不可以作为函数重载的条件",[25,14418,14420],{"className":10405,"code":14419,"language":10407,"meta":22,"style":22},"\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",[31,14421,14422,14427,14435,14439,14452,14456,14470,14474,14487,14491,14506,14510,14523,14527,14548,14552,14565,14569,14589,14593,14606,14610,14614,14619,14624,14629,14634,14639,14643,14647,14655,14659,14665,14675,14685,14699,14714,14718,14728,14732,14740],{"__ignoreMap":22},[34,14423,14424],{"class":36,"line":37},[34,14425,14426],{"class":40},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[34,14428,14429,14431,14433],{"class":36,"line":44},[34,14430,5828],{"class":112},[34,14432,11849],{"class":2427},[34,14434,2440],{"class":59},[34,14436,14437],{"class":36,"line":50},[34,14438,2017],{"class":59},[34,14440,14441,14443,14445,14448,14450],{"class":36,"line":56},[34,14442,6993],{"class":59},[34,14444,1648],{"class":112},[34,14446,14447],{"class":187}," \"func 的调用！\"",[34,14449,1916],{"class":112},[34,14451,9304],{"class":59},[34,14453,14454],{"class":36,"line":107},[34,14455,2036],{"class":59},[34,14457,14458,14460,14462,14464,14466,14468],{"class":36,"line":196},[34,14459,5828],{"class":112},[34,14461,11849],{"class":2427},[34,14463,617],{"class":59},[34,14465,620],{"class":112},[34,14467,1870],{"class":5680},[34,14469,623],{"class":59},[34,14471,14472],{"class":36,"line":202},[34,14473,2017],{"class":59},[34,14475,14476,14478,14480,14483,14485],{"class":36,"line":207},[34,14477,6993],{"class":59},[34,14479,1648],{"class":112},[34,14481,14482],{"class":187}," \"func (int a) 的调用！\"",[34,14484,1916],{"class":112},[34,14486,9304],{"class":59},[34,14488,14489],{"class":36,"line":222},[34,14490,2036],{"class":59},[34,14492,14493,14495,14497,14499,14502,14504],{"class":36,"line":227},[34,14494,5828],{"class":112},[34,14496,11849],{"class":2427},[34,14498,617],{"class":59},[34,14500,14501],{"class":112},"double",[34,14503,1870],{"class":5680},[34,14505,623],{"class":59},[34,14507,14508],{"class":36,"line":232},[34,14509,2017],{"class":59},[34,14511,14512,14514,14516,14519,14521],{"class":36,"line":238},[34,14513,6993],{"class":59},[34,14515,1648],{"class":112},[34,14517,14518],{"class":187}," \"func (double a)的调用！\"",[34,14520,1916],{"class":112},[34,14522,9304],{"class":59},[34,14524,14525],{"class":36,"line":244},[34,14526,2036],{"class":59},[34,14528,14529,14531,14533,14535,14537,14539,14542,14544,14546],{"class":36,"line":250},[34,14530,5828],{"class":112},[34,14532,11849],{"class":2427},[34,14534,617],{"class":59},[34,14536,620],{"class":112},[34,14538,1870],{"class":5680},[34,14540,14541],{"class":59}," ,",[34,14543,14501],{"class":112},[34,14545,3297],{"class":5680},[34,14547,623],{"class":59},[34,14549,14550],{"class":36,"line":256},[34,14551,2017],{"class":59},[34,14553,14554,14556,14558,14561,14563],{"class":36,"line":261},[34,14555,6993],{"class":59},[34,14557,1648],{"class":112},[34,14559,14560],{"class":187}," \"func (int a ,double b) 的调用！\"",[34,14562,1916],{"class":112},[34,14564,9304],{"class":59},[34,14566,14567],{"class":36,"line":267},[34,14568,2036],{"class":59},[34,14570,14571,14573,14575,14577,14579,14581,14583,14585,14587],{"class":36,"line":2138},[34,14572,5828],{"class":112},[34,14574,11849],{"class":2427},[34,14576,617],{"class":59},[34,14578,14501],{"class":112},[34,14580,1870],{"class":5680},[34,14582,14541],{"class":59},[34,14584,620],{"class":112},[34,14586,3297],{"class":5680},[34,14588,623],{"class":59},[34,14590,14591],{"class":36,"line":2143},[34,14592,2017],{"class":59},[34,14594,14595,14597,14599,14602,14604],{"class":36,"line":2157},[34,14596,6993],{"class":59},[34,14598,1648],{"class":112},[34,14600,14601],{"class":187}," \"func (double a ,int b)的调用！\"",[34,14603,1916],{"class":112},[34,14605,9304],{"class":59},[34,14607,14608],{"class":36,"line":2162},[34,14609,2036],{"class":59},[34,14611,14612],{"class":36,"line":2191},[34,14613,2864],{"emptyLinePlaceholder":540},[34,14615,14616],{"class":36,"line":2196},[34,14617,14618],{"class":40},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[34,14620,14621],{"class":36,"line":2213},[34,14622,14623],{"class":40},"\u002F\u002Fint func(double a, int b)\n",[34,14625,14626],{"class":36,"line":2218},[34,14627,14628],{"class":40},"\u002F\u002F{\n",[34,14630,14631],{"class":36,"line":2223},[34,14632,14633],{"class":40},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[34,14635,14636],{"class":36,"line":2228},[34,14637,14638],{"class":40},"\u002F\u002F}\n",[34,14640,14641],{"class":36,"line":2242},[34,14642,2864],{"emptyLinePlaceholder":540},[34,14644,14645],{"class":36,"line":2247},[34,14646,2864],{"emptyLinePlaceholder":540},[34,14648,14649,14651,14653],{"class":36,"line":3041},[34,14650,620],{"class":112},[34,14652,2437],{"class":2427},[34,14654,11317],{"class":59},[34,14656,14657],{"class":36,"line":3055},[34,14658,2864],{"emptyLinePlaceholder":540},[34,14660,14661,14663],{"class":36,"line":3063},[34,14662,13749],{"class":2427},[34,14664,6100],{"class":59},[34,14666,14667,14669,14671,14673],{"class":36,"line":3068},[34,14668,13749],{"class":2427},[34,14670,617],{"class":59},[34,14672,1053],{"class":63},[34,14674,3183],{"class":59},[34,14676,14677,14679,14681,14683],{"class":36,"line":3074},[34,14678,13749],{"class":2427},[34,14680,617],{"class":59},[34,14682,664],{"class":63},[34,14684,3183],{"class":59},[34,14686,14687,14689,14691,14693,14695,14697],{"class":36,"line":3080},[34,14688,13749],{"class":2427},[34,14690,617],{"class":59},[34,14692,1053],{"class":63},[34,14694,67],{"class":59},[34,14696,664],{"class":63},[34,14698,3183],{"class":59},[34,14700,14701,14703,14705,14707,14710,14712],{"class":36,"line":3085},[34,14702,13749],{"class":2427},[34,14704,617],{"class":59},[34,14706,664],{"class":63},[34,14708,14709],{"class":59}," , ",[34,14711,1053],{"class":63},[34,14713,3183],{"class":59},[34,14715,14716],{"class":36,"line":8412},[34,14717,13674],{"class":59},[34,14719,14720,14722,14724,14726],{"class":36,"line":8436},[34,14721,2767],{"class":2427},[34,14723,617],{"class":59},[34,14725,2772],{"class":187},[34,14727,3183],{"class":59},[34,14729,14730],{"class":36,"line":8441},[34,14731,2864],{"emptyLinePlaceholder":540},[34,14733,14734,14736,14738],{"class":36,"line":8447},[34,14735,4554],{"class":112},[34,14737,4557],{"class":63},[34,14739,1765],{"class":59},[34,14741,14742],{"class":36,"line":8474},[34,14743,2036],{"class":59},[14,14745,14746],{},"重点：函数返回值不可以作为函数重载条件！",[584,14748,14750],{"id":14749},"_732注意事项","7.3.2注意事项",[1611,14752,14753,14756],{},[570,14754,14755],{},"引用作为重载条件!!!",[570,14757,14758],{},"函数重载碰到函数默认参数",[25,14760,14762],{"className":605,"code":14761,"language":607,"meta":22,"style":22},"\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",[31,14763,14764,14769,14774,14778,14794,14798,14811,14815,14819,14837,14841,14854,14858,14862,14866,14871,14875,14899,14903,14916,14920,14924,14938,14942,14955,14959,14963,14971,14975,14987,14997,15010,15014,15018,15026,15030,15040,15044,15052],{"__ignoreMap":22},[34,14765,14766],{"class":36,"line":37},[34,14767,14768],{"class":40},"\u002F\u002F函数重载注意事项\n",[34,14770,14771],{"class":36,"line":44},[34,14772,14773],{"class":40},"\u002F\u002F1、引用作为重载条件\n",[34,14775,14776],{"class":36,"line":50},[34,14777,2864],{"emptyLinePlaceholder":540},[34,14779,14780,14782,14784,14786,14788,14790,14792],{"class":36,"line":56},[34,14781,5828],{"class":112},[34,14783,11849],{"class":2427},[34,14785,617],{"class":59},[34,14787,620],{"class":112},[34,14789,11048],{"class":112},[34,14791,847],{"class":5680},[34,14793,623],{"class":59},[34,14795,14796],{"class":36,"line":107},[34,14797,2017],{"class":59},[34,14799,14800,14802,14804,14807,14809],{"class":36,"line":196},[34,14801,6993],{"class":59},[34,14803,1648],{"class":112},[34,14805,14806],{"class":187}," \"func (int &a) 调用 \"",[34,14808,1916],{"class":112},[34,14810,9304],{"class":59},[34,14812,14813],{"class":36,"line":202},[34,14814,2036],{"class":59},[34,14816,14817],{"class":36,"line":207},[34,14818,2864],{"emptyLinePlaceholder":540},[34,14820,14821,14823,14825,14827,14829,14831,14833,14835],{"class":36,"line":222},[34,14822,5828],{"class":112},[34,14824,11849],{"class":2427},[34,14826,617],{"class":59},[34,14828,7256],{"class":112},[34,14830,2846],{"class":112},[34,14832,11048],{"class":112},[34,14834,847],{"class":5680},[34,14836,623],{"class":59},[34,14838,14839],{"class":36,"line":227},[34,14840,2017],{"class":59},[34,14842,14843,14845,14847,14850,14852],{"class":36,"line":232},[34,14844,6993],{"class":59},[34,14846,1648],{"class":112},[34,14848,14849],{"class":187}," \"func (const int &a) 调用 \"",[34,14851,1916],{"class":112},[34,14853,9304],{"class":59},[34,14855,14856],{"class":36,"line":238},[34,14857,2036],{"class":59},[34,14859,14860],{"class":36,"line":244},[34,14861,2864],{"emptyLinePlaceholder":540},[34,14863,14864],{"class":36,"line":250},[34,14865,2864],{"emptyLinePlaceholder":540},[34,14867,14868],{"class":36,"line":256},[34,14869,14870],{"class":40},"\u002F\u002F2、函数重载碰到函数默认参数\n",[34,14872,14873],{"class":36,"line":261},[34,14874,2864],{"emptyLinePlaceholder":540},[34,14876,14877,14879,14881,14883,14885,14887,14889,14891,14893,14895,14897],{"class":36,"line":267},[34,14878,5828],{"class":112},[34,14880,14082],{"class":2427},[34,14882,617],{"class":59},[34,14884,620],{"class":112},[34,14886,1870],{"class":5680},[34,14888,12899],{"class":59},[34,14890,620],{"class":112},[34,14892,3297],{"class":5680},[34,14894,14028],{"class":112},[34,14896,2502],{"class":63},[34,14898,623],{"class":59},[34,14900,14901],{"class":36,"line":2138},[34,14902,2017],{"class":59},[34,14904,14905,14907,14909,14912,14914],{"class":36,"line":2143},[34,14906,6993],{"class":59},[34,14908,1648],{"class":112},[34,14910,14911],{"class":187}," \"func2(int a, int b = 10) 调用\"",[34,14913,1916],{"class":112},[34,14915,9304],{"class":59},[34,14917,14918],{"class":36,"line":2157},[34,14919,2036],{"class":59},[34,14921,14922],{"class":36,"line":2162},[34,14923,2864],{"emptyLinePlaceholder":540},[34,14925,14926,14928,14930,14932,14934,14936],{"class":36,"line":2191},[34,14927,5828],{"class":112},[34,14929,14082],{"class":2427},[34,14931,617],{"class":59},[34,14933,620],{"class":112},[34,14935,1870],{"class":5680},[34,14937,623],{"class":59},[34,14939,14940],{"class":36,"line":2196},[34,14941,2017],{"class":59},[34,14943,14944,14946,14948,14951,14953],{"class":36,"line":2213},[34,14945,6993],{"class":59},[34,14947,1648],{"class":112},[34,14949,14950],{"class":187}," \"func2(int a) 调用\"",[34,14952,1916],{"class":112},[34,14954,9304],{"class":59},[34,14956,14957],{"class":36,"line":2218},[34,14958,2036],{"class":59},[34,14960,14961],{"class":36,"line":2223},[34,14962,2864],{"emptyLinePlaceholder":540},[34,14964,14965,14967,14969],{"class":36,"line":2228},[34,14966,620],{"class":112},[34,14968,2437],{"class":2427},[34,14970,11317],{"class":59},[34,14972,14973],{"class":36,"line":2242},[34,14974,13674],{"class":59},[34,14976,14977,14979,14981,14983,14985],{"class":36,"line":2247},[34,14978,2449],{"class":112},[34,14980,11333],{"class":59},[34,14982,447],{"class":112},[34,14984,2502],{"class":63},[34,14986,1765],{"class":59},[34,14988,14989,14991,14994],{"class":36,"line":3041},[34,14990,13749],{"class":2427},[34,14992,14993],{"class":59},"(a);",[34,14995,14996],{"class":40}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[34,14998,14999,15001,15003,15005,15007],{"class":36,"line":3055},[34,15000,13749],{"class":2427},[34,15002,617],{"class":59},[34,15004,1053],{"class":63},[34,15006,6430],{"class":59},[34,15008,15009],{"class":40},"\u002F\u002F调用有const   10是个常量\n",[34,15011,15012],{"class":36,"line":3063},[34,15013,2864],{"emptyLinePlaceholder":540},[34,15015,15016],{"class":36,"line":3068},[34,15017,2864],{"emptyLinePlaceholder":540},[34,15019,15020,15023],{"class":36,"line":3074},[34,15021,15022],{"class":40},"    \u002F\u002Ffunc2(10);",[34,15024,15025],{"class":40}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[34,15027,15028],{"class":36,"line":3080},[34,15029,2864],{"emptyLinePlaceholder":540},[34,15031,15032,15034,15036,15038],{"class":36,"line":3085},[34,15033,2767],{"class":2427},[34,15035,617],{"class":59},[34,15037,2772],{"class":187},[34,15039,3183],{"class":59},[34,15041,15042],{"class":36,"line":8412},[34,15043,2864],{"emptyLinePlaceholder":540},[34,15045,15046,15048,15050],{"class":36,"line":8436},[34,15047,4554],{"class":112},[34,15049,4557],{"class":63},[34,15051,1765],{"class":59},[34,15053,15054],{"class":36,"line":8441},[34,15055,2036],{"class":59},[532,15057,15058],{},"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":22,"searchDepth":44,"depth":44,"links":15060},[15061,15062,15063],{"id":13993,"depth":44,"text":13994},{"id":14250,"depth":44,"text":14251},{"id":14372,"depth":44,"text":14373,"children":15064},[15065,15066],{"id":14379,"depth":50,"text":14380},{"id":14749,"depth":50,"text":14750},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13985,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15073,"title":15074,"body":15075,"description":23829,"extension":538,"meta":23830,"navigation":540,"path":23831,"seo":23832,"stem":23833,"__hash__":23834},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15076,"toc":23810},[15077,15080,15086,15093,15098,15101,15104,15107,15111,15115,15118,15121,15129,15134,15137,15144,15149,15308,15311,15564,15567,15570,15573,15578,15581,15584,15595,15600,15836,15840,15850,15853,15861,16008,16012,16015,16018,16022,16467,16471,16479,16487,17399,17406,17411,18039,18042,18045,18048,18167,18170,18257,18260,18386,18389,18483,18486,18839,18843,18851,18855,18862,18865,18868,18879,18885,18890,18902,18910,18930,18938,18955,19141,19144,19148,19151,19154,19157,19160,19163,19166,19169,19629,19635,19639,19642,19653,20240,20243,20732,20736,20739,20742,20745,20748,20751,20759,21155,21159,21162,21165,21612,21615,21618,21623,21626,21631,21634,21638,21641,21643,21649,21652,21958,21968,22009,22013,22016,22018,22051,22054,22361,22363,22378,22381,22404,22413,22419,22422,22426,22429,22432,22437,22448,22453,22461,22466,22596,22599,22602,22777,22782,22994,22998,23001,23115,23120,23359,23363,23367,23370,23373,23378,23483,23486,23489,23492,23496,23607,23610,23613,23618,23670,23673,23676,23681,23727,23730,23735,23803,23805,23808],[10,15078,15074],{"id":15079},"_8类和对象",[14,15081,15082,15083],{},"C++面向对象的三大特性为",[760,15084,15085],{},"封装、继承、多态",[14,15087,15088,15089,15092],{},"C++认为",[760,15090,15091],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15094,15095],{},[760,15096,15097],{},"例如：",[14,15099,15100],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15102,15103],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15105,15106],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[555,15108,15110],{"id":15109},"_81封装","8.1封装",[584,15112,15114],{"id":15113},"_811封装的意义","8.1.1封装的意义",[14,15116,15117],{},"封装是C++面向对象三大特性之一",[14,15119,15120],{},"封装的意义：",[1611,15122,15123,15126],{},[570,15124,15125],{},"将属性和行为作为一个整体，表现生活中的事物",[570,15127,15128],{},"将属性和行为加以权限控制",[14,15130,15131],{},[760,15132,15133],{},"封装意义一：",[14,15135,15136],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15138,15139,14259,15141],{},[760,15140,5645],{},[31,15142,15143],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[567,15145,15146],{},[570,15147,15148],{},"**示例1：**设计一个圆类，求圆的周长",[25,15150,15152],{"className":605,"code":15151,"language":607,"meta":22,"style":22},"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",[31,15153,15154,15162,15166,15171,15176,15181,15186,15193,15198,15208,15212,15230,15234,15238,15246,15250,15255,15260,15265,15270,15281,15304],{"__ignoreMap":22},[34,15155,15156,15159],{"class":36,"line":37},[34,15157,15158],{"class":112},"class",[34,15160,15161],{"class":2427}," Circle\n",[34,15163,15164],{"class":36,"line":44},[34,15165,2017],{"class":59},[34,15167,15168],{"class":36,"line":50},[34,15169,15170],{"class":40},"    \u002F\u002F访问权限\n",[34,15172,15173],{"class":36,"line":56},[34,15174,15175],{"class":40},"    \u002F\u002F公共权限\n",[34,15177,15178],{"class":36,"line":107},[34,15179,15180],{"class":112},"public:\n",[34,15182,15183],{"class":36,"line":196},[34,15184,15185],{"class":40},"    \u002F\u002F属性\n",[34,15187,15188,15190],{"class":36,"line":202},[34,15189,2449],{"class":112},[34,15191,15192],{"class":59}," m_r;\n",[34,15194,15195],{"class":36,"line":207},[34,15196,15197],{"class":40},"    \u002F\u002F行为\n",[34,15199,15200,15203,15206],{"class":36,"line":222},[34,15201,15202],{"class":112},"    double",[34,15204,15205],{"class":2427}," calculateZC",[34,15207,2440],{"class":59},[34,15209,15210],{"class":36,"line":227},[34,15211,2494],{"class":59},[34,15213,15214,15217,15220,15222,15225,15227],{"class":36,"line":232},[34,15215,15216],{"class":112},"        return",[34,15218,15219],{"class":63}," 2",[34,15221,1062],{"class":112},[34,15223,15224],{"class":59},"PI",[34,15226,1062],{"class":112},[34,15228,15229],{"class":59},"m_r;\n",[34,15231,15232],{"class":36,"line":238},[34,15233,2651],{"class":59},[34,15235,15236],{"class":36,"line":244},[34,15237,4459],{"class":59},[34,15239,15240,15242,15244],{"class":36,"line":250},[34,15241,620],{"class":112},[34,15243,2437],{"class":2427},[34,15245,2440],{"class":59},[34,15247,15248],{"class":36,"line":256},[34,15249,2017],{"class":59},[34,15251,15252],{"class":36,"line":261},[34,15253,15254],{"class":40},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[34,15256,15257],{"class":36,"line":267},[34,15258,15259],{"class":40},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[34,15261,15262],{"class":36,"line":2138},[34,15263,15264],{"class":59},"    Circle c1;\n",[34,15266,15267],{"class":36,"line":2143},[34,15268,15269],{"class":40},"    \u002F\u002F给圆对象 的属性进行赋值\n",[34,15271,15272,15275,15277,15279],{"class":36,"line":2157},[34,15273,15274],{"class":59},"    c1.m_r",[34,15276,447],{"class":112},[34,15278,1053],{"class":63},[34,15280,1765],{"class":59},[34,15282,15283,15285,15287,15290,15292,15295,15298,15300,15302],{"class":36,"line":2162},[34,15284,2022],{"class":59},[34,15286,1648],{"class":112},[34,15288,15289],{"class":187},"\"圆的周长\"",[34,15291,1648],{"class":112},[34,15293,15294],{"class":59},"c1.",[34,15296,15297],{"class":2427},"calculateZC",[34,15299,2891],{"class":59},[34,15301,1648],{"class":112},[34,15303,1670],{"class":59},[34,15305,15306],{"class":36,"line":2191},[34,15307,2036],{"class":59},[14,15309,15310],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[25,15312,15314],{"className":605,"code":15313,"language":607,"meta":22,"style":22},"#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",[31,15315,15316,15322,15332,15338,15344,15348,15352,15357,15364,15369,15387,15391,15401,15405,15410,15426,15430,15440,15444,15449,15457,15461,15493,15497,15501,15509,15513,15518,15523,15537,15551,15560],{"__ignoreMap":22},[34,15317,15318,15320],{"class":36,"line":37},[34,15319,2413],{"class":112},[34,15321,2416],{"class":187},[34,15323,15324,15326,15328,15330],{"class":36,"line":44},[34,15325,2421],{"class":112},[34,15327,2424],{"class":112},[34,15329,2428],{"class":2427},[34,15331,1765],{"class":59},[34,15333,15334,15336],{"class":36,"line":50},[34,15335,2413],{"class":112},[34,15337,8213],{"class":187},[34,15339,15340,15342],{"class":36,"line":56},[34,15341,15158],{"class":112},[34,15343,8226],{"class":2427},[34,15345,15346],{"class":36,"line":107},[34,15347,2017],{"class":59},[34,15349,15350],{"class":36,"line":196},[34,15351,15180],{"class":112},[34,15353,15354],{"class":36,"line":202},[34,15355,15356],{"class":59},"    string m_name;\n",[34,15358,15359,15361],{"class":36,"line":207},[34,15360,2449],{"class":112},[34,15362,15363],{"class":59}," m_id;\n",[34,15365,15366],{"class":36,"line":222},[34,15367,15368],{"class":40},"    \u002F\u002F赋值姓名\n",[34,15370,15371,15374,15377,15379,15382,15385],{"class":36,"line":227},[34,15372,15373],{"class":112},"    void",[34,15375,15376],{"class":2427}," setName",[34,15378,617],{"class":59},[34,15380,15381],{"class":2427},"string",[34,15383,15384],{"class":5680}," name",[34,15386,623],{"class":59},[34,15388,15389],{"class":36,"line":232},[34,15390,2494],{"class":59},[34,15392,15393,15396,15398],{"class":36,"line":238},[34,15394,15395],{"class":59},"        m_name",[34,15397,447],{"class":112},[34,15399,15400],{"class":59},"name;\n",[34,15402,15403],{"class":36,"line":244},[34,15404,2651],{"class":59},[34,15406,15407],{"class":36,"line":250},[34,15408,15409],{"class":40},"    \u002F\u002F赋值学号\n",[34,15411,15412,15414,15417,15419,15421,15424],{"class":36,"line":256},[34,15413,15373],{"class":112},[34,15415,15416],{"class":2427}," setId",[34,15418,617],{"class":59},[34,15420,620],{"class":112},[34,15422,15423],{"class":5680}," id",[34,15425,623],{"class":59},[34,15427,15428],{"class":36,"line":261},[34,15429,2494],{"class":59},[34,15431,15432,15435,15437],{"class":36,"line":267},[34,15433,15434],{"class":59},"        m_id",[34,15436,447],{"class":112},[34,15438,15439],{"class":59},"id;\n",[34,15441,15442],{"class":36,"line":2138},[34,15443,2651],{"class":59},[34,15445,15446],{"class":36,"line":2143},[34,15447,15448],{"class":40},"    \u002F\u002F打印学生信息\n",[34,15450,15451,15453,15455],{"class":36,"line":2157},[34,15452,15373],{"class":112},[34,15454,10079],{"class":2427},[34,15456,2440],{"class":59},[34,15458,15459],{"class":36,"line":2162},[34,15460,2494],{"class":59},[34,15462,15463,15465,15467,15470,15472,15475,15477,15479,15481,15484,15486,15489,15491],{"class":36,"line":2191},[34,15464,3915],{"class":59},[34,15466,1648],{"class":112},[34,15468,15469],{"class":187},"\"姓名：\"",[34,15471,1648],{"class":112},[34,15473,15474],{"class":59},"m_name",[34,15476,1648],{"class":112},[34,15478,4823],{"class":187},[34,15480,1648],{"class":112},[34,15482,15483],{"class":187},"\"学号：\"",[34,15485,1648],{"class":112},[34,15487,15488],{"class":59},"m_id",[34,15490,1648],{"class":112},[34,15492,1670],{"class":59},[34,15494,15495],{"class":36,"line":2196},[34,15496,2651],{"class":59},[34,15498,15499],{"class":36,"line":2213},[34,15500,4459],{"class":59},[34,15502,15503,15505,15507],{"class":36,"line":2218},[34,15504,620],{"class":112},[34,15506,2437],{"class":2427},[34,15508,2440],{"class":59},[34,15510,15511],{"class":36,"line":2223},[34,15512,2017],{"class":59},[34,15514,15515],{"class":36,"line":2228},[34,15516,15517],{"class":40},"    \u002F\u002F实例化\n",[34,15519,15520],{"class":36,"line":2242},[34,15521,15522],{"class":59},"    Student s1;\n",[34,15524,15525,15528,15531,15533,15535],{"class":36,"line":2247},[34,15526,15527],{"class":59},"    s1.",[34,15529,15530],{"class":2427},"setName",[34,15532,617],{"class":59},[34,15534,8380],{"class":187},[34,15536,3183],{"class":59},[34,15538,15539,15541,15544,15546,15549],{"class":36,"line":3041},[34,15540,15527],{"class":59},[34,15542,15543],{"class":2427},"setId",[34,15545,617],{"class":59},[34,15547,15548],{"class":63},"123456",[34,15550,3183],{"class":59},[34,15552,15553,15555,15558],{"class":36,"line":3055},[34,15554,15527],{"class":59},[34,15556,15557],{"class":2427},"printInfo",[34,15559,6100],{"class":59},[34,15561,15562],{"class":36,"line":3063},[34,15563,2036],{"class":59},[14,15565,15566],{},"类中的属性和行为统称为成员",[14,15568,15569],{},"属性：成员属性(成员变量)",[14,15571,15572],{},"方法：成员函数(成员方法)",[14,15574,15575],{},[760,15576,15577],{},"封装意义二：",[14,15579,15580],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15582,15583],{},"访问权限有三种：",[567,15585,15586,15589,15592],{},[570,15587,15588],{},"public        公共权限",[570,15590,15591],{},"protected 保护权限",[570,15593,15594],{},"private      私有权限",[14,15596,15597],{},[760,15598,15599],{},"示例：",[25,15601,15603],{"className":10405,"code":15602,"language":10407,"meta":22,"style":22},"\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",[31,15604,15605,15610,15615,15620,15625,15629,15636,15640,15645,15649,15654,15658,15663,15668,15673,15677,15682,15687,15694,15698,15702,15710,15714,15725,15737,15749,15753,15757,15761,15769,15773,15778,15790,15798,15806,15810,15820,15824,15832],{"__ignoreMap":22},[34,15606,15607],{"class":36,"line":37},[34,15608,15609],{"class":40},"\u002F\u002F三种权限\n",[34,15611,15612],{"class":36,"line":44},[34,15613,15614],{"class":40},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[34,15616,15617],{"class":36,"line":50},[34,15618,15619],{"class":40},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[34,15621,15622],{"class":36,"line":56},[34,15623,15624],{"class":40},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[34,15626,15627],{"class":36,"line":107},[34,15628,2864],{"emptyLinePlaceholder":540},[34,15630,15631,15633],{"class":36,"line":196},[34,15632,15158],{"class":112},[34,15634,15635],{"class":2427}," Person\n",[34,15637,15638],{"class":36,"line":202},[34,15639,2017],{"class":59},[34,15641,15642],{"class":36,"line":207},[34,15643,15644],{"class":40},"    \u002F\u002F姓名  公共权限\n",[34,15646,15647],{"class":36,"line":222},[34,15648,15180],{"class":112},[34,15650,15651],{"class":36,"line":227},[34,15652,15653],{"class":59},"    string m_Name;\n",[34,15655,15656],{"class":36,"line":232},[34,15657,2864],{"emptyLinePlaceholder":540},[34,15659,15660],{"class":36,"line":238},[34,15661,15662],{"class":40},"    \u002F\u002F汽车  保护权限\n",[34,15664,15665],{"class":36,"line":244},[34,15666,15667],{"class":112},"protected:\n",[34,15669,15670],{"class":36,"line":250},[34,15671,15672],{"class":59},"    string m_Car;\n",[34,15674,15675],{"class":36,"line":256},[34,15676,2864],{"emptyLinePlaceholder":540},[34,15678,15679],{"class":36,"line":261},[34,15680,15681],{"class":40},"    \u002F\u002F银行卡密码  私有权限\n",[34,15683,15684],{"class":36,"line":267},[34,15685,15686],{"class":112},"private:\n",[34,15688,15689,15691],{"class":36,"line":2138},[34,15690,2449],{"class":112},[34,15692,15693],{"class":59}," m_Password;\n",[34,15695,15696],{"class":36,"line":2143},[34,15697,2864],{"emptyLinePlaceholder":540},[34,15699,15700],{"class":36,"line":2157},[34,15701,15180],{"class":112},[34,15703,15704,15706,15708],{"class":36,"line":2162},[34,15705,15373],{"class":112},[34,15707,11849],{"class":2427},[34,15709,2440],{"class":59},[34,15711,15712],{"class":36,"line":2191},[34,15713,2494],{"class":59},[34,15715,15716,15719,15721,15723],{"class":36,"line":2196},[34,15717,15718],{"class":59},"        m_Name ",[34,15720,447],{"class":112},[34,15722,9402],{"class":187},[34,15724,1765],{"class":59},[34,15726,15727,15730,15732,15735],{"class":36,"line":2213},[34,15728,15729],{"class":59},"        m_Car ",[34,15731,447],{"class":112},[34,15733,15734],{"class":187}," \"拖拉机\"",[34,15736,1765],{"class":59},[34,15738,15739,15742,15744,15747],{"class":36,"line":2218},[34,15740,15741],{"class":59},"        m_Password ",[34,15743,447],{"class":112},[34,15745,15746],{"class":63}," 123456",[34,15748,1765],{"class":59},[34,15750,15751],{"class":36,"line":2223},[34,15752,2651],{"class":59},[34,15754,15755],{"class":36,"line":2228},[34,15756,4459],{"class":59},[34,15758,15759],{"class":36,"line":2242},[34,15760,2864],{"emptyLinePlaceholder":540},[34,15762,15763,15765,15767],{"class":36,"line":2247},[34,15764,620],{"class":112},[34,15766,2437],{"class":2427},[34,15768,11317],{"class":59},[34,15770,15771],{"class":36,"line":3041},[34,15772,2864],{"emptyLinePlaceholder":540},[34,15774,15775],{"class":36,"line":3055},[34,15776,15777],{"class":59},"    Person p;\n",[34,15779,15780,15783,15785,15788],{"class":36,"line":3063},[34,15781,15782],{"class":59},"    p.m_Name ",[34,15784,447],{"class":112},[34,15786,15787],{"class":187}," \"李四\"",[34,15789,1765],{"class":59},[34,15791,15792,15795],{"class":36,"line":3068},[34,15793,15794],{"class":40},"    \u002F\u002Fp.m_Car = \"奔驰\";",[34,15796,15797],{"class":40},"  \u002F\u002F保护权限类外访问不到\n",[34,15799,15800,15803],{"class":36,"line":3074},[34,15801,15802],{"class":40},"    \u002F\u002Fp.m_Password = 123;",[34,15804,15805],{"class":40}," \u002F\u002F私有权限类外访问不到\n",[34,15807,15808],{"class":36,"line":3080},[34,15809,2864],{"emptyLinePlaceholder":540},[34,15811,15812,15814,15816,15818],{"class":36,"line":3085},[34,15813,2767],{"class":2427},[34,15815,617],{"class":59},[34,15817,2772],{"class":187},[34,15819,3183],{"class":59},[34,15821,15822],{"class":36,"line":8412},[34,15823,2864],{"emptyLinePlaceholder":540},[34,15825,15826,15828,15830],{"class":36,"line":8436},[34,15827,4554],{"class":112},[34,15829,4557],{"class":63},[34,15831,1765],{"class":59},[34,15833,15834],{"class":36,"line":8441},[34,15835,2036],{"class":59},[584,15837,15839],{"id":15838},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15841,15842,15843,15846,15847],{},"在C++中 struct和class唯一的",[760,15844,15845],{},"区别","就在于 ",[760,15848,15849],{},"默认的访问权限不同",[14,15851,15852],{},"区别：",[1611,15854,15855,15858],{},[570,15856,15857],{},"struct 默认权限为公共",[570,15859,15860],{},"class   默认权限为私有",[25,15862,15864],{"className":10405,"code":15863,"language":10407,"meta":22,"style":22},"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",[31,15865,15866,15873,15877,15887,15891,15895,15902,15906,15916,15920,15924,15932,15936,15941,15955,15959,15964,15978,15982,15992,15996,16004],{"__ignoreMap":22},[34,15867,15868,15870],{"class":36,"line":37},[34,15869,15158],{"class":112},[34,15871,15872],{"class":2427}," C1\n",[34,15874,15875],{"class":36,"line":44},[34,15876,2017],{"class":59},[34,15878,15879,15881,15884],{"class":36,"line":50},[34,15880,2449],{"class":112},[34,15882,15883],{"class":59},"  m_A;",[34,15885,15886],{"class":40}," \u002F\u002F默认是私有权限\n",[34,15888,15889],{"class":36,"line":56},[34,15890,4459],{"class":59},[34,15892,15893],{"class":36,"line":107},[34,15894,2864],{"emptyLinePlaceholder":540},[34,15896,15897,15899],{"class":36,"line":196},[34,15898,8223],{"class":112},[34,15900,15901],{"class":2427}," C2\n",[34,15903,15904],{"class":36,"line":202},[34,15905,2017],{"class":59},[34,15907,15908,15910,15913],{"class":36,"line":207},[34,15909,2449],{"class":112},[34,15911,15912],{"class":59}," m_A;",[34,15914,15915],{"class":40},"  \u002F\u002F默认是公共权限\n",[34,15917,15918],{"class":36,"line":222},[34,15919,4459],{"class":59},[34,15921,15922],{"class":36,"line":227},[34,15923,2864],{"emptyLinePlaceholder":540},[34,15925,15926,15928,15930],{"class":36,"line":232},[34,15927,620],{"class":112},[34,15929,2437],{"class":2427},[34,15931,11317],{"class":59},[34,15933,15934],{"class":36,"line":238},[34,15935,2864],{"emptyLinePlaceholder":540},[34,15937,15938],{"class":36,"line":244},[34,15939,15940],{"class":59},"    C1 c1;\n",[34,15942,15943,15946,15948,15950,15952],{"class":36,"line":250},[34,15944,15945],{"class":59},"    c1.m_A ",[34,15947,447],{"class":112},[34,15949,2502],{"class":63},[34,15951,670],{"class":59},[34,15953,15954],{"class":40}," \u002F\u002F错误，访问权限是私有\n",[34,15956,15957],{"class":36,"line":256},[34,15958,2864],{"emptyLinePlaceholder":540},[34,15960,15961],{"class":36,"line":261},[34,15962,15963],{"class":59},"    C2 c2;\n",[34,15965,15966,15969,15971,15973,15975],{"class":36,"line":267},[34,15967,15968],{"class":59},"    c2.m_A ",[34,15970,447],{"class":112},[34,15972,2502],{"class":63},[34,15974,670],{"class":59},[34,15976,15977],{"class":40}," \u002F\u002F正确，访问权限是公共\n",[34,15979,15980],{"class":36,"line":2138},[34,15981,2864],{"emptyLinePlaceholder":540},[34,15983,15984,15986,15988,15990],{"class":36,"line":2143},[34,15985,2767],{"class":2427},[34,15987,617],{"class":59},[34,15989,2772],{"class":187},[34,15991,3183],{"class":59},[34,15993,15994],{"class":36,"line":2157},[34,15995,2864],{"emptyLinePlaceholder":540},[34,15997,15998,16000,16002],{"class":36,"line":2162},[34,15999,4554],{"class":112},[34,16001,4557],{"class":63},[34,16003,1765],{"class":59},[34,16005,16006],{"class":36,"line":2191},[34,16007,2036],{"class":59},[584,16009,16011],{"id":16010},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,16013,16014],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,16016,16017],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,16019,16020],{},[760,16021,15599],{},[25,16023,16025],{"className":10405,"code":16024,"language":10407,"meta":22,"style":22},"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",[31,16026,16027,16037,16041,16045,16050,16064,16073,16077,16087,16091,16098,16102,16106,16110,16115,16124,16131,16135,16140,16156,16179,16192,16199,16203,16212,16216,16220,16225,16241,16251,16255,16259,16263,16271,16275,16285,16289,16297,16301,16305,16313,16317,16321,16326,16339,16362,16366,16371,16384,16406,16410,16415,16429,16437,16441,16451,16455,16463],{"__ignoreMap":22},[34,16028,16029,16031,16034],{"class":36,"line":37},[34,16030,15158],{"class":112},[34,16032,16033],{"class":2427}," Person",[34,16035,16036],{"class":59}," {\n",[34,16038,16039],{"class":36,"line":44},[34,16040,15180],{"class":112},[34,16042,16043],{"class":36,"line":50},[34,16044,2864],{"emptyLinePlaceholder":540},[34,16046,16047],{"class":36,"line":56},[34,16048,16049],{"class":40},"    \u002F\u002F姓名设置可读可写\n",[34,16051,16052,16054,16056,16058,16060,16062],{"class":36,"line":107},[34,16053,15373],{"class":112},[34,16055,15376],{"class":2427},[34,16057,617],{"class":59},[34,16059,15381],{"class":2427},[34,16061,15384],{"class":5680},[34,16063,12906],{"class":59},[34,16065,16066,16068,16070],{"class":36,"line":196},[34,16067,15718],{"class":59},[34,16069,447],{"class":112},[34,16071,16072],{"class":59}," name;\n",[34,16074,16075],{"class":36,"line":202},[34,16076,2651],{"class":59},[34,16078,16079,16082,16085],{"class":36,"line":207},[34,16080,16081],{"class":2427},"    string",[34,16083,16084],{"class":2427}," getName",[34,16086,2440],{"class":59},[34,16088,16089],{"class":36,"line":222},[34,16090,2494],{"class":59},[34,16092,16093,16095],{"class":36,"line":227},[34,16094,15216],{"class":112},[34,16096,16097],{"class":59}," m_Name;\n",[34,16099,16100],{"class":36,"line":232},[34,16101,2651],{"class":59},[34,16103,16104],{"class":36,"line":238},[34,16105,2864],{"emptyLinePlaceholder":540},[34,16107,16108],{"class":36,"line":244},[34,16109,2864],{"emptyLinePlaceholder":540},[34,16111,16112],{"class":36,"line":250},[34,16113,16114],{"class":40},"    \u002F\u002F获取年龄 \n",[34,16116,16117,16119,16122],{"class":36,"line":256},[34,16118,2449],{"class":112},[34,16120,16121],{"class":2427}," getAge",[34,16123,11317],{"class":59},[34,16125,16126,16128],{"class":36,"line":261},[34,16127,15216],{"class":112},[34,16129,16130],{"class":59}," m_Age;\n",[34,16132,16133],{"class":36,"line":267},[34,16134,2651],{"class":59},[34,16136,16137],{"class":36,"line":2138},[34,16138,16139],{"class":40},"    \u002F\u002F设置年龄\n",[34,16141,16142,16144,16147,16149,16151,16154],{"class":36,"line":2143},[34,16143,15373],{"class":112},[34,16145,16146],{"class":2427}," setAge",[34,16148,617],{"class":59},[34,16150,620],{"class":112},[34,16152,16153],{"class":5680}," age",[34,16155,12906],{"class":59},[34,16157,16158,16160,16163,16165,16167,16169,16172,16174,16177],{"class":36,"line":2157},[34,16159,2961],{"class":112},[34,16161,16162],{"class":59}," (age ",[34,16164,1515],{"class":112},[34,16166,4557],{"class":63},[34,16168,3719],{"class":112},[34,16170,16171],{"class":59}," age ",[34,16173,1564],{"class":112},[34,16175,16176],{"class":63}," 150",[34,16178,12906],{"class":59},[34,16180,16181,16183,16185,16188,16190],{"class":36,"line":2162},[34,16182,10183],{"class":59},[34,16184,1648],{"class":112},[34,16186,16187],{"class":187}," \"你个老妖精!\"",[34,16189,1916],{"class":112},[34,16191,9304],{"class":59},[34,16193,16194,16197],{"class":36,"line":2191},[34,16195,16196],{"class":112},"            return",[34,16198,1765],{"class":59},[34,16200,16201],{"class":36,"line":2196},[34,16202,2993],{"class":59},[34,16204,16205,16208,16210],{"class":36,"line":2213},[34,16206,16207],{"class":59},"        m_Age ",[34,16209,447],{"class":112},[34,16211,8261],{"class":59},[34,16213,16214],{"class":36,"line":2218},[34,16215,2651],{"class":59},[34,16217,16218],{"class":36,"line":2223},[34,16219,2864],{"emptyLinePlaceholder":540},[34,16221,16222],{"class":36,"line":2228},[34,16223,16224],{"class":40},"    \u002F\u002F情人设置为只写\n",[34,16226,16227,16229,16232,16234,16236,16239],{"class":36,"line":2242},[34,16228,15373],{"class":112},[34,16230,16231],{"class":2427}," setLover",[34,16233,617],{"class":59},[34,16235,15381],{"class":2427},[34,16237,16238],{"class":5680}," lover",[34,16240,12906],{"class":59},[34,16242,16243,16246,16248],{"class":36,"line":2247},[34,16244,16245],{"class":59},"        m_Lover ",[34,16247,447],{"class":112},[34,16249,16250],{"class":59}," lover;\n",[34,16252,16253],{"class":36,"line":3041},[34,16254,2651],{"class":59},[34,16256,16257],{"class":36,"line":3055},[34,16258,2864],{"emptyLinePlaceholder":540},[34,16260,16261],{"class":36,"line":3063},[34,16262,15686],{"class":112},[34,16264,16265,16268],{"class":36,"line":3068},[34,16266,16267],{"class":59},"    string m_Name;",[34,16269,16270],{"class":40}," \u002F\u002F可读可写  姓名\n",[34,16272,16273],{"class":36,"line":3074},[34,16274,13674],{"class":59},[34,16276,16277,16279,16282],{"class":36,"line":3080},[34,16278,2449],{"class":112},[34,16280,16281],{"class":59}," m_Age;",[34,16283,16284],{"class":40}," \u002F\u002F只读  年龄\n",[34,16286,16287],{"class":36,"line":3085},[34,16288,2864],{"emptyLinePlaceholder":540},[34,16290,16291,16294],{"class":36,"line":8412},[34,16292,16293],{"class":59},"    string m_Lover;",[34,16295,16296],{"class":40}," \u002F\u002F只写  情人\n",[34,16298,16299],{"class":36,"line":8436},[34,16300,4459],{"class":59},[34,16302,16303],{"class":36,"line":8441},[34,16304,2864],{"emptyLinePlaceholder":540},[34,16306,16307,16309,16311],{"class":36,"line":8447},[34,16308,620],{"class":112},[34,16310,2437],{"class":2427},[34,16312,11317],{"class":59},[34,16314,16315],{"class":36,"line":8474},[34,16316,2864],{"emptyLinePlaceholder":540},[34,16318,16319],{"class":36,"line":8479},[34,16320,15777],{"class":59},[34,16322,16323],{"class":36,"line":8485},[34,16324,16325],{"class":40},"    \u002F\u002F姓名设置\n",[34,16327,16328,16331,16333,16335,16337],{"class":36,"line":8497},[34,16329,16330],{"class":59},"    p.",[34,16332,15530],{"class":2427},[34,16334,617],{"class":59},[34,16336,8380],{"class":187},[34,16338,3183],{"class":59},[34,16340,16341,16343,16345,16348,16350,16353,16356,16358,16360],{"class":36,"line":8509},[34,16342,6993],{"class":59},[34,16344,1648],{"class":112},[34,16346,16347],{"class":187}," \"姓名： \"",[34,16349,1916],{"class":112},[34,16351,16352],{"class":59}," p.",[34,16354,16355],{"class":2427},"getName",[34,16357,13514],{"class":59},[34,16359,1648],{"class":112},[34,16361,9304],{"class":59},[34,16363,16364],{"class":36,"line":8521},[34,16365,2864],{"emptyLinePlaceholder":540},[34,16367,16368],{"class":36,"line":10180},[34,16369,16370],{"class":40},"    \u002F\u002F年龄设置\n",[34,16372,16373,16375,16378,16380,16382],{"class":36,"line":10205},[34,16374,16330],{"class":59},[34,16376,16377],{"class":2427},"setAge",[34,16379,617],{"class":59},[34,16381,1262],{"class":63},[34,16383,3183],{"class":59},[34,16385,16386,16388,16390,16393,16395,16397,16400,16402,16404],{"class":36,"line":10228},[34,16387,6993],{"class":59},[34,16389,1648],{"class":112},[34,16391,16392],{"class":187}," \"年龄： \"",[34,16394,1916],{"class":112},[34,16396,16352],{"class":59},[34,16398,16399],{"class":2427},"getAge",[34,16401,13514],{"class":59},[34,16403,1648],{"class":112},[34,16405,9304],{"class":59},[34,16407,16408],{"class":36,"line":10252},[34,16409,2864],{"emptyLinePlaceholder":540},[34,16411,16412],{"class":36,"line":10257},[34,16413,16414],{"class":40},"    \u002F\u002F情人设置\n",[34,16416,16417,16419,16422,16424,16427],{"class":36,"line":10262},[34,16418,16330],{"class":59},[34,16420,16421],{"class":2427},"setLover",[34,16423,617],{"class":59},[34,16425,16426],{"class":187},"\"苍井\"",[34,16428,3183],{"class":59},[34,16430,16431,16434],{"class":36,"line":10267},[34,16432,16433],{"class":40},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[34,16435,16436],{"class":40},"  \u002F\u002F只写属性，不可以读取\n",[34,16438,16439],{"class":36,"line":10276},[34,16440,2864],{"emptyLinePlaceholder":540},[34,16442,16443,16445,16447,16449],{"class":36,"line":10281},[34,16444,2767],{"class":2427},[34,16446,617],{"class":59},[34,16448,2772],{"class":187},[34,16450,3183],{"class":59},[34,16452,16453],{"class":36,"line":10287},[34,16454,2864],{"emptyLinePlaceholder":540},[34,16456,16457,16459,16461],{"class":36,"line":10308},[34,16458,4554],{"class":112},[34,16460,4557],{"class":63},[34,16462,1765],{"class":59},[34,16464,16465],{"class":36,"line":10314},[34,16466,2036],{"class":59},[584,16468,16470],{"id":16469},"_814封装案例","8.1.4封装案例",[567,16472,16473],{},[570,16474,16475,16478],{},[760,16476,16477],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1611,16480,16481,16484],{},[570,16482,16483],{},"求出立方体的面积和体积",[570,16485,16486],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[25,16488,16490],{"className":605,"code":16489,"language":607,"meta":22,"style":22},"#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",[31,16491,16492,16498,16508,16515,16519,16523,16528,16558,16562,16572,16582,16592,16596,16605,16609,16645,16649,16658,16662,16678,16682,16687,16696,16700,16707,16711,16720,16724,16731,16735,16744,16748,16755,16759,16764,16781,16785,16831,16835,16844,16848,16852,16856,16865,16869,16873,16878,16882,16888,16894,16900,16904,16908,16913,16935,16939,16993,16997,17005,17009,17014,17019,17032,17039,17055,17066,17072,17095,17101,17124,17138,17158,17164,17175,17198,17220,17225,17231,17245,17258,17263,17277,17282,17288,17293,17307,17312,17317,17331,17343,17348,17361,17366,17371,17376,17389,17394],{"__ignoreMap":22},[34,16493,16494,16496],{"class":36,"line":37},[34,16495,2413],{"class":112},[34,16497,2416],{"class":187},[34,16499,16500,16502,16504,16506],{"class":36,"line":44},[34,16501,2421],{"class":112},[34,16503,2424],{"class":112},[34,16505,2428],{"class":2427},[34,16507,1765],{"class":59},[34,16509,16510,16512],{"class":36,"line":50},[34,16511,15158],{"class":112},[34,16513,16514],{"class":2427}," Cube\n",[34,16516,16517],{"class":36,"line":56},[34,16518,2017],{"class":59},[34,16520,16521],{"class":36,"line":107},[34,16522,15180],{"class":112},[34,16524,16525],{"class":36,"line":196},[34,16526,16527],{"class":40},"    \u002F\u002F输入长宽高\n",[34,16529,16530,16532,16535,16537,16539,16542,16544,16546,16549,16551,16553,16556],{"class":36,"line":202},[34,16531,15373],{"class":112},[34,16533,16534],{"class":2427}," setLwh",[34,16536,617],{"class":59},[34,16538,620],{"class":112},[34,16540,16541],{"class":5680}," l",[34,16543,67],{"class":59},[34,16545,620],{"class":112},[34,16547,16548],{"class":5680}," w",[34,16550,67],{"class":59},[34,16552,620],{"class":112},[34,16554,16555],{"class":5680}," h",[34,16557,623],{"class":59},[34,16559,16560],{"class":36,"line":207},[34,16561,2494],{"class":59},[34,16563,16564,16567,16569],{"class":36,"line":222},[34,16565,16566],{"class":59},"        m_L",[34,16568,447],{"class":112},[34,16570,16571],{"class":59},"l;\n",[34,16573,16574,16577,16579],{"class":36,"line":227},[34,16575,16576],{"class":59},"        m_W",[34,16578,447],{"class":112},[34,16580,16581],{"class":59},"w;\n",[34,16583,16584,16587,16589],{"class":36,"line":232},[34,16585,16586],{"class":59},"        m_H",[34,16588,447],{"class":112},[34,16590,16591],{"class":59},"h;\n",[34,16593,16594],{"class":36,"line":238},[34,16595,2651],{"class":59},[34,16597,16598,16600,16603],{"class":36,"line":244},[34,16599,2449],{"class":112},[34,16601,16602],{"class":2427}," mianji",[34,16604,2440],{"class":59},[34,16606,16607],{"class":36,"line":250},[34,16608,2494],{"class":59},[34,16610,16611,16613,16615,16617,16620,16622,16625,16627,16630,16632,16635,16637,16640,16642],{"class":36,"line":256},[34,16612,15216],{"class":112},[34,16614,15219],{"class":63},[34,16616,1062],{"class":112},[34,16618,16619],{"class":59},"(m_L",[34,16621,1062],{"class":112},[34,16623,16624],{"class":59},"m_W ",[34,16626,1088],{"class":112},[34,16628,16629],{"class":59}," m_L",[34,16631,1062],{"class":112},[34,16633,16634],{"class":59},"m_H ",[34,16636,1088],{"class":112},[34,16638,16639],{"class":59}," m_W",[34,16641,1062],{"class":112},[34,16643,16644],{"class":59},"m_H);\n",[34,16646,16647],{"class":36,"line":261},[34,16648,2651],{"class":59},[34,16650,16651,16653,16656],{"class":36,"line":267},[34,16652,2449],{"class":112},[34,16654,16655],{"class":2427}," tiji",[34,16657,2440],{"class":59},[34,16659,16660],{"class":36,"line":2138},[34,16661,2494],{"class":59},[34,16663,16664,16666,16668,16670,16673,16675],{"class":36,"line":2143},[34,16665,15216],{"class":112},[34,16667,16629],{"class":59},[34,16669,1062],{"class":112},[34,16671,16672],{"class":59},"m_W",[34,16674,1062],{"class":112},[34,16676,16677],{"class":59},"m_H;\n",[34,16679,16680],{"class":36,"line":2157},[34,16681,2651],{"class":59},[34,16683,16684],{"class":36,"line":2162},[34,16685,16686],{"class":40},"    \u002F\u002F获取长宽高\n",[34,16688,16689,16691,16694],{"class":36,"line":2191},[34,16690,2449],{"class":112},[34,16692,16693],{"class":2427}," getLength",[34,16695,2440],{"class":59},[34,16697,16698],{"class":36,"line":2196},[34,16699,2494],{"class":59},[34,16701,16702,16704],{"class":36,"line":2213},[34,16703,15216],{"class":112},[34,16705,16706],{"class":59}," m_L;\n",[34,16708,16709],{"class":36,"line":2218},[34,16710,2651],{"class":59},[34,16712,16713,16715,16718],{"class":36,"line":2223},[34,16714,2449],{"class":112},[34,16716,16717],{"class":2427}," getWidth",[34,16719,2440],{"class":59},[34,16721,16722],{"class":36,"line":2228},[34,16723,2494],{"class":59},[34,16725,16726,16728],{"class":36,"line":2242},[34,16727,15216],{"class":112},[34,16729,16730],{"class":59}," m_W;\n",[34,16732,16733],{"class":36,"line":2247},[34,16734,2651],{"class":59},[34,16736,16737,16739,16742],{"class":36,"line":3041},[34,16738,2449],{"class":112},[34,16740,16741],{"class":2427}," getHeight",[34,16743,2440],{"class":59},[34,16745,16746],{"class":36,"line":3055},[34,16747,2494],{"class":59},[34,16749,16750,16752],{"class":36,"line":3063},[34,16751,15216],{"class":112},[34,16753,16754],{"class":59}," m_H;\n",[34,16756,16757],{"class":36,"line":3068},[34,16758,2651],{"class":59},[34,16760,16761],{"class":36,"line":3074},[34,16762,16763],{"class":40},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[34,16765,16766,16769,16772,16774,16777,16779],{"class":36,"line":3080},[34,16767,16768],{"class":112},"    bool",[34,16770,16771],{"class":2427}," isEqual",[34,16773,617],{"class":59},[34,16775,16776],{"class":2427},"Cube",[34,16778,3313],{"class":5680},[34,16780,623],{"class":59},[34,16782,16783],{"class":36,"line":3085},[34,16784,2494],{"class":59},[34,16786,16787,16789,16792,16795,16797,16799,16802,16804,16807,16810,16812,16814,16817,16819,16821,16824,16826,16828],{"class":36,"line":8412},[34,16788,2961],{"class":112},[34,16790,16791],{"class":59}," (c.",[34,16793,16794],{"class":2427},"getLength",[34,16796,13514],{"class":59},[34,16798,3413],{"class":112},[34,16800,16801],{"class":59}," m_L ",[34,16803,2179],{"class":112},[34,16805,16806],{"class":59}," c.",[34,16808,16809],{"class":2427},"getWidth",[34,16811,13514],{"class":59},[34,16813,3413],{"class":112},[34,16815,16816],{"class":59}," m_W ",[34,16818,2179],{"class":112},[34,16820,16806],{"class":59},[34,16822,16823],{"class":2427},"getHeight",[34,16825,13514],{"class":59},[34,16827,3413],{"class":112},[34,16829,16830],{"class":59}," m_H)\n",[34,16832,16833],{"class":36,"line":8436},[34,16834,2974],{"class":59},[34,16836,16837,16839,16842],{"class":36,"line":8441},[34,16838,16196],{"class":112},[34,16840,16841],{"class":63}," true",[34,16843,1765],{"class":59},[34,16845,16846],{"class":36,"line":8447},[34,16847,2993],{"class":59},[34,16849,16850],{"class":36,"line":8474},[34,16851,3034],{"class":112},[34,16853,16854],{"class":36,"line":8479},[34,16855,2974],{"class":59},[34,16857,16858,16860,16863],{"class":36,"line":8485},[34,16859,16196],{"class":112},[34,16861,16862],{"class":63}," false",[34,16864,1765],{"class":59},[34,16866,16867],{"class":36,"line":8497},[34,16868,2993],{"class":59},[34,16870,16871],{"class":36,"line":8509},[34,16872,2651],{"class":59},[34,16874,16875],{"class":36,"line":8521},[34,16876,16877],{"class":40},"    \u002F\u002F私有属性\n",[34,16879,16880],{"class":36,"line":10180},[34,16881,15686],{"class":112},[34,16883,16884,16886],{"class":36,"line":10205},[34,16885,2449],{"class":112},[34,16887,16706],{"class":59},[34,16889,16890,16892],{"class":36,"line":10228},[34,16891,2449],{"class":112},[34,16893,16730],{"class":59},[34,16895,16896,16898],{"class":36,"line":10252},[34,16897,2449],{"class":112},[34,16899,16754],{"class":59},[34,16901,16902],{"class":36,"line":10257},[34,16903,2864],{"emptyLinePlaceholder":540},[34,16905,16906],{"class":36,"line":10262},[34,16907,4459],{"class":59},[34,16909,16910],{"class":36,"line":10267},[34,16911,16912],{"class":40},"\u002F\u002F全局函数判断两个立方体是否相等\n",[34,16914,16915,16917,16919,16921,16923,16926,16928,16930,16933],{"class":36,"line":10276},[34,16916,1826],{"class":112},[34,16918,16771],{"class":2427},[34,16920,617],{"class":59},[34,16922,16776],{"class":2427},[34,16924,16925],{"class":5680}," c1",[34,16927,67],{"class":59},[34,16929,16776],{"class":2427},[34,16931,16932],{"class":5680}," c2",[34,16934,623],{"class":59},[34,16936,16937],{"class":36,"line":10281},[34,16938,2017],{"class":59},[34,16940,16941,16943,16946,16948,16950,16952,16955,16957,16960,16962,16964,16966,16968,16970,16972,16974,16976,16978,16980,16982,16984,16986,16988,16990],{"class":36,"line":10287},[34,16942,4554],{"class":112},[34,16944,16945],{"class":59}," (c1.",[34,16947,16794],{"class":2427},[34,16949,13514],{"class":59},[34,16951,3413],{"class":112},[34,16953,16954],{"class":59}," c2.",[34,16956,16794],{"class":2427},[34,16958,16959],{"class":59},"()) ",[34,16961,2179],{"class":112},[34,16963,16945],{"class":59},[34,16965,16809],{"class":2427},[34,16967,13514],{"class":59},[34,16969,3413],{"class":112},[34,16971,16954],{"class":59},[34,16973,16809],{"class":2427},[34,16975,16959],{"class":59},[34,16977,2179],{"class":112},[34,16979,16945],{"class":59},[34,16981,16823],{"class":2427},[34,16983,13514],{"class":59},[34,16985,3413],{"class":112},[34,16987,16954],{"class":59},[34,16989,16823],{"class":2427},[34,16991,16992],{"class":59},"());\n",[34,16994,16995],{"class":36,"line":10308},[34,16996,2036],{"class":59},[34,16998,16999,17001,17003],{"class":36,"line":10314},[34,17000,620],{"class":112},[34,17002,2437],{"class":2427},[34,17004,2440],{"class":59},[34,17006,17007],{"class":36,"line":10328},[34,17008,2017],{"class":59},[34,17010,17011],{"class":36,"line":10334},[34,17012,17013],{"class":59},"    Cube c1;\n",[34,17015,17016],{"class":36,"line":10361},[34,17017,17018],{"class":40},"    \u002F\u002F输入立方体的长宽高\n",[34,17020,17021,17023,17025,17028,17030],{"class":36,"line":10370},[34,17022,2022],{"class":59},[34,17024,1648],{"class":112},[34,17026,17027],{"class":187},"\"请输入第一个立方体的长、宽、高：\"",[34,17029,1648],{"class":112},[34,17031,1670],{"class":59},[34,17033,17034,17036],{"class":36,"line":10376},[34,17035,2449],{"class":112},[34,17037,17038],{"class":59}," l,w,h,l1,w1,h1;\n",[34,17040,17041,17043,17045,17047,17049,17051,17053],{"class":36,"line":10384},[34,17042,2476],{"class":59},[34,17044,1901],{"class":112},[34,17046,1125],{"class":59},[34,17048,1901],{"class":112},[34,17050,1401],{"class":59},[34,17052,1901],{"class":112},[34,17054,16591],{"class":59},[34,17056,17057,17060,17063],{"class":36,"line":10389},[34,17058,17059],{"class":59},"    c1.",[34,17061,17062],{"class":2427},"setLwh",[34,17064,17065],{"class":59},"(l,w,h);\n",[34,17067,17069],{"class":36,"line":17068},66,[34,17070,17071],{"class":40},"    \u002F\u002F面积\n",[34,17073,17075,17077,17079,17082,17084,17086,17089,17091,17093],{"class":36,"line":17074},67,[34,17076,2022],{"class":59},[34,17078,1648],{"class":112},[34,17080,17081],{"class":187},"\"立方体的表面积为：\"",[34,17083,1648],{"class":112},[34,17085,15294],{"class":59},[34,17087,17088],{"class":2427},"mianji",[34,17090,2891],{"class":59},[34,17092,1648],{"class":112},[34,17094,1670],{"class":59},[34,17096,17098],{"class":36,"line":17097},68,[34,17099,17100],{"class":40},"    \u002F\u002F体积\n",[34,17102,17104,17106,17108,17111,17113,17115,17118,17120,17122],{"class":36,"line":17103},69,[34,17105,2022],{"class":59},[34,17107,1648],{"class":112},[34,17109,17110],{"class":187},"\"立方体的体积为：\"",[34,17112,1648],{"class":112},[34,17114,15294],{"class":59},[34,17116,17117],{"class":2427},"tiji",[34,17119,2891],{"class":59},[34,17121,1648],{"class":112},[34,17123,1670],{"class":59},[34,17125,17127,17129,17131,17134,17136],{"class":36,"line":17126},70,[34,17128,2022],{"class":59},[34,17130,1648],{"class":112},[34,17132,17133],{"class":187},"\"请输入第二个立方体的长、宽、高：\"",[34,17135,1648],{"class":112},[34,17137,1670],{"class":59},[34,17139,17141,17143,17145,17148,17150,17153,17155],{"class":36,"line":17140},71,[34,17142,2476],{"class":59},[34,17144,1901],{"class":112},[34,17146,17147],{"class":59},"l1",[34,17149,1901],{"class":112},[34,17151,17152],{"class":59},"w1",[34,17154,1901],{"class":112},[34,17156,17157],{"class":59},"h1;\n",[34,17159,17161],{"class":36,"line":17160},72,[34,17162,17163],{"class":59},"    Cube c2;\n",[34,17165,17167,17170,17172],{"class":36,"line":17166},73,[34,17168,17169],{"class":59},"    c2.",[34,17171,17062],{"class":2427},[34,17173,17174],{"class":59},"(l1,w1,h1);\n",[34,17176,17178,17180,17182,17185,17187,17190,17192,17194,17196],{"class":36,"line":17177},74,[34,17179,2022],{"class":59},[34,17181,1648],{"class":112},[34,17183,17184],{"class":187},"\"第二个立方体的表面积为：\"",[34,17186,1648],{"class":112},[34,17188,17189],{"class":59},"c2.",[34,17191,17088],{"class":2427},[34,17193,2891],{"class":59},[34,17195,1648],{"class":112},[34,17197,1670],{"class":59},[34,17199,17201,17203,17205,17208,17210,17212,17214,17216,17218],{"class":36,"line":17200},75,[34,17202,2022],{"class":59},[34,17204,1648],{"class":112},[34,17206,17207],{"class":187},"\"第二个立方体的体积为：\"",[34,17209,1648],{"class":112},[34,17211,17189],{"class":59},[34,17213,17117],{"class":2427},[34,17215,2891],{"class":59},[34,17217,1648],{"class":112},[34,17219,1670],{"class":59},[34,17221,17223],{"class":36,"line":17222},76,[34,17224,2864],{"emptyLinePlaceholder":540},[34,17226,17228],{"class":36,"line":17227},77,[34,17229,17230],{"class":40},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[34,17232,17234,17236,17238,17241,17243],{"class":36,"line":17233},78,[34,17235,2022],{"class":59},[34,17237,1648],{"class":112},[34,17239,17240],{"class":187},"\"内部函数判断结果：\"",[34,17242,1648],{"class":112},[34,17244,1670],{"class":59},[34,17246,17248,17250,17252,17255],{"class":36,"line":17247},79,[34,17249,3565],{"class":112},[34,17251,16945],{"class":59},[34,17253,17254],{"class":2427},"isEqual",[34,17256,17257],{"class":59},"(c2))\n",[34,17259,17261],{"class":36,"line":17260},80,[34,17262,2494],{"class":59},[34,17264,17266,17268,17270,17273,17275],{"class":36,"line":17265},81,[34,17267,3915],{"class":59},[34,17269,1648],{"class":112},[34,17271,17272],{"class":187},"\"两个立方体相等\"",[34,17274,1648],{"class":112},[34,17276,1670],{"class":59},[34,17278,17280],{"class":36,"line":17279},82,[34,17281,2651],{"class":59},[34,17283,17285],{"class":36,"line":17284},83,[34,17286,17287],{"class":112},"    else\n",[34,17289,17291],{"class":36,"line":17290},84,[34,17292,2494],{"class":59},[34,17294,17296,17298,17300,17303,17305],{"class":36,"line":17295},85,[34,17297,3915],{"class":59},[34,17299,1648],{"class":112},[34,17301,17302],{"class":187},"\"两个立方体不相等\"",[34,17304,1648],{"class":112},[34,17306,1670],{"class":59},[34,17308,17310],{"class":36,"line":17309},86,[34,17311,2651],{"class":59},[34,17313,17315],{"class":36,"line":17314},87,[34,17316,2864],{"emptyLinePlaceholder":540},[34,17318,17320,17322,17324,17327,17329],{"class":36,"line":17319},88,[34,17321,2022],{"class":59},[34,17323,1648],{"class":112},[34,17325,17326],{"class":187},"\"全局函数判断结果：\"",[34,17328,1648],{"class":112},[34,17330,1670],{"class":59},[34,17332,17334,17336,17338,17340],{"class":36,"line":17333},89,[34,17335,3565],{"class":112},[34,17337,2122],{"class":59},[34,17339,17254],{"class":2427},[34,17341,17342],{"class":59},"(c1, c2))\n",[34,17344,17346],{"class":36,"line":17345},90,[34,17347,2494],{"class":59},[34,17349,17351,17353,17355,17357,17359],{"class":36,"line":17350},91,[34,17352,3915],{"class":59},[34,17354,1648],{"class":112},[34,17356,17272],{"class":187},[34,17358,1648],{"class":112},[34,17360,1670],{"class":59},[34,17362,17364],{"class":36,"line":17363},92,[34,17365,2651],{"class":59},[34,17367,17369],{"class":36,"line":17368},93,[34,17370,17287],{"class":112},[34,17372,17374],{"class":36,"line":17373},94,[34,17375,2494],{"class":59},[34,17377,17379,17381,17383,17385,17387],{"class":36,"line":17378},95,[34,17380,3915],{"class":59},[34,17382,1648],{"class":112},[34,17384,17302],{"class":187},[34,17386,1648],{"class":112},[34,17388,1670],{"class":59},[34,17390,17392],{"class":36,"line":17391},96,[34,17393,2651],{"class":59},[34,17395,17397],{"class":36,"line":17396},97,[34,17398,2036],{"class":59},[567,17400,17401],{"start":44},[570,17402,17403],{},[760,17404,17405],{},"练习案例2：点和圆的关系",[1611,17407,17408],{},[570,17409,17410],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[25,17412,17414],{"className":605,"code":17413,"language":607,"meta":22,"style":22},"#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",[31,17415,17416,17422,17432,17439,17446,17450,17454,17459,17493,17498,17514,17528,17532,17536,17543,17550,17554,17560,17564,17568,17572,17594,17617,17622,17636,17651,17655,17659,17665,17670,17675,17679,17705,17709,17739,17767,17795,17812,17816,17829,17833,17837,17841,17854,17858,17862,17870,17874,17878,17882,17887,17891,17902,17909,17918,17928,17939,17946,17959,17970,17980,17991,17998,18012,18017,18027,18035],{"__ignoreMap":22},[34,17417,17418,17420],{"class":36,"line":37},[34,17419,2413],{"class":112},[34,17421,2416],{"class":187},[34,17423,17424,17426,17428,17430],{"class":36,"line":44},[34,17425,2421],{"class":112},[34,17427,2424],{"class":112},[34,17429,2428],{"class":2427},[34,17431,1765],{"class":59},[34,17433,17434,17436],{"class":36,"line":50},[34,17435,2413],{"class":112},[34,17437,17438],{"class":187},"\u003Ccmath>\n",[34,17440,17441,17443],{"class":36,"line":56},[34,17442,15158],{"class":112},[34,17444,17445],{"class":2427}," Point\n",[34,17447,17448],{"class":36,"line":107},[34,17449,2017],{"class":59},[34,17451,17452],{"class":36,"line":196},[34,17453,15180],{"class":112},[34,17455,17456],{"class":36,"line":202},[34,17457,17458],{"class":40},"    \u002F\u002F赋值\n",[34,17460,17461,17463,17466,17468,17470,17473,17475,17477,17480,17483,17485,17488,17490],{"class":36,"line":207},[34,17462,15373],{"class":112},[34,17464,17465],{"class":2427}," setPoint",[34,17467,617],{"class":59},[34,17469,14501],{"class":112},[34,17471,17472],{"class":5680}," x",[34,17474,12899],{"class":59},[34,17476,14501],{"class":112},[34,17478,17479],{"class":5680}," y",[34,17481,17482],{"class":59},") { m_x ",[34,17484,447],{"class":112},[34,17486,17487],{"class":59}," x; m_y ",[34,17489,447],{"class":112},[34,17491,17492],{"class":59}," y; }\n",[34,17494,17495],{"class":36,"line":222},[34,17496,17497],{"class":40},"    \u002F\u002F获取坐标\n",[34,17499,17500,17502,17505,17508,17511],{"class":36,"line":227},[34,17501,15202],{"class":112},[34,17503,17504],{"class":2427}," getX",[34,17506,17507],{"class":59},"() { ",[34,17509,17510],{"class":112},"return",[34,17512,17513],{"class":59}," m_x; }\n",[34,17515,17516,17518,17521,17523,17525],{"class":36,"line":232},[34,17517,15202],{"class":112},[34,17519,17520],{"class":2427}," getY",[34,17522,17507],{"class":59},[34,17524,17510],{"class":112},[34,17526,17527],{"class":59}," m_y; }\n",[34,17529,17530],{"class":36,"line":238},[34,17531,2864],{"emptyLinePlaceholder":540},[34,17533,17534],{"class":36,"line":244},[34,17535,15686],{"class":112},[34,17537,17538,17540],{"class":36,"line":250},[34,17539,15202],{"class":112},[34,17541,17542],{"class":59}," m_x;\n",[34,17544,17545,17547],{"class":36,"line":256},[34,17546,15202],{"class":112},[34,17548,17549],{"class":59}," m_y;\n",[34,17551,17552],{"class":36,"line":261},[34,17553,4459],{"class":59},[34,17555,17556,17558],{"class":36,"line":267},[34,17557,15158],{"class":112},[34,17559,15161],{"class":2427},[34,17561,17562],{"class":36,"line":2138},[34,17563,2017],{"class":59},[34,17565,17566],{"class":36,"line":2143},[34,17567,15180],{"class":112},[34,17569,17570],{"class":36,"line":2157},[34,17571,17458],{"class":40},[34,17573,17574,17576,17579,17581,17583,17586,17589,17591],{"class":36,"line":2162},[34,17575,15373],{"class":112},[34,17577,17578],{"class":2427}," setRadius",[34,17580,617],{"class":59},[34,17582,14501],{"class":112},[34,17584,17585],{"class":5680}," r",[34,17587,17588],{"class":59},") { m_r ",[34,17590,447],{"class":112},[34,17592,17593],{"class":59}," r; }\n",[34,17595,17596,17598,17601,17603,17606,17609,17612,17614],{"class":36,"line":2191},[34,17597,15373],{"class":112},[34,17599,17600],{"class":2427}," setCenter",[34,17602,617],{"class":59},[34,17604,17605],{"class":2427},"Point",[34,17607,17608],{"class":5680}," center",[34,17610,17611],{"class":59},") { m_center ",[34,17613,447],{"class":112},[34,17615,17616],{"class":59}," center; }\n",[34,17618,17619],{"class":36,"line":2196},[34,17620,17621],{"class":40},"    \u002F\u002F获取属性\n",[34,17623,17624,17626,17629,17631,17633],{"class":36,"line":2213},[34,17625,15202],{"class":112},[34,17627,17628],{"class":2427}," getRadius",[34,17630,17507],{"class":59},[34,17632,17510],{"class":112},[34,17634,17635],{"class":59}," m_r; }\n",[34,17637,17638,17641,17644,17646,17648],{"class":36,"line":2218},[34,17639,17640],{"class":2427},"    Point",[34,17642,17643],{"class":2427}," getCenter",[34,17645,17507],{"class":59},[34,17647,17510],{"class":112},[34,17649,17650],{"class":59}," m_center; }\n",[34,17652,17653],{"class":36,"line":2223},[34,17654,2864],{"emptyLinePlaceholder":540},[34,17656,17657],{"class":36,"line":2228},[34,17658,15686],{"class":112},[34,17660,17661,17663],{"class":36,"line":2242},[34,17662,15202],{"class":112},[34,17664,15192],{"class":59},[34,17666,17667],{"class":36,"line":2247},[34,17668,17669],{"class":40},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[34,17671,17672],{"class":36,"line":3041},[34,17673,17674],{"class":59},"    Point m_center;\n",[34,17676,17677],{"class":36,"line":3055},[34,17678,4459],{"class":59},[34,17680,17681,17683,17686,17688,17691,17693,17695,17697,17699,17701,17703],{"class":36,"line":3063},[34,17682,5828],{"class":112},[34,17684,17685],{"class":2427}," isInCircle",[34,17687,617],{"class":59},[34,17689,17690],{"class":2427},"Circle",[34,17692,11048],{"class":112},[34,17694,897],{"class":5680},[34,17696,67],{"class":59},[34,17698,17605],{"class":2427},[34,17700,11048],{"class":112},[34,17702,14],{"class":5680},[34,17704,623],{"class":59},[34,17706,17707],{"class":36,"line":3068},[34,17708,2017],{"class":59},[34,17710,17711,17713,17716,17718,17720,17723,17726,17729,17731,17733,17735,17737],{"class":36,"line":3074},[34,17712,15202],{"class":112},[34,17714,17715],{"class":59}," dx ",[34,17717,447],{"class":112},[34,17719,16806],{"class":59},[34,17721,17722],{"class":2427},"getCenter",[34,17724,17725],{"class":59},"().",[34,17727,17728],{"class":2427},"getX",[34,17730,13514],{"class":59},[34,17732,113],{"class":112},[34,17734,16352],{"class":59},[34,17736,17728],{"class":2427},[34,17738,6100],{"class":59},[34,17740,17741,17743,17746,17748,17750,17752,17754,17757,17759,17761,17763,17765],{"class":36,"line":3080},[34,17742,15202],{"class":112},[34,17744,17745],{"class":59}," dy ",[34,17747,447],{"class":112},[34,17749,16806],{"class":59},[34,17751,17722],{"class":2427},[34,17753,17725],{"class":59},[34,17755,17756],{"class":2427},"getY",[34,17758,13514],{"class":59},[34,17760,113],{"class":112},[34,17762,16352],{"class":59},[34,17764,17756],{"class":2427},[34,17766,6100],{"class":59},[34,17768,17769,17771,17774,17776,17779,17782,17784,17786,17788,17790,17792],{"class":36,"line":3085},[34,17770,15202],{"class":112},[34,17772,17773],{"class":59}," distance ",[34,17775,447],{"class":112},[34,17777,17778],{"class":2427}," sqrt",[34,17780,17781],{"class":59},"(dx ",[34,17783,1062],{"class":112},[34,17785,17715],{"class":59},[34,17787,1088],{"class":112},[34,17789,17745],{"class":59},[34,17791,1062],{"class":112},[34,17793,17794],{"class":59}," dy);\n",[34,17796,17797,17799,17802,17804,17806,17809],{"class":36,"line":8412},[34,17798,3565],{"class":112},[34,17800,17801],{"class":59}," (distance ",[34,17803,1515],{"class":112},[34,17805,16806],{"class":59},[34,17807,17808],{"class":2427},"getRadius",[34,17810,17811],{"class":59},"())\n",[34,17813,17814],{"class":36,"line":8436},[34,17815,2494],{"class":59},[34,17817,17818,17820,17822,17825,17827],{"class":36,"line":8441},[34,17819,10133],{"class":59},[34,17821,1648],{"class":112},[34,17823,17824],{"class":187}," \"点在圆内\"",[34,17826,1916],{"class":112},[34,17828,9304],{"class":59},[34,17830,17831],{"class":36,"line":8447},[34,17832,2651],{"class":59},[34,17834,17835],{"class":36,"line":8474},[34,17836,17287],{"class":112},[34,17838,17839],{"class":36,"line":8479},[34,17840,2494],{"class":59},[34,17842,17843,17845,17847,17850,17852],{"class":36,"line":8485},[34,17844,10133],{"class":59},[34,17846,1648],{"class":112},[34,17848,17849],{"class":187}," \"点在圆外\"",[34,17851,1916],{"class":112},[34,17853,9304],{"class":59},[34,17855,17856],{"class":36,"line":8497},[34,17857,2651],{"class":59},[34,17859,17860],{"class":36,"line":8509},[34,17861,2036],{"class":59},[34,17863,17864,17866,17868],{"class":36,"line":8521},[34,17865,620],{"class":112},[34,17867,2437],{"class":2427},[34,17869,2440],{"class":59},[34,17871,17872],{"class":36,"line":10180},[34,17873,2017],{"class":59},[34,17875,17876],{"class":36,"line":10205},[34,17877,15517],{"class":40},[34,17879,17880],{"class":36,"line":10228},[34,17881,15264],{"class":59},[34,17883,17884],{"class":36,"line":10252},[34,17885,17886],{"class":59},"    Point p1;\n",[34,17888,17889],{"class":36,"line":10257},[34,17890,17458],{"class":40},[34,17892,17893,17895,17897,17900],{"class":36,"line":10262},[34,17894,2022],{"class":59},[34,17896,1648],{"class":112},[34,17898,17899],{"class":187},"\"请输入圆的半径：\"",[34,17901,1765],{"class":59},[34,17903,17904,17906],{"class":36,"line":10267},[34,17905,15202],{"class":112},[34,17907,17908],{"class":59}," r;\n",[34,17910,17911,17913,17915],{"class":36,"line":10276},[34,17912,2476],{"class":59},[34,17914,1901],{"class":112},[34,17916,17917],{"class":59},"r;\n",[34,17919,17920,17922,17925],{"class":36,"line":10281},[34,17921,17059],{"class":59},[34,17923,17924],{"class":2427},"setRadius",[34,17926,17927],{"class":59},"(r);\n",[34,17929,17930,17932,17934,17937],{"class":36,"line":10287},[34,17931,2022],{"class":59},[34,17933,1648],{"class":112},[34,17935,17936],{"class":187},"\"请输入圆心坐标：\"",[34,17938,1765],{"class":59},[34,17940,17941,17943],{"class":36,"line":10308},[34,17942,15202],{"class":112},[34,17944,17945],{"class":59}," x, y;\n",[34,17947,17948,17950,17952,17954,17956],{"class":36,"line":10314},[34,17949,2476],{"class":59},[34,17951,1901],{"class":112},[34,17953,1426],{"class":59},[34,17955,1901],{"class":112},[34,17957,17958],{"class":59},"y;\n",[34,17960,17961,17964,17967],{"class":36,"line":10328},[34,17962,17963],{"class":59},"    p1.",[34,17965,17966],{"class":2427},"setPoint",[34,17968,17969],{"class":59},"(x, y);\n",[34,17971,17972,17974,17977],{"class":36,"line":10334},[34,17973,17059],{"class":59},[34,17975,17976],{"class":2427},"setCenter",[34,17978,17979],{"class":59},"(p1);\n",[34,17981,17982,17984,17986,17989],{"class":36,"line":10361},[34,17983,2022],{"class":59},[34,17985,1648],{"class":112},[34,17987,17988],{"class":187},"\"请输入测试点坐标：\"",[34,17990,1765],{"class":59},[34,17992,17993,17995],{"class":36,"line":10370},[34,17994,15202],{"class":112},[34,17996,17997],{"class":59}," x1, y1;\n",[34,17999,18000,18002,18004,18007,18009],{"class":36,"line":10376},[34,18001,2476],{"class":59},[34,18003,1901],{"class":112},[34,18005,18006],{"class":59},"x1",[34,18008,1901],{"class":112},[34,18010,18011],{"class":59},"y1;\n",[34,18013,18014],{"class":36,"line":10384},[34,18015,18016],{"class":59},"    Point p2;\n",[34,18018,18019,18022,18024],{"class":36,"line":10389},[34,18020,18021],{"class":59},"    p2.",[34,18023,17966],{"class":2427},[34,18025,18026],{"class":59},"(x1, y1);\n",[34,18028,18029,18032],{"class":36,"line":17068},[34,18030,18031],{"class":2427},"    isInCircle",[34,18033,18034],{"class":59},"(c1, p2);\n",[34,18036,18037],{"class":36,"line":17074},[34,18038,2036],{"class":59},[14,18040,18041],{},"在类中可以让另一个类作为本来的成员",[14,18043,18044],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18046,18047],{},"创建point.h",[25,18049,18051],{"className":605,"code":18050,"language":607,"meta":22,"style":22},"#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",[31,18052,18053,18064,18070,18080,18086,18090,18095,18099,18103,18123,18127,18135,18143,18147,18151,18157,18163],{"__ignoreMap":22},[34,18054,18055,18058,18061],{"class":36,"line":37},[34,18056,18057],{"class":112},"#pragma",[34,18059,18060],{"class":2427}," once",[34,18062,18063],{"class":40}," \u002F\u002F防止头文件重复包含\n",[34,18065,18066,18068],{"class":36,"line":44},[34,18067,2413],{"class":112},[34,18069,2416],{"class":187},[34,18071,18072,18074,18076,18078],{"class":36,"line":50},[34,18073,2421],{"class":112},[34,18075,2424],{"class":112},[34,18077,2428],{"class":2427},[34,18079,1765],{"class":59},[34,18081,18082,18084],{"class":36,"line":56},[34,18083,15158],{"class":112},[34,18085,17445],{"class":2427},[34,18087,18088],{"class":36,"line":107},[34,18089,2017],{"class":59},[34,18091,18092],{"class":36,"line":196},[34,18093,18094],{"class":40},"\u002F\u002F做好声明与变量定义就可以\n",[34,18096,18097],{"class":36,"line":202},[34,18098,15180],{"class":112},[34,18100,18101],{"class":36,"line":207},[34,18102,17458],{"class":40},[34,18104,18105,18107,18109,18111,18113,18115,18117,18119,18121],{"class":36,"line":222},[34,18106,15373],{"class":112},[34,18108,17465],{"class":2427},[34,18110,617],{"class":59},[34,18112,14501],{"class":112},[34,18114,17472],{"class":5680},[34,18116,12899],{"class":59},[34,18118,14501],{"class":112},[34,18120,17479],{"class":5680},[34,18122,3183],{"class":59},[34,18124,18125],{"class":36,"line":227},[34,18126,17497],{"class":40},[34,18128,18129,18131,18133],{"class":36,"line":232},[34,18130,15202],{"class":112},[34,18132,17504],{"class":2427},[34,18134,6100],{"class":59},[34,18136,18137,18139,18141],{"class":36,"line":238},[34,18138,15202],{"class":112},[34,18140,17520],{"class":2427},[34,18142,6100],{"class":59},[34,18144,18145],{"class":36,"line":244},[34,18146,2864],{"emptyLinePlaceholder":540},[34,18148,18149],{"class":36,"line":250},[34,18150,15686],{"class":112},[34,18152,18153,18155],{"class":36,"line":256},[34,18154,15202],{"class":112},[34,18156,17542],{"class":59},[34,18158,18159,18161],{"class":36,"line":261},[34,18160,15202],{"class":112},[34,18162,17549],{"class":59},[34,18164,18165],{"class":36,"line":267},[34,18166,4459],{"class":59},[14,18168,18169],{},"创建point.cpp",[25,18171,18173],{"className":605,"code":18172,"language":607,"meta":22,"style":22},"#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",[31,18174,18175,18182,18187,18221,18225,18241],{"__ignoreMap":22},[34,18176,18177,18179],{"class":36,"line":37},[34,18178,2413],{"class":112},[34,18180,18181],{"class":187},"\u003Cpoint.h>\n",[34,18183,18184],{"class":36,"line":44},[34,18185,18186],{"class":40},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[34,18188,18189,18191,18194,18197,18199,18201,18203,18205,18207,18209,18211,18213,18215,18217,18219],{"class":36,"line":50},[34,18190,15373],{"class":112},[34,18192,18193],{"class":2427}," Point",[34,18195,18196],{"class":59},"::",[34,18198,17966],{"class":2427},[34,18200,617],{"class":59},[34,18202,14501],{"class":112},[34,18204,17472],{"class":5680},[34,18206,12899],{"class":59},[34,18208,14501],{"class":112},[34,18210,17479],{"class":5680},[34,18212,17482],{"class":59},[34,18214,447],{"class":112},[34,18216,17487],{"class":59},[34,18218,447],{"class":112},[34,18220,17492],{"class":59},[34,18222,18223],{"class":36,"line":56},[34,18224,17497],{"class":40},[34,18226,18227,18229,18231,18233,18235,18237,18239],{"class":36,"line":107},[34,18228,15202],{"class":112},[34,18230,18193],{"class":2427},[34,18232,18196],{"class":59},[34,18234,17728],{"class":2427},[34,18236,17507],{"class":59},[34,18238,17510],{"class":112},[34,18240,17513],{"class":59},[34,18242,18243,18245,18247,18249,18251,18253,18255],{"class":36,"line":196},[34,18244,15202],{"class":112},[34,18246,18193],{"class":2427},[34,18248,18196],{"class":59},[34,18250,17756],{"class":2427},[34,18252,17507],{"class":59},[34,18254,17510],{"class":112},[34,18256,17527],{"class":59},[14,18258,18259],{},"创建circle.h",[25,18261,18263],{"className":605,"code":18262,"language":607,"meta":22,"style":22},"#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",[31,18264,18265,18272,18278,18288,18294,18300,18304,18308,18312,18326,18340,18344,18352,18360,18364,18368,18374,18378,18382],{"__ignoreMap":22},[34,18266,18267,18269],{"class":36,"line":37},[34,18268,18057],{"class":112},[34,18270,18271],{"class":2427}," once\n",[34,18273,18274,18276],{"class":36,"line":44},[34,18275,2413],{"class":112},[34,18277,2416],{"class":187},[34,18279,18280,18282,18284,18286],{"class":36,"line":50},[34,18281,2421],{"class":112},[34,18283,2424],{"class":112},[34,18285,2428],{"class":2427},[34,18287,1765],{"class":59},[34,18289,18290,18292],{"class":36,"line":56},[34,18291,2413],{"class":112},[34,18293,18181],{"class":187},[34,18295,18296,18298],{"class":36,"line":107},[34,18297,15158],{"class":112},[34,18299,15161],{"class":2427},[34,18301,18302],{"class":36,"line":196},[34,18303,2017],{"class":59},[34,18305,18306],{"class":36,"line":202},[34,18307,15180],{"class":112},[34,18309,18310],{"class":36,"line":207},[34,18311,17458],{"class":40},[34,18313,18314,18316,18318,18320,18322,18324],{"class":36,"line":222},[34,18315,15373],{"class":112},[34,18317,17578],{"class":2427},[34,18319,617],{"class":59},[34,18321,14501],{"class":112},[34,18323,17585],{"class":5680},[34,18325,3183],{"class":59},[34,18327,18328,18330,18332,18334,18336,18338],{"class":36,"line":227},[34,18329,15373],{"class":112},[34,18331,17600],{"class":2427},[34,18333,617],{"class":59},[34,18335,17605],{"class":2427},[34,18337,17608],{"class":5680},[34,18339,3183],{"class":59},[34,18341,18342],{"class":36,"line":232},[34,18343,17621],{"class":40},[34,18345,18346,18348,18350],{"class":36,"line":238},[34,18347,15202],{"class":112},[34,18349,17628],{"class":2427},[34,18351,6100],{"class":59},[34,18353,18354,18356,18358],{"class":36,"line":244},[34,18355,17640],{"class":2427},[34,18357,17643],{"class":2427},[34,18359,6100],{"class":59},[34,18361,18362],{"class":36,"line":250},[34,18363,2864],{"emptyLinePlaceholder":540},[34,18365,18366],{"class":36,"line":256},[34,18367,15686],{"class":112},[34,18369,18370,18372],{"class":36,"line":261},[34,18371,15202],{"class":112},[34,18373,15192],{"class":59},[34,18375,18376],{"class":36,"line":267},[34,18377,17669],{"class":40},[34,18379,18380],{"class":36,"line":2138},[34,18381,17674],{"class":59},[34,18383,18384],{"class":36,"line":2143},[34,18385,4459],{"class":59},[14,18387,18388],{},"创建circle.cpp",[25,18390,18392],{"className":605,"code":18391,"language":607,"meta":22,"style":22},"#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",[31,18393,18394,18401,18424,18446,18451,18467],{"__ignoreMap":22},[34,18395,18396,18398],{"class":36,"line":37},[34,18397,2413],{"class":112},[34,18399,18400],{"class":187},"\u003Ccircle.h>\n",[34,18402,18403,18405,18408,18410,18412,18414,18416,18418,18420,18422],{"class":36,"line":44},[34,18404,5828],{"class":112},[34,18406,18407],{"class":2427}," Circle",[34,18409,18196],{"class":59},[34,18411,17924],{"class":2427},[34,18413,617],{"class":59},[34,18415,14501],{"class":112},[34,18417,17585],{"class":5680},[34,18419,17588],{"class":59},[34,18421,447],{"class":112},[34,18423,17593],{"class":59},[34,18425,18426,18428,18430,18432,18434,18436,18438,18440,18442,18444],{"class":36,"line":50},[34,18427,5828],{"class":112},[34,18429,18407],{"class":2427},[34,18431,18196],{"class":59},[34,18433,17976],{"class":2427},[34,18435,617],{"class":59},[34,18437,17605],{"class":2427},[34,18439,17608],{"class":5680},[34,18441,17611],{"class":59},[34,18443,447],{"class":112},[34,18445,17616],{"class":59},[34,18447,18448],{"class":36,"line":56},[34,18449,18450],{"class":40},"\u002F\u002F获取属性\n",[34,18452,18453,18455,18457,18459,18461,18463,18465],{"class":36,"line":107},[34,18454,14501],{"class":112},[34,18456,18407],{"class":2427},[34,18458,18196],{"class":59},[34,18460,17808],{"class":2427},[34,18462,17507],{"class":59},[34,18464,17510],{"class":112},[34,18466,17635],{"class":59},[34,18468,18469,18471,18473,18475,18477,18479,18481],{"class":36,"line":196},[34,18470,17605],{"class":2427},[34,18472,18407],{"class":2427},[34,18474,18196],{"class":59},[34,18476,17722],{"class":2427},[34,18478,17507],{"class":59},[34,18480,17510],{"class":112},[34,18482,17650],{"class":59},[14,18484,18485],{},"使用封装的类",[25,18487,18489],{"className":605,"code":18488,"language":607,"meta":22,"style":22},"#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",[31,18490,18491,18497,18507,18513,18519,18543,18547,18573,18599,18623,18637,18641,18653,18657,18661,18665,18677,18681,18685,18693,18697,18701,18705,18709,18713,18723,18729,18737,18745,18755,18761,18773,18781,18789,18799,18805,18817,18821,18829,18835],{"__ignoreMap":22},[34,18492,18493,18495],{"class":36,"line":37},[34,18494,2413],{"class":112},[34,18496,2416],{"class":187},[34,18498,18499,18501,18503,18505],{"class":36,"line":44},[34,18500,2421],{"class":112},[34,18502,2424],{"class":112},[34,18504,2428],{"class":2427},[34,18506,1765],{"class":59},[34,18508,18509,18511],{"class":36,"line":50},[34,18510,2413],{"class":112},[34,18512,18400],{"class":187},[34,18514,18515,18517],{"class":36,"line":56},[34,18516,2413],{"class":112},[34,18518,18181],{"class":187},[34,18520,18521,18523,18525,18527,18529,18531,18533,18535,18537,18539,18541],{"class":36,"line":107},[34,18522,5828],{"class":112},[34,18524,17685],{"class":2427},[34,18526,617],{"class":59},[34,18528,17690],{"class":2427},[34,18530,11048],{"class":112},[34,18532,897],{"class":5680},[34,18534,67],{"class":59},[34,18536,17605],{"class":2427},[34,18538,11048],{"class":112},[34,18540,14],{"class":5680},[34,18542,623],{"class":59},[34,18544,18545],{"class":36,"line":196},[34,18546,2017],{"class":59},[34,18548,18549,18551,18553,18555,18557,18559,18561,18563,18565,18567,18569,18571],{"class":36,"line":202},[34,18550,15202],{"class":112},[34,18552,17715],{"class":59},[34,18554,447],{"class":112},[34,18556,16806],{"class":59},[34,18558,17722],{"class":2427},[34,18560,17725],{"class":59},[34,18562,17728],{"class":2427},[34,18564,13514],{"class":59},[34,18566,113],{"class":112},[34,18568,16352],{"class":59},[34,18570,17728],{"class":2427},[34,18572,6100],{"class":59},[34,18574,18575,18577,18579,18581,18583,18585,18587,18589,18591,18593,18595,18597],{"class":36,"line":207},[34,18576,15202],{"class":112},[34,18578,17745],{"class":59},[34,18580,447],{"class":112},[34,18582,16806],{"class":59},[34,18584,17722],{"class":2427},[34,18586,17725],{"class":59},[34,18588,17756],{"class":2427},[34,18590,13514],{"class":59},[34,18592,113],{"class":112},[34,18594,16352],{"class":59},[34,18596,17756],{"class":2427},[34,18598,6100],{"class":59},[34,18600,18601,18603,18605,18607,18609,18611,18613,18615,18617,18619,18621],{"class":36,"line":222},[34,18602,15202],{"class":112},[34,18604,17773],{"class":59},[34,18606,447],{"class":112},[34,18608,17778],{"class":2427},[34,18610,17781],{"class":59},[34,18612,1062],{"class":112},[34,18614,17715],{"class":59},[34,18616,1088],{"class":112},[34,18618,17745],{"class":59},[34,18620,1062],{"class":112},[34,18622,17794],{"class":59},[34,18624,18625,18627,18629,18631,18633,18635],{"class":36,"line":227},[34,18626,3565],{"class":112},[34,18628,17801],{"class":59},[34,18630,1515],{"class":112},[34,18632,16806],{"class":59},[34,18634,17808],{"class":2427},[34,18636,17811],{"class":59},[34,18638,18639],{"class":36,"line":232},[34,18640,2494],{"class":59},[34,18642,18643,18645,18647,18649,18651],{"class":36,"line":238},[34,18644,10133],{"class":59},[34,18646,1648],{"class":112},[34,18648,17824],{"class":187},[34,18650,1916],{"class":112},[34,18652,9304],{"class":59},[34,18654,18655],{"class":36,"line":244},[34,18656,2651],{"class":59},[34,18658,18659],{"class":36,"line":250},[34,18660,17287],{"class":112},[34,18662,18663],{"class":36,"line":256},[34,18664,2494],{"class":59},[34,18666,18667,18669,18671,18673,18675],{"class":36,"line":261},[34,18668,10133],{"class":59},[34,18670,1648],{"class":112},[34,18672,17849],{"class":187},[34,18674,1916],{"class":112},[34,18676,9304],{"class":59},[34,18678,18679],{"class":36,"line":267},[34,18680,2651],{"class":59},[34,18682,18683],{"class":36,"line":2138},[34,18684,2036],{"class":59},[34,18686,18687,18689,18691],{"class":36,"line":2143},[34,18688,620],{"class":112},[34,18690,2437],{"class":2427},[34,18692,2440],{"class":59},[34,18694,18695],{"class":36,"line":2157},[34,18696,2017],{"class":59},[34,18698,18699],{"class":36,"line":2162},[34,18700,15517],{"class":40},[34,18702,18703],{"class":36,"line":2191},[34,18704,15264],{"class":59},[34,18706,18707],{"class":36,"line":2196},[34,18708,17886],{"class":59},[34,18710,18711],{"class":36,"line":2213},[34,18712,17458],{"class":40},[34,18714,18715,18717,18719,18721],{"class":36,"line":2218},[34,18716,2022],{"class":59},[34,18718,1648],{"class":112},[34,18720,17899],{"class":187},[34,18722,1765],{"class":59},[34,18724,18725,18727],{"class":36,"line":2223},[34,18726,15202],{"class":112},[34,18728,17908],{"class":59},[34,18730,18731,18733,18735],{"class":36,"line":2228},[34,18732,2476],{"class":59},[34,18734,1901],{"class":112},[34,18736,17917],{"class":59},[34,18738,18739,18741,18743],{"class":36,"line":2242},[34,18740,17059],{"class":59},[34,18742,17924],{"class":2427},[34,18744,17927],{"class":59},[34,18746,18747,18749,18751,18753],{"class":36,"line":2247},[34,18748,2022],{"class":59},[34,18750,1648],{"class":112},[34,18752,17936],{"class":187},[34,18754,1765],{"class":59},[34,18756,18757,18759],{"class":36,"line":3041},[34,18758,15202],{"class":112},[34,18760,17945],{"class":59},[34,18762,18763,18765,18767,18769,18771],{"class":36,"line":3055},[34,18764,2476],{"class":59},[34,18766,1901],{"class":112},[34,18768,1426],{"class":59},[34,18770,1901],{"class":112},[34,18772,17958],{"class":59},[34,18774,18775,18777,18779],{"class":36,"line":3063},[34,18776,17963],{"class":59},[34,18778,17966],{"class":2427},[34,18780,17969],{"class":59},[34,18782,18783,18785,18787],{"class":36,"line":3068},[34,18784,17059],{"class":59},[34,18786,17976],{"class":2427},[34,18788,17979],{"class":59},[34,18790,18791,18793,18795,18797],{"class":36,"line":3074},[34,18792,2022],{"class":59},[34,18794,1648],{"class":112},[34,18796,17988],{"class":187},[34,18798,1765],{"class":59},[34,18800,18801,18803],{"class":36,"line":3080},[34,18802,15202],{"class":112},[34,18804,17997],{"class":59},[34,18806,18807,18809,18811,18813,18815],{"class":36,"line":3085},[34,18808,2476],{"class":59},[34,18810,1901],{"class":112},[34,18812,18006],{"class":59},[34,18814,1901],{"class":112},[34,18816,18011],{"class":59},[34,18818,18819],{"class":36,"line":8412},[34,18820,18016],{"class":59},[34,18822,18823,18825,18827],{"class":36,"line":8436},[34,18824,18021],{"class":59},[34,18826,17966],{"class":2427},[34,18828,18026],{"class":59},[34,18830,18831,18833],{"class":36,"line":8441},[34,18832,18031],{"class":2427},[34,18834,18034],{"class":59},[34,18836,18837],{"class":36,"line":8447},[34,18838,2036],{"class":59},[555,18840,18842],{"id":18841},"_82对象的初始化清理","8.2对象的初始化清理",[1611,18844,18845,18848],{},[570,18846,18847],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[570,18849,18850],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[584,18852,18854],{"id":18853},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18856,18857,18858,18861],{},"对象的",[760,18859,18860],{},"初始化和清理","也是两个非常重要的安全问题",[14,18863,18864],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18866,18867],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18869,18870,18871,18874,18875,18878],{},"c++利用了",[760,18872,18873],{},"构造函数","和",[760,18876,18877],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18880,18881,18882],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[760,18883,18884],{},"我们不提供构造和析构，编译器会提供",[14,18886,18887],{},[760,18888,18889],{},"编译器提供的构造函数和析构函数是空实现。",[1611,18891,18892,18895],{},[570,18893,18894],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[570,18896,18897,18898,18901],{},"析构函数：主要作用在于对象",[760,18899,18900],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18903,18904,18907],{},[760,18905,18906],{},"构造函数语法：",[31,18908,18909],{},"类名(){}",[567,18911,18912,18915,18918,18921,18924],{},[570,18913,18914],{},"构造函数，没有返回值也不写void",[570,18916,18917],{},"函数名称与类名相同",[570,18919,18920],{},"构造函数可以有参数，因此可以发生重载",[570,18922,18923],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[570,18925,18926,18927,1036],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[31,18928,18929],{},"Person(){}",[14,18931,18932,14259,18935],{},[760,18933,18934],{},"析构函数语法：",[31,18936,18937],{},"~类名(){}",[567,18939,18940,18943,18946,18952],{},[570,18941,18942],{},"析构函数，没有返回值也不写void",[570,18944,18945],{},"函数名称与类名相同,在名称前加上符号  ~",[570,18947,18948,18949],{},"析构函数不可以有参数，因此",[760,18950,18951],{},"不可以发生重载",[570,18953,18954],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[25,18956,18958],{"className":605,"code":18957,"language":607,"meta":22,"style":22},"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",[31,18959,18960,18966,18970,18974,18979,18986,18990,19003,19007,19012,19019,19023,19036,19040,19044,19048,19052,19060,19064,19072,19076,19080,19088,19092,19097,19101,19108,19112,19125,19129,19137],{"__ignoreMap":22},[34,18961,18962,18964],{"class":36,"line":37},[34,18963,15158],{"class":112},[34,18965,15635],{"class":2427},[34,18967,18968],{"class":36,"line":44},[34,18969,2017],{"class":59},[34,18971,18972],{"class":36,"line":50},[34,18973,15180],{"class":112},[34,18975,18976],{"class":36,"line":56},[34,18977,18978],{"class":40},"    \u002F\u002F构造函数\n",[34,18980,18981,18984],{"class":36,"line":107},[34,18982,18983],{"class":2427},"    Person",[34,18985,2440],{"class":59},[34,18987,18988],{"class":36,"line":196},[34,18989,2494],{"class":59},[34,18991,18992,18994,18996,18999,19001],{"class":36,"line":202},[34,18993,10133],{"class":59},[34,18995,1648],{"class":112},[34,18997,18998],{"class":187}," \"Person的构造函数调用\"",[34,19000,1916],{"class":112},[34,19002,9304],{"class":59},[34,19004,19005],{"class":36,"line":207},[34,19006,2651],{"class":59},[34,19008,19009],{"class":36,"line":222},[34,19010,19011],{"class":40},"    \u002F\u002F析构函数\n",[34,19013,19014,19017],{"class":36,"line":227},[34,19015,19016],{"class":2427},"    ~Person",[34,19018,2440],{"class":59},[34,19020,19021],{"class":36,"line":232},[34,19022,2494],{"class":59},[34,19024,19025,19027,19029,19032,19034],{"class":36,"line":238},[34,19026,10133],{"class":59},[34,19028,1648],{"class":112},[34,19030,19031],{"class":187}," \"Person的析构函数调用\"",[34,19033,1916],{"class":112},[34,19035,9304],{"class":59},[34,19037,19038],{"class":36,"line":244},[34,19039,2651],{"class":59},[34,19041,19042],{"class":36,"line":250},[34,19043,2864],{"emptyLinePlaceholder":540},[34,19045,19046],{"class":36,"line":256},[34,19047,4459],{"class":59},[34,19049,19050],{"class":36,"line":261},[34,19051,2864],{"emptyLinePlaceholder":540},[34,19053,19054,19056,19058],{"class":36,"line":267},[34,19055,5828],{"class":112},[34,19057,6052],{"class":2427},[34,19059,2440],{"class":59},[34,19061,19062],{"class":36,"line":2138},[34,19063,2017],{"class":59},[34,19065,19066,19069],{"class":36,"line":2143},[34,19067,19068],{"class":59},"    Person p;",[34,19070,19071],{"class":40},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[34,19073,19074],{"class":36,"line":2157},[34,19075,2036],{"class":59},[34,19077,19078],{"class":36,"line":2162},[34,19079,2864],{"emptyLinePlaceholder":540},[34,19081,19082,19084,19086],{"class":36,"line":2191},[34,19083,620],{"class":112},[34,19085,2437],{"class":2427},[34,19087,11317],{"class":59},[34,19089,19090],{"class":36,"line":2196},[34,19091,13674],{"class":59},[34,19093,19094],{"class":36,"line":2213},[34,19095,19096],{"class":40},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[34,19098,19099],{"class":36,"line":2218},[34,19100,2864],{"emptyLinePlaceholder":540},[34,19102,19103,19105],{"class":36,"line":2223},[34,19104,19068],{"class":59},[34,19106,19107],{"class":40},"\u002F\u002F只有构造函数\n",[34,19109,19110],{"class":36,"line":2228},[34,19111,2864],{"emptyLinePlaceholder":540},[34,19113,19114,19116,19118,19120,19122],{"class":36,"line":2242},[34,19115,2767],{"class":2427},[34,19117,617],{"class":59},[34,19119,2772],{"class":187},[34,19121,6430],{"class":59},[34,19123,19124],{"class":40},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[34,19126,19127],{"class":36,"line":2247},[34,19128,2864],{"emptyLinePlaceholder":540},[34,19130,19131,19133,19135],{"class":36,"line":3041},[34,19132,4554],{"class":112},[34,19134,4557],{"class":63},[34,19136,1765],{"class":59},[34,19138,19139],{"class":36,"line":3055},[34,19140,2036],{"class":59},[14,19142,19143],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[584,19145,19147],{"id":19146},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19149,19150],{},"两种分类方式：",[14,19152,19153],{},"​\t按参数分为： 有参构造和无参构造",[14,19155,19156],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19158,19159],{},"三种调用方式：",[14,19161,19162],{},"​\t括号法",[14,19164,19165],{},"​\t显示法",[14,19167,19168],{},"​\t隐式转换法",[25,19170,19172],{"className":605,"code":19171,"language":607,"meta":22,"style":22},"#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",[31,19173,19174,19180,19190,19195,19200,19205,19210,19214,19222,19226,19230,19234,19240,19244,19257,19261,19273,19277,19286,19299,19303,19307,19313,19317,19330,19334,19339,19355,19359,19364,19373,19386,19390,19396,19400,19405,19413,19417,19422,19426,19434,19438,19443,19448,19453,19458,19463,19467,19472,19477,19482,19487,19491,19496,19501,19517,19529,19534,19538,19543,19548,19553,19557,19562,19576,19589,19593,19601,19605,19611,19617,19625],{"__ignoreMap":22},[34,19175,19176,19178],{"class":36,"line":37},[34,19177,2413],{"class":112},[34,19179,2416],{"class":187},[34,19181,19182,19184,19186,19188],{"class":36,"line":44},[34,19183,2421],{"class":112},[34,19185,2424],{"class":112},[34,19187,2428],{"class":2427},[34,19189,1765],{"class":59},[34,19191,19192],{"class":36,"line":50},[34,19193,19194],{"class":40},"\u002F\u002F1.构造函数的分类及调用\n",[34,19196,19197],{"class":36,"line":56},[34,19198,19199],{"class":40},"\u002F\u002F分类\n",[34,19201,19202],{"class":36,"line":107},[34,19203,19204],{"class":40},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[34,19206,19207],{"class":36,"line":196},[34,19208,19209],{"class":40},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[34,19211,19212],{"class":36,"line":202},[34,19213,2864],{"emptyLinePlaceholder":540},[34,19215,19216,19218,19220],{"class":36,"line":207},[34,19217,15158],{"class":112},[34,19219,16033],{"class":2427},[34,19221,3138],{"class":59},[34,19223,19224],{"class":36,"line":222},[34,19225,2017],{"class":59},[34,19227,19228],{"class":36,"line":227},[34,19229,15180],{"class":112},[34,19231,19232],{"class":36,"line":232},[34,19233,18978],{"class":40},[34,19235,19236,19238],{"class":36,"line":238},[34,19237,18983],{"class":2427},[34,19239,2440],{"class":59},[34,19241,19242],{"class":36,"line":244},[34,19243,2494],{"class":59},[34,19245,19246,19248,19250,19253,19255],{"class":36,"line":250},[34,19247,3915],{"class":59},[34,19249,1648],{"class":112},[34,19251,19252],{"class":187},"\"Person构造函数无参构造\"",[34,19254,1648],{"class":112},[34,19256,1670],{"class":59},[34,19258,19259],{"class":36,"line":256},[34,19260,2651],{"class":59},[34,19262,19263,19265,19267,19269,19271],{"class":36,"line":261},[34,19264,18983],{"class":2427},[34,19266,617],{"class":59},[34,19268,620],{"class":112},[34,19270,1870],{"class":5680},[34,19272,623],{"class":59},[34,19274,19275],{"class":36,"line":267},[34,19276,2494],{"class":59},[34,19278,19279,19282,19284],{"class":36,"line":2138},[34,19280,19281],{"class":59},"        age",[34,19283,447],{"class":112},[34,19285,6661],{"class":59},[34,19287,19288,19290,19292,19295,19297],{"class":36,"line":2143},[34,19289,3915],{"class":59},[34,19291,1648],{"class":112},[34,19293,19294],{"class":187},"\"Person构造函数有参构造\"",[34,19296,1648],{"class":112},[34,19298,1670],{"class":59},[34,19300,19301],{"class":36,"line":2157},[34,19302,2651],{"class":59},[34,19304,19305],{"class":36,"line":2162},[34,19306,19011],{"class":40},[34,19308,19309,19311],{"class":36,"line":2191},[34,19310,19016],{"class":2427},[34,19312,2440],{"class":59},[34,19314,19315],{"class":36,"line":2196},[34,19316,2494],{"class":59},[34,19318,19319,19321,19323,19326,19328],{"class":36,"line":2213},[34,19320,3915],{"class":59},[34,19322,1648],{"class":112},[34,19324,19325],{"class":187},"\"Person析构函数被调用\"",[34,19327,1648],{"class":112},[34,19329,1670],{"class":59},[34,19331,19332],{"class":36,"line":2218},[34,19333,2651],{"class":59},[34,19335,19336],{"class":36,"line":2223},[34,19337,19338],{"class":40},"    \u002F\u002F拷贝构造函数\n",[34,19340,19341,19343,19345,19347,19349,19351,19353],{"class":36,"line":2228},[34,19342,18983],{"class":2427},[34,19344,617],{"class":59},[34,19346,7256],{"class":112},[34,19348,16033],{"class":2427},[34,19350,11048],{"class":112},[34,19352,14],{"class":5680},[34,19354,623],{"class":59},[34,19356,19357],{"class":36,"line":2242},[34,19358,2494],{"class":59},[34,19360,19361],{"class":36,"line":2247},[34,19362,19363],{"class":40},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[34,19365,19366,19368,19370],{"class":36,"line":3041},[34,19367,19281],{"class":59},[34,19369,447],{"class":112},[34,19371,19372],{"class":59},"p.age;\n",[34,19374,19375,19377,19379,19382,19384],{"class":36,"line":3055},[34,19376,3915],{"class":59},[34,19378,1648],{"class":112},[34,19380,19381],{"class":187},"\"Person拷贝构造函数被调用\"",[34,19383,1648],{"class":112},[34,19385,1670],{"class":59},[34,19387,19388],{"class":36,"line":3063},[34,19389,2651],{"class":59},[34,19391,19392,19394],{"class":36,"line":3068},[34,19393,2449],{"class":112},[34,19395,8261],{"class":59},[34,19397,19398],{"class":36,"line":3074},[34,19399,4459],{"class":59},[34,19401,19402],{"class":36,"line":3080},[34,19403,19404],{"class":40},"\u002F\u002F调用\n",[34,19406,19407,19409,19411],{"class":36,"line":3085},[34,19408,5828],{"class":112},[34,19410,6052],{"class":2427},[34,19412,2440],{"class":59},[34,19414,19415],{"class":36,"line":8412},[34,19416,2017],{"class":59},[34,19418,19419],{"class":36,"line":8436},[34,19420,19421],{"class":40},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[34,19423,19424],{"class":36,"line":8441},[34,19425,2036],{"class":59},[34,19427,19428,19430,19432],{"class":36,"line":8447},[34,19429,5828],{"class":112},[34,19431,6121],{"class":2427},[34,19433,2440],{"class":59},[34,19435,19436],{"class":36,"line":8474},[34,19437,2017],{"class":59},[34,19439,19440],{"class":36,"line":8479},[34,19441,19442],{"class":40},"    \u002F\u002F1.括号法\n",[34,19444,19445],{"class":36,"line":8485},[34,19446,19447],{"class":40},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[34,19449,19450],{"class":36,"line":8497},[34,19451,19452],{"class":40},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[34,19454,19455],{"class":36,"line":8509},[34,19456,19457],{"class":40},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[34,19459,19460],{"class":36,"line":8521},[34,19461,19462],{"class":40},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[34,19464,19465],{"class":36,"line":10180},[34,19466,2864],{"emptyLinePlaceholder":540},[34,19468,19469],{"class":36,"line":10205},[34,19470,19471],{"class":40},"    \u002F\u002F注意事项\n",[34,19473,19474],{"class":36,"line":10228},[34,19475,19476],{"class":40},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[34,19478,19479],{"class":36,"line":10252},[34,19480,19481],{"class":40},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[34,19483,19484],{"class":36,"line":10257},[34,19485,19486],{"class":40},"    \u002F\u002F Person p4();\n",[34,19488,19489],{"class":36,"line":10262},[34,19490,2864],{"emptyLinePlaceholder":540},[34,19492,19493],{"class":36,"line":10267},[34,19494,19495],{"class":40},"    \u002F\u002F2.显示法\n",[34,19497,19498],{"class":36,"line":10276},[34,19499,19500],{"class":59},"    Person p1;\n",[34,19502,19503,19506,19508,19511,19513,19515],{"class":36,"line":10281},[34,19504,19505],{"class":59},"    Person p2",[34,19507,447],{"class":112},[34,19509,19510],{"class":2427},"Person",[34,19512,617],{"class":59},[34,19514,1053],{"class":63},[34,19516,3183],{"class":59},[34,19518,19519,19522,19524,19526],{"class":36,"line":10287},[34,19520,19521],{"class":59},"    Person p3",[34,19523,447],{"class":112},[34,19525,19510],{"class":2427},[34,19527,19528],{"class":59},"(p2);\n",[34,19530,19531],{"class":36,"line":10308},[34,19532,19533],{"class":40},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[34,19535,19536],{"class":36,"line":10314},[34,19537,2864],{"emptyLinePlaceholder":540},[34,19539,19540],{"class":36,"line":10328},[34,19541,19542],{"class":40},"    \u002F\u002F 注意事项2\n",[34,19544,19545],{"class":36,"line":10334},[34,19546,19547],{"class":40},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[34,19549,19550],{"class":36,"line":10361},[34,19551,19552],{"class":40},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[34,19554,19555],{"class":36,"line":10370},[34,19556,2864],{"emptyLinePlaceholder":540},[34,19558,19559],{"class":36,"line":10376},[34,19560,19561],{"class":40},"    \u002F\u002F3.隐士转换法\n",[34,19563,19564,19567,19569,19571,19573],{"class":36,"line":10384},[34,19565,19566],{"class":59},"    Person p4",[34,19568,447],{"class":112},[34,19570,1053],{"class":63},[34,19572,670],{"class":59},[34,19574,19575],{"class":40},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[34,19577,19578,19581,19583,19586],{"class":36,"line":10389},[34,19579,19580],{"class":59},"    Person p5",[34,19582,447],{"class":112},[34,19584,19585],{"class":59},"p4;",[34,19587,19588],{"class":40}," \u002F\u002F 这里会调用拷贝构造函数\n",[34,19590,19591],{"class":36,"line":17068},[34,19592,2036],{"class":59},[34,19594,19595,19597,19599],{"class":36,"line":17074},[34,19596,620],{"class":112},[34,19598,2437],{"class":2427},[34,19600,2440],{"class":59},[34,19602,19603],{"class":36,"line":17097},[34,19604,2017],{"class":59},[34,19606,19607,19609],{"class":36,"line":17103},[34,19608,6097],{"class":2427},[34,19610,6100],{"class":59},[34,19612,19613,19615],{"class":36,"line":17126},[34,19614,6166],{"class":2427},[34,19616,6100],{"class":59},[34,19618,19619,19621,19623],{"class":36,"line":17140},[34,19620,4554],{"class":112},[34,19622,4557],{"class":63},[34,19624,1765],{"class":59},[34,19626,19627],{"class":36,"line":17160},[34,19628,2036],{"class":59},[14,19630,19631,19634],{},[760,19632,19633],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[584,19636,19638],{"id":19637},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19640,19641],{},"C++中拷贝构造函数调用时机通常有三种情况",[1611,19643,19644,19647,19650],{},[570,19645,19646],{},"使用一个已经创建完毕的对象来初始化一个新对象",[570,19648,19649],{},"值传递的方式给函数参数传值",[570,19651,19652],{},"以值方式返回局部对象",[25,19654,19656],{"className":605,"code":19655,"language":607,"meta":22,"style":22},"#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",[31,19657,19658,19664,19674,19678,19683,19687,19692,19697,19702,19708,19712,19716,19722,19726,19739,19743,19748,19760,19764,19772,19785,19789,19793,19809,19813,19822,19835,19839,19845,19849,19861,19865,19871,19875,19879,19887,19891,19904,19912,19930,19934,19939,19944,19959,19963,19976,19980,19988,19992,19996,20004,20008,20013,20022,20026,20030,20055,20065,20069,20077,20081,20092,20117,20121,20125,20129,20137,20141,20146,20151,20158,20163,20168,20173,20178,20182,20187,20191,20196,20200,20205,20210,20214,20218,20223,20228,20236],{"__ignoreMap":22},[34,19659,19660,19662],{"class":36,"line":37},[34,19661,2413],{"class":112},[34,19663,2416],{"class":187},[34,19665,19666,19668,19670,19672],{"class":36,"line":44},[34,19667,2421],{"class":112},[34,19669,2424],{"class":112},[34,19671,2428],{"class":2427},[34,19673,1765],{"class":59},[34,19675,19676],{"class":36,"line":50},[34,19677,2864],{"emptyLinePlaceholder":540},[34,19679,19680],{"class":36,"line":56},[34,19681,19682],{"class":40},"\u002F\u002F拷贝构造函数调用时机\n",[34,19684,19685],{"class":36,"line":107},[34,19686,2864],{"emptyLinePlaceholder":540},[34,19688,19689],{"class":36,"line":196},[34,19690,19691],{"class":40},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[34,19693,19694],{"class":36,"line":202},[34,19695,19696],{"class":40},"\u002F\u002F2.值传递的方式给函数参数传值\n",[34,19698,19699],{"class":36,"line":207},[34,19700,19701],{"class":40},"\u002F\u002F3.以值方式返回局部对象\n",[34,19703,19704,19706],{"class":36,"line":222},[34,19705,15158],{"class":112},[34,19707,15635],{"class":2427},[34,19709,19710],{"class":36,"line":227},[34,19711,2017],{"class":59},[34,19713,19714],{"class":36,"line":232},[34,19715,15180],{"class":112},[34,19717,19718,19720],{"class":36,"line":238},[34,19719,18983],{"class":2427},[34,19721,2440],{"class":59},[34,19723,19724],{"class":36,"line":244},[34,19725,2494],{"class":59},[34,19727,19728,19730,19732,19735,19737],{"class":36,"line":250},[34,19729,10133],{"class":59},[34,19731,1648],{"class":112},[34,19733,19734],{"class":187}," \"Person的默认构造函数调用\"",[34,19736,1916],{"class":112},[34,19738,9304],{"class":59},[34,19740,19741],{"class":36,"line":256},[34,19742,2651],{"class":59},[34,19744,19745],{"class":36,"line":261},[34,19746,19747],{"class":40},"    \u002F\u002F有参构造\n",[34,19749,19750,19752,19754,19756,19758],{"class":36,"line":267},[34,19751,18983],{"class":2427},[34,19753,617],{"class":59},[34,19755,620],{"class":112},[34,19757,16153],{"class":5680},[34,19759,623],{"class":59},[34,19761,19762],{"class":36,"line":2138},[34,19763,2494],{"class":59},[34,19765,19766,19768,19770],{"class":36,"line":2143},[34,19767,16207],{"class":59},[34,19769,447],{"class":112},[34,19771,8261],{"class":59},[34,19773,19774,19776,19778,19781,19783],{"class":36,"line":2157},[34,19775,10133],{"class":59},[34,19777,1648],{"class":112},[34,19779,19780],{"class":187}," \"Person的有参构造函数调用\"",[34,19782,1916],{"class":112},[34,19784,9304],{"class":59},[34,19786,19787],{"class":36,"line":2162},[34,19788,2651],{"class":59},[34,19790,19791],{"class":36,"line":2191},[34,19792,19338],{"class":40},[34,19794,19795,19797,19799,19801,19803,19805,19807],{"class":36,"line":2196},[34,19796,18983],{"class":2427},[34,19798,617],{"class":59},[34,19800,7256],{"class":112},[34,19802,16033],{"class":2427},[34,19804,11048],{"class":112},[34,19806,14],{"class":5680},[34,19808,623],{"class":59},[34,19810,19811],{"class":36,"line":2213},[34,19812,2494],{"class":59},[34,19814,19815,19817,19819],{"class":36,"line":2218},[34,19816,16207],{"class":59},[34,19818,447],{"class":112},[34,19820,19821],{"class":59}," p.m_Age;\n",[34,19823,19824,19826,19828,19831,19833],{"class":36,"line":2223},[34,19825,10133],{"class":59},[34,19827,1648],{"class":112},[34,19829,19830],{"class":187}," \"Person的拷贝构造函数调用\"",[34,19832,1916],{"class":112},[34,19834,9304],{"class":59},[34,19836,19837],{"class":36,"line":2228},[34,19838,2651],{"class":59},[34,19840,19841,19843],{"class":36,"line":2242},[34,19842,19016],{"class":2427},[34,19844,2440],{"class":59},[34,19846,19847],{"class":36,"line":2247},[34,19848,2494],{"class":59},[34,19850,19851,19853,19855,19857,19859],{"class":36,"line":3041},[34,19852,10133],{"class":59},[34,19854,1648],{"class":112},[34,19856,19031],{"class":187},[34,19858,1916],{"class":112},[34,19860,9304],{"class":59},[34,19862,19863],{"class":36,"line":3055},[34,19864,2651],{"class":59},[34,19866,19867,19869],{"class":36,"line":3063},[34,19868,2449],{"class":112},[34,19870,16130],{"class":59},[34,19872,19873],{"class":36,"line":3068},[34,19874,4459],{"class":59},[34,19876,19877],{"class":36,"line":3074},[34,19878,19691],{"class":40},[34,19880,19881,19883,19885],{"class":36,"line":3080},[34,19882,5828],{"class":112},[34,19884,6052],{"class":2427},[34,19886,2440],{"class":59},[34,19888,19889],{"class":36,"line":3085},[34,19890,2017],{"class":59},[34,19892,19893,19896,19898,19900,19902],{"class":36,"line":8412},[34,19894,19895],{"class":59},"    Person ",[34,19897,7594],{"class":2427},[34,19899,617],{"class":59},[34,19901,1306],{"class":63},[34,19903,3183],{"class":59},[34,19905,19906,19908,19910],{"class":36,"line":8436},[34,19907,19895],{"class":59},[34,19909,7497],{"class":2427},[34,19911,17979],{"class":59},[34,19913,19914,19916,19918,19921,19923,19926,19928],{"class":36,"line":8441},[34,19915,2022],{"class":59},[34,19917,1648],{"class":112},[34,19919,19920],{"class":187},"\"P2的年龄为：\"",[34,19922,1648],{"class":112},[34,19924,19925],{"class":59},"p2.m_Age",[34,19927,1648],{"class":112},[34,19929,1670],{"class":59},[34,19931,19932],{"class":36,"line":8447},[34,19933,2036],{"class":59},[34,19935,19936],{"class":36,"line":8474},[34,19937,19938],{"class":40},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[34,19940,19941],{"class":36,"line":8479},[34,19942,19943],{"class":40},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[34,19945,19946,19948,19951,19953,19955,19957],{"class":36,"line":8485},[34,19947,5828],{"class":112},[34,19949,19950],{"class":2427}," doWork",[34,19952,617],{"class":59},[34,19954,19510],{"class":2427},[34,19956,7289],{"class":5680},[34,19958,623],{"class":59},[34,19960,19961],{"class":36,"line":8497},[34,19962,2017],{"class":59},[34,19964,19965,19967,19969,19972,19974],{"class":36,"line":8509},[34,19966,6993],{"class":59},[34,19968,1648],{"class":112},[34,19970,19971],{"class":187}," \"doWork函数调用\"",[34,19973,1916],{"class":112},[34,19975,9304],{"class":59},[34,19977,19978],{"class":36,"line":8521},[34,19979,2036],{"class":59},[34,19981,19982,19984,19986],{"class":36,"line":10180},[34,19983,5828],{"class":112},[34,19985,6121],{"class":2427},[34,19987,2440],{"class":59},[34,19989,19990],{"class":36,"line":10205},[34,19991,2017],{"class":59},[34,19993,19994],{"class":36,"line":10228},[34,19995,15777],{"class":59},[34,19997,19998,20001],{"class":36,"line":10252},[34,19999,20000],{"class":2427},"    doWork",[34,20002,20003],{"class":59},"(p);\n",[34,20005,20006],{"class":36,"line":10257},[34,20007,2036],{"class":59},[34,20009,20010],{"class":36,"line":10262},[34,20011,20012],{"class":40},"\u002F\u002F 3.以值方式返回局部对象\n",[34,20014,20015,20017,20020],{"class":36,"line":10267},[34,20016,19510],{"class":2427},[34,20018,20019],{"class":2427}," doWork2",[34,20021,2440],{"class":59},[34,20023,20024],{"class":36,"line":10276},[34,20025,2017],{"class":59},[34,20027,20028],{"class":36,"line":10281},[34,20029,19500],{"class":59},[34,20031,20032,20034,20036,20038,20040,20042,20044,20046,20048,20050,20052],{"class":36,"line":10287},[34,20033,2022],{"class":59},[34,20035,1648],{"class":112},[34,20037,617],{"class":59},[34,20039,620],{"class":112},[34,20041,6982],{"class":112},[34,20043,1036],{"class":59},[34,20045,961],{"class":112},[34,20047,7594],{"class":59},[34,20049,1648],{"class":112},[34,20051,1713],{"class":59},[34,20053,20054],{"class":40},"\u002F\u002F打印p1的地址\n",[34,20056,20057,20059,20062],{"class":36,"line":10308},[34,20058,4554],{"class":112},[34,20060,20061],{"class":59}," p1;",[34,20063,20064],{"class":40},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[34,20066,20067],{"class":36,"line":10314},[34,20068,2036],{"class":59},[34,20070,20071,20073,20075],{"class":36,"line":10328},[34,20072,5828],{"class":112},[34,20074,6193],{"class":2427},[34,20076,2440],{"class":59},[34,20078,20079],{"class":36,"line":10334},[34,20080,2017],{"class":59},[34,20082,20083,20086,20088,20090],{"class":36,"line":10361},[34,20084,20085],{"class":59},"    Person p ",[34,20087,447],{"class":112},[34,20089,20019],{"class":2427},[34,20091,6100],{"class":59},[34,20093,20094,20096,20098,20100,20102,20104,20106,20108,20110,20112,20114],{"class":36,"line":10370},[34,20095,2022],{"class":59},[34,20097,1648],{"class":112},[34,20099,617],{"class":59},[34,20101,620],{"class":112},[34,20103,6982],{"class":112},[34,20105,1036],{"class":59},[34,20107,961],{"class":112},[34,20109,14],{"class":59},[34,20111,1648],{"class":112},[34,20113,1713],{"class":59},[34,20115,20116],{"class":40},"\u002F\u002F打印p的地址\n",[34,20118,20119],{"class":36,"line":10376},[34,20120,2036],{"class":59},[34,20122,20123],{"class":36,"line":10384},[34,20124,2864],{"emptyLinePlaceholder":540},[34,20126,20127],{"class":36,"line":10389},[34,20128,2864],{"emptyLinePlaceholder":540},[34,20130,20131,20133,20135],{"class":36,"line":17068},[34,20132,620],{"class":112},[34,20134,2437],{"class":2427},[34,20136,2440],{"class":59},[34,20138,20139],{"class":36,"line":17074},[34,20140,2017],{"class":59},[34,20142,20143],{"class":36,"line":17097},[34,20144,20145],{"class":40},"    \u002F\u002F test01();\n",[34,20147,20148],{"class":36,"line":17103},[34,20149,20150],{"class":40},"    \u002F\u002F test02();\n",[34,20152,20153,20156],{"class":36,"line":17126},[34,20154,20155],{"class":2427},"    test03",[34,20157,6100],{"class":59},[34,20159,20160],{"class":36,"line":17140},[34,20161,20162],{"class":40},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[34,20164,20165],{"class":36,"line":17160},[34,20166,20167],{"class":40},"\u002F\u002F 输出结果如下：\n",[34,20169,20170],{"class":36,"line":17166},[34,20171,20172],{"class":40},"\u002F\u002F Person的默认构造函数调用\n",[34,20174,20175],{"class":36,"line":17177},[34,20176,20177],{"class":40},"\u002F\u002F 0x7fffffffceec\n",[34,20179,20180],{"class":36,"line":17200},[34,20181,20177],{"class":40},[34,20183,20184],{"class":36,"line":17222},[34,20185,20186],{"class":40},"\u002F\u002F Person的析构函数调用\n",[34,20188,20189],{"class":36,"line":17227},[34,20190,2864],{"emptyLinePlaceholder":540},[34,20192,20193],{"class":36,"line":17233},[34,20194,20195],{"class":40},"\u002F\u002F 之前的输出结果如下：\n",[34,20197,20198],{"class":36,"line":17247},[34,20199,20172],{"class":40},[34,20201,20202],{"class":36,"line":17260},[34,20203,20204],{"class":40},"\u002F\u002F 地址\n",[34,20206,20207],{"class":36,"line":17265},[34,20208,20209],{"class":40},"\u002F\u002F Person的拷贝构造函数调用\n",[34,20211,20212],{"class":36,"line":17279},[34,20213,20186],{"class":40},[34,20215,20216],{"class":36,"line":17284},[34,20217,20204],{"class":40},[34,20219,20220],{"class":36,"line":17290},[34,20221,20222],{"class":40},"\u002F\u002F (这两次输出的地址也是不同的) \n",[34,20224,20225],{"class":36,"line":17295},[34,20226,20227],{"class":40},"\u002F\u002F Person的析构函数调用     \n",[34,20229,20230,20232,20234],{"class":36,"line":17309},[34,20231,4554],{"class":112},[34,20233,4557],{"class":63},[34,20235,1765],{"class":59},[34,20237,20238],{"class":36,"line":17314},[34,20239,2036],{"class":59},[14,20241,20242],{},"简化版理解",[25,20244,20246],{"className":605,"code":20245,"language":607,"meta":22,"style":22},"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",[31,20247,20248,20256,20260,20266,20279,20290,20294,20306,20319,20327,20331,20347,20360,20369,20373,20378,20384,20397,20401,20405,20412,20416,20420,20425,20433,20437,20453,20466,20479,20483,20488,20496,20500,20504,20509,20514,20530,20538,20545,20551,20555,20559,20564,20572,20576,20580,20603,20610,20614,20618,20626,20630,20640,20662,20666,20670,20674,20682,20686,20691,20696,20702,20706,20716,20720,20728],{"__ignoreMap":22},[34,20249,20250,20252,20254],{"class":36,"line":37},[34,20251,15158],{"class":112},[34,20253,16033],{"class":2427},[34,20255,16036],{"class":59},[34,20257,20258],{"class":36,"line":44},[34,20259,15180],{"class":112},[34,20261,20262,20264],{"class":36,"line":50},[34,20263,18983],{"class":2427},[34,20265,11317],{"class":59},[34,20267,20268,20270,20272,20275,20277],{"class":36,"line":56},[34,20269,10133],{"class":59},[34,20271,1648],{"class":112},[34,20273,20274],{"class":187}," \"无参构造函数!\"",[34,20276,1916],{"class":112},[34,20278,9304],{"class":59},[34,20280,20281,20284,20286,20288],{"class":36,"line":107},[34,20282,20283],{"class":59},"        mAge ",[34,20285,447],{"class":112},[34,20287,4557],{"class":63},[34,20289,1765],{"class":59},[34,20291,20292],{"class":36,"line":196},[34,20293,2651],{"class":59},[34,20295,20296,20298,20300,20302,20304],{"class":36,"line":202},[34,20297,18983],{"class":2427},[34,20299,617],{"class":59},[34,20301,620],{"class":112},[34,20303,16153],{"class":5680},[34,20305,12906],{"class":59},[34,20307,20308,20310,20312,20315,20317],{"class":36,"line":207},[34,20309,10133],{"class":59},[34,20311,1648],{"class":112},[34,20313,20314],{"class":187}," \"有参构造函数!\"",[34,20316,1916],{"class":112},[34,20318,9304],{"class":59},[34,20320,20321,20323,20325],{"class":36,"line":222},[34,20322,20283],{"class":59},[34,20324,447],{"class":112},[34,20326,8261],{"class":59},[34,20328,20329],{"class":36,"line":227},[34,20330,2651],{"class":59},[34,20332,20333,20335,20337,20339,20341,20343,20345],{"class":36,"line":232},[34,20334,18983],{"class":2427},[34,20336,617],{"class":59},[34,20338,7256],{"class":112},[34,20340,16033],{"class":2427},[34,20342,961],{"class":112},[34,20344,7289],{"class":5680},[34,20346,12906],{"class":59},[34,20348,20349,20351,20353,20356,20358],{"class":36,"line":238},[34,20350,10133],{"class":59},[34,20352,1648],{"class":112},[34,20354,20355],{"class":187}," \"拷贝构造函数!\"",[34,20357,1916],{"class":112},[34,20359,9304],{"class":59},[34,20361,20362,20364,20366],{"class":36,"line":244},[34,20363,20283],{"class":59},[34,20365,447],{"class":112},[34,20367,20368],{"class":59}," p.mAge;\n",[34,20370,20371],{"class":36,"line":250},[34,20372,2651],{"class":59},[34,20374,20375],{"class":36,"line":256},[34,20376,20377],{"class":40},"    \u002F\u002F析构函数在释放内存之前调用\n",[34,20379,20380,20382],{"class":36,"line":261},[34,20381,19016],{"class":2427},[34,20383,11317],{"class":59},[34,20385,20386,20388,20390,20393,20395],{"class":36,"line":267},[34,20387,10133],{"class":59},[34,20389,1648],{"class":112},[34,20391,20392],{"class":187}," \"析构函数!\"",[34,20394,1916],{"class":112},[34,20396,9304],{"class":59},[34,20398,20399],{"class":36,"line":2138},[34,20400,2651],{"class":59},[34,20402,20403],{"class":36,"line":2143},[34,20404,15180],{"class":112},[34,20406,20407,20409],{"class":36,"line":2157},[34,20408,2449],{"class":112},[34,20410,20411],{"class":59}," mAge;\n",[34,20413,20414],{"class":36,"line":2162},[34,20415,4459],{"class":59},[34,20417,20418],{"class":36,"line":2191},[34,20419,2864],{"emptyLinePlaceholder":540},[34,20421,20422],{"class":36,"line":2196},[34,20423,20424],{"class":40},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[34,20426,20427,20429,20431],{"class":36,"line":2213},[34,20428,5828],{"class":112},[34,20430,6052],{"class":2427},[34,20432,11317],{"class":59},[34,20434,20435],{"class":36,"line":2218},[34,20436,2864],{"emptyLinePlaceholder":540},[34,20438,20439,20441,20444,20446,20448,20450],{"class":36,"line":2223},[34,20440,19895],{"class":59},[34,20442,20443],{"class":2427},"man",[34,20445,617],{"class":59},[34,20447,919],{"class":63},[34,20449,6430],{"class":59},[34,20451,20452],{"class":40}," \u002F\u002Fp对象已经创建完毕\n",[34,20454,20455,20457,20460,20463],{"class":36,"line":2228},[34,20456,19895],{"class":59},[34,20458,20459],{"class":2427},"newman",[34,20461,20462],{"class":59},"(man);",[34,20464,20465],{"class":40}," \u002F\u002F调用拷贝构造函数\n",[34,20467,20468,20471,20473,20476],{"class":36,"line":2242},[34,20469,20470],{"class":59},"    Person newman2 ",[34,20472,447],{"class":112},[34,20474,20475],{"class":59}," man;",[34,20477,20478],{"class":40}," \u002F\u002F拷贝构造\n",[34,20480,20481],{"class":36,"line":2247},[34,20482,2864],{"emptyLinePlaceholder":540},[34,20484,20485],{"class":36,"line":3041},[34,20486,20487],{"class":40},"    \u002F\u002FPerson newman3;\n",[34,20489,20490,20493],{"class":36,"line":3055},[34,20491,20492],{"class":40},"    \u002F\u002Fnewman3 = man;",[34,20494,20495],{"class":40}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[34,20497,20498],{"class":36,"line":3063},[34,20499,2036],{"class":59},[34,20501,20502],{"class":36,"line":3068},[34,20503,2864],{"emptyLinePlaceholder":540},[34,20505,20506],{"class":36,"line":3074},[34,20507,20508],{"class":40},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[34,20510,20511],{"class":36,"line":3080},[34,20512,20513],{"class":40},"\u002F\u002F相当于Person p1 = p;\n",[34,20515,20516,20518,20520,20522,20524,20527],{"class":36,"line":3085},[34,20517,5828],{"class":112},[34,20519,19950],{"class":2427},[34,20521,617],{"class":59},[34,20523,19510],{"class":2427},[34,20525,20526],{"class":5680}," p1",[34,20528,20529],{"class":59},") {}\n",[34,20531,20532,20534,20536],{"class":36,"line":8412},[34,20533,5828],{"class":112},[34,20535,6121],{"class":2427},[34,20537,11317],{"class":59},[34,20539,20540,20542],{"class":36,"line":8436},[34,20541,19068],{"class":59},[34,20543,20544],{"class":40}," \u002F\u002F无参构造函数\n",[34,20546,20547,20549],{"class":36,"line":8441},[34,20548,20000],{"class":2427},[34,20550,20003],{"class":59},[34,20552,20553],{"class":36,"line":8447},[34,20554,2036],{"class":59},[34,20556,20557],{"class":36,"line":8474},[34,20558,2864],{"emptyLinePlaceholder":540},[34,20560,20561],{"class":36,"line":8479},[34,20562,20563],{"class":40},"\u002F\u002F3. 以值方式返回局部对象\n",[34,20565,20566,20568,20570],{"class":36,"line":8485},[34,20567,19510],{"class":2427},[34,20569,20019],{"class":2427},[34,20571,2440],{"class":59},[34,20573,20574],{"class":36,"line":8497},[34,20575,2017],{"class":59},[34,20577,20578],{"class":36,"line":8509},[34,20579,19500],{"class":59},[34,20581,20582,20584,20586,20588,20590,20592,20594,20596,20599,20601],{"class":36,"line":8521},[34,20583,6993],{"class":59},[34,20585,1648],{"class":112},[34,20587,2122],{"class":59},[34,20589,620],{"class":112},[34,20591,6982],{"class":112},[34,20593,1036],{"class":59},[34,20595,961],{"class":112},[34,20597,20598],{"class":59},"p1 ",[34,20600,1648],{"class":112},[34,20602,9304],{"class":59},[34,20604,20605,20607],{"class":36,"line":10180},[34,20606,4554],{"class":112},[34,20608,20609],{"class":59}," p1;\n",[34,20611,20612],{"class":36,"line":10205},[34,20613,2036],{"class":59},[34,20615,20616],{"class":36,"line":10228},[34,20617,2864],{"emptyLinePlaceholder":540},[34,20619,20620,20622,20624],{"class":36,"line":10252},[34,20621,5828],{"class":112},[34,20623,6193],{"class":2427},[34,20625,2440],{"class":59},[34,20627,20628],{"class":36,"line":10257},[34,20629,2017],{"class":59},[34,20631,20632,20634,20636,20638],{"class":36,"line":10262},[34,20633,20085],{"class":59},[34,20635,447],{"class":112},[34,20637,20019],{"class":2427},[34,20639,6100],{"class":59},[34,20641,20642,20644,20646,20648,20650,20652,20654,20656,20658,20660],{"class":36,"line":10267},[34,20643,6993],{"class":59},[34,20645,1648],{"class":112},[34,20647,2122],{"class":59},[34,20649,620],{"class":112},[34,20651,6982],{"class":112},[34,20653,1036],{"class":59},[34,20655,961],{"class":112},[34,20657,11912],{"class":59},[34,20659,1648],{"class":112},[34,20661,9304],{"class":59},[34,20663,20664],{"class":36,"line":10276},[34,20665,2036],{"class":59},[34,20667,20668],{"class":36,"line":10281},[34,20669,2864],{"emptyLinePlaceholder":540},[34,20671,20672],{"class":36,"line":10287},[34,20673,2864],{"emptyLinePlaceholder":540},[34,20675,20676,20678,20680],{"class":36,"line":10308},[34,20677,620],{"class":112},[34,20679,2437],{"class":2427},[34,20681,11317],{"class":59},[34,20683,20684],{"class":36,"line":10314},[34,20685,2864],{"emptyLinePlaceholder":540},[34,20687,20688],{"class":36,"line":10328},[34,20689,20690],{"class":40},"    \u002F\u002Ftest01();\n",[34,20692,20693],{"class":36,"line":10334},[34,20694,20695],{"class":40},"    \u002F\u002Ftest02();\n",[34,20697,20698,20700],{"class":36,"line":10361},[34,20699,20155],{"class":2427},[34,20701,6100],{"class":59},[34,20703,20704],{"class":36,"line":10370},[34,20705,2864],{"emptyLinePlaceholder":540},[34,20707,20708,20710,20712,20714],{"class":36,"line":10376},[34,20709,2767],{"class":2427},[34,20711,617],{"class":59},[34,20713,2772],{"class":187},[34,20715,3183],{"class":59},[34,20717,20718],{"class":36,"line":10384},[34,20719,2864],{"emptyLinePlaceholder":540},[34,20721,20722,20724,20726],{"class":36,"line":10389},[34,20723,4554],{"class":112},[34,20725,4557],{"class":63},[34,20727,1765],{"class":59},[34,20729,20730],{"class":36,"line":17068},[34,20731,2036],{"class":59},[584,20733,20735],{"id":20734},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20737,20738],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20740,20741],{},"1．默认构造函数(无参，函数体为空)",[14,20743,20744],{},"2．默认析构函数(无参，函数体为空)",[14,20746,20747],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20749,20750],{},"构造函数调用规则如下：",[1611,20752,20753,20756],{},[570,20754,20755],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[570,20757,20758],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[25,20760,20762],{"className":605,"code":20761,"language":607,"meta":22,"style":22},"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",[31,20763,20764,20772,20776,20781,20787,20799,20803,20808,20820,20829,20841,20845,20849,20865,20874,20886,20890,20894,20900,20912,20916,20920,20926,20930,20934,20942,20946,20958,20963,20971,20975,20993,20997,21001,21009,21013,21018,21026,21041,21054,21058,21063,21070,21086,21099,21103,21107,21115,21119,21125,21129,21139,21143,21151],{"__ignoreMap":22},[34,20765,20766,20768,20770],{"class":36,"line":37},[34,20767,15158],{"class":112},[34,20769,16033],{"class":2427},[34,20771,16036],{"class":59},[34,20773,20774],{"class":36,"line":44},[34,20775,15180],{"class":112},[34,20777,20778],{"class":36,"line":50},[34,20779,20780],{"class":40},"    \u002F\u002F无参（默认）构造函数\n",[34,20782,20783,20785],{"class":36,"line":56},[34,20784,18983],{"class":2427},[34,20786,11317],{"class":59},[34,20788,20789,20791,20793,20795,20797],{"class":36,"line":107},[34,20790,10133],{"class":59},[34,20792,1648],{"class":112},[34,20794,20274],{"class":187},[34,20796,1916],{"class":112},[34,20798,9304],{"class":59},[34,20800,20801],{"class":36,"line":196},[34,20802,2651],{"class":59},[34,20804,20805],{"class":36,"line":202},[34,20806,20807],{"class":40},"    \u002F\u002F有参构造函数\n",[34,20809,20810,20812,20814,20816,20818],{"class":36,"line":207},[34,20811,18983],{"class":2427},[34,20813,617],{"class":59},[34,20815,620],{"class":112},[34,20817,1870],{"class":5680},[34,20819,12906],{"class":59},[34,20821,20822,20825,20827],{"class":36,"line":222},[34,20823,20824],{"class":59},"        age ",[34,20826,447],{"class":112},[34,20828,1904],{"class":59},[34,20830,20831,20833,20835,20837,20839],{"class":36,"line":227},[34,20832,10133],{"class":59},[34,20834,1648],{"class":112},[34,20836,20314],{"class":187},[34,20838,1916],{"class":112},[34,20840,9304],{"class":59},[34,20842,20843],{"class":36,"line":232},[34,20844,2651],{"class":59},[34,20846,20847],{"class":36,"line":238},[34,20848,19338],{"class":40},[34,20850,20851,20853,20855,20857,20859,20861,20863],{"class":36,"line":244},[34,20852,18983],{"class":2427},[34,20854,617],{"class":59},[34,20856,7256],{"class":112},[34,20858,16033],{"class":2427},[34,20860,961],{"class":112},[34,20862,7289],{"class":5680},[34,20864,12906],{"class":59},[34,20866,20867,20869,20871],{"class":36,"line":250},[34,20868,20824],{"class":59},[34,20870,447],{"class":112},[34,20872,20873],{"class":59}," p.age;\n",[34,20875,20876,20878,20880,20882,20884],{"class":36,"line":256},[34,20877,10133],{"class":59},[34,20879,1648],{"class":112},[34,20881,20355],{"class":187},[34,20883,1916],{"class":112},[34,20885,9304],{"class":59},[34,20887,20888],{"class":36,"line":261},[34,20889,2651],{"class":59},[34,20891,20892],{"class":36,"line":267},[34,20893,19011],{"class":40},[34,20895,20896,20898],{"class":36,"line":2138},[34,20897,19016],{"class":2427},[34,20899,11317],{"class":59},[34,20901,20902,20904,20906,20908,20910],{"class":36,"line":2143},[34,20903,10133],{"class":59},[34,20905,1648],{"class":112},[34,20907,20392],{"class":187},[34,20909,1916],{"class":112},[34,20911,9304],{"class":59},[34,20913,20914],{"class":36,"line":2157},[34,20915,2651],{"class":59},[34,20917,20918],{"class":36,"line":2162},[34,20919,15180],{"class":112},[34,20921,20922,20924],{"class":36,"line":2191},[34,20923,2449],{"class":112},[34,20925,8261],{"class":59},[34,20927,20928],{"class":36,"line":2196},[34,20929,4459],{"class":59},[34,20931,20932],{"class":36,"line":2213},[34,20933,2864],{"emptyLinePlaceholder":540},[34,20935,20936,20938,20940],{"class":36,"line":2218},[34,20937,5828],{"class":112},[34,20939,6052],{"class":2427},[34,20941,2440],{"class":59},[34,20943,20944],{"class":36,"line":2223},[34,20945,2017],{"class":59},[34,20947,20948,20950,20952,20954,20956],{"class":36,"line":2228},[34,20949,19895],{"class":59},[34,20951,7594],{"class":2427},[34,20953,617],{"class":59},[34,20955,1256],{"class":63},[34,20957,3183],{"class":59},[34,20959,20960],{"class":36,"line":2242},[34,20961,20962],{"class":40},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[34,20964,20965,20967,20969],{"class":36,"line":2247},[34,20966,19895],{"class":59},[34,20968,7497],{"class":2427},[34,20970,17979],{"class":59},[34,20972,20973],{"class":36,"line":3041},[34,20974,2864],{"emptyLinePlaceholder":540},[34,20976,20977,20979,20981,20984,20986,20989,20991],{"class":36,"line":3055},[34,20978,6993],{"class":59},[34,20980,1648],{"class":112},[34,20982,20983],{"class":187}," \"p2的年龄为： \"",[34,20985,1916],{"class":112},[34,20987,20988],{"class":59}," p2.age ",[34,20990,1648],{"class":112},[34,20992,9304],{"class":59},[34,20994,20995],{"class":36,"line":3063},[34,20996,2036],{"class":59},[34,20998,20999],{"class":36,"line":3068},[34,21000,2864],{"emptyLinePlaceholder":540},[34,21002,21003,21005,21007],{"class":36,"line":3074},[34,21004,5828],{"class":112},[34,21006,6121],{"class":2427},[34,21008,2440],{"class":59},[34,21010,21011],{"class":36,"line":3080},[34,21012,2017],{"class":59},[34,21014,21015],{"class":36,"line":3085},[34,21016,21017],{"class":40},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[34,21019,21020,21023],{"class":36,"line":8412},[34,21021,21022],{"class":59},"    Person p1;",[34,21024,21025],{"class":40}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[34,21027,21028,21030,21032,21034,21036,21038],{"class":36,"line":8436},[34,21029,19895],{"class":59},[34,21031,7497],{"class":2427},[34,21033,617],{"class":59},[34,21035,1053],{"class":63},[34,21037,6430],{"class":59},[34,21039,21040],{"class":40}," \u002F\u002F用户提供的有参\n",[34,21042,21043,21045,21048,21051],{"class":36,"line":8441},[34,21044,19895],{"class":59},[34,21046,21047],{"class":2427},"p3",[34,21049,21050],{"class":59},"(p2);",[34,21052,21053],{"class":40}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[34,21055,21056],{"class":36,"line":8447},[34,21057,2864],{"emptyLinePlaceholder":540},[34,21059,21060],{"class":36,"line":8474},[34,21061,21062],{"class":40},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[34,21064,21065,21068],{"class":36,"line":8479},[34,21066,21067],{"class":59},"    Person p4;",[34,21069,21025],{"class":40},[34,21071,21072,21074,21077,21079,21081,21083],{"class":36,"line":8485},[34,21073,19895],{"class":59},[34,21075,21076],{"class":2427},"p5",[34,21078,617],{"class":59},[34,21080,1053],{"class":63},[34,21082,6430],{"class":59},[34,21084,21085],{"class":40}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[34,21087,21088,21090,21093,21096],{"class":36,"line":8497},[34,21089,19895],{"class":59},[34,21091,21092],{"class":2427},"p6",[34,21094,21095],{"class":59},"(p5);",[34,21097,21098],{"class":40}," \u002F\u002F用户自己提供拷贝构造\n",[34,21100,21101],{"class":36,"line":8509},[34,21102,2036],{"class":59},[34,21104,21105],{"class":36,"line":8521},[34,21106,2864],{"emptyLinePlaceholder":540},[34,21108,21109,21111,21113],{"class":36,"line":10180},[34,21110,620],{"class":112},[34,21112,2437],{"class":2427},[34,21114,11317],{"class":59},[34,21116,21117],{"class":36,"line":10205},[34,21118,2864],{"emptyLinePlaceholder":540},[34,21120,21121,21123],{"class":36,"line":10228},[34,21122,6097],{"class":2427},[34,21124,6100],{"class":59},[34,21126,21127],{"class":36,"line":10252},[34,21128,2864],{"emptyLinePlaceholder":540},[34,21130,21131,21133,21135,21137],{"class":36,"line":10257},[34,21132,2767],{"class":2427},[34,21134,617],{"class":59},[34,21136,2772],{"class":187},[34,21138,3183],{"class":59},[34,21140,21141],{"class":36,"line":10262},[34,21142,2864],{"emptyLinePlaceholder":540},[34,21144,21145,21147,21149],{"class":36,"line":10267},[34,21146,4554],{"class":112},[34,21148,4557],{"class":63},[34,21150,1765],{"class":59},[34,21152,21153],{"class":36,"line":10276},[34,21154,2036],{"class":59},[584,21156,21158],{"id":21157},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21160,21161],{},"浅拷贝：简单的赋值拷贝操作",[14,21163,21164],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[25,21166,21168],{"className":605,"code":21167,"language":607,"meta":22,"style":22},"#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",[31,21169,21170,21176,21186,21192,21196,21200,21205,21211,21215,21228,21232,21236,21243,21247,21257,21272,21285,21289,21294,21299,21315,21319,21332,21337,21342,21347,21356,21361,21376,21380,21384,21388,21394,21398,21403,21418,21422,21433,21447,21451,21460,21464,21470,21482,21486,21494,21498,21515,21546,21554,21582,21586,21590,21598,21602,21608],{"__ignoreMap":22},[34,21171,21172,21174],{"class":36,"line":37},[34,21173,2413],{"class":112},[34,21175,2416],{"class":187},[34,21177,21178,21180,21182,21184],{"class":36,"line":44},[34,21179,2421],{"class":112},[34,21181,2424],{"class":112},[34,21183,2428],{"class":2427},[34,21185,1765],{"class":59},[34,21187,21188,21190],{"class":36,"line":50},[34,21189,15158],{"class":112},[34,21191,15635],{"class":2427},[34,21193,21194],{"class":36,"line":56},[34,21195,2017],{"class":59},[34,21197,21198],{"class":36,"line":107},[34,21199,15180],{"class":112},[34,21201,21202],{"class":36,"line":196},[34,21203,21204],{"class":40},"    \u002F\u002F默认构造函数\n",[34,21206,21207,21209],{"class":36,"line":202},[34,21208,18983],{"class":2427},[34,21210,2440],{"class":59},[34,21212,21213],{"class":36,"line":207},[34,21214,2494],{"class":59},[34,21216,21217,21219,21221,21224,21226],{"class":36,"line":222},[34,21218,3915],{"class":59},[34,21220,1648],{"class":112},[34,21222,21223],{"class":187},"\"默认构造函数\"",[34,21225,1648],{"class":112},[34,21227,1670],{"class":59},[34,21229,21230],{"class":36,"line":227},[34,21231,2651],{"class":59},[34,21233,21234],{"class":36,"line":232},[34,21235,20807],{"class":40},[34,21237,21238,21240],{"class":36,"line":238},[34,21239,19016],{"class":2427},[34,21241,21242],{"class":59},"(int age,int height)\n",[34,21244,21245],{"class":36,"line":244},[34,21246,2494],{"class":59},[34,21248,21249,21252,21254],{"class":36,"line":250},[34,21250,21251],{"class":59},"        m_Age",[34,21253,447],{"class":112},[34,21255,21256],{"class":59},"age;\n",[34,21258,21259,21262,21264,21266,21269],{"class":36,"line":256},[34,21260,21261],{"class":59},"        m_Height",[34,21263,12181],{"class":112},[34,21265,2846],{"class":112},[34,21267,21268],{"class":59},"(height);",[34,21270,21271],{"class":40},"\u002F\u002F放到堆区\n",[34,21273,21274,21276,21278,21281,21283],{"class":36,"line":261},[34,21275,3915],{"class":59},[34,21277,1648],{"class":112},[34,21279,21280],{"class":187},"\"有参构造函数\"",[34,21282,1648],{"class":112},[34,21284,1670],{"class":59},[34,21286,21287],{"class":36,"line":267},[34,21288,2651],{"class":59},[34,21290,21291],{"class":36,"line":2138},[34,21292,21293],{"class":40},"    \u002F\u002F深拷贝解决上述问题\n",[34,21295,21296],{"class":36,"line":2143},[34,21297,21298],{"class":40},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[34,21300,21301,21303,21305,21307,21309,21311,21313],{"class":36,"line":2157},[34,21302,18983],{"class":2427},[34,21304,617],{"class":59},[34,21306,7256],{"class":112},[34,21308,16033],{"class":2427},[34,21310,11048],{"class":112},[34,21312,14],{"class":5680},[34,21314,623],{"class":59},[34,21316,21317],{"class":36,"line":2162},[34,21318,2494],{"class":59},[34,21320,21321,21323,21325,21328,21330],{"class":36,"line":2191},[34,21322,3915],{"class":59},[34,21324,1648],{"class":112},[34,21326,21327],{"class":187},"\"拷贝构造函数\"",[34,21329,1648],{"class":112},[34,21331,1670],{"class":59},[34,21333,21334],{"class":36,"line":2196},[34,21335,21336],{"class":40},"        \u002F\u002F编译器默认的写如下注释部分\n",[34,21338,21339],{"class":36,"line":2213},[34,21340,21341],{"class":40},"        \u002F\u002Fm_Age=p.m_Age;\n",[34,21343,21344],{"class":36,"line":2218},[34,21345,21346],{"class":40},"        \u002F\u002Fm_Height=p.m_Height;\n",[34,21348,21349,21351,21353],{"class":36,"line":2223},[34,21350,21251],{"class":59},[34,21352,447],{"class":112},[34,21354,21355],{"class":59},"p.m_Age;\n",[34,21357,21358],{"class":36,"line":2228},[34,21359,21360],{"class":40},"        \u002F\u002F深拷贝操作\n",[34,21362,21363,21365,21367,21369,21371,21373],{"class":36,"line":2242},[34,21364,21261],{"class":59},[34,21366,12181],{"class":112},[34,21368,2846],{"class":112},[34,21370,617],{"class":59},[34,21372,1062],{"class":112},[34,21374,21375],{"class":59},"p.m_Height);\n",[34,21377,21378],{"class":36,"line":2247},[34,21379,2651],{"class":59},[34,21381,21382],{"class":36,"line":3041},[34,21383,2864],{"emptyLinePlaceholder":540},[34,21385,21386],{"class":36,"line":3055},[34,21387,19011],{"class":40},[34,21389,21390,21392],{"class":36,"line":3063},[34,21391,19016],{"class":2427},[34,21393,2440],{"class":59},[34,21395,21396],{"class":36,"line":3068},[34,21397,2494],{"class":59},[34,21399,21400],{"class":36,"line":3074},[34,21401,21402],{"class":40},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[34,21404,21405,21407,21410,21413,21416],{"class":36,"line":3080},[34,21406,2961],{"class":112},[34,21408,21409],{"class":59},"(m_Height ",[34,21411,21412],{"class":112},"!=",[34,21414,21415],{"class":63}," NULL",[34,21417,623],{"class":59},[34,21419,21420],{"class":36,"line":3085},[34,21421,2974],{"class":59},[34,21423,21424,21427,21430],{"class":36,"line":8412},[34,21425,21426],{"class":112},"            delete",[34,21428,21429],{"class":59}," m_Height;",[34,21431,21432],{"class":40}," \u002F\u002F释放堆区内存\n",[34,21434,21435,21438,21440,21442,21444],{"class":36,"line":8436},[34,21436,21437],{"class":59},"            m_Height",[34,21439,447],{"class":112},[34,21441,2856],{"class":63},[34,21443,670],{"class":59},[34,21445,21446],{"class":40}," \u002F\u002F防止野指针\n",[34,21448,21449],{"class":36,"line":8441},[34,21450,2993],{"class":59},[34,21452,21453,21455,21457],{"class":36,"line":8447},[34,21454,3915],{"class":59},[34,21456,1648],{"class":112},[34,21458,21459],{"class":187},"\"Person的析构函数调用\"\n",[34,21461,21462],{"class":36,"line":8474},[34,21463,2651],{"class":59},[34,21465,21466,21468],{"class":36,"line":8479},[34,21467,2449],{"class":112},[34,21469,16130],{"class":59},[34,21471,21472,21474,21476,21479],{"class":36,"line":8485},[34,21473,2449],{"class":112},[34,21475,6982],{"class":112},[34,21477,21478],{"class":59},"m_Height;",[34,21480,21481],{"class":40}," \u002F\u002F定义一个指针，指向身高\n",[34,21483,21484],{"class":36,"line":8497},[34,21485,4459],{"class":59},[34,21487,21488,21490,21492],{"class":36,"line":8509},[34,21489,5828],{"class":112},[34,21491,6052],{"class":2427},[34,21493,2440],{"class":59},[34,21495,21496],{"class":36,"line":8521},[34,21497,2017],{"class":59},[34,21499,21500,21502,21504,21506,21508,21510,21513],{"class":36,"line":10180},[34,21501,19895],{"class":59},[34,21503,7594],{"class":2427},[34,21505,617],{"class":59},[34,21507,1256],{"class":63},[34,21509,67],{"class":59},[34,21511,21512],{"class":63},"160",[34,21514,3183],{"class":59},[34,21516,21517,21519,21521,21524,21526,21529,21531,21534,21536,21539,21541,21543],{"class":36,"line":10205},[34,21518,2022],{"class":59},[34,21520,1648],{"class":112},[34,21522,21523],{"class":187},"\"p1的年龄为:\"",[34,21525,1648],{"class":112},[34,21527,21528],{"class":59},"p1.m_Age",[34,21530,1648],{"class":112},[34,21532,21533],{"class":187},"\"身高为：\"",[34,21535,6883],{"class":112},[34,21537,21538],{"class":59},"p1.m_Height",[34,21540,1648],{"class":112},[34,21542,1713],{"class":59},[34,21544,21545],{"class":40},"  \u002F\u002F18\n",[34,21547,21548,21550,21552],{"class":36,"line":10228},[34,21549,19895],{"class":59},[34,21551,7497],{"class":2427},[34,21553,17979],{"class":59},[34,21555,21556,21558,21560,21563,21565,21567,21569,21571,21573,21576,21578,21580],{"class":36,"line":10252},[34,21557,2022],{"class":59},[34,21559,1648],{"class":112},[34,21561,21562],{"class":187},"\"p2的年龄为：\"",[34,21564,1648],{"class":112},[34,21566,19925],{"class":59},[34,21568,1648],{"class":112},[34,21570,21533],{"class":187},[34,21572,6883],{"class":112},[34,21574,21575],{"class":59},"p2.m_Height",[34,21577,1648],{"class":112},[34,21579,1713],{"class":59},[34,21581,21545],{"class":40},[34,21583,21584],{"class":36,"line":10257},[34,21585,13674],{"class":59},[34,21587,21588],{"class":36,"line":10262},[34,21589,2036],{"class":59},[34,21591,21592,21594,21596],{"class":36,"line":10267},[34,21593,620],{"class":112},[34,21595,2437],{"class":2427},[34,21597,2440],{"class":59},[34,21599,21600],{"class":36,"line":10276},[34,21601,2017],{"class":59},[34,21603,21604,21606],{"class":36,"line":10281},[34,21605,6097],{"class":2427},[34,21607,6100],{"class":59},[34,21609,21610],{"class":36,"line":10287},[34,21611,2036],{"class":59},[14,21613,21614],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21616,21617],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21619,21620],{},[20,21621],{"alt":22,"src":21622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21624,21625],{},"浅拷贝问题要使用深拷贝来解决",[14,21627,21628],{},[20,21629],{"alt":22,"src":21630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21632,21633],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[584,21635,21637],{"id":21636},"_826初始化列表","8.2.6初始化列表",[14,21639,21640],{},"作用：初始化属性",[14,21642,5645],{},[25,21644,21647],{"className":21645,"code":21646,"language":5651},[5649],"构造函数():属性1(值1),属性2(值2).....{}\n",[31,21648,21646],{"__ignoreMap":22},[14,21650,21651],{},"例子",[25,21653,21655],{"className":605,"code":21654,"language":607,"meta":22,"style":22},"#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",[31,21656,21657,21663,21673,21679,21683,21688,21692,21697,21702,21707,21712,21717,21722,21726,21731,21736,21779,21788,21806,21824,21842,21846,21850,21857,21864,21871,21875,21879,21887,21891,21895,21915,21924,21928,21932,21942,21946,21954],{"__ignoreMap":22},[34,21658,21659,21661],{"class":36,"line":37},[34,21660,2413],{"class":112},[34,21662,2416],{"class":187},[34,21664,21665,21667,21669,21671],{"class":36,"line":44},[34,21666,2421],{"class":112},[34,21668,2424],{"class":112},[34,21670,2428],{"class":2427},[34,21672,1765],{"class":59},[34,21674,21675,21677],{"class":36,"line":50},[34,21676,15158],{"class":112},[34,21678,15635],{"class":2427},[34,21680,21681],{"class":36,"line":56},[34,21682,2017],{"class":59},[34,21684,21685],{"class":36,"line":107},[34,21686,21687],{"class":112},"    public:\n",[34,21689,21690],{"class":36,"line":196},[34,21691,2864],{"emptyLinePlaceholder":540},[34,21693,21694],{"class":36,"line":202},[34,21695,21696],{"class":40},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[34,21698,21699],{"class":36,"line":207},[34,21700,21701],{"class":40},"    \u002F\u002FPerson(int a, int b, int c) {\n",[34,21703,21704],{"class":36,"line":222},[34,21705,21706],{"class":40},"    \u002F\u002F  m_A = a;\n",[34,21708,21709],{"class":36,"line":227},[34,21710,21711],{"class":40},"    \u002F\u002F  m_B = b;\n",[34,21713,21714],{"class":36,"line":232},[34,21715,21716],{"class":40},"    \u002F\u002F  m_C = c;\n",[34,21718,21719],{"class":36,"line":238},[34,21720,21721],{"class":40},"    \u002F\u002F}\n",[34,21723,21724],{"class":36,"line":244},[34,21725,2864],{"emptyLinePlaceholder":540},[34,21727,21728],{"class":36,"line":250},[34,21729,21730],{"class":40},"    \u002F\u002F初始化列表方式初始化\n",[34,21732,21733],{"class":36,"line":256},[34,21734,21735],{"class":40},"    \u002F\u002F使用有参构造函数\n",[34,21737,21738,21740,21742,21744,21746,21748,21750,21752,21754,21756,21758,21761,21764,21767,21770,21773,21776],{"class":36,"line":261},[34,21739,18983],{"class":2427},[34,21741,617],{"class":59},[34,21743,620],{"class":112},[34,21745,1870],{"class":5680},[34,21747,12899],{"class":59},[34,21749,620],{"class":112},[34,21751,3297],{"class":5680},[34,21753,12899],{"class":59},[34,21755,620],{"class":112},[34,21757,3313],{"class":5680},[34,21759,21760],{"class":59},") :",[34,21762,21763],{"class":2427},"m_A",[34,21765,21766],{"class":59},"(a), ",[34,21768,21769],{"class":2427},"m_B",[34,21771,21772],{"class":59},"(b), ",[34,21774,21775],{"class":2427},"m_C",[34,21777,21778],{"class":59},"(c) {}\n",[34,21780,21781,21783,21786],{"class":36,"line":267},[34,21782,15373],{"class":112},[34,21784,21785],{"class":2427}," PrintPerson",[34,21787,11317],{"class":59},[34,21789,21790,21792,21794,21797,21799,21802,21804],{"class":36,"line":2138},[34,21791,10133],{"class":59},[34,21793,1648],{"class":112},[34,21795,21796],{"class":187}," \"mA:\"",[34,21798,1916],{"class":112},[34,21800,21801],{"class":59}," m_A ",[34,21803,1648],{"class":112},[34,21805,9304],{"class":59},[34,21807,21808,21810,21812,21815,21817,21820,21822],{"class":36,"line":2143},[34,21809,10133],{"class":59},[34,21811,1648],{"class":112},[34,21813,21814],{"class":187}," \"mB:\"",[34,21816,1916],{"class":112},[34,21818,21819],{"class":59}," m_B ",[34,21821,1648],{"class":112},[34,21823,9304],{"class":59},[34,21825,21826,21828,21830,21833,21835,21838,21840],{"class":36,"line":2157},[34,21827,10133],{"class":59},[34,21829,1648],{"class":112},[34,21831,21832],{"class":187}," \"mC:\"",[34,21834,1916],{"class":112},[34,21836,21837],{"class":59}," m_C ",[34,21839,1648],{"class":112},[34,21841,9304],{"class":59},[34,21843,21844],{"class":36,"line":2162},[34,21845,2651],{"class":59},[34,21847,21848],{"class":36,"line":2191},[34,21849,15686],{"class":112},[34,21851,21852,21854],{"class":36,"line":2196},[34,21853,2449],{"class":112},[34,21855,21856],{"class":59}," m_A;\n",[34,21858,21859,21861],{"class":36,"line":2213},[34,21860,2449],{"class":112},[34,21862,21863],{"class":59}," m_B;\n",[34,21865,21866,21868],{"class":36,"line":2218},[34,21867,2449],{"class":112},[34,21869,21870],{"class":59}," m_C;\n",[34,21872,21873],{"class":36,"line":2223},[34,21874,4459],{"class":59},[34,21876,21877],{"class":36,"line":2228},[34,21878,2864],{"emptyLinePlaceholder":540},[34,21880,21881,21883,21885],{"class":36,"line":2242},[34,21882,620],{"class":112},[34,21884,2437],{"class":2427},[34,21886,6442],{"class":59},[34,21888,21889],{"class":36,"line":2247},[34,21890,2017],{"class":59},[34,21892,21893],{"class":36,"line":3041},[34,21894,2864],{"emptyLinePlaceholder":540},[34,21896,21897,21899,21901,21903,21905,21907,21909,21911,21913],{"class":36,"line":3055},[34,21898,19895],{"class":59},[34,21900,14],{"class":2427},[34,21902,617],{"class":59},[34,21904,64],{"class":63},[34,21906,12899],{"class":59},[34,21908,70],{"class":63},[34,21910,12899],{"class":59},[34,21912,309],{"class":63},[34,21914,3183],{"class":59},[34,21916,21917,21919,21922],{"class":36,"line":3063},[34,21918,16330],{"class":59},[34,21920,21921],{"class":2427},"PrintPerson",[34,21923,6100],{"class":59},[34,21925,21926],{"class":36,"line":3068},[34,21927,2864],{"emptyLinePlaceholder":540},[34,21929,21930],{"class":36,"line":3074},[34,21931,2864],{"emptyLinePlaceholder":540},[34,21933,21934,21936,21938,21940],{"class":36,"line":3080},[34,21935,2767],{"class":2427},[34,21937,617],{"class":59},[34,21939,2772],{"class":187},[34,21941,3183],{"class":59},[34,21943,21944],{"class":36,"line":3085},[34,21945,2864],{"emptyLinePlaceholder":540},[34,21947,21948,21950,21952],{"class":36,"line":8412},[34,21949,4554],{"class":112},[34,21951,4557],{"class":63},[34,21953,1765],{"class":59},[34,21955,21956],{"class":36,"line":8436},[34,21957,2036],{"class":59},[14,21959,21960,21961,21964,21965],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[760,21962,21963],{},"参数名就是定义的对象属性","，",[760,21966,21967],{},"属性后面的值为有参构造函数的形参",[25,21969,21971],{"className":605,"code":21970,"language":607,"meta":22,"style":22},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[31,21972,21973],{"__ignoreMap":22},[34,21974,21975,21977,21979,21981,21984,21986,21989,21991,21994,21996,21999,22001,22004,22006],{"class":36,"line":37},[34,21976,19510],{"class":2427},[34,21978,617],{"class":59},[34,21980,620],{"class":112},[34,21982,21983],{"class":59}," a.",[34,21985,620],{"class":112},[34,21987,21988],{"class":59}," b,",[34,21990,620],{"class":112},[34,21992,21993],{"class":59}," b):",[34,21995,21763],{"class":2427},[34,21997,21998],{"class":59},"(a),",[34,22000,21769],{"class":2427},[34,22002,22003],{"class":59},"(c),",[34,22005,21775],{"class":2427},[34,22007,22008],{"class":59},"(b) {}\n",[584,22010,22012],{"id":22011},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,22014,22015],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,22017,15097],{},[25,22019,22021],{"className":605,"code":22020,"language":607,"meta":22,"style":22},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[31,22022,22023,22028,22033,22037,22042,22046],{"__ignoreMap":22},[34,22024,22025],{"class":36,"line":37},[34,22026,22027],{"class":59},"A{};\n",[34,22029,22030],{"class":36,"line":44},[34,22031,22032],{"class":59},"B\n",[34,22034,22035],{"class":36,"line":50},[34,22036,2017],{"class":59},[34,22038,22039],{"class":36,"line":56},[34,22040,22041],{"class":59},"    A a;\n",[34,22043,22044],{"class":36,"line":107},[34,22045,2036],{"class":59},[34,22047,22048],{"class":36,"line":196},[34,22049,22050],{"class":40},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22052,22053],{},"案例",[25,22055,22057],{"className":605,"code":22056,"language":607,"meta":22,"style":22},"\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",[31,22058,22059,22064,22071,22075,22080,22085,22099,22103,22113,22124,22128,22135,22139,22152,22156,22161,22166,22170,22176,22180,22184,22188,22219,22223,22234,22238,22244,22248,22261,22265,22269,22273,22278,22283,22287,22295,22299,22316,22335,22339,22347,22351,22357],{"__ignoreMap":22},[34,22060,22061],{"class":36,"line":37},[34,22062,22063],{"class":40},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[34,22065,22066,22068],{"class":36,"line":44},[34,22067,15158],{"class":112},[34,22069,22070],{"class":2427}," Phone\n",[34,22072,22073],{"class":36,"line":50},[34,22074,2017],{"class":59},[34,22076,22077],{"class":36,"line":56},[34,22078,22079],{"class":59},"public：\n",[34,22081,22082],{"class":36,"line":107},[34,22083,22084],{"class":40},"    \u002F\u002F 赋值(构造函数)\n",[34,22086,22087,22090,22092,22094,22097],{"class":36,"line":196},[34,22088,22089],{"class":2427},"    Phone",[34,22091,617],{"class":59},[34,22093,15381],{"class":2427},[34,22095,22096],{"class":5680}," pName",[34,22098,623],{"class":59},[34,22100,22101],{"class":36,"line":202},[34,22102,2494],{"class":59},[34,22104,22105,22108,22110],{"class":36,"line":207},[34,22106,22107],{"class":59},"        m_pName",[34,22109,447],{"class":112},[34,22111,22112],{"class":59},"pName;\n",[34,22114,22115,22117,22119,22122],{"class":36,"line":222},[34,22116,3915],{"class":59},[34,22118,1648],{"class":112},[34,22120,22121],{"class":187},"\"Phone的构造函数调用\"",[34,22123,1765],{"class":59},[34,22125,22126],{"class":36,"line":227},[34,22127,2651],{"class":59},[34,22129,22130,22133],{"class":36,"line":232},[34,22131,22132],{"class":2427},"    ~Phone",[34,22134,2440],{"class":59},[34,22136,22137],{"class":36,"line":238},[34,22138,2494],{"class":59},[34,22140,22141,22143,22145,22148,22150],{"class":36,"line":244},[34,22142,3915],{"class":59},[34,22144,1648],{"class":112},[34,22146,22147],{"class":187},"\"Phone析构函数调用\"",[34,22149,1648],{"class":112},[34,22151,1670],{"class":59},[34,22153,22154],{"class":36,"line":250},[34,22155,2651],{"class":59},[34,22157,22158],{"class":36,"line":256},[34,22159,22160],{"class":40},"    \u002F\u002F\n",[34,22162,22163],{"class":36,"line":261},[34,22164,22165],{"class":59},"    string m_PName;\n",[34,22167,22168],{"class":36,"line":267},[34,22169,4459],{"class":59},[34,22171,22172,22174],{"class":36,"line":2138},[34,22173,15158],{"class":112},[34,22175,15635],{"class":2427},[34,22177,22178],{"class":36,"line":2143},[34,22179,2017],{"class":59},[34,22181,22182],{"class":36,"line":2157},[34,22183,15180],{"class":112},[34,22185,22186],{"class":36,"line":2162},[34,22187,17458],{"class":40},[34,22189,22190,22192,22194,22196,22198,22200,22202,22205,22208,22210,22213,22216],{"class":36,"line":2191},[34,22191,18983],{"class":2427},[34,22193,617],{"class":59},[34,22195,15381],{"class":2427},[34,22197,15384],{"class":5680},[34,22199,67],{"class":59},[34,22201,15381],{"class":2427},[34,22203,22204],{"class":5680}," pname",[34,22206,22207],{"class":59},"):",[34,22209,15474],{"class":2427},[34,22211,22212],{"class":59},"(name),m_phone.",[34,22214,22215],{"class":2427},"m_PName",[34,22217,22218],{"class":59},"(pname) \n",[34,22220,22221],{"class":36,"line":2196},[34,22222,2494],{"class":59},[34,22224,22225,22227,22229,22232],{"class":36,"line":2213},[34,22226,3915],{"class":59},[34,22228,1648],{"class":112},[34,22230,22231],{"class":187},"\"Person的构造函数调用\"",[34,22233,1765],{"class":59},[34,22235,22236],{"class":36,"line":2218},[34,22237,2651],{"class":59},[34,22239,22240,22242],{"class":36,"line":2223},[34,22241,19016],{"class":2427},[34,22243,2440],{"class":59},[34,22245,22246],{"class":36,"line":2228},[34,22247,2494],{"class":59},[34,22249,22250,22252,22254,22257,22259],{"class":36,"line":2242},[34,22251,3915],{"class":59},[34,22253,1648],{"class":112},[34,22255,22256],{"class":187},"\"Person析构函数调用\"",[34,22258,1648],{"class":112},[34,22260,1670],{"class":59},[34,22262,22263],{"class":36,"line":2247},[34,22264,2651],{"class":59},[34,22266,22267],{"class":36,"line":3041},[34,22268,8244],{"class":40},[34,22270,22271],{"class":36,"line":3055},[34,22272,15356],{"class":59},[34,22274,22275],{"class":36,"line":3063},[34,22276,22277],{"class":40},"    \u002F\u002F手机\n",[34,22279,22280],{"class":36,"line":3068},[34,22281,22282],{"class":59},"    Phone m_Phone;\n",[34,22284,22285],{"class":36,"line":3074},[34,22286,4459],{"class":59},[34,22288,22289,22291,22293],{"class":36,"line":3080},[34,22290,5828],{"class":112},[34,22292,6052],{"class":2427},[34,22294,2440],{"class":59},[34,22296,22297],{"class":36,"line":3085},[34,22298,2017],{"class":59},[34,22300,22301,22303,22305,22307,22309,22311,22314],{"class":36,"line":8412},[34,22302,19895],{"class":59},[34,22304,14],{"class":2427},[34,22306,617],{"class":59},[34,22308,8380],{"class":187},[34,22310,67],{"class":59},[34,22312,22313],{"class":187},"\"安卓\"",[34,22315,3183],{"class":59},[34,22317,22318,22320,22322,22325,22327,22330,22332],{"class":36,"line":8436},[34,22319,2022],{"class":59},[34,22321,1648],{"class":112},[34,22323,22324],{"class":59},"p.Name",[34,22326,1648],{"class":112},[34,22328,22329],{"class":187},"\"拿着：\"",[34,22331,1648],{"class":112},[34,22333,22334],{"class":59},"p.m_phone.m_PName;\n",[34,22336,22337],{"class":36,"line":8441},[34,22338,2036],{"class":59},[34,22340,22341,22343,22345],{"class":36,"line":8447},[34,22342,620],{"class":112},[34,22344,2437],{"class":2427},[34,22346,2440],{"class":59},[34,22348,22349],{"class":36,"line":8474},[34,22350,2017],{"class":59},[34,22352,22353,22355],{"class":36,"line":8479},[34,22354,6097],{"class":2427},[34,22356,6100],{"class":59},[34,22358,22359],{"class":36,"line":8485},[34,22360,2036],{"class":59},[14,22362,9489],{},[25,22364,22366],{"className":605,"code":22365,"language":607,"meta":22,"style":22},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[31,22367,22368,22373],{"__ignoreMap":22},[34,22369,22370],{"class":36,"line":37},[34,22371,22372],{"class":40},"    \u002F\u002F不需要写这个：\n",[34,22374,22375],{"class":36,"line":44},[34,22376,22377],{"class":40},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22379,22380],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[25,22382,22384],{"className":605,"code":22383,"language":607,"meta":22,"style":22},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[31,22385,22386],{"__ignoreMap":22},[34,22387,22388,22390,22393,22395,22398,22401],{"class":36,"line":37},[34,22389,19510],{"class":2427},[34,22391,22392],{"class":59},"(string name.string pname):",[34,22394,15474],{"class":2427},[34,22396,22397],{"class":59},"(name),",[34,22399,22400],{"class":2427},"m_phone",[34,22402,22403],{"class":59},"(pname) {}\n",[14,22405,22406,22407,447,22410],{},"采用的是隐式转换法，实际为如下：\n",[31,22408,22409],{},"m_phone(pname)",[31,22411,22412],{},"Phone m_phone=pname",[14,22414,22415,22418],{},[760,22416,22417],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22420,22421],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[584,22423,22425],{"id":22424},"_828静态对象","8.2.8静态对象",[14,22427,22428],{},"静态对象在成员对象前static，称为静态对象",[14,22430,22431],{},"静态对象分为两类：",[567,22433,22434],{},[570,22435,22436],{},"静态成员变量",[1611,22438,22439,22442,22445],{},[570,22440,22441],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[570,22443,22444],{},"②在编译阶段分配内存",[570,22446,22447],{},"③类内声明，类外初始化",[567,22449,22450],{"start":44},[570,22451,22452],{},"静态成员函数",[1611,22454,22455,22458],{},[570,22456,22457],{},"①所有对象共享同一个函数",[570,22459,22460],{},"②静态成员函数只能访问静态成员变量",[22462,22463,22465],"h4",{"id":22464},"_8281静态成员变量","8.2.8.1静态成员变量",[25,22467,22469],{"className":605,"code":22468,"language":607,"meta":22,"style":22},"#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",[31,22470,22471,22477,22487,22493,22497,22501,22506,22511,22516,22524,22528,22532,22536,22544,22548,22552,22557,22570,22574,22582,22586,22592],{"__ignoreMap":22},[34,22472,22473,22475],{"class":36,"line":37},[34,22474,2413],{"class":112},[34,22476,2416],{"class":187},[34,22478,22479,22481,22483,22485],{"class":36,"line":44},[34,22480,2421],{"class":112},[34,22482,2424],{"class":112},[34,22484,2428],{"class":2427},[34,22486,1765],{"class":59},[34,22488,22489,22491],{"class":36,"line":50},[34,22490,15158],{"class":112},[34,22492,15635],{"class":2427},[34,22494,22495],{"class":36,"line":56},[34,22496,2017],{"class":59},[34,22498,22499],{"class":36,"line":107},[34,22500,15180],{"class":112},[34,22502,22503],{"class":36,"line":196},[34,22504,22505],{"class":40},"    \u002F\u002F非静态成员变量\n",[34,22507,22508],{"class":36,"line":202},[34,22509,22510],{"class":40},"    \u002F\u002F int m_A;\n",[34,22512,22513],{"class":36,"line":207},[34,22514,22515],{"class":40},"    \u002F\u002F定义静态成员变量\n",[34,22517,22518,22520,22522],{"class":36,"line":222},[34,22519,11484],{"class":112},[34,22521,2846],{"class":112},[34,22523,21856],{"class":59},[34,22525,22526],{"class":36,"line":227},[34,22527,2864],{"emptyLinePlaceholder":540},[34,22529,22530],{"class":36,"line":232},[34,22531,2864],{"emptyLinePlaceholder":540},[34,22533,22534],{"class":36,"line":238},[34,22535,4459],{"class":59},[34,22537,22538,22540,22542],{"class":36,"line":244},[34,22539,5828],{"class":112},[34,22541,6052],{"class":2427},[34,22543,2440],{"class":59},[34,22545,22546],{"class":36,"line":250},[34,22547,2017],{"class":59},[34,22549,22550],{"class":36,"line":256},[34,22551,15777],{"class":59},[34,22553,22554],{"class":36,"line":261},[34,22555,22556],{"class":40},"    \u002F\u002F输出类成员变量这块内存\n",[34,22558,22559,22561,22563,22566,22568],{"class":36,"line":267},[34,22560,2022],{"class":59},[34,22562,1648],{"class":112},[34,22564,22565],{"class":59},"p.m_A",[34,22567,1648],{"class":112},[34,22569,1670],{"class":59},[34,22571,22572],{"class":36,"line":2138},[34,22573,2036],{"class":59},[34,22575,22576,22578,22580],{"class":36,"line":2143},[34,22577,620],{"class":112},[34,22579,2437],{"class":2427},[34,22581,2440],{"class":59},[34,22583,22584],{"class":36,"line":2157},[34,22585,2017],{"class":59},[34,22587,22588,22590],{"class":36,"line":2162},[34,22589,6097],{"class":2427},[34,22591,2440],{"class":59},[34,22593,22594],{"class":36,"line":2191},[34,22595,2036],{"class":59},[14,22597,22598],{},"此时输出是报错的：无法解析外部命令",[14,22600,22601],{},"解决这一问题：必须用到类内声明，类外初始化操作",[25,22603,22605],{"className":605,"code":22604,"language":607,"meta":22,"style":22},"#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",[31,22606,22607,22613,22623,22629,22633,22637,22642,22650,22654,22659,22674,22682,22686,22690,22695,22700,22712,22717,22728,22733,22738,22751,22755,22763,22767,22773],{"__ignoreMap":22},[34,22608,22609,22611],{"class":36,"line":37},[34,22610,2413],{"class":112},[34,22612,2416],{"class":187},[34,22614,22615,22617,22619,22621],{"class":36,"line":44},[34,22616,2421],{"class":112},[34,22618,2424],{"class":112},[34,22620,2428],{"class":2427},[34,22622,1765],{"class":59},[34,22624,22625,22627],{"class":36,"line":50},[34,22626,15158],{"class":112},[34,22628,15635],{"class":2427},[34,22630,22631],{"class":36,"line":56},[34,22632,2017],{"class":59},[34,22634,22635],{"class":36,"line":107},[34,22636,15180],{"class":112},[34,22638,22639],{"class":36,"line":196},[34,22640,22641],{"class":40},"    \u002F\u002F类内声明\n",[34,22643,22644,22646,22648],{"class":36,"line":202},[34,22645,11484],{"class":112},[34,22647,2846],{"class":112},[34,22649,21856],{"class":59},[34,22651,22652],{"class":36,"line":207},[34,22653,4459],{"class":59},[34,22655,22656],{"class":36,"line":222},[34,22657,22658],{"class":40},"\u002F\u002F类外初始化\n",[34,22660,22661,22663,22665,22668,22670,22672],{"class":36,"line":227},[34,22662,620],{"class":112},[34,22664,16033],{"class":2427},[34,22666,22667],{"class":59},"::m_A",[34,22669,447],{"class":112},[34,22671,1053],{"class":63},[34,22673,1765],{"class":59},[34,22675,22676,22678,22680],{"class":36,"line":232},[34,22677,5828],{"class":112},[34,22679,6052],{"class":2427},[34,22681,2440],{"class":59},[34,22683,22684],{"class":36,"line":238},[34,22685,2017],{"class":59},[34,22687,22688],{"class":36,"line":244},[34,22689,15777],{"class":59},[34,22691,22692],{"class":36,"line":250},[34,22693,22694],{"class":40},"    \u002F\u002F访问变量的原内存空间\n",[34,22696,22697],{"class":36,"line":256},[34,22698,22699],{"class":40},"    \u002F\u002F100\n",[34,22701,22702,22704,22706,22708,22710],{"class":36,"line":261},[34,22703,2022],{"class":59},[34,22705,1648],{"class":112},[34,22707,22565],{"class":59},[34,22709,1648],{"class":112},[34,22711,1670],{"class":59},[34,22713,22714],{"class":36,"line":267},[34,22715,22716],{"class":59},"    Person p2;\n",[34,22718,22719,22722,22724,22726],{"class":36,"line":2138},[34,22720,22721],{"class":59},"    p2.m_A",[34,22723,447],{"class":112},[34,22725,2186],{"class":63},[34,22727,1765],{"class":59},[34,22729,22730],{"class":36,"line":2143},[34,22731,22732],{"class":40},"    \u002F\u002F继续访问这片空间\n",[34,22734,22735],{"class":36,"line":2157},[34,22736,22737],{"class":40},"    \u002F\u002F200\n",[34,22739,22740,22742,22744,22747,22749],{"class":36,"line":2162},[34,22741,2022],{"class":59},[34,22743,1648],{"class":112},[34,22745,22746],{"class":59},"p2.m_A",[34,22748,1648],{"class":112},[34,22750,1670],{"class":59},[34,22752,22753],{"class":36,"line":2191},[34,22754,2036],{"class":59},[34,22756,22757,22759,22761],{"class":36,"line":2196},[34,22758,620],{"class":112},[34,22760,2437],{"class":2427},[34,22762,2440],{"class":59},[34,22764,22765],{"class":36,"line":2213},[34,22766,2017],{"class":59},[34,22768,22769,22771],{"class":36,"line":2218},[34,22770,6097],{"class":2427},[34,22772,6100],{"class":59},[34,22774,22775],{"class":36,"line":2223},[34,22776,2036],{"class":59},[14,22778,22779],{},[760,22780,22781],{},"静态变量的访问",[25,22783,22785],{"className":605,"code":22784,"language":607,"meta":22,"style":22},"#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",[31,22786,22787,22793,22803,22809,22813,22817,22821,22829,22833,22838,22846,22850,22854,22868,22883,22891,22895,22900,22905,22910,22915,22927,22932,22937,22951,22968,22972,22980,22984,22990],{"__ignoreMap":22},[34,22788,22789,22791],{"class":36,"line":37},[34,22790,2413],{"class":112},[34,22792,2416],{"class":187},[34,22794,22795,22797,22799,22801],{"class":36,"line":44},[34,22796,2421],{"class":112},[34,22798,2424],{"class":112},[34,22800,2428],{"class":2427},[34,22802,1765],{"class":59},[34,22804,22805,22807],{"class":36,"line":50},[34,22806,15158],{"class":112},[34,22808,15635],{"class":2427},[34,22810,22811],{"class":36,"line":56},[34,22812,2017],{"class":59},[34,22814,22815],{"class":36,"line":107},[34,22816,15180],{"class":112},[34,22818,22819],{"class":36,"line":196},[34,22820,22641],{"class":40},[34,22822,22823,22825,22827],{"class":36,"line":202},[34,22824,11484],{"class":112},[34,22826,2846],{"class":112},[34,22828,21856],{"class":59},[34,22830,22831],{"class":36,"line":207},[34,22832,15686],{"class":112},[34,22834,22835],{"class":36,"line":222},[34,22836,22837],{"class":40},"    \u002F\u002F静态成员变量也是有访问权限的\n",[34,22839,22840,22842,22844],{"class":36,"line":227},[34,22841,11484],{"class":112},[34,22843,2846],{"class":112},[34,22845,21863],{"class":59},[34,22847,22848],{"class":36,"line":232},[34,22849,4459],{"class":59},[34,22851,22852],{"class":36,"line":238},[34,22853,22658],{"class":40},[34,22855,22856,22858,22860,22862,22864,22866],{"class":36,"line":244},[34,22857,620],{"class":112},[34,22859,16033],{"class":2427},[34,22861,22667],{"class":59},[34,22863,447],{"class":112},[34,22865,1053],{"class":63},[34,22867,1765],{"class":59},[34,22869,22870,22872,22874,22877,22879,22881],{"class":36,"line":250},[34,22871,620],{"class":112},[34,22873,16033],{"class":2427},[34,22875,22876],{"class":59},"::m_B",[34,22878,447],{"class":112},[34,22880,1306],{"class":63},[34,22882,1765],{"class":59},[34,22884,22885,22887,22889],{"class":36,"line":256},[34,22886,5828],{"class":112},[34,22888,6121],{"class":2427},[34,22890,2440],{"class":59},[34,22892,22893],{"class":36,"line":261},[34,22894,2017],{"class":59},[34,22896,22897],{"class":36,"line":267},[34,22898,22899],{"class":40},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[34,22901,22902],{"class":36,"line":2138},[34,22903,22904],{"class":40},"    \u002F\u002F静态成员变量有两种访问方式：\n",[34,22906,22907],{"class":36,"line":2143},[34,22908,22909],{"class":40},"    \u002F\u002F1.通过对象进行访问\n",[34,22911,22912],{"class":36,"line":2157},[34,22913,22914],{"class":59},"    Person p;  \n",[34,22916,22917,22919,22921,22923,22925],{"class":36,"line":2162},[34,22918,2022],{"class":59},[34,22920,1648],{"class":112},[34,22922,22565],{"class":59},[34,22924,1648],{"class":112},[34,22926,1670],{"class":59},[34,22928,22929],{"class":36,"line":2191},[34,22930,22931],{"class":40},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[34,22933,22934],{"class":36,"line":2196},[34,22935,22936],{"class":40},"    \u002F\u002F2.通过类名进行访问\n",[34,22938,22939,22941,22943,22945,22947,22949],{"class":36,"line":2213},[34,22940,2022],{"class":59},[34,22942,1648],{"class":112},[34,22944,19510],{"class":2427},[34,22946,22667],{"class":59},[34,22948,1648],{"class":112},[34,22950,1670],{"class":59},[34,22952,22953,22955,22957,22959,22961,22963,22965],{"class":36,"line":2218},[34,22954,2022],{"class":59},[34,22956,1648],{"class":112},[34,22958,19510],{"class":2427},[34,22960,22876],{"class":59},[34,22962,1648],{"class":112},[34,22964,1713],{"class":59},[34,22966,22967],{"class":40}," \u002F\u002F没有访问权限，报错\n",[34,22969,22970],{"class":36,"line":2223},[34,22971,2036],{"class":59},[34,22973,22974,22976,22978],{"class":36,"line":2228},[34,22975,620],{"class":112},[34,22977,2437],{"class":2427},[34,22979,2440],{"class":59},[34,22981,22982],{"class":36,"line":2242},[34,22983,2017],{"class":59},[34,22985,22986,22988],{"class":36,"line":2247},[34,22987,6166],{"class":2427},[34,22989,6100],{"class":59},[34,22991,22992],{"class":36,"line":3041},[34,22993,2036],{"class":59},[22462,22995,22997],{"id":22996},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22999,23000],{},"1.静态成员函数定义与访问",[25,23002,23004],{"className":605,"code":23003,"language":607,"meta":22,"style":22},"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",[31,23005,23006,23012,23016,23020,23025,23036,23040,23054,23058,23062,23070,23074,23079,23084,23088,23096,23101,23111],{"__ignoreMap":22},[34,23007,23008,23010],{"class":36,"line":37},[34,23009,15158],{"class":112},[34,23011,15635],{"class":2427},[34,23013,23014],{"class":36,"line":44},[34,23015,2017],{"class":59},[34,23017,23018],{"class":36,"line":50},[34,23019,15180],{"class":112},[34,23021,23022],{"class":36,"line":56},[34,23023,23024],{"class":40},"    \u002F\u002F在公共权限下定义静态成员函数\n",[34,23026,23027,23029,23032,23034],{"class":36,"line":107},[34,23028,11484],{"class":112},[34,23030,23031],{"class":112}," void",[34,23033,11849],{"class":2427},[34,23035,2440],{"class":59},[34,23037,23038],{"class":36,"line":196},[34,23039,2494],{"class":59},[34,23041,23042,23045,23047,23050,23052],{"class":36,"line":202},[34,23043,23044],{"class":59},"        coout",[34,23046,1648],{"class":112},[34,23048,23049],{"class":187},"\"静态成员函数的调用\"",[34,23051,1648],{"class":112},[34,23053,1670],{"class":59},[34,23055,23056],{"class":36,"line":207},[34,23057,2651],{"class":59},[34,23059,23060],{"class":36,"line":222},[34,23061,4459],{"class":59},[34,23063,23064,23066,23068],{"class":36,"line":227},[34,23065,5828],{"class":112},[34,23067,6052],{"class":2427},[34,23069,2440],{"class":59},[34,23071,23072],{"class":36,"line":232},[34,23073,2017],{"class":59},[34,23075,23076],{"class":36,"line":238},[34,23077,23078],{"class":40},"    \u002F\u002F静态成员函数的调用方式:\n",[34,23080,23081],{"class":36,"line":244},[34,23082,23083],{"class":40},"    \u002F\u002F1.通过对象访问\n",[34,23085,23086],{"class":36,"line":250},[34,23087,15777],{"class":59},[34,23089,23090,23092,23094],{"class":36,"line":256},[34,23091,16330],{"class":59},[34,23093,12015],{"class":2427},[34,23095,6100],{"class":59},[34,23097,23098],{"class":36,"line":261},[34,23099,23100],{"class":40},"    \u002F\u002F2.通过类名访问\n",[34,23102,23103,23105,23107,23109],{"class":36,"line":267},[34,23104,18983],{"class":2427},[34,23106,18196],{"class":59},[34,23108,12015],{"class":2427},[34,23110,6100],{"class":59},[34,23112,23113],{"class":36,"line":2138},[34,23114,2036],{"class":59},[567,23116,23117],{"start":44},[570,23118,23119],{},"静态成员函数只能访问静态成员变量",[25,23121,23123],{"className":605,"code":23122,"language":607,"meta":22,"style":22},"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",[31,23124,23125,23131,23135,23139,23143,23153,23157,23171,23176,23188,23192,23203,23213,23217,23221,23225,23235,23239,23252,23256,23260,23264,23268,23282,23290,23294,23298,23302,23306,23314,23318,23328,23333,23337,23345,23349,23355],{"__ignoreMap":22},[34,23126,23127,23129],{"class":36,"line":37},[34,23128,15158],{"class":112},[34,23130,15635],{"class":2427},[34,23132,23133],{"class":36,"line":44},[34,23134,2017],{"class":59},[34,23136,23137],{"class":36,"line":50},[34,23138,15180],{"class":112},[34,23140,23141],{"class":36,"line":56},[34,23142,23024],{"class":40},[34,23144,23145,23147,23149,23151],{"class":36,"line":107},[34,23146,11484],{"class":112},[34,23148,23031],{"class":112},[34,23150,11849],{"class":2427},[34,23152,2440],{"class":59},[34,23154,23155],{"class":36,"line":196},[34,23156,2494],{"class":59},[34,23158,23159,23162,23164,23166,23168],{"class":36,"line":202},[34,23160,23161],{"class":59},"        m_A",[34,23163,447],{"class":112},[34,23165,919],{"class":63},[34,23167,670],{"class":59},[34,23169,23170],{"class":40}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[34,23172,23173],{"class":36,"line":207},[34,23174,23175],{"class":40},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[34,23177,23178,23180,23182,23184,23186],{"class":36,"line":222},[34,23179,23044],{"class":59},[34,23181,1648],{"class":112},[34,23183,23049],{"class":187},[34,23185,1648],{"class":112},[34,23187,1670],{"class":59},[34,23189,23190],{"class":36,"line":227},[34,23191,2651],{"class":59},[34,23193,23194,23196,23198,23200],{"class":36,"line":232},[34,23195,11484],{"class":112},[34,23197,2846],{"class":112},[34,23199,15912],{"class":59},[34,23201,23202],{"class":40}," \u002F\u002F静态成员变量\n",[34,23204,23205,23207,23210],{"class":36,"line":238},[34,23206,2449],{"class":112},[34,23208,23209],{"class":59}," m_B;",[34,23211,23212],{"class":40}," \u002F\u002F非静态成员变量\n",[34,23214,23215],{"class":36,"line":244},[34,23216,2864],{"emptyLinePlaceholder":540},[34,23218,23219],{"class":36,"line":250},[34,23220,15686],{"class":112},[34,23222,23223],{"class":36,"line":256},[34,23224,22837],{"class":40},[34,23226,23227,23229,23231,23233],{"class":36,"line":261},[34,23228,11484],{"class":112},[34,23230,23031],{"class":112},[34,23232,14082],{"class":2427},[34,23234,2440],{"class":59},[34,23236,23237],{"class":36,"line":267},[34,23238,2494],{"class":59},[34,23240,23241,23243,23245,23248,23250],{"class":36,"line":2138},[34,23242,3915],{"class":59},[34,23244,1648],{"class":112},[34,23246,23247],{"class":187},"\"这是私有权限下的静态函数调用\"",[34,23249,1648],{"class":112},[34,23251,1670],{"class":59},[34,23253,23254],{"class":36,"line":2143},[34,23255,2651],{"class":59},[34,23257,23258],{"class":36,"line":2157},[34,23259,2864],{"emptyLinePlaceholder":540},[34,23261,23262],{"class":36,"line":2162},[34,23263,2864],{"emptyLinePlaceholder":540},[34,23265,23266],{"class":36,"line":2191},[34,23267,4459],{"class":59},[34,23269,23270,23272,23274,23276,23278,23280],{"class":36,"line":2196},[34,23271,620],{"class":112},[34,23273,16033],{"class":2427},[34,23275,22667],{"class":59},[34,23277,447],{"class":112},[34,23279,319],{"class":63},[34,23281,1765],{"class":59},[34,23283,23284,23286,23288],{"class":36,"line":2213},[34,23285,5828],{"class":112},[34,23287,6052],{"class":2427},[34,23289,2440],{"class":59},[34,23291,23292],{"class":36,"line":2218},[34,23293,2017],{"class":59},[34,23295,23296],{"class":36,"line":2223},[34,23297,23078],{"class":40},[34,23299,23300],{"class":36,"line":2228},[34,23301,23083],{"class":40},[34,23303,23304],{"class":36,"line":2242},[34,23305,15777],{"class":59},[34,23307,23308,23310,23312],{"class":36,"line":2247},[34,23309,16330],{"class":59},[34,23311,12015],{"class":2427},[34,23313,6100],{"class":59},[34,23315,23316],{"class":36,"line":3041},[34,23317,23100],{"class":40},[34,23319,23320,23322,23324,23326],{"class":36,"line":3055},[34,23321,18983],{"class":2427},[34,23323,18196],{"class":59},[34,23325,12015],{"class":2427},[34,23327,6100],{"class":59},[34,23329,23330],{"class":36,"line":3063},[34,23331,23332],{"class":40},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[34,23334,23335],{"class":36,"line":3068},[34,23336,2036],{"class":59},[34,23338,23339,23341,23343],{"class":36,"line":3074},[34,23340,620],{"class":112},[34,23342,2437],{"class":2427},[34,23344,2440],{"class":59},[34,23346,23347],{"class":36,"line":3080},[34,23348,2017],{"class":59},[34,23350,23351,23353],{"class":36,"line":3085},[34,23352,6097],{"class":2427},[34,23354,6100],{"class":59},[34,23356,23357],{"class":36,"line":8412},[34,23358,2036],{"class":59},[584,23360,23362],{"id":23361},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22462,23364,23366],{"id":23365},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23368,23369],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23371,23372],{},"只有非静态成员变量才属于类的对象上",[23374,23375,23377],"h5",{"id":23376},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[25,23379,23381],{"className":605,"code":23380,"language":607,"meta":22,"style":22},"#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",[31,23382,23383,23390,23400,23406,23410,23414,23418,23426,23430,23434,23457,23461,23469,23473,23479],{"__ignoreMap":22},[34,23384,23385,23387],{"class":36,"line":37},[34,23386,2413],{"class":112},[34,23388,23389],{"class":187},"\u003Ciostraem>\n",[34,23391,23392,23394,23396,23398],{"class":36,"line":44},[34,23393,2421],{"class":112},[34,23395,2424],{"class":112},[34,23397,2428],{"class":2427},[34,23399,1765],{"class":59},[34,23401,23402,23404],{"class":36,"line":50},[34,23403,15158],{"class":112},[34,23405,15635],{"class":2427},[34,23407,23408],{"class":36,"line":56},[34,23409,2017],{"class":59},[34,23411,23412],{"class":36,"line":107},[34,23413,2864],{"emptyLinePlaceholder":540},[34,23415,23416],{"class":36,"line":196},[34,23417,4459],{"class":59},[34,23419,23420,23422,23424],{"class":36,"line":202},[34,23421,5828],{"class":112},[34,23423,6052],{"class":2427},[34,23425,2440],{"class":59},[34,23427,23428],{"class":36,"line":207},[34,23429,2017],{"class":59},[34,23431,23432],{"class":36,"line":222},[34,23433,15777],{"class":59},[34,23435,23436,23438,23440,23443,23445,23448,23450,23452,23454],{"class":36,"line":227},[34,23437,2022],{"class":59},[34,23439,1648],{"class":112},[34,23441,23442],{"class":187},"\"size of p=\"",[34,23444,1648],{"class":112},[34,23446,23447],{"class":2427},"sizeoif",[34,23449,7003],{"class":59},[34,23451,1648],{"class":112},[34,23453,1713],{"class":59},[34,23455,23456],{"class":40}," \u002F\u002F查看这个空类的占用的内存空间\n",[34,23458,23459],{"class":36,"line":232},[34,23460,2036],{"class":59},[34,23462,23463,23465,23467],{"class":36,"line":238},[34,23464,620],{"class":112},[34,23466,2437],{"class":2427},[34,23468,2440],{"class":59},[34,23470,23471],{"class":36,"line":244},[34,23472,2017],{"class":59},[34,23474,23475,23477],{"class":36,"line":250},[34,23476,6097],{"class":2427},[34,23478,6100],{"class":59},[34,23480,23481],{"class":36,"line":256},[34,23482,2036],{"class":59},[14,23484,23485],{},"输出结果为：size of p=1",[14,23487,23488],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23490,23491],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23374,23493,23495],{"id":23494},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[25,23497,23499],{"className":605,"code":23498,"language":607,"meta":22,"style":22},"#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",[31,23500,23501,23507,23517,23525,23529,23538,23542,23550,23554,23558,23577,23581,23585,23593,23597,23603],{"__ignoreMap":22},[34,23502,23503,23505],{"class":36,"line":37},[34,23504,2413],{"class":112},[34,23506,2416],{"class":187},[34,23508,23509,23511,23513,23515],{"class":36,"line":44},[34,23510,2421],{"class":112},[34,23512,2424],{"class":112},[34,23514,2428],{"class":2427},[34,23516,1765],{"class":59},[34,23518,23519,23521,23523],{"class":36,"line":50},[34,23520,15158],{"class":112},[34,23522,16033],{"class":2427},[34,23524,3138],{"class":59},[34,23526,23527],{"class":36,"line":56},[34,23528,2017],{"class":59},[34,23530,23531,23533,23535],{"class":36,"line":107},[34,23532,2449],{"class":112},[34,23534,15912],{"class":59},[34,23536,23537],{"class":40},"\u002F\u002F非静态成员变量\n",[34,23539,23540],{"class":36,"line":196},[34,23541,4459],{"class":59},[34,23543,23544,23546,23548],{"class":36,"line":202},[34,23545,5828],{"class":112},[34,23547,6052],{"class":2427},[34,23549,2440],{"class":59},[34,23551,23552],{"class":36,"line":207},[34,23553,2017],{"class":59},[34,23555,23556],{"class":36,"line":222},[34,23557,15777],{"class":59},[34,23559,23560,23562,23564,23566,23568,23570,23572,23574],{"class":36,"line":227},[34,23561,2022],{"class":59},[34,23563,1648],{"class":112},[34,23565,23442],{"class":187},[34,23567,1844],{"class":112},[34,23569,7003],{"class":59},[34,23571,1648],{"class":112},[34,23573,1713],{"class":59},[34,23575,23576],{"class":40}," \u002F\u002F查看不是空对象时占用多少内存\n",[34,23578,23579],{"class":36,"line":232},[34,23580,2864],{"emptyLinePlaceholder":540},[34,23582,23583],{"class":36,"line":238},[34,23584,2036],{"class":59},[34,23586,23587,23589,23591],{"class":36,"line":244},[34,23588,620],{"class":112},[34,23590,2437],{"class":2427},[34,23592,2440],{"class":59},[34,23594,23595],{"class":36,"line":250},[34,23596,2017],{"class":59},[34,23598,23599,23601],{"class":36,"line":256},[34,23600,6097],{"class":2427},[34,23602,6100],{"class":59},[34,23604,23605],{"class":36,"line":261},[34,23606,2036],{"class":59},[14,23608,23609],{},"输出结果：size of p=4",[14,23611,23612],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[567,23614,23615],{},[570,23616,23617],{},"如果加上非静态成员变量，Person类修改如下",[25,23619,23621],{"className":605,"code":23620,"language":607,"meta":22,"style":22},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[31,23622,23623,23629,23633,23639,23647,23651,23656],{"__ignoreMap":22},[34,23624,23625,23627],{"class":36,"line":37},[34,23626,15158],{"class":112},[34,23628,15635],{"class":2427},[34,23630,23631],{"class":36,"line":44},[34,23632,2017],{"class":59},[34,23634,23635,23637],{"class":36,"line":50},[34,23636,2449],{"class":112},[34,23638,21856],{"class":59},[34,23640,23641,23643,23645],{"class":36,"line":56},[34,23642,11484],{"class":112},[34,23644,2846],{"class":112},[34,23646,21863],{"class":59},[34,23648,23649],{"class":36,"line":107},[34,23650,4459],{"class":59},[34,23652,23653],{"class":36,"line":196},[34,23654,23655],{"class":40},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[34,23657,23658,23660,23662,23664,23666,23668],{"class":36,"line":202},[34,23659,620],{"class":112},[34,23661,16033],{"class":2427},[34,23663,22876],{"class":59},[34,23665,447],{"class":112},[34,23667,319],{"class":63},[34,23669,1765],{"class":59},[14,23671,23672],{},"输出结果：4",[14,23674,23675],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[567,23677,23678],{"start":44},[570,23679,23680],{},"加上非静态成员函数",[25,23682,23684],{"className":605,"code":23683,"language":607,"meta":22,"style":22},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[31,23685,23686,23693,23697,23703,23711,23715,23719,23723],{"__ignoreMap":22},[34,23687,23688,23690],{"class":36,"line":37},[34,23689,15158],{"class":112},[34,23691,23692],{"class":2427},"  Person\n",[34,23694,23695],{"class":36,"line":44},[34,23696,2017],{"class":59},[34,23698,23699,23701],{"class":36,"line":50},[34,23700,2449],{"class":112},[34,23702,21856],{"class":59},[34,23704,23705,23707,23709],{"class":36,"line":56},[34,23706,15373],{"class":112},[34,23708,11849],{"class":2427},[34,23710,2440],{"class":59},[34,23712,23713],{"class":36,"line":107},[34,23714,2494],{"class":59},[34,23716,23717],{"class":36,"line":196},[34,23718,2864],{"emptyLinePlaceholder":540},[34,23720,23721],{"class":36,"line":202},[34,23722,2651],{"class":59},[34,23724,23725],{"class":36,"line":207},[34,23726,4459],{"class":59},[14,23728,23729],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[567,23731,23732],{"start":50},[570,23733,23734],{},"加上静态成员函数",[25,23736,23738],{"className":605,"code":23737,"language":607,"meta":22,"style":22},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[31,23739,23740,23746,23750,23756,23764,23768,23772,23776,23787,23791,23795,23799],{"__ignoreMap":22},[34,23741,23742,23744],{"class":36,"line":37},[34,23743,15158],{"class":112},[34,23745,23692],{"class":2427},[34,23747,23748],{"class":36,"line":44},[34,23749,2017],{"class":59},[34,23751,23752,23754],{"class":36,"line":50},[34,23753,2449],{"class":112},[34,23755,21856],{"class":59},[34,23757,23758,23760,23762],{"class":36,"line":56},[34,23759,15373],{"class":112},[34,23761,11849],{"class":2427},[34,23763,2440],{"class":59},[34,23765,23766],{"class":36,"line":107},[34,23767,2494],{"class":59},[34,23769,23770],{"class":36,"line":196},[34,23771,2864],{"emptyLinePlaceholder":540},[34,23773,23774],{"class":36,"line":202},[34,23775,2651],{"class":59},[34,23777,23778,23780,23782,23785],{"class":36,"line":207},[34,23779,11484],{"class":112},[34,23781,23031],{"class":112},[34,23783,23784],{"class":2427}," func1",[34,23786,2440],{"class":59},[34,23788,23789],{"class":36,"line":222},[34,23790,2494],{"class":59},[34,23792,23793],{"class":36,"line":227},[34,23794,2864],{"emptyLinePlaceholder":540},[34,23796,23797],{"class":36,"line":232},[34,23798,2651],{"class":59},[34,23800,23801],{"class":36,"line":238},[34,23802,4459],{"class":59},[14,23804,23672],{},[14,23806,23807],{},"解释：静态成员函数也不属于类上",[532,23809,8138],{},{"title":22,"searchDepth":44,"depth":44,"links":23811},[23812,23818],{"id":15109,"depth":44,"text":15110,"children":23813},[23814,23815,23816,23817],{"id":15113,"depth":50,"text":15114},{"id":15838,"depth":50,"text":15839},{"id":16010,"depth":50,"text":16011},{"id":16469,"depth":50,"text":16470},{"id":18841,"depth":44,"text":18842,"children":23819},[23820,23821,23822,23823,23824,23825,23826,23827,23828],{"id":18853,"depth":50,"text":18854},{"id":19146,"depth":50,"text":19147},{"id":19637,"depth":50,"text":19638},{"id":20734,"depth":50,"text":20735},{"id":21157,"depth":50,"text":21158},{"id":21636,"depth":50,"text":21637},{"id":22011,"depth":50,"text":22012},{"id":22424,"depth":50,"text":22425},{"id":23361,"depth":50,"text":23362},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15074,"description":23829},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23836,"title":607,"body":23837,"description":537,"extension":538,"meta":23841,"navigation":540,"path":23843,"seo":23844,"stem":23845,"__hash__":23846},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23838,"toc":23839},[],{"title":22,"searchDepth":44,"depth":44,"links":23840},[],{"category":23842},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":607,"description":537},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23848,"title":23849,"body":23850,"description":22,"extension":538,"meta":24441,"navigation":540,"path":24442,"seo":24443,"stem":24444,"__hash__":24445},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23851,"toc":24423},[23852,23855,23859,23862,23865,23868,23886,23891,23894,23897,23900,23903,23908,23911,23916,23919,23922,23926,23929,23932,23938,23941,23959,23963,23967,23970,23975,23978,23982,23985,23998,24001,24005,24008,24011,24014,24039,24042,24051,24062,24077,24109,24113,24120,24128,24132,24135,24138,24143,24147,24150,24153,24158,24161,24165,24168,24171,24176,24179,24183,24188,24192,24259,24263,24266,24269,24272,24275,24278,24284,24305,24308,24322,24331,24335,24338,24341,24346,24349,24354,24359,24362,24365,24370,24375,24378,24383,24388,24391,24396,24401,24404,24407,24412,24415,24420],[10,23853,23849],{"id":23854},"_1强化学习基本认识",[555,23856,23858],{"id":23857},"_11什么是强化学习","1.1.什么是强化学习",[14,23860,23861],{},"强化学习有两部分组成：智能体和环境；",[14,23863,23864],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23866,23867],{},"强化学习与监督学习的区别:",[567,23869,23870,23873,23876,23879],{},[570,23871,23872],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[570,23874,23875],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[570,23877,23878],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[570,23880,23881,23882,23885],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[760,23883,23884],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23887,23888],{},[20,23889],{"alt":22,"src":23890},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23892,23893],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23895,23896],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23898,23899],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23901,23902],{},"获取奖励",[14,23904,23905],{},[20,23906],{"alt":22,"src":23907},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23909,23910],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23912,23913],{},[20,23914],{"alt":22,"src":23915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23917,23918],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23920,23921],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[555,23923,23925],{"id":23924},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23927,23928],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23930,23931],{},"具身智能中的应用",[14,23933,23934,23937],{},[760,23935,23936],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23939,23940],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23942,23943,23944,23947,23948,23951,23952,23955,23956],{},"机器人是",[760,23945,23946],{},"躯体","，深度学习是",[760,23949,23950],{},"神经元****网络","，VLA是",[760,23953,23954],{},"通用的行为逻辑","，而强化学习是",[760,23957,23958],{},"教练",[555,23960,23962],{"id":23961},"_13序列决策","1.3.序列决策",[584,23964,23966],{"id":23965},"_131智能体与环境","1.3.1.智能体与环境",[14,23968,23969],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23971,23972],{},[20,23973],{"alt":22,"src":23974},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23976,23977],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[584,23979,23981],{"id":23980},"_132奖励","1.3.2.奖励",[14,23983,23984],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23986,23987,23988,23997],{},"取某个策略的表现如何。强化学习的目的就是",[760,23989,23990,23991,23996],{},"最大化",[760,23992,23993],{},[760,23994,23995],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23999,24000],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[584,24002,24004],{"id":24003},"_133序列决策","1.3.3.序列决策",[14,24006,24007],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,24009,24010],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,24012,24013],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,24015,24016,24020,24021,24023,24024,24026,24027,24029,24030,14259,24033,14259,24036],{},[24017,24018,24019],"em",{},"Ht"," = ",[24017,24022,1202],{},"1*, a",[24017,24025,64],{},", r",[24017,24028,64],{},", . . . ,* ",[24017,24031,24032],{},"ot",[24017,24034,24035],{},", at ,",[24017,24037,24038],{},"rt",[14,24040,24041],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24043,24044,24020,24047,2122,24049,1036],{},[24017,24045,24046],{},"st",[24017,24048,667],{},[24017,24050,24019],{},[14,24052,24053,24054,24057,24058,24061],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[760,24055,24056],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[760,24059,24060],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24063,24064,24065,24068,24069,24072,24073,24076],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[760,24066,24067],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[760,24070,24071],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24017,24074,24075],{},"S, A, T, R, Ω, O, γ",")。",[14,24078,24079,24080,24082,24083,24085,24086,617,24088,24091,24092,24094,24095,617,24098,24101,24102,24104,24105,24108],{},"其中 ",[24017,24081,1295],{}," 表示状态空间，为隐变量，",[24017,24084,841],{}," 为动作空间，",[24017,24087,1320],{},[24017,24089,24090],{},"s ′ |s, a",") 为状态转移概率，",[24017,24093,1270],{}," 为奖励函数，",[24017,24096,24097],{},"Ω",[24017,24099,24100],{},"o|s, a",") 为观测概率，",[24017,24103,1196],{}," 为观测空间，",[24017,24106,24107],{},"γ"," 为折扣因子。",[555,24110,24112],{"id":24111},"_14动作空间","1.4.动作空间",[14,24114,24115,24116,24119],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[760,24117,24118],{},"动作空间"," ，动作空间分为:",[567,24121,24122,24125],{},[570,24123,24124],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[570,24126,24127],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[555,24129,24131],{"id":24130},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24133,24134],{},"由策略、价值函数、模型三部分组成",[14,24136,24137],{},"这三者组成马尔可夫决策过程",[14,24139,24140],{},[20,24141],{"alt":22,"src":24142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[584,24144,24146],{"id":24145},"_151策略","1.5.1.策略",[14,24148,24149],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24151,24152],{},"策略可分为两种：",[14,24154,24155],{},[20,24156],{"alt":22,"src":24157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24159,24160],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[584,24162,24164],{"id":24163},"_152价值函数","1.5.2.价值函数",[14,24166,24167],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24169,24170],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24172,24173],{},[20,24174],{"alt":22,"src":24175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24177,24178],{},"进入某个状态采取的最优动作可以通过Q函数得到",[584,24180,24182],{"id":24181},"_153模型","1.5.3.模型",[14,24184,24185],{},[20,24186],{"alt":22,"src":24187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[555,24189,24191],{"id":24190},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[748,24193,24194,24205],{},[751,24195,24196],{},[754,24197,24198,24202],{},[757,24199,24201],{"align":24200},"left","类型",[757,24203,24204],{"align":24200},"特点",[795,24206,24207,24217,24227,24237,24249],{},[754,24208,24209,24214],{},[800,24210,24211],{"align":24200},[760,24212,24213],{},"基于价值的智能体",[800,24215,24216],{"align":24200},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[754,24218,24219,24224],{},[800,24220,24221],{"align":24200},[760,24222,24223],{},"基于策略的智能体",[800,24225,24226],{"align":24200},"直接学习策略，没有学习价值函数",[754,24228,24229,24234],{},[800,24230,24231],{"align":24200},[760,24232,24233],{},"演员-评论员智能体",[800,24235,24236],{"align":24200},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[754,24238,24239,24244],{},[800,24240,24241],{"align":24200},[760,24242,24243],{},"有模型强化学习智能体",[800,24245,24246],{"align":24200},[20,24247],{"alt":22,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[754,24250,24251,24256],{},[800,24252,24253],{"align":24200},[760,24254,24255],{},"免模型强化学习智能体",[800,24257,24258],{"align":24200},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[555,24260,24262],{"id":24261},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24264,24265],{},"学习和规划是序列决策的两个基本问题",[14,24267,24268],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24270,24271],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24273,24274],{},"强化学习用到的库：Gym",[14,24276,24277],{},"Gym可以检验强化学习算法的优劣",[14,24279,24280,24283],{},[760,24281,24282],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[25,24285,24289],{"className":24286,"code":24287,"language":24288,"meta":22,"style":22},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[31,24290,24291],{"__ignoreMap":22},[34,24292,24293,24296,24299,24302],{"class":36,"line":37},[34,24294,24295],{"class":2427},"pip",[34,24297,24298],{"class":187}," install",[34,24300,24301],{"class":187}," gym==",[34,24303,24304],{"class":63},"0.25.2\n",[14,24306,24307],{},"显示图形界面需要",[25,24309,24311],{"className":24286,"code":24310,"language":24288,"meta":22,"style":22},"pip install pygame\n",[31,24312,24313],{"__ignoreMap":22},[34,24314,24315,24317,24319],{"class":36,"line":37},[34,24316,24295],{"class":2427},[34,24318,24298],{"class":187},[34,24320,24321],{"class":187}," pygame\n",[14,24323,24324,24325],{},"有关Gym库的相关文档介绍：",[847,24326,24330],{"href":24327,"rel":24328},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24329],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[555,24332,24334],{"id":24333},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24336,24337],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24339,24340],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24342,24343],{},[20,24344],{"alt":22,"src":24345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24347,24348],{},"折扣率需要自己来设定",[14,24350,24351],{},[20,24352],{"alt":22,"src":24353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[567,24355,24356],{},[570,24357,24358],{},"状态转移函数：",[14,24360,24361],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24363,24364],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24366,24367],{},[20,24368],{"alt":22,"src":24369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[567,24371,24372],{"start":44},[570,24373,24374],{},"动作价值函数：",[14,24376,24377],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24379,24380],{},[20,24381],{"alt":22,"src":24382},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[567,24384,24385],{"start":50},[570,24386,24387],{},"最优动作价值函数：",[14,24389,24390],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[14,24392,24393],{},[20,24394],{"alt":22,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[567,24397,24398],{"start":56},[570,24399,24400],{},"状态价值函数:",[14,24402,24403],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24405,24406],{},"它衡量的是“一个具体动作”的长期价值",[14,24408,24409],{},[20,24410],{"alt":22,"src":24411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24413,24414],{},"几个价值函数之间的比较：",[14,24416,24417],{},[20,24418],{"alt":22,"src":24419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[532,24421,24422],{},"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":22,"searchDepth":44,"depth":44,"links":24424},[24425,24426,24427,24432,24433,24438,24439,24440],{"id":23857,"depth":44,"text":23858},{"id":23924,"depth":44,"text":23925},{"id":23961,"depth":44,"text":23962,"children":24428},[24429,24430,24431],{"id":23965,"depth":50,"text":23966},{"id":23980,"depth":50,"text":23981},{"id":24003,"depth":50,"text":24004},{"id":24111,"depth":44,"text":24112},{"id":24130,"depth":44,"text":24131,"children":24434},[24435,24436,24437],{"id":24145,"depth":50,"text":24146},{"id":24163,"depth":50,"text":24164},{"id":24181,"depth":50,"text":24182},{"id":24190,"depth":44,"text":24191},{"id":24261,"depth":44,"text":24262},{"id":24333,"depth":44,"text":24334},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23849,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24447,"title":24448,"body":24449,"description":24456,"extension":538,"meta":24467,"navigation":540,"path":24468,"seo":24469,"stem":24470,"__hash__":24471},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24450,"toc":24465},[24451,24454,24457,24462],[10,24452,24448],{"id":24453},"_2马尔可夫决策过程",[14,24455,24456],{},"这是强化学习的基本框架",[14,24458,24459],{},[20,24460],{"alt":22,"src":24461},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24463,24464],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":22,"searchDepth":44,"depth":44,"links":24466},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24448,"description":24456},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24473,"title":24474,"body":24475,"description":22,"extension":538,"meta":24591,"navigation":540,"path":24592,"seo":24593,"stem":24594,"__hash__":24595},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24476,"toc":24586},[24477,24480,24484,24487,24492,24497,24500,24505,24508,24513,24516,24520,24525,24528,24533,24538,24543,24546,24550,24555,24558,24563,24568,24573,24578,24581],[10,24478,24474],{"id":24479},"_3动作价值函数",[555,24481,24483],{"id":24482},"_31dqn","3.1.DQN",[14,24485,24486],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24488,24489],{},[20,24490],{"alt":22,"src":24491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24493,24494],{},[20,24495],{"alt":22,"src":24496},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24498,24499],{},"DQN算法的描述：",[14,24501,24502],{},[20,24503],{"alt":22,"src":24504},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24506,24507],{},"这里的Dense指的是全连接层",[14,24509,24510],{},[20,24511],{"alt":22,"src":24512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24514,24515],{},"当前观测的状态为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算法",[555,24517,24519],{"id":24518},"_32dqn的举例","3.2.DQN的举例",[14,24521,24522],{},[20,24523],{"alt":22,"src":24524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24526,24527],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24529,24530],{},[20,24531],{"alt":22,"src":24532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24534,24535],{},[20,24536],{"alt":22,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24539,24540],{},[20,24541],{"alt":22,"src":24542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24544,24545],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[555,24547,24549],{"id":24548},"_33td算法","3.3.TD算法",[14,24551,24552],{},[20,24553],{"alt":22,"src":24554},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24556,24557],{},"强化学习TD算法公式的粗略解释：",[14,24559,24560],{},[20,24561],{"alt":22,"src":24562},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24564,24565],{},[20,24566],{"alt":22,"src":24567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24569,24570],{},[20,24571],{"alt":22,"src":24572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24574,24575],{},[20,24576],{"alt":22,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24579,24580],{},"TD算法总结：",[14,24582,24583],{},[20,24584],{"alt":22,"src":24585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":22,"searchDepth":44,"depth":44,"links":24587},[24588,24589,24590],{"id":24482,"depth":44,"text":24483},{"id":24518,"depth":44,"text":24519},{"id":24548,"depth":44,"text":24549},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24474,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24597,"title":24598,"body":24599,"description":22,"extension":538,"meta":24832,"navigation":540,"path":24833,"seo":24834,"stem":24835,"__hash__":24836},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24600,"toc":24828},[24601,24604,24608,24611,24614,24619,24624,24627,24632,24637,24640,24645,24648,24653,24656,24661,24664,24669,24672,24677,24682,24685,24690,24693,24696,24701,24704,24709,24714,24718,24721,24724,24729,24734,24737,24742,24747,24750,24755,24758,24761,24766,24769,24774,24777,24782,24787,24790,24795,24800,24803,24808,24811,24816,24819],[10,24602,24598],{"id":24603},"_4策略学习",[555,24605,24607],{"id":24606},"_41概念描述","4.1.概念描述",[14,24609,24610],{},"用神经网络（策略网络）近似策略函数",[14,24612,24613],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24615,24616],{},[20,24617],{"alt":22,"src":24618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24620,24621],{},[20,24622],{"alt":22,"src":24623},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24625,24626],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24628,24629],{},[20,24630],{"alt":22,"src":24631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24633,24634],{},[20,24635],{"alt":22,"src":24636},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24638,24639],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24641,24642],{},[20,24643],{"alt":22,"src":24644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24646,24647],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24649,24650],{},[20,24651],{"alt":22,"src":24652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24654,24655],{},"改进theta要用到策略梯度算法",[14,24657,24658],{},[20,24659],{"alt":22,"src":24660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24662,24663],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24665,24666],{},[20,24667],{"alt":22,"src":24668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24670,24671],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24673,24674],{},[20,24675],{"alt":22,"src":24676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24678,24679],{},[20,24680],{"alt":22,"src":24681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24683,24684],{},"梯度公式总结：",[14,24686,24687],{},[20,24688],{"alt":22,"src":24689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24691,24692],{},"两个公式的分别应用场景：",[14,24694,24695],{},"对于离散的动作：",[14,24697,24698],{},[20,24699],{"alt":22,"src":24700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24702,24703],{},"对于连续的动作：",[14,24705,24706],{},[20,24707],{"alt":22,"src":24708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24710,24711],{},[20,24712],{"alt":22,"src":24713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[555,24715,24717],{"id":24716},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24719,24720],{},"使用蒙特卡洛来近似计算策略梯度",[14,24722,24723],{},"蒙特卡洛法的解释如下：",[14,24725,24726],{},[20,24727],{"alt":22,"src":24728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24730,24731],{},[20,24732],{"alt":22,"src":24733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24735,24736],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[567,24738,24739],{},[570,24740,24741],{},"方法一：reinforce算法",[14,24743,24744],{},[20,24745],{"alt":22,"src":24746},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24748,24749],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[567,24751,24752],{"start":44},[570,24753,24754],{},"方法二：actor-critic算法",[14,24756,24757],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24759,24760],{},"两个网络的构建：",[14,24762,24763],{},[20,24764],{"alt":22,"src":24765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24767,24768],{},"actor网路：",[14,24770,24771],{},[20,24772],{"alt":22,"src":24773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24775,24776],{},"critic网络",[14,24778,24779],{},[20,24780],{"alt":22,"src":24781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[567,24783,24784],{"start":50},[570,24785,24786],{},"网络的训练",[14,24788,24789],{},"网络描述",[14,24791,24792],{},[20,24793],{"alt":22,"src":24794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24796,24797],{},[20,24798],{"alt":22,"src":24799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24801,24802],{},"TD算法更新梯度：",[14,24804,24805],{},[20,24806],{"alt":22,"src":24807},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24809,24810],{},"策略网络更新梯度：",[14,24812,24813],{},[20,24814],{"alt":22,"src":24815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24817,24818],{},"训练整个流程的具体描述：",[14,24820,24821,24824,24825],{},[20,24822],{"alt":22,"src":24823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[20,24826],{"alt":22,"src":24827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":22,"searchDepth":44,"depth":44,"links":24829},[24830,24831],{"id":24606,"depth":44,"text":24607},{"id":24716,"depth":44,"text":24717},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24598,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24838,"title":24839,"body":24840,"description":24847,"extension":538,"meta":24897,"navigation":540,"path":24898,"seo":24899,"stem":24900,"__hash__":24901},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24841,"toc":24893},[24842,24845,24848,24852,24855,24860,24864,24867,24872,24875,24880,24885,24888],[10,24843,24839],{"id":24844},"_5alphago算法",[14,24846,24847],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[555,24849,24851],{"id":24850},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24853,24854],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24856,24857],{},[20,24858],{"alt":22,"src":24859},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[555,24861,24863],{"id":24862},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24865,24866],{},"采用强化学习的方式训练策略网络",[14,24868,24869],{},[20,24870],{"alt":22,"src":24871},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24873,24874],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24876,24877],{},[20,24878],{"alt":22,"src":24879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24881,24882],{},[20,24883],{"alt":22,"src":24884},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24886,24887],{},"强化学习训练策略网络的总结：",[14,24889,24890],{},[20,24891],{"alt":22,"src":24892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":22,"searchDepth":44,"depth":44,"links":24894},[24895,24896],{"id":24850,"depth":44,"text":24851},{"id":24862,"depth":44,"text":24863},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24839,"description":24847},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24903,"title":24904,"body":24905,"description":24912,"extension":538,"meta":24915,"navigation":540,"path":24916,"seo":24917,"stem":24918,"__hash__":24919},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24906,"toc":24913},[24907,24910],[10,24908,24904],{"id":24909},"_6价值网络",[14,24911,24912],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":22,"searchDepth":44,"depth":44,"links":24914},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24904,"description":24912},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24921,"title":24922,"body":24923,"description":24927,"extension":538,"meta":24928,"navigation":540,"path":24929,"seo":24930,"stem":24931,"__hash__":24932},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24924,"toc":24925},[],{"title":22,"searchDepth":44,"depth":44,"links":24926},[],"记录自己的强化学习笔记。",{"category":23842},"\u002Fwiki\u002F2025-12-04",{"title":24922,"description":24927},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24934,"title":24935,"body":24936,"description":537,"extension":538,"meta":24975,"navigation":540,"path":24976,"seo":24977,"stem":24978,"__hash__":24979},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24937,"toc":24973},[24938,24941,24944,24950,24953,24959,24962,24967,24970],[10,24939,24935],{"id":24940},"_1-项目概览与官方资源",[14,24942,24943],{},"官方文档：",[14,24945,24946],{},[847,24947,24948],{"href":24948,"rel":24949},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24329],[14,24951,24952],{},"官方代码仓库：",[14,24954,24955],{},[847,24956,24957],{"href":24957,"rel":24958},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24329],[14,24960,24961],{},"复现大体流程：",[14,24963,24964],{},[20,24965],{"alt":22,"src":24966},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24968,24969],{},"本教程的目标是打通这条链路：",[14,24971,24972],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":22,"searchDepth":44,"depth":44,"links":24974},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24935,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24981,"title":24982,"body":24983,"description":537,"extension":538,"meta":25099,"navigation":540,"path":25100,"seo":25101,"stem":25102,"__hash__":25103},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24984,"toc":25094},[24985,24988,24992,24995,25002,25006,25009,25018,25028,25032,25062,25065,25091],[10,24986,24982],{"id":24987},"_2-环境准备与设备连接",[555,24989,24991],{"id":24990},"_21-系统与环境","2.1 系统与环境",[14,24993,24994],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24996,24997,24998,25001],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[31,24999,25000],{},"lerobot"," 依赖。",[555,25003,25005],{"id":25004},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,25007,25008],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[25,25010,25012],{"className":24286,"code":25011,"language":24288,"meta":22,"style":22},"lerobot-find-out\n",[31,25013,25014],{"__ignoreMap":22},[34,25015,25016],{"class":36,"line":37},[34,25017,25011],{"class":2427},[14,25019,25020,25021,822,25024,25027],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[31,25022,25023],{},"\u002Fdev\u002FttyACM0",[31,25025,25026],{},"\u002Fdev\u002FttyACM1","）。",[555,25029,25031],{"id":25030},"_23-串口授权","2.3 串口授权",[25,25033,25035],{"className":24286,"code":25034,"language":24288,"meta":22,"style":22},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[31,25036,25037,25051],{"__ignoreMap":22},[34,25038,25039,25042,25045,25048],{"class":36,"line":37},[34,25040,25041],{"class":2427},"sudo",[34,25043,25044],{"class":187}," chmod",[34,25046,25047],{"class":63}," 666",[34,25049,25050],{"class":187}," \u002Fdev\u002FttyACM0\n",[34,25052,25053,25055,25057,25059],{"class":36,"line":44},[34,25054,25041],{"class":2427},[34,25056,25044],{"class":187},[34,25058,25047],{"class":63},[34,25060,25061],{"class":187}," \u002Fdev\u002FttyACM1\n",[14,25063,25064],{},"说明：",[1611,25066,25067,25072,25078,25088],{},[570,25068,25069,25071],{},[31,25070,25041],{},"：以 root 权限执行命令。",[570,25073,25074,25077],{},[31,25075,25076],{},"chmod","：修改设备节点权限。",[570,25079,25080,25083,25084,25087],{},[31,25081,25082],{},"666","：",[31,25085,25086],{},"rw-rw-rw-","，所有用户可读写。",[570,25089,25090],{},"串口号必须替换为你机器上的真实端口。",[532,25092,25093],{},"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":22,"searchDepth":44,"depth":44,"links":25095},[25096,25097,25098],{"id":24990,"depth":44,"text":24991},{"id":25004,"depth":44,"text":25005},{"id":25030,"depth":44,"text":25031},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24982,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25105,"title":25106,"body":25107,"description":537,"extension":538,"meta":25268,"navigation":540,"path":25269,"seo":25270,"stem":25271,"__hash__":25272},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25108,"toc":25264},[25109,25113,25117,25123,25126,25183,25186,25190,25193,25261],[10,25110,25112],{"id":25111},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[555,25114,25116],{"id":25115},"_31-配置电机-id","3.1 配置电机 ID",[14,25118,25119,25120,25122],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[31,25121,64],{},"，需要改成机械臂链路里不冲突的编号。",[14,25124,25125],{},"方式一：用 LeRobot 命令逐步写入。",[25,25127,25129],{"className":24286,"code":25128,"language":24288,"meta":22,"style":22},"# 主臂舵机配置 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",[31,25130,25131,25136,25144,25151,25156,25160,25165,25171,25178],{"__ignoreMap":22},[34,25132,25133],{"class":36,"line":37},[34,25134,25135],{"class":40},"# 主臂舵机配置 ID\n",[34,25137,25138,25141],{"class":36,"line":44},[34,25139,25140],{"class":2427},"lerobot-setup-motors",[34,25142,25143],{"class":63}," \\\n",[34,25145,25146,25149],{"class":36,"line":50},[34,25147,25148],{"class":63},"  --teleop.type=so101_leader",[34,25150,25143],{"class":63},[34,25152,25153],{"class":36,"line":56},[34,25154,25155],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[34,25157,25158],{"class":36,"line":107},[34,25159,2864],{"emptyLinePlaceholder":540},[34,25161,25162],{"class":36,"line":196},[34,25163,25164],{"class":40},"# 从臂舵机配置 ID\n",[34,25166,25167,25169],{"class":36,"line":202},[34,25168,25140],{"class":2427},[34,25170,25143],{"class":63},[34,25172,25173,25176],{"class":36,"line":207},[34,25174,25175],{"class":63},"  --robot.type=so101_follower",[34,25177,25143],{"class":63},[34,25179,25180],{"class":36,"line":222},[34,25181,25182],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25184,25185],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[555,25187,25189],{"id":25188},"_32-机械臂校准","3.2 机械臂校准",[14,25191,25192],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[25,25194,25196],{"className":24286,"code":25195,"language":24288,"meta":22,"style":22},"# 主臂校准\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",[31,25197,25198,25203,25210,25216,25223,25228,25232,25237,25243,25249,25256],{"__ignoreMap":22},[34,25199,25200],{"class":36,"line":37},[34,25201,25202],{"class":40},"# 主臂校准\n",[34,25204,25205,25208],{"class":36,"line":44},[34,25206,25207],{"class":2427},"lerobot-calibrate",[34,25209,25143],{"class":63},[34,25211,25212,25214],{"class":36,"line":50},[34,25213,25148],{"class":63},[34,25215,25143],{"class":63},[34,25217,25218,25221],{"class":36,"line":56},[34,25219,25220],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0",[34,25222,25143],{"class":63},[34,25224,25225],{"class":36,"line":107},[34,25226,25227],{"class":63},"  --teleop.id=my_awesome_leader_arm\n",[34,25229,25230],{"class":36,"line":196},[34,25231,2864],{"emptyLinePlaceholder":540},[34,25233,25234],{"class":36,"line":202},[34,25235,25236],{"class":40},"# 从臂校准\n",[34,25238,25239,25241],{"class":36,"line":207},[34,25240,25207],{"class":2427},[34,25242,25143],{"class":63},[34,25244,25245,25247],{"class":36,"line":222},[34,25246,25175],{"class":63},[34,25248,25143],{"class":63},[34,25250,25251,25254],{"class":36,"line":227},[34,25252,25253],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1",[34,25255,25143],{"class":63},[34,25257,25258],{"class":36,"line":232},[34,25259,25260],{"class":63},"  --robot.id=my_awesome_follower_arm\n",[532,25262,25263],{},"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":22,"searchDepth":44,"depth":44,"links":25265},[25266,25267],{"id":25115,"depth":44,"text":25116},{"id":25188,"depth":44,"text":25189},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25106,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25274,"title":25275,"body":25276,"description":537,"extension":538,"meta":25467,"navigation":540,"path":25468,"seo":25469,"stem":25470,"__hash__":25471},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25277,"toc":25463},[25278,25281,25285,25332,25336,25349,25412,25415,25460],[10,25279,25275],{"id":25280},"_4-遥操与相机接入",[555,25282,25284],{"id":25283},"_41-不带相机遥操","4.1 不带相机遥操",[25,25286,25288],{"className":24286,"code":25287,"language":24288,"meta":22,"style":22},"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",[31,25289,25290,25297,25303,25309,25316,25322,25328],{"__ignoreMap":22},[34,25291,25292,25295],{"class":36,"line":37},[34,25293,25294],{"class":2427},"lerobot-teleoperate",[34,25296,25143],{"class":63},[34,25298,25299,25301],{"class":36,"line":44},[34,25300,25175],{"class":63},[34,25302,25143],{"class":63},[34,25304,25305,25307],{"class":36,"line":50},[34,25306,25253],{"class":63},[34,25308,25143],{"class":63},[34,25310,25311,25314],{"class":36,"line":56},[34,25312,25313],{"class":63},"  --robot.id=my_awesome_follower_arm",[34,25315,25143],{"class":63},[34,25317,25318,25320],{"class":36,"line":107},[34,25319,25148],{"class":63},[34,25321,25143],{"class":63},[34,25323,25324,25326],{"class":36,"line":196},[34,25325,25220],{"class":63},[34,25327,25143],{"class":63},[34,25329,25330],{"class":36,"line":202},[34,25331,25227],{"class":63},[555,25333,25335],{"id":25334},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[25,25337,25339],{"className":24286,"code":25338,"language":24288,"meta":22,"style":22},"lerobot-find-cameras opencv\n",[31,25340,25341],{"__ignoreMap":22},[34,25342,25343,25346],{"class":36,"line":37},[34,25344,25345],{"class":2427},"lerobot-find-cameras",[34,25347,25348],{"class":187}," opencv\n",[25,25350,25352],{"className":24286,"code":25351,"language":24288,"meta":22,"style":22},"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",[31,25353,25354,25360,25366,25372,25378,25388,25394,25400,25407],{"__ignoreMap":22},[34,25355,25356,25358],{"class":36,"line":37},[34,25357,25294],{"class":2427},[34,25359,25143],{"class":63},[34,25361,25362,25364],{"class":36,"line":44},[34,25363,25175],{"class":63},[34,25365,25143],{"class":63},[34,25367,25368,25370],{"class":36,"line":50},[34,25369,25253],{"class":63},[34,25371,25143],{"class":63},[34,25373,25374,25376],{"class":36,"line":56},[34,25375,25313],{"class":63},[34,25377,25143],{"class":63},[34,25379,25380,25383,25386],{"class":36,"line":107},[34,25381,25382],{"class":63},"  --robot.cameras=",[34,25384,25385],{"class":187},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[34,25387,25143],{"class":63},[34,25389,25390,25392],{"class":36,"line":196},[34,25391,25148],{"class":63},[34,25393,25143],{"class":63},[34,25395,25396,25398],{"class":36,"line":202},[34,25397,25220],{"class":63},[34,25399,25143],{"class":63},[34,25401,25402,25405],{"class":36,"line":207},[34,25403,25404],{"class":63},"  --teleop.id=my_awesome_leader_arm",[34,25406,25143],{"class":63},[34,25408,25409],{"class":36,"line":222},[34,25410,25411],{"class":63},"  --display_data=true\n",[14,25413,25414],{},"相机参数说明：",[1611,25416,25417,25423,25429,25438,25448,25454],{},[570,25418,25419,25422],{},[31,25420,25421],{},"front","：相机名称。",[570,25424,25425,25428],{},[31,25426,25427],{},"type: opencv","：相机驱动类型。",[570,25430,25431,25434,25435,25027],{},[31,25432,25433],{},"index_or_path","：设备编号或设备路径（如 ",[31,25436,25437],{},"\u002Fdev\u002Fvideo4",[570,25439,25440,25443,25444,25447],{},[31,25441,25442],{},"width"," \u002F ",[31,25445,25446],{},"height","：图像分辨率。",[570,25449,25450,25453],{},[31,25451,25452],{},"fps","：采样帧率。",[570,25455,25456,25459],{},[31,25457,25458],{},"--display_data=true","：启用实时可视化。",[532,25461,25462],{},"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":22,"searchDepth":44,"depth":44,"links":25464},[25465,25466],{"id":25283,"depth":44,"text":25284},{"id":25334,"depth":44,"text":25335},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25275,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25473,"title":25474,"body":25475,"description":537,"extension":538,"meta":25647,"navigation":540,"path":25648,"seo":25649,"stem":25650,"__hash__":25651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25476,"toc":25642},[25477,25481,25485,25490,25495,25498,25540,25546,25550,25599,25604,25608,25611,25619,25624,25629,25634,25639],[10,25478,25480],{"id":25479},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[555,25482,25484],{"id":25483},"_51-生成访问令牌","5.1 生成访问令牌",[14,25486,25487],{},[20,25488],{"alt":22,"src":25489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25491,25492],{},[20,25493],{"alt":22,"src":25494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25496,25497],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[25,25499,25501],{"className":24286,"code":25500,"language":24288,"meta":22,"style":22},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[31,25502,25503,25516],{"__ignoreMap":22},[34,25504,25505,25508,25511,25513],{"class":36,"line":37},[34,25506,25507],{"class":112},"export",[34,25509,25510],{"class":59}," HF_TOKEN",[34,25512,447],{"class":112},[34,25514,25515],{"class":187},"\"your_huggingface_token\"\n",[34,25517,25518,25521,25524,25527,25530,25532,25535,25537],{"class":36,"line":44},[34,25519,25520],{"class":2427},"hf",[34,25522,25523],{"class":187}," auth",[34,25525,25526],{"class":187}," login",[34,25528,25529],{"class":63}," --token",[34,25531,10188],{"class":187},[34,25533,25534],{"class":59},"$HF_TOKEN",[34,25536,860],{"class":187},[34,25538,25539],{"class":63}," --add-to-git-credential\n",[14,25541,25542,25545],{},[31,25543,25544],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[555,25547,25549],{"id":25548},"_52-验证登录","5.2 验证登录",[25,25551,25553],{"className":24286,"code":25552,"language":24288,"meta":22,"style":22},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[31,25554,25555,25586],{"__ignoreMap":22},[34,25556,25557,25560,25562,25565,25567,25569,25572,25575,25578,25581,25584],{"class":36,"line":37},[34,25558,25559],{"class":59},"HF_USER",[34,25561,447],{"class":112},[34,25563,25564],{"class":59},"$(",[34,25566,25520],{"class":2427},[34,25568,25523],{"class":187},[34,25570,25571],{"class":187}," whoami",[34,25573,25574],{"class":112}," |",[34,25576,25577],{"class":2427}," head",[34,25579,25580],{"class":63}," -n",[34,25582,25583],{"class":63}," 1",[34,25585,623],{"class":59},[34,25587,25588,25591,25593,25596],{"class":36,"line":44},[34,25589,25590],{"class":63},"echo",[34,25592,10188],{"class":187},[34,25594,25595],{"class":59},"$HF_USER",[34,25597,25598],{"class":187},"\"\n",[14,25600,25601],{},[20,25602],{"alt":22,"src":25603},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[555,25605,25607],{"id":25606},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25609,25610],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1611,25612,25613,25616],{},[570,25614,25615],{},"Dataset Repo（用于上传演示数据）",[570,25617,25618],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25620,25621],{},[20,25622],{"alt":22,"src":25623},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25625,25626],{},[20,25627],{"alt":22,"src":25628},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25630,25631],{},[20,25632],{"alt":22,"src":25633},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25635,25636],{},[20,25637],{"alt":22,"src":25638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[532,25640,25641],{},"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":22,"searchDepth":44,"depth":44,"links":25643},[25644,25645,25646],{"id":25483,"depth":44,"text":25484},{"id":25548,"depth":44,"text":25549},{"id":25606,"depth":44,"text":25607},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25474,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25653,"title":25654,"body":25655,"description":537,"extension":538,"meta":25852,"navigation":540,"path":25853,"seo":25854,"stem":25855,"__hash__":25856},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25656,"toc":25847},[25657,25661,25665,25761,25769,25774,25778,25794,25797,25801,25844],[10,25658,25660],{"id":25659},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[555,25662,25664],{"id":25663},"_61-录制示教数据","6.1 录制示教数据",[25,25666,25668],{"className":24286,"code":25667,"language":24288,"meta":22,"style":22},"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",[31,25669,25670,25677,25683,25689,25695,25704,25710,25716,25722,25729,25739,25746,25756],{"__ignoreMap":22},[34,25671,25672,25675],{"class":36,"line":37},[34,25673,25674],{"class":2427},"lerobot-record",[34,25676,25143],{"class":63},[34,25678,25679,25681],{"class":36,"line":44},[34,25680,25175],{"class":63},[34,25682,25143],{"class":63},[34,25684,25685,25687],{"class":36,"line":50},[34,25686,25253],{"class":63},[34,25688,25143],{"class":63},[34,25690,25691,25693],{"class":36,"line":56},[34,25692,25313],{"class":63},[34,25694,25143],{"class":63},[34,25696,25697,25699,25702],{"class":36,"line":107},[34,25698,25382],{"class":63},[34,25700,25701],{"class":187},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[34,25703,25143],{"class":63},[34,25705,25706,25708],{"class":36,"line":196},[34,25707,25148],{"class":63},[34,25709,25143],{"class":63},[34,25711,25712,25714],{"class":36,"line":202},[34,25713,25220],{"class":63},[34,25715,25143],{"class":63},[34,25717,25718,25720],{"class":36,"line":207},[34,25719,25404],{"class":63},[34,25721,25143],{"class":63},[34,25723,25724,25727],{"class":36,"line":222},[34,25725,25726],{"class":63},"  --display_data=true",[34,25728,25143],{"class":63},[34,25730,25731,25734,25737],{"class":36,"line":227},[34,25732,25733],{"class":63},"  --dataset.repo_id=",[34,25735,25736],{"class":187},"\"Embodied-AI-6\u002Fso101_test\"",[34,25738,25143],{"class":63},[34,25740,25741,25744],{"class":36,"line":232},[34,25742,25743],{"class":63},"  --dataset.num_episodes=10",[34,25745,25143],{"class":63},[34,25747,25748,25751,25754],{"class":36,"line":238},[34,25749,25750],{"class":63},"  --dataset.single_task=",[34,25752,25753],{"class":187},"\"Grab the green cube\"",[34,25755,25143],{"class":63},[34,25757,25758],{"class":36,"line":244},[34,25759,25760],{"class":63},"  --resume=true\n",[1611,25762,25763],{},[570,25764,25765,25768],{},[31,25766,25767],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25770,25771],{},[20,25772],{"alt":22,"src":25773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[555,25775,25777],{"id":25776},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[25,25779,25781],{"className":24286,"code":25780,"language":24288,"meta":22,"style":22},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[31,25782,25783],{"__ignoreMap":22},[34,25784,25785,25788,25791],{"class":36,"line":37},[34,25786,25787],{"class":2427},"rm",[34,25789,25790],{"class":63}," -rf",[34,25792,25793],{"class":187}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25795,25796],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[555,25798,25800],{"id":25799},"_63-回放指定-episode","6.3 回放指定 episode",[25,25802,25804],{"className":24286,"code":25803,"language":24288,"meta":22,"style":22},"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",[31,25805,25806,25813,25819,25825,25831,25839],{"__ignoreMap":22},[34,25807,25808,25811],{"class":36,"line":37},[34,25809,25810],{"class":2427},"lerobot-replay",[34,25812,25143],{"class":63},[34,25814,25815,25817],{"class":36,"line":44},[34,25816,25175],{"class":63},[34,25818,25143],{"class":63},[34,25820,25821,25823],{"class":36,"line":50},[34,25822,25253],{"class":63},[34,25824,25143],{"class":63},[34,25826,25827,25829],{"class":36,"line":56},[34,25828,25313],{"class":63},[34,25830,25143],{"class":63},[34,25832,25833,25835,25837],{"class":36,"line":107},[34,25834,25733],{"class":63},[34,25836,25736],{"class":187},[34,25838,25143],{"class":63},[34,25840,25841],{"class":36,"line":196},[34,25842,25843],{"class":63},"  --dataset.episode=0\n",[532,25845,25846],{},"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":22,"searchDepth":44,"depth":44,"links":25848},[25849,25850,25851],{"id":25663,"depth":44,"text":25664},{"id":25776,"depth":44,"text":25777},{"id":25799,"depth":44,"text":25800},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25654,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25858,"title":25859,"body":25860,"description":537,"extension":538,"meta":25988,"navigation":540,"path":25989,"seo":25990,"stem":25991,"__hash__":25992},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25861,"toc":25986},[25862,25866,25929,25932,25979,25984],[10,25863,25865],{"id":25864},"_7-act-模型训练","7. ACT 模型训练",[25,25867,25869],{"className":24286,"code":25868,"language":24288,"meta":22,"style":22},"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",[31,25870,25871,25878,25886,25893,25900,25907,25914,25921],{"__ignoreMap":22},[34,25872,25873,25876],{"class":36,"line":37},[34,25874,25875],{"class":2427},"lerobot-train",[34,25877,25143],{"class":63},[34,25879,25880,25882,25884],{"class":36,"line":44},[34,25881,25733],{"class":63},[34,25883,25736],{"class":187},[34,25885,25143],{"class":63},[34,25887,25888,25891],{"class":36,"line":50},[34,25889,25890],{"class":63},"  --policy.type=act",[34,25892,25143],{"class":63},[34,25894,25895,25898],{"class":36,"line":56},[34,25896,25897],{"class":63},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[34,25899,25143],{"class":63},[34,25901,25902,25905],{"class":36,"line":107},[34,25903,25904],{"class":63},"  --job_name=act_so101_test",[34,25906,25143],{"class":63},[34,25908,25909,25912],{"class":36,"line":196},[34,25910,25911],{"class":63},"  --policy.device=cuda",[34,25913,25143],{"class":63},[34,25915,25916,25919],{"class":36,"line":202},[34,25917,25918],{"class":63},"  --wandb.enable=false",[34,25920,25143],{"class":63},[34,25922,25923,25926],{"class":36,"line":207},[34,25924,25925],{"class":63},"  --policy.repo_id=",[34,25927,25928],{"class":187},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25930,25931],{},"参数说明：",[1611,25933,25934,25940,25946,25952,25958,25967,25973],{},[570,25935,25936,25939],{},[31,25937,25938],{},"--dataset.repo_id","：训练数据集仓库。",[570,25941,25942,25945],{},[31,25943,25944],{},"--policy.type=act","：策略模型类型为 ACT。",[570,25947,25948,25951],{},[31,25949,25950],{},"--output_dir","：本地训练输出目录。",[570,25953,25954,25957],{},[31,25955,25956],{},"--job_name","：训练任务名称。",[570,25959,25960,25963,25964,25027],{},[31,25961,25962],{},"--policy.device","：训练设备（如 ",[31,25965,25966],{},"cuda",[570,25968,25969,25972],{},[31,25970,25971],{},"--wandb.enable","：是否启用 WandB 可视化。",[570,25974,25975,25978],{},[31,25976,25977],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25980,25981],{},[20,25982],{"alt":22,"src":25983},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[532,25985,25846],{},{"title":22,"searchDepth":44,"depth":44,"links":25987},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25859,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25994,"title":25995,"body":25996,"description":537,"extension":538,"meta":26083,"navigation":540,"path":26084,"seo":26085,"stem":26086,"__hash__":26087},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25997,"toc":26081},[25998,26001,26004,26071,26079],[10,25999,25995],{"id":26000},"_8-策略部署与自动采集",[14,26002,26003],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[25,26005,26007],{"className":24286,"code":26006,"language":24288,"meta":22,"style":22},"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",[31,26008,26009,26015,26021,26027,26035,26041,26048,26056,26064],{"__ignoreMap":22},[34,26010,26011,26013],{"class":36,"line":37},[34,26012,25674],{"class":2427},[34,26014,25143],{"class":63},[34,26016,26017,26019],{"class":36,"line":44},[34,26018,25175],{"class":63},[34,26020,25143],{"class":63},[34,26022,26023,26025],{"class":36,"line":50},[34,26024,25253],{"class":63},[34,26026,25143],{"class":63},[34,26028,26029,26031,26033],{"class":36,"line":56},[34,26030,25382],{"class":63},[34,26032,25701],{"class":187},[34,26034,25143],{"class":63},[34,26036,26037,26039],{"class":36,"line":107},[34,26038,25313],{"class":63},[34,26040,25143],{"class":63},[34,26042,26043,26046],{"class":36,"line":196},[34,26044,26045],{"class":63},"  --display_data=false",[34,26047,25143],{"class":63},[34,26049,26050,26052,26054],{"class":36,"line":202},[34,26051,25733],{"class":63},[34,26053,25736],{"class":187},[34,26055,25143],{"class":63},[34,26057,26058,26060,26062],{"class":36,"line":207},[34,26059,25750],{"class":63},[34,26061,25753],{"class":187},[34,26063,25143],{"class":63},[34,26065,26066,26069],{"class":36,"line":222},[34,26067,26068],{"class":63},"  --policy.path=",[34,26070,25928],{"class":187},[1611,26072,26073],{},[570,26074,26075,26078],{},[31,26076,26077],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[532,26080,25846],{},{"title":22,"searchDepth":44,"depth":44,"links":26082},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25995,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26089,"title":26090,"body":26091,"description":537,"extension":538,"meta":26120,"navigation":540,"path":26121,"seo":26122,"stem":26123,"__hash__":26124},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26092,"toc":26118},[26093,26097,26100,26106,26109,26115],[10,26094,26096],{"id":26095},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26098,26099],{},"项目地址：",[14,26101,26102],{},[847,26103,26104],{"href":26104,"rel":26105},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24329],[14,26107,26108],{},"参考教程：",[14,26110,26111],{},[847,26112,26113],{"href":26113,"rel":26114},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24329],[14,26116,26117],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":22,"searchDepth":44,"depth":44,"links":26119},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26090,"description":537},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26126,"title":26127,"body":26128,"description":26132,"extension":538,"meta":26133,"navigation":540,"path":26134,"seo":26135,"stem":26136,"__hash__":26137},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26129,"toc":26130},[],{"title":22,"searchDepth":44,"depth":44,"links":26131},[],"act复现",{"category":23842},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26127,"description":26132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26139,"title":26140,"body":26141,"description":22,"extension":538,"meta":26443,"navigation":540,"path":26444,"seo":26445,"stem":26446,"__hash__":26447},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26142,"toc":26435},[26143,26146,26150,26160,26167,26174,26177,26184,26187,26190,26194,26206,26210,26256,26259,26262,26265,26268,26271,26275,26313,26319,26323,26377,26382,26385,26388,26393,26396,26401,26404,26407,26411,26414,26417,26421],[10,26144,26140],{"id":26145},"_1简介",[584,26147,26149],{"id":26148},"_11什么是-docker","1.1什么是 Docker？",[14,26151,26152,26153,26156,26157],{},"Docker 是一个开源的 ",[760,26154,26155],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[760,26158,26159],{},"一次构建，到处运行。",[14,26161,26162,26163,26166],{},"“ ",[760,26164,26165],{},"一次构建，到处运行"," ”也就是说：",[567,26168,26169],{},[570,26170,26171],{},[760,26172,26173],{},"之前：",[14,26175,26176],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[567,26178,26179],{},[570,26180,26181],{},[760,26182,26183],{},"使用docker后：",[14,26185,26186],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26188,26189],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[584,26191,26193],{"id":26192},"_12它是怎么工作的","1.2.它是怎么工作的？",[1611,26195,26196,26199],{},[570,26197,26198],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[570,26200,26201,26202,26205],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[760,26203,26204],{},"无论在哪运行都一样稳定"," 。",[584,26207,26209],{"id":26208},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[748,26211,26212,26222],{},[751,26213,26214],{},[754,26215,26216,26219],{},[757,26217,26218],{"align":24200},"概念",[757,26220,26221],{"align":24200},"解释",[795,26223,26224,26232,26240,26248],{},[754,26225,26226,26229],{},[800,26227,26228],{"align":24200},"镜像",[800,26230,26231],{"align":24200},"Image，运行容器的模板，像是一个应用快照",[754,26233,26234,26237],{},[800,26235,26236],{"align":24200},"容器",[800,26238,26239],{"align":24200},"Container，运行中的镜像实例，有自己的文件系统、网络等",[754,26241,26242,26245],{},[800,26243,26244],{"align":24200},"Dockerfile",[800,26246,26247],{"align":24200},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[754,26249,26250,26253],{},[800,26251,26252],{"align":24200},"仓库",[800,26254,26255],{"align":24200},"Registry，存放镜像的地方，比如 Docker Hub",[14,26257,26258],{},"抽象化理解:",[14,26260,26261],{},"Docker镜像≈C++类",[14,26263,26264],{},"Docker容器≈C++类实例(即对象)",[14,26266,26267],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26269,26270],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[584,26272,26274],{"id":26273},"_14类比理解","1.4.类比理解",[748,26276,26277,26287],{},[751,26278,26279],{},[754,26280,26281,26284],{},[757,26282,26283],{"align":24200},"传统部署",[757,26285,26286],{"align":24200},"Docker部署",[795,26288,26289,26297,26305],{},[754,26290,26291,26294],{},[800,26292,26293],{"align":24200},"手动安装依赖、调试版本不一致问题",[800,26295,26296],{"align":24200},"一次打包环境和代码",[754,26298,26299,26302],{},[800,26300,26301],{"align":24200},"程序“裸奔”跑在系统上",[800,26303,26304],{"align":24200},"程序“穿着容器”隔离运行",[754,26306,26307,26310],{},[800,26308,26309],{"align":24200},"容易“在我电脑上能跑”",[800,26311,26312],{"align":24200},"保证“无论在哪都能跑”",[14,26314,26315,26316],{},"就像快递包裹： ",[760,26317,26318],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[584,26320,26322],{"id":26321},"_15docker-的核心优势","1.5.Docker 的核心优势",[748,26324,26325,26335],{},[751,26326,26327],{},[754,26328,26329,26332],{},[757,26330,26331],{"align":24200},"优势",[757,26333,26334],{"align":24200},"说明",[795,26336,26337,26345,26353,26361,26369],{},[754,26338,26339,26342],{},[800,26340,26341],{"align":24200},"轻量级",[800,26343,26344],{"align":24200},"基于系统内核共享，启动速度快，占资源少",[754,26346,26347,26350],{},[800,26348,26349],{"align":24200},"跨平台",[800,26351,26352],{"align":24200},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[754,26354,26355,26358],{},[800,26356,26357],{"align":24200},"易于迁移部署",[800,26359,26360],{"align":24200},"应用和环境一起封装，不怕依赖不一致",[754,26362,26363,26366],{},[800,26364,26365],{"align":24200},"易于版本控制",[800,26367,26368],{"align":24200},"镜像版本可控，支持回滚",[754,26370,26371,26374],{},[800,26372,26373],{"align":24200},"生态丰富",[800,26375,26376],{"align":24200},"Docker Hub 上有成千上万的现成镜像可用",[567,26378,26379],{},[570,26380,26381],{},"在Linux上可以几乎实现无性能损失。",[14,26383,26384],{},"docker里的发行版和本机共用Linux内核。",[14,26386,26387],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[567,26389,26390],{},[570,26391,26392],{},"可以快速部署在绝大多数Linux发行版",[14,26394,26395],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[567,26397,26398],{},[570,26399,26400],{},"配置环境简单",[14,26402,26403],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26405,26406],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[567,26408,26409],{},[570,26410,26373],{},[14,26412,26413],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26415,26416],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[584,26418,26420],{"id":26419},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1611,26422,26423,26426,26429,26432],{},[570,26424,26425],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[570,26427,26428],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[570,26430,26431],{},"微服务架构：每个服务一个容器，灵活组合",[570,26433,26434],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":22,"searchDepth":44,"depth":44,"links":26436},[26437,26438,26439,26440,26441,26442],{"id":26148,"depth":50,"text":26149},{"id":26192,"depth":50,"text":26193},{"id":26208,"depth":50,"text":26209},{"id":26273,"depth":50,"text":26274},{"id":26321,"depth":50,"text":26322},{"id":26419,"depth":50,"text":26420},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26140,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26449,"title":26450,"body":26451,"description":22,"extension":538,"meta":27184,"navigation":540,"path":27185,"seo":27186,"stem":27187,"__hash__":27188},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26452,"toc":27179},[26453,26456,26460,26463,26466,26472,26478,26482,26491,26494,26551,26554,26605,26608,26691,26694,26731,26735,26746,26759,26766,26769,26849,26852,26902,26905,26928,26932,26939,26942,26958,26964,26967,26983,26989,26992,27008,27022,27028,27048,27054,27057,27069,27075,27078,27092,27098,27101,27121,27126,27129,27132,27136,27139,27142,27145,27152,27155,27158,27161,27166,27171,27176],[10,26454,26450],{"id":26455},"_2安装docker",[584,26457,26459],{"id":26458},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26461,26462],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26464,26465],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26467,26468],{},[847,26469,26470],{"href":26470,"rel":26471},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24329],[14,26473,26474],{},[847,26475,26476],{"href":26476,"rel":26477},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24329],[22462,26479,26481],{"id":26480},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26483,26484,26485,26490],{},"以下内容根据 ",[847,26486,26489],{"href":26487,"rel":26488},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24329],"官方文档"," 修改而来。",[14,26492,26493],{},"如果你过去安装过 docker，先删掉：",[25,26495,26497],{"className":24286,"code":26496,"language":24288,"meta":22,"style":22},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[31,26498,26499],{"__ignoreMap":22},[34,26500,26501,26503,26506,26509,26512,26515,26518,26521,26524,26527,26530,26533,26536,26539,26542,26545,26548],{"class":36,"line":37},[34,26502,3489],{"class":112},[34,26504,26505],{"class":59}," pkg ",[34,26507,26508],{"class":112},"in",[34,26510,26511],{"class":187}," docker.io",[34,26513,26514],{"class":187}," docker-doc",[34,26516,26517],{"class":187}," docker-compose",[34,26519,26520],{"class":187}," docker-compose-v2",[34,26522,26523],{"class":187}," podman-docker",[34,26525,26526],{"class":187}," containerd",[34,26528,26529],{"class":187}," runc",[34,26531,26532],{"class":59},"; ",[34,26534,26535],{"class":112},"do",[34,26537,26538],{"class":2427}," sudo",[34,26540,26541],{"class":187}," apt-get",[34,26543,26544],{"class":187}," remove",[34,26546,26547],{"class":59}," $pkg; ",[34,26549,26550],{"class":112},"done\n",[14,26552,26553],{},"首先安装依赖和GPG：",[25,26555,26559],{"className":26556,"code":26557,"language":26558,"meta":22,"style":22},"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",[31,26560,26561,26566,26571,26576,26581,26586,26591,26595,26600],{"__ignoreMap":22},[34,26562,26563],{"class":36,"line":37},[34,26564,26565],{},"# Add Docker's official GPG key:\n",[34,26567,26568],{"class":36,"line":44},[34,26569,26570],{},"sudo apt-get update\n",[34,26572,26573],{"class":36,"line":50},[34,26574,26575],{},"sudo apt-get install ca-certificates curl\n",[34,26577,26578],{"class":36,"line":56},[34,26579,26580],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[34,26582,26583],{"class":36,"line":107},[34,26584,26585],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[34,26587,26588],{"class":36,"line":196},[34,26589,26590],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[34,26592,26593],{"class":36,"line":202},[34,26594,2864],{"emptyLinePlaceholder":540},[34,26596,26597],{"class":36,"line":207},[34,26598,26599],{},"# 如果上面这行报错就弄下面这行\n",[34,26601,26602],{"class":36,"line":222},[34,26603,26604],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26606,26607],{},"信任 Docker 的 GPG 公钥并添加仓库：",[25,26609,26611],{"className":24286,"code":26610,"language":24288,"meta":22,"style":22},"# 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",[31,26612,26613,26618,26624,26641,26674],{"__ignoreMap":22},[34,26614,26615],{"class":36,"line":37},[34,26616,26617],{"class":40},"# Add the repository to Apt sources:\n",[34,26619,26620,26622],{"class":36,"line":44},[34,26621,25590],{"class":63},[34,26623,25143],{"class":63},[34,26625,26626,26629,26632,26635,26638],{"class":36,"line":50},[34,26627,26628],{"class":187},"  \"deb [arch=$(",[34,26630,26631],{"class":2427},"dpkg",[34,26633,26634],{"class":63}," --print-architecture",[34,26636,26637],{"class":187},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[34,26639,26640],{"class":63},"\\\n",[34,26642,26643,26646,26648,26650,26653,26656,26658,26660,26663,26665,26667,26670,26672],{"class":36,"line":56},[34,26644,26645],{"class":187},"  \"",[34,26647,25564],{"class":59},[34,26649,1164],{"class":63},[34,26651,26652],{"class":187}," \u002Fetc\u002Fos-release",[34,26654,26655],{"class":59}," && ",[34,26657,25590],{"class":63},[34,26659,10188],{"class":187},[34,26661,26662],{"class":59},"$VERSION_CODENAME",[34,26664,860],{"class":187},[34,26666,1036],{"class":59},[34,26668,26669],{"class":187},"\" stable\"",[34,26671,25574],{"class":112},[34,26673,25143],{"class":63},[34,26675,26676,26679,26682,26685,26688],{"class":36,"line":107},[34,26677,26678],{"class":2427},"  sudo",[34,26680,26681],{"class":187}," tee",[34,26683,26684],{"class":187}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[34,26686,26687],{"class":112}," >",[34,26689,26690],{"class":187}," \u002Fdev\u002Fnull\n",[14,26692,26693],{},"最后安装",[25,26695,26697],{"className":24286,"code":26696,"language":24288,"meta":22,"style":22},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[31,26698,26699,26708],{"__ignoreMap":22},[34,26700,26701,26703,26705],{"class":36,"line":37},[34,26702,25041],{"class":2427},[34,26704,26541],{"class":187},[34,26706,26707],{"class":187}," update\n",[34,26709,26710,26712,26714,26716,26719,26722,26725,26728],{"class":36,"line":44},[34,26711,25041],{"class":2427},[34,26713,26541],{"class":187},[34,26715,24298],{"class":187},[34,26717,26718],{"class":187}," docker-ce",[34,26720,26721],{"class":187}," docker-ce-cli",[34,26723,26724],{"class":187}," containerd.io",[34,26726,26727],{"class":187}," docker-buildx-plugin",[34,26729,26730],{"class":187}," docker-compose-plugin\n",[22462,26732,26734],{"id":26733},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26736,26737,26738,26741,26742,26745],{},"查看自己自己包管理工具版本（dnf是 ",[760,26739,26740],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[760,26743,26744],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[25,26747,26749],{"className":24286,"code":26748,"language":24288,"meta":22,"style":22},"dnf --version\n",[31,26750,26751],{"__ignoreMap":22},[34,26752,26753,26756],{"class":36,"line":37},[34,26754,26755],{"class":2427},"dnf",[34,26757,26758],{"class":63}," --version\n",[14,26760,26484,26761,26765],{},[847,26762,26489],{"href":26763,"rel":26764},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24329]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26767,26768],{},"如果你之前安装过 docker，请先删掉",[25,26770,26772],{"className":24286,"code":26771,"language":24288,"meta":22,"style":22},"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",[31,26773,26774,26788,26795,26802,26809,26816,26823,26830,26837,26844],{"__ignoreMap":22},[34,26775,26776,26778,26781,26783,26786],{"class":36,"line":37},[34,26777,25041],{"class":2427},[34,26779,26780],{"class":187}," dnf",[34,26782,26544],{"class":187},[34,26784,26785],{"class":187}," docker",[34,26787,25143],{"class":63},[34,26789,26790,26793],{"class":36,"line":44},[34,26791,26792],{"class":187},"                  docker-client",[34,26794,25143],{"class":63},[34,26796,26797,26800],{"class":36,"line":50},[34,26798,26799],{"class":187},"                  docker-client-latest",[34,26801,25143],{"class":63},[34,26803,26804,26807],{"class":36,"line":56},[34,26805,26806],{"class":187},"                  docker-common",[34,26808,25143],{"class":63},[34,26810,26811,26814],{"class":36,"line":107},[34,26812,26813],{"class":187},"                  docker-latest",[34,26815,25143],{"class":63},[34,26817,26818,26821],{"class":36,"line":196},[34,26819,26820],{"class":187},"                  docker-latest-logrotate",[34,26822,25143],{"class":63},[34,26824,26825,26828],{"class":36,"line":202},[34,26826,26827],{"class":187},"                  docker-logrotate",[34,26829,25143],{"class":63},[34,26831,26832,26835],{"class":36,"line":207},[34,26833,26834],{"class":187},"                  docker-selinux",[34,26836,25143],{"class":63},[34,26838,26839,26842],{"class":36,"line":222},[34,26840,26841],{"class":187},"                  docker-engine-selinux",[34,26843,25143],{"class":63},[34,26845,26846],{"class":36,"line":227},[34,26847,26848],{"class":187},"                  docker-engine\n",[14,26850,26851],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[25,26853,26855],{"className":24286,"code":26854,"language":24288,"meta":22,"style":22},"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",[31,26856,26857,26871,26886],{"__ignoreMap":22},[34,26858,26859,26861,26863,26866,26868],{"class":36,"line":37},[34,26860,25041],{"class":2427},[34,26862,26780],{"class":187},[34,26864,26865],{"class":63}," -y",[34,26867,24298],{"class":187},[34,26869,26870],{"class":187}," dnf-plugins-core\n",[34,26872,26873,26875,26877,26880,26883],{"class":36,"line":44},[34,26874,25041],{"class":2427},[34,26876,26780],{"class":187},[34,26878,26879],{"class":187}," config-manager",[34,26881,26882],{"class":187}," addrepo",[34,26884,26885],{"class":63}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[34,26887,26888,26890,26893,26896,26899],{"class":36,"line":50},[34,26889,25041],{"class":2427},[34,26891,26892],{"class":187}," sed",[34,26894,26895],{"class":63}," -i",[34,26897,26898],{"class":187}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[34,26900,26901],{"class":187}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26903,26904],{},"最后安装：",[25,26906,26908],{"className":24286,"code":26907,"language":24288,"meta":22,"style":22},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[31,26909,26910],{"__ignoreMap":22},[34,26911,26912,26914,26916,26918,26920,26922,26924,26926],{"class":36,"line":37},[34,26913,25041],{"class":2427},[34,26915,26780],{"class":187},[34,26917,24298],{"class":187},[34,26919,26718],{"class":187},[34,26921,26721],{"class":187},[34,26923,26724],{"class":187},[34,26925,26727],{"class":187},[34,26927,26730],{"class":187},[584,26929,26931],{"id":26930},"_22配置环境","2.2.配置环境",[22462,26933,26935,26938],{"id":26934},"_221检查-docker-服务状态",[760,26936,26937],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26940,26941],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[25,26943,26945],{"className":24286,"code":26944,"language":24288,"meta":22,"style":22},"systemctl status docker\n",[31,26946,26947],{"__ignoreMap":22},[34,26948,26949,26952,26955],{"class":36,"line":37},[34,26950,26951],{"class":2427},"systemctl",[34,26953,26954],{"class":187}," status",[34,26956,26957],{"class":187}," docker\n",[22462,26959,26961,26938],{"id":26960},"_222启动-docker-服务",[760,26962,26963],{},"2.2.2.启动 Docker 服务",[14,26965,26966],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[25,26968,26970],{"className":24286,"code":26969,"language":24288,"meta":22,"style":22},"sudo systemctl start docker\n",[31,26971,26972],{"__ignoreMap":22},[34,26973,26974,26976,26979,26981],{"class":36,"line":37},[34,26975,25041],{"class":2427},[34,26977,26978],{"class":187}," systemctl",[34,26980,4648],{"class":187},[34,26982,26957],{"class":187},[22462,26984,26986,26938],{"id":26985},"_223设置-docker-开机自启",[760,26987,26988],{},"2.2.3.设置 Docker 开机自启",[14,26990,26991],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[25,26993,26995],{"className":24286,"code":26994,"language":24288,"meta":22,"style":22},"sudo systemctl enable docker\n",[31,26996,26997],{"__ignoreMap":22},[34,26998,26999,27001,27003,27006],{"class":36,"line":37},[34,27000,25041],{"class":2427},[34,27002,26978],{"class":187},[34,27004,27005],{"class":187}," enable",[34,27007,26957],{"class":187},[22462,27009,27011,14259,27014,14259,27019,26938],{"id":27010},"_224将用户添加到-docker-组",[760,27012,27013],{},"2.2.4.将用户添加到",[760,27015,27016],{},[31,27017,27018],{},"docker",[760,27020,27021],{},"组",[14,27023,27024,27025,27027],{},"使用以下命令将当前用户添加到 ",[31,27026,27018],{}," 组：",[25,27029,27031],{"className":24286,"code":27030,"language":24288,"meta":22,"style":22},"sudo usermod -aG docker $USER\n",[31,27032,27033],{"__ignoreMap":22},[34,27034,27035,27037,27040,27043,27045],{"class":36,"line":37},[34,27036,25041],{"class":2427},[34,27038,27039],{"class":187}," usermod",[34,27041,27042],{"class":63}," -aG",[34,27044,26785],{"class":187},[34,27046,27047],{"class":59}," $USER\n",[22462,27049,27051,26938],{"id":27050},"_225退出并重新登录",[760,27052,27053],{},"2.2.5.退出并重新登录",[14,27055,27056],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[25,27058,27060],{"className":24286,"code":27059,"language":24288,"meta":22,"style":22},"newgrp docker\n",[31,27061,27062],{"__ignoreMap":22},[34,27063,27064,27067],{"class":36,"line":37},[34,27065,27066],{"class":2427},"newgrp",[34,27068,26957],{"class":187},[22462,27070,27072,26938],{"id":27071},"_226重新启动-docker-服务如果需要",[760,27073,27074],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27076,27077],{},"确保 Docker 服务正在运行，可以使用以下命令：",[25,27079,27080],{"className":24286,"code":26969,"language":24288,"meta":22,"style":22},[31,27081,27082],{"__ignoreMap":22},[34,27083,27084,27086,27088,27090],{"class":36,"line":37},[34,27085,25041],{"class":2427},[34,27087,26978],{"class":187},[34,27089,4648],{"class":187},[34,27091,26957],{"class":187},[22462,27093,27095,26938],{"id":27094},"_227重启电脑后检查-docker-服务状态",[760,27096,27097],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27099,27100],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[25,27102,27104],{"className":24286,"code":27103,"language":24288,"meta":22,"style":22},"sudo reboot\nsystemctl status docker\n",[31,27105,27106,27113],{"__ignoreMap":22},[34,27107,27108,27110],{"class":36,"line":37},[34,27109,25041],{"class":2427},[34,27111,27112],{"class":187}," reboot\n",[34,27114,27115,27117,27119],{"class":36,"line":44},[34,27116,26951],{"class":2427},[34,27118,26954],{"class":187},[34,27120,26957],{"class":187},[14,27122,27123],{},[20,27124],{"alt":22,"src":27125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27127,27128],{},"第三行显示enabled说明开机自启动成功",[14,27130,27131],{},"按q退出",[584,27133,27135],{"id":27134},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27137,27138],{},"优先使用linux来使用docker是比较好的",[14,27140,27141],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27143,27144],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27146,27147,27148],{},"官方下载安装:",[847,27149,27150],{"href":27150,"rel":27151},"https:\u002F\u002Fwww.docker.com\u002F",[24329],[14,27153,27154],{},"Windows的Docker显卡直通与USB直通:",[14,27156,27157],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27159,27160],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27162,27163],{},[20,27164],{"alt":22,"src":27165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27167,27168],{},[20,27169],{"alt":22,"src":27170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27172,27173],{},[20,27174],{"alt":22,"src":27175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[532,27177,27178],{},"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":22,"searchDepth":44,"depth":44,"links":27180},[27181,27182,27183],{"id":26458,"depth":50,"text":26459},{"id":26930,"depth":50,"text":26931},{"id":27134,"depth":50,"text":27135},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26450,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27190,"title":27191,"body":27192,"description":27199,"extension":538,"meta":27892,"navigation":540,"path":27893,"seo":27894,"stem":27895,"__hash__":27896},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27193,"toc":27886},[27194,27197,27200,27204,27209,27214,27217,27245,27250,27259,27262,27267,27271,27278,27283,27289,27293,27296,27300,27305,27397,27402,27420,27425,27446,27451,27467,27471,27476,27505,27510,27556,27561,27605,27613,27630,27635,27651,27656,27670,27673,27676,27679,27682,27711,27714,27719,27723,27726,27729,27735,27738,27741,27744,27806,27813,27818,27821,27839,27843,27846,27863,27866,27869,27883],[10,27195,27191],{"id":27196},"_3docker直通",[14,27198,27199],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[584,27201,27203],{"id":27202},"_31usb直通","3.1.USB直通",[14,27205,27206],{},[20,27207],{"alt":22,"src":27208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[567,27210,27211],{},[570,27212,27213],{},"方法一(不是很推荐新手)：",[14,27215,27216],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[25,27218,27220],{"className":24286,"code":27219,"language":24288,"meta":22,"style":22},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[31,27221,27222,27230,27235],{"__ignoreMap":22},[34,27223,27224,27227],{"class":36,"line":37},[34,27225,27226],{"class":2427},"ls",[34,27228,27229],{"class":187}," \u002Fdev\n",[34,27231,27232],{"class":36,"line":44},[34,27233,27234],{"class":40},"#例如\n",[34,27236,27237,27240,27242],{"class":36,"line":50},[34,27238,27239],{"class":59},"--device",[34,27241,447],{"class":112},[34,27243,27244],{"class":187},"\u002Fdev\u002Ftty_USB0\n",[567,27246,27247],{"start":44},[570,27248,27249],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[25,27251,27253],{"className":24286,"code":27252,"language":24288,"meta":22,"style":22},"--privileged\n",[31,27254,27255],{"__ignoreMap":22},[34,27256,27257],{"class":36,"line":37},[34,27258,27252],{"class":2427},[14,27260,27261],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27263,27264],{},[20,27265],{"alt":22,"src":27266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[584,27268,27270],{"id":27269},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27272,27273,27274,27277],{},"NVIDIA Container Toolkit使用户 ",[760,27275,27276],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27279,27280],{},[20,27281],{"alt":22,"src":27282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27284,27285],{},[847,27286,27287],{"href":27287,"rel":27288},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24329],[22462,27290,27292],{"id":27291},"_321安装","3.2.1.安装",[14,27294,27295],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23374,27297,27299],{"id":27298},"_3211ubuntu","3.2.1.1.Ubuntu",[567,27301,27302],{},[570,27303,27304],{},"配置存储库 并更新",[25,27306,27308],{"className":24286,"code":27307,"language":24288,"meta":22,"style":22},"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",[31,27309,27310,27339,27359,27371,27383,27389],{"__ignoreMap":22},[34,27311,27312,27315,27318,27321,27323,27325,27328,27331,27334,27337],{"class":36,"line":37},[34,27313,27314],{"class":2427},"curl",[34,27316,27317],{"class":63}," -fsSL",[34,27319,27320],{"class":187}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[34,27322,25574],{"class":112},[34,27324,26538],{"class":2427},[34,27326,27327],{"class":187}," gpg",[34,27329,27330],{"class":63}," --dearmor",[34,27332,27333],{"class":63}," -o",[34,27335,27336],{"class":187}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[34,27338,25143],{"class":63},[34,27340,27341,27344,27346,27349,27352,27355,27357],{"class":36,"line":44},[34,27342,27343],{"class":59},"  && ",[34,27345,27314],{"class":2427},[34,27347,27348],{"class":63}," -s",[34,27350,27351],{"class":63}," -L",[34,27353,27354],{"class":187}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[34,27356,25574],{"class":112},[34,27358,25143],{"class":63},[34,27360,27361,27364,27367,27369],{"class":36,"line":50},[34,27362,27363],{"class":2427},"    sed",[34,27365,27366],{"class":187}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[34,27368,25574],{"class":112},[34,27370,25143],{"class":63},[34,27372,27373,27376,27378,27381],{"class":36,"line":56},[34,27374,27375],{"class":2427},"    sudo",[34,27377,26681],{"class":187},[34,27379,27380],{"class":187}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[34,27382,25143],{"class":63},[34,27384,27385,27387],{"class":36,"line":107},[34,27386,27343],{"class":59},[34,27388,26640],{"class":63},[34,27390,27391,27393,27395],{"class":36,"line":196},[34,27392,27375],{"class":2427},[34,27394,26541],{"class":187},[34,27396,26707],{"class":187},[567,27398,27399],{"start":44},[570,27400,27401],{},"安装nvidia-docker2",[25,27403,27405],{"className":24286,"code":27404,"language":24288,"meta":22,"style":22},"sudo apt-get install -y nvidia-docker2\n",[31,27406,27407],{"__ignoreMap":22},[34,27408,27409,27411,27413,27415,27417],{"class":36,"line":37},[34,27410,25041],{"class":2427},[34,27412,26541],{"class":187},[34,27414,24298],{"class":187},[34,27416,26865],{"class":63},[34,27418,27419],{"class":187}," nvidia-docker2\n",[567,27421,27422],{"start":50},[570,27423,27424],{},"使用nvidia-ctk命令配置container runtime",[25,27426,27428],{"className":24286,"code":27427,"language":24288,"meta":22,"style":22},"sudo nvidia-ctk runtime configure --runtime=docker\n",[31,27429,27430],{"__ignoreMap":22},[34,27431,27432,27434,27437,27440,27443],{"class":36,"line":37},[34,27433,25041],{"class":2427},[34,27435,27436],{"class":187}," nvidia-ctk",[34,27438,27439],{"class":187}," runtime",[34,27441,27442],{"class":187}," configure",[34,27444,27445],{"class":63}," --runtime=docker\n",[567,27447,27448],{"start":56},[570,27449,27450],{},"重启docker服务:",[25,27452,27454],{"className":24286,"code":27453,"language":24288,"meta":22,"style":22},"sudo systemctl restart docker\n",[31,27455,27456],{"__ignoreMap":22},[34,27457,27458,27460,27462,27465],{"class":36,"line":37},[34,27459,25041],{"class":2427},[34,27461,26978],{"class":187},[34,27463,27464],{"class":187}," restart",[34,27466,26957],{"class":187},[23374,27468,27470],{"id":27469},"_3212fedora","3.2.1.2.Fedora",[567,27472,27473],{},[570,27474,27475],{},"配置存储库",[25,27477,27479],{"className":24286,"code":27478,"language":24288,"meta":22,"style":22},"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",[31,27480,27481,27496],{"__ignoreMap":22},[34,27482,27483,27485,27487,27489,27492,27494],{"class":36,"line":37},[34,27484,27314],{"class":2427},[34,27486,27348],{"class":63},[34,27488,27351],{"class":63},[34,27490,27491],{"class":187}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[34,27493,25574],{"class":112},[34,27495,25143],{"class":63},[34,27497,27498,27500,27502],{"class":36,"line":44},[34,27499,25041],{"class":2427},[34,27501,26681],{"class":187},[34,27503,27504],{"class":187}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[567,27506,27507],{"start":44},[570,27508,27509],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[25,27511,27513],{"className":24286,"code":27512,"language":24288,"meta":22,"style":22},"# 如果是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",[31,27514,27515,27520,27534,27538,27543],{"__ignoreMap":22},[34,27516,27517],{"class":36,"line":37},[34,27518,27519],{"class":40},"# 如果是RHEL或者Rocky（DNF4）\n",[34,27521,27522,27524,27526,27528,27531],{"class":36,"line":44},[34,27523,25041],{"class":2427},[34,27525,26780],{"class":187},[34,27527,26879],{"class":187},[34,27529,27530],{"class":63}," --add-repo",[34,27532,27533],{"class":187}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[34,27535,27536],{"class":36,"line":50},[34,27537,2864],{"emptyLinePlaceholder":540},[34,27539,27540],{"class":36,"line":56},[34,27541,27542],{"class":40},"# 如果是Feodra41+（DNF5）\n",[34,27544,27545,27547,27549,27551,27553],{"class":36,"line":107},[34,27546,25041],{"class":2427},[34,27548,26780],{"class":187},[34,27550,26879],{"class":187},[34,27552,26882],{"class":187},[34,27554,27555],{"class":63}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[567,27557,27558],{"start":50},[570,27559,27560],{},"安装NVIDIA Container Toolki包",[25,27562,27564],{"className":24286,"code":27563,"language":24288,"meta":22,"style":22},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[31,27565,27566,27571,27584,27588,27593],{"__ignoreMap":22},[34,27567,27568],{"class":36,"line":37},[34,27569,27570],{"class":40},"# 如果是RHEL或者Rocky\n",[34,27572,27573,27575,27577,27579,27581],{"class":36,"line":44},[34,27574,25041],{"class":2427},[34,27576,26780],{"class":187},[34,27578,24298],{"class":187},[34,27580,26865],{"class":63},[34,27582,27583],{"class":187}," nvidia-container-toolkit\n",[34,27585,27586],{"class":36,"line":50},[34,27587,2864],{"emptyLinePlaceholder":540},[34,27589,27590],{"class":36,"line":56},[34,27591,27592],{"class":40},"# 如果是Fedora\n",[34,27594,27595,27597,27599,27601,27603],{"class":36,"line":107},[34,27596,25041],{"class":2427},[34,27598,26780],{"class":187},[34,27600,24298],{"class":187},[34,27602,26865],{"class":63},[34,27604,27583],{"class":187},[567,27606,27607],{"start":56},[570,27608,27609,27610,27612],{},"安装nvidia-docker2 ： 在Fedora上使用",[31,27611,26755],{},"进行安装",[25,27614,27616],{"className":24286,"code":27615,"language":24288,"meta":22,"style":22},"sudo dnf install -y nvidia-docker2\n",[31,27617,27618],{"__ignoreMap":22},[34,27619,27620,27622,27624,27626,27628],{"class":36,"line":37},[34,27621,25041],{"class":2427},[34,27623,26780],{"class":187},[34,27625,24298],{"class":187},[34,27627,26865],{"class":63},[34,27629,27419],{"class":187},[567,27631,27632],{"start":107},[570,27633,27634],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[25,27636,27637],{"className":24286,"code":27427,"language":24288,"meta":22,"style":22},[31,27638,27639],{"__ignoreMap":22},[34,27640,27641,27643,27645,27647,27649],{"class":36,"line":37},[34,27642,25041],{"class":2427},[34,27644,27436],{"class":187},[34,27646,27439],{"class":187},[34,27648,27442],{"class":187},[34,27650,27445],{"class":63},[567,27652,27653],{"start":196},[570,27654,27655],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[25,27657,27658],{"className":24286,"code":27453,"language":24288,"meta":22,"style":22},[31,27659,27660],{"__ignoreMap":22},[34,27661,27662,27664,27666,27668],{"class":36,"line":37},[34,27663,25041],{"class":2427},[34,27665,26978],{"class":187},[34,27667,27464],{"class":187},[34,27669,26957],{"class":187},[14,27671,27672],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27674,27675],{},"方法：",[14,27677,27678],{},"1️⃣nvidia-smi",[14,27680,27681],{},"2️⃣运行nvidia cuda 容器进行测试",[25,27683,27685],{"className":24286,"code":27684,"language":24288,"meta":22,"style":22},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[31,27686,27687],{"__ignoreMap":22},[34,27688,27689,27691,27693,27696,27699,27702,27705,27708],{"class":36,"line":37},[34,27690,25041],{"class":2427},[34,27692,26785],{"class":187},[34,27694,27695],{"class":187}," run",[34,27697,27698],{"class":63}," --rm",[34,27700,27701],{"class":63}," --gpus",[34,27703,27704],{"class":187}," all",[34,27706,27707],{"class":187}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[34,27709,27710],{"class":187}," nvidia-smi\n",[14,27712,27713],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27715,27716],{},[20,27717],{"alt":22,"src":27718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[584,27720,27722],{"id":27721},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27724,27725],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27727,27728],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27730,27731],{},[847,27732,27733],{"href":27733,"rel":27734},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24329],[14,27736,27737],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27739,27740],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27742,27743],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[748,27745,27746,27762],{},[751,27747,27748],{},[754,27749,27750,27753,27756,27759],{},[757,27751,27752],{"align":24200},"镜像类型",[757,27754,27755],{"align":24200},"适用场景",[757,27757,27758],{"align":24200},"示例标签",[757,27760,27761],{"align":24200},"大小",[795,27763,27764,27778,27792],{},[754,27765,27766,27769,27772,27775],{},[800,27767,27768],{"align":24200},"base",[800,27770,27771],{"align":24200},"仅需 CUDA 运行时库",[800,27773,27774],{"align":24200},"12.4.0-base-ubuntu22.04",[800,27776,27777],{"align":24200},"~240MB",[754,27779,27780,27783,27786,27789],{},[800,27781,27782],{"align":24200},"runtime",[800,27784,27785],{"align":24200},"部署编译后的应用（含数学库）",[800,27787,27788],{"align":24200},"12.4.0-runtime-ubuntu22.04",[800,27790,27791],{"align":24200},"~2GB",[754,27793,27794,27797,27800,27803],{},[800,27795,27796],{"align":24200},"devel",[800,27798,27799],{"align":24200},"开发环境（含编译工具）",[800,27801,27802],{"align":24200},"12.4.0-devel-ubuntu22.04",[800,27804,27805],{"align":24200},"~3GB",[14,27807,27808,27809,27812],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[31,27810,27811],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27814,27815],{},[20,27816],{"alt":22,"src":27817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27819,27820],{},"在dockerfile里就可以开头这么写：",[25,27822,27824],{"className":24286,"code":27823,"language":24288,"meta":22,"style":22},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[31,27825,27826,27831],{"__ignoreMap":22},[34,27827,27828],{"class":36,"line":37},[34,27829,27830],{"class":40},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[34,27832,27833,27836],{"class":36,"line":44},[34,27834,27835],{"class":2427},"FROM",[34,27837,27838],{"class":187}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[584,27840,27842],{"id":27841},"_34配置以太网","3.4.配置以太网",[14,27844,27845],{},"指定网络模式",[25,27847,27849],{"className":24286,"code":27848,"language":24288,"meta":22,"style":22},"--net=host \\\n",[31,27850,27851],{"__ignoreMap":22},[34,27852,27853,27856,27858,27861],{"class":36,"line":37},[34,27854,27855],{"class":59},"--net",[34,27857,447],{"class":112},[34,27859,27860],{"class":187},"host",[34,27862,25143],{"class":2427},[14,27864,27865],{},"启动参数里加上这行即可。具体在下方",[14,27867,27868],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1611,27870,27871,27874,27877,27880],{},[570,27872,27873],{},"--net=bridge:默认选项，表示连接到默认的网桥",[570,27875,27876],{},"--net=host:容器使用宿主机的网络",[570,27878,27879],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[570,27881,27882],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[532,27884,27885],{},"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":22,"searchDepth":44,"depth":44,"links":27887},[27888,27889,27890,27891],{"id":27202,"depth":50,"text":27203},{"id":27269,"depth":50,"text":27270},{"id":27721,"depth":50,"text":27722},{"id":27841,"depth":50,"text":27842},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27191,"description":27199},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27898,"title":27899,"body":27900,"description":27907,"extension":538,"meta":27913,"navigation":540,"path":27914,"seo":27915,"stem":27916,"__hash__":27917},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27901,"toc":27911},[27902,27905,27908],[10,27903,27899],{"id":27904},"_4dockerhub换源",[14,27906,27907],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27909,27910],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":22,"searchDepth":44,"depth":44,"links":27912},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27899,"description":27907},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27919,"title":27920,"body":27921,"description":22,"extension":538,"meta":28933,"navigation":540,"path":28934,"seo":28935,"stem":28936,"__hash__":28937},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27922,"toc":28928},[27923,27926,27930,27936,27940,27943,28283,28286,28289,28292,28297,28302,28305,28308,28311,28314,28333,28336,28347,28353,28535,28545,28561,28824,28826,28851,28866,28875,28925],[10,27924,27920],{"id":27925},"_5docker命令学习",[584,27927,27929],{"id":27928},"_51参考文档","5.1.参考文档",[14,27931,27932],{},[847,27933,27934],{"href":27934,"rel":27935},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24329],[584,27937,27939],{"id":27938},"_52常用命令","5.2.常用命令",[14,27941,27942],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[748,27944,27945,27958],{},[751,27946,27947],{},[754,27948,27949,27952,27955],{},[757,27950,27951],{"align":24200},"命令",[757,27953,27954],{"align":24200},"描述",[757,27956,27957],{"align":24200},"示例",[795,27959,27960,27971,27982,27993,28004,28015,28026,28037,28047,28058,28069,28080,28090,28101,28112,28123,28133,28143,28153,28163,28174,28185,28196,28207,28218,28229,28239,28250,28261,28272],{},[754,27961,27962,27965,27968],{},[800,27963,27964],{"align":24200},"docker run",[800,27966,27967],{"align":24200},"创建并启动一个新的容器。",[800,27969,27970],{"align":24200},"docker run -it ubuntu bash",[754,27972,27973,27976,27979],{},[800,27974,27975],{"align":24200},"docker build",[800,27977,27978],{"align":24200},"通过指定的 Dockerfile 创建一个新的镜像。",[800,27980,27981],{"align":24200},"docker build -t myimage .",[754,27983,27984,27987,27990],{},[800,27985,27986],{"align":24200},"docker pull",[800,27988,27989],{"align":24200},"从 Docker 仓库拉取镜像。",[800,27991,27992],{"align":24200},"docker pull ubuntu",[754,27994,27995,27998,28001],{},[800,27996,27997],{"align":24200},"docker push",[800,27999,28000],{"align":24200},"将本地镜像推送到 Docker 仓库。",[800,28002,28003],{"align":24200},"docker push myimage",[754,28005,28006,28009,28012],{},[800,28007,28008],{"align":24200},"docker stop",[800,28010,28011],{"align":24200},"停止一个正在运行的容器。",[800,28013,28014],{"align":24200},"docker stop container_id",[754,28016,28017,28020,28023],{},[800,28018,28019],{"align":24200},"docker start",[800,28021,28022],{"align":24200},"启动一个已经存在的容器。",[800,28024,28025],{"align":24200},"docker start container_id",[754,28027,28028,28031,28034],{},[800,28029,28030],{"align":24200},"docker restart",[800,28032,28033],{"align":24200},"重新启动容器。",[800,28035,28036],{"align":24200},"docker restart container_id",[754,28038,28039,28042,28045],{},[800,28040,28041],{"align":24200},"docker ps",[800,28043,28044],{"align":24200},"列出当前正在运行的容器。",[800,28046,28041],{"align":24200},[754,28048,28049,28052,28055],{},[800,28050,28051],{"align":24200},"docker rm",[800,28053,28054],{"align":24200},"删除一个或多个停止的容器。",[800,28056,28057],{"align":24200},"docker rm container_id",[754,28059,28060,28063,28066],{},[800,28061,28062],{"align":24200},"docker exec",[800,28064,28065],{"align":24200},"在一个正在运行的容器中执行命令。",[800,28067,28068],{"align":24200},"docker exec -it container_id bash",[754,28070,28071,28074,28077],{},[800,28072,28073],{"align":24200},"docker logs",[800,28075,28076],{"align":24200},"查看容器的日志输出。",[800,28078,28079],{"align":24200},"docker logs container_id",[754,28081,28082,28085,28088],{},[800,28083,28084],{"align":24200},"docker images",[800,28086,28087],{"align":24200},"列出本地所有镜像。",[800,28089,28084],{"align":24200},[754,28091,28092,28095,28098],{},[800,28093,28094],{"align":24200},"docker rmi",[800,28096,28097],{"align":24200},"删除一个或多个镜像。",[800,28099,28100],{"align":24200},"docker rmi myimage",[754,28102,28103,28106,28109],{},[800,28104,28105],{"align":24200},"docker network",[800,28107,28108],{"align":24200},"管理 Docker 网络。",[800,28110,28111],{"align":24200},"docker network ls",[754,28113,28114,28117,28120],{},[800,28115,28116],{"align":24200},"docker volume",[800,28118,28119],{"align":24200},"管理 Docker 数据卷。",[800,28121,28122],{"align":24200},"docker volume ls",[754,28124,28125,28128,28131],{},[800,28126,28127],{"align":24200},"docker-compose up",[800,28129,28130],{"align":24200},"启动 docker-compose.yml 中定义的所有服务。",[800,28132,28127],{"align":24200},[754,28134,28135,28138,28141],{},[800,28136,28137],{"align":24200},"docker-compose down",[800,28139,28140],{"align":24200},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[800,28142,28137],{"align":24200},[754,28144,28145,28148,28151],{},[800,28146,28147],{"align":24200},"docker info",[800,28149,28150],{"align":24200},"显示 Docker 系统的详细信息。",[800,28152,28147],{"align":24200},[754,28154,28155,28158,28161],{},[800,28156,28157],{"align":24200},"docker stats",[800,28159,28160],{"align":24200},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[800,28162,28157],{"align":24200},[754,28164,28165,28168,28171],{},[800,28166,28167],{"align":24200},"docker inspect",[800,28169,28170],{"align":24200},"查看容器或镜像的详细信息（JSON 格式）。",[800,28172,28173],{"align":24200},"docker inspect container_id",[754,28175,28176,28179,28182],{},[800,28177,28178],{"align":24200},"docker save",[800,28180,28181],{"align":24200},"将一个镜像保存为 tar 文件。",[800,28183,28184],{"align":24200},"docker save -o myimage.tar myimage",[754,28186,28187,28190,28193],{},[800,28188,28189],{"align":24200},"docker load",[800,28191,28192],{"align":24200},"从 tar 文件中加载镜像。",[800,28194,28195],{"align":24200},"docker load -i myimage.tar",[754,28197,28198,28201,28204],{},[800,28199,28200],{"align":24200},"docker tag",[800,28202,28203],{"align":24200},"为镜像添加标签（tag）。",[800,28205,28206],{"align":24200},"docker tag myimage myimage:v1",[754,28208,28209,28212,28215],{},[800,28210,28211],{"align":24200},"docker buildx build",[800,28213,28214],{"align":24200},"使用 Buildx 构建多架构镜像。",[800,28216,28217],{"align":24200},"docker buildx build -t myimage .",[754,28219,28220,28223,28226],{},[800,28221,28222],{"align":24200},"docker buildx create",[800,28224,28225],{"align":24200},"创建一个新的 Buildx 构建实例。",[800,28227,28228],{"align":24200},"docker buildx create –use",[754,28230,28231,28234,28237],{},[800,28232,28233],{"align":24200},"docker buildx ls",[800,28235,28236],{"align":24200},"列出所有可用的 Buildx 构建实例。",[800,28238,28233],{"align":24200},[754,28240,28241,28244,28247],{},[800,28242,28243],{"align":24200},"docker buildx use",[800,28245,28246],{"align":24200},"设置当前的 Buildx 构建实例。",[800,28248,28249],{"align":24200},"docker buildx use mybuilder",[754,28251,28252,28255,28258],{},[800,28253,28254],{"align":24200},"docker buildx bake",[800,28256,28257],{"align":24200},"使用 Bake 文件批量构建镜像。",[800,28259,28260],{"align":24200},"docker buildx bake -f bake.hcl",[754,28262,28263,28266,28269],{},[800,28264,28265],{"align":24200},"docker buildx build –push",[800,28267,28268],{"align":24200},"构建镜像并推送到镜像仓库。",[800,28270,28271],{"align":24200},"docker buildx build –push -t myimage .",[754,28273,28274,28277,28280],{},[800,28275,28276],{"align":24200},"docker buildx build –platform",[800,28278,28279],{"align":24200},"构建镜像并为多个平台生成支持。",[800,28281,28282],{"align":24200},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28284,28285],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28287,28288],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28290,28291],{},"docker images 可以查看已经下载的镜像",[14,28293,28294],{},[20,28295],{"alt":22,"src":28296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28298,28299],{},[760,28300,28301],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28303,28304],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28306,28307],{},"docker container logs 查看容器日志",[14,28309,28310],{},"docker top 查看容器里的进程",[14,28312,28313],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[25,28315,28317],{"className":24286,"code":28316,"language":24288,"meta":22,"style":22},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[31,28318,28319],{"__ignoreMap":22},[34,28320,28321,28324,28327,28330],{"class":36,"line":37},[34,28322,28323],{"class":2427},"如：docker",[34,28325,28326],{"class":187}," cp",[34,28328,28329],{"class":187}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[34,28331,28332],{"class":187}," \u002Fmydata\u002Fnginx\n",[14,28334,28335],{},"docker run时在启动容器的时候会有几个常用的选项：",[1611,28337,28338,28341,28344],{},[570,28339,28340],{},"-d选项：表示后台运行",[570,28342,28343],{},"-P选项：随机端口映射",[570,28345,28346],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[584,28348,28350],{"id":28349},"_53run命令的参数非常重要",[760,28351,28352],{},"5.3.run命令的参数（非常重要）",[748,28354,28355,28368],{},[751,28356,28357],{},[754,28358,28359,28362,28365],{},[757,28360,28361],{"align":24200},"参数\u002F配置",[757,28363,28364],{"align":24200},"功能说明",[757,28366,28367],{"align":24200},"重要性与参考依据",[795,28369,28370,28381,28392,28403,28414,28425,28436,28447,28458,28469,28480,28491,28502,28513,28524],{},[754,28371,28372,28375,28378],{},[800,28373,28374],{"align":24200},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[800,28376,28377],{"align":24200},"指定容器名称，便于后续管理",[800,28379,28380],{"align":24200},"替代随机生成的容器名。",[754,28382,28383,28386,28389],{},[800,28384,28385],{"align":24200},"–gpus all",[800,28387,28388],{"align":24200},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[800,28390,28391],{"align":24200},"用于CUDA加速等GPU依赖任务。",[754,28393,28394,28397,28400],{},[800,28395,28396],{"align":24200},"-e NVIDIA_DRIVER_CAPABILITIES=all",[800,28398,28399],{"align":24200},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[800,28401,28402],{"align":24200},"确保容器内GPU功能完整67。",[754,28404,28405,28408,28411],{},[800,28406,28407],{"align":24200},"-dit",[800,28409,28410],{"align":24200},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[800,28412,28413],{"align":24200},"允许容器在后台运行并支持交互操作。",[754,28415,28416,28419,28422],{},[800,28417,28418],{"align":24200},"–privileged",[800,28420,28421],{"align":24200},"赋予容器完全主机权限（可访问设备、内核模块等）",[800,28423,28424],{"align":24200},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[754,28426,28427,28430,28433],{},[800,28428,28429],{"align":24200},"–net=host",[800,28431,28432],{"align":24200},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[800,28434,28435],{"align":24200},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[754,28437,28438,28441,28444],{},[800,28439,28440],{"align":24200},"–group-add audio–group-add video–group-add dialout",[800,28442,28443],{"align":24200},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[800,28445,28446],{"align":24200},"避免权限问题（如避免无法调用摄像头、麦克风）。",[754,28448,28449,28452,28455],{},[800,28450,28451],{"align":24200},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[800,28453,28454],{"align":24200},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[800,28456,28457],{"align":24200},"支持容器内运行图形界面应用（如OpenCV可视化）。",[754,28459,28460,28463,28466],{},[800,28461,28462],{"align":24200},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[800,28464,28465],{"align":24200},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[800,28467,28468],{"align":24200},"实现容器内图形显示。",[754,28470,28471,28474,28477],{},[800,28472,28473],{"align":24200},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[800,28475,28476],{"align":24200},"挂载X11认证文件（只读）",[800,28478,28479],{"align":24200},"确保容器有权连接宿主机显示服务。",[754,28481,28482,28485,28488],{},[800,28483,28484],{"align":24200},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[800,28486,28487],{"align":24200},"挂载Wayland显示协议相关目录",[800,28489,28490],{"align":24200},"支持Wayland协议的图形显示。",[754,28492,28493,28496,28499],{},[800,28494,28495],{"align":24200},"–ulimit nofile=1024:524288",[800,28497,28498],{"align":24200},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[800,28500,28501],{"align":24200},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[754,28503,28504,28507,28510],{},[800,28505,28506],{"align":24200},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[800,28508,28509],{"align":24200},"挂载宿主机用户目录到容器内同名路径",[800,28511,28512],{"align":24200},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[754,28514,28515,28518,28521],{},[800,28516,28517],{"align":24200},"-w \u002Fhome\u002Ftungchiahui",[800,28519,28520],{"align":24200},"设置容器启动后的默认工作目录",[800,28522,28523],{"align":24200},"直接进入项目路径，方便执行命令2324。",[754,28525,28526,28529,28532],{},[800,28527,28528],{"align":24200},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[800,28530,28531],{"align":24200},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[800,28533,28534],{"align":24200},"提供预配置的深度学习与机器人开发环境。",[14,28536,28537,28538,28540,28541,28544],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[31,28539,25041],{},"加不加",[31,28542,28543],{},"sudo -E","都无所谓。",[14,28546,28547,28548,28550,28551,28553,28554,28557,28558,28560],{},"用户已经被加到docker组了，不用",[31,28549,25041],{},"也行跑，其次，",[31,28552,25041],{},"运行的话，你的",[31,28555,28556],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[31,28559,28556],{},"更不可能变了。",[25,28562,28564],{"className":24286,"code":28563,"language":24288,"meta":22,"style":22},"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",[31,28565,28566,28579,28589,28599,28611,28618,28625,28632,28642,28651,28660,28674,28686,28698,28707,28717,28726,28741,28774,28801,28812,28819],{"__ignoreMap":22},[34,28567,28568,28570,28572,28574,28577],{"class":36,"line":37},[34,28569,25041],{"class":2427},[34,28571,26785],{"class":187},[34,28573,27695],{"class":187},[34,28575,28576],{"class":63}," --name=ros_opencv_cuda",[34,28578,25143],{"class":63},[34,28580,28581,28584,28587],{"class":36,"line":44},[34,28582,28583],{"class":59},"--gpus ",[34,28585,28586],{"class":187},"all",[34,28588,25143],{"class":63},[34,28590,28591,28594,28597],{"class":36,"line":50},[34,28592,28593],{"class":59},"-e ",[34,28595,28596],{"class":187},"NVIDIA_DRIVER_CAPABILITIES=all",[34,28598,25143],{"class":63},[34,28600,28601,28603,28606,28609],{"class":36,"line":56},[34,28602,28593],{"class":59},[34,28604,28605],{"class":187},"DISPLAY=",[34,28607,28608],{"class":59},"$DISPLAY ",[34,28610,26640],{"class":63},[34,28612,28613,28616],{"class":36,"line":107},[34,28614,28615],{"class":59},"-dit ",[34,28617,26640],{"class":63},[34,28619,28620,28623],{"class":36,"line":196},[34,28621,28622],{"class":59},"--privileged ",[34,28624,26640],{"class":63},[34,28626,28627,28630],{"class":36,"line":202},[34,28628,28629],{"class":59},"--net=host ",[34,28631,26640],{"class":63},[34,28633,28634,28637,28640],{"class":36,"line":207},[34,28635,28636],{"class":59},"--group-add ",[34,28638,28639],{"class":187},"audio",[34,28641,25143],{"class":63},[34,28643,28644,28646,28649],{"class":36,"line":222},[34,28645,28636],{"class":59},[34,28647,28648],{"class":187},"video",[34,28650,25143],{"class":63},[34,28652,28653,28655,28658],{"class":36,"line":227},[34,28654,28636],{"class":59},[34,28656,28657],{"class":187},"dialout",[34,28659,25143],{"class":63},[34,28661,28662,28664,28667,28669,28672],{"class":36,"line":232},[34,28663,28593],{"class":59},[34,28665,28666],{"class":187},"XAUTHORITY=",[34,28668,28556],{"class":59},[34,28670,28671],{"class":187},"\u002F.Xauthority",[34,28673,25143],{"class":63},[34,28675,28676,28678,28681,28684],{"class":36,"line":238},[34,28677,28593],{"class":59},[34,28679,28680],{"class":187},"WAYLAND_DISPLAY=",[34,28682,28683],{"class":59},"$WAYLAND_DISPLAY ",[34,28685,26640],{"class":63},[34,28687,28688,28690,28693,28696],{"class":36,"line":244},[34,28689,28593],{"class":59},[34,28691,28692],{"class":187},"XDG_RUNTIME_DIR=",[34,28694,28695],{"class":59},"$XDG_RUNTIME_DIR ",[34,28697,26640],{"class":63},[34,28699,28700,28702,28705],{"class":36,"line":250},[34,28701,28593],{"class":59},[34,28703,28704],{"class":187},"QT_QPA_PLATFORM=xcb",[34,28706,25143],{"class":63},[34,28708,28709,28712,28715],{"class":36,"line":256},[34,28710,28711],{"class":59},"-v ",[34,28713,28714],{"class":187},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[34,28716,25143],{"class":63},[34,28718,28719,28721,28724],{"class":36,"line":261},[34,28720,28711],{"class":59},[34,28722,28723],{"class":187},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[34,28725,25143],{"class":63},[34,28727,28728,28731,28734,28736,28739],{"class":36,"line":267},[34,28729,28730],{"class":59},"-v $HOME",[34,28732,28733],{"class":187},"\u002F.Xauthority:",[34,28735,28556],{"class":59},[34,28737,28738],{"class":187},"\u002F.Xauthority:ro",[34,28740,25143],{"class":63},[34,28742,28743,28745,28748,28750,28753,28756,28758,28761,28763,28765,28767,28769,28772],{"class":36,"line":2138},[34,28744,28711],{"class":59},[34,28746,28747],{"class":187},"\u002Frun\u002Fuser\u002F",[34,28749,25564],{"class":59},[34,28751,28752],{"class":2427},"id",[34,28754,28755],{"class":63}," -u",[34,28757,1036],{"class":59},[34,28759,28760],{"class":187},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[34,28762,25564],{"class":59},[34,28764,28752],{"class":2427},[34,28766,28755],{"class":63},[34,28768,1036],{"class":59},[34,28770,28771],{"class":187},"\u002Fwayland-0",[34,28773,25143],{"class":63},[34,28775,28776,28778,28780,28782,28784,28786,28788,28791,28793,28795,28797,28799],{"class":36,"line":2143},[34,28777,28711],{"class":59},[34,28779,28747],{"class":187},[34,28781,25564],{"class":59},[34,28783,28752],{"class":2427},[34,28785,28755],{"class":63},[34,28787,1036],{"class":59},[34,28789,28790],{"class":187},":\u002Frun\u002Fuser\u002F",[34,28792,25564],{"class":59},[34,28794,28752],{"class":2427},[34,28796,28755],{"class":63},[34,28798,14178],{"class":59},[34,28800,26640],{"class":63},[34,28802,28803,28805,28807,28810],{"class":36,"line":2157},[34,28804,28730],{"class":59},[34,28806,214],{"class":187},[34,28808,28809],{"class":59},"$HOME ",[34,28811,26640],{"class":63},[34,28813,28814,28817],{"class":36,"line":2162},[34,28815,28816],{"class":59},"-w $HOME ",[34,28818,26640],{"class":63},[34,28820,28821],{"class":36,"line":2191},[34,28822,28823],{"class":59},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28825,9489],{},[567,28827,28828,28836,28839,28842],{},[570,28829,28830,14259,28832,28835],{},[31,28831,28596],{},[31,28833,28834],{},"--gpus all","没有英伟达显卡请注释。",[570,28837,28838],{},"--name后面请自己为容器起名。",[570,28840,28841],{},"最后一行仓库名称请你自己找对应的镜像填上。",[570,28843,28844,28845,28850],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24017,28846,28847],{},[760,28848,28849],{},"请不要加","。",[25,28852,28854],{"className":24286,"code":28853,"language":24288,"meta":22,"style":22},"--ulimit nofile=1024:524288 \\\n",[31,28855,28856],{"__ignoreMap":22},[34,28857,28858,28861,28864],{"class":36,"line":37},[34,28859,28860],{"class":2427},"--ulimit",[34,28862,28863],{"class":187}," nofile=1024:524288",[34,28865,25143],{"class":63},[14,28867,28868,28869,28874],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24017,28870,28871],{},[760,28872,28873],{},"不建议","**.**",[25,28876,28878],{"className":24286,"code":28877,"language":24288,"meta":22,"style":22},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[31,28879,28880,28907,28916],{"__ignoreMap":22},[34,28881,28882,28885,28888,28890,28892,28894,28896,28898,28900,28903,28905],{"class":36,"line":37},[34,28883,28884],{"class":2427},"--user",[34,28886,28887],{"class":59}," $(",[34,28889,28752],{"class":2427},[34,28891,28755],{"class":63},[34,28893,1036],{"class":59},[34,28895,214],{"class":187},[34,28897,25564],{"class":59},[34,28899,28752],{"class":2427},[34,28901,28902],{"class":63}," -g",[34,28904,14178],{"class":59},[34,28906,26640],{"class":63},[34,28908,28909,28911,28914],{"class":36,"line":44},[34,28910,28711],{"class":59},[34,28912,28913],{"class":187},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[34,28915,25143],{"class":63},[34,28917,28918,28920,28923],{"class":36,"line":50},[34,28919,28711],{"class":59},[34,28921,28922],{"class":187},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[34,28924,25143],{"class":63},[532,28926,28927],{},"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":22,"searchDepth":44,"depth":44,"links":28929},[28930,28931,28932],{"id":27928,"depth":50,"text":27929},{"id":27938,"depth":50,"text":27939},{"id":28349,"depth":50,"text":28352},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27920,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28939,"title":28940,"body":28941,"description":22,"extension":538,"meta":30564,"navigation":540,"path":30565,"seo":30566,"stem":30567,"__hash__":30568},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28942,"toc":30559},[28943,28946,28950,28953,29175,29179,29183,29186,29292,29297,29300,29305,29308,29313,29316,29321,29324,29336,29339,29344,29351,29379,29386,29462,29467,29470,29493,29495,29570,29575,29578,29582,29590,29595,29600,29604,29615,29621,29624,29627,29651,29654,29657,29685,29688,29691,30156,30159,30164,30169,30173,30196,30201,30205,30209,30212,30215,30218,30245,30248,30251,30269,30272,30275,30297,30305,30310,30315,30319,30322,30325,30328,30331,30376,30379,30397,30400,30405,30408,30429,30432,30488,30491,30496,30500,30503,30510,30513,30516,30521,30524,30540,30543,30556],[10,28944,28940],{"id":28945},"_6手动创建docker镜像",[584,28947,28949],{"id":28948},"_61dockerfile","6.1.DockerFile",[14,28951,28952],{},"常用命令：",[748,28954,28955,28966],{},[751,28956,28957],{},[754,28958,28959,28962,28964],{},[757,28960,28961],{"align":24200},"指令",[757,28963,26334],{"align":24200},[757,28965,27957],{"align":24200},[795,28967,28968,28978,28994,29005,29016,29027,29038,29049,29060,29074,29088,29099,29113,29124,29135,29149,29164],{},[754,28969,28970,28972,28975],{},[800,28971,27835],{"align":24200},[800,28973,28974],{"align":24200},"指定基础镜像，是 Dockerfile 的起点",[800,28976,28977],{"align":24200},"FROM ubuntu:22.04",[754,28979,28980,28983,28986],{},[800,28981,28982],{"align":24200},"LABEL",[800,28984,28985],{"align":24200},"添加元数据（如作者、版本等）",[800,28987,28988,28989,28993],{"align":24200},"LABEL maintainer=”",[847,28990,28992],{"href":28991},"mailto:you@example.com","you@example.com","”",[754,28995,28996,28999,29002],{},[800,28997,28998],{"align":24200},"ENV",[800,29000,29001],{"align":24200},"设置环境变量",[800,29003,29004],{"align":24200},"ENV PORT=8080",[754,29006,29007,29010,29013],{},[800,29008,29009],{"align":24200},"ARG",[800,29011,29012],{"align":24200},"构建参数，只在构建期间可用",[800,29014,29015],{"align":24200},"ARG VERSION=1.0",[754,29017,29018,29021,29024],{},[800,29019,29020],{"align":24200},"RUN",[800,29022,29023],{"align":24200},"构建镜像时运行命令",[800,29025,29026],{"align":24200},"RUN apt-get update && apt-get install -y curl",[754,29028,29029,29032,29035],{},[800,29030,29031],{"align":24200},"COPY",[800,29033,29034],{"align":24200},"复制文件到镜像中",[800,29036,29037],{"align":24200},"COPY . \u002Fapp",[754,29039,29040,29043,29046],{},[800,29041,29042],{"align":24200},"ADD",[800,29044,29045],{"align":24200},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[800,29047,29048],{"align":24200},"ADD archive.tar.gz \u002Fdata\u002F",[754,29050,29051,29054,29057],{},[800,29052,29053],{"align":24200},"WORKDIR",[800,29055,29056],{"align":24200},"设置工作目录",[800,29058,29059],{"align":24200},"WORKDIR \u002Fopt",[754,29061,29062,29065,29068],{},[800,29063,29064],{"align":24200},"CMD",[800,29066,29067],{"align":24200},"设置容器启动时默认命令（可被 docker run 覆盖）",[800,29069,29070,29071],{"align":24200},"CMD ",[34,29072,29073],{},"“node”, “index.js”",[754,29075,29076,29079,29082],{},[800,29077,29078],{"align":24200},"ENTRYPOINT",[800,29080,29081],{"align":24200},"设置容器启动时固定命令（通常用于 CLI 工具等）",[800,29083,29084,29085],{"align":24200},"ENTRYPOINT ",[34,29086,29087],{},"“python3”",[754,29089,29090,29093,29096],{},[800,29091,29092],{"align":24200},"EXPOSE",[800,29094,29095],{"align":24200},"声明镜像内服务监听的端口（不会自动映射）",[800,29097,29098],{"align":24200},"EXPOSE 80",[754,29100,29101,29104,29107],{},[800,29102,29103],{"align":24200},"VOLUME",[800,29105,29106],{"align":24200},"声明数据卷挂载点",[800,29108,29109,29110],{"align":24200},"VOLUME ",[34,29111,29112],{},"“\u002Fdata”",[754,29114,29115,29118,29121],{},[800,29116,29117],{"align":24200},"USER",[800,29119,29120],{"align":24200},"设置后续命令执行的用户",[800,29122,29123],{"align":24200},"USER appuser",[754,29125,29126,29129,29132],{},[800,29127,29128],{"align":24200},"ONBUILD",[800,29130,29131],{"align":24200},"当镜像作为其他镜像基础镜像时触发的构建指令",[800,29133,29134],{"align":24200},"ONBUILD COPY . \u002Fsrc",[754,29136,29137,29140,29143],{},[800,29138,29139],{"align":24200},"SHELL",[800,29141,29142],{"align":24200},"更改默认 shell，比如将 sh -c 改为 bash -c",[800,29144,29145,29146],{"align":24200},"SHELL ",[34,29147,29148],{},"“\u002Fbin\u002Fbash”, “-c”",[754,29150,29151,29154,29157],{},[800,29152,29153],{"align":24200},"HEALTHCHECK",[800,29155,29156],{"align":24200},"定义容器运行时的健康检查命令",[800,29158,29159,29160],{"align":24200},"`HEALTHCHECK CMD curl –fail ",[847,29161,29162],{"href":29162,"rel":29163},"http:\u002F\u002Flocalhost:8080",[24329],[754,29165,29166,29169,29172],{},[800,29167,29168],{"align":24200},"STOPSIGNAL",[800,29170,29171],{"align":24200},"容器停止时发送的信号",[800,29173,29174],{"align":24200},"STOPSIGNAL SIGKILL",[584,29176,29178],{"id":29177},"_62自己创建容器","6.2.自己创建容器",[22462,29180,29182],{"id":29181},"_621手动创建","6.2.1.手动创建",[14,29184,29185],{},"在x86电脑上编译x86的：",[25,29187,29189],{"className":24286,"code":29188,"language":24288,"meta":22,"style":22},"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",[31,29190,29191,29207,29211,29224,29228,29241,29245,29258,29262,29275,29279],{"__ignoreMap":22},[34,29192,29193,29195,29198,29201,29204],{"class":36,"line":37},[34,29194,27018],{"class":2427},[34,29196,29197],{"class":187}," build",[34,29199,29200],{"class":63}," -t",[34,29202,29203],{"class":187}," ros-melodic-cuda118-cudnn8-bionic:latest",[34,29205,29206],{"class":187}," .\n",[34,29208,29209],{"class":36,"line":44},[34,29210,2864],{"emptyLinePlaceholder":540},[34,29212,29213,29215,29217,29219,29222],{"class":36,"line":50},[34,29214,27018],{"class":2427},[34,29216,29197],{"class":187},[34,29218,29200],{"class":63},[34,29220,29221],{"class":187}," ros-noetic-focal:latest",[34,29223,29206],{"class":187},[34,29225,29226],{"class":36,"line":56},[34,29227,2864],{"emptyLinePlaceholder":540},[34,29229,29230,29232,29234,29236,29239],{"class":36,"line":107},[34,29231,27018],{"class":2427},[34,29233,29197],{"class":187},[34,29235,29200],{"class":63},[34,29237,29238],{"class":187}," ros-humble-jammy:latest",[34,29240,29206],{"class":187},[34,29242,29243],{"class":36,"line":196},[34,29244,2864],{"emptyLinePlaceholder":540},[34,29246,29247,29249,29251,29253,29256],{"class":36,"line":202},[34,29248,27018],{"class":2427},[34,29250,29197],{"class":187},[34,29252,29200],{"class":63},[34,29254,29255],{"class":187}," ros-jazzy-noble:latest",[34,29257,29206],{"class":187},[34,29259,29260],{"class":36,"line":207},[34,29261,2864],{"emptyLinePlaceholder":540},[34,29263,29264,29266,29268,29270,29273],{"class":36,"line":222},[34,29265,27018],{"class":2427},[34,29267,29197],{"class":187},[34,29269,29200],{"class":63},[34,29271,29272],{"class":187}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[34,29274,29206],{"class":187},[34,29276,29277],{"class":36,"line":227},[34,29278,2864],{"emptyLinePlaceholder":540},[34,29280,29281,29283,29285,29287,29290],{"class":36,"line":232},[34,29282,27018],{"class":2427},[34,29284,29197],{"class":187},[34,29286,29200],{"class":63},[34,29288,29289],{"class":187}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[34,29291,29206],{"class":187},[14,29293,29294],{},[20,29295],{"alt":22,"src":29296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29298,29299],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29301,29302],{},[20,29303],{"alt":22,"src":29304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29306,29307],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[567,29309,29310],{},[570,29311,29312],{},"创建 Docker Hub 账户",[14,29314,29315],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[567,29317,29318],{"start":44},[570,29319,29320],{},"登录 Docker Hub",[14,29322,29323],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[25,29325,29327],{"className":24286,"code":29326,"language":24288,"meta":22,"style":22},"docker login\n",[31,29328,29329],{"__ignoreMap":22},[34,29330,29331,29333],{"class":36,"line":37},[34,29332,27018],{"class":2427},[34,29334,29335],{"class":187}," login\n",[14,29337,29338],{},"输入你的 Docker Hub 用户名和密码进行验证。",[567,29340,29341],{},[570,29342,29343],{},"为你的镜像打标签",[14,29345,29346,29347,29350],{},"Docker Hub 使用 ",[31,29348,29349],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[25,29352,29354],{"className":24286,"code":29353,"language":24288,"meta":22,"style":22},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[31,29355,29356],{"__ignoreMap":22},[34,29357,29358,29360,29363,29365,29368,29371,29374,29376],{"class":36,"line":37},[34,29359,27018],{"class":2427},[34,29361,29362],{"class":187}," tag",[34,29364,29255],{"class":187},[34,29366,29367],{"class":112}," \u003C",[34,29369,29370],{"class":187},"你的用户",[34,29372,29373],{"class":59},"名",[34,29375,1564],{"class":112},[34,29377,29378],{"class":187},"\u002Fros-jazzy-noble:latest\n",[14,29380,29381,29382,29385],{},"例如，如果你的 Docker Hub 用户名是 ",[31,29383,29384],{},"tungchiahui","，你应该执行：",[25,29387,29389],{"className":24286,"code":29388,"language":24288,"meta":22,"style":22},"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",[31,29390,29391,29402,29406,29417,29421,29432,29436,29447,29451],{"__ignoreMap":22},[34,29392,29393,29395,29397,29399],{"class":36,"line":37},[34,29394,27018],{"class":2427},[34,29396,29362],{"class":187},[34,29398,29221],{"class":187},[34,29400,29401],{"class":187}," tungchiahui\u002Fros-noetic-focal:latest\n",[34,29403,29404],{"class":36,"line":44},[34,29405,2864],{"emptyLinePlaceholder":540},[34,29407,29408,29410,29412,29414],{"class":36,"line":50},[34,29409,27018],{"class":2427},[34,29411,29362],{"class":187},[34,29413,29238],{"class":187},[34,29415,29416],{"class":187}," tungchiahui\u002Fros-humble-jammy:latest\n",[34,29418,29419],{"class":36,"line":56},[34,29420,2864],{"emptyLinePlaceholder":540},[34,29422,29423,29425,29427,29429],{"class":36,"line":107},[34,29424,27018],{"class":2427},[34,29426,29362],{"class":187},[34,29428,29255],{"class":187},[34,29430,29431],{"class":187}," tungchiahui\u002Fros-jazzy-noble:latest\n",[34,29433,29434],{"class":36,"line":196},[34,29435,2864],{"emptyLinePlaceholder":540},[34,29437,29438,29440,29442,29444],{"class":36,"line":202},[34,29439,27018],{"class":2427},[34,29441,29362],{"class":187},[34,29443,29272],{"class":187},[34,29445,29446],{"class":187}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[34,29448,29449],{"class":36,"line":207},[34,29450,2864],{"emptyLinePlaceholder":540},[34,29452,29453,29455,29457,29459],{"class":36,"line":222},[34,29454,27018],{"class":2427},[34,29456,29362],{"class":187},[34,29458,29289],{"class":187},[34,29460,29461],{"class":187}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[567,29463,29464],{"start":44},[570,29465,29466],{},"推送镜像到 Docker Hub",[14,29468,29469],{},"使用以下命令将镜像推送到 Docker Hub：",[25,29471,29473],{"className":24286,"code":29472,"language":24288,"meta":22,"style":22},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[31,29474,29475],{"__ignoreMap":22},[34,29476,29477,29479,29482,29484,29486,29488,29490],{"class":36,"line":37},[34,29478,27018],{"class":2427},[34,29480,29481],{"class":187}," push",[34,29483,29367],{"class":112},[34,29485,29370],{"class":187},[34,29487,29373],{"class":59},[34,29489,1564],{"class":112},[34,29491,29492],{"class":187},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29494,15097],{},[25,29496,29498],{"className":24286,"code":29497,"language":24288,"meta":22,"style":22},"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",[31,29499,29500,29508,29512,29520,29524,29532,29536,29545,29549,29557,29561],{"__ignoreMap":22},[34,29501,29502,29504,29506],{"class":36,"line":37},[34,29503,27018],{"class":2427},[34,29505,29481],{"class":187},[34,29507,29401],{"class":187},[34,29509,29510],{"class":36,"line":44},[34,29511,2864],{"emptyLinePlaceholder":540},[34,29513,29514,29516,29518],{"class":36,"line":50},[34,29515,27018],{"class":2427},[34,29517,29481],{"class":187},[34,29519,29416],{"class":187},[34,29521,29522],{"class":36,"line":56},[34,29523,2864],{"emptyLinePlaceholder":540},[34,29525,29526,29528,29530],{"class":36,"line":107},[34,29527,27018],{"class":2427},[34,29529,29481],{"class":187},[34,29531,29431],{"class":187},[34,29533,29534],{"class":36,"line":196},[34,29535,2864],{"emptyLinePlaceholder":540},[34,29537,29538,29540,29542],{"class":36,"line":202},[34,29539,27018],{"class":2427},[34,29541,29481],{"class":187},[34,29543,29544],{"class":187}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[34,29546,29547],{"class":36,"line":207},[34,29548,2864],{"emptyLinePlaceholder":540},[34,29550,29551,29553,29555],{"class":36,"line":222},[34,29552,27018],{"class":2427},[34,29554,29481],{"class":187},[34,29556,29461],{"class":187},[34,29558,29559],{"class":36,"line":227},[34,29560,2864],{"emptyLinePlaceholder":540},[34,29562,29563,29565,29567],{"class":36,"line":232},[34,29564,27018],{"class":2427},[34,29566,29481],{"class":187},[34,29568,29569],{"class":187}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[567,29571,29572],{"start":50},[570,29573,29574],{},"验证推送成功",[14,29576,29577],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29579,29580],{},[760,29581,4248],{},[1611,29583,29584,29587],{},[570,29585,29586],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[570,29588,29589],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29591,29592],{},[20,29593],{"alt":22,"src":29594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29596,29597],{},[20,29598],{"alt":22,"src":29599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22462,29601,29603],{"id":29602},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29605,29606,29607,29610,29611,29614],{},"如果您想在 ",[760,29608,29609],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[760,29612,29613],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29616,29617,29618],{},"1. ",[760,29619,29620],{},"启用 Docker 跨平台构建",[14,29622,29623],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29625,29626],{},"第一步：启用 buildx（只需执行一次）",[25,29628,29630],{"className":24286,"code":29629,"language":24288,"meta":22,"style":22},"docker buildx create --name multiarch_builder --use\n",[31,29631,29632],{"__ignoreMap":22},[34,29633,29634,29636,29639,29642,29645,29648],{"class":36,"line":37},[34,29635,27018],{"class":2427},[34,29637,29638],{"class":187}," buildx",[34,29640,29641],{"class":187}," create",[34,29643,29644],{"class":63}," --name",[34,29646,29647],{"class":187}," multiarch_builder",[34,29649,29650],{"class":63}," --use\n",[14,29652,29653],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29655,29656],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[25,29658,29660],{"className":24286,"code":29659,"language":24288,"meta":22,"style":22},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[31,29661,29662],{"__ignoreMap":22},[34,29663,29664,29666,29668,29670,29673,29676,29679,29682],{"class":36,"line":37},[34,29665,27018],{"class":2427},[34,29667,27695],{"class":187},[34,29669,27698],{"class":63},[34,29671,29672],{"class":63}," --privileged",[34,29674,29675],{"class":187}," multiarch\u002Fqemu-user-static",[34,29677,29678],{"class":63}," --reset",[34,29680,29681],{"class":63}," -p",[34,29683,29684],{"class":187}," yes\n",[14,29686,29687],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29689,29690],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[25,29692,29694],{"className":24286,"code":29693,"language":24288,"meta":22,"style":22},"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",[31,29695,29696,29738,29742,29747,29757,29767,29776,29782,29786,29790,29800,29808,29817,29823,29827,29831,29841,29849,29858,29864,29868,29872,29882,29890,29899,29905,29909,29913,29923,29931,29940,29946,29950,29954,29964,29972,29981,29987,29991,29995,30005,30013,30022,30028,30032,30036,30046,30054,30063,30069,30073,30077,30087,30095,30104,30110,30114,30118,30129,30137,30146,30152],{"__ignoreMap":22},[34,29697,29698,29700,29702,29704,29707,29710,29712,29714,29717,29719,29721,29723,29725,29728,29731,29733,29736],{"class":36,"line":37},[34,29699,27018],{"class":2427},[34,29701,29638],{"class":187},[34,29703,29197],{"class":187},[34,29705,29706],{"class":63}," --platform",[34,29708,29709],{"class":187}," linux\u002Famd64,linux\u002Farm64",[34,29711,29200],{"class":63},[34,29713,29367],{"class":112},[34,29715,29716],{"class":187},"你的镜像",[34,29718,29373],{"class":59},[34,29720,1564],{"class":112},[34,29722,214],{"class":187},[34,29724,1515],{"class":112},[34,29726,29727],{"class":187},"标",[34,29729,29730],{"class":59},"签",[34,29732,1564],{"class":112},[34,29734,29735],{"class":63}," --push",[34,29737,29206],{"class":187},[34,29739,29740],{"class":36,"line":44},[34,29741,2864],{"emptyLinePlaceholder":540},[34,29743,29744],{"class":36,"line":50},[34,29745,29746],{"class":40},"# 例子：\n",[34,29748,29749,29751,29753,29755],{"class":36,"line":56},[34,29750,27018],{"class":2427},[34,29752,29638],{"class":187},[34,29754,29197],{"class":187},[34,29756,25143],{"class":63},[34,29758,29759,29762,29765],{"class":36,"line":107},[34,29760,29761],{"class":59},"--platform ",[34,29763,29764],{"class":187},"linux\u002Famd64,linux\u002Farm64",[34,29766,25143],{"class":63},[34,29768,29769,29771,29774],{"class":36,"line":196},[34,29770,29200],{"class":63},[34,29772,29773],{"class":187}," tungchiahui\u002Fros:noetic-focal",[34,29775,25143],{"class":63},[34,29777,29778,29780],{"class":36,"line":202},[34,29779,29735],{"class":63},[34,29781,25143],{"class":63},[34,29783,29784],{"class":36,"line":207},[34,29785,29206],{"class":187},[34,29787,29788],{"class":36,"line":222},[34,29789,2864],{"emptyLinePlaceholder":540},[34,29791,29792,29794,29796,29798],{"class":36,"line":227},[34,29793,27018],{"class":2427},[34,29795,29638],{"class":187},[34,29797,29197],{"class":187},[34,29799,25143],{"class":63},[34,29801,29802,29804,29806],{"class":36,"line":232},[34,29803,29761],{"class":59},[34,29805,29764],{"class":187},[34,29807,25143],{"class":63},[34,29809,29810,29812,29815],{"class":36,"line":238},[34,29811,29200],{"class":63},[34,29813,29814],{"class":187}," tungchiahui\u002Fros:humble-jammy",[34,29816,25143],{"class":63},[34,29818,29819,29821],{"class":36,"line":244},[34,29820,29735],{"class":63},[34,29822,25143],{"class":63},[34,29824,29825],{"class":36,"line":250},[34,29826,29206],{"class":187},[34,29828,29829],{"class":36,"line":256},[34,29830,2864],{"emptyLinePlaceholder":540},[34,29832,29833,29835,29837,29839],{"class":36,"line":261},[34,29834,27018],{"class":2427},[34,29836,29638],{"class":187},[34,29838,29197],{"class":187},[34,29840,25143],{"class":63},[34,29842,29843,29845,29847],{"class":36,"line":267},[34,29844,29761],{"class":59},[34,29846,29764],{"class":187},[34,29848,25143],{"class":63},[34,29850,29851,29853,29856],{"class":36,"line":2138},[34,29852,29200],{"class":63},[34,29854,29855],{"class":187}," tungchiahui\u002Fros:jazzy-noble",[34,29857,25143],{"class":63},[34,29859,29860,29862],{"class":36,"line":2143},[34,29861,29735],{"class":63},[34,29863,25143],{"class":63},[34,29865,29866],{"class":36,"line":2157},[34,29867,29206],{"class":187},[34,29869,29870],{"class":36,"line":2162},[34,29871,2864],{"emptyLinePlaceholder":540},[34,29873,29874,29876,29878,29880],{"class":36,"line":2191},[34,29875,26785],{"class":2427},[34,29877,29638],{"class":187},[34,29879,29197],{"class":187},[34,29881,25143],{"class":63},[34,29883,29884,29886,29888],{"class":36,"line":2196},[34,29885,29761],{"class":59},[34,29887,29764],{"class":187},[34,29889,25143],{"class":63},[34,29891,29892,29894,29897],{"class":36,"line":2213},[34,29893,29200],{"class":63},[34,29895,29896],{"class":187}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[34,29898,25143],{"class":63},[34,29900,29901,29903],{"class":36,"line":2218},[34,29902,29735],{"class":63},[34,29904,25143],{"class":63},[34,29906,29907],{"class":36,"line":2223},[34,29908,29206],{"class":187},[34,29910,29911],{"class":36,"line":2228},[34,29912,2864],{"emptyLinePlaceholder":540},[34,29914,29915,29917,29919,29921],{"class":36,"line":2242},[34,29916,27018],{"class":2427},[34,29918,29638],{"class":187},[34,29920,29197],{"class":187},[34,29922,25143],{"class":63},[34,29924,29925,29927,29929],{"class":36,"line":2247},[34,29926,29761],{"class":59},[34,29928,29764],{"class":187},[34,29930,25143],{"class":63},[34,29932,29933,29935,29938],{"class":36,"line":3041},[34,29934,29200],{"class":63},[34,29936,29937],{"class":187}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[34,29939,25143],{"class":63},[34,29941,29942,29944],{"class":36,"line":3055},[34,29943,29735],{"class":63},[34,29945,25143],{"class":63},[34,29947,29948],{"class":36,"line":3063},[34,29949,29206],{"class":187},[34,29951,29952],{"class":36,"line":3068},[34,29953,2864],{"emptyLinePlaceholder":540},[34,29955,29956,29958,29960,29962],{"class":36,"line":3074},[34,29957,26785],{"class":2427},[34,29959,29638],{"class":187},[34,29961,29197],{"class":187},[34,29963,25143],{"class":63},[34,29965,29966,29968,29970],{"class":36,"line":3080},[34,29967,29761],{"class":59},[34,29969,29764],{"class":187},[34,29971,25143],{"class":63},[34,29973,29974,29976,29979],{"class":36,"line":3085},[34,29975,29200],{"class":63},[34,29977,29978],{"class":187}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[34,29980,25143],{"class":63},[34,29982,29983,29985],{"class":36,"line":8412},[34,29984,29735],{"class":63},[34,29986,25143],{"class":63},[34,29988,29989],{"class":36,"line":8436},[34,29990,29206],{"class":187},[34,29992,29993],{"class":36,"line":8441},[34,29994,2864],{"emptyLinePlaceholder":540},[34,29996,29997,29999,30001,30003],{"class":36,"line":8447},[34,29998,27018],{"class":2427},[34,30000,29638],{"class":187},[34,30002,29197],{"class":187},[34,30004,25143],{"class":63},[34,30006,30007,30009,30011],{"class":36,"line":8474},[34,30008,29761],{"class":59},[34,30010,29764],{"class":187},[34,30012,25143],{"class":63},[34,30014,30015,30017,30020],{"class":36,"line":8479},[34,30016,29200],{"class":63},[34,30018,30019],{"class":187}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[34,30021,25143],{"class":63},[34,30023,30024,30026],{"class":36,"line":8485},[34,30025,29735],{"class":63},[34,30027,25143],{"class":63},[34,30029,30030],{"class":36,"line":8497},[34,30031,29206],{"class":187},[34,30033,30034],{"class":36,"line":8509},[34,30035,2864],{"emptyLinePlaceholder":540},[34,30037,30038,30040,30042,30044],{"class":36,"line":8521},[34,30039,27018],{"class":2427},[34,30041,29638],{"class":187},[34,30043,29197],{"class":187},[34,30045,25143],{"class":63},[34,30047,30048,30050,30052],{"class":36,"line":10180},[34,30049,29761],{"class":59},[34,30051,29764],{"class":187},[34,30053,25143],{"class":63},[34,30055,30056,30058,30061],{"class":36,"line":10205},[34,30057,29200],{"class":63},[34,30059,30060],{"class":187}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[34,30062,25143],{"class":63},[34,30064,30065,30067],{"class":36,"line":10228},[34,30066,29735],{"class":63},[34,30068,25143],{"class":63},[34,30070,30071],{"class":36,"line":10252},[34,30072,29206],{"class":187},[34,30074,30075],{"class":36,"line":10257},[34,30076,2864],{"emptyLinePlaceholder":540},[34,30078,30079,30081,30083,30085],{"class":36,"line":10262},[34,30080,26785],{"class":2427},[34,30082,29638],{"class":187},[34,30084,29197],{"class":187},[34,30086,25143],{"class":63},[34,30088,30089,30091,30093],{"class":36,"line":10267},[34,30090,29761],{"class":59},[34,30092,29764],{"class":187},[34,30094,25143],{"class":63},[34,30096,30097,30099,30102],{"class":36,"line":10276},[34,30098,29200],{"class":63},[34,30100,30101],{"class":187}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[34,30103,25143],{"class":63},[34,30105,30106,30108],{"class":36,"line":10281},[34,30107,29735],{"class":63},[34,30109,25143],{"class":63},[34,30111,30112],{"class":36,"line":10287},[34,30113,29206],{"class":187},[34,30115,30116],{"class":36,"line":10308},[34,30117,2864],{"emptyLinePlaceholder":540},[34,30119,30120,30123,30125,30127],{"class":36,"line":10314},[34,30121,30122],{"class":2427},"  docker",[34,30124,29638],{"class":187},[34,30126,29197],{"class":187},[34,30128,25143],{"class":63},[34,30130,30131,30133,30135],{"class":36,"line":10328},[34,30132,29761],{"class":59},[34,30134,29764],{"class":187},[34,30136,25143],{"class":63},[34,30138,30139,30141,30144],{"class":36,"line":10334},[34,30140,29200],{"class":63},[34,30142,30143],{"class":187}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[34,30145,25143],{"class":63},[34,30147,30148,30150],{"class":36,"line":10361},[34,30149,29735],{"class":63},[34,30151,25143],{"class":63},[34,30153,30154],{"class":36,"line":10370},[34,30155,29206],{"class":187},[14,30157,30158],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30160,30161],{},[20,30162],{"alt":22,"src":30163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30165,30166],{},[20,30167],{"alt":22,"src":30168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22462,30170,30172],{"id":30171},"_623清除构建缓存","6.2.3.清除构建缓存",[25,30174,30176],{"className":24286,"code":30175,"language":24288,"meta":22,"style":22},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[31,30177,30178,30183],{"__ignoreMap":22},[34,30179,30180],{"class":36,"line":37},[34,30181,30182],{"class":40},"# 清理BuildKit构建缓存\n",[34,30184,30185,30187,30190,30193],{"class":36,"line":44},[34,30186,27018],{"class":2427},[34,30188,30189],{"class":187}," builder",[34,30191,30192],{"class":187}," prune",[34,30194,30195],{"class":63}," -f\n",[14,30197,30198],{},[20,30199],{"alt":22,"src":30200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[584,30202,30204],{"id":30203},"_63补充","6.3.补充",[22462,30206,30208],{"id":30207},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30210,30211],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30213,30214],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30216,30217],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[25,30219,30221],{"className":24286,"code":30220,"language":24288,"meta":22,"style":22},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[31,30222,30223,30230],{"__ignoreMap":22},[34,30224,30225,30227],{"class":36,"line":37},[34,30226,27835],{"class":2427},[34,30228,30229],{"class":187}," nginx\n",[34,30231,30232,30234,30237,30240,30242],{"class":36,"line":44},[34,30233,29020],{"class":2427},[34,30235,30236],{"class":187}," echo",[34,30238,30239],{"class":187}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[34,30241,26687],{"class":112},[34,30243,30244],{"class":187}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30246,30247],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30249,30250],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[25,30252,30254],{"className":24286,"code":30253,"language":24288,"meta":22,"style":22},"docker build -t nginx:tuling .\n",[31,30255,30256],{"__ignoreMap":22},[34,30257,30258,30260,30262,30264,30267],{"class":36,"line":37},[34,30259,27018],{"class":2427},[34,30261,29197],{"class":187},[34,30263,29200],{"class":63},[34,30265,30266],{"class":187}," nginx:tuling",[34,30268,29206],{"class":187},[14,30270,30271],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30273,30274],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[25,30276,30278],{"className":24286,"code":30277,"language":24288,"meta":22,"style":22},"docker run -d -p 92:80 nginx:tuling\n",[31,30279,30280],{"__ignoreMap":22},[34,30281,30282,30284,30286,30289,30291,30294],{"class":36,"line":37},[34,30283,27018],{"class":2427},[34,30285,27695],{"class":187},[34,30287,30288],{"class":63}," -d",[34,30290,29681],{"class":63},[34,30292,30293],{"class":187}," 92:80",[34,30295,30296],{"class":187}," nginx:tuling\n",[14,30298,30299,30300],{},"4、访问 ",[847,30301,30304],{"href":30302,"rel":30303},"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",[24329],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30306,30307],{},[20,30308],{"alt":22,"src":30309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30311,30312],{},[20,30313],{"alt":22,"src":30314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22462,30316,30318],{"id":30317},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30320,30321],{},"只需要知道大体流程即可",[14,30323,30324],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30326,30327],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30329,30330],{},"2、在Dockerfile中添加以下内容",[25,30332,30334],{"className":26556,"code":30333,"language":26558,"meta":22,"style":22},"# 基于哪个镜像\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",[31,30335,30336,30341,30346,30351,30356,30361,30366,30371],{"__ignoreMap":22},[34,30337,30338],{"class":36,"line":37},[34,30339,30340],{},"# 基于哪个镜像\n",[34,30342,30343],{"class":36,"line":44},[34,30344,30345],{},"From java:8\n",[34,30347,30348],{"class":36,"line":50},[34,30349,30350],{},"# 复制文件到容器\n",[34,30352,30353],{"class":36,"line":56},[34,30354,30355],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[34,30357,30358],{"class":36,"line":107},[34,30359,30360],{},"# 声明需要暴露的端口\n",[34,30362,30363],{"class":36,"line":196},[34,30364,30365],{},"EXPOSE 8877\n",[34,30367,30368],{"class":36,"line":202},[34,30369,30370],{},"# 配置容器启动后执行的命令\n",[34,30372,30373],{"class":36,"line":207},[34,30374,30375],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30377,30378],{},"3、使用docker build命令构建镜像",[25,30380,30382],{"className":24286,"code":30381,"language":24288,"meta":22,"style":22},"docker build -t tulingmall-member:0.0.5 .\n",[31,30383,30384],{"__ignoreMap":22},[34,30385,30386,30388,30390,30392,30395],{"class":36,"line":37},[34,30387,27018],{"class":2427},[34,30389,29197],{"class":187},[34,30391,29200],{"class":63},[34,30393,30394],{"class":187}," tulingmall-member:0.0.5",[34,30396,29206],{"class":187},[14,30398,30399],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30401,30402],{},[20,30403],{"alt":22,"src":30404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30406,30407],{},"4、启动镜像，加-d可在后台启动",[25,30409,30411],{"className":24286,"code":30410,"language":24288,"meta":22,"style":22},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[31,30412,30413],{"__ignoreMap":22},[34,30414,30415,30417,30419,30421,30423,30426],{"class":36,"line":37},[34,30416,27018],{"class":2427},[34,30418,27695],{"class":187},[34,30420,30288],{"class":63},[34,30422,29681],{"class":63},[34,30424,30425],{"class":187}," 8877:8877",[34,30427,30428],{"class":187}," tulingmall-member:0.0.5\n",[14,30430,30431],{},"加上JVM参数：",[25,30433,30435],{"className":24286,"code":30434,"language":24288,"meta":22,"style":22},"# --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",[31,30436,30437,30442,30457,30467,30476,30483],{"__ignoreMap":22},[34,30438,30439],{"class":36,"line":37},[34,30440,30441],{"class":40},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[34,30443,30444,30446,30448,30451,30453,30455],{"class":36,"line":44},[34,30445,27018],{"class":2427},[34,30447,27695],{"class":187},[34,30449,30450],{"class":63},"  -d",[34,30452,29681],{"class":63},[34,30454,30425],{"class":187},[34,30456,25143],{"class":63},[34,30458,30459,30461,30464],{"class":36,"line":50},[34,30460,28593],{"class":59},[34,30462,30463],{"class":187},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[34,30465,30466],{"class":63},"  \\\n",[34,30468,30469,30471,30474],{"class":36,"line":56},[34,30470,28593],{"class":59},[34,30472,30473],{"class":187},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[34,30475,30466],{"class":63},[34,30477,30478,30481],{"class":36,"line":107},[34,30479,30480],{"class":59},"--cap-add=SYS_PTRACE  ",[34,30482,26640],{"class":63},[34,30484,30485],{"class":36,"line":196},[34,30486,30487],{"class":59},"tulingmall-member:0.0.5\n",[14,30489,30490],{},"5、访问会员服务接口",[14,30492,30493],{},[20,30494],{"alt":22,"src":30495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22462,30497,30499],{"id":30498},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30501,30502],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30504,30505,30506],{},"阿里云docker镜像仓库：",[847,30507,30508],{"href":30508,"rel":30509},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24329],[14,30511,30512],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30514,30515],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30517,30518],{},[20,30519],{"alt":22,"src":30520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30522,30523],{},"要把镜像推送到镜像仓库",[25,30525,30527],{"className":24286,"code":30526,"language":24288,"meta":22,"style":22},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,30528,30529],{"__ignoreMap":22},[34,30530,30531,30533,30535,30537],{"class":36,"line":37},[34,30532,27018],{"class":2427},[34,30534,29362],{"class":187},[34,30536,30394],{"class":187},[34,30538,30539],{"class":187}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30541,30542],{},"最后将镜像推送到远程仓库",[25,30544,30546],{"className":24286,"code":30545,"language":24288,"meta":22,"style":22},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,30547,30548],{"__ignoreMap":22},[34,30549,30550,30552,30554],{"class":36,"line":37},[34,30551,27018],{"class":2427},[34,30553,29481],{"class":187},[34,30555,30539],{"class":187},[532,30557,30558],{},"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":22,"searchDepth":44,"depth":44,"links":30560},[30561,30562,30563],{"id":28948,"depth":50,"text":28949},{"id":29177,"depth":50,"text":29178},{"id":30203,"depth":50,"text":30204},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28940,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30570,"title":30571,"body":30572,"description":22,"extension":538,"meta":30715,"navigation":540,"path":30716,"seo":30717,"stem":30718,"__hash__":30719},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30573,"toc":30713},[30574,30577,30582,30587,30590,30595,30600,30603,30608,30613,30616,30621,30624,30627,30630,30633,30636,30639,30659,30681,30684,30687,30707,30710],[10,30575,30571],{"id":30576},"_7vscode远程开发",[567,30578,30579],{},[570,30580,30581],{},"插件1：微软Docker工具",[14,30583,30584],{},[20,30585],{"alt":22,"src":30586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30588,30589],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30591,30592],{},[20,30593],{"alt":22,"src":30594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[567,30596,30597],{"start":44},[570,30598,30599],{},"插件2：微软Docker远程开发工具",[14,30601,30602],{},"下面这是远程开发的插件。",[14,30604,30605],{},[20,30606],{"alt":22,"src":30607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30609,30610],{},[20,30611],{"alt":22,"src":30612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30614,30615],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30617,30618],{},[20,30619],{"alt":22,"src":30620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30622,30623],{},"安装完拓展之后，vscode进行链接：",[14,30625,30626],{},"1.按ctrl+shift+p",[14,30628,30629],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30631,30632],{},"3.选择目前运行的容器",[14,30634,30635],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30637,30638],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[25,30640,30642],{"className":24286,"code":30641,"language":24288,"meta":22,"style":22},"docker run -v 主机目录:容器目录 image-name\n",[31,30643,30644],{"__ignoreMap":22},[34,30645,30646,30648,30650,30653,30656],{"class":36,"line":37},[34,30647,27018],{"class":2427},[34,30649,27695],{"class":187},[34,30651,30652],{"class":63}," -v",[34,30654,30655],{"class":187}," 主机目录:容器目录",[34,30657,30658],{"class":187}," image-name\n",[25,30660,30662],{"className":24286,"code":30661,"language":24288,"meta":22,"style":22},"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",[31,30663,30664],{"__ignoreMap":22},[34,30665,30666,30668,30670,30673,30675,30678],{"class":36,"line":37},[34,30667,27018],{"class":2427},[34,30669,27695],{"class":187},[34,30671,30672],{"class":63}," -it",[34,30674,30652],{"class":63},[34,30676,30677],{"class":187}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[34,30679,30680],{"class":187}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30682,30683],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30685,30686],{},"查看挂载情况：",[25,30688,30690],{"className":24286,"code":30689,"language":24288,"meta":22,"style":22},"mount | grep -i project\n",[31,30691,30692],{"__ignoreMap":22},[34,30693,30694,30697,30699,30702,30704],{"class":36,"line":37},[34,30695,30696],{"class":2427},"mount",[34,30698,25574],{"class":112},[34,30700,30701],{"class":2427}," grep",[34,30703,26895],{"class":63},[34,30705,30706],{"class":187}," project\n",[14,30708,30709],{},"也可以通过ls来进行查看",[532,30711,30712],{},"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":22,"searchDepth":44,"depth":44,"links":30714},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30571,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30721,"title":30722,"body":30723,"description":537,"extension":538,"meta":30727,"navigation":540,"path":30729,"seo":30730,"stem":30731,"__hash__":30732},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30724,"toc":30725},[],{"title":22,"searchDepth":44,"depth":44,"links":30726},[],{"category":30728},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30722,"description":537},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30734,"title":30735,"body":30736,"description":537,"extension":538,"meta":30740,"navigation":540,"path":30741,"seo":30742,"stem":30743,"__hash__":30744},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30737,"toc":30738},[],{"title":22,"searchDepth":44,"depth":44,"links":30739},[],{"category":30728},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30735,"description":537},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30746,"title":30747,"body":30748,"description":537,"extension":538,"meta":31039,"navigation":540,"path":31040,"seo":31041,"stem":31042,"__hash__":31043},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30749,"toc":31037},[30750,30753,30761,30776,30781,30832,30835,30841,31026,31031,31034],[10,30751,30747],{"id":30752},"_1验证深度学习环境",[14,30754,30755,30756],{},"关于环境的安装，看",[847,30757,30760],{"href":30758,"rel":30759},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24329],"Pytorch-->深度学习",[14,30762,30763,30764,30767,30768,30771,30772,30775],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[31,30765,30766],{},"pytorch-cuda=12.4"," 是一个“ ",[760,30769,30770],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[760,30773,30774],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30777,30778],{},[20,30779],{"alt":22,"src":30780},"\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",[25,30782,30784],{"className":24286,"code":30783,"language":24288,"meta":22,"style":22},"# 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",[31,30785,30786,30791],{"__ignoreMap":22},[34,30787,30788],{"class":36,"line":37},[34,30789,30790],{"class":40},"# CUDA 12.4\n",[34,30792,30793,30796,30798,30801,30804,30807,30810,30813,30815,30818,30821,30824,30827,30829],{"class":36,"line":44},[34,30794,30795],{"class":2427},"conda",[34,30797,24298],{"class":187},[34,30799,30800],{"class":187}," pytorch==",[34,30802,30803],{"class":63},"2.5.1",[34,30805,30806],{"class":187}," torchvision==",[34,30808,30809],{"class":63},"0.20.1",[34,30811,30812],{"class":187}," torchaudio==",[34,30814,30803],{"class":63},[34,30816,30817],{"class":187}," pytorch-cuda=",[34,30819,30820],{"class":63},"12.4",[34,30822,30823],{"class":63}," -c",[34,30825,30826],{"class":187}," pytorch",[34,30828,30823],{"class":63},[34,30830,30831],{"class":187}," nvidia\n",[14,30833,30834],{},"）：",[14,30836,30837],{},[847,30838,30839],{"href":30839,"rel":30840},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24329],[25,30842,30844],{"className":27,"code":30843,"language":29,"meta":22,"style":22},"# 对深度学习环境进行测试\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",[31,30845,30846,30851,30859,30864,30874,30890,30895,30905,30942,30949,30961,30977,30982,30992,31004,31014],{"__ignoreMap":22},[34,30847,30848],{"class":36,"line":37},[34,30849,30850],{"class":40},"# 对深度学习环境进行测试\n",[34,30852,30853,30856],{"class":36,"line":44},[34,30854,30855],{"class":112},"import",[34,30857,30858],{"class":59}," torch\n",[34,30860,30861],{"class":36,"line":50},[34,30862,30863],{"class":40},"# 查看cuda是否被激活\n",[34,30865,30866,30869,30871],{"class":36,"line":56},[34,30867,30868],{"class":59},"flag",[34,30870,447],{"class":112},[34,30872,30873],{"class":59},"torch.cuda.is_available()\n",[34,30875,30876,30879,30881,30884,30887],{"class":36,"line":107},[34,30877,30878],{"class":63},"print",[34,30880,617],{"class":59},[34,30882,30883],{"class":187},"\"cuda:\"",[34,30885,30886],{"class":59},", flag)   ",[34,30888,30889],{"class":40},"#返回true的话说明被激活\n",[34,30891,30892],{"class":36,"line":196},[34,30893,30894],{"class":40},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[34,30896,30897,30900,30902],{"class":36,"line":202},[34,30898,30899],{"class":59},"ngpu",[34,30901,447],{"class":112},[34,30903,30904],{"class":63},"1\n",[34,30906,30907,30910,30912,30915,30918,30920,30923,30926,30929,30931,30933,30935,30937,30940],{"class":36,"line":207},[34,30908,30909],{"class":59},"device",[34,30911,447],{"class":112},[34,30913,30914],{"class":59},"torch.device(",[34,30916,30917],{"class":187},"\"cuda:0\"",[34,30919,2168],{"class":112},[34,30921,30922],{"class":59},"(torch.cuda.is_available() ",[34,30924,30925],{"class":112},"and",[34,30927,30928],{"class":59}," ngpu",[34,30930,1564],{"class":112},[34,30932,319],{"class":63},[34,30934,14178],{"class":59},[34,30936,2165],{"class":112},[34,30938,30939],{"class":187}," \"cpu\"",[34,30941,623],{"class":59},[34,30943,30944,30946],{"class":36,"line":222},[34,30945,30878],{"class":63},[34,30947,30948],{"class":59},"(device)\n",[34,30950,30951,30953,30956,30958],{"class":36,"line":227},[34,30952,30878],{"class":63},[34,30954,30955],{"class":59},"(torch.cuda.get_device_name(",[34,30957,319],{"class":63},[34,30959,30960],{"class":59},"))\n",[34,30962,30963,30965,30968,30970,30972,30974],{"class":36,"line":232},[34,30964,30878],{"class":63},[34,30966,30967],{"class":59},"(torch.rand(",[34,30969,309],{"class":63},[34,30971,67],{"class":59},[34,30973,309],{"class":63},[34,30975,30976],{"class":59},").cuda())\n",[34,30978,30979],{"class":36,"line":238},[34,30980,30981],{"class":40},"# 查看cuda和cudnn的版本\n",[34,30983,30984,30987,30989],{"class":36,"line":244},[34,30985,30986],{"class":59},"cuda_version",[34,30988,447],{"class":112},[34,30990,30991],{"class":59},"torch.version.cuda\n",[34,30993,30994,30996,30998,31001],{"class":36,"line":250},[34,30995,30878],{"class":63},[34,30997,617],{"class":59},[34,30999,31000],{"class":187},"\"cuda version\"",[34,31002,31003],{"class":59},",cuda_version)\n",[34,31005,31006,31009,31011],{"class":36,"line":256},[34,31007,31008],{"class":59},"cudnn_version",[34,31010,447],{"class":112},[34,31012,31013],{"class":59},"torch.backends.cudnn.version()\n",[34,31015,31016,31018,31020,31023],{"class":36,"line":261},[34,31017,30878],{"class":63},[34,31019,617],{"class":59},[34,31021,31022],{"class":187},"\"cudnn version\"",[34,31024,31025],{"class":59},",cudnn_version)\n",[14,31027,31028],{},[20,31029],{"alt":22,"src":31030},"\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",[14,31032,31033],{},"cuda:0 指的是一块显卡",[532,31035,31036],{},"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":22,"searchDepth":44,"depth":44,"links":31038},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30747,"description":537},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31045,"title":31046,"body":31047,"description":537,"extension":538,"meta":50849,"navigation":540,"path":50850,"seo":50851,"stem":50852,"__hash__":50853},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31048,"toc":50843},[31049,31052,31056,31060,31063,31068,31073,31076,31081,31086,31091,31094,31098,31103,31107,31112,31115,31120,31123,31126,31129,31132,31137,31140,31145,31150,31155,31160,31163,31167,31170,31175,31779,31784,31787,31792,31795,31798,32262,32265,32268,32271,32274,34324,34327,34332,34337,35132,35135,35140,35918,35922,37581,37585,38299,38303,38307,38312,38317,38322,38325,38330,38335,38340,38345,38350,38354,38359,39641,39646,39649,39652,39655,39810,39813,39816,41032,41037,41732,41736,41740,41745,41750,41753,41758,41763,41768,41773,41778,41783,41788,41793,41798,41803,41808,41813,41818,41823,41828,41833,41838,41843,41848,41853,41858,41863,41868,41873,41878,41883,41888,41893,41898,41903,41907,41911,41914,43391,43395,45042,45046,45740,45744,45747,45750,46294,46297,46301,46304,47701,47705,47708,48286,50073,50077,50080,50840],[10,31050,31046],{"id":31051},"_2经典神经网络",[584,31053,31055],{"id":31054},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22462,31057,31059],{"id":31058},"_211原理介绍","2.1.1.原理介绍",[14,31061,31062],{},"LeNet-5",[567,31064,31065],{},[570,31066,31067],{},"原理",[14,31069,31070],{},[20,31071],{"alt":22,"src":31072},"\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",[14,31074,31075],{},"B是batch批次；C是channel通道",[567,31077,31078],{"start":44},[570,31079,31080],{},"网络参数详细",[14,31082,31083],{},[20,31084],{"alt":22,"src":31085},"\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",[14,31087,31088],{},[20,31089],{"alt":22,"src":31090},"\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",[14,31092,31093],{},"AlexNet",[567,31095,31096],{},[570,31097,31067],{},[14,31099,31100],{},[20,31101],{"alt":22,"src":31102},"\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",[567,31104,31105],{"start":44},[570,31106,31080],{},[14,31108,31109],{},[20,31110],{"alt":22,"src":31111},"\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",[14,31113,31114],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31116,31117],{},[20,31118],{"alt":22,"src":31119},"\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",[14,31121,31122],{},"数据处理中的图像增强操作:",[14,31124,31125],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31127,31128],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31130,31131],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31133,31134],{},[20,31135],{"alt":22,"src":31136},"\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",[14,31138,31139],{},"提升网络精确度的方法：LRN正则化",[14,31141,31142],{},[20,31143],{"alt":22,"src":31144},"\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",[14,31146,31147],{},[20,31148],{"alt":22,"src":31149},"\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",[567,31151,31152],{"start":50},[570,31153,31154],{},"AlexNet的总结",[14,31156,31157],{},[20,31158],{"alt":22,"src":31159},"\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",[14,31161,31162],{},"比LeNet模型要深一丢丢",[22462,31164,31166],{"id":31165},"_212代码实现","2.1.2.代码实现",[14,31168,31169],{},"（1）LeNet",[567,31171,31172],{},[570,31173,31174],{},"模型搭建",[25,31176,31178],{"className":27,"code":31177,"language":29,"meta":22,"style":22},"# 导入库\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",[31,31179,31180,31185,31191,31196,31209,31214,31226,31230,31250,31255,31260,31271,31276,31295,31299,31304,31353,31365,31370,31399,31434,31461,31466,31478,31483,31503,31522,31541,31545,31550,31560,31577,31588,31603,31614,31625,31640,31655,31666,31673,31677,31691,31696,31719,31724,31729,31734,31738,31743,31748,31758],{"__ignoreMap":22},[34,31181,31182],{"class":36,"line":37},[34,31183,31184],{"class":40},"# 导入库\n",[34,31186,31187,31189],{"class":36,"line":44},[34,31188,30855],{"class":112},[34,31190,30858],{"class":59},[34,31192,31193],{"class":36,"line":50},[34,31194,31195],{"class":40},"# 导入神经网络层\n",[34,31197,31198,31201,31204,31206],{"class":36,"line":56},[34,31199,31200],{"class":112},"from",[34,31202,31203],{"class":59}," torch ",[34,31205,30855],{"class":112},[34,31207,31208],{"class":59}," nn\n",[34,31210,31211],{"class":36,"line":107},[34,31212,31213],{"class":40},"# 导入展示神经网络参数的包\n",[34,31215,31216,31218,31221,31223],{"class":36,"line":196},[34,31217,31200],{"class":112},[34,31219,31220],{"class":59}," torchsummary ",[34,31222,30855],{"class":112},[34,31224,31225],{"class":59}," summary\n",[34,31227,31228],{"class":36,"line":202},[34,31229,2864],{"emptyLinePlaceholder":540},[34,31231,31232,31234,31237,31239,31242,31244,31247],{"class":36,"line":207},[34,31233,15158],{"class":112},[34,31235,31236],{"class":2427}," LeNet",[34,31238,617],{"class":59},[34,31240,31241],{"class":2427},"nn",[34,31243,1164],{"class":59},[34,31245,31246],{"class":2427},"Module",[34,31248,31249],{"class":59},"):\n",[34,31251,31252],{"class":36,"line":222},[34,31253,31254],{"class":40},"    # 模型初始化:\n",[34,31256,31257],{"class":36,"line":227},[34,31258,31259],{"class":40},"    # 定义一些网络层和激活函数\n",[34,31261,31262,31265,31268],{"class":36,"line":232},[34,31263,31264],{"class":112},"    def",[34,31266,31267],{"class":63}," __init__",[34,31269,31270],{"class":59},"(self):\n",[34,31272,31273],{"class":36,"line":238},[34,31274,31275],{"class":40},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[34,31277,31278,31281,31284,31287,31290,31293],{"class":36,"line":244},[34,31279,31280],{"class":63},"        super",[34,31282,31283],{"class":59},"(LeNet,",[34,31285,31286],{"class":63},"self",[34,31288,31289],{"class":59},").",[34,31291,31292],{"class":63},"__init__",[34,31294,2440],{"class":59},[34,31296,31297],{"class":36,"line":250},[34,31298,2864],{"emptyLinePlaceholder":540},[34,31300,31301],{"class":36,"line":256},[34,31302,31303],{"class":40},"        # 定义网络层\n",[34,31305,31306,31309,31312,31314,31317,31320,31322,31324,31326,31329,31331,31333,31335,31338,31340,31342,31344,31347,31349,31351],{"class":36,"line":261},[34,31307,31308],{"class":63},"        self",[34,31310,31311],{"class":59},".c1",[34,31313,447],{"class":112},[34,31315,31316],{"class":59},"nn.Conv2d(",[34,31318,31319],{"class":5680},"in_channels",[34,31321,447],{"class":112},[34,31323,64],{"class":63},[34,31325,67],{"class":59},[34,31327,31328],{"class":5680},"out_channels",[34,31330,447],{"class":112},[34,31332,952],{"class":63},[34,31334,67],{"class":59},[34,31336,31337],{"class":5680},"kernel_size",[34,31339,447],{"class":112},[34,31341,927],{"class":63},[34,31343,67],{"class":59},[34,31345,31346],{"class":5680},"padding",[34,31348,447],{"class":112},[34,31350,70],{"class":63},[34,31352,623],{"class":59},[34,31354,31355,31357,31360,31362],{"class":36,"line":267},[34,31356,31308],{"class":63},[34,31358,31359],{"class":59},".sig",[34,31361,447],{"class":112},[34,31363,31364],{"class":59},"nn.Sigmoid()\n",[34,31366,31367],{"class":36,"line":2138},[34,31368,31369],{"class":40},"        # 定义池化\n",[34,31371,31372,31374,31377,31379,31382,31384,31386,31388,31390,31393,31395,31397],{"class":36,"line":2143},[34,31373,31308],{"class":63},[34,31375,31376],{"class":59},".s2",[34,31378,447],{"class":112},[34,31380,31381],{"class":59},"nn.AvgPool2d(",[34,31383,31337],{"class":5680},[34,31385,447],{"class":112},[34,31387,70],{"class":63},[34,31389,67],{"class":59},[34,31391,31392],{"class":5680},"stride",[34,31394,447],{"class":112},[34,31396,70],{"class":63},[34,31398,623],{"class":59},[34,31400,31401,31403,31406,31408,31410,31412,31414,31416,31418,31420,31422,31424,31426,31428,31430,31432],{"class":36,"line":2157},[34,31402,31308],{"class":63},[34,31404,31405],{"class":59},".c3",[34,31407,447],{"class":112},[34,31409,31316],{"class":59},[34,31411,31319],{"class":5680},[34,31413,447],{"class":112},[34,31415,952],{"class":63},[34,31417,67],{"class":59},[34,31419,31328],{"class":5680},[34,31421,447],{"class":112},[34,31423,1207],{"class":63},[34,31425,67],{"class":59},[34,31427,31337],{"class":5680},[34,31429,447],{"class":112},[34,31431,927],{"class":63},[34,31433,623],{"class":59},[34,31435,31436,31438,31441,31443,31445,31447,31449,31451,31453,31455,31457,31459],{"class":36,"line":2162},[34,31437,31308],{"class":63},[34,31439,31440],{"class":59},".s4",[34,31442,447],{"class":112},[34,31444,31381],{"class":59},[34,31446,31337],{"class":5680},[34,31448,447],{"class":112},[34,31450,70],{"class":63},[34,31452,67],{"class":59},[34,31454,31392],{"class":5680},[34,31456,447],{"class":112},[34,31458,70],{"class":63},[34,31460,623],{"class":59},[34,31462,31463],{"class":36,"line":2191},[34,31464,31465],{"class":40},"        # 定义平展层\n",[34,31467,31468,31470,31473,31475],{"class":36,"line":2196},[34,31469,31308],{"class":63},[34,31471,31472],{"class":59},".flatten",[34,31474,447],{"class":112},[34,31476,31477],{"class":59},"nn.Flatten()\n",[34,31479,31480],{"class":36,"line":2213},[34,31481,31482],{"class":40},"        # 定义全连接层\n",[34,31484,31485,31487,31490,31492,31495,31497,31499,31501],{"class":36,"line":2218},[34,31486,31308],{"class":63},[34,31488,31489],{"class":59},".f5",[34,31491,447],{"class":112},[34,31493,31494],{"class":59},"nn.Linear(",[34,31496,4451],{"class":63},[34,31498,67],{"class":59},[34,31500,1423],{"class":63},[34,31502,623],{"class":59},[34,31504,31505,31507,31510,31512,31514,31516,31518,31520],{"class":36,"line":2223},[34,31506,31308],{"class":63},[34,31508,31509],{"class":59},".f6",[34,31511,447],{"class":112},[34,31513,31494],{"class":59},[34,31515,1423],{"class":63},[34,31517,67],{"class":59},[34,31519,1317],{"class":63},[34,31521,623],{"class":59},[34,31523,31524,31526,31529,31531,31533,31535,31537,31539],{"class":36,"line":2228},[34,31525,31308],{"class":63},[34,31527,31528],{"class":59},".f7",[34,31530,447],{"class":112},[34,31532,31494],{"class":59},[34,31534,1317],{"class":63},[34,31536,67],{"class":59},[34,31538,1053],{"class":63},[34,31540,623],{"class":59},[34,31542,31543],{"class":36,"line":2242},[34,31544,2864],{"emptyLinePlaceholder":540},[34,31546,31547],{"class":36,"line":2247},[34,31548,31549],{"class":40},"    # 写工具->写前向传播\n",[34,31551,31552,31554,31557],{"class":36,"line":3041},[34,31553,31264],{"class":112},[34,31555,31556],{"class":2427}," forward",[34,31558,31559],{"class":59},"(self,x):\n",[34,31561,31562,31565,31567,31569,31572,31574],{"class":36,"line":3055},[34,31563,31564],{"class":59},"        x",[34,31566,447],{"class":112},[34,31568,31286],{"class":63},[34,31570,31571],{"class":59},".sig(",[34,31573,31286],{"class":63},[34,31575,31576],{"class":59},".c1(x))\n",[34,31578,31579,31581,31583,31585],{"class":36,"line":3063},[34,31580,31564],{"class":59},[34,31582,447],{"class":112},[34,31584,31286],{"class":63},[34,31586,31587],{"class":59},".s2(x)\n",[34,31589,31590,31592,31594,31596,31598,31600],{"class":36,"line":3068},[34,31591,31564],{"class":59},[34,31593,447],{"class":112},[34,31595,31286],{"class":63},[34,31597,31571],{"class":59},[34,31599,31286],{"class":63},[34,31601,31602],{"class":59},".c3(x))\n",[34,31604,31605,31607,31609,31611],{"class":36,"line":3074},[34,31606,31564],{"class":59},[34,31608,447],{"class":112},[34,31610,31286],{"class":63},[34,31612,31613],{"class":59},".s4(x)\n",[34,31615,31616,31618,31620,31622],{"class":36,"line":3080},[34,31617,31564],{"class":59},[34,31619,447],{"class":112},[34,31621,31286],{"class":63},[34,31623,31624],{"class":59},".flatten(x)\n",[34,31626,31627,31629,31631,31633,31635,31637],{"class":36,"line":3085},[34,31628,31564],{"class":59},[34,31630,447],{"class":112},[34,31632,31286],{"class":63},[34,31634,31571],{"class":59},[34,31636,31286],{"class":63},[34,31638,31639],{"class":59},".f5(x))\n",[34,31641,31642,31644,31646,31648,31650,31652],{"class":36,"line":8412},[34,31643,31564],{"class":59},[34,31645,447],{"class":112},[34,31647,31286],{"class":63},[34,31649,31571],{"class":59},[34,31651,31286],{"class":63},[34,31653,31654],{"class":59},".f6(x))\n",[34,31656,31657,31659,31661,31663],{"class":36,"line":8436},[34,31658,31564],{"class":59},[34,31660,447],{"class":112},[34,31662,31286],{"class":63},[34,31664,31665],{"class":59},".f7(x)\n",[34,31667,31668,31670],{"class":36,"line":8441},[34,31669,15216],{"class":112},[34,31671,31672],{"class":59}," x\n",[34,31674,31675],{"class":36,"line":8447},[34,31676,2864],{"emptyLinePlaceholder":540},[34,31678,31679,31681,31684,31686,31689],{"class":36,"line":8474},[34,31680,2002],{"class":112},[34,31682,31683],{"class":63}," __name__",[34,31685,3413],{"class":112},[34,31687,31688],{"class":187},"\"__main__\"",[34,31690,4203],{"class":59},[34,31692,31693],{"class":36,"line":8479},[34,31694,31695],{"class":40},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[34,31697,31698,31701,31703,31705,31708,31710,31713,31715,31717],{"class":36,"line":8485},[34,31699,31700],{"class":59},"    device",[34,31702,447],{"class":112},[34,31704,30914],{"class":59},[34,31706,31707],{"class":187},"\"cuda\"",[34,31709,2168],{"class":112},[34,31711,31712],{"class":59}," torch.cuda.is_available() ",[34,31714,2165],{"class":112},[34,31716,30939],{"class":187},[34,31718,623],{"class":59},[34,31720,31721],{"class":36,"line":8497},[34,31722,31723],{"class":40},"    # 如果就是想指定用cpu用下方代码:\n",[34,31725,31726],{"class":36,"line":8509},[34,31727,31728],{"class":40},"    # device=\"cpu\"\n",[34,31730,31731],{"class":36,"line":8521},[34,31732,31733],{"class":40},"    # print(device)\n",[34,31735,31736],{"class":36,"line":10180},[34,31737,2864],{"emptyLinePlaceholder":540},[34,31739,31740],{"class":36,"line":10205},[34,31741,31742],{"class":40},"    # 实例化模型\n",[34,31744,31745],{"class":36,"line":10228},[34,31746,31747],{"class":40},"    # 将模型放到设备中去运行\n",[34,31749,31750,31753,31755],{"class":36,"line":10252},[34,31751,31752],{"class":59},"    model",[34,31754,447],{"class":112},[34,31756,31757],{"class":59},"LeNet().to(device)\n",[34,31759,31760,31763,31766,31768,31770,31772,31774,31776],{"class":36,"line":10257},[34,31761,31762],{"class":63},"    print",[34,31764,31765],{"class":59},"(summary(model,(",[34,31767,64],{"class":63},[34,31769,67],{"class":59},[34,31771,1506],{"class":63},[34,31773,67],{"class":59},[34,31775,1506],{"class":63},[34,31777,31778],{"class":59},")))\n",[14,31780,31781],{},[20,31782],{"alt":22,"src":31783},"\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",[14,31785,31786],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[567,31788,31789],{"start":44},[570,31790,31791],{},"训练",[14,31793,31794],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31796,31797],{},"在训练之前可以将数据展示看一下",[25,31799,31801],{"className":27,"code":31800,"language":29,"meta":22,"style":22},"# 建立画图的函数，用于展示数据\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",[31,31802,31803,31808,31813,31825,31837,31850,31855,31867,31872,31884,31889,31901,31905,31909,31930,31942,31947,31968,31979,31983,31988,32006,32017,32022,32033,32038,32049,32053,32058,32073,32086,32091,32096,32109,32122,32135,32140,32144,32149,32169,32186,32206,32219,32232,32242,32257],{"__ignoreMap":22},[34,31804,31805],{"class":36,"line":37},[34,31806,31807],{"class":40},"# 建立画图的函数，用于展示数据\n",[34,31809,31810],{"class":36,"line":44},[34,31811,31812],{"class":40},"# torchvision中包含很多内置的数据集\n",[34,31814,31815,31817,31820,31822],{"class":36,"line":50},[34,31816,31200],{"class":112},[34,31818,31819],{"class":59}," sklearn.externals.array_api_compat.torch ",[34,31821,30855],{"class":112},[34,31823,31824],{"class":59}," squeeze\n",[34,31826,31827,31829,31832,31834],{"class":36,"line":56},[34,31828,31200],{"class":112},[34,31830,31831],{"class":59}," torchvision.datasets ",[34,31833,30855],{"class":112},[34,31835,31836],{"class":59}," FashionMNIST\n",[34,31838,31839,31841,31844,31847],{"class":36,"line":107},[34,31840,30855],{"class":112},[34,31842,31843],{"class":59}," numpy ",[34,31845,31846],{"class":112},"as",[34,31848,31849],{"class":59}," np\n",[34,31851,31852],{"class":36,"line":196},[34,31853,31854],{"class":40},"# 引入处理数据集的包\n",[34,31856,31857,31859,31862,31864],{"class":36,"line":202},[34,31858,31200],{"class":112},[34,31860,31861],{"class":59}," torchvision ",[34,31863,30855],{"class":112},[34,31865,31866],{"class":59}," transforms\n",[34,31868,31869],{"class":36,"line":207},[34,31870,31871],{"class":40},"# 从torch库中引入数据处理的包\n",[34,31873,31874,31876,31879,31881],{"class":36,"line":222},[34,31875,30855],{"class":112},[34,31877,31878],{"class":59}," torch.utils.data ",[34,31880,31846],{"class":112},[34,31882,31883],{"class":59}," Data\n",[34,31885,31886],{"class":36,"line":227},[34,31887,31888],{"class":40},"# 导入画图的库\n",[34,31890,31891,31893,31896,31898],{"class":36,"line":232},[34,31892,30855],{"class":112},[34,31894,31895],{"class":59}," matplotlib.pyplot ",[34,31897,31846],{"class":112},[34,31899,31900],{"class":59}," plt\n",[34,31902,31903],{"class":36,"line":238},[34,31904,2864],{"emptyLinePlaceholder":540},[34,31906,31907],{"class":36,"line":244},[34,31908,2864],{"emptyLinePlaceholder":540},[34,31910,31911,31914,31916,31919,31922,31924,31927],{"class":36,"line":250},[34,31912,31913],{"class":59},"train_data",[34,31915,447],{"class":112},[34,31917,31918],{"class":59},"FashionMNIST(",[34,31920,31921],{"class":5680},"root",[34,31923,447],{"class":112},[34,31925,31926],{"class":187},"'.\u002Fdata'",[34,31928,31929],{"class":59},",\n",[34,31931,31932,31935,31937,31940],{"class":36,"line":256},[34,31933,31934],{"class":5680},"                        train",[34,31936,447],{"class":112},[34,31938,31939],{"class":63},"True",[34,31941,31929],{"class":59},[34,31943,31944],{"class":36,"line":261},[34,31945,31946],{"class":40},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[34,31948,31949,31952,31954,31957,31960,31962,31965],{"class":36,"line":267},[34,31950,31951],{"class":5680},"                        transform",[34,31953,447],{"class":112},[34,31955,31956],{"class":59},"transforms.Compose([transforms.Resize(",[34,31958,31959],{"class":5680},"size",[34,31961,447],{"class":112},[34,31963,31964],{"class":63},"224",[34,31966,31967],{"class":59},"),transforms.ToTensor()]),\n",[34,31969,31970,31973,31975,31977],{"class":36,"line":2138},[34,31971,31972],{"class":5680},"                        download",[34,31974,447],{"class":112},[34,31976,31939],{"class":63},[34,31978,623],{"class":59},[34,31980,31981],{"class":36,"line":2143},[34,31982,2864],{"emptyLinePlaceholder":540},[34,31984,31985],{"class":36,"line":2157},[34,31986,31987],{"class":40},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[34,31989,31990,31993,31995,31998,32001,32003],{"class":36,"line":2162},[34,31991,31992],{"class":59},"train_loader",[34,31994,447],{"class":112},[34,31996,31997],{"class":59},"Data.DataLoader(",[34,31999,32000],{"class":5680},"dataset",[34,32002,447],{"class":112},[34,32004,32005],{"class":59},"train_data,\n",[34,32007,32008,32011,32013,32015],{"class":36,"line":2191},[34,32009,32010],{"class":5680},"                             batch_size",[34,32012,447],{"class":112},[34,32014,813],{"class":63},[34,32016,31929],{"class":59},[34,32018,32019],{"class":36,"line":2196},[34,32020,32021],{"class":40},"                             # 数据是否打乱\n",[34,32023,32024,32027,32029,32031],{"class":36,"line":2213},[34,32025,32026],{"class":5680},"                             shuffle",[34,32028,447],{"class":112},[34,32030,31939],{"class":63},[34,32032,31929],{"class":59},[34,32034,32035],{"class":36,"line":2218},[34,32036,32037],{"class":40},"                             # 规定加载数据的进程\n",[34,32039,32040,32043,32045,32047],{"class":36,"line":2223},[34,32041,32042],{"class":5680},"                             num_workers",[34,32044,447],{"class":112},[34,32046,319],{"class":63},[34,32048,623],{"class":59},[34,32050,32051],{"class":36,"line":2228},[34,32052,2864],{"emptyLinePlaceholder":540},[34,32054,32055],{"class":36,"line":2242},[34,32056,32057],{"class":40},"# 获得一个batch的数据\n",[34,32059,32060,32062,32065,32067,32070],{"class":36,"line":2247},[34,32061,3489],{"class":112},[34,32063,32064],{"class":59}," step,(b_x,b_y) ",[34,32066,26508],{"class":112},[34,32068,32069],{"class":63}," enumerate",[34,32071,32072],{"class":59},"(train_loader):\n",[34,32074,32075,32077,32080,32082,32084],{"class":36,"line":3041},[34,32076,3565],{"class":112},[34,32078,32079],{"class":59}," step ",[34,32081,1564],{"class":112},[34,32083,4557],{"class":63},[34,32085,4203],{"class":59},[34,32087,32088],{"class":36,"line":3055},[34,32089,32090],{"class":112},"        break\n",[34,32092,32093],{"class":36,"line":3063},[34,32094,32095],{"class":40},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[34,32097,32098,32101,32103,32106],{"class":36,"line":3068},[34,32099,32100],{"class":59},"batch_x",[34,32102,447],{"class":112},[34,32104,32105],{"class":59},"b_x.squeeze().numpy()  ",[34,32107,32108],{"class":40},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[34,32110,32111,32114,32116,32119],{"class":36,"line":3074},[34,32112,32113],{"class":59},"batch_y",[34,32115,447],{"class":112},[34,32117,32118],{"class":59},"b_y.numpy()   ",[34,32120,32121],{"class":40},"#将张量转换成功numpy数组\n",[34,32123,32124,32127,32129,32132],{"class":36,"line":3080},[34,32125,32126],{"class":59},"class_label",[34,32128,447],{"class":112},[34,32130,32131],{"class":59},"train_data.classes  ",[34,32133,32134],{"class":40},"#训练集标签\n",[34,32136,32137],{"class":36,"line":3085},[34,32138,32139],{"class":40},"# print(class_label)\n",[34,32141,32142],{"class":36,"line":8412},[34,32143,2864],{"emptyLinePlaceholder":540},[34,32145,32146],{"class":36,"line":8436},[34,32147,32148],{"class":40},"# 可视化一个batch的图像\n",[34,32150,32151,32154,32157,32159,32161,32163,32165,32167],{"class":36,"line":8441},[34,32152,32153],{"class":59},"plt.figure(",[34,32155,32156],{"class":5680},"figsize",[34,32158,447],{"class":112},[34,32160,617],{"class":59},[34,32162,1105],{"class":63},[34,32164,67],{"class":59},[34,32166,927],{"class":63},[34,32168,30960],{"class":59},[34,32170,32171,32173,32176,32178,32181,32183],{"class":36,"line":8447},[34,32172,3489],{"class":112},[34,32174,32175],{"class":59}," ii ",[34,32177,26508],{"class":112},[34,32179,32180],{"class":59}," np.arange(",[34,32182,7822],{"class":63},[34,32184,32185],{"class":59},"(batch_y)):\n",[34,32187,32188,32191,32193,32195,32197,32200,32202,32204],{"class":36,"line":8474},[34,32189,32190],{"class":59},"    plt.subplot(",[34,32192,217],{"class":63},[34,32194,67],{"class":59},[34,32196,1207],{"class":63},[34,32198,32199],{"class":59},",ii ",[34,32201,1088],{"class":112},[34,32203,25583],{"class":63},[34,32205,623],{"class":59},[34,32207,32208,32211,32214,32216],{"class":36,"line":8479},[34,32209,32210],{"class":59},"    plt.imshow(batch_x[ii,:,:],",[34,32212,32213],{"class":5680},"cmap",[34,32215,447],{"class":112},[34,32217,32218],{"class":59},"plt.cm.gray)\n",[34,32220,32221,32224,32226,32228,32230],{"class":36,"line":8485},[34,32222,32223],{"class":59},"    plt.title(class_label[batch_y[ii]],",[34,32225,31959],{"class":5680},[34,32227,447],{"class":112},[34,32229,1053],{"class":63},[34,32231,623],{"class":59},[34,32233,32234,32237,32240],{"class":36,"line":8497},[34,32235,32236],{"class":59},"    plt.axis(",[34,32238,32239],{"class":187},"\"off\"",[34,32241,623],{"class":59},[34,32243,32244,32247,32250,32252,32255],{"class":36,"line":8509},[34,32245,32246],{"class":59},"    plt.subplots_adjust(",[34,32248,32249],{"class":5680},"wspace",[34,32251,447],{"class":112},[34,32253,32254],{"class":63},"0.05",[34,32256,623],{"class":59},[34,32258,32259],{"class":36,"line":8521},[34,32260,32261],{"class":59},"plt.show()\n",[14,32263,32264],{},"用matplotlib进行展示的过程可以后续再补",[14,32266,32267],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32269,32270],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32272,32273],{},"模型训练：",[25,32275,32277],{"className":27,"code":32276,"language":29,"meta":22,"style":22},"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",[31,32278,32279,32286,32293,32297,32309,32315,32326,32336,32346,32356,32366,32371,32383,32393,32397,32401,32406,32417,32430,32441,32458,32469,32508,32524,32536,32547,32552,32563,32579,32590,32601,32612,32619,32623,32628,32633,32637,32642,32652,32673,32677,32681,32686,32691,32696,32716,32720,32725,32735,32739,32744,32753,32758,32763,32768,32778,32782,32786,32791,32796,32806,32811,32821,32826,32835,32840,32849,32854,32863,32867,32872,32882,32886,32890,32895,32910,32938,32953,32957,32962,32967,32976,32981,32990,32995,33004,33009,33018,33023,33032,33037,33046,33051,33064,33069,33079,33084,33094,33100,33106,33112,33118,33129,33135,33155,33161,33172,33178,33184,33190,33196,33202,33208,33214,33234,33240,33256,33262,33276,33282,33297,33303,33312,33318,33327,33333,33339,33348,33354,33365,33371,33390,33396,33407,33413,33433,33449,33455,33469,33475,33481,33492,33498,33504,33514,33520,33531,33537,33547,33552,33558,33607,33654,33659,33665,33684,33690,33709,33715,33721,33731,33736,33742,33758,33803,33809,33815,33821,33832,33838,33844,33850,33868,33882,33891,33900,33909,33918,33924,33930,33938,33943,33949,33960,33966,33986,33992,33998,34004,34021,34027,34033,34039,34045,34051,34078,34102,34108,34114,34120,34131,34142,34148,34165,34188,34211,34217,34222,34231,34241,34247,34252,34258,34271,34277,34288,34299,34318],{"__ignoreMap":22},[34,32280,32281,32283],{"class":36,"line":37},[34,32282,30855],{"class":112},[34,32284,32285],{"class":59}," copy\n",[34,32287,32288,32290],{"class":36,"line":44},[34,32289,30855],{"class":112},[34,32291,32292],{"class":59}," time\n",[34,32294,32295],{"class":36,"line":50},[34,32296,2864],{"emptyLinePlaceholder":540},[34,32298,32299,32301,32304,32306],{"class":36,"line":56},[34,32300,30855],{"class":112},[34,32302,32303],{"class":59}," pandas ",[34,32305,31846],{"class":112},[34,32307,32308],{"class":59}," pd\n",[34,32310,32311,32313],{"class":36,"line":107},[34,32312,30855],{"class":112},[34,32314,30858],{"class":59},[34,32316,32317,32319,32321,32323],{"class":36,"line":196},[34,32318,31200],{"class":112},[34,32320,31878],{"class":59},[34,32322,30855],{"class":112},[34,32324,32325],{"class":59}," Dataset\n",[34,32327,32328,32330,32332,32334],{"class":36,"line":202},[34,32329,31200],{"class":112},[34,32331,31831],{"class":59},[34,32333,30855],{"class":112},[34,32335,31836],{"class":59},[34,32337,32338,32340,32342,32344],{"class":36,"line":207},[34,32339,31200],{"class":112},[34,32341,31861],{"class":59},[34,32343,30855],{"class":112},[34,32345,31866],{"class":59},[34,32347,32348,32350,32352,32354],{"class":36,"line":222},[34,32349,30855],{"class":112},[34,32351,31878],{"class":59},[34,32353,31846],{"class":112},[34,32355,31883],{"class":59},[34,32357,32358,32360,32362,32364],{"class":36,"line":227},[34,32359,30855],{"class":112},[34,32361,31895],{"class":59},[34,32363,31846],{"class":112},[34,32365,31900],{"class":59},[34,32367,32368],{"class":36,"line":232},[34,32369,32370],{"class":40},"# 导入模型\n",[34,32372,32373,32375,32378,32380],{"class":36,"line":238},[34,32374,31200],{"class":112},[34,32376,32377],{"class":59}," model ",[34,32379,30855],{"class":112},[34,32381,32382],{"class":59}," LeNet\n",[34,32384,32385,32387,32389,32391],{"class":36,"line":244},[34,32386,31200],{"class":112},[34,32388,31203],{"class":59},[34,32390,30855],{"class":112},[34,32392,31208],{"class":59},[34,32394,32395],{"class":36,"line":250},[34,32396,2864],{"emptyLinePlaceholder":540},[34,32398,32399],{"class":36,"line":256},[34,32400,2864],{"emptyLinePlaceholder":540},[34,32402,32403],{"class":36,"line":261},[34,32404,32405],{"class":40},"# 处理训练集与验证集函数--->划分数据集\n",[34,32407,32408,32411,32414],{"class":36,"line":267},[34,32409,32410],{"class":112},"def",[34,32412,32413],{"class":2427}," train_val_data_process",[34,32415,32416],{"class":59},"():\n",[34,32418,32419,32422,32424,32426,32428],{"class":36,"line":2138},[34,32420,32421],{"class":59},"    train_data",[34,32423,447],{"class":112},[34,32425,31918],{"class":59},[34,32427,31926],{"class":187},[34,32429,31929],{"class":59},[34,32431,32432,32435,32437,32439],{"class":36,"line":2143},[34,32433,32434],{"class":5680},"                            train",[34,32436,447],{"class":112},[34,32438,31939],{"class":63},[34,32440,31929],{"class":59},[34,32442,32443,32446,32448,32450,32452,32454,32456],{"class":36,"line":2157},[34,32444,32445],{"class":5680},"                            transform",[34,32447,447],{"class":112},[34,32449,31956],{"class":59},[34,32451,31959],{"class":5680},[34,32453,447],{"class":112},[34,32455,1506],{"class":63},[34,32457,31967],{"class":59},[34,32459,32460,32463,32465,32467],{"class":36,"line":2162},[34,32461,32462],{"class":5680},"                            download",[34,32464,447],{"class":112},[34,32466,31939],{"class":63},[34,32468,623],{"class":59},[34,32470,32471,32474,32476,32479,32482,32484,32487,32489,32491,32494,32496,32498,32501,32503,32505],{"class":36,"line":2191},[34,32472,32473],{"class":59},"    train_data,val_data",[34,32475,447],{"class":112},[34,32477,32478],{"class":59},"Data.random_split(train_data,[",[34,32480,32481],{"class":63},"round",[34,32483,617],{"class":59},[34,32485,32486],{"class":63},"0.8",[34,32488,1062],{"class":112},[34,32490,7822],{"class":63},[34,32492,32493],{"class":59},"(train_data)),",[34,32495,32481],{"class":63},[34,32497,617],{"class":59},[34,32499,32500],{"class":63},"0.2",[34,32502,1062],{"class":112},[34,32504,7822],{"class":63},[34,32506,32507],{"class":59},"(train_data))])\n",[34,32509,32510,32513,32515,32518,32520,32522],{"class":36,"line":2196},[34,32511,32512],{"class":59},"    train_dataloader ",[34,32514,447],{"class":112},[34,32516,32517],{"class":59}," Data.DataLoader(",[34,32519,32000],{"class":5680},[34,32521,447],{"class":112},[34,32523,32005],{"class":59},[34,32525,32526,32529,32531,32534],{"class":36,"line":2213},[34,32527,32528],{"class":5680},"                                       batch_size",[34,32530,447],{"class":112},[34,32532,32533],{"class":63},"128",[34,32535,31929],{"class":59},[34,32537,32538,32541,32543,32545],{"class":36,"line":2218},[34,32539,32540],{"class":5680},"                                       shuffle",[34,32542,447],{"class":112},[34,32544,31939],{"class":63},[34,32546,31929],{"class":59},[34,32548,32549],{"class":36,"line":2223},[34,32550,32551],{"class":40},"                                       # 规定8个进程\n",[34,32553,32554,32557,32559,32561],{"class":36,"line":2228},[34,32555,32556],{"class":5680},"                                       num_workers",[34,32558,447],{"class":112},[34,32560,1002],{"class":63},[34,32562,623],{"class":59},[34,32564,32565,32568,32570,32572,32574,32576],{"class":36,"line":2242},[34,32566,32567],{"class":59},"    val_dataloader",[34,32569,447],{"class":112},[34,32571,31997],{"class":59},[34,32573,32000],{"class":5680},[34,32575,447],{"class":112},[34,32577,32578],{"class":59},"val_data,\n",[34,32580,32581,32584,32586,32588],{"class":36,"line":2247},[34,32582,32583],{"class":5680},"                                   batch_size",[34,32585,447],{"class":112},[34,32587,32533],{"class":63},[34,32589,31929],{"class":59},[34,32591,32592,32595,32597,32599],{"class":36,"line":3041},[34,32593,32594],{"class":5680},"                                   shuffle",[34,32596,447],{"class":112},[34,32598,31939],{"class":63},[34,32600,31929],{"class":59},[34,32602,32603,32606,32608,32610],{"class":36,"line":3055},[34,32604,32605],{"class":5680},"                                   num_workers",[34,32607,447],{"class":112},[34,32609,1002],{"class":63},[34,32611,623],{"class":59},[34,32613,32614,32616],{"class":36,"line":3063},[34,32615,4554],{"class":112},[34,32617,32618],{"class":59}," train_dataloader,val_dataloader\n",[34,32620,32621],{"class":36,"line":3068},[34,32622,2864],{"emptyLinePlaceholder":540},[34,32624,32625],{"class":36,"line":3074},[34,32626,32627],{"class":40},"# 验证是否出错\n",[34,32629,32630],{"class":36,"line":3080},[34,32631,32632],{"class":40},"# train_val_data_process()\n",[34,32634,32635],{"class":36,"line":3085},[34,32636,2864],{"emptyLinePlaceholder":540},[34,32638,32639],{"class":36,"line":8412},[34,32640,32641],{"class":40},"# 定义模型训练函数\n",[34,32643,32644,32646,32649],{"class":36,"line":8436},[34,32645,32410],{"class":112},[34,32647,32648],{"class":2427}," train_model_process",[34,32650,32651],{"class":59},"(model,train_dataloader,val_dataloader,num_epochs):\n",[34,32653,32654,32656,32658,32660,32662,32664,32666,32668,32671],{"class":36,"line":8441},[34,32655,31700],{"class":59},[34,32657,447],{"class":112},[34,32659,30914],{"class":59},[34,32661,31707],{"class":187},[34,32663,2168],{"class":112},[34,32665,31712],{"class":59},[34,32667,2165],{"class":112},[34,32669,32670],{"class":187}," 'cpu'",[34,32672,623],{"class":59},[34,32674,32675],{"class":36,"line":8447},[34,32676,2864],{"emptyLinePlaceholder":540},[34,32678,32679],{"class":36,"line":8474},[34,32680,2864],{"emptyLinePlaceholder":540},[34,32682,32683],{"class":36,"line":8479},[34,32684,32685],{"class":40},"    # 定义优化器\n",[34,32687,32688],{"class":36,"line":8485},[34,32689,32690],{"class":40},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[34,32692,32693],{"class":36,"line":8497},[34,32694,32695],{"class":40},"    # lr为学习率\n",[34,32697,32698,32701,32703,32706,32709,32711,32714],{"class":36,"line":8509},[34,32699,32700],{"class":59},"    optimizer",[34,32702,447],{"class":112},[34,32704,32705],{"class":59},"torch.optim.Adam(model.parameters(),",[34,32707,32708],{"class":5680},"lr",[34,32710,447],{"class":112},[34,32712,32713],{"class":63},"0.001",[34,32715,623],{"class":59},[34,32717,32718],{"class":36,"line":8521},[34,32719,2864],{"emptyLinePlaceholder":540},[34,32721,32722],{"class":36,"line":10180},[34,32723,32724],{"class":40},"    # 定义损失函数使用交叉熵损失函数\n",[34,32726,32727,32730,32732],{"class":36,"line":10205},[34,32728,32729],{"class":59},"    criterion",[34,32731,447],{"class":112},[34,32733,32734],{"class":59},"nn.CrossEntropyLoss()\n",[34,32736,32737],{"class":36,"line":10228},[34,32738,2864],{"emptyLinePlaceholder":540},[34,32740,32741],{"class":36,"line":10252},[34,32742,32743],{"class":40},"    # 将模型放到GPU中进行训练\n",[34,32745,32746,32748,32750],{"class":36,"line":10257},[34,32747,31752],{"class":59},[34,32749,447],{"class":112},[34,32751,32752],{"class":59},"model.to(device)\n",[34,32754,32755],{"class":36,"line":10262},[34,32756,32757],{"class":40},"    # 复制当前模型的参数\n",[34,32759,32760],{"class":36,"line":10267},[34,32761,32762],{"class":40},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[34,32764,32765],{"class":36,"line":10276},[34,32766,32767],{"class":40},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[34,32769,32770,32773,32775],{"class":36,"line":10281},[34,32771,32772],{"class":59},"    best_model_wts",[34,32774,447],{"class":112},[34,32776,32777],{"class":59},"copy.deepcopy(model.state_dict())\n",[34,32779,32780],{"class":36,"line":10287},[34,32781,2864],{"emptyLinePlaceholder":540},[34,32783,32784],{"class":36,"line":10308},[34,32785,2864],{"emptyLinePlaceholder":540},[34,32787,32788],{"class":36,"line":10314},[34,32789,32790],{"class":40},"    # 初始化参数\n",[34,32792,32793],{"class":36,"line":10328},[34,32794,32795],{"class":40},"    # 最高准确度\n",[34,32797,32798,32801,32803],{"class":36,"line":10334},[34,32799,32800],{"class":59},"    best_acc",[34,32802,447],{"class":112},[34,32804,32805],{"class":63},"0.0\n",[34,32807,32808],{"class":36,"line":10361},[34,32809,32810],{"class":40},"    # 训练集损失列表\n",[34,32812,32813,32816,32818],{"class":36,"line":10370},[34,32814,32815],{"class":59},"    train_loss_all",[34,32817,447],{"class":112},[34,32819,32820],{"class":59},"[]\n",[34,32822,32823],{"class":36,"line":10376},[34,32824,32825],{"class":40},"    # 验证集函数列表\n",[34,32827,32828,32831,32833],{"class":36,"line":10384},[34,32829,32830],{"class":59},"    val_loss_all",[34,32832,447],{"class":112},[34,32834,32820],{"class":59},[34,32836,32837],{"class":36,"line":10389},[34,32838,32839],{"class":40},"    # 训练集准确度列表\n",[34,32841,32842,32845,32847],{"class":36,"line":17068},[34,32843,32844],{"class":59},"    train_acc_all",[34,32846,447],{"class":112},[34,32848,32820],{"class":59},[34,32850,32851],{"class":36,"line":17074},[34,32852,32853],{"class":40},"    # 验证集准确度列表\n",[34,32855,32856,32859,32861],{"class":36,"line":17097},[34,32857,32858],{"class":59},"    val_acc_all",[34,32860,447],{"class":112},[34,32862,32820],{"class":59},[34,32864,32865],{"class":36,"line":17103},[34,32866,2864],{"emptyLinePlaceholder":540},[34,32868,32869],{"class":36,"line":17126},[34,32870,32871],{"class":40},"    # 保存当前时间--->方便看每轮训练的时间\n",[34,32873,32874,32877,32879],{"class":36,"line":17140},[34,32875,32876],{"class":59},"    since",[34,32878,447],{"class":112},[34,32880,32881],{"class":59},"time.time()\n",[34,32883,32884],{"class":36,"line":17160},[34,32885,2864],{"emptyLinePlaceholder":540},[34,32887,32888],{"class":36,"line":17166},[34,32889,2864],{"emptyLinePlaceholder":540},[34,32891,32892],{"class":36,"line":17177},[34,32893,32894],{"class":40},"    # 准备工作完成--->开始训练模型\n",[34,32896,32897,32899,32902,32904,32907],{"class":36,"line":17200},[34,32898,3665],{"class":112},[34,32900,32901],{"class":59}," epoch ",[34,32903,26508],{"class":112},[34,32905,32906],{"class":63}," range",[34,32908,32909],{"class":59},"(num_epochs):\n",[34,32911,32912,32915,32917,32920,32923,32925,32927,32929,32932,32934,32936],{"class":36,"line":17222},[34,32913,32914],{"class":63},"        print",[34,32916,617],{"class":59},[34,32918,32919],{"class":187},"\"Epoch ",[34,32921,32922],{"class":63},"{}",[34,32924,1190],{"class":187},[34,32926,32922],{"class":63},[34,32928,860],{"class":187},[34,32930,32931],{"class":59},".format(epoch,num_epochs",[34,32933,113],{"class":112},[34,32935,64],{"class":63},[34,32937,30960],{"class":59},[34,32939,32940,32942,32944,32947,32949,32951],{"class":36,"line":17227},[34,32941,32914],{"class":63},[34,32943,617],{"class":59},[34,32945,32946],{"class":187},"\"-\"",[34,32948,1062],{"class":112},[34,32950,1053],{"class":63},[34,32952,623],{"class":59},[34,32954,32955],{"class":36,"line":17233},[34,32956,2864],{"emptyLinePlaceholder":540},[34,32958,32959],{"class":36,"line":17247},[34,32960,32961],{"class":40},"        # 初始化参数\n",[34,32963,32964],{"class":36,"line":17260},[34,32965,32966],{"class":40},"        # 训练集损失函数\n",[34,32968,32969,32972,32974],{"class":36,"line":17265},[34,32970,32971],{"class":59},"        train_loss",[34,32973,447],{"class":112},[34,32975,32805],{"class":63},[34,32977,32978],{"class":36,"line":17279},[34,32979,32980],{"class":40},"        # 训练集准确度\n",[34,32982,32983,32986,32988],{"class":36,"line":17284},[34,32984,32985],{"class":59},"        train_corrects",[34,32987,447],{"class":112},[34,32989,3549],{"class":63},[34,32991,32992],{"class":36,"line":17290},[34,32993,32994],{"class":40},"        # 验证集损失函数\n",[34,32996,32997,33000,33002],{"class":36,"line":17295},[34,32998,32999],{"class":59},"        val_loss",[34,33001,447],{"class":112},[34,33003,32805],{"class":63},[34,33005,33006],{"class":36,"line":17309},[34,33007,33008],{"class":40},"        # 验证集准确度\n",[34,33010,33011,33014,33016],{"class":36,"line":17314},[34,33012,33013],{"class":59},"        val_corrects",[34,33015,447],{"class":112},[34,33017,3549],{"class":63},[34,33019,33020],{"class":36,"line":17319},[34,33021,33022],{"class":40},"        # 训练集样本数量\n",[34,33024,33025,33028,33030],{"class":36,"line":17333},[34,33026,33027],{"class":59},"        train_num",[34,33029,447],{"class":112},[34,33031,3549],{"class":63},[34,33033,33034],{"class":36,"line":17345},[34,33035,33036],{"class":40},"        # 验证集样本数量\n",[34,33038,33039,33042,33044],{"class":36,"line":17350},[34,33040,33041],{"class":59},"        val_num",[34,33043,447],{"class":112},[34,33045,3549],{"class":63},[34,33047,33048],{"class":36,"line":17363},[34,33049,33050],{"class":40},"        # 将数据放到设备,并开始训练\n",[34,33052,33053,33055,33057,33059,33061],{"class":36,"line":17368},[34,33054,3867],{"class":112},[34,33056,32064],{"class":59},[34,33058,26508],{"class":112},[34,33060,32069],{"class":63},[34,33062,33063],{"class":59},"(train_dataloader):\n",[34,33065,33066],{"class":36,"line":17373},[34,33067,33068],{"class":40},"            # 将特征放入到训练设备\n",[34,33070,33071,33074,33076],{"class":36,"line":17378},[34,33072,33073],{"class":59},"            b_x",[34,33075,447],{"class":112},[34,33077,33078],{"class":59},"b_x.to(device)\n",[34,33080,33081],{"class":36,"line":17391},[34,33082,33083],{"class":40},"            # 将标签放入到训练设备当中\n",[34,33085,33086,33089,33091],{"class":36,"line":17396},[34,33087,33088],{"class":59},"            b_y",[34,33090,447],{"class":112},[34,33092,33093],{"class":59},"b_y.to(device)\n",[34,33095,33097],{"class":36,"line":33096},98,[34,33098,33099],{"class":40},"            # 设置模型为训练模式\n",[34,33101,33103],{"class":36,"line":33102},99,[34,33104,33105],{"class":59},"            model.train()\n",[34,33107,33109],{"class":36,"line":33108},100,[34,33110,33111],{"class":40},"            # 将数据放到模型当中,开始前向传播\n",[34,33113,33115],{"class":36,"line":33114},101,[34,33116,33117],{"class":40},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[34,33119,33121,33124,33126],{"class":36,"line":33120},102,[34,33122,33123],{"class":59},"            output",[34,33125,447],{"class":112},[34,33127,33128],{"class":59},"model(b_x)\n",[34,33130,33132],{"class":36,"line":33131},103,[34,33133,33134],{"class":40},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[34,33136,33138,33141,33143,33146,33149,33151,33153],{"class":36,"line":33137},104,[34,33139,33140],{"class":59},"            pre_lab",[34,33142,447],{"class":112},[34,33144,33145],{"class":59},"torch.argmax(output,",[34,33147,33148],{"class":5680},"dim",[34,33150,447],{"class":112},[34,33152,64],{"class":63},[34,33154,623],{"class":59},[34,33156,33158],{"class":36,"line":33157},105,[34,33159,33160],{"class":40},"            # 计算每一个batch的损失函数\n",[34,33162,33164,33167,33169],{"class":36,"line":33163},106,[34,33165,33166],{"class":59},"            loss",[34,33168,447],{"class":112},[34,33170,33171],{"class":59},"criterion(output,b_y)\n",[34,33173,33175],{"class":36,"line":33174},107,[34,33176,33177],{"class":40},"            # 将梯度初始化为0\n",[34,33179,33181],{"class":36,"line":33180},108,[34,33182,33183],{"class":59},"            optimizer.zero_grad()\n",[34,33185,33187],{"class":36,"line":33186},109,[34,33188,33189],{"class":40},"            # 梯度置为0后再进行反向传播\n",[34,33191,33193],{"class":36,"line":33192},110,[34,33194,33195],{"class":59},"            loss.backward()\n",[34,33197,33199],{"class":36,"line":33198},111,[34,33200,33201],{"class":40},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[34,33203,33205],{"class":36,"line":33204},112,[34,33206,33207],{"class":59},"            optimizer.step()\n",[34,33209,33211],{"class":36,"line":33210},113,[34,33212,33213],{"class":40},"            # loss.item()指的是batch的平均损失\n",[34,33215,33217,33220,33222,33225,33227,33230,33232],{"class":36,"line":33216},114,[34,33218,33219],{"class":59},"            train_loss",[34,33221,9941],{"class":112},[34,33223,33224],{"class":59},"loss.item()",[34,33226,1062],{"class":112},[34,33228,33229],{"class":59},"b_x.size(",[34,33231,319],{"class":63},[34,33233,623],{"class":59},[34,33235,33237],{"class":36,"line":33236},115,[34,33238,33239],{"class":40},"            # 计算每个批次中正确预测的数量\n",[34,33241,33243,33246,33248,33251,33253],{"class":36,"line":33242},116,[34,33244,33245],{"class":59},"            train_corrects",[34,33247,9941],{"class":112},[34,33249,33250],{"class":59},"torch.sum(pre_lab",[34,33252,3413],{"class":112},[34,33254,33255],{"class":59},"b_y.data)\n",[34,33257,33259],{"class":36,"line":33258},117,[34,33260,33261],{"class":40},"            # 计算目前为止一共处理了多少样本\n",[34,33263,33265,33268,33270,33272,33274],{"class":36,"line":33264},118,[34,33266,33267],{"class":59},"            train_num",[34,33269,9941],{"class":112},[34,33271,33229],{"class":59},[34,33273,319],{"class":63},[34,33275,623],{"class":59},[34,33277,33279],{"class":36,"line":33278},119,[34,33280,33281],{"class":40},"        # 验证数据\n",[34,33283,33285,33287,33290,33292,33294],{"class":36,"line":33284},120,[34,33286,3867],{"class":112},[34,33288,33289],{"class":59}," step ,(b_x,b_y) ",[34,33291,26508],{"class":112},[34,33293,32069],{"class":63},[34,33295,33296],{"class":59},"(val_dataloader):\n",[34,33298,33300],{"class":36,"line":33299},121,[34,33301,33302],{"class":40},"            # 将特征放到验证设备当中\n",[34,33304,33306,33308,33310],{"class":36,"line":33305},122,[34,33307,33073],{"class":59},[34,33309,447],{"class":112},[34,33311,33078],{"class":59},[34,33313,33315],{"class":36,"line":33314},123,[34,33316,33317],{"class":40},"            # 将标签放到放到训练设备当中\n",[34,33319,33321,33323,33325],{"class":36,"line":33320},124,[34,33322,33088],{"class":59},[34,33324,447],{"class":112},[34,33326,33093],{"class":59},[34,33328,33330],{"class":36,"line":33329},125,[34,33331,33332],{"class":40},"            # 开启验证模式，设置模型为评估模式\n",[34,33334,33336],{"class":36,"line":33335},126,[34,33337,33338],{"class":59},"            model.eval()\n",[34,33340,33342,33345],{"class":36,"line":33341},127,[34,33343,33344],{"class":112},"            with",[34,33346,33347],{"class":59}," torch.no_grad():\n",[34,33349,33351],{"class":36,"line":33350},128,[34,33352,33353],{"class":40},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[34,33355,33357,33360,33362],{"class":36,"line":33356},129,[34,33358,33359],{"class":59},"                output ",[34,33361,447],{"class":112},[34,33363,33364],{"class":59}," model(b_x)\n",[34,33366,33368],{"class":36,"line":33367},130,[34,33369,33370],{"class":40},"                # 查找每一行中最大值对应的下标\n",[34,33372,33374,33377,33379,33382,33384,33386,33388],{"class":36,"line":33373},131,[34,33375,33376],{"class":59},"                pre_lab ",[34,33378,447],{"class":112},[34,33380,33381],{"class":59}," torch.argmax(output, ",[34,33383,33148],{"class":5680},[34,33385,447],{"class":112},[34,33387,64],{"class":63},[34,33389,623],{"class":59},[34,33391,33393],{"class":36,"line":33392},132,[34,33394,33395],{"class":40},"                # 计算验证集上的当前 batch 损失\n",[34,33397,33399,33402,33404],{"class":36,"line":33398},133,[34,33400,33401],{"class":59},"                val_batch_loss ",[34,33403,447],{"class":112},[34,33405,33406],{"class":59}," criterion(output, b_y)\n",[34,33408,33410],{"class":36,"line":33409},134,[34,33411,33412],{"class":40},"                # 对损失函数进行累加（按样本数加权）\n",[34,33414,33416,33419,33421,33424,33426,33429,33431],{"class":36,"line":33415},135,[34,33417,33418],{"class":59},"                val_loss ",[34,33420,9941],{"class":112},[34,33422,33423],{"class":59}," val_batch_loss.item() ",[34,33425,1062],{"class":112},[34,33427,33428],{"class":59}," b_x.size(",[34,33430,319],{"class":63},[34,33432,623],{"class":59},[34,33434,33436,33439,33441,33444,33446],{"class":36,"line":33435},136,[34,33437,33438],{"class":59},"                val_corrects ",[34,33440,9941],{"class":112},[34,33442,33443],{"class":59}," torch.sum(pre_lab ",[34,33445,3413],{"class":112},[34,33447,33448],{"class":59}," b_y.data)\n",[34,33450,33452],{"class":36,"line":33451},137,[34,33453,33454],{"class":40},"                # 当前用于验证的样本数量\n",[34,33456,33458,33461,33463,33465,33467],{"class":36,"line":33457},138,[34,33459,33460],{"class":59},"            val_num ",[34,33462,9941],{"class":112},[34,33464,33428],{"class":59},[34,33466,319],{"class":63},[34,33468,623],{"class":59},[34,33470,33472],{"class":36,"line":33471},139,[34,33473,33474],{"class":40},"        # 计算并保存每一次迭代的loss值和准确率\n",[34,33476,33478],{"class":36,"line":33477},140,[34,33479,33480],{"class":40},"        # 计算并保存训练集的loss值\n",[34,33482,33484,33487,33489],{"class":36,"line":33483},141,[34,33485,33486],{"class":59},"        train_loss_all.append(train_loss",[34,33488,1190],{"class":112},[34,33490,33491],{"class":59},"train_num)\n",[34,33493,33495],{"class":36,"line":33494},142,[34,33496,33497],{"class":40},"        # 取双精度\n",[34,33499,33501],{"class":36,"line":33500},143,[34,33502,33503],{"class":40},"        # 计算并保存训练集的准确率\n",[34,33505,33507,33510,33512],{"class":36,"line":33506},144,[34,33508,33509],{"class":59},"        train_acc_all.append(train_corrects.double().item()",[34,33511,1190],{"class":112},[34,33513,33491],{"class":59},[34,33515,33517],{"class":36,"line":33516},145,[34,33518,33519],{"class":40},"        # 计算并保存验证集的loss值\n",[34,33521,33523,33526,33528],{"class":36,"line":33522},146,[34,33524,33525],{"class":59},"        val_loss_all.append(val_loss",[34,33527,1190],{"class":112},[34,33529,33530],{"class":59},"val_num)\n",[34,33532,33534],{"class":36,"line":33533},147,[34,33535,33536],{"class":40},"        # 计算并保存验证集的准确率\n",[34,33538,33540,33543,33545],{"class":36,"line":33539},148,[34,33541,33542],{"class":59},"        val_acc_all.append(val_corrects.double().item()",[34,33544,1190],{"class":112},[34,33546,33530],{"class":59},[34,33548,33550],{"class":36,"line":33549},149,[34,33551,2864],{"emptyLinePlaceholder":540},[34,33553,33555],{"class":36,"line":33554},150,[34,33556,33557],{"class":40},"        # 打印训练一轮的loss值和准确率\n",[34,33559,33561,33563,33565,33567,33569,33572,33574,33577,33579,33582,33584,33586,33588,33590,33593,33595,33597,33600,33602,33604],{"class":36,"line":33560},151,[34,33562,32914],{"class":63},[34,33564,617],{"class":59},[34,33566,4056],{"class":187},[34,33568,32922],{"class":63},[34,33570,33571],{"class":187},"train loss:",[34,33573,1501],{"class":63},[34,33575,33576],{"class":112},":.4f",[34,33578,1550],{"class":63},[34,33580,33581],{"class":187}," train acc:",[34,33583,1501],{"class":63},[34,33585,33576],{"class":112},[34,33587,1550],{"class":63},[34,33589,4056],{"class":187},[34,33591,33592],{"class":59},".format(epoch,train_loss_all[",[34,33594,113],{"class":112},[34,33596,64],{"class":63},[34,33598,33599],{"class":59},"],train_acc_all[",[34,33601,113],{"class":112},[34,33603,64],{"class":63},[34,33605,33606],{"class":59},"]))\n",[34,33608,33610,33612,33614,33616,33618,33621,33623,33625,33627,33630,33632,33634,33636,33638,33641,33643,33645,33648,33650,33652],{"class":36,"line":33609},152,[34,33611,32914],{"class":63},[34,33613,617],{"class":59},[34,33615,4056],{"class":187},[34,33617,32922],{"class":63},[34,33619,33620],{"class":187},"val loss:",[34,33622,1501],{"class":63},[34,33624,33576],{"class":112},[34,33626,1550],{"class":63},[34,33628,33629],{"class":187}," val acc:",[34,33631,1501],{"class":63},[34,33633,33576],{"class":112},[34,33635,1550],{"class":63},[34,33637,4056],{"class":187},[34,33639,33640],{"class":59},".format(epoch,val_loss_all[",[34,33642,113],{"class":112},[34,33644,64],{"class":63},[34,33646,33647],{"class":59},"],val_acc_all[",[34,33649,113],{"class":112},[34,33651,64],{"class":63},[34,33653,33606],{"class":59},[34,33655,33657],{"class":36,"line":33656},153,[34,33658,2864],{"emptyLinePlaceholder":540},[34,33660,33662],{"class":36,"line":33661},154,[34,33663,33664],{"class":40},"        # 判断准确度--->保存最优模型\n",[34,33666,33668,33670,33673,33675,33677,33679,33681],{"class":36,"line":33667},155,[34,33669,2961],{"class":112},[34,33671,33672],{"class":59}," val_acc_all[",[34,33674,113],{"class":112},[34,33676,64],{"class":63},[34,33678,477],{"class":59},[34,33680,1564],{"class":112},[34,33682,33683],{"class":59},"best_acc:\n",[34,33685,33687],{"class":36,"line":33686},156,[34,33688,33689],{"class":40},"            # 保存当前模型准确度\n",[34,33691,33693,33696,33698,33700,33703,33705,33707],{"class":36,"line":33692},157,[34,33694,33695],{"class":59},"            best_acc:",[34,33697,656],{"class":63},[34,33699,447],{"class":112},[34,33701,33702],{"class":59},"val_acc_all[",[34,33704,113],{"class":112},[34,33706,64],{"class":63},[34,33708,73],{"class":59},[34,33710,33712],{"class":36,"line":33711},158,[34,33713,33714],{"class":40},"            # 保存当前的准确度\n",[34,33716,33718],{"class":36,"line":33717},159,[34,33719,33720],{"class":40},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[34,33722,33724,33727,33729],{"class":36,"line":33723},160,[34,33725,33726],{"class":59},"            best_model_wts",[34,33728,447],{"class":112},[34,33730,32777],{"class":59},[34,33732,33734],{"class":36,"line":33733},161,[34,33735,2864],{"emptyLinePlaceholder":540},[34,33737,33739],{"class":36,"line":33738},162,[34,33740,33741],{"class":40},"        # 计算耗时\n",[34,33743,33745,33748,33750,33753,33755],{"class":36,"line":33744},163,[34,33746,33747],{"class":59},"        time_use",[34,33749,447],{"class":112},[34,33751,33752],{"class":59},"time.time()",[34,33754,113],{"class":112},[34,33756,33757],{"class":59},"since\n",[34,33759,33761,33763,33765,33768,33770,33773,33775,33777,33779,33781,33783,33786,33789,33792,33794,33797,33799,33801],{"class":36,"line":33760},164,[34,33762,32914],{"class":63},[34,33764,617],{"class":59},[34,33766,33767],{"class":187},"'训练和验证耗费的时间",[34,33769,1501],{"class":63},[34,33771,33772],{"class":112},":.0f",[34,33774,1550],{"class":63},[34,33776,1150],{"class":187},[34,33778,1501],{"class":63},[34,33780,33772],{"class":112},[34,33782,1550],{"class":63},[34,33784,33785],{"class":187},"s'",[34,33787,33788],{"class":59},".format(time_use",[34,33790,33791],{"class":112},"\u002F\u002F",[34,33793,1512],{"class":63},[34,33795,33796],{"class":59},",time_use",[34,33798,936],{"class":112},[34,33800,1512],{"class":63},[34,33802,30960],{"class":59},[34,33804,33806],{"class":36,"line":33805},165,[34,33807,33808],{"class":40},"    # 选择最优参数\n",[34,33810,33812],{"class":36,"line":33811},166,[34,33813,33814],{"class":40},"    # 加载最高准确率下的模型参数\n",[34,33816,33818],{"class":36,"line":33817},167,[34,33819,33820],{"class":40},"    # model.load_state_dict(best_model_wts)\n",[34,33822,33824,33827,33830],{"class":36,"line":33823},168,[34,33825,33826],{"class":59},"    torch.save(model.state_dict(best_model_wts), ",[34,33828,33829],{"class":187},"'.\u002Fbest_model.pth'",[34,33831,623],{"class":59},[34,33833,33835],{"class":36,"line":33834},169,[34,33836,33837],{"class":40},"    # 或者写成\n",[34,33839,33841],{"class":36,"line":33840},170,[34,33842,33843],{"class":40},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[34,33845,33847],{"class":36,"line":33846},171,[34,33848,33849],{"class":40},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[34,33851,33853,33856,33858,33861,33864,33866],{"class":36,"line":33852},172,[34,33854,33855],{"class":59},"    train_process",[34,33857,447],{"class":112},[34,33859,33860],{"class":59},"pd.DataFrame(",[34,33862,33863],{"class":5680},"data",[34,33865,447],{"class":112},[34,33867,2017],{"class":59},[34,33869,33871,33874,33876,33879],{"class":36,"line":33870},173,[34,33872,33873],{"class":187},"        \"epoch\"",[34,33875,214],{"class":59},[34,33877,33878],{"class":63},"range",[34,33880,33881],{"class":59},"(num_epochs),\n",[34,33883,33885,33888],{"class":36,"line":33884},174,[34,33886,33887],{"class":187},"        \"train_loss_all\"",[34,33889,33890],{"class":59},":train_loss_all,\n",[34,33892,33894,33897],{"class":36,"line":33893},175,[34,33895,33896],{"class":187},"        \"val_loss_all\"",[34,33898,33899],{"class":59},":val_loss_all,\n",[34,33901,33903,33906],{"class":36,"line":33902},176,[34,33904,33905],{"class":187},"        \"train_acc_all\"",[34,33907,33908],{"class":59},":train_acc_all,\n",[34,33910,33912,33915],{"class":36,"line":33911},177,[34,33913,33914],{"class":187},"        \"val_acc_all\"",[34,33916,33917],{"class":59},":val_acc_all\n",[34,33919,33921],{"class":36,"line":33920},178,[34,33922,33923],{"class":59},"    })\n",[34,33925,33927],{"class":36,"line":33926},179,[34,33928,33929],{"class":40},"    # 返回训练保存的过程\n",[34,33931,33933,33935],{"class":36,"line":33932},180,[34,33934,4554],{"class":112},[34,33936,33937],{"class":59}," train_process\n",[34,33939,33941],{"class":36,"line":33940},181,[34,33942,2864],{"emptyLinePlaceholder":540},[34,33944,33946],{"class":36,"line":33945},182,[34,33947,33948],{"class":40},"# 将loss值和精度按照图片的形式展示出来\n",[34,33950,33952,33954,33957],{"class":36,"line":33951},183,[34,33953,32410],{"class":112},[34,33955,33956],{"class":2427}," matplot_acc_loss",[34,33958,33959],{"class":59},"(train_process):\n",[34,33961,33963],{"class":36,"line":33962},184,[34,33964,33965],{"class":40},"    # 设置图的大小\n",[34,33967,33969,33972,33974,33976,33978,33980,33982,33984],{"class":36,"line":33968},185,[34,33970,33971],{"class":59},"    plt.figure(",[34,33973,32156],{"class":5680},[34,33975,447],{"class":112},[34,33977,617],{"class":59},[34,33979,1105],{"class":63},[34,33981,67],{"class":59},[34,33983,217],{"class":63},[34,33985,30960],{"class":59},[34,33987,33989],{"class":36,"line":33988},186,[34,33990,33991],{"class":40},"    # 设置图中有几张图\n",[34,33993,33995],{"class":36,"line":33994},187,[34,33996,33997],{"class":40},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[34,33999,34001],{"class":36,"line":34000},188,[34,34002,34003],{"class":40},"    # ①loss图\n",[34,34005,34007,34009,34011,34013,34015,34017,34019],{"class":36,"line":34006},189,[34,34008,32190],{"class":59},[34,34010,64],{"class":63},[34,34012,67],{"class":59},[34,34014,70],{"class":63},[34,34016,67],{"class":59},[34,34018,64],{"class":63},[34,34020,623],{"class":59},[34,34022,34024],{"class":36,"line":34023},190,[34,34025,34026],{"class":40},"    # 补充:\n",[34,34028,34030],{"class":36,"line":34029},191,[34,34031,34032],{"class":40},"    # plt.subplot(nrows, ncols, index)\n",[34,34034,34036],{"class":36,"line":34035},192,[34,34037,34038],{"class":40},"    # nrows：行数\n",[34,34040,34042],{"class":36,"line":34041},193,[34,34043,34044],{"class":40},"    # ncols：列数\n",[34,34046,34048],{"class":36,"line":34047},194,[34,34049,34050],{"class":40},"    # index：目前选中第几个子图（从1开始）\n",[34,34052,34054,34057,34060,34063,34066,34068,34071,34073,34076],{"class":36,"line":34053},195,[34,34055,34056],{"class":59},"    plt.plot(train_process[",[34,34058,34059],{"class":187},"\"epoch\"",[34,34061,34062],{"class":59},"],train_process.train_loss_all,",[34,34064,34065],{"class":187},"'ro-'",[34,34067,67],{"class":59},[34,34069,34070],{"class":5680},"label",[34,34072,447],{"class":112},[34,34074,34075],{"class":187},"'train loss'",[34,34077,623],{"class":59},[34,34079,34081,34083,34085,34088,34091,34093,34095,34097,34100],{"class":36,"line":34080},196,[34,34082,34056],{"class":59},[34,34084,34059],{"class":187},[34,34086,34087],{"class":59},"],train_process.val_loss_all,",[34,34089,34090],{"class":187},"'bs--'",[34,34092,67],{"class":59},[34,34094,34070],{"class":5680},[34,34096,447],{"class":112},[34,34098,34099],{"class":187},"'val loss'",[34,34101,623],{"class":59},[34,34103,34105],{"class":36,"line":34104},197,[34,34106,34107],{"class":40},"    # 添加一个图例\n",[34,34109,34111],{"class":36,"line":34110},198,[34,34112,34113],{"class":59},"    plt.legend()\n",[34,34115,34117],{"class":36,"line":34116},199,[34,34118,34119],{"class":40},"    # 给轴添加标签\n",[34,34121,34123,34126,34129],{"class":36,"line":34122},200,[34,34124,34125],{"class":59},"    plt.xlabel(",[34,34127,34128],{"class":187},"'epoch'",[34,34130,623],{"class":59},[34,34132,34134,34137,34140],{"class":36,"line":34133},201,[34,34135,34136],{"class":59},"    plt.ylabel(",[34,34138,34139],{"class":187},"'loss'",[34,34141,623],{"class":59},[34,34143,34145],{"class":36,"line":34144},202,[34,34146,34147],{"class":40},"    # ②准确度图\n",[34,34149,34151,34153,34155,34157,34159,34161,34163],{"class":36,"line":34150},203,[34,34152,32190],{"class":59},[34,34154,64],{"class":63},[34,34156,67],{"class":59},[34,34158,70],{"class":63},[34,34160,67],{"class":59},[34,34162,70],{"class":63},[34,34164,623],{"class":59},[34,34166,34168,34170,34172,34175,34177,34179,34181,34183,34186],{"class":36,"line":34167},204,[34,34169,34056],{"class":59},[34,34171,34059],{"class":187},[34,34173,34174],{"class":59},"],train_process.train_acc_all,",[34,34176,34065],{"class":187},[34,34178,67],{"class":59},[34,34180,34070],{"class":5680},[34,34182,447],{"class":112},[34,34184,34185],{"class":187},"'train acc'",[34,34187,623],{"class":59},[34,34189,34191,34193,34195,34198,34200,34202,34204,34206,34209],{"class":36,"line":34190},205,[34,34192,34056],{"class":59},[34,34194,34059],{"class":187},[34,34196,34197],{"class":59},"],train_process.val_acc_all,",[34,34199,34090],{"class":187},[34,34201,67],{"class":59},[34,34203,34070],{"class":5680},[34,34205,447],{"class":112},[34,34207,34208],{"class":187},"'val acc'",[34,34210,623],{"class":59},[34,34212,34214],{"class":36,"line":34213},206,[34,34215,34216],{"class":40},"    # 添加图例\n",[34,34218,34220],{"class":36,"line":34219},207,[34,34221,34113],{"class":59},[34,34223,34225,34227,34229],{"class":36,"line":34224},208,[34,34226,34125],{"class":59},[34,34228,34059],{"class":187},[34,34230,623],{"class":59},[34,34232,34234,34236,34239],{"class":36,"line":34233},209,[34,34235,34136],{"class":59},[34,34237,34238],{"class":187},"\"acc\"",[34,34240,623],{"class":59},[34,34242,34244],{"class":36,"line":34243},210,[34,34245,34246],{"class":59},"    plt.show()\n",[34,34248,34250],{"class":36,"line":34249},211,[34,34251,2864],{"emptyLinePlaceholder":540},[34,34253,34255],{"class":36,"line":34254},212,[34,34256,34257],{"class":40},"# 正式开始训练:\n",[34,34259,34261,34263,34265,34267,34269],{"class":36,"line":34260},213,[34,34262,2002],{"class":112},[34,34264,31683],{"class":63},[34,34266,3413],{"class":112},[34,34268,31688],{"class":187},[34,34270,4203],{"class":59},[34,34272,34274],{"class":36,"line":34273},214,[34,34275,34276],{"class":40},"    # 将模型实例化\n",[34,34278,34280,34283,34285],{"class":36,"line":34279},215,[34,34281,34282],{"class":59},"    LeNet",[34,34284,447],{"class":112},[34,34286,34287],{"class":59},"LeNet()\n",[34,34289,34291,34294,34296],{"class":36,"line":34290},216,[34,34292,34293],{"class":59},"    train_dataloader,val_dataloader",[34,34295,447],{"class":112},[34,34297,34298],{"class":59},"train_val_data_process()\n",[34,34300,34302,34304,34306,34309,34312,34314,34316],{"class":36,"line":34301},217,[34,34303,33855],{"class":59},[34,34305,447],{"class":112},[34,34307,34308],{"class":59},"train_model_process(LeNet,train_dataloader,val_dataloader,",[34,34310,34311],{"class":5680},"num_epochs",[34,34313,447],{"class":112},[34,34315,1306],{"class":63},[34,34317,623],{"class":59},[34,34319,34321],{"class":36,"line":34320},218,[34,34322,34323],{"class":59},"    matplot_acc_loss(train_process)\n",[14,34325,34326],{},"画图的补充点学习：",[14,34328,34329],{},[20,34330],{"alt":22,"src":34331},"\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",[567,34333,34334],{"start":50},[570,34335,34336],{},"测试",[25,34338,34340],{"className":27,"code":34339,"language":29,"meta":22,"style":22},"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",[31,34341,34342,34348,34358,34370,34380,34385,34395,34405,34409,34414,34423,34440,34452,34469,34480,34496,34501,34512,34523,34534,34541,34545,34550,34560,34565,34582,34590,34594,34599,34608,34617,34621,34626,34631,34636,34643,34648,34660,34670,34680,34685,34689,34694,34703,34708,34724,34729,34734,34739,34753,34758,34772,34776,34781,34796,34801,34813,34817,34822,34834,34839,34847,34852,34857,34867,34872,34881,34886,34891,34895,34900,34905,34921,34929,34934,34939,34998,35004,35009,35020,35028,35036,35040,35045,35049,35054,35062,35067,35083,35088,35098,35108],{"__ignoreMap":22},[34,34343,34344,34346],{"class":36,"line":37},[34,34345,30855],{"class":112},[34,34347,30858],{"class":59},[34,34349,34350,34352,34354,34356],{"class":36,"line":44},[34,34351,30855],{"class":112},[34,34353,31878],{"class":59},[34,34355,31846],{"class":112},[34,34357,31883],{"class":59},[34,34359,34360,34362,34365,34367],{"class":36,"line":50},[34,34361,31200],{"class":112},[34,34363,34364],{"class":59}," jupyter_client.consoleapp ",[34,34366,30855],{"class":112},[34,34368,34369],{"class":59}," classes\n",[34,34371,34372,34374,34376,34378],{"class":36,"line":56},[34,34373,31200],{"class":112},[34,34375,31861],{"class":59},[34,34377,30855],{"class":112},[34,34379,31866],{"class":59},[34,34381,34382],{"class":36,"line":107},[34,34383,34384],{"class":40},"# 导入数据集\n",[34,34386,34387,34389,34391,34393],{"class":36,"line":196},[34,34388,31200],{"class":112},[34,34390,31831],{"class":59},[34,34392,30855],{"class":112},[34,34394,31836],{"class":59},[34,34396,34397,34399,34401,34403],{"class":36,"line":202},[34,34398,31200],{"class":112},[34,34400,32377],{"class":59},[34,34402,30855],{"class":112},[34,34404,32382],{"class":59},[34,34406,34407],{"class":36,"line":207},[34,34408,2864],{"emptyLinePlaceholder":540},[34,34410,34411],{"class":36,"line":222},[34,34412,34413],{"class":40},"# 测试数据处理\n",[34,34415,34416,34418,34421],{"class":36,"line":227},[34,34417,32410],{"class":112},[34,34419,34420],{"class":2427}," test_data_process",[34,34422,32416],{"class":59},[34,34424,34425,34428,34430,34432,34434,34436,34438],{"class":36,"line":232},[34,34426,34427],{"class":59},"    test_data",[34,34429,447],{"class":112},[34,34431,31918],{"class":59},[34,34433,31921],{"class":5680},[34,34435,447],{"class":112},[34,34437,31926],{"class":187},[34,34439,31929],{"class":59},[34,34441,34442,34445,34447,34450],{"class":36,"line":238},[34,34443,34444],{"class":5680},"                           train",[34,34446,447],{"class":112},[34,34448,34449],{"class":63},"False",[34,34451,31929],{"class":59},[34,34453,34454,34457,34459,34461,34463,34465,34467],{"class":36,"line":244},[34,34455,34456],{"class":5680},"                           transform",[34,34458,447],{"class":112},[34,34460,31956],{"class":59},[34,34462,31959],{"class":5680},[34,34464,447],{"class":112},[34,34466,1506],{"class":63},[34,34468,31967],{"class":59},[34,34470,34471,34474,34476,34478],{"class":36,"line":250},[34,34472,34473],{"class":5680},"                           download",[34,34475,447],{"class":112},[34,34477,31939],{"class":63},[34,34479,623],{"class":59},[34,34481,34482,34485,34487,34489,34491,34493],{"class":36,"line":256},[34,34483,34484],{"class":59},"    test_dataloader",[34,34486,447],{"class":112},[34,34488,31997],{"class":59},[34,34490,32000],{"class":5680},[34,34492,447],{"class":112},[34,34494,34495],{"class":59},"test_data,\n",[34,34497,34498],{"class":36,"line":261},[34,34499,34500],{"class":40},"                                    # 这里是一张一张进行测试\n",[34,34502,34503,34506,34508,34510],{"class":36,"line":267},[34,34504,34505],{"class":5680},"                                    batch_size",[34,34507,447],{"class":112},[34,34509,64],{"class":63},[34,34511,31929],{"class":59},[34,34513,34514,34517,34519,34521],{"class":36,"line":2138},[34,34515,34516],{"class":5680},"                                    shuffle",[34,34518,447],{"class":112},[34,34520,31939],{"class":63},[34,34522,31929],{"class":59},[34,34524,34525,34528,34530,34532],{"class":36,"line":2143},[34,34526,34527],{"class":5680},"                                    num_workers",[34,34529,447],{"class":112},[34,34531,319],{"class":63},[34,34533,623],{"class":59},[34,34535,34536,34538],{"class":36,"line":2157},[34,34537,4554],{"class":112},[34,34539,34540],{"class":59}," test_dataloader\n",[34,34542,34543],{"class":36,"line":2162},[34,34544,2864],{"emptyLinePlaceholder":540},[34,34546,34547],{"class":36,"line":2191},[34,34548,34549],{"class":40},"# 定义模型测试函数\n",[34,34551,34552,34554,34557],{"class":36,"line":2196},[34,34553,32410],{"class":112},[34,34555,34556],{"class":2427}," test_model_process",[34,34558,34559],{"class":59},"(model,test_dataloader):\n",[34,34561,34562],{"class":36,"line":2213},[34,34563,34564],{"class":40},"    # 将模型放到设备当中，先进行判断\n",[34,34566,34567,34569,34571,34573,34575,34577,34579],{"class":36,"line":2218},[34,34568,31700],{"class":59},[34,34570,447],{"class":112},[34,34572,31707],{"class":187},[34,34574,2168],{"class":112},[34,34576,31712],{"class":59},[34,34578,2165],{"class":112},[34,34580,34581],{"class":187}," \"cpu\"\n",[34,34583,34584,34586,34588],{"class":36,"line":2223},[34,34585,31752],{"class":59},[34,34587,447],{"class":112},[34,34589,32752],{"class":59},[34,34591,34592],{"class":36,"line":2228},[34,34593,2864],{"emptyLinePlaceholder":540},[34,34595,34596],{"class":36,"line":2242},[34,34597,34598],{"class":40},"    # 设置初始化参数\n",[34,34600,34601,34604,34606],{"class":36,"line":2247},[34,34602,34603],{"class":59},"    test_corrects",[34,34605,447],{"class":112},[34,34607,32805],{"class":63},[34,34609,34610,34613,34615],{"class":36,"line":3041},[34,34611,34612],{"class":59},"    test_num",[34,34614,447],{"class":112},[34,34616,3549],{"class":63},[34,34618,34619],{"class":36,"line":3055},[34,34620,2864],{"emptyLinePlaceholder":540},[34,34622,34623],{"class":36,"line":3063},[34,34624,34625],{"class":40},"    # 进行模型测试\n",[34,34627,34628],{"class":36,"line":3068},[34,34629,34630],{"class":40},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[34,34632,34633],{"class":36,"line":3074},[34,34634,34635],{"class":40},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[34,34637,34638,34641],{"class":36,"line":3080},[34,34639,34640],{"class":112},"    with",[34,34642,33347],{"class":59},[34,34644,34645],{"class":36,"line":3085},[34,34646,34647],{"class":40},"        # 从数据中进行\n",[34,34649,34650,34652,34655,34657],{"class":36,"line":8412},[34,34651,3867],{"class":112},[34,34653,34654],{"class":59}," test_data_x,test_data_y ",[34,34656,26508],{"class":112},[34,34658,34659],{"class":59}," test_dataloader:\n",[34,34661,34662,34665,34667],{"class":36,"line":8436},[34,34663,34664],{"class":59},"            test_data_x",[34,34666,447],{"class":112},[34,34668,34669],{"class":59},"test_data_x.to(device)\n",[34,34671,34672,34675,34677],{"class":36,"line":8441},[34,34673,34674],{"class":59},"            test_data_y",[34,34676,447],{"class":112},[34,34678,34679],{"class":59},"test_data_y.to(device)\n",[34,34681,34682],{"class":36,"line":8447},[34,34683,34684],{"class":40},"            # 设置为验证模式\n",[34,34686,34687],{"class":36,"line":8474},[34,34688,33338],{"class":59},[34,34690,34691],{"class":36,"line":8479},[34,34692,34693],{"class":40},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[34,34695,34696,34698,34700],{"class":36,"line":8485},[34,34697,33123],{"class":59},[34,34699,447],{"class":112},[34,34701,34702],{"class":59},"model(test_data_x)\n",[34,34704,34705],{"class":36,"line":8497},[34,34706,34707],{"class":40},"            # 查找每一行中最大值对应的下标\n",[34,34709,34710,34712,34714,34716,34718,34720,34722],{"class":36,"line":8509},[34,34711,33140],{"class":59},[34,34713,447],{"class":112},[34,34715,33145],{"class":59},[34,34717,33148],{"class":5680},[34,34719,447],{"class":112},[34,34721,64],{"class":63},[34,34723,623],{"class":59},[34,34725,34726],{"class":36,"line":8521},[34,34727,34728],{"class":40},"            # 计算正确率\n",[34,34730,34731],{"class":36,"line":10180},[34,34732,34733],{"class":40},"            # .data表示是一个不带梯度信息的tensor\n",[34,34735,34736],{"class":36,"line":10205},[34,34737,34738],{"class":40},"            # 如果预测正确，则准确度test_corrects加1\n",[34,34740,34741,34744,34746,34748,34750],{"class":36,"line":10228},[34,34742,34743],{"class":59},"            test_corrects",[34,34745,9941],{"class":112},[34,34747,33250],{"class":59},[34,34749,3413],{"class":112},[34,34751,34752],{"class":59},"test_data_y.data)\n",[34,34754,34755],{"class":36,"line":10252},[34,34756,34757],{"class":40},"            # 将所有的测试样本进行累计\n",[34,34759,34760,34763,34765,34768,34770],{"class":36,"line":10257},[34,34761,34762],{"class":59},"            test_num",[34,34764,9941],{"class":112},[34,34766,34767],{"class":59},"test_data_x.size(",[34,34769,319],{"class":63},[34,34771,623],{"class":59},[34,34773,34774],{"class":36,"line":10262},[34,34775,2864],{"emptyLinePlaceholder":540},[34,34777,34778],{"class":36,"line":10267},[34,34779,34780],{"class":40},"        # 计算准确度\n",[34,34782,34783,34786,34788,34791,34793],{"class":36,"line":10276},[34,34784,34785],{"class":59},"        test_acc",[34,34787,447],{"class":112},[34,34789,34790],{"class":59},"test_corrects.double().item()",[34,34792,1190],{"class":112},[34,34794,34795],{"class":59},"test_num\n",[34,34797,34798],{"class":36,"line":10281},[34,34799,34800],{"class":40},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[34,34802,34803,34805,34807,34810],{"class":36,"line":10287},[34,34804,32914],{"class":63},[34,34806,617],{"class":59},[34,34808,34809],{"class":187},"\"测试的准确率：\"",[34,34811,34812],{"class":59},",test_acc)\n",[34,34814,34815],{"class":36,"line":10308},[34,34816,2864],{"emptyLinePlaceholder":540},[34,34818,34819],{"class":36,"line":10314},[34,34820,34821],{"class":40},"# 实现模型的测试功能\n",[34,34823,34824,34826,34828,34830,34832],{"class":36,"line":10328},[34,34825,2002],{"class":112},[34,34827,31683],{"class":63},[34,34829,3413],{"class":112},[34,34831,31688],{"class":187},[34,34833,4203],{"class":59},[34,34835,34836],{"class":36,"line":10334},[34,34837,34838],{"class":40},"    # 加载模型\n",[34,34840,34841,34843,34845],{"class":36,"line":10361},[34,34842,31752],{"class":59},[34,34844,447],{"class":112},[34,34846,34287],{"class":59},[34,34848,34849],{"class":36,"line":10370},[34,34850,34851],{"class":40},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[34,34853,34854],{"class":36,"line":10376},[34,34855,34856],{"class":40},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[34,34858,34859,34862,34865],{"class":36,"line":10384},[34,34860,34861],{"class":59},"    model.load_state_dict(torch.load(",[34,34863,34864],{"class":187},"'best_model.pth'",[34,34866,30960],{"class":59},[34,34868,34869],{"class":36,"line":10389},[34,34870,34871],{"class":40},"    # 数据加载\n",[34,34873,34874,34876,34878],{"class":36,"line":17068},[34,34875,34484],{"class":59},[34,34877,447],{"class":112},[34,34879,34880],{"class":59},"test_data_process()\n",[34,34882,34883],{"class":36,"line":17074},[34,34884,34885],{"class":40},"    # 加载模型测试的函数\n",[34,34887,34888],{"class":36,"line":17097},[34,34889,34890],{"class":59},"    test_model_process(model,test_dataloader)\n",[34,34892,34893],{"class":36,"line":17103},[34,34894,2864],{"emptyLinePlaceholder":540},[34,34896,34897],{"class":36,"line":17126},[34,34898,34899],{"class":40},"    # 验证集推理实现：\n",[34,34901,34902],{"class":36,"line":17140},[34,34903,34904],{"class":40},"    # 加载数据加载的更详细一些\n",[34,34906,34907,34909,34911,34913,34915,34917,34919],{"class":36,"line":17160},[34,34908,31700],{"class":59},[34,34910,447],{"class":112},[34,34912,31707],{"class":187},[34,34914,2168],{"class":112},[34,34916,31712],{"class":59},[34,34918,2165],{"class":112},[34,34920,34581],{"class":187},[34,34922,34923,34925,34927],{"class":36,"line":17166},[34,34924,31752],{"class":59},[34,34926,447],{"class":112},[34,34928,32752],{"class":59},[34,34930,34931],{"class":36,"line":17177},[34,34932,34933],{"class":40},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[34,34935,34936],{"class":36,"line":17200},[34,34937,34938],{"class":40},"    # 顺序不可改变\n",[34,34940,34941,34944,34946,34948,34951,34953,34956,34958,34961,34963,34966,34968,34971,34973,34976,34978,34981,34983,34986,34988,34991,34993,34996],{"class":36,"line":17222},[34,34942,34943],{"class":59},"    classes",[34,34945,447],{"class":112},[34,34947,1495],{"class":59},[34,34949,34950],{"class":187},"'T-shirt\u002Ftop'",[34,34952,67],{"class":59},[34,34954,34955],{"class":187},"'Trouser'",[34,34957,67],{"class":59},[34,34959,34960],{"class":187},"'Pullover'",[34,34962,67],{"class":59},[34,34964,34965],{"class":187},"'Dress'",[34,34967,67],{"class":59},[34,34969,34970],{"class":187},"'Coat'",[34,34972,67],{"class":59},[34,34974,34975],{"class":187},"'Sandal'",[34,34977,67],{"class":59},[34,34979,34980],{"class":187},"'Shirt'",[34,34982,67],{"class":59},[34,34984,34985],{"class":187},"'Sneaker'",[34,34987,67],{"class":59},[34,34989,34990],{"class":187},"'Bag'",[34,34992,67],{"class":59},[34,34994,34995],{"class":187},"'Ankle boot'",[34,34997,73],{"class":59},[34,34999,35000,35002],{"class":36,"line":17227},[34,35001,34640],{"class":112},[34,35003,33347],{"class":59},[34,35005,35006],{"class":36,"line":17233},[34,35007,35008],{"class":40},"        # 将数据和标签都放到设备当中\n",[34,35010,35011,35013,35016,35018],{"class":36,"line":17247},[34,35012,3867],{"class":112},[34,35014,35015],{"class":59}," b_x,b_y ",[34,35017,26508],{"class":112},[34,35019,34659],{"class":59},[34,35021,35022,35024,35026],{"class":36,"line":17260},[34,35023,33073],{"class":59},[34,35025,447],{"class":112},[34,35027,33078],{"class":59},[34,35029,35030,35032,35034],{"class":36,"line":17265},[34,35031,33088],{"class":59},[34,35033,447],{"class":112},[34,35035,33093],{"class":59},[34,35037,35038],{"class":36,"line":17279},[34,35039,2864],{"emptyLinePlaceholder":540},[34,35041,35042],{"class":36,"line":17284},[34,35043,35044],{"class":40},"            # 设置模型为验证模式\n",[34,35046,35047],{"class":36,"line":17290},[34,35048,33338],{"class":59},[34,35050,35051],{"class":36,"line":17295},[34,35052,35053],{"class":40},"            # 模型推理结果\n",[34,35055,35056,35058,35060],{"class":36,"line":17309},[34,35057,33123],{"class":59},[34,35059,447],{"class":112},[34,35061,33128],{"class":59},[34,35063,35064],{"class":36,"line":17314},[34,35065,35066],{"class":40},"            # 获取最大下标，最大下标就是类别号\n",[34,35068,35069,35071,35073,35075,35077,35079,35081],{"class":36,"line":17319},[34,35070,33140],{"class":59},[34,35072,447],{"class":112},[34,35074,33145],{"class":59},[34,35076,33148],{"class":5680},[34,35078,447],{"class":112},[34,35080,64],{"class":63},[34,35082,623],{"class":59},[34,35084,35085],{"class":36,"line":17333},[34,35086,35087],{"class":40},"            # 取出张量中的数值\n",[34,35089,35090,35093,35095],{"class":36,"line":17345},[34,35091,35092],{"class":59},"            result",[34,35094,447],{"class":112},[34,35096,35097],{"class":59},"pre_lab.item()\n",[34,35099,35100,35103,35105],{"class":36,"line":17350},[34,35101,35102],{"class":59},"            label",[34,35104,447],{"class":112},[34,35106,35107],{"class":59},"b_y.item()\n",[34,35109,35110,35113,35115,35118,35121,35124,35126,35129],{"class":36,"line":17363},[34,35111,35112],{"class":63},"            print",[34,35114,617],{"class":59},[34,35116,35117],{"class":187},"\"预测值：\"",[34,35119,35120],{"class":59},",classes[result],",[34,35122,35123],{"class":187},"\"------\"",[34,35125,67],{"class":59},[34,35127,35128],{"class":187},"\"真实值：\"",[34,35130,35131],{"class":59},",classes[label])\n",[14,35133,35134],{},"（2）AlexNet",[567,35136,35137],{},[570,35138,35139],{},"神经网络构建",[25,35141,35143],{"className":27,"code":35142,"language":29,"meta":22,"style":22},"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",[31,35144,35145,35151,35161,35171,35183,35187,35204,35212,35227,35239,35281,35308,35351,35377,35421,35464,35507,35534,35538,35548,35553,35581,35600,35619,35623,35628,35636,35651,35661,35675,35685,35700,35715,35730,35741,35745,35750,35760,35775,35780,35794,35809,35821,35826,35837,35842,35848,35853,35865,35885,35890,35899],{"__ignoreMap":22},[34,35146,35147,35149],{"class":36,"line":37},[34,35148,30855],{"class":112},[34,35150,30858],{"class":59},[34,35152,35153,35155,35157,35159],{"class":36,"line":44},[34,35154,31200],{"class":112},[34,35156,31203],{"class":59},[34,35158,30855],{"class":112},[34,35160,31208],{"class":59},[34,35162,35163,35165,35167,35169],{"class":36,"line":50},[34,35164,31200],{"class":112},[34,35166,31220],{"class":59},[34,35168,30855],{"class":112},[34,35170,31225],{"class":59},[34,35172,35173,35175,35178,35180],{"class":36,"line":56},[34,35174,30855],{"class":112},[34,35176,35177],{"class":59}," torch.nn.functional ",[34,35179,31846],{"class":112},[34,35181,35182],{"class":59}," F\n",[34,35184,35185],{"class":36,"line":107},[34,35186,2864],{"emptyLinePlaceholder":540},[34,35188,35189,35191,35194,35196,35198,35200,35202],{"class":36,"line":196},[34,35190,15158],{"class":112},[34,35192,35193],{"class":2427}," AlexNet",[34,35195,617],{"class":59},[34,35197,31241],{"class":2427},[34,35199,1164],{"class":59},[34,35201,31246],{"class":2427},[34,35203,31249],{"class":59},[34,35205,35206,35208,35210],{"class":36,"line":202},[34,35207,31264],{"class":112},[34,35209,31267],{"class":63},[34,35211,31270],{"class":59},[34,35213,35214,35216,35219,35221,35223,35225],{"class":36,"line":207},[34,35215,31280],{"class":63},[34,35217,35218],{"class":59},"(AlexNet,",[34,35220,31286],{"class":63},[34,35222,31289],{"class":59},[34,35224,31292],{"class":63},[34,35226,2440],{"class":59},[34,35228,35229,35231,35234,35236],{"class":36,"line":222},[34,35230,31308],{"class":63},[34,35232,35233],{"class":59},".ReLu",[34,35235,447],{"class":112},[34,35237,35238],{"class":59},"nn.ReLU()\n",[34,35240,35241,35243,35245,35247,35249,35251,35253,35255,35257,35259,35261,35263,35265,35267,35269,35271,35273,35275,35277,35279],{"class":36,"line":227},[34,35242,31308],{"class":63},[34,35244,31311],{"class":59},[34,35246,447],{"class":112},[34,35248,31316],{"class":59},[34,35250,31319],{"class":5680},[34,35252,447],{"class":112},[34,35254,64],{"class":63},[34,35256,67],{"class":59},[34,35258,31328],{"class":5680},[34,35260,447],{"class":112},[34,35262,819],{"class":63},[34,35264,67],{"class":59},[34,35266,31337],{"class":5680},[34,35268,447],{"class":112},[34,35270,1079],{"class":63},[34,35272,67],{"class":59},[34,35274,31392],{"class":5680},[34,35276,447],{"class":112},[34,35278,217],{"class":63},[34,35280,623],{"class":59},[34,35282,35283,35285,35287,35289,35292,35294,35296,35298,35300,35302,35304,35306],{"class":36,"line":232},[34,35284,31308],{"class":63},[34,35286,31376],{"class":59},[34,35288,447],{"class":112},[34,35290,35291],{"class":59},"nn.MaxPool2d(",[34,35293,31337],{"class":5680},[34,35295,447],{"class":112},[34,35297,309],{"class":63},[34,35299,67],{"class":59},[34,35301,31392],{"class":5680},[34,35303,447],{"class":112},[34,35305,70],{"class":63},[34,35307,623],{"class":59},[34,35309,35310,35312,35314,35316,35318,35320,35322,35324,35326,35328,35330,35333,35335,35337,35339,35341,35343,35345,35347,35349],{"class":36,"line":238},[34,35311,31308],{"class":63},[34,35313,31405],{"class":59},[34,35315,447],{"class":112},[34,35317,31316],{"class":59},[34,35319,31319],{"class":5680},[34,35321,447],{"class":112},[34,35323,819],{"class":63},[34,35325,67],{"class":59},[34,35327,31328],{"class":5680},[34,35329,447],{"class":112},[34,35331,35332],{"class":63},"256",[34,35334,67],{"class":59},[34,35336,31337],{"class":5680},[34,35338,447],{"class":112},[34,35340,927],{"class":63},[34,35342,67],{"class":59},[34,35344,31346],{"class":5680},[34,35346,447],{"class":112},[34,35348,70],{"class":63},[34,35350,623],{"class":59},[34,35352,35353,35355,35357,35359,35361,35363,35365,35367,35369,35371,35373,35375],{"class":36,"line":244},[34,35354,31308],{"class":63},[34,35356,31440],{"class":59},[34,35358,447],{"class":112},[34,35360,35291],{"class":59},[34,35362,31337],{"class":5680},[34,35364,447],{"class":112},[34,35366,309],{"class":63},[34,35368,67],{"class":59},[34,35370,31392],{"class":5680},[34,35372,447],{"class":112},[34,35374,70],{"class":63},[34,35376,623],{"class":59},[34,35378,35379,35381,35384,35386,35388,35390,35392,35394,35396,35398,35400,35403,35405,35407,35409,35411,35413,35415,35417,35419],{"class":36,"line":250},[34,35380,31308],{"class":63},[34,35382,35383],{"class":59},".c5",[34,35385,447],{"class":112},[34,35387,31316],{"class":59},[34,35389,31319],{"class":5680},[34,35391,447],{"class":112},[34,35393,35332],{"class":63},[34,35395,67],{"class":59},[34,35397,31328],{"class":5680},[34,35399,447],{"class":112},[34,35401,35402],{"class":63},"384",[34,35404,67],{"class":59},[34,35406,31337],{"class":5680},[34,35408,447],{"class":112},[34,35410,309],{"class":63},[34,35412,67],{"class":59},[34,35414,31346],{"class":5680},[34,35416,447],{"class":112},[34,35418,64],{"class":63},[34,35420,623],{"class":59},[34,35422,35423,35425,35428,35430,35432,35434,35436,35438,35440,35442,35444,35446,35448,35450,35452,35454,35456,35458,35460,35462],{"class":36,"line":256},[34,35424,31308],{"class":63},[34,35426,35427],{"class":59},".c6",[34,35429,447],{"class":112},[34,35431,31316],{"class":59},[34,35433,31319],{"class":5680},[34,35435,447],{"class":112},[34,35437,35402],{"class":63},[34,35439,67],{"class":59},[34,35441,31328],{"class":5680},[34,35443,447],{"class":112},[34,35445,35402],{"class":63},[34,35447,67],{"class":59},[34,35449,31337],{"class":5680},[34,35451,447],{"class":112},[34,35453,309],{"class":63},[34,35455,67],{"class":59},[34,35457,31346],{"class":5680},[34,35459,447],{"class":112},[34,35461,64],{"class":63},[34,35463,623],{"class":59},[34,35465,35466,35468,35471,35473,35475,35477,35479,35481,35483,35485,35487,35489,35491,35493,35495,35497,35499,35501,35503,35505],{"class":36,"line":261},[34,35467,31308],{"class":63},[34,35469,35470],{"class":59},".c7",[34,35472,447],{"class":112},[34,35474,31316],{"class":59},[34,35476,31319],{"class":5680},[34,35478,447],{"class":112},[34,35480,35402],{"class":63},[34,35482,67],{"class":59},[34,35484,31328],{"class":5680},[34,35486,447],{"class":112},[34,35488,35332],{"class":63},[34,35490,67],{"class":59},[34,35492,31337],{"class":5680},[34,35494,447],{"class":112},[34,35496,309],{"class":63},[34,35498,67],{"class":59},[34,35500,31346],{"class":5680},[34,35502,447],{"class":112},[34,35504,64],{"class":63},[34,35506,623],{"class":59},[34,35508,35509,35511,35514,35516,35518,35520,35522,35524,35526,35528,35530,35532],{"class":36,"line":267},[34,35510,31308],{"class":63},[34,35512,35513],{"class":59},".s8",[34,35515,447],{"class":112},[34,35517,35291],{"class":59},[34,35519,31337],{"class":5680},[34,35521,447],{"class":112},[34,35523,309],{"class":63},[34,35525,67],{"class":59},[34,35527,31392],{"class":5680},[34,35529,447],{"class":112},[34,35531,70],{"class":63},[34,35533,623],{"class":59},[34,35535,35536],{"class":36,"line":2138},[34,35537,31465],{"class":40},[34,35539,35540,35542,35544,35546],{"class":36,"line":2143},[34,35541,31308],{"class":63},[34,35543,31472],{"class":59},[34,35545,447],{"class":112},[34,35547,31477],{"class":59},[34,35549,35550],{"class":36,"line":2157},[34,35551,35552],{"class":40},"       # 定义全连接层\n",[34,35554,35555,35557,35560,35562,35564,35566,35568,35570,35572,35574,35576,35579],{"class":36,"line":2162},[34,35556,31308],{"class":63},[34,35558,35559],{"class":59},".f1",[34,35561,447],{"class":112},[34,35563,31494],{"class":59},[34,35565,952],{"class":63},[34,35567,1062],{"class":112},[34,35569,952],{"class":63},[34,35571,1062],{"class":112},[34,35573,35332],{"class":63},[34,35575,67],{"class":59},[34,35577,35578],{"class":63},"4096",[34,35580,623],{"class":59},[34,35582,35583,35585,35588,35590,35592,35594,35596,35598],{"class":36,"line":2191},[34,35584,31308],{"class":63},[34,35586,35587],{"class":59},".f2",[34,35589,447],{"class":112},[34,35591,31494],{"class":59},[34,35593,35578],{"class":63},[34,35595,67],{"class":59},[34,35597,35578],{"class":63},[34,35599,623],{"class":59},[34,35601,35602,35604,35607,35609,35611,35613,35615,35617],{"class":36,"line":2196},[34,35603,31308],{"class":63},[34,35605,35606],{"class":59},".f3",[34,35608,447],{"class":112},[34,35610,31494],{"class":59},[34,35612,35578],{"class":63},[34,35614,67],{"class":59},[34,35616,1053],{"class":63},[34,35618,623],{"class":59},[34,35620,35621],{"class":36,"line":2213},[34,35622,2864],{"emptyLinePlaceholder":540},[34,35624,35625],{"class":36,"line":2218},[34,35626,35627],{"class":40},"    # 定义前向传播\n",[34,35629,35630,35632,35634],{"class":36,"line":2223},[34,35631,31264],{"class":112},[34,35633,31556],{"class":2427},[34,35635,31559],{"class":59},[34,35637,35638,35640,35642,35644,35647,35649],{"class":36,"line":2228},[34,35639,31564],{"class":59},[34,35641,447],{"class":112},[34,35643,31286],{"class":63},[34,35645,35646],{"class":59},".ReLu(",[34,35648,31286],{"class":63},[34,35650,31576],{"class":59},[34,35652,35653,35655,35657,35659],{"class":36,"line":2242},[34,35654,31564],{"class":59},[34,35656,447],{"class":112},[34,35658,31286],{"class":63},[34,35660,31587],{"class":59},[34,35662,35663,35665,35667,35669,35671,35673],{"class":36,"line":2247},[34,35664,31564],{"class":59},[34,35666,447],{"class":112},[34,35668,31286],{"class":63},[34,35670,35646],{"class":59},[34,35672,31286],{"class":63},[34,35674,31602],{"class":59},[34,35676,35677,35679,35681,35683],{"class":36,"line":3041},[34,35678,31564],{"class":59},[34,35680,447],{"class":112},[34,35682,31286],{"class":63},[34,35684,31613],{"class":59},[34,35686,35687,35689,35691,35693,35695,35697],{"class":36,"line":3055},[34,35688,31564],{"class":59},[34,35690,447],{"class":112},[34,35692,31286],{"class":63},[34,35694,35646],{"class":59},[34,35696,31286],{"class":63},[34,35698,35699],{"class":59},".c5(x))\n",[34,35701,35702,35704,35706,35708,35710,35712],{"class":36,"line":3063},[34,35703,31564],{"class":59},[34,35705,447],{"class":112},[34,35707,31286],{"class":63},[34,35709,35646],{"class":59},[34,35711,31286],{"class":63},[34,35713,35714],{"class":59},".c6(x))\n",[34,35716,35717,35719,35721,35723,35725,35727],{"class":36,"line":3068},[34,35718,31564],{"class":59},[34,35720,447],{"class":112},[34,35722,31286],{"class":63},[34,35724,35646],{"class":59},[34,35726,31286],{"class":63},[34,35728,35729],{"class":59},".c7(x))\n",[34,35731,35732,35734,35736,35738],{"class":36,"line":3074},[34,35733,31564],{"class":59},[34,35735,447],{"class":112},[34,35737,31286],{"class":63},[34,35739,35740],{"class":59},".s8(x)\n",[34,35742,35743],{"class":36,"line":3080},[34,35744,2864],{"emptyLinePlaceholder":540},[34,35746,35747],{"class":36,"line":3085},[34,35748,35749],{"class":40},"        # 展平加线性全连接层\n",[34,35751,35752,35754,35756,35758],{"class":36,"line":8412},[34,35753,31564],{"class":59},[34,35755,447],{"class":112},[34,35757,31286],{"class":63},[34,35759,31624],{"class":59},[34,35761,35762,35764,35766,35768,35770,35772],{"class":36,"line":8436},[34,35763,31564],{"class":59},[34,35765,447],{"class":112},[34,35767,31286],{"class":63},[34,35769,35646],{"class":59},[34,35771,31286],{"class":63},[34,35773,35774],{"class":59},".f1(x))\n",[34,35776,35777],{"class":36,"line":8441},[34,35778,35779],{"class":40},"        # 还需要dropout对神经元随机进行失活\n",[34,35781,35782,35784,35786,35789,35792],{"class":36,"line":8447},[34,35783,31564],{"class":59},[34,35785,447],{"class":112},[34,35787,35788],{"class":59},"F.dropout(x,",[34,35790,35791],{"class":63},"0.5",[34,35793,623],{"class":59},[34,35795,35796,35798,35800,35802,35804,35806],{"class":36,"line":8474},[34,35797,31564],{"class":59},[34,35799,447],{"class":112},[34,35801,31286],{"class":63},[34,35803,35646],{"class":59},[34,35805,31286],{"class":63},[34,35807,35808],{"class":59},".f2(x))\n",[34,35810,35811,35813,35815,35817,35819],{"class":36,"line":8479},[34,35812,31564],{"class":59},[34,35814,447],{"class":112},[34,35816,35788],{"class":59},[34,35818,35791],{"class":63},[34,35820,623],{"class":59},[34,35822,35823],{"class":36,"line":8485},[34,35824,35825],{"class":40},"        # 直接输出\n",[34,35827,35828,35830,35832,35834],{"class":36,"line":8497},[34,35829,31564],{"class":59},[34,35831,447],{"class":112},[34,35833,31286],{"class":63},[34,35835,35836],{"class":59},".f3(x)\n",[34,35838,35839],{"class":36,"line":8509},[34,35840,35841],{"class":40},"        # 前向传播输出\n",[34,35843,35844,35846],{"class":36,"line":8521},[34,35845,15216],{"class":112},[34,35847,31672],{"class":59},[34,35849,35850],{"class":36,"line":10180},[34,35851,35852],{"class":40},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[34,35854,35855,35857,35859,35861,35863],{"class":36,"line":10205},[34,35856,2002],{"class":112},[34,35858,31683],{"class":63},[34,35860,3413],{"class":112},[34,35862,31688],{"class":187},[34,35864,4203],{"class":59},[34,35866,35867,35869,35871,35873,35875,35877,35879,35881,35883],{"class":36,"line":10228},[34,35868,31700],{"class":59},[34,35870,447],{"class":112},[34,35872,30914],{"class":59},[34,35874,31707],{"class":187},[34,35876,2168],{"class":112},[34,35878,31712],{"class":59},[34,35880,2165],{"class":112},[34,35882,30939],{"class":187},[34,35884,623],{"class":59},[34,35886,35887],{"class":36,"line":10252},[34,35888,35889],{"class":40},"    # 模型实例化，然后将实例化的模型放到设备中\n",[34,35891,35892,35894,35896],{"class":36,"line":10257},[34,35893,31752],{"class":59},[34,35895,447],{"class":112},[34,35897,35898],{"class":59},"AlexNet().to(device)\n",[34,35900,35901,35903,35905,35907,35909,35912,35914,35916],{"class":36,"line":10262},[34,35902,31762],{"class":63},[34,35904,31765],{"class":59},[34,35906,64],{"class":63},[34,35908,67],{"class":59},[34,35910,35911],{"class":63},"227",[34,35913,67],{"class":59},[34,35915,35911],{"class":63},[34,35917,31778],{"class":59},[567,35919,35920],{"start":44},[570,35921,31791],{},[25,35923,35925],{"className":27,"code":35924,"language":29,"meta":22,"style":22},"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",[31,35926,35927,35933,35939,35949,35955,35965,35975,35985,35995,36005,36009,36020,36030,36034,36038,36042,36050,36062,36072,36088,36098,36130,36144,36154,36164,36168,36178,36192,36202,36212,36222,36228,36232,36236,36240,36244,36248,36256,36276,36280,36284,36288,36292,36296,36312,36316,36320,36328,36332,36336,36344,36348,36352,36356,36364,36368,36372,36376,36380,36388,36392,36400,36404,36412,36416,36424,36428,36436,36440,36444,36452,36456,36460,36464,36476,36500,36514,36518,36522,36526,36534,36538,36546,36550,36558,36562,36570,36574,36582,36586,36594,36598,36610,36614,36622,36626,36634,36638,36642,36646,36650,36658,36662,36678,36682,36690,36694,36698,36702,36706,36710,36714,36718,36734,36738,36750,36754,36766,36770,36782,36786,36794,36798,36806,36810,36814,36819,36825,36829,36838,36842,36859,36863,36872,36876,36894,36907,36912,36925,36929,36933,36941,36945,36949,36957,36961,36969,36973,36981,36985,36989,37031,37073,37077,37081,37097,37101,37117,37121,37125,37133,37137,37141,37153,37191,37196,37201,37210,37214,37228,37238,37244,37250,37256,37262,37266,37270,37276,37280,37284,37292,37296,37314,37318,37322,37326,37342,37346,37350,37354,37358,37362,37382,37402,37406,37410,37414,37422,37430,37434,37450,37470,37490,37494,37498,37506,37514,37518,37522,37526,37538,37542,37552,37560,37577],{"__ignoreMap":22},[34,35928,35929,35931],{"class":36,"line":37},[34,35930,30855],{"class":112},[34,35932,32285],{"class":59},[34,35934,35935,35937],{"class":36,"line":44},[34,35936,30855],{"class":112},[34,35938,32292],{"class":59},[34,35940,35941,35943,35945,35947],{"class":36,"line":50},[34,35942,30855],{"class":112},[34,35944,32303],{"class":59},[34,35946,31846],{"class":112},[34,35948,32308],{"class":59},[34,35950,35951,35953],{"class":36,"line":56},[34,35952,30855],{"class":112},[34,35954,30858],{"class":59},[34,35956,35957,35959,35961,35963],{"class":36,"line":107},[34,35958,31200],{"class":112},[34,35960,31878],{"class":59},[34,35962,30855],{"class":112},[34,35964,32325],{"class":59},[34,35966,35967,35969,35971,35973],{"class":36,"line":196},[34,35968,31200],{"class":112},[34,35970,31831],{"class":59},[34,35972,30855],{"class":112},[34,35974,31836],{"class":59},[34,35976,35977,35979,35981,35983],{"class":36,"line":202},[34,35978,31200],{"class":112},[34,35980,31861],{"class":59},[34,35982,30855],{"class":112},[34,35984,31866],{"class":59},[34,35986,35987,35989,35991,35993],{"class":36,"line":207},[34,35988,30855],{"class":112},[34,35990,31878],{"class":59},[34,35992,31846],{"class":112},[34,35994,31883],{"class":59},[34,35996,35997,35999,36001,36003],{"class":36,"line":222},[34,35998,30855],{"class":112},[34,36000,31895],{"class":59},[34,36002,31846],{"class":112},[34,36004,31900],{"class":59},[34,36006,36007],{"class":36,"line":227},[34,36008,32370],{"class":40},[34,36010,36011,36013,36015,36017],{"class":36,"line":232},[34,36012,31200],{"class":112},[34,36014,32377],{"class":59},[34,36016,30855],{"class":112},[34,36018,36019],{"class":59}," AlexNet\n",[34,36021,36022,36024,36026,36028],{"class":36,"line":238},[34,36023,31200],{"class":112},[34,36025,31203],{"class":59},[34,36027,30855],{"class":112},[34,36029,31208],{"class":59},[34,36031,36032],{"class":36,"line":244},[34,36033,2864],{"emptyLinePlaceholder":540},[34,36035,36036],{"class":36,"line":250},[34,36037,2864],{"emptyLinePlaceholder":540},[34,36039,36040],{"class":36,"line":256},[34,36041,32405],{"class":40},[34,36043,36044,36046,36048],{"class":36,"line":261},[34,36045,32410],{"class":112},[34,36047,32413],{"class":2427},[34,36049,32416],{"class":59},[34,36051,36052,36054,36056,36058,36060],{"class":36,"line":267},[34,36053,32421],{"class":59},[34,36055,447],{"class":112},[34,36057,31918],{"class":59},[34,36059,31926],{"class":187},[34,36061,31929],{"class":59},[34,36063,36064,36066,36068,36070],{"class":36,"line":2138},[34,36065,32434],{"class":5680},[34,36067,447],{"class":112},[34,36069,31939],{"class":63},[34,36071,31929],{"class":59},[34,36073,36074,36076,36078,36080,36082,36084,36086],{"class":36,"line":2143},[34,36075,32445],{"class":5680},[34,36077,447],{"class":112},[34,36079,31956],{"class":59},[34,36081,31959],{"class":5680},[34,36083,447],{"class":112},[34,36085,35911],{"class":63},[34,36087,31967],{"class":59},[34,36089,36090,36092,36094,36096],{"class":36,"line":2157},[34,36091,32462],{"class":5680},[34,36093,447],{"class":112},[34,36095,31939],{"class":63},[34,36097,623],{"class":59},[34,36099,36100,36102,36104,36106,36108,36110,36112,36114,36116,36118,36120,36122,36124,36126,36128],{"class":36,"line":2162},[34,36101,32473],{"class":59},[34,36103,447],{"class":112},[34,36105,32478],{"class":59},[34,36107,32481],{"class":63},[34,36109,617],{"class":59},[34,36111,32486],{"class":63},[34,36113,1062],{"class":112},[34,36115,7822],{"class":63},[34,36117,32493],{"class":59},[34,36119,32481],{"class":63},[34,36121,617],{"class":59},[34,36123,32500],{"class":63},[34,36125,1062],{"class":112},[34,36127,7822],{"class":63},[34,36129,32507],{"class":59},[34,36131,36132,36134,36136,36138,36140,36142],{"class":36,"line":2191},[34,36133,32512],{"class":59},[34,36135,447],{"class":112},[34,36137,32517],{"class":59},[34,36139,32000],{"class":5680},[34,36141,447],{"class":112},[34,36143,32005],{"class":59},[34,36145,36146,36148,36150,36152],{"class":36,"line":2196},[34,36147,32528],{"class":5680},[34,36149,447],{"class":112},[34,36151,32533],{"class":63},[34,36153,31929],{"class":59},[34,36155,36156,36158,36160,36162],{"class":36,"line":2213},[34,36157,32540],{"class":5680},[34,36159,447],{"class":112},[34,36161,31939],{"class":63},[34,36163,31929],{"class":59},[34,36165,36166],{"class":36,"line":2218},[34,36167,32551],{"class":40},[34,36169,36170,36172,36174,36176],{"class":36,"line":2223},[34,36171,32556],{"class":5680},[34,36173,447],{"class":112},[34,36175,1002],{"class":63},[34,36177,623],{"class":59},[34,36179,36180,36182,36184,36186,36188,36190],{"class":36,"line":2228},[34,36181,32567],{"class":59},[34,36183,447],{"class":112},[34,36185,31997],{"class":59},[34,36187,32000],{"class":5680},[34,36189,447],{"class":112},[34,36191,32578],{"class":59},[34,36193,36194,36196,36198,36200],{"class":36,"line":2242},[34,36195,32583],{"class":5680},[34,36197,447],{"class":112},[34,36199,32533],{"class":63},[34,36201,31929],{"class":59},[34,36203,36204,36206,36208,36210],{"class":36,"line":2247},[34,36205,32594],{"class":5680},[34,36207,447],{"class":112},[34,36209,31939],{"class":63},[34,36211,31929],{"class":59},[34,36213,36214,36216,36218,36220],{"class":36,"line":3041},[34,36215,32605],{"class":5680},[34,36217,447],{"class":112},[34,36219,1002],{"class":63},[34,36221,623],{"class":59},[34,36223,36224,36226],{"class":36,"line":3055},[34,36225,4554],{"class":112},[34,36227,32618],{"class":59},[34,36229,36230],{"class":36,"line":3063},[34,36231,2864],{"emptyLinePlaceholder":540},[34,36233,36234],{"class":36,"line":3068},[34,36235,32627],{"class":40},[34,36237,36238],{"class":36,"line":3074},[34,36239,32632],{"class":40},[34,36241,36242],{"class":36,"line":3080},[34,36243,2864],{"emptyLinePlaceholder":540},[34,36245,36246],{"class":36,"line":3085},[34,36247,32641],{"class":40},[34,36249,36250,36252,36254],{"class":36,"line":8412},[34,36251,32410],{"class":112},[34,36253,32648],{"class":2427},[34,36255,32651],{"class":59},[34,36257,36258,36260,36262,36264,36266,36268,36270,36272,36274],{"class":36,"line":8436},[34,36259,31700],{"class":59},[34,36261,447],{"class":112},[34,36263,30914],{"class":59},[34,36265,31707],{"class":187},[34,36267,2168],{"class":112},[34,36269,31712],{"class":59},[34,36271,2165],{"class":112},[34,36273,32670],{"class":187},[34,36275,623],{"class":59},[34,36277,36278],{"class":36,"line":8441},[34,36279,2864],{"emptyLinePlaceholder":540},[34,36281,36282],{"class":36,"line":8447},[34,36283,2864],{"emptyLinePlaceholder":540},[34,36285,36286],{"class":36,"line":8474},[34,36287,32685],{"class":40},[34,36289,36290],{"class":36,"line":8479},[34,36291,32690],{"class":40},[34,36293,36294],{"class":36,"line":8485},[34,36295,32695],{"class":40},[34,36297,36298,36300,36302,36304,36306,36308,36310],{"class":36,"line":8497},[34,36299,32700],{"class":59},[34,36301,447],{"class":112},[34,36303,32705],{"class":59},[34,36305,32708],{"class":5680},[34,36307,447],{"class":112},[34,36309,32713],{"class":63},[34,36311,623],{"class":59},[34,36313,36314],{"class":36,"line":8509},[34,36315,2864],{"emptyLinePlaceholder":540},[34,36317,36318],{"class":36,"line":8521},[34,36319,32724],{"class":40},[34,36321,36322,36324,36326],{"class":36,"line":10180},[34,36323,32729],{"class":59},[34,36325,447],{"class":112},[34,36327,32734],{"class":59},[34,36329,36330],{"class":36,"line":10205},[34,36331,2864],{"emptyLinePlaceholder":540},[34,36333,36334],{"class":36,"line":10228},[34,36335,32743],{"class":40},[34,36337,36338,36340,36342],{"class":36,"line":10252},[34,36339,31752],{"class":59},[34,36341,447],{"class":112},[34,36343,32752],{"class":59},[34,36345,36346],{"class":36,"line":10257},[34,36347,32757],{"class":40},[34,36349,36350],{"class":36,"line":10262},[34,36351,32762],{"class":40},[34,36353,36354],{"class":36,"line":10267},[34,36355,32767],{"class":40},[34,36357,36358,36360,36362],{"class":36,"line":10276},[34,36359,32772],{"class":59},[34,36361,447],{"class":112},[34,36363,32777],{"class":59},[34,36365,36366],{"class":36,"line":10281},[34,36367,2864],{"emptyLinePlaceholder":540},[34,36369,36370],{"class":36,"line":10287},[34,36371,2864],{"emptyLinePlaceholder":540},[34,36373,36374],{"class":36,"line":10308},[34,36375,32790],{"class":40},[34,36377,36378],{"class":36,"line":10314},[34,36379,32795],{"class":40},[34,36381,36382,36384,36386],{"class":36,"line":10328},[34,36383,32800],{"class":59},[34,36385,447],{"class":112},[34,36387,32805],{"class":63},[34,36389,36390],{"class":36,"line":10334},[34,36391,32810],{"class":40},[34,36393,36394,36396,36398],{"class":36,"line":10361},[34,36395,32815],{"class":59},[34,36397,447],{"class":112},[34,36399,32820],{"class":59},[34,36401,36402],{"class":36,"line":10370},[34,36403,32825],{"class":40},[34,36405,36406,36408,36410],{"class":36,"line":10376},[34,36407,32830],{"class":59},[34,36409,447],{"class":112},[34,36411,32820],{"class":59},[34,36413,36414],{"class":36,"line":10384},[34,36415,32839],{"class":40},[34,36417,36418,36420,36422],{"class":36,"line":10389},[34,36419,32844],{"class":59},[34,36421,447],{"class":112},[34,36423,32820],{"class":59},[34,36425,36426],{"class":36,"line":17068},[34,36427,32853],{"class":40},[34,36429,36430,36432,36434],{"class":36,"line":17074},[34,36431,32858],{"class":59},[34,36433,447],{"class":112},[34,36435,32820],{"class":59},[34,36437,36438],{"class":36,"line":17097},[34,36439,2864],{"emptyLinePlaceholder":540},[34,36441,36442],{"class":36,"line":17103},[34,36443,32871],{"class":40},[34,36445,36446,36448,36450],{"class":36,"line":17126},[34,36447,32876],{"class":59},[34,36449,447],{"class":112},[34,36451,32881],{"class":59},[34,36453,36454],{"class":36,"line":17140},[34,36455,2864],{"emptyLinePlaceholder":540},[34,36457,36458],{"class":36,"line":17160},[34,36459,2864],{"emptyLinePlaceholder":540},[34,36461,36462],{"class":36,"line":17166},[34,36463,32894],{"class":40},[34,36465,36466,36468,36470,36472,36474],{"class":36,"line":17177},[34,36467,3665],{"class":112},[34,36469,32901],{"class":59},[34,36471,26508],{"class":112},[34,36473,32906],{"class":63},[34,36475,32909],{"class":59},[34,36477,36478,36480,36482,36484,36486,36488,36490,36492,36494,36496,36498],{"class":36,"line":17200},[34,36479,32914],{"class":63},[34,36481,617],{"class":59},[34,36483,32919],{"class":187},[34,36485,32922],{"class":63},[34,36487,1190],{"class":187},[34,36489,32922],{"class":63},[34,36491,860],{"class":187},[34,36493,32931],{"class":59},[34,36495,113],{"class":112},[34,36497,64],{"class":63},[34,36499,30960],{"class":59},[34,36501,36502,36504,36506,36508,36510,36512],{"class":36,"line":17222},[34,36503,32914],{"class":63},[34,36505,617],{"class":59},[34,36507,32946],{"class":187},[34,36509,1062],{"class":112},[34,36511,1053],{"class":63},[34,36513,623],{"class":59},[34,36515,36516],{"class":36,"line":17227},[34,36517,2864],{"emptyLinePlaceholder":540},[34,36519,36520],{"class":36,"line":17233},[34,36521,32961],{"class":40},[34,36523,36524],{"class":36,"line":17247},[34,36525,32966],{"class":40},[34,36527,36528,36530,36532],{"class":36,"line":17260},[34,36529,32971],{"class":59},[34,36531,447],{"class":112},[34,36533,32805],{"class":63},[34,36535,36536],{"class":36,"line":17265},[34,36537,32980],{"class":40},[34,36539,36540,36542,36544],{"class":36,"line":17279},[34,36541,32985],{"class":59},[34,36543,447],{"class":112},[34,36545,3549],{"class":63},[34,36547,36548],{"class":36,"line":17284},[34,36549,32994],{"class":40},[34,36551,36552,36554,36556],{"class":36,"line":17290},[34,36553,32999],{"class":59},[34,36555,447],{"class":112},[34,36557,32805],{"class":63},[34,36559,36560],{"class":36,"line":17295},[34,36561,33008],{"class":40},[34,36563,36564,36566,36568],{"class":36,"line":17309},[34,36565,33013],{"class":59},[34,36567,447],{"class":112},[34,36569,3549],{"class":63},[34,36571,36572],{"class":36,"line":17314},[34,36573,33022],{"class":40},[34,36575,36576,36578,36580],{"class":36,"line":17319},[34,36577,33027],{"class":59},[34,36579,447],{"class":112},[34,36581,3549],{"class":63},[34,36583,36584],{"class":36,"line":17333},[34,36585,33036],{"class":40},[34,36587,36588,36590,36592],{"class":36,"line":17345},[34,36589,33041],{"class":59},[34,36591,447],{"class":112},[34,36593,3549],{"class":63},[34,36595,36596],{"class":36,"line":17350},[34,36597,33050],{"class":40},[34,36599,36600,36602,36604,36606,36608],{"class":36,"line":17363},[34,36601,3867],{"class":112},[34,36603,32064],{"class":59},[34,36605,26508],{"class":112},[34,36607,32069],{"class":63},[34,36609,33063],{"class":59},[34,36611,36612],{"class":36,"line":17368},[34,36613,33068],{"class":40},[34,36615,36616,36618,36620],{"class":36,"line":17373},[34,36617,33073],{"class":59},[34,36619,447],{"class":112},[34,36621,33078],{"class":59},[34,36623,36624],{"class":36,"line":17378},[34,36625,33083],{"class":40},[34,36627,36628,36630,36632],{"class":36,"line":17391},[34,36629,33088],{"class":59},[34,36631,447],{"class":112},[34,36633,33093],{"class":59},[34,36635,36636],{"class":36,"line":17396},[34,36637,33099],{"class":40},[34,36639,36640],{"class":36,"line":33096},[34,36641,33105],{"class":59},[34,36643,36644],{"class":36,"line":33102},[34,36645,33111],{"class":40},[34,36647,36648],{"class":36,"line":33108},[34,36649,33117],{"class":40},[34,36651,36652,36654,36656],{"class":36,"line":33114},[34,36653,33123],{"class":59},[34,36655,447],{"class":112},[34,36657,33128],{"class":59},[34,36659,36660],{"class":36,"line":33120},[34,36661,33134],{"class":40},[34,36663,36664,36666,36668,36670,36672,36674,36676],{"class":36,"line":33131},[34,36665,33140],{"class":59},[34,36667,447],{"class":112},[34,36669,33145],{"class":59},[34,36671,33148],{"class":5680},[34,36673,447],{"class":112},[34,36675,64],{"class":63},[34,36677,623],{"class":59},[34,36679,36680],{"class":36,"line":33137},[34,36681,33160],{"class":40},[34,36683,36684,36686,36688],{"class":36,"line":33157},[34,36685,33166],{"class":59},[34,36687,447],{"class":112},[34,36689,33171],{"class":59},[34,36691,36692],{"class":36,"line":33163},[34,36693,33177],{"class":40},[34,36695,36696],{"class":36,"line":33174},[34,36697,33183],{"class":59},[34,36699,36700],{"class":36,"line":33180},[34,36701,33189],{"class":40},[34,36703,36704],{"class":36,"line":33186},[34,36705,33195],{"class":59},[34,36707,36708],{"class":36,"line":33192},[34,36709,33201],{"class":40},[34,36711,36712],{"class":36,"line":33198},[34,36713,33207],{"class":59},[34,36715,36716],{"class":36,"line":33204},[34,36717,33213],{"class":40},[34,36719,36720,36722,36724,36726,36728,36730,36732],{"class":36,"line":33210},[34,36721,33219],{"class":59},[34,36723,9941],{"class":112},[34,36725,33224],{"class":59},[34,36727,1062],{"class":112},[34,36729,33229],{"class":59},[34,36731,319],{"class":63},[34,36733,623],{"class":59},[34,36735,36736],{"class":36,"line":33216},[34,36737,33239],{"class":40},[34,36739,36740,36742,36744,36746,36748],{"class":36,"line":33236},[34,36741,33245],{"class":59},[34,36743,9941],{"class":112},[34,36745,33250],{"class":59},[34,36747,3413],{"class":112},[34,36749,33255],{"class":59},[34,36751,36752],{"class":36,"line":33242},[34,36753,33261],{"class":40},[34,36755,36756,36758,36760,36762,36764],{"class":36,"line":33258},[34,36757,33267],{"class":59},[34,36759,9941],{"class":112},[34,36761,33229],{"class":59},[34,36763,319],{"class":63},[34,36765,623],{"class":59},[34,36767,36768],{"class":36,"line":33264},[34,36769,33281],{"class":40},[34,36771,36772,36774,36776,36778,36780],{"class":36,"line":33278},[34,36773,3867],{"class":112},[34,36775,33289],{"class":59},[34,36777,26508],{"class":112},[34,36779,32069],{"class":63},[34,36781,33296],{"class":59},[34,36783,36784],{"class":36,"line":33284},[34,36785,33302],{"class":40},[34,36787,36788,36790,36792],{"class":36,"line":33299},[34,36789,33073],{"class":59},[34,36791,447],{"class":112},[34,36793,33078],{"class":59},[34,36795,36796],{"class":36,"line":33305},[34,36797,33317],{"class":40},[34,36799,36800,36802,36804],{"class":36,"line":33314},[34,36801,33088],{"class":59},[34,36803,447],{"class":112},[34,36805,33093],{"class":59},[34,36807,36808],{"class":36,"line":33320},[34,36809,33332],{"class":40},[34,36811,36812],{"class":36,"line":33329},[34,36813,33338],{"class":59},[34,36815,36816],{"class":36,"line":33335},[34,36817,36818],{"class":40},"            # 验证时不计算梯度以节省内存\u002F计算\n",[34,36820,36821,36823],{"class":36,"line":33341},[34,36822,33344],{"class":112},[34,36824,33347],{"class":59},[34,36826,36827],{"class":36,"line":33350},[34,36828,33353],{"class":40},[34,36830,36831,36834,36836],{"class":36,"line":33356},[34,36832,36833],{"class":59},"                output",[34,36835,447],{"class":112},[34,36837,33128],{"class":59},[34,36839,36840],{"class":36,"line":33367},[34,36841,33370],{"class":40},[34,36843,36844,36847,36849,36851,36853,36855,36857],{"class":36,"line":33373},[34,36845,36846],{"class":59},"                pre_lab",[34,36848,447],{"class":112},[34,36850,33145],{"class":59},[34,36852,33148],{"class":5680},[34,36854,447],{"class":112},[34,36856,64],{"class":63},[34,36858,623],{"class":59},[34,36860,36861],{"class":36,"line":33392},[34,36862,33395],{"class":40},[34,36864,36865,36868,36870],{"class":36,"line":33398},[34,36866,36867],{"class":59},"                val_batch_loss",[34,36869,447],{"class":112},[34,36871,33171],{"class":59},[34,36873,36874],{"class":36,"line":33409},[34,36875,33412],{"class":40},[34,36877,36878,36881,36883,36886,36888,36890,36892],{"class":36,"line":33415},[34,36879,36880],{"class":59},"                val_loss",[34,36882,9941],{"class":112},[34,36884,36885],{"class":59},"val_batch_loss.item()",[34,36887,1062],{"class":112},[34,36889,33229],{"class":59},[34,36891,319],{"class":63},[34,36893,623],{"class":59},[34,36895,36896,36899,36901,36903,36905],{"class":36,"line":33435},[34,36897,36898],{"class":59},"                val_corrects",[34,36900,9941],{"class":112},[34,36902,33250],{"class":59},[34,36904,3413],{"class":112},[34,36906,33255],{"class":59},[34,36908,36909],{"class":36,"line":33451},[34,36910,36911],{"class":40},"            # 当前用于验证的样本数量\n",[34,36913,36914,36917,36919,36921,36923],{"class":36,"line":33457},[34,36915,36916],{"class":59},"            val_num",[34,36918,9941],{"class":112},[34,36920,33229],{"class":59},[34,36922,319],{"class":63},[34,36924,623],{"class":59},[34,36926,36927],{"class":36,"line":33471},[34,36928,33474],{"class":40},[34,36930,36931],{"class":36,"line":33477},[34,36932,33480],{"class":40},[34,36934,36935,36937,36939],{"class":36,"line":33483},[34,36936,33486],{"class":59},[34,36938,1190],{"class":112},[34,36940,33491],{"class":59},[34,36942,36943],{"class":36,"line":33494},[34,36944,33497],{"class":40},[34,36946,36947],{"class":36,"line":33500},[34,36948,33503],{"class":40},[34,36950,36951,36953,36955],{"class":36,"line":33506},[34,36952,33509],{"class":59},[34,36954,1190],{"class":112},[34,36956,33491],{"class":59},[34,36958,36959],{"class":36,"line":33516},[34,36960,33519],{"class":40},[34,36962,36963,36965,36967],{"class":36,"line":33522},[34,36964,33525],{"class":59},[34,36966,1190],{"class":112},[34,36968,33530],{"class":59},[34,36970,36971],{"class":36,"line":33533},[34,36972,33536],{"class":40},[34,36974,36975,36977,36979],{"class":36,"line":33539},[34,36976,33542],{"class":59},[34,36978,1190],{"class":112},[34,36980,33530],{"class":59},[34,36982,36983],{"class":36,"line":33549},[34,36984,2864],{"emptyLinePlaceholder":540},[34,36986,36987],{"class":36,"line":33554},[34,36988,33557],{"class":40},[34,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007,37009,37011,37013,37015,37017,37019,37021,37023,37025,37027,37029],{"class":36,"line":33560},[34,36992,32914],{"class":63},[34,36994,617],{"class":59},[34,36996,4056],{"class":187},[34,36998,32922],{"class":63},[34,37000,33571],{"class":187},[34,37002,1501],{"class":63},[34,37004,33576],{"class":112},[34,37006,1550],{"class":63},[34,37008,33581],{"class":187},[34,37010,1501],{"class":63},[34,37012,33576],{"class":112},[34,37014,1550],{"class":63},[34,37016,4056],{"class":187},[34,37018,33592],{"class":59},[34,37020,113],{"class":112},[34,37022,64],{"class":63},[34,37024,33599],{"class":59},[34,37026,113],{"class":112},[34,37028,64],{"class":63},[34,37030,33606],{"class":59},[34,37032,37033,37035,37037,37039,37041,37043,37045,37047,37049,37051,37053,37055,37057,37059,37061,37063,37065,37067,37069,37071],{"class":36,"line":33609},[34,37034,32914],{"class":63},[34,37036,617],{"class":59},[34,37038,4056],{"class":187},[34,37040,32922],{"class":63},[34,37042,33620],{"class":187},[34,37044,1501],{"class":63},[34,37046,33576],{"class":112},[34,37048,1550],{"class":63},[34,37050,33629],{"class":187},[34,37052,1501],{"class":63},[34,37054,33576],{"class":112},[34,37056,1550],{"class":63},[34,37058,4056],{"class":187},[34,37060,33640],{"class":59},[34,37062,113],{"class":112},[34,37064,64],{"class":63},[34,37066,33647],{"class":59},[34,37068,113],{"class":112},[34,37070,64],{"class":63},[34,37072,33606],{"class":59},[34,37074,37075],{"class":36,"line":33656},[34,37076,2864],{"emptyLinePlaceholder":540},[34,37078,37079],{"class":36,"line":33661},[34,37080,33664],{"class":40},[34,37082,37083,37085,37087,37089,37091,37093,37095],{"class":36,"line":33667},[34,37084,2961],{"class":112},[34,37086,33672],{"class":59},[34,37088,113],{"class":112},[34,37090,64],{"class":63},[34,37092,477],{"class":59},[34,37094,1564],{"class":112},[34,37096,33683],{"class":59},[34,37098,37099],{"class":36,"line":33686},[34,37100,33689],{"class":40},[34,37102,37103,37105,37107,37109,37111,37113,37115],{"class":36,"line":33692},[34,37104,33695],{"class":59},[34,37106,656],{"class":63},[34,37108,447],{"class":112},[34,37110,33702],{"class":59},[34,37112,113],{"class":112},[34,37114,64],{"class":63},[34,37116,73],{"class":59},[34,37118,37119],{"class":36,"line":33711},[34,37120,33714],{"class":40},[34,37122,37123],{"class":36,"line":33717},[34,37124,33720],{"class":40},[34,37126,37127,37129,37131],{"class":36,"line":33723},[34,37128,33726],{"class":59},[34,37130,447],{"class":112},[34,37132,32777],{"class":59},[34,37134,37135],{"class":36,"line":33733},[34,37136,2864],{"emptyLinePlaceholder":540},[34,37138,37139],{"class":36,"line":33738},[34,37140,33741],{"class":40},[34,37142,37143,37145,37147,37149,37151],{"class":36,"line":33744},[34,37144,33747],{"class":59},[34,37146,447],{"class":112},[34,37148,33752],{"class":59},[34,37150,113],{"class":112},[34,37152,33757],{"class":59},[34,37154,37155,37157,37159,37161,37163,37165,37167,37169,37171,37173,37175,37177,37179,37181,37183,37185,37187,37189],{"class":36,"line":33760},[34,37156,32914],{"class":63},[34,37158,617],{"class":59},[34,37160,33767],{"class":187},[34,37162,1501],{"class":63},[34,37164,33772],{"class":112},[34,37166,1550],{"class":63},[34,37168,1150],{"class":187},[34,37170,1501],{"class":63},[34,37172,33772],{"class":112},[34,37174,1550],{"class":63},[34,37176,33785],{"class":187},[34,37178,33788],{"class":59},[34,37180,33791],{"class":112},[34,37182,1512],{"class":63},[34,37184,33796],{"class":59},[34,37186,936],{"class":112},[34,37188,1512],{"class":63},[34,37190,30960],{"class":59},[34,37192,37193],{"class":36,"line":33805},[34,37194,37195],{"class":40},"    # 选择最优参数并保存\n",[34,37197,37198],{"class":36,"line":33811},[34,37199,37200],{"class":40},"    # 保存最佳模型权重字典\n",[34,37202,37203,37206,37208],{"class":36,"line":33817},[34,37204,37205],{"class":59},"    torch.save(best_model_wts,",[34,37207,33829],{"class":187},[34,37209,623],{"class":59},[34,37211,37212],{"class":36,"line":33823},[34,37213,33849],{"class":40},[34,37215,37216,37218,37220,37222,37224,37226],{"class":36,"line":33834},[34,37217,33855],{"class":59},[34,37219,447],{"class":112},[34,37221,33860],{"class":59},[34,37223,33863],{"class":5680},[34,37225,447],{"class":112},[34,37227,2017],{"class":59},[34,37229,37230,37232,37234,37236],{"class":36,"line":33840},[34,37231,33873],{"class":187},[34,37233,214],{"class":59},[34,37235,33878],{"class":63},[34,37237,33881],{"class":59},[34,37239,37240,37242],{"class":36,"line":33846},[34,37241,33887],{"class":187},[34,37243,33890],{"class":59},[34,37245,37246,37248],{"class":36,"line":33852},[34,37247,33896],{"class":187},[34,37249,33899],{"class":59},[34,37251,37252,37254],{"class":36,"line":33870},[34,37253,33905],{"class":187},[34,37255,33908],{"class":59},[34,37257,37258,37260],{"class":36,"line":33884},[34,37259,33914],{"class":187},[34,37261,33917],{"class":59},[34,37263,37264],{"class":36,"line":33893},[34,37265,33923],{"class":59},[34,37267,37268],{"class":36,"line":33902},[34,37269,33929],{"class":40},[34,37271,37272,37274],{"class":36,"line":33911},[34,37273,4554],{"class":112},[34,37275,33937],{"class":59},[34,37277,37278],{"class":36,"line":33920},[34,37279,2864],{"emptyLinePlaceholder":540},[34,37281,37282],{"class":36,"line":33926},[34,37283,33948],{"class":40},[34,37285,37286,37288,37290],{"class":36,"line":33932},[34,37287,32410],{"class":112},[34,37289,33956],{"class":2427},[34,37291,33959],{"class":59},[34,37293,37294],{"class":36,"line":33940},[34,37295,33965],{"class":40},[34,37297,37298,37300,37302,37304,37306,37308,37310,37312],{"class":36,"line":33945},[34,37299,33971],{"class":59},[34,37301,32156],{"class":5680},[34,37303,447],{"class":112},[34,37305,617],{"class":59},[34,37307,1105],{"class":63},[34,37309,67],{"class":59},[34,37311,217],{"class":63},[34,37313,30960],{"class":59},[34,37315,37316],{"class":36,"line":33951},[34,37317,33991],{"class":40},[34,37319,37320],{"class":36,"line":33962},[34,37321,33997],{"class":40},[34,37323,37324],{"class":36,"line":33968},[34,37325,34003],{"class":40},[34,37327,37328,37330,37332,37334,37336,37338,37340],{"class":36,"line":33988},[34,37329,32190],{"class":59},[34,37331,64],{"class":63},[34,37333,67],{"class":59},[34,37335,70],{"class":63},[34,37337,67],{"class":59},[34,37339,64],{"class":63},[34,37341,623],{"class":59},[34,37343,37344],{"class":36,"line":33994},[34,37345,34026],{"class":40},[34,37347,37348],{"class":36,"line":34000},[34,37349,34032],{"class":40},[34,37351,37352],{"class":36,"line":34006},[34,37353,34038],{"class":40},[34,37355,37356],{"class":36,"line":34023},[34,37357,34044],{"class":40},[34,37359,37360],{"class":36,"line":34029},[34,37361,34050],{"class":40},[34,37363,37364,37366,37368,37370,37372,37374,37376,37378,37380],{"class":36,"line":34035},[34,37365,34056],{"class":59},[34,37367,34059],{"class":187},[34,37369,34062],{"class":59},[34,37371,34065],{"class":187},[34,37373,67],{"class":59},[34,37375,34070],{"class":5680},[34,37377,447],{"class":112},[34,37379,34075],{"class":187},[34,37381,623],{"class":59},[34,37383,37384,37386,37388,37390,37392,37394,37396,37398,37400],{"class":36,"line":34041},[34,37385,34056],{"class":59},[34,37387,34059],{"class":187},[34,37389,34087],{"class":59},[34,37391,34090],{"class":187},[34,37393,67],{"class":59},[34,37395,34070],{"class":5680},[34,37397,447],{"class":112},[34,37399,34099],{"class":187},[34,37401,623],{"class":59},[34,37403,37404],{"class":36,"line":34047},[34,37405,34107],{"class":40},[34,37407,37408],{"class":36,"line":34053},[34,37409,34113],{"class":59},[34,37411,37412],{"class":36,"line":34080},[34,37413,34119],{"class":40},[34,37415,37416,37418,37420],{"class":36,"line":34104},[34,37417,34125],{"class":59},[34,37419,34128],{"class":187},[34,37421,623],{"class":59},[34,37423,37424,37426,37428],{"class":36,"line":34110},[34,37425,34136],{"class":59},[34,37427,34139],{"class":187},[34,37429,623],{"class":59},[34,37431,37432],{"class":36,"line":34116},[34,37433,34147],{"class":40},[34,37435,37436,37438,37440,37442,37444,37446,37448],{"class":36,"line":34122},[34,37437,32190],{"class":59},[34,37439,64],{"class":63},[34,37441,67],{"class":59},[34,37443,70],{"class":63},[34,37445,67],{"class":59},[34,37447,70],{"class":63},[34,37449,623],{"class":59},[34,37451,37452,37454,37456,37458,37460,37462,37464,37466,37468],{"class":36,"line":34133},[34,37453,34056],{"class":59},[34,37455,34059],{"class":187},[34,37457,34174],{"class":59},[34,37459,34065],{"class":187},[34,37461,67],{"class":59},[34,37463,34070],{"class":5680},[34,37465,447],{"class":112},[34,37467,34185],{"class":187},[34,37469,623],{"class":59},[34,37471,37472,37474,37476,37478,37480,37482,37484,37486,37488],{"class":36,"line":34144},[34,37473,34056],{"class":59},[34,37475,34059],{"class":187},[34,37477,34197],{"class":59},[34,37479,34090],{"class":187},[34,37481,67],{"class":59},[34,37483,34070],{"class":5680},[34,37485,447],{"class":112},[34,37487,34208],{"class":187},[34,37489,623],{"class":59},[34,37491,37492],{"class":36,"line":34150},[34,37493,34216],{"class":40},[34,37495,37496],{"class":36,"line":34167},[34,37497,34113],{"class":59},[34,37499,37500,37502,37504],{"class":36,"line":34190},[34,37501,34125],{"class":59},[34,37503,34059],{"class":187},[34,37505,623],{"class":59},[34,37507,37508,37510,37512],{"class":36,"line":34213},[34,37509,34136],{"class":59},[34,37511,34238],{"class":187},[34,37513,623],{"class":59},[34,37515,37516],{"class":36,"line":34219},[34,37517,34246],{"class":59},[34,37519,37520],{"class":36,"line":34224},[34,37521,2864],{"emptyLinePlaceholder":540},[34,37523,37524],{"class":36,"line":34233},[34,37525,34257],{"class":40},[34,37527,37528,37530,37532,37534,37536],{"class":36,"line":34243},[34,37529,2002],{"class":112},[34,37531,31683],{"class":63},[34,37533,3413],{"class":112},[34,37535,31688],{"class":187},[34,37537,4203],{"class":59},[34,37539,37540],{"class":36,"line":34249},[34,37541,34276],{"class":40},[34,37543,37544,37547,37549],{"class":36,"line":34254},[34,37545,37546],{"class":59},"    AlexNet",[34,37548,447],{"class":112},[34,37550,37551],{"class":59},"AlexNet()\n",[34,37553,37554,37556,37558],{"class":36,"line":34260},[34,37555,34293],{"class":59},[34,37557,447],{"class":112},[34,37559,34298],{"class":59},[34,37561,37562,37564,37566,37569,37571,37573,37575],{"class":36,"line":34273},[34,37563,33855],{"class":59},[34,37565,447],{"class":112},[34,37567,37568],{"class":59},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[34,37570,34311],{"class":5680},[34,37572,447],{"class":112},[34,37574,1306],{"class":63},[34,37576,623],{"class":59},[34,37578,37579],{"class":36,"line":34279},[34,37580,34323],{"class":59},[567,37582,37583],{"start":50},[570,37584,34336],{},[25,37586,37588],{"className":27,"code":37587,"language":29,"meta":22,"style":22},"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",[31,37589,37590,37596,37606,37616,37626,37630,37640,37650,37661,37665,37669,37673,37681,37697,37707,37723,37733,37747,37751,37761,37771,37781,37787,37791,37795,37803,37807,37823,37831,37835,37839,37847,37855,37859,37863,37867,37871,37877,37881,37891,37899,37907,37911,37915,37919,37927,37931,37947,37951,37955,37959,37971,37975,37987,37991,37995,38007,38011,38021,38025,38029,38041,38045,38053,38057,38061,38069,38073,38081,38085,38089,38093,38097,38101,38117,38125,38129,38133,38181,38187,38191,38201,38209,38217,38221,38225,38229,38233,38241,38245,38261,38265,38273,38281],{"__ignoreMap":22},[34,37591,37592,37594],{"class":36,"line":37},[34,37593,30855],{"class":112},[34,37595,30858],{"class":59},[34,37597,37598,37600,37602,37604],{"class":36,"line":44},[34,37599,30855],{"class":112},[34,37601,31878],{"class":59},[34,37603,31846],{"class":112},[34,37605,31883],{"class":59},[34,37607,37608,37610,37612,37614],{"class":36,"line":50},[34,37609,31200],{"class":112},[34,37611,34364],{"class":59},[34,37613,30855],{"class":112},[34,37615,34369],{"class":59},[34,37617,37618,37620,37622,37624],{"class":36,"line":56},[34,37619,31200],{"class":112},[34,37621,31861],{"class":59},[34,37623,30855],{"class":112},[34,37625,31866],{"class":59},[34,37627,37628],{"class":36,"line":107},[34,37629,34384],{"class":40},[34,37631,37632,37634,37636,37638],{"class":36,"line":196},[34,37633,31200],{"class":112},[34,37635,31831],{"class":59},[34,37637,30855],{"class":112},[34,37639,31836],{"class":59},[34,37641,37642,37644,37646,37648],{"class":36,"line":202},[34,37643,31200],{"class":112},[34,37645,32377],{"class":59},[34,37647,30855],{"class":112},[34,37649,36019],{"class":59},[34,37651,37652,37654,37657,37659],{"class":36,"line":207},[34,37653,31200],{"class":112},[34,37655,37656],{"class":59}," 练习.AlexNet.model ",[34,37658,30855],{"class":112},[34,37660,36019],{"class":59},[34,37662,37663],{"class":36,"line":222},[34,37664,2864],{"emptyLinePlaceholder":540},[34,37666,37667],{"class":36,"line":227},[34,37668,2864],{"emptyLinePlaceholder":540},[34,37670,37671],{"class":36,"line":232},[34,37672,34413],{"class":40},[34,37674,37675,37677,37679],{"class":36,"line":238},[34,37676,32410],{"class":112},[34,37678,34420],{"class":2427},[34,37680,32416],{"class":59},[34,37682,37683,37685,37687,37689,37691,37693,37695],{"class":36,"line":244},[34,37684,34427],{"class":59},[34,37686,447],{"class":112},[34,37688,31918],{"class":59},[34,37690,31921],{"class":5680},[34,37692,447],{"class":112},[34,37694,31926],{"class":187},[34,37696,31929],{"class":59},[34,37698,37699,37701,37703,37705],{"class":36,"line":250},[34,37700,34444],{"class":5680},[34,37702,447],{"class":112},[34,37704,34449],{"class":63},[34,37706,31929],{"class":59},[34,37708,37709,37711,37713,37715,37717,37719,37721],{"class":36,"line":256},[34,37710,34456],{"class":5680},[34,37712,447],{"class":112},[34,37714,31956],{"class":59},[34,37716,31959],{"class":5680},[34,37718,447],{"class":112},[34,37720,35911],{"class":63},[34,37722,31967],{"class":59},[34,37724,37725,37727,37729,37731],{"class":36,"line":261},[34,37726,34473],{"class":5680},[34,37728,447],{"class":112},[34,37730,31939],{"class":63},[34,37732,623],{"class":59},[34,37734,37735,37737,37739,37741,37743,37745],{"class":36,"line":267},[34,37736,34484],{"class":59},[34,37738,447],{"class":112},[34,37740,31997],{"class":59},[34,37742,32000],{"class":5680},[34,37744,447],{"class":112},[34,37746,34495],{"class":59},[34,37748,37749],{"class":36,"line":2138},[34,37750,34500],{"class":40},[34,37752,37753,37755,37757,37759],{"class":36,"line":2143},[34,37754,34505],{"class":5680},[34,37756,447],{"class":112},[34,37758,64],{"class":63},[34,37760,31929],{"class":59},[34,37762,37763,37765,37767,37769],{"class":36,"line":2157},[34,37764,34516],{"class":5680},[34,37766,447],{"class":112},[34,37768,31939],{"class":63},[34,37770,31929],{"class":59},[34,37772,37773,37775,37777,37779],{"class":36,"line":2162},[34,37774,34527],{"class":5680},[34,37776,447],{"class":112},[34,37778,319],{"class":63},[34,37780,623],{"class":59},[34,37782,37783,37785],{"class":36,"line":2191},[34,37784,4554],{"class":112},[34,37786,34540],{"class":59},[34,37788,37789],{"class":36,"line":2196},[34,37790,2864],{"emptyLinePlaceholder":540},[34,37792,37793],{"class":36,"line":2213},[34,37794,34549],{"class":40},[34,37796,37797,37799,37801],{"class":36,"line":2218},[34,37798,32410],{"class":112},[34,37800,34556],{"class":2427},[34,37802,34559],{"class":59},[34,37804,37805],{"class":36,"line":2223},[34,37806,34564],{"class":40},[34,37808,37809,37811,37813,37815,37817,37819,37821],{"class":36,"line":2228},[34,37810,31700],{"class":59},[34,37812,447],{"class":112},[34,37814,31707],{"class":187},[34,37816,2168],{"class":112},[34,37818,31712],{"class":59},[34,37820,2165],{"class":112},[34,37822,34581],{"class":187},[34,37824,37825,37827,37829],{"class":36,"line":2242},[34,37826,31752],{"class":59},[34,37828,447],{"class":112},[34,37830,32752],{"class":59},[34,37832,37833],{"class":36,"line":2247},[34,37834,2864],{"emptyLinePlaceholder":540},[34,37836,37837],{"class":36,"line":3041},[34,37838,34598],{"class":40},[34,37840,37841,37843,37845],{"class":36,"line":3055},[34,37842,34603],{"class":59},[34,37844,447],{"class":112},[34,37846,32805],{"class":63},[34,37848,37849,37851,37853],{"class":36,"line":3063},[34,37850,34612],{"class":59},[34,37852,447],{"class":112},[34,37854,3549],{"class":63},[34,37856,37857],{"class":36,"line":3068},[34,37858,2864],{"emptyLinePlaceholder":540},[34,37860,37861],{"class":36,"line":3074},[34,37862,34625],{"class":40},[34,37864,37865],{"class":36,"line":3080},[34,37866,34630],{"class":40},[34,37868,37869],{"class":36,"line":3085},[34,37870,34635],{"class":40},[34,37872,37873,37875],{"class":36,"line":8412},[34,37874,34640],{"class":112},[34,37876,33347],{"class":59},[34,37878,37879],{"class":36,"line":8436},[34,37880,34647],{"class":40},[34,37882,37883,37885,37887,37889],{"class":36,"line":8441},[34,37884,3867],{"class":112},[34,37886,34654],{"class":59},[34,37888,26508],{"class":112},[34,37890,34659],{"class":59},[34,37892,37893,37895,37897],{"class":36,"line":8447},[34,37894,34664],{"class":59},[34,37896,447],{"class":112},[34,37898,34669],{"class":59},[34,37900,37901,37903,37905],{"class":36,"line":8474},[34,37902,34674],{"class":59},[34,37904,447],{"class":112},[34,37906,34679],{"class":59},[34,37908,37909],{"class":36,"line":8479},[34,37910,34684],{"class":40},[34,37912,37913],{"class":36,"line":8485},[34,37914,33338],{"class":59},[34,37916,37917],{"class":36,"line":8497},[34,37918,34693],{"class":40},[34,37920,37921,37923,37925],{"class":36,"line":8509},[34,37922,33123],{"class":59},[34,37924,447],{"class":112},[34,37926,34702],{"class":59},[34,37928,37929],{"class":36,"line":8521},[34,37930,34707],{"class":40},[34,37932,37933,37935,37937,37939,37941,37943,37945],{"class":36,"line":10180},[34,37934,33140],{"class":59},[34,37936,447],{"class":112},[34,37938,33145],{"class":59},[34,37940,33148],{"class":5680},[34,37942,447],{"class":112},[34,37944,64],{"class":63},[34,37946,623],{"class":59},[34,37948,37949],{"class":36,"line":10205},[34,37950,34728],{"class":40},[34,37952,37953],{"class":36,"line":10228},[34,37954,34733],{"class":40},[34,37956,37957],{"class":36,"line":10252},[34,37958,34738],{"class":40},[34,37960,37961,37963,37965,37967,37969],{"class":36,"line":10257},[34,37962,34743],{"class":59},[34,37964,9941],{"class":112},[34,37966,33250],{"class":59},[34,37968,3413],{"class":112},[34,37970,34752],{"class":59},[34,37972,37973],{"class":36,"line":10262},[34,37974,34757],{"class":40},[34,37976,37977,37979,37981,37983,37985],{"class":36,"line":10267},[34,37978,34762],{"class":59},[34,37980,9941],{"class":112},[34,37982,34767],{"class":59},[34,37984,319],{"class":63},[34,37986,623],{"class":59},[34,37988,37989],{"class":36,"line":10276},[34,37990,2864],{"emptyLinePlaceholder":540},[34,37992,37993],{"class":36,"line":10281},[34,37994,34780],{"class":40},[34,37996,37997,37999,38001,38003,38005],{"class":36,"line":10287},[34,37998,34785],{"class":59},[34,38000,447],{"class":112},[34,38002,34790],{"class":59},[34,38004,1190],{"class":112},[34,38006,34795],{"class":59},[34,38008,38009],{"class":36,"line":10308},[34,38010,34800],{"class":40},[34,38012,38013,38015,38017,38019],{"class":36,"line":10314},[34,38014,32914],{"class":63},[34,38016,617],{"class":59},[34,38018,34809],{"class":187},[34,38020,34812],{"class":59},[34,38022,38023],{"class":36,"line":10328},[34,38024,2864],{"emptyLinePlaceholder":540},[34,38026,38027],{"class":36,"line":10334},[34,38028,34821],{"class":40},[34,38030,38031,38033,38035,38037,38039],{"class":36,"line":10361},[34,38032,2002],{"class":112},[34,38034,31683],{"class":63},[34,38036,3413],{"class":112},[34,38038,31688],{"class":187},[34,38040,4203],{"class":59},[34,38042,38043],{"class":36,"line":10370},[34,38044,34838],{"class":40},[34,38046,38047,38049,38051],{"class":36,"line":10376},[34,38048,31752],{"class":59},[34,38050,447],{"class":112},[34,38052,37551],{"class":59},[34,38054,38055],{"class":36,"line":10384},[34,38056,34851],{"class":40},[34,38058,38059],{"class":36,"line":10389},[34,38060,34856],{"class":40},[34,38062,38063,38065,38067],{"class":36,"line":17068},[34,38064,34861],{"class":59},[34,38066,34864],{"class":187},[34,38068,30960],{"class":59},[34,38070,38071],{"class":36,"line":17074},[34,38072,34871],{"class":40},[34,38074,38075,38077,38079],{"class":36,"line":17097},[34,38076,34484],{"class":59},[34,38078,447],{"class":112},[34,38080,34880],{"class":59},[34,38082,38083],{"class":36,"line":17103},[34,38084,34885],{"class":40},[34,38086,38087],{"class":36,"line":17126},[34,38088,34890],{"class":59},[34,38090,38091],{"class":36,"line":17140},[34,38092,2864],{"emptyLinePlaceholder":540},[34,38094,38095],{"class":36,"line":17160},[34,38096,34899],{"class":40},[34,38098,38099],{"class":36,"line":17166},[34,38100,34904],{"class":40},[34,38102,38103,38105,38107,38109,38111,38113,38115],{"class":36,"line":17177},[34,38104,31700],{"class":59},[34,38106,447],{"class":112},[34,38108,31707],{"class":187},[34,38110,2168],{"class":112},[34,38112,31712],{"class":59},[34,38114,2165],{"class":112},[34,38116,34581],{"class":187},[34,38118,38119,38121,38123],{"class":36,"line":17200},[34,38120,31752],{"class":59},[34,38122,447],{"class":112},[34,38124,32752],{"class":59},[34,38126,38127],{"class":36,"line":17222},[34,38128,34933],{"class":40},[34,38130,38131],{"class":36,"line":17227},[34,38132,34938],{"class":40},[34,38134,38135,38137,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159,38161,38163,38165,38167,38169,38171,38173,38175,38177,38179],{"class":36,"line":17233},[34,38136,34943],{"class":59},[34,38138,447],{"class":112},[34,38140,1495],{"class":59},[34,38142,34950],{"class":187},[34,38144,67],{"class":59},[34,38146,34955],{"class":187},[34,38148,67],{"class":59},[34,38150,34960],{"class":187},[34,38152,67],{"class":59},[34,38154,34965],{"class":187},[34,38156,67],{"class":59},[34,38158,34970],{"class":187},[34,38160,67],{"class":59},[34,38162,34975],{"class":187},[34,38164,67],{"class":59},[34,38166,34980],{"class":187},[34,38168,67],{"class":59},[34,38170,34985],{"class":187},[34,38172,67],{"class":59},[34,38174,34990],{"class":187},[34,38176,67],{"class":59},[34,38178,34995],{"class":187},[34,38180,73],{"class":59},[34,38182,38183,38185],{"class":36,"line":17247},[34,38184,34640],{"class":112},[34,38186,33347],{"class":59},[34,38188,38189],{"class":36,"line":17260},[34,38190,35008],{"class":40},[34,38192,38193,38195,38197,38199],{"class":36,"line":17265},[34,38194,3867],{"class":112},[34,38196,35015],{"class":59},[34,38198,26508],{"class":112},[34,38200,34659],{"class":59},[34,38202,38203,38205,38207],{"class":36,"line":17279},[34,38204,33073],{"class":59},[34,38206,447],{"class":112},[34,38208,33078],{"class":59},[34,38210,38211,38213,38215],{"class":36,"line":17284},[34,38212,33088],{"class":59},[34,38214,447],{"class":112},[34,38216,33093],{"class":59},[34,38218,38219],{"class":36,"line":17290},[34,38220,2864],{"emptyLinePlaceholder":540},[34,38222,38223],{"class":36,"line":17295},[34,38224,35044],{"class":40},[34,38226,38227],{"class":36,"line":17309},[34,38228,33338],{"class":59},[34,38230,38231],{"class":36,"line":17314},[34,38232,35053],{"class":40},[34,38234,38235,38237,38239],{"class":36,"line":17319},[34,38236,33123],{"class":59},[34,38238,447],{"class":112},[34,38240,33128],{"class":59},[34,38242,38243],{"class":36,"line":17333},[34,38244,35066],{"class":40},[34,38246,38247,38249,38251,38253,38255,38257,38259],{"class":36,"line":17345},[34,38248,33140],{"class":59},[34,38250,447],{"class":112},[34,38252,33145],{"class":59},[34,38254,33148],{"class":5680},[34,38256,447],{"class":112},[34,38258,64],{"class":63},[34,38260,623],{"class":59},[34,38262,38263],{"class":36,"line":17350},[34,38264,35087],{"class":40},[34,38266,38267,38269,38271],{"class":36,"line":17363},[34,38268,35092],{"class":59},[34,38270,447],{"class":112},[34,38272,35097],{"class":59},[34,38274,38275,38277,38279],{"class":36,"line":17368},[34,38276,35102],{"class":59},[34,38278,447],{"class":112},[34,38280,35107],{"class":59},[34,38282,38283,38285,38287,38289,38291,38293,38295,38297],{"class":36,"line":17373},[34,38284,35112],{"class":63},[34,38286,617],{"class":59},[34,38288,35117],{"class":187},[34,38290,35120],{"class":59},[34,38292,35123],{"class":187},[34,38294,67],{"class":59},[34,38296,35128],{"class":187},[34,38298,35131],{"class":59},[584,38300,38302],{"id":38301},"_22vgg","2.2.VGG",[22462,38304,38306],{"id":38305},"_221原理","2.2.1.原理",[14,38308,38309],{},[20,38310],{"alt":22,"src":38311},"\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",[14,38313,38314],{},[20,38315],{"alt":22,"src":38316},"\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",[14,38318,38319],{},[20,38320],{"alt":22,"src":38321},"\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",[14,38323,38324],{},"参数详细描述：",[14,38326,38327],{},[20,38328],{"alt":22,"src":38329},"\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",[14,38331,38332],{},[20,38333],{"alt":22,"src":38334},"\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",[14,38336,38337],{},[20,38338],{"alt":22,"src":38339},"\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",[14,38341,38342],{},[20,38343],{"alt":22,"src":38344},"\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",[14,38346,38347],{},[20,38348],{"alt":22,"src":38349},"\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",[22462,38351,38353],{"id":38352},"_222代码实现","2.2.2.代码实现",[567,38355,38356],{},[570,38357,38358],{},"网络搭建",[25,38360,38362],{"className":27,"code":38361,"language":29,"meta":22,"style":22},"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",[31,38363,38364,38370,38382,38392,38402,38406,38423,38431,38450,38455,38460,38472,38510,38515,38551,38555,38584,38589,38594,38605,38641,38645,38681,38685,38713,38717,38722,38733,38769,38773,38809,38813,38849,38853,38881,38885,38890,38901,38938,38942,38978,38982,39018,39022,39050,39054,39059,39070,39106,39110,39146,39150,39186,39190,39218,39222,39227,39238,39243,39248,39253,39274,39278,39290,39294,39306,39310,39314,39319,39324,39339,39344,39354,39359,39374,39379,39398,39403,39412,39417,39427,39432,39437,39451,39456,39470,39478,39482,39486,39494,39505,39516,39527,39538,39549,39560,39566,39570,39575,39588,39608,39614,39623],{"__ignoreMap":22},[34,38365,38366,38368],{"class":36,"line":37},[34,38367,30855],{"class":112},[34,38369,30858],{"class":59},[34,38371,38372,38374,38377,38379],{"class":36,"line":44},[34,38373,31200],{"class":112},[34,38375,38376],{"class":59}," sympy.core.sympify ",[34,38378,30855],{"class":112},[34,38380,38381],{"class":59}," kernS\n",[34,38383,38384,38386,38388,38390],{"class":36,"line":50},[34,38385,31200],{"class":112},[34,38387,31203],{"class":59},[34,38389,30855],{"class":112},[34,38391,31208],{"class":59},[34,38393,38394,38396,38398,38400],{"class":36,"line":56},[34,38395,31200],{"class":112},[34,38397,31220],{"class":59},[34,38399,30855],{"class":112},[34,38401,31225],{"class":59},[34,38403,38404],{"class":36,"line":107},[34,38405,2864],{"emptyLinePlaceholder":540},[34,38407,38408,38410,38413,38415,38417,38419,38421],{"class":36,"line":196},[34,38409,15158],{"class":112},[34,38411,38412],{"class":2427}," VGG16",[34,38414,617],{"class":59},[34,38416,31241],{"class":2427},[34,38418,1164],{"class":59},[34,38420,31246],{"class":2427},[34,38422,31249],{"class":59},[34,38424,38425,38427,38429],{"class":36,"line":202},[34,38426,31264],{"class":112},[34,38428,31267],{"class":63},[34,38430,31270],{"class":59},[34,38432,38433,38435,38437,38440,38442,38444,38446,38448],{"class":36,"line":207},[34,38434,31280],{"class":63},[34,38436,617],{"class":59},[34,38438,38439],{"class":63},"VGG16",[34,38441,12899],{"class":59},[34,38443,31286],{"class":63},[34,38445,31289],{"class":59},[34,38447,31292],{"class":63},[34,38449,2440],{"class":59},[34,38451,38452],{"class":36,"line":222},[34,38453,38454],{"class":40},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[34,38456,38457],{"class":36,"line":227},[34,38458,38459],{"class":40},"        # 这里用的是灰度图\n",[34,38461,38462,38464,38467,38469],{"class":36,"line":232},[34,38463,31308],{"class":63},[34,38465,38466],{"class":59},".block1",[34,38468,447],{"class":112},[34,38470,38471],{"class":59},"nn.Sequential(\n",[34,38473,38474,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507],{"class":36,"line":238},[34,38475,38476],{"class":59},"            nn.Conv2d(",[34,38478,31319],{"class":5680},[34,38480,447],{"class":112},[34,38482,64],{"class":63},[34,38484,67],{"class":59},[34,38486,31328],{"class":5680},[34,38488,447],{"class":112},[34,38490,813],{"class":63},[34,38492,67],{"class":59},[34,38494,31337],{"class":5680},[34,38496,447],{"class":112},[34,38498,309],{"class":63},[34,38500,67],{"class":59},[34,38502,31346],{"class":5680},[34,38504,447],{"class":112},[34,38506,64],{"class":63},[34,38508,38509],{"class":59},"),\n",[34,38511,38512],{"class":36,"line":244},[34,38513,38514],{"class":59},"            nn.ReLU(),\n",[34,38516,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549],{"class":36,"line":250},[34,38518,38476],{"class":59},[34,38520,31319],{"class":5680},[34,38522,447],{"class":112},[34,38524,813],{"class":63},[34,38526,67],{"class":59},[34,38528,31328],{"class":5680},[34,38530,447],{"class":112},[34,38532,813],{"class":63},[34,38534,67],{"class":59},[34,38536,31337],{"class":5680},[34,38538,447],{"class":112},[34,38540,309],{"class":63},[34,38542,67],{"class":59},[34,38544,31346],{"class":5680},[34,38546,447],{"class":112},[34,38548,64],{"class":63},[34,38550,38509],{"class":59},[34,38552,38553],{"class":36,"line":256},[34,38554,38514],{"class":59},[34,38556,38557,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582],{"class":36,"line":261},[34,38558,38559],{"class":59},"            nn.MaxPool2d(",[34,38561,31337],{"class":5680},[34,38563,447],{"class":112},[34,38565,70],{"class":63},[34,38567,67],{"class":59},[34,38569,31392],{"class":5680},[34,38571,447],{"class":112},[34,38573,70],{"class":63},[34,38575,67],{"class":59},[34,38577,31346],{"class":5680},[34,38579,447],{"class":112},[34,38581,319],{"class":63},[34,38583,623],{"class":59},[34,38585,38586],{"class":36,"line":267},[34,38587,38588],{"class":59},"        )\n",[34,38590,38591],{"class":36,"line":2138},[34,38592,38593],{"class":40},"        # 第二层\n",[34,38595,38596,38598,38601,38603],{"class":36,"line":2143},[34,38597,31308],{"class":63},[34,38599,38600],{"class":59},".block2",[34,38602,447],{"class":112},[34,38604,38471],{"class":59},[34,38606,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639],{"class":36,"line":2157},[34,38608,38476],{"class":59},[34,38610,31319],{"class":5680},[34,38612,447],{"class":112},[34,38614,813],{"class":63},[34,38616,67],{"class":59},[34,38618,31328],{"class":5680},[34,38620,447],{"class":112},[34,38622,32533],{"class":63},[34,38624,67],{"class":59},[34,38626,31337],{"class":5680},[34,38628,447],{"class":112},[34,38630,309],{"class":63},[34,38632,67],{"class":59},[34,38634,31346],{"class":5680},[34,38636,447],{"class":112},[34,38638,64],{"class":63},[34,38640,38509],{"class":59},[34,38642,38643],{"class":36,"line":2162},[34,38644,38514],{"class":59},[34,38646,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679],{"class":36,"line":2191},[34,38648,38476],{"class":59},[34,38650,31319],{"class":5680},[34,38652,447],{"class":112},[34,38654,32533],{"class":63},[34,38656,67],{"class":59},[34,38658,31328],{"class":5680},[34,38660,447],{"class":112},[34,38662,32533],{"class":63},[34,38664,67],{"class":59},[34,38666,31337],{"class":5680},[34,38668,447],{"class":112},[34,38670,309],{"class":63},[34,38672,67],{"class":59},[34,38674,31346],{"class":5680},[34,38676,447],{"class":112},[34,38678,64],{"class":63},[34,38680,38509],{"class":59},[34,38682,38683],{"class":36,"line":2196},[34,38684,38514],{"class":59},[34,38686,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711],{"class":36,"line":2213},[34,38688,38559],{"class":59},[34,38690,31337],{"class":5680},[34,38692,447],{"class":112},[34,38694,70],{"class":63},[34,38696,67],{"class":59},[34,38698,31392],{"class":5680},[34,38700,447],{"class":112},[34,38702,70],{"class":63},[34,38704,67],{"class":59},[34,38706,31346],{"class":5680},[34,38708,447],{"class":112},[34,38710,319],{"class":63},[34,38712,623],{"class":59},[34,38714,38715],{"class":36,"line":2218},[34,38716,38588],{"class":59},[34,38718,38719],{"class":36,"line":2223},[34,38720,38721],{"class":40},"        # 第三层\n",[34,38723,38724,38726,38729,38731],{"class":36,"line":2228},[34,38725,31308],{"class":63},[34,38727,38728],{"class":59},".block3",[34,38730,447],{"class":112},[34,38732,38471],{"class":59},[34,38734,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767],{"class":36,"line":2242},[34,38736,38476],{"class":59},[34,38738,31319],{"class":5680},[34,38740,447],{"class":112},[34,38742,32533],{"class":63},[34,38744,67],{"class":59},[34,38746,31328],{"class":5680},[34,38748,447],{"class":112},[34,38750,35332],{"class":63},[34,38752,67],{"class":59},[34,38754,31337],{"class":5680},[34,38756,447],{"class":112},[34,38758,309],{"class":63},[34,38760,67],{"class":59},[34,38762,31346],{"class":5680},[34,38764,447],{"class":112},[34,38766,64],{"class":63},[34,38768,38509],{"class":59},[34,38770,38771],{"class":36,"line":2247},[34,38772,38514],{"class":59},[34,38774,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805,38807],{"class":36,"line":3041},[34,38776,38476],{"class":59},[34,38778,31319],{"class":5680},[34,38780,447],{"class":112},[34,38782,35332],{"class":63},[34,38784,67],{"class":59},[34,38786,31328],{"class":5680},[34,38788,447],{"class":112},[34,38790,35332],{"class":63},[34,38792,67],{"class":59},[34,38794,31337],{"class":5680},[34,38796,447],{"class":112},[34,38798,309],{"class":63},[34,38800,67],{"class":59},[34,38802,31346],{"class":5680},[34,38804,447],{"class":112},[34,38806,64],{"class":63},[34,38808,38509],{"class":59},[34,38810,38811],{"class":36,"line":3055},[34,38812,38514],{"class":59},[34,38814,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843,38845,38847],{"class":36,"line":3063},[34,38816,38476],{"class":59},[34,38818,31319],{"class":5680},[34,38820,447],{"class":112},[34,38822,35332],{"class":63},[34,38824,67],{"class":59},[34,38826,31328],{"class":5680},[34,38828,447],{"class":112},[34,38830,35332],{"class":63},[34,38832,67],{"class":59},[34,38834,31337],{"class":5680},[34,38836,447],{"class":112},[34,38838,309],{"class":63},[34,38840,67],{"class":59},[34,38842,31346],{"class":5680},[34,38844,447],{"class":112},[34,38846,64],{"class":63},[34,38848,38509],{"class":59},[34,38850,38851],{"class":36,"line":3068},[34,38852,38514],{"class":59},[34,38854,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879],{"class":36,"line":3074},[34,38856,38559],{"class":59},[34,38858,31337],{"class":5680},[34,38860,447],{"class":112},[34,38862,70],{"class":63},[34,38864,67],{"class":59},[34,38866,31392],{"class":5680},[34,38868,447],{"class":112},[34,38870,70],{"class":63},[34,38872,67],{"class":59},[34,38874,31346],{"class":5680},[34,38876,447],{"class":112},[34,38878,319],{"class":63},[34,38880,623],{"class":59},[34,38882,38883],{"class":36,"line":3080},[34,38884,38588],{"class":59},[34,38886,38887],{"class":36,"line":3085},[34,38888,38889],{"class":40},"        # 第四层\n",[34,38891,38892,38894,38897,38899],{"class":36,"line":8412},[34,38893,31308],{"class":63},[34,38895,38896],{"class":59},".block4",[34,38898,447],{"class":112},[34,38900,38471],{"class":59},[34,38902,38903,38905,38907,38909,38911,38913,38915,38917,38920,38922,38924,38926,38928,38930,38932,38934,38936],{"class":36,"line":8436},[34,38904,38476],{"class":59},[34,38906,31319],{"class":5680},[34,38908,447],{"class":112},[34,38910,35332],{"class":63},[34,38912,67],{"class":59},[34,38914,31328],{"class":5680},[34,38916,447],{"class":112},[34,38918,38919],{"class":63},"512",[34,38921,67],{"class":59},[34,38923,31337],{"class":5680},[34,38925,447],{"class":112},[34,38927,309],{"class":63},[34,38929,67],{"class":59},[34,38931,31346],{"class":5680},[34,38933,447],{"class":112},[34,38935,64],{"class":63},[34,38937,38509],{"class":59},[34,38939,38940],{"class":36,"line":8441},[34,38941,38514],{"class":59},[34,38943,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970,38972,38974,38976],{"class":36,"line":8447},[34,38945,38476],{"class":59},[34,38947,31319],{"class":5680},[34,38949,447],{"class":112},[34,38951,38919],{"class":63},[34,38953,67],{"class":59},[34,38955,31328],{"class":5680},[34,38957,447],{"class":112},[34,38959,38919],{"class":63},[34,38961,67],{"class":59},[34,38963,31337],{"class":5680},[34,38965,447],{"class":112},[34,38967,309],{"class":63},[34,38969,67],{"class":59},[34,38971,31346],{"class":5680},[34,38973,447],{"class":112},[34,38975,64],{"class":63},[34,38977,38509],{"class":59},[34,38979,38980],{"class":36,"line":8474},[34,38981,38514],{"class":59},[34,38983,38984,38986,38988,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008,39010,39012,39014,39016],{"class":36,"line":8479},[34,38985,38476],{"class":59},[34,38987,31319],{"class":5680},[34,38989,447],{"class":112},[34,38991,38919],{"class":63},[34,38993,67],{"class":59},[34,38995,31328],{"class":5680},[34,38997,447],{"class":112},[34,38999,38919],{"class":63},[34,39001,67],{"class":59},[34,39003,31337],{"class":5680},[34,39005,447],{"class":112},[34,39007,309],{"class":63},[34,39009,67],{"class":59},[34,39011,31346],{"class":5680},[34,39013,447],{"class":112},[34,39015,64],{"class":63},[34,39017,38509],{"class":59},[34,39019,39020],{"class":36,"line":8485},[34,39021,38514],{"class":59},[34,39023,39024,39026,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048],{"class":36,"line":8497},[34,39025,38559],{"class":59},[34,39027,31337],{"class":5680},[34,39029,447],{"class":112},[34,39031,70],{"class":63},[34,39033,67],{"class":59},[34,39035,31392],{"class":5680},[34,39037,447],{"class":112},[34,39039,70],{"class":63},[34,39041,67],{"class":59},[34,39043,31346],{"class":5680},[34,39045,447],{"class":112},[34,39047,319],{"class":63},[34,39049,623],{"class":59},[34,39051,39052],{"class":36,"line":8509},[34,39053,38588],{"class":59},[34,39055,39056],{"class":36,"line":8521},[34,39057,39058],{"class":40},"        # 第五层\n",[34,39060,39061,39063,39066,39068],{"class":36,"line":10180},[34,39062,31308],{"class":63},[34,39064,39065],{"class":59},".block5",[34,39067,447],{"class":112},[34,39069,38471],{"class":59},[34,39071,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096,39098,39100,39102,39104],{"class":36,"line":10205},[34,39073,38476],{"class":59},[34,39075,31319],{"class":5680},[34,39077,447],{"class":112},[34,39079,38919],{"class":63},[34,39081,67],{"class":59},[34,39083,31328],{"class":5680},[34,39085,447],{"class":112},[34,39087,38919],{"class":63},[34,39089,67],{"class":59},[34,39091,31337],{"class":5680},[34,39093,447],{"class":112},[34,39095,309],{"class":63},[34,39097,67],{"class":59},[34,39099,31346],{"class":5680},[34,39101,447],{"class":112},[34,39103,64],{"class":63},[34,39105,38509],{"class":59},[34,39107,39108],{"class":36,"line":10228},[34,39109,38514],{"class":59},[34,39111,39112,39114,39116,39118,39120,39122,39124,39126,39128,39130,39132,39134,39136,39138,39140,39142,39144],{"class":36,"line":10252},[34,39113,38476],{"class":59},[34,39115,31319],{"class":5680},[34,39117,447],{"class":112},[34,39119,38919],{"class":63},[34,39121,67],{"class":59},[34,39123,31328],{"class":5680},[34,39125,447],{"class":112},[34,39127,38919],{"class":63},[34,39129,67],{"class":59},[34,39131,31337],{"class":5680},[34,39133,447],{"class":112},[34,39135,309],{"class":63},[34,39137,67],{"class":59},[34,39139,31346],{"class":5680},[34,39141,447],{"class":112},[34,39143,64],{"class":63},[34,39145,38509],{"class":59},[34,39147,39148],{"class":36,"line":10257},[34,39149,38514],{"class":59},[34,39151,39152,39154,39156,39158,39160,39162,39164,39166,39168,39170,39172,39174,39176,39178,39180,39182,39184],{"class":36,"line":10262},[34,39153,38476],{"class":59},[34,39155,31319],{"class":5680},[34,39157,447],{"class":112},[34,39159,38919],{"class":63},[34,39161,67],{"class":59},[34,39163,31328],{"class":5680},[34,39165,447],{"class":112},[34,39167,38919],{"class":63},[34,39169,67],{"class":59},[34,39171,31337],{"class":5680},[34,39173,447],{"class":112},[34,39175,309],{"class":63},[34,39177,67],{"class":59},[34,39179,31346],{"class":5680},[34,39181,447],{"class":112},[34,39183,64],{"class":63},[34,39185,38509],{"class":59},[34,39187,39188],{"class":36,"line":10267},[34,39189,38514],{"class":59},[34,39191,39192,39194,39196,39198,39200,39202,39204,39206,39208,39210,39212,39214,39216],{"class":36,"line":10276},[34,39193,38559],{"class":59},[34,39195,31337],{"class":5680},[34,39197,447],{"class":112},[34,39199,70],{"class":63},[34,39201,67],{"class":59},[34,39203,31392],{"class":5680},[34,39205,447],{"class":112},[34,39207,70],{"class":63},[34,39209,67],{"class":59},[34,39211,31346],{"class":5680},[34,39213,447],{"class":112},[34,39215,319],{"class":63},[34,39217,623],{"class":59},[34,39219,39220],{"class":36,"line":10281},[34,39221,38588],{"class":59},[34,39223,39224],{"class":36,"line":10287},[34,39225,39226],{"class":40},"        # 全连接层\n",[34,39228,39229,39231,39234,39236],{"class":36,"line":10308},[34,39230,31308],{"class":63},[34,39232,39233],{"class":59},".block6",[34,39235,447],{"class":112},[34,39237,38471],{"class":59},[34,39239,39240],{"class":36,"line":10314},[34,39241,39242],{"class":40},"            # 平展操作\n",[34,39244,39245],{"class":36,"line":10328},[34,39246,39247],{"class":40},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[34,39249,39250],{"class":36,"line":10334},[34,39251,39252],{"class":59},"            nn.Flatten(),\n",[34,39254,39255,39258,39260,39262,39264,39266,39268,39270,39272],{"class":36,"line":10361},[34,39256,39257],{"class":59},"            nn.Linear(",[34,39259,977],{"class":63},[34,39261,1062],{"class":112},[34,39263,977],{"class":63},[34,39265,1062],{"class":112},[34,39267,38919],{"class":63},[34,39269,67],{"class":59},[34,39271,35332],{"class":63},[34,39273,38509],{"class":59},[34,39275,39276],{"class":36,"line":10370},[34,39277,38514],{"class":59},[34,39279,39280,39282,39284,39286,39288],{"class":36,"line":10376},[34,39281,39257],{"class":59},[34,39283,35332],{"class":63},[34,39285,67],{"class":59},[34,39287,32533],{"class":63},[34,39289,38509],{"class":59},[34,39291,39292],{"class":36,"line":10384},[34,39293,38514],{"class":59},[34,39295,39296,39298,39300,39302,39304],{"class":36,"line":10389},[34,39297,39257],{"class":59},[34,39299,32533],{"class":63},[34,39301,67],{"class":59},[34,39303,1053],{"class":63},[34,39305,623],{"class":59},[34,39307,39308],{"class":36,"line":17068},[34,39309,38588],{"class":59},[34,39311,39312],{"class":36,"line":17074},[34,39313,2864],{"emptyLinePlaceholder":540},[34,39315,39316],{"class":36,"line":17097},[34,39317,39318],{"class":40},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[34,39320,39321],{"class":36,"line":17103},[34,39322,39323],{"class":40},"        # 循环遍历模型\n",[34,39325,39326,39328,39331,39333,39336],{"class":36,"line":17126},[34,39327,3867],{"class":112},[34,39329,39330],{"class":59}," m ",[34,39332,26508],{"class":112},[34,39334,39335],{"class":63}," self",[34,39337,39338],{"class":59},".modules():\n",[34,39340,39341],{"class":36,"line":17140},[34,39342,39343],{"class":40},"            # print(m)\n",[34,39345,39346,39348,39351],{"class":36,"line":17160},[34,39347,5106],{"class":112},[34,39349,39350],{"class":63}," isinstance",[34,39352,39353],{"class":59},"(m,nn.Conv2d):\n",[34,39355,39356],{"class":36,"line":17166},[34,39357,39358],{"class":40},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[34,39360,39361,39364,39367,39369,39372],{"class":36,"line":17177},[34,39362,39363],{"class":59},"                nn.init.kaiming_normal_(m.weight,",[34,39365,39366],{"class":5680},"nonlinearity",[34,39368,447],{"class":112},[34,39370,39371],{"class":187},"'relu'",[34,39373,623],{"class":59},[34,39375,39376],{"class":36,"line":17200},[34,39377,39378],{"class":40},"                # 判断b参数是否存在\n",[34,39380,39381,39384,39387,39390,39393,39396],{"class":36,"line":17222},[34,39382,39383],{"class":112},"                if",[34,39385,39386],{"class":59}," m.bias ",[34,39388,39389],{"class":112},"is",[34,39391,39392],{"class":112}," not",[34,39394,39395],{"class":63}," None",[34,39397,4203],{"class":59},[34,39399,39400],{"class":36,"line":17227},[34,39401,39402],{"class":40},"                    # 如果参数不存在的化初始化b=0\n",[34,39404,39405,39408,39410],{"class":36,"line":17233},[34,39406,39407],{"class":59},"                    nn.init.constant_(m.bias,",[34,39409,319],{"class":63},[34,39411,623],{"class":59},[34,39413,39414],{"class":36,"line":17247},[34,39415,39416],{"class":40},"            # 全连接层初始化\n",[34,39418,39419,39422,39424],{"class":36,"line":17260},[34,39420,39421],{"class":112},"            elif",[34,39423,39350],{"class":63},[34,39425,39426],{"class":59},"(m,nn.Linear):\n",[34,39428,39429],{"class":36,"line":17265},[34,39430,39431],{"class":40},"                # 这个初始化方法是利用的是正太分布的方式\n",[34,39433,39434],{"class":36,"line":17279},[34,39435,39436],{"class":40},"                # 均值为0，方差为0.01\n",[34,39438,39439,39442,39444,39446,39449],{"class":36,"line":17284},[34,39440,39441],{"class":59},"                nn.init.normal_(m.weight,",[34,39443,319],{"class":63},[34,39445,67],{"class":59},[34,39447,39448],{"class":63},"0.01",[34,39450,623],{"class":59},[34,39452,39453],{"class":36,"line":17290},[34,39454,39455],{"class":40},"                # 初始化b参数\n",[34,39457,39458,39460,39462,39464,39466,39468],{"class":36,"line":17295},[34,39459,39383],{"class":112},[34,39461,39386],{"class":59},[34,39463,39389],{"class":112},[34,39465,39392],{"class":112},[34,39467,39395],{"class":63},[34,39469,4203],{"class":59},[34,39471,39472,39474,39476],{"class":36,"line":17309},[34,39473,39407],{"class":59},[34,39475,319],{"class":63},[34,39477,623],{"class":59},[34,39479,39480],{"class":36,"line":17314},[34,39481,2864],{"emptyLinePlaceholder":540},[34,39483,39484],{"class":36,"line":17319},[34,39485,35627],{"class":40},[34,39487,39488,39490,39492],{"class":36,"line":17333},[34,39489,31264],{"class":112},[34,39491,31556],{"class":2427},[34,39493,31559],{"class":59},[34,39495,39496,39498,39500,39502],{"class":36,"line":17345},[34,39497,31564],{"class":59},[34,39499,447],{"class":112},[34,39501,31286],{"class":63},[34,39503,39504],{"class":59},".block1(x)\n",[34,39506,39507,39509,39511,39513],{"class":36,"line":17350},[34,39508,31564],{"class":59},[34,39510,447],{"class":112},[34,39512,31286],{"class":63},[34,39514,39515],{"class":59},".block2(x)\n",[34,39517,39518,39520,39522,39524],{"class":36,"line":17363},[34,39519,31564],{"class":59},[34,39521,447],{"class":112},[34,39523,31286],{"class":63},[34,39525,39526],{"class":59},".block3(x)\n",[34,39528,39529,39531,39533,39535],{"class":36,"line":17368},[34,39530,31564],{"class":59},[34,39532,447],{"class":112},[34,39534,31286],{"class":63},[34,39536,39537],{"class":59},".block4(x)\n",[34,39539,39540,39542,39544,39546],{"class":36,"line":17373},[34,39541,31564],{"class":59},[34,39543,447],{"class":112},[34,39545,31286],{"class":63},[34,39547,39548],{"class":59},".block5(x)\n",[34,39550,39551,39553,39555,39557],{"class":36,"line":17378},[34,39552,31564],{"class":59},[34,39554,447],{"class":112},[34,39556,31286],{"class":63},[34,39558,39559],{"class":59},".block6(x)\n",[34,39561,39562,39564],{"class":36,"line":17391},[34,39563,15216],{"class":112},[34,39565,31672],{"class":59},[34,39567,39568],{"class":36,"line":17396},[34,39569,2864],{"emptyLinePlaceholder":540},[34,39571,39572],{"class":36,"line":33096},[34,39573,39574],{"class":40},"# 验证模型\n",[34,39576,39577,39579,39581,39583,39586],{"class":36,"line":33102},[34,39578,2002],{"class":112},[34,39580,31683],{"class":63},[34,39582,3413],{"class":112},[34,39584,39585],{"class":187},"'__main__'",[34,39587,4203],{"class":59},[34,39589,39590,39592,39594,39596,39598,39600,39602,39604,39606],{"class":36,"line":33108},[34,39591,31700],{"class":59},[34,39593,447],{"class":112},[34,39595,30914],{"class":59},[34,39597,31707],{"class":187},[34,39599,2168],{"class":112},[34,39601,31712],{"class":59},[34,39603,2165],{"class":112},[34,39605,30939],{"class":187},[34,39607,623],{"class":59},[34,39609,39610,39612],{"class":36,"line":33114},[34,39611,31762],{"class":63},[34,39613,30948],{"class":59},[34,39615,39616,39618,39620],{"class":36,"line":33120},[34,39617,31752],{"class":59},[34,39619,447],{"class":112},[34,39621,39622],{"class":59},"VGG16().to(device)\n",[34,39624,39625,39627,39629,39631,39633,39635,39637,39639],{"class":36,"line":33131},[34,39626,31762],{"class":63},[34,39628,31765],{"class":59},[34,39630,64],{"class":63},[34,39632,67],{"class":59},[34,39634,31964],{"class":63},[34,39636,67],{"class":59},[34,39638,31964],{"class":63},[34,39640,31778],{"class":59},[567,39642,39643],{"start":44},[570,39644,39645],{},"训练代码",[14,39647,39648],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39650,39651],{},"解决方式:",[14,39653,39654],{},"①权重初始化",[25,39656,39658],{"className":27,"code":39657,"language":29,"meta":22,"style":22},"# 权重初始化,保证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",[31,39659,39660,39665,39670,39682,39687,39695,39700,39713,39718,39732,39737,39746,39751,39760,39765,39770,39783,39788,39802],{"__ignoreMap":22},[34,39661,39662],{"class":36,"line":37},[34,39663,39664],{"class":40},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[34,39666,39667],{"class":36,"line":44},[34,39668,39669],{"class":40},"# 循环遍历模型\n",[34,39671,39672,39674,39676,39678,39680],{"class":36,"line":50},[34,39673,3489],{"class":112},[34,39675,39330],{"class":59},[34,39677,26508],{"class":112},[34,39679,39335],{"class":63},[34,39681,39338],{"class":59},[34,39683,39684],{"class":36,"line":56},[34,39685,39686],{"class":40},"    # print(m)\n",[34,39688,39689,39691,39693],{"class":36,"line":107},[34,39690,3565],{"class":112},[34,39692,39350],{"class":63},[34,39694,39353],{"class":59},[34,39696,39697],{"class":36,"line":196},[34,39698,39699],{"class":40},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[34,39701,39702,39705,39707,39709,39711],{"class":36,"line":202},[34,39703,39704],{"class":59},"        nn.init.kaiming_normal_(m.weight,",[34,39706,39366],{"class":5680},[34,39708,447],{"class":112},[34,39710,39371],{"class":187},[34,39712,623],{"class":59},[34,39714,39715],{"class":36,"line":207},[34,39716,39717],{"class":40},"        # 判断b参数是否存在\n",[34,39719,39720,39722,39724,39726,39728,39730],{"class":36,"line":222},[34,39721,2961],{"class":112},[34,39723,39386],{"class":59},[34,39725,39389],{"class":112},[34,39727,39392],{"class":112},[34,39729,39395],{"class":63},[34,39731,4203],{"class":59},[34,39733,39734],{"class":36,"line":227},[34,39735,39736],{"class":40},"            # 如果参数不存在的化初始化b=0\n",[34,39738,39739,39742,39744],{"class":36,"line":232},[34,39740,39741],{"class":59},"            nn.init.constant_(m.bias,",[34,39743,319],{"class":63},[34,39745,623],{"class":59},[34,39747,39748],{"class":36,"line":238},[34,39749,39750],{"class":40},"    # 全连接层初始化\n",[34,39752,39753,39756,39758],{"class":36,"line":244},[34,39754,39755],{"class":112},"    elif",[34,39757,39350],{"class":63},[34,39759,39426],{"class":59},[34,39761,39762],{"class":36,"line":250},[34,39763,39764],{"class":40},"        # 这个初始化方法是利用的是正太分布的方式\n",[34,39766,39767],{"class":36,"line":256},[34,39768,39769],{"class":40},"        # 均值为0，方差为0.01\n",[34,39771,39772,39775,39777,39779,39781],{"class":36,"line":261},[34,39773,39774],{"class":59},"        nn.init.normal_(m.weight,",[34,39776,319],{"class":63},[34,39778,67],{"class":59},[34,39780,39448],{"class":63},[34,39782,623],{"class":59},[34,39784,39785],{"class":36,"line":267},[34,39786,39787],{"class":40},"        # 初始化b参数\n",[34,39789,39790,39792,39794,39796,39798,39800],{"class":36,"line":2138},[34,39791,2961],{"class":112},[34,39793,39386],{"class":59},[34,39795,39389],{"class":112},[34,39797,39392],{"class":112},[34,39799,39395],{"class":63},[34,39801,4203],{"class":59},[34,39803,39804,39806,39808],{"class":36,"line":2143},[34,39805,39741],{"class":59},[34,39807,319],{"class":63},[34,39809,623],{"class":59},[14,39811,39812],{},"②尽可能地增加批次",[14,39814,39815],{},"训练完整代码：",[25,39817,39818],{"className":27,"code":38361,"language":29,"meta":22,"style":22},[31,39819,39820,39826,39836,39846,39856,39860,39876,39884,39902,39906,39910,39920,39956,39960,39996,40000,40028,40032,40036,40046,40082,40086,40122,40126,40154,40158,40162,40172,40208,40212,40248,40252,40288,40292,40320,40324,40328,40338,40374,40378,40414,40418,40454,40458,40486,40490,40494,40504,40540,40544,40580,40584,40620,40624,40652,40656,40660,40670,40674,40678,40682,40702,40706,40718,40722,40734,40738,40742,40746,40750,40762,40766,40774,40778,40790,40794,40808,40812,40820,40824,40832,40836,40840,40852,40856,40870,40878,40882,40886,40894,40904,40914,40924,40934,40944,40954,40960,40964,40968,40980,41000,41006,41014],{"__ignoreMap":22},[34,39821,39822,39824],{"class":36,"line":37},[34,39823,30855],{"class":112},[34,39825,30858],{"class":59},[34,39827,39828,39830,39832,39834],{"class":36,"line":44},[34,39829,31200],{"class":112},[34,39831,38376],{"class":59},[34,39833,30855],{"class":112},[34,39835,38381],{"class":59},[34,39837,39838,39840,39842,39844],{"class":36,"line":50},[34,39839,31200],{"class":112},[34,39841,31203],{"class":59},[34,39843,30855],{"class":112},[34,39845,31208],{"class":59},[34,39847,39848,39850,39852,39854],{"class":36,"line":56},[34,39849,31200],{"class":112},[34,39851,31220],{"class":59},[34,39853,30855],{"class":112},[34,39855,31225],{"class":59},[34,39857,39858],{"class":36,"line":107},[34,39859,2864],{"emptyLinePlaceholder":540},[34,39861,39862,39864,39866,39868,39870,39872,39874],{"class":36,"line":196},[34,39863,15158],{"class":112},[34,39865,38412],{"class":2427},[34,39867,617],{"class":59},[34,39869,31241],{"class":2427},[34,39871,1164],{"class":59},[34,39873,31246],{"class":2427},[34,39875,31249],{"class":59},[34,39877,39878,39880,39882],{"class":36,"line":202},[34,39879,31264],{"class":112},[34,39881,31267],{"class":63},[34,39883,31270],{"class":59},[34,39885,39886,39888,39890,39892,39894,39896,39898,39900],{"class":36,"line":207},[34,39887,31280],{"class":63},[34,39889,617],{"class":59},[34,39891,38439],{"class":63},[34,39893,12899],{"class":59},[34,39895,31286],{"class":63},[34,39897,31289],{"class":59},[34,39899,31292],{"class":63},[34,39901,2440],{"class":59},[34,39903,39904],{"class":36,"line":222},[34,39905,38454],{"class":40},[34,39907,39908],{"class":36,"line":227},[34,39909,38459],{"class":40},[34,39911,39912,39914,39916,39918],{"class":36,"line":232},[34,39913,31308],{"class":63},[34,39915,38466],{"class":59},[34,39917,447],{"class":112},[34,39919,38471],{"class":59},[34,39921,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954],{"class":36,"line":238},[34,39923,38476],{"class":59},[34,39925,31319],{"class":5680},[34,39927,447],{"class":112},[34,39929,64],{"class":63},[34,39931,67],{"class":59},[34,39933,31328],{"class":5680},[34,39935,447],{"class":112},[34,39937,813],{"class":63},[34,39939,67],{"class":59},[34,39941,31337],{"class":5680},[34,39943,447],{"class":112},[34,39945,309],{"class":63},[34,39947,67],{"class":59},[34,39949,31346],{"class":5680},[34,39951,447],{"class":112},[34,39953,64],{"class":63},[34,39955,38509],{"class":59},[34,39957,39958],{"class":36,"line":244},[34,39959,38514],{"class":59},[34,39961,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994],{"class":36,"line":250},[34,39963,38476],{"class":59},[34,39965,31319],{"class":5680},[34,39967,447],{"class":112},[34,39969,813],{"class":63},[34,39971,67],{"class":59},[34,39973,31328],{"class":5680},[34,39975,447],{"class":112},[34,39977,813],{"class":63},[34,39979,67],{"class":59},[34,39981,31337],{"class":5680},[34,39983,447],{"class":112},[34,39985,309],{"class":63},[34,39987,67],{"class":59},[34,39989,31346],{"class":5680},[34,39991,447],{"class":112},[34,39993,64],{"class":63},[34,39995,38509],{"class":59},[34,39997,39998],{"class":36,"line":256},[34,39999,38514],{"class":59},[34,40001,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026],{"class":36,"line":261},[34,40003,38559],{"class":59},[34,40005,31337],{"class":5680},[34,40007,447],{"class":112},[34,40009,70],{"class":63},[34,40011,67],{"class":59},[34,40013,31392],{"class":5680},[34,40015,447],{"class":112},[34,40017,70],{"class":63},[34,40019,67],{"class":59},[34,40021,31346],{"class":5680},[34,40023,447],{"class":112},[34,40025,319],{"class":63},[34,40027,623],{"class":59},[34,40029,40030],{"class":36,"line":267},[34,40031,38588],{"class":59},[34,40033,40034],{"class":36,"line":2138},[34,40035,38593],{"class":40},[34,40037,40038,40040,40042,40044],{"class":36,"line":2143},[34,40039,31308],{"class":63},[34,40041,38600],{"class":59},[34,40043,447],{"class":112},[34,40045,38471],{"class":59},[34,40047,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080],{"class":36,"line":2157},[34,40049,38476],{"class":59},[34,40051,31319],{"class":5680},[34,40053,447],{"class":112},[34,40055,813],{"class":63},[34,40057,67],{"class":59},[34,40059,31328],{"class":5680},[34,40061,447],{"class":112},[34,40063,32533],{"class":63},[34,40065,67],{"class":59},[34,40067,31337],{"class":5680},[34,40069,447],{"class":112},[34,40071,309],{"class":63},[34,40073,67],{"class":59},[34,40075,31346],{"class":5680},[34,40077,447],{"class":112},[34,40079,64],{"class":63},[34,40081,38509],{"class":59},[34,40083,40084],{"class":36,"line":2162},[34,40085,38514],{"class":59},[34,40087,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120],{"class":36,"line":2191},[34,40089,38476],{"class":59},[34,40091,31319],{"class":5680},[34,40093,447],{"class":112},[34,40095,32533],{"class":63},[34,40097,67],{"class":59},[34,40099,31328],{"class":5680},[34,40101,447],{"class":112},[34,40103,32533],{"class":63},[34,40105,67],{"class":59},[34,40107,31337],{"class":5680},[34,40109,447],{"class":112},[34,40111,309],{"class":63},[34,40113,67],{"class":59},[34,40115,31346],{"class":5680},[34,40117,447],{"class":112},[34,40119,64],{"class":63},[34,40121,38509],{"class":59},[34,40123,40124],{"class":36,"line":2196},[34,40125,38514],{"class":59},[34,40127,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152],{"class":36,"line":2213},[34,40129,38559],{"class":59},[34,40131,31337],{"class":5680},[34,40133,447],{"class":112},[34,40135,70],{"class":63},[34,40137,67],{"class":59},[34,40139,31392],{"class":5680},[34,40141,447],{"class":112},[34,40143,70],{"class":63},[34,40145,67],{"class":59},[34,40147,31346],{"class":5680},[34,40149,447],{"class":112},[34,40151,319],{"class":63},[34,40153,623],{"class":59},[34,40155,40156],{"class":36,"line":2218},[34,40157,38588],{"class":59},[34,40159,40160],{"class":36,"line":2223},[34,40161,38721],{"class":40},[34,40163,40164,40166,40168,40170],{"class":36,"line":2228},[34,40165,31308],{"class":63},[34,40167,38728],{"class":59},[34,40169,447],{"class":112},[34,40171,38471],{"class":59},[34,40173,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206],{"class":36,"line":2242},[34,40175,38476],{"class":59},[34,40177,31319],{"class":5680},[34,40179,447],{"class":112},[34,40181,32533],{"class":63},[34,40183,67],{"class":59},[34,40185,31328],{"class":5680},[34,40187,447],{"class":112},[34,40189,35332],{"class":63},[34,40191,67],{"class":59},[34,40193,31337],{"class":5680},[34,40195,447],{"class":112},[34,40197,309],{"class":63},[34,40199,67],{"class":59},[34,40201,31346],{"class":5680},[34,40203,447],{"class":112},[34,40205,64],{"class":63},[34,40207,38509],{"class":59},[34,40209,40210],{"class":36,"line":2247},[34,40211,38514],{"class":59},[34,40213,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246],{"class":36,"line":3041},[34,40215,38476],{"class":59},[34,40217,31319],{"class":5680},[34,40219,447],{"class":112},[34,40221,35332],{"class":63},[34,40223,67],{"class":59},[34,40225,31328],{"class":5680},[34,40227,447],{"class":112},[34,40229,35332],{"class":63},[34,40231,67],{"class":59},[34,40233,31337],{"class":5680},[34,40235,447],{"class":112},[34,40237,309],{"class":63},[34,40239,67],{"class":59},[34,40241,31346],{"class":5680},[34,40243,447],{"class":112},[34,40245,64],{"class":63},[34,40247,38509],{"class":59},[34,40249,40250],{"class":36,"line":3055},[34,40251,38514],{"class":59},[34,40253,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286],{"class":36,"line":3063},[34,40255,38476],{"class":59},[34,40257,31319],{"class":5680},[34,40259,447],{"class":112},[34,40261,35332],{"class":63},[34,40263,67],{"class":59},[34,40265,31328],{"class":5680},[34,40267,447],{"class":112},[34,40269,35332],{"class":63},[34,40271,67],{"class":59},[34,40273,31337],{"class":5680},[34,40275,447],{"class":112},[34,40277,309],{"class":63},[34,40279,67],{"class":59},[34,40281,31346],{"class":5680},[34,40283,447],{"class":112},[34,40285,64],{"class":63},[34,40287,38509],{"class":59},[34,40289,40290],{"class":36,"line":3068},[34,40291,38514],{"class":59},[34,40293,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318],{"class":36,"line":3074},[34,40295,38559],{"class":59},[34,40297,31337],{"class":5680},[34,40299,447],{"class":112},[34,40301,70],{"class":63},[34,40303,67],{"class":59},[34,40305,31392],{"class":5680},[34,40307,447],{"class":112},[34,40309,70],{"class":63},[34,40311,67],{"class":59},[34,40313,31346],{"class":5680},[34,40315,447],{"class":112},[34,40317,319],{"class":63},[34,40319,623],{"class":59},[34,40321,40322],{"class":36,"line":3080},[34,40323,38588],{"class":59},[34,40325,40326],{"class":36,"line":3085},[34,40327,38889],{"class":40},[34,40329,40330,40332,40334,40336],{"class":36,"line":8412},[34,40331,31308],{"class":63},[34,40333,38896],{"class":59},[34,40335,447],{"class":112},[34,40337,38471],{"class":59},[34,40339,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372],{"class":36,"line":8436},[34,40341,38476],{"class":59},[34,40343,31319],{"class":5680},[34,40345,447],{"class":112},[34,40347,35332],{"class":63},[34,40349,67],{"class":59},[34,40351,31328],{"class":5680},[34,40353,447],{"class":112},[34,40355,38919],{"class":63},[34,40357,67],{"class":59},[34,40359,31337],{"class":5680},[34,40361,447],{"class":112},[34,40363,309],{"class":63},[34,40365,67],{"class":59},[34,40367,31346],{"class":5680},[34,40369,447],{"class":112},[34,40371,64],{"class":63},[34,40373,38509],{"class":59},[34,40375,40376],{"class":36,"line":8441},[34,40377,38514],{"class":59},[34,40379,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412],{"class":36,"line":8447},[34,40381,38476],{"class":59},[34,40383,31319],{"class":5680},[34,40385,447],{"class":112},[34,40387,38919],{"class":63},[34,40389,67],{"class":59},[34,40391,31328],{"class":5680},[34,40393,447],{"class":112},[34,40395,38919],{"class":63},[34,40397,67],{"class":59},[34,40399,31337],{"class":5680},[34,40401,447],{"class":112},[34,40403,309],{"class":63},[34,40405,67],{"class":59},[34,40407,31346],{"class":5680},[34,40409,447],{"class":112},[34,40411,64],{"class":63},[34,40413,38509],{"class":59},[34,40415,40416],{"class":36,"line":8474},[34,40417,38514],{"class":59},[34,40419,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452],{"class":36,"line":8479},[34,40421,38476],{"class":59},[34,40423,31319],{"class":5680},[34,40425,447],{"class":112},[34,40427,38919],{"class":63},[34,40429,67],{"class":59},[34,40431,31328],{"class":5680},[34,40433,447],{"class":112},[34,40435,38919],{"class":63},[34,40437,67],{"class":59},[34,40439,31337],{"class":5680},[34,40441,447],{"class":112},[34,40443,309],{"class":63},[34,40445,67],{"class":59},[34,40447,31346],{"class":5680},[34,40449,447],{"class":112},[34,40451,64],{"class":63},[34,40453,38509],{"class":59},[34,40455,40456],{"class":36,"line":8485},[34,40457,38514],{"class":59},[34,40459,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484],{"class":36,"line":8497},[34,40461,38559],{"class":59},[34,40463,31337],{"class":5680},[34,40465,447],{"class":112},[34,40467,70],{"class":63},[34,40469,67],{"class":59},[34,40471,31392],{"class":5680},[34,40473,447],{"class":112},[34,40475,70],{"class":63},[34,40477,67],{"class":59},[34,40479,31346],{"class":5680},[34,40481,447],{"class":112},[34,40483,319],{"class":63},[34,40485,623],{"class":59},[34,40487,40488],{"class":36,"line":8509},[34,40489,38588],{"class":59},[34,40491,40492],{"class":36,"line":8521},[34,40493,39058],{"class":40},[34,40495,40496,40498,40500,40502],{"class":36,"line":10180},[34,40497,31308],{"class":63},[34,40499,39065],{"class":59},[34,40501,447],{"class":112},[34,40503,38471],{"class":59},[34,40505,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538],{"class":36,"line":10205},[34,40507,38476],{"class":59},[34,40509,31319],{"class":5680},[34,40511,447],{"class":112},[34,40513,38919],{"class":63},[34,40515,67],{"class":59},[34,40517,31328],{"class":5680},[34,40519,447],{"class":112},[34,40521,38919],{"class":63},[34,40523,67],{"class":59},[34,40525,31337],{"class":5680},[34,40527,447],{"class":112},[34,40529,309],{"class":63},[34,40531,67],{"class":59},[34,40533,31346],{"class":5680},[34,40535,447],{"class":112},[34,40537,64],{"class":63},[34,40539,38509],{"class":59},[34,40541,40542],{"class":36,"line":10228},[34,40543,38514],{"class":59},[34,40545,40546,40548,40550,40552,40554,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578],{"class":36,"line":10252},[34,40547,38476],{"class":59},[34,40549,31319],{"class":5680},[34,40551,447],{"class":112},[34,40553,38919],{"class":63},[34,40555,67],{"class":59},[34,40557,31328],{"class":5680},[34,40559,447],{"class":112},[34,40561,38919],{"class":63},[34,40563,67],{"class":59},[34,40565,31337],{"class":5680},[34,40567,447],{"class":112},[34,40569,309],{"class":63},[34,40571,67],{"class":59},[34,40573,31346],{"class":5680},[34,40575,447],{"class":112},[34,40577,64],{"class":63},[34,40579,38509],{"class":59},[34,40581,40582],{"class":36,"line":10257},[34,40583,38514],{"class":59},[34,40585,40586,40588,40590,40592,40594,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618],{"class":36,"line":10262},[34,40587,38476],{"class":59},[34,40589,31319],{"class":5680},[34,40591,447],{"class":112},[34,40593,38919],{"class":63},[34,40595,67],{"class":59},[34,40597,31328],{"class":5680},[34,40599,447],{"class":112},[34,40601,38919],{"class":63},[34,40603,67],{"class":59},[34,40605,31337],{"class":5680},[34,40607,447],{"class":112},[34,40609,309],{"class":63},[34,40611,67],{"class":59},[34,40613,31346],{"class":5680},[34,40615,447],{"class":112},[34,40617,64],{"class":63},[34,40619,38509],{"class":59},[34,40621,40622],{"class":36,"line":10267},[34,40623,38514],{"class":59},[34,40625,40626,40628,40630,40632,40634,40636,40638,40640,40642,40644,40646,40648,40650],{"class":36,"line":10276},[34,40627,38559],{"class":59},[34,40629,31337],{"class":5680},[34,40631,447],{"class":112},[34,40633,70],{"class":63},[34,40635,67],{"class":59},[34,40637,31392],{"class":5680},[34,40639,447],{"class":112},[34,40641,70],{"class":63},[34,40643,67],{"class":59},[34,40645,31346],{"class":5680},[34,40647,447],{"class":112},[34,40649,319],{"class":63},[34,40651,623],{"class":59},[34,40653,40654],{"class":36,"line":10281},[34,40655,38588],{"class":59},[34,40657,40658],{"class":36,"line":10287},[34,40659,39226],{"class":40},[34,40661,40662,40664,40666,40668],{"class":36,"line":10308},[34,40663,31308],{"class":63},[34,40665,39233],{"class":59},[34,40667,447],{"class":112},[34,40669,38471],{"class":59},[34,40671,40672],{"class":36,"line":10314},[34,40673,39242],{"class":40},[34,40675,40676],{"class":36,"line":10328},[34,40677,39247],{"class":40},[34,40679,40680],{"class":36,"line":10334},[34,40681,39252],{"class":59},[34,40683,40684,40686,40688,40690,40692,40694,40696,40698,40700],{"class":36,"line":10361},[34,40685,39257],{"class":59},[34,40687,977],{"class":63},[34,40689,1062],{"class":112},[34,40691,977],{"class":63},[34,40693,1062],{"class":112},[34,40695,38919],{"class":63},[34,40697,67],{"class":59},[34,40699,35332],{"class":63},[34,40701,38509],{"class":59},[34,40703,40704],{"class":36,"line":10370},[34,40705,38514],{"class":59},[34,40707,40708,40710,40712,40714,40716],{"class":36,"line":10376},[34,40709,39257],{"class":59},[34,40711,35332],{"class":63},[34,40713,67],{"class":59},[34,40715,32533],{"class":63},[34,40717,38509],{"class":59},[34,40719,40720],{"class":36,"line":10384},[34,40721,38514],{"class":59},[34,40723,40724,40726,40728,40730,40732],{"class":36,"line":10389},[34,40725,39257],{"class":59},[34,40727,32533],{"class":63},[34,40729,67],{"class":59},[34,40731,1053],{"class":63},[34,40733,623],{"class":59},[34,40735,40736],{"class":36,"line":17068},[34,40737,38588],{"class":59},[34,40739,40740],{"class":36,"line":17074},[34,40741,2864],{"emptyLinePlaceholder":540},[34,40743,40744],{"class":36,"line":17097},[34,40745,39318],{"class":40},[34,40747,40748],{"class":36,"line":17103},[34,40749,39323],{"class":40},[34,40751,40752,40754,40756,40758,40760],{"class":36,"line":17126},[34,40753,3867],{"class":112},[34,40755,39330],{"class":59},[34,40757,26508],{"class":112},[34,40759,39335],{"class":63},[34,40761,39338],{"class":59},[34,40763,40764],{"class":36,"line":17140},[34,40765,39343],{"class":40},[34,40767,40768,40770,40772],{"class":36,"line":17160},[34,40769,5106],{"class":112},[34,40771,39350],{"class":63},[34,40773,39353],{"class":59},[34,40775,40776],{"class":36,"line":17166},[34,40777,39358],{"class":40},[34,40779,40780,40782,40784,40786,40788],{"class":36,"line":17177},[34,40781,39363],{"class":59},[34,40783,39366],{"class":5680},[34,40785,447],{"class":112},[34,40787,39371],{"class":187},[34,40789,623],{"class":59},[34,40791,40792],{"class":36,"line":17200},[34,40793,39378],{"class":40},[34,40795,40796,40798,40800,40802,40804,40806],{"class":36,"line":17222},[34,40797,39383],{"class":112},[34,40799,39386],{"class":59},[34,40801,39389],{"class":112},[34,40803,39392],{"class":112},[34,40805,39395],{"class":63},[34,40807,4203],{"class":59},[34,40809,40810],{"class":36,"line":17227},[34,40811,39402],{"class":40},[34,40813,40814,40816,40818],{"class":36,"line":17233},[34,40815,39407],{"class":59},[34,40817,319],{"class":63},[34,40819,623],{"class":59},[34,40821,40822],{"class":36,"line":17247},[34,40823,39416],{"class":40},[34,40825,40826,40828,40830],{"class":36,"line":17260},[34,40827,39421],{"class":112},[34,40829,39350],{"class":63},[34,40831,39426],{"class":59},[34,40833,40834],{"class":36,"line":17265},[34,40835,39431],{"class":40},[34,40837,40838],{"class":36,"line":17279},[34,40839,39436],{"class":40},[34,40841,40842,40844,40846,40848,40850],{"class":36,"line":17284},[34,40843,39441],{"class":59},[34,40845,319],{"class":63},[34,40847,67],{"class":59},[34,40849,39448],{"class":63},[34,40851,623],{"class":59},[34,40853,40854],{"class":36,"line":17290},[34,40855,39455],{"class":40},[34,40857,40858,40860,40862,40864,40866,40868],{"class":36,"line":17295},[34,40859,39383],{"class":112},[34,40861,39386],{"class":59},[34,40863,39389],{"class":112},[34,40865,39392],{"class":112},[34,40867,39395],{"class":63},[34,40869,4203],{"class":59},[34,40871,40872,40874,40876],{"class":36,"line":17309},[34,40873,39407],{"class":59},[34,40875,319],{"class":63},[34,40877,623],{"class":59},[34,40879,40880],{"class":36,"line":17314},[34,40881,2864],{"emptyLinePlaceholder":540},[34,40883,40884],{"class":36,"line":17319},[34,40885,35627],{"class":40},[34,40887,40888,40890,40892],{"class":36,"line":17333},[34,40889,31264],{"class":112},[34,40891,31556],{"class":2427},[34,40893,31559],{"class":59},[34,40895,40896,40898,40900,40902],{"class":36,"line":17345},[34,40897,31564],{"class":59},[34,40899,447],{"class":112},[34,40901,31286],{"class":63},[34,40903,39504],{"class":59},[34,40905,40906,40908,40910,40912],{"class":36,"line":17350},[34,40907,31564],{"class":59},[34,40909,447],{"class":112},[34,40911,31286],{"class":63},[34,40913,39515],{"class":59},[34,40915,40916,40918,40920,40922],{"class":36,"line":17363},[34,40917,31564],{"class":59},[34,40919,447],{"class":112},[34,40921,31286],{"class":63},[34,40923,39526],{"class":59},[34,40925,40926,40928,40930,40932],{"class":36,"line":17368},[34,40927,31564],{"class":59},[34,40929,447],{"class":112},[34,40931,31286],{"class":63},[34,40933,39537],{"class":59},[34,40935,40936,40938,40940,40942],{"class":36,"line":17373},[34,40937,31564],{"class":59},[34,40939,447],{"class":112},[34,40941,31286],{"class":63},[34,40943,39548],{"class":59},[34,40945,40946,40948,40950,40952],{"class":36,"line":17378},[34,40947,31564],{"class":59},[34,40949,447],{"class":112},[34,40951,31286],{"class":63},[34,40953,39559],{"class":59},[34,40955,40956,40958],{"class":36,"line":17391},[34,40957,15216],{"class":112},[34,40959,31672],{"class":59},[34,40961,40962],{"class":36,"line":17396},[34,40963,2864],{"emptyLinePlaceholder":540},[34,40965,40966],{"class":36,"line":33096},[34,40967,39574],{"class":40},[34,40969,40970,40972,40974,40976,40978],{"class":36,"line":33102},[34,40971,2002],{"class":112},[34,40973,31683],{"class":63},[34,40975,3413],{"class":112},[34,40977,39585],{"class":187},[34,40979,4203],{"class":59},[34,40981,40982,40984,40986,40988,40990,40992,40994,40996,40998],{"class":36,"line":33108},[34,40983,31700],{"class":59},[34,40985,447],{"class":112},[34,40987,30914],{"class":59},[34,40989,31707],{"class":187},[34,40991,2168],{"class":112},[34,40993,31712],{"class":59},[34,40995,2165],{"class":112},[34,40997,30939],{"class":187},[34,40999,623],{"class":59},[34,41001,41002,41004],{"class":36,"line":33114},[34,41003,31762],{"class":63},[34,41005,30948],{"class":59},[34,41007,41008,41010,41012],{"class":36,"line":33120},[34,41009,31752],{"class":59},[34,41011,447],{"class":112},[34,41013,39622],{"class":59},[34,41015,41016,41018,41020,41022,41024,41026,41028,41030],{"class":36,"line":33131},[34,41017,31762],{"class":63},[34,41019,31765],{"class":59},[34,41021,64],{"class":63},[34,41023,67],{"class":59},[34,41025,31964],{"class":63},[34,41027,67],{"class":59},[34,41029,31964],{"class":63},[34,41031,31778],{"class":59},[567,41033,41034],{"start":50},[570,41035,41036],{},"测试代码",[25,41038,41040],{"className":27,"code":41039,"language":29,"meta":22,"style":22},"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",[31,41041,41042,41048,41058,41068,41072,41082,41093,41097,41101,41105,41113,41129,41139,41155,41165,41179,41183,41193,41203,41213,41219,41223,41227,41235,41239,41255,41263,41267,41271,41279,41287,41291,41295,41299,41303,41309,41313,41323,41331,41339,41343,41347,41351,41359,41363,41379,41383,41387,41391,41403,41407,41419,41423,41427,41439,41443,41453,41457,41461,41473,41477,41486,41490,41494,41502,41506,41514,41518,41522,41526,41530,41534,41550,41558,41562,41566,41614,41620,41624,41634,41642,41650,41654,41658,41662,41666,41674,41678,41694,41698,41706,41714],{"__ignoreMap":22},[34,41043,41044,41046],{"class":36,"line":37},[34,41045,30855],{"class":112},[34,41047,30858],{"class":59},[34,41049,41050,41052,41054,41056],{"class":36,"line":44},[34,41051,30855],{"class":112},[34,41053,31878],{"class":59},[34,41055,31846],{"class":112},[34,41057,31883],{"class":59},[34,41059,41060,41062,41064,41066],{"class":36,"line":50},[34,41061,31200],{"class":112},[34,41063,31861],{"class":59},[34,41065,30855],{"class":112},[34,41067,31866],{"class":59},[34,41069,41070],{"class":36,"line":56},[34,41071,34384],{"class":40},[34,41073,41074,41076,41078,41080],{"class":36,"line":107},[34,41075,31200],{"class":112},[34,41077,31831],{"class":59},[34,41079,30855],{"class":112},[34,41081,31836],{"class":59},[34,41083,41084,41086,41088,41090],{"class":36,"line":196},[34,41085,31200],{"class":112},[34,41087,32377],{"class":59},[34,41089,30855],{"class":112},[34,41091,41092],{"class":63}," VGG16\n",[34,41094,41095],{"class":36,"line":202},[34,41096,2864],{"emptyLinePlaceholder":540},[34,41098,41099],{"class":36,"line":207},[34,41100,2864],{"emptyLinePlaceholder":540},[34,41102,41103],{"class":36,"line":222},[34,41104,34413],{"class":40},[34,41106,41107,41109,41111],{"class":36,"line":227},[34,41108,32410],{"class":112},[34,41110,34420],{"class":2427},[34,41112,32416],{"class":59},[34,41114,41115,41117,41119,41121,41123,41125,41127],{"class":36,"line":232},[34,41116,34427],{"class":59},[34,41118,447],{"class":112},[34,41120,31918],{"class":59},[34,41122,31921],{"class":5680},[34,41124,447],{"class":112},[34,41126,31926],{"class":187},[34,41128,31929],{"class":59},[34,41130,41131,41133,41135,41137],{"class":36,"line":238},[34,41132,34444],{"class":5680},[34,41134,447],{"class":112},[34,41136,34449],{"class":63},[34,41138,31929],{"class":59},[34,41140,41141,41143,41145,41147,41149,41151,41153],{"class":36,"line":244},[34,41142,34456],{"class":5680},[34,41144,447],{"class":112},[34,41146,31956],{"class":59},[34,41148,31959],{"class":5680},[34,41150,447],{"class":112},[34,41152,31964],{"class":63},[34,41154,31967],{"class":59},[34,41156,41157,41159,41161,41163],{"class":36,"line":250},[34,41158,34473],{"class":5680},[34,41160,447],{"class":112},[34,41162,31939],{"class":63},[34,41164,623],{"class":59},[34,41166,41167,41169,41171,41173,41175,41177],{"class":36,"line":256},[34,41168,34484],{"class":59},[34,41170,447],{"class":112},[34,41172,31997],{"class":59},[34,41174,32000],{"class":5680},[34,41176,447],{"class":112},[34,41178,34495],{"class":59},[34,41180,41181],{"class":36,"line":261},[34,41182,34500],{"class":40},[34,41184,41185,41187,41189,41191],{"class":36,"line":267},[34,41186,34505],{"class":5680},[34,41188,447],{"class":112},[34,41190,64],{"class":63},[34,41192,31929],{"class":59},[34,41194,41195,41197,41199,41201],{"class":36,"line":2138},[34,41196,34516],{"class":5680},[34,41198,447],{"class":112},[34,41200,31939],{"class":63},[34,41202,31929],{"class":59},[34,41204,41205,41207,41209,41211],{"class":36,"line":2143},[34,41206,34527],{"class":5680},[34,41208,447],{"class":112},[34,41210,319],{"class":63},[34,41212,623],{"class":59},[34,41214,41215,41217],{"class":36,"line":2157},[34,41216,4554],{"class":112},[34,41218,34540],{"class":59},[34,41220,41221],{"class":36,"line":2162},[34,41222,2864],{"emptyLinePlaceholder":540},[34,41224,41225],{"class":36,"line":2191},[34,41226,34549],{"class":40},[34,41228,41229,41231,41233],{"class":36,"line":2196},[34,41230,32410],{"class":112},[34,41232,34556],{"class":2427},[34,41234,34559],{"class":59},[34,41236,41237],{"class":36,"line":2213},[34,41238,34564],{"class":40},[34,41240,41241,41243,41245,41247,41249,41251,41253],{"class":36,"line":2218},[34,41242,31700],{"class":59},[34,41244,447],{"class":112},[34,41246,31707],{"class":187},[34,41248,2168],{"class":112},[34,41250,31712],{"class":59},[34,41252,2165],{"class":112},[34,41254,34581],{"class":187},[34,41256,41257,41259,41261],{"class":36,"line":2223},[34,41258,31752],{"class":59},[34,41260,447],{"class":112},[34,41262,32752],{"class":59},[34,41264,41265],{"class":36,"line":2228},[34,41266,2864],{"emptyLinePlaceholder":540},[34,41268,41269],{"class":36,"line":2242},[34,41270,34598],{"class":40},[34,41272,41273,41275,41277],{"class":36,"line":2247},[34,41274,34603],{"class":59},[34,41276,447],{"class":112},[34,41278,32805],{"class":63},[34,41280,41281,41283,41285],{"class":36,"line":3041},[34,41282,34612],{"class":59},[34,41284,447],{"class":112},[34,41286,3549],{"class":63},[34,41288,41289],{"class":36,"line":3055},[34,41290,2864],{"emptyLinePlaceholder":540},[34,41292,41293],{"class":36,"line":3063},[34,41294,34625],{"class":40},[34,41296,41297],{"class":36,"line":3068},[34,41298,34630],{"class":40},[34,41300,41301],{"class":36,"line":3074},[34,41302,34635],{"class":40},[34,41304,41305,41307],{"class":36,"line":3080},[34,41306,34640],{"class":112},[34,41308,33347],{"class":59},[34,41310,41311],{"class":36,"line":3085},[34,41312,34647],{"class":40},[34,41314,41315,41317,41319,41321],{"class":36,"line":8412},[34,41316,3867],{"class":112},[34,41318,34654],{"class":59},[34,41320,26508],{"class":112},[34,41322,34659],{"class":59},[34,41324,41325,41327,41329],{"class":36,"line":8436},[34,41326,34664],{"class":59},[34,41328,447],{"class":112},[34,41330,34669],{"class":59},[34,41332,41333,41335,41337],{"class":36,"line":8441},[34,41334,34674],{"class":59},[34,41336,447],{"class":112},[34,41338,34679],{"class":59},[34,41340,41341],{"class":36,"line":8447},[34,41342,34684],{"class":40},[34,41344,41345],{"class":36,"line":8474},[34,41346,33338],{"class":59},[34,41348,41349],{"class":36,"line":8479},[34,41350,34693],{"class":40},[34,41352,41353,41355,41357],{"class":36,"line":8485},[34,41354,33123],{"class":59},[34,41356,447],{"class":112},[34,41358,34702],{"class":59},[34,41360,41361],{"class":36,"line":8497},[34,41362,34707],{"class":40},[34,41364,41365,41367,41369,41371,41373,41375,41377],{"class":36,"line":8509},[34,41366,33140],{"class":59},[34,41368,447],{"class":112},[34,41370,33145],{"class":59},[34,41372,33148],{"class":5680},[34,41374,447],{"class":112},[34,41376,64],{"class":63},[34,41378,623],{"class":59},[34,41380,41381],{"class":36,"line":8521},[34,41382,34728],{"class":40},[34,41384,41385],{"class":36,"line":10180},[34,41386,34733],{"class":40},[34,41388,41389],{"class":36,"line":10205},[34,41390,34738],{"class":40},[34,41392,41393,41395,41397,41399,41401],{"class":36,"line":10228},[34,41394,34743],{"class":59},[34,41396,9941],{"class":112},[34,41398,33250],{"class":59},[34,41400,3413],{"class":112},[34,41402,34752],{"class":59},[34,41404,41405],{"class":36,"line":10252},[34,41406,34757],{"class":40},[34,41408,41409,41411,41413,41415,41417],{"class":36,"line":10257},[34,41410,34762],{"class":59},[34,41412,9941],{"class":112},[34,41414,34767],{"class":59},[34,41416,319],{"class":63},[34,41418,623],{"class":59},[34,41420,41421],{"class":36,"line":10262},[34,41422,2864],{"emptyLinePlaceholder":540},[34,41424,41425],{"class":36,"line":10267},[34,41426,34780],{"class":40},[34,41428,41429,41431,41433,41435,41437],{"class":36,"line":10276},[34,41430,34785],{"class":59},[34,41432,447],{"class":112},[34,41434,34790],{"class":59},[34,41436,1190],{"class":112},[34,41438,34795],{"class":59},[34,41440,41441],{"class":36,"line":10281},[34,41442,34800],{"class":40},[34,41444,41445,41447,41449,41451],{"class":36,"line":10287},[34,41446,32914],{"class":63},[34,41448,617],{"class":59},[34,41450,34809],{"class":187},[34,41452,34812],{"class":59},[34,41454,41455],{"class":36,"line":10308},[34,41456,2864],{"emptyLinePlaceholder":540},[34,41458,41459],{"class":36,"line":10314},[34,41460,34821],{"class":40},[34,41462,41463,41465,41467,41469,41471],{"class":36,"line":10328},[34,41464,2002],{"class":112},[34,41466,31683],{"class":63},[34,41468,3413],{"class":112},[34,41470,31688],{"class":187},[34,41472,4203],{"class":59},[34,41474,41475],{"class":36,"line":10334},[34,41476,34838],{"class":40},[34,41478,41479,41481,41483],{"class":36,"line":10361},[34,41480,31752],{"class":59},[34,41482,447],{"class":112},[34,41484,41485],{"class":59},"VGG16()\n",[34,41487,41488],{"class":36,"line":10370},[34,41489,34851],{"class":40},[34,41491,41492],{"class":36,"line":10376},[34,41493,34856],{"class":40},[34,41495,41496,41498,41500],{"class":36,"line":10384},[34,41497,34861],{"class":59},[34,41499,34864],{"class":187},[34,41501,30960],{"class":59},[34,41503,41504],{"class":36,"line":10389},[34,41505,34871],{"class":40},[34,41507,41508,41510,41512],{"class":36,"line":17068},[34,41509,34484],{"class":59},[34,41511,447],{"class":112},[34,41513,34880],{"class":59},[34,41515,41516],{"class":36,"line":17074},[34,41517,34885],{"class":40},[34,41519,41520],{"class":36,"line":17097},[34,41521,34890],{"class":59},[34,41523,41524],{"class":36,"line":17103},[34,41525,2864],{"emptyLinePlaceholder":540},[34,41527,41528],{"class":36,"line":17126},[34,41529,34899],{"class":40},[34,41531,41532],{"class":36,"line":17140},[34,41533,34904],{"class":40},[34,41535,41536,41538,41540,41542,41544,41546,41548],{"class":36,"line":17160},[34,41537,31700],{"class":59},[34,41539,447],{"class":112},[34,41541,31707],{"class":187},[34,41543,2168],{"class":112},[34,41545,31712],{"class":59},[34,41547,2165],{"class":112},[34,41549,34581],{"class":187},[34,41551,41552,41554,41556],{"class":36,"line":17166},[34,41553,31752],{"class":59},[34,41555,447],{"class":112},[34,41557,32752],{"class":59},[34,41559,41560],{"class":36,"line":17177},[34,41561,34933],{"class":40},[34,41563,41564],{"class":36,"line":17200},[34,41565,34938],{"class":40},[34,41567,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604,41606,41608,41610,41612],{"class":36,"line":17222},[34,41569,34943],{"class":59},[34,41571,447],{"class":112},[34,41573,1495],{"class":59},[34,41575,34950],{"class":187},[34,41577,67],{"class":59},[34,41579,34955],{"class":187},[34,41581,67],{"class":59},[34,41583,34960],{"class":187},[34,41585,67],{"class":59},[34,41587,34965],{"class":187},[34,41589,67],{"class":59},[34,41591,34970],{"class":187},[34,41593,67],{"class":59},[34,41595,34975],{"class":187},[34,41597,67],{"class":59},[34,41599,34980],{"class":187},[34,41601,67],{"class":59},[34,41603,34985],{"class":187},[34,41605,67],{"class":59},[34,41607,34990],{"class":187},[34,41609,67],{"class":59},[34,41611,34995],{"class":187},[34,41613,73],{"class":59},[34,41615,41616,41618],{"class":36,"line":17227},[34,41617,34640],{"class":112},[34,41619,33347],{"class":59},[34,41621,41622],{"class":36,"line":17233},[34,41623,35008],{"class":40},[34,41625,41626,41628,41630,41632],{"class":36,"line":17247},[34,41627,3867],{"class":112},[34,41629,35015],{"class":59},[34,41631,26508],{"class":112},[34,41633,34659],{"class":59},[34,41635,41636,41638,41640],{"class":36,"line":17260},[34,41637,33073],{"class":59},[34,41639,447],{"class":112},[34,41641,33078],{"class":59},[34,41643,41644,41646,41648],{"class":36,"line":17265},[34,41645,33088],{"class":59},[34,41647,447],{"class":112},[34,41649,33093],{"class":59},[34,41651,41652],{"class":36,"line":17279},[34,41653,2864],{"emptyLinePlaceholder":540},[34,41655,41656],{"class":36,"line":17284},[34,41657,35044],{"class":40},[34,41659,41660],{"class":36,"line":17290},[34,41661,33338],{"class":59},[34,41663,41664],{"class":36,"line":17295},[34,41665,35053],{"class":40},[34,41667,41668,41670,41672],{"class":36,"line":17309},[34,41669,33123],{"class":59},[34,41671,447],{"class":112},[34,41673,33128],{"class":59},[34,41675,41676],{"class":36,"line":17314},[34,41677,35066],{"class":40},[34,41679,41680,41682,41684,41686,41688,41690,41692],{"class":36,"line":17319},[34,41681,33140],{"class":59},[34,41683,447],{"class":112},[34,41685,33145],{"class":59},[34,41687,33148],{"class":5680},[34,41689,447],{"class":112},[34,41691,64],{"class":63},[34,41693,623],{"class":59},[34,41695,41696],{"class":36,"line":17333},[34,41697,35087],{"class":40},[34,41699,41700,41702,41704],{"class":36,"line":17345},[34,41701,35092],{"class":59},[34,41703,447],{"class":112},[34,41705,35097],{"class":59},[34,41707,41708,41710,41712],{"class":36,"line":17350},[34,41709,35102],{"class":59},[34,41711,447],{"class":112},[34,41713,35107],{"class":59},[34,41715,41716,41718,41720,41722,41724,41726,41728,41730],{"class":36,"line":17363},[34,41717,35112],{"class":63},[34,41719,617],{"class":59},[34,41721,35117],{"class":187},[34,41723,35120],{"class":59},[34,41725,35123],{"class":187},[34,41727,67],{"class":59},[34,41729,35128],{"class":187},[34,41731,35131],{"class":59},[584,41733,41735],{"id":41734},"_23googlenet","2.3.GoogLeNet",[22462,41737,41739],{"id":41738},"_231原理","2.3.1.原理",[567,41741,41742],{},[570,41743,41744],{},"网络结构",[14,41746,41747],{},[20,41748],{"alt":22,"src":41749},"\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",[14,41751,41752],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41754,41755],{},[20,41756],{"alt":22,"src":41757},"\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",[14,41759,41760],{},[20,41761],{"alt":22,"src":41762},"\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",[14,41764,41765],{},[20,41766],{"alt":22,"src":41767},"\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",[567,41769,41770],{"start":44},[570,41771,41772],{},"1x1卷积的优点",[14,41774,41775],{},[20,41776],{"alt":22,"src":41777},"\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",[567,41779,41780],{"start":50},[570,41781,41782],{},"全局平均池化层优点",[14,41784,41785],{},[20,41786],{"alt":22,"src":41787},"\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",[14,41789,41790],{},[20,41791],{"alt":22,"src":41792},"\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",[567,41794,41795],{"start":56},[570,41796,41797],{},"参数详细描述",[14,41799,41800],{},[20,41801],{"alt":22,"src":41802},"\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",[14,41804,41805],{},[20,41806],{"alt":22,"src":41807},"\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",[14,41809,41810],{},[20,41811],{"alt":22,"src":41812},"\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",[14,41814,41815],{},[20,41816],{"alt":22,"src":41817},"\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",[14,41819,41820],{},[20,41821],{"alt":22,"src":41822},"\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",[14,41824,41825],{},[20,41826],{"alt":22,"src":41827},"\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",[14,41829,41830],{},[20,41831],{"alt":22,"src":41832},"\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",[14,41834,41835],{},[20,41836],{"alt":22,"src":41837},"\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",[14,41839,41840],{},[20,41841],{"alt":22,"src":41842},"\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",[14,41844,41845],{},[20,41846],{"alt":22,"src":41847},"\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",[14,41849,41850],{},[20,41851],{"alt":22,"src":41852},"\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",[14,41854,41855],{},[20,41856],{"alt":22,"src":41857},"\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",[14,41859,41860],{},[20,41861],{"alt":22,"src":41862},"\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",[14,41864,41865],{},[20,41866],{"alt":22,"src":41867},"\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",[14,41869,41870],{},[20,41871],{"alt":22,"src":41872},"\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",[14,41874,41875],{},[20,41876],{"alt":22,"src":41877},"\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",[14,41879,41880],{},[20,41881],{"alt":22,"src":41882},"\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",[14,41884,41885],{},[20,41886],{"alt":22,"src":41887},"\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",[14,41889,41890],{},[20,41891],{"alt":22,"src":41892},"\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",[14,41894,41895],{},[20,41896],{"alt":22,"src":41897},"\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",[14,41899,41900],{},[20,41901],{"alt":22,"src":41902},"\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",[22462,41904,41906],{"id":41905},"_232代码实现","2.3.2.代码实现",[567,41908,41909],{},[570,41910,31174],{},[14,41912,41913],{},"根据原理一步一步搭建即可",[25,41915,41917],{"className":27,"code":41916,"language":29,"meta":22,"style":22},"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",[31,41918,41919,41925,41935,41945,41949,41966,41975,41990,42000,42005,42038,42043,42080,42127,42132,42168,42215,42220,42225,42260,42292,42296,42304,42320,42344,42369,42390,42395,42410,42414,42418,42423,42440,42445,42454,42469,42480,42524,42528,42556,42560,42571,42599,42603,42640,42644,42672,42676,42687,42722,42754,42782,42786,42797,42831,42863,42895,42928,42962,42990,42994,43005,43038,43070,43084,43088,43101,43105,43110,43122,43130,43152,43157,43162,43167,43172,43177,43182,43196,43204,43213,43226,43241,43250,43254,43262,43273,43284,43295,43306,43317,43323,43327,43332,43344,43364,43373],{"__ignoreMap":22},[34,41920,41921,41923],{"class":36,"line":37},[34,41922,30855],{"class":112},[34,41924,30858],{"class":59},[34,41926,41927,41929,41931,41933],{"class":36,"line":44},[34,41928,31200],{"class":112},[34,41930,31203],{"class":59},[34,41932,30855],{"class":112},[34,41934,31208],{"class":59},[34,41936,41937,41939,41941,41943],{"class":36,"line":50},[34,41938,31200],{"class":112},[34,41940,31220],{"class":59},[34,41942,30855],{"class":112},[34,41944,31225],{"class":59},[34,41946,41947],{"class":36,"line":56},[34,41948,2864],{"emptyLinePlaceholder":540},[34,41950,41951,41953,41956,41958,41960,41962,41964],{"class":36,"line":107},[34,41952,15158],{"class":112},[34,41954,41955],{"class":2427}," Inception",[34,41957,617],{"class":59},[34,41959,31241],{"class":2427},[34,41961,1164],{"class":59},[34,41963,31246],{"class":2427},[34,41965,31249],{"class":59},[34,41967,41968,41970,41972],{"class":36,"line":196},[34,41969,31264],{"class":112},[34,41971,31267],{"class":63},[34,41973,41974],{"class":59},"(self,in_channels,c1,c2,c3,c4):\n",[34,41976,41977,41979,41982,41984,41986,41988],{"class":36,"line":202},[34,41978,31280],{"class":63},[34,41980,41981],{"class":59},"(Inception,",[34,41983,31286],{"class":63},[34,41985,31289],{"class":59},[34,41987,31292],{"class":63},[34,41989,2440],{"class":59},[34,41991,41992,41994,41996,41998],{"class":36,"line":207},[34,41993,31308],{"class":63},[34,41995,35233],{"class":59},[34,41997,447],{"class":112},[34,41999,35238],{"class":59},[34,42001,42002],{"class":36,"line":222},[34,42003,42004],{"class":40},"        # 路线1：定义1*1卷积\n",[34,42006,42007,42009,42012,42014,42016,42018,42020,42023,42025,42027,42030,42032,42034,42036],{"class":36,"line":227},[34,42008,31308],{"class":63},[34,42010,42011],{"class":59},".p1_1",[34,42013,447],{"class":112},[34,42015,31316],{"class":59},[34,42017,31319],{"class":5680},[34,42019,447],{"class":112},[34,42021,42022],{"class":59},"in_channels,",[34,42024,31328],{"class":5680},[34,42026,447],{"class":112},[34,42028,42029],{"class":59},"c1,",[34,42031,31337],{"class":5680},[34,42033,447],{"class":112},[34,42035,64],{"class":63},[34,42037,623],{"class":59},[34,42039,42040],{"class":36,"line":232},[34,42041,42042],{"class":40},"        # 路线2：定义1*1卷积和3*3\n",[34,42044,42045,42047,42050,42052,42054,42056,42058,42060,42062,42064,42067,42069,42072,42074,42076,42078],{"class":36,"line":238},[34,42046,31308],{"class":63},[34,42048,42049],{"class":59},".p2_1",[34,42051,447],{"class":112},[34,42053,31316],{"class":59},[34,42055,31319],{"class":5680},[34,42057,447],{"class":112},[34,42059,42022],{"class":59},[34,42061,31328],{"class":5680},[34,42063,447],{"class":112},[34,42065,42066],{"class":59},"c2[",[34,42068,319],{"class":63},[34,42070,42071],{"class":59},"],",[34,42073,31337],{"class":5680},[34,42075,447],{"class":112},[34,42077,64],{"class":63},[34,42079,623],{"class":59},[34,42081,42082,42084,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125],{"class":36,"line":244},[34,42083,31308],{"class":63},[34,42085,42086],{"class":59},".p2_2",[34,42088,447],{"class":112},[34,42090,31316],{"class":59},[34,42092,31319],{"class":5680},[34,42094,447],{"class":112},[34,42096,42066],{"class":59},[34,42098,319],{"class":63},[34,42100,42071],{"class":59},[34,42102,31328],{"class":5680},[34,42104,447],{"class":112},[34,42106,42066],{"class":59},[34,42108,64],{"class":63},[34,42110,42071],{"class":59},[34,42112,31337],{"class":5680},[34,42114,447],{"class":112},[34,42116,309],{"class":63},[34,42118,67],{"class":59},[34,42120,31346],{"class":5680},[34,42122,447],{"class":112},[34,42124,64],{"class":63},[34,42126,623],{"class":59},[34,42128,42129],{"class":36,"line":250},[34,42130,42131],{"class":40},"        # 路线3：定义1*1卷积和5*5\n",[34,42133,42134,42136,42139,42141,42143,42145,42147,42149,42151,42153,42156,42158,42160,42162,42164,42166],{"class":36,"line":256},[34,42135,31308],{"class":63},[34,42137,42138],{"class":59},".p3_1",[34,42140,447],{"class":112},[34,42142,31316],{"class":59},[34,42144,31319],{"class":5680},[34,42146,447],{"class":112},[34,42148,42022],{"class":59},[34,42150,31328],{"class":5680},[34,42152,447],{"class":112},[34,42154,42155],{"class":59},"c3[",[34,42157,319],{"class":63},[34,42159,42071],{"class":59},[34,42161,31337],{"class":5680},[34,42163,447],{"class":112},[34,42165,64],{"class":63},[34,42167,623],{"class":59},[34,42169,42170,42172,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205,42207,42209,42211,42213],{"class":36,"line":261},[34,42171,31308],{"class":63},[34,42173,42174],{"class":59},".p3_2",[34,42176,447],{"class":112},[34,42178,31316],{"class":59},[34,42180,31319],{"class":5680},[34,42182,447],{"class":112},[34,42184,42155],{"class":59},[34,42186,319],{"class":63},[34,42188,42071],{"class":59},[34,42190,31328],{"class":5680},[34,42192,447],{"class":112},[34,42194,42155],{"class":59},[34,42196,64],{"class":63},[34,42198,42071],{"class":59},[34,42200,31337],{"class":5680},[34,42202,447],{"class":112},[34,42204,927],{"class":63},[34,42206,67],{"class":59},[34,42208,31346],{"class":5680},[34,42210,447],{"class":112},[34,42212,70],{"class":63},[34,42214,623],{"class":59},[34,42216,42217],{"class":36,"line":267},[34,42218,42219],{"class":40},"        # 路线4：定义3*3最大池化和1*1卷积\n",[34,42221,42222],{"class":36,"line":2138},[34,42223,42224],{"class":40},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[34,42226,42227,42229,42232,42234,42236,42238,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258],{"class":36,"line":2143},[34,42228,31308],{"class":63},[34,42230,42231],{"class":59},".p4_1",[34,42233,447],{"class":112},[34,42235,35291],{"class":59},[34,42237,31337],{"class":5680},[34,42239,447],{"class":112},[34,42241,309],{"class":63},[34,42243,67],{"class":59},[34,42245,31392],{"class":5680},[34,42247,447],{"class":112},[34,42249,64],{"class":63},[34,42251,67],{"class":59},[34,42253,31346],{"class":5680},[34,42255,447],{"class":112},[34,42257,64],{"class":63},[34,42259,623],{"class":59},[34,42261,42262,42264,42267,42269,42271,42273,42275,42277,42279,42281,42284,42286,42288,42290],{"class":36,"line":2157},[34,42263,31308],{"class":63},[34,42265,42266],{"class":59},".p4_2",[34,42268,447],{"class":112},[34,42270,31316],{"class":59},[34,42272,31319],{"class":5680},[34,42274,447],{"class":112},[34,42276,42022],{"class":59},[34,42278,31328],{"class":5680},[34,42280,447],{"class":112},[34,42282,42283],{"class":59},"c4,",[34,42285,31337],{"class":5680},[34,42287,447],{"class":112},[34,42289,64],{"class":63},[34,42291,623],{"class":59},[34,42293,42294],{"class":36,"line":2162},[34,42295,2864],{"emptyLinePlaceholder":540},[34,42297,42298,42300,42302],{"class":36,"line":2191},[34,42299,31264],{"class":112},[34,42301,31556],{"class":2427},[34,42303,31559],{"class":59},[34,42305,42306,42309,42311,42313,42315,42317],{"class":36,"line":2196},[34,42307,42308],{"class":59},"        p1",[34,42310,447],{"class":112},[34,42312,31286],{"class":63},[34,42314,35646],{"class":59},[34,42316,31286],{"class":63},[34,42318,42319],{"class":59},".p1_1(x))\n",[34,42321,42322,42324,42326,42328,42330,42332,42335,42337,42339,42341],{"class":36,"line":2213},[34,42323,7549],{"class":59},[34,42325,447],{"class":112},[34,42327,31286],{"class":63},[34,42329,35646],{"class":59},[34,42331,31286],{"class":63},[34,42333,42334],{"class":59},".p2_2(",[34,42336,31286],{"class":63},[34,42338,35646],{"class":59},[34,42340,31286],{"class":63},[34,42342,42343],{"class":59},".p2_1(x))))\n",[34,42345,42346,42349,42351,42353,42355,42357,42360,42362,42364,42366],{"class":36,"line":2218},[34,42347,42348],{"class":59},"        p3",[34,42350,447],{"class":112},[34,42352,31286],{"class":63},[34,42354,35646],{"class":59},[34,42356,31286],{"class":63},[34,42358,42359],{"class":59},".p3_2(",[34,42361,31286],{"class":63},[34,42363,35646],{"class":59},[34,42365,31286],{"class":63},[34,42367,42368],{"class":59},".p3_1(x))))\n",[34,42370,42371,42374,42376,42378,42380,42382,42385,42387],{"class":36,"line":2223},[34,42372,42373],{"class":59},"        p4",[34,42375,447],{"class":112},[34,42377,31286],{"class":63},[34,42379,35646],{"class":59},[34,42381,31286],{"class":63},[34,42383,42384],{"class":59},".p4_2(",[34,42386,31286],{"class":63},[34,42388,42389],{"class":59},".p4_1(x)))\n",[34,42391,42392],{"class":36,"line":2228},[34,42393,42394],{"class":40},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[34,42396,42397,42399,42402,42404,42406,42408],{"class":36,"line":2242},[34,42398,15216],{"class":112},[34,42400,42401],{"class":59}," torch.cat((p1,p2,p3,p4),",[34,42403,33148],{"class":5680},[34,42405,447],{"class":112},[34,42407,64],{"class":63},[34,42409,623],{"class":59},[34,42411,42412],{"class":36,"line":2247},[34,42413,2864],{"emptyLinePlaceholder":540},[34,42415,42416],{"class":36,"line":3041},[34,42417,2864],{"emptyLinePlaceholder":540},[34,42419,42420],{"class":36,"line":3055},[34,42421,42422],{"class":40},"# 搭建GoogLeNet网络\n",[34,42424,42425,42427,42430,42432,42434,42436,42438],{"class":36,"line":3063},[34,42426,15158],{"class":112},[34,42428,42429],{"class":2427}," GoogLeNet",[34,42431,617],{"class":59},[34,42433,31241],{"class":2427},[34,42435,1164],{"class":59},[34,42437,31246],{"class":2427},[34,42439,31249],{"class":59},[34,42441,42442],{"class":36,"line":3068},[34,42443,42444],{"class":40},"    # 必须把Inception导入到里边\n",[34,42446,42447,42449,42451],{"class":36,"line":3074},[34,42448,31264],{"class":112},[34,42450,31267],{"class":63},[34,42452,42453],{"class":59},"(self,Inception):\n",[34,42455,42456,42458,42461,42463,42465,42467],{"class":36,"line":3080},[34,42457,31280],{"class":63},[34,42459,42460],{"class":59},"(GoogLeNet,",[34,42462,31286],{"class":63},[34,42464,31289],{"class":59},[34,42466,31292],{"class":63},[34,42468,2440],{"class":59},[34,42470,42471,42473,42476,42478],{"class":36,"line":3085},[34,42472,31308],{"class":63},[34,42474,42475],{"class":59},".b1",[34,42477,447],{"class":112},[34,42479,38471],{"class":59},[34,42481,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518,42520,42522],{"class":36,"line":8412},[34,42483,38476],{"class":59},[34,42485,31319],{"class":5680},[34,42487,447],{"class":112},[34,42489,64],{"class":63},[34,42491,67],{"class":59},[34,42493,31328],{"class":5680},[34,42495,447],{"class":112},[34,42497,813],{"class":63},[34,42499,67],{"class":59},[34,42501,31337],{"class":5680},[34,42503,447],{"class":112},[34,42505,977],{"class":63},[34,42507,67],{"class":59},[34,42509,31392],{"class":5680},[34,42511,447],{"class":112},[34,42513,70],{"class":63},[34,42515,67],{"class":59},[34,42517,31346],{"class":5680},[34,42519,447],{"class":112},[34,42521,309],{"class":63},[34,42523,38509],{"class":59},[34,42525,42526],{"class":36,"line":8436},[34,42527,38514],{"class":59},[34,42529,42530,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554],{"class":36,"line":8441},[34,42531,38559],{"class":59},[34,42533,31337],{"class":5680},[34,42535,447],{"class":112},[34,42537,309],{"class":63},[34,42539,67],{"class":59},[34,42541,31392],{"class":5680},[34,42543,447],{"class":112},[34,42545,70],{"class":63},[34,42547,67],{"class":59},[34,42549,31346],{"class":5680},[34,42551,447],{"class":112},[34,42553,64],{"class":63},[34,42555,623],{"class":59},[34,42557,42558],{"class":36,"line":8447},[34,42559,38588],{"class":59},[34,42561,42562,42564,42567,42569],{"class":36,"line":8474},[34,42563,31308],{"class":63},[34,42565,42566],{"class":59},".b2",[34,42568,447],{"class":112},[34,42570,38471],{"class":59},[34,42572,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597],{"class":36,"line":8479},[34,42574,38476],{"class":59},[34,42576,31319],{"class":5680},[34,42578,447],{"class":112},[34,42580,813],{"class":63},[34,42582,67],{"class":59},[34,42584,31328],{"class":5680},[34,42586,447],{"class":112},[34,42588,813],{"class":63},[34,42590,67],{"class":59},[34,42592,31337],{"class":5680},[34,42594,447],{"class":112},[34,42596,64],{"class":63},[34,42598,38509],{"class":59},[34,42600,42601],{"class":36,"line":8485},[34,42602,38514],{"class":59},[34,42604,42605,42607,42609,42611,42613,42615,42617,42619,42622,42624,42626,42628,42630,42632,42634,42636,42638],{"class":36,"line":8497},[34,42606,38476],{"class":59},[34,42608,31319],{"class":5680},[34,42610,447],{"class":112},[34,42612,813],{"class":63},[34,42614,67],{"class":59},[34,42616,31328],{"class":5680},[34,42618,447],{"class":112},[34,42620,42621],{"class":63},"192",[34,42623,67],{"class":59},[34,42625,31337],{"class":5680},[34,42627,447],{"class":112},[34,42629,309],{"class":63},[34,42631,67],{"class":59},[34,42633,31346],{"class":5680},[34,42635,447],{"class":112},[34,42637,64],{"class":63},[34,42639,38509],{"class":59},[34,42641,42642],{"class":36,"line":8509},[34,42643,38514],{"class":59},[34,42645,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670],{"class":36,"line":8521},[34,42647,38559],{"class":59},[34,42649,31337],{"class":5680},[34,42651,447],{"class":112},[34,42653,309],{"class":63},[34,42655,67],{"class":59},[34,42657,31392],{"class":5680},[34,42659,447],{"class":112},[34,42661,70],{"class":63},[34,42663,67],{"class":59},[34,42665,31346],{"class":5680},[34,42667,447],{"class":112},[34,42669,64],{"class":63},[34,42671,623],{"class":59},[34,42673,42674],{"class":36,"line":10180},[34,42675,38588],{"class":59},[34,42677,42678,42680,42683,42685],{"class":36,"line":10205},[34,42679,31308],{"class":63},[34,42681,42682],{"class":59},".b3",[34,42684,447],{"class":112},[34,42686,38471],{"class":59},[34,42688,42689,42692,42694,42696,42698,42701,42703,42705,42707,42709,42711,42713,42715,42718,42720],{"class":36,"line":10228},[34,42690,42691],{"class":59},"            Inception(",[34,42693,42621],{"class":63},[34,42695,67],{"class":59},[34,42697,813],{"class":63},[34,42699,42700],{"class":59},",(",[34,42702,819],{"class":63},[34,42704,67],{"class":59},[34,42706,32533],{"class":63},[34,42708,312],{"class":59},[34,42710,1207],{"class":63},[34,42712,67],{"class":59},[34,42714,807],{"class":63},[34,42716,42717],{"class":59},"),",[34,42719,807],{"class":63},[34,42721,38509],{"class":59},[34,42723,42724,42726,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752],{"class":36,"line":10252},[34,42725,42691],{"class":59},[34,42727,35332],{"class":63},[34,42729,67],{"class":59},[34,42731,32533],{"class":63},[34,42733,42700],{"class":59},[34,42735,32533],{"class":63},[34,42737,67],{"class":59},[34,42739,42621],{"class":63},[34,42741,312],{"class":59},[34,42743,807],{"class":63},[34,42745,67],{"class":59},[34,42747,819],{"class":63},[34,42749,42717],{"class":59},[34,42751,813],{"class":63},[34,42753,38509],{"class":59},[34,42755,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780],{"class":36,"line":10257},[34,42757,38559],{"class":59},[34,42759,31337],{"class":5680},[34,42761,447],{"class":112},[34,42763,309],{"class":63},[34,42765,67],{"class":59},[34,42767,31392],{"class":5680},[34,42769,447],{"class":112},[34,42771,70],{"class":63},[34,42773,67],{"class":59},[34,42775,31346],{"class":5680},[34,42777,447],{"class":112},[34,42779,64],{"class":63},[34,42781,623],{"class":59},[34,42783,42784],{"class":36,"line":10262},[34,42785,38588],{"class":59},[34,42787,42788,42790,42793,42795],{"class":36,"line":10267},[34,42789,31308],{"class":63},[34,42791,42792],{"class":59},".b4",[34,42794,447],{"class":112},[34,42796,38471],{"class":59},[34,42798,42799,42801,42804,42806,42808,42810,42812,42814,42817,42819,42821,42823,42825,42827,42829],{"class":36,"line":10276},[34,42800,42691],{"class":59},[34,42802,42803],{"class":63},"480",[34,42805,67],{"class":59},[34,42807,42621],{"class":63},[34,42809,42700],{"class":59},[34,42811,819],{"class":63},[34,42813,67],{"class":59},[34,42815,42816],{"class":63},"208",[34,42818,312],{"class":59},[34,42820,1207],{"class":63},[34,42822,67],{"class":59},[34,42824,1213],{"class":63},[34,42826,42717],{"class":59},[34,42828,813],{"class":63},[34,42830,38509],{"class":59},[34,42832,42833,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859,42861],{"class":36,"line":10281},[34,42834,42691],{"class":59},[34,42836,38919],{"class":63},[34,42838,67],{"class":59},[34,42840,21512],{"class":63},[34,42842,42700],{"class":59},[34,42844,1224],{"class":63},[34,42846,67],{"class":59},[34,42848,31964],{"class":63},[34,42850,312],{"class":59},[34,42852,1406],{"class":63},[34,42854,67],{"class":59},[34,42856,813],{"class":63},[34,42858,42717],{"class":59},[34,42860,813],{"class":63},[34,42862,38509],{"class":59},[34,42864,42865,42867,42869,42871,42873,42875,42877,42879,42881,42883,42885,42887,42889,42891,42893],{"class":36,"line":10287},[34,42866,42691],{"class":59},[34,42868,38919],{"class":63},[34,42870,67],{"class":59},[34,42872,32533],{"class":63},[34,42874,42700],{"class":59},[34,42876,32533],{"class":63},[34,42878,67],{"class":59},[34,42880,35332],{"class":63},[34,42882,312],{"class":59},[34,42884,1406],{"class":63},[34,42886,67],{"class":59},[34,42888,813],{"class":63},[34,42890,42717],{"class":59},[34,42892,813],{"class":63},[34,42894,38509],{"class":59},[34,42896,42897,42899,42901,42903,42905,42907,42909,42911,42914,42916,42918,42920,42922,42924,42926],{"class":36,"line":10308},[34,42898,42691],{"class":59},[34,42900,38919],{"class":63},[34,42902,67],{"class":59},[34,42904,1224],{"class":63},[34,42906,42700],{"class":59},[34,42908,32533],{"class":63},[34,42910,67],{"class":59},[34,42912,42913],{"class":63},"288",[34,42915,312],{"class":59},[34,42917,807],{"class":63},[34,42919,67],{"class":59},[34,42921,813],{"class":63},[34,42923,42717],{"class":59},[34,42925,813],{"class":63},[34,42927,38509],{"class":59},[34,42929,42930,42932,42935,42937,42939,42941,42943,42945,42948,42950,42952,42954,42956,42958,42960],{"class":36,"line":10314},[34,42931,42691],{"class":59},[34,42933,42934],{"class":63},"528",[34,42936,67],{"class":59},[34,42938,35332],{"class":63},[34,42940,42700],{"class":59},[34,42942,21512],{"class":63},[34,42944,67],{"class":59},[34,42946,42947],{"class":63},"320",[34,42949,312],{"class":59},[34,42951,807],{"class":63},[34,42953,67],{"class":59},[34,42955,32533],{"class":63},[34,42957,42717],{"class":59},[34,42959,32533],{"class":63},[34,42961,38509],{"class":59},[34,42963,42964,42966,42968,42970,42972,42974,42976,42978,42980,42982,42984,42986,42988],{"class":36,"line":10328},[34,42965,38559],{"class":59},[34,42967,31337],{"class":5680},[34,42969,447],{"class":112},[34,42971,309],{"class":63},[34,42973,67],{"class":59},[34,42975,31392],{"class":5680},[34,42977,447],{"class":112},[34,42979,70],{"class":63},[34,42981,67],{"class":59},[34,42983,31346],{"class":5680},[34,42985,447],{"class":112},[34,42987,64],{"class":63},[34,42989,623],{"class":59},[34,42991,42992],{"class":36,"line":10334},[34,42993,38588],{"class":59},[34,42995,42996,42998,43001,43003],{"class":36,"line":10361},[34,42997,31308],{"class":63},[34,42999,43000],{"class":59},".b5",[34,43002,447],{"class":112},[34,43004,38471],{"class":59},[34,43006,43007,43009,43012,43014,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036],{"class":36,"line":10370},[34,43008,42691],{"class":59},[34,43010,43011],{"class":63},"832",[34,43013,67],{"class":59},[34,43015,35332],{"class":63},[34,43017,42700],{"class":59},[34,43019,21512],{"class":63},[34,43021,67],{"class":59},[34,43023,42947],{"class":63},[34,43025,312],{"class":59},[34,43027,807],{"class":63},[34,43029,67],{"class":59},[34,43031,32533],{"class":63},[34,43033,42717],{"class":59},[34,43035,32533],{"class":63},[34,43037,38509],{"class":59},[34,43039,43040,43042,43044,43046,43048,43050,43052,43054,43056,43058,43060,43062,43064,43066,43068],{"class":36,"line":10376},[34,43041,42691],{"class":59},[34,43043,43011],{"class":63},[34,43045,67],{"class":59},[34,43047,35402],{"class":63},[34,43049,42700],{"class":59},[34,43051,42621],{"class":63},[34,43053,67],{"class":59},[34,43055,35402],{"class":63},[34,43057,312],{"class":59},[34,43059,1213],{"class":63},[34,43061,67],{"class":59},[34,43063,32533],{"class":63},[34,43065,42717],{"class":59},[34,43067,32533],{"class":63},[34,43069,38509],{"class":59},[34,43071,43072,43075,43077,43079,43081],{"class":36,"line":10384},[34,43073,43074],{"class":59},"            nn.AdaptiveAvgPool2d((",[34,43076,64],{"class":63},[34,43078,67],{"class":59},[34,43080,64],{"class":63},[34,43082,43083],{"class":59},")),\n",[34,43085,43086],{"class":36,"line":10389},[34,43087,39252],{"class":59},[34,43089,43090,43092,43095,43097,43099],{"class":36,"line":17068},[34,43091,39257],{"class":59},[34,43093,43094],{"class":63},"1024",[34,43096,67],{"class":59},[34,43098,1053],{"class":63},[34,43100,623],{"class":59},[34,43102,43103],{"class":36,"line":17074},[34,43104,38588],{"class":59},[34,43106,43107],{"class":36,"line":17097},[34,43108,43109],{"class":40},"        # 对模型参数初始化\n",[34,43111,43112,43114,43116,43118,43120],{"class":36,"line":17103},[34,43113,3867],{"class":112},[34,43115,39330],{"class":59},[34,43117,26508],{"class":112},[34,43119,39335],{"class":63},[34,43121,39338],{"class":59},[34,43123,43124,43126,43128],{"class":36,"line":17126},[34,43125,5106],{"class":112},[34,43127,39350],{"class":63},[34,43129,39353],{"class":59},[34,43131,43132,43134,43137,43139,43142,43144,43146,43148,43150],{"class":36,"line":17140},[34,43133,39363],{"class":59},[34,43135,43136],{"class":5680},"mode",[34,43138,447],{"class":112},[34,43140,43141],{"class":187},"'fan_out'",[34,43143,67],{"class":59},[34,43145,39366],{"class":5680},[34,43147,447],{"class":112},[34,43149,39371],{"class":187},[34,43151,623],{"class":59},[34,43153,43154],{"class":36,"line":17160},[34,43155,43156],{"class":40},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[34,43158,43159],{"class":36,"line":17166},[34,43160,43161],{"class":40},"                # ② mode = 'fan_out'决定使用的fan值：\n",[34,43163,43164],{"class":36,"line":17177},[34,43165,43166],{"class":40},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[34,43168,43169],{"class":36,"line":17200},[34,43170,43171],{"class":40},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[34,43173,43174],{"class":36,"line":17222},[34,43175,43176],{"class":40},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[34,43178,43179],{"class":36,"line":17227},[34,43180,43181],{"class":40},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[34,43183,43184,43186,43188,43190,43192,43194],{"class":36,"line":17233},[34,43185,39383],{"class":112},[34,43187,39386],{"class":59},[34,43189,39389],{"class":112},[34,43191,39392],{"class":112},[34,43193,39395],{"class":63},[34,43195,4203],{"class":59},[34,43197,43198,43200,43202],{"class":36,"line":17247},[34,43199,39407],{"class":59},[34,43201,319],{"class":63},[34,43203,623],{"class":59},[34,43205,43206,43209,43211],{"class":36,"line":17260},[34,43207,43208],{"class":112},"                elif",[34,43210,39350],{"class":63},[34,43212,39426],{"class":59},[34,43214,43215,43218,43220,43222,43224],{"class":36,"line":17265},[34,43216,43217],{"class":59},"                    nn.init.normal_(m.weight,",[34,43219,319],{"class":63},[34,43221,67],{"class":59},[34,43223,39448],{"class":63},[34,43225,623],{"class":59},[34,43227,43228,43231,43233,43235,43237,43239],{"class":36,"line":17279},[34,43229,43230],{"class":112},"                    if",[34,43232,39386],{"class":59},[34,43234,39389],{"class":112},[34,43236,39392],{"class":112},[34,43238,39395],{"class":63},[34,43240,4203],{"class":59},[34,43242,43243,43246,43248],{"class":36,"line":17284},[34,43244,43245],{"class":59},"                        nn.init.constant_(m.bias,",[34,43247,319],{"class":63},[34,43249,623],{"class":59},[34,43251,43252],{"class":36,"line":17290},[34,43253,35627],{"class":40},[34,43255,43256,43258,43260],{"class":36,"line":17295},[34,43257,31264],{"class":112},[34,43259,31556],{"class":2427},[34,43261,31559],{"class":59},[34,43263,43264,43266,43268,43270],{"class":36,"line":17309},[34,43265,31564],{"class":59},[34,43267,447],{"class":112},[34,43269,31286],{"class":63},[34,43271,43272],{"class":59},".b1(x)\n",[34,43274,43275,43277,43279,43281],{"class":36,"line":17314},[34,43276,31564],{"class":59},[34,43278,447],{"class":112},[34,43280,31286],{"class":63},[34,43282,43283],{"class":59},".b2(x)\n",[34,43285,43286,43288,43290,43292],{"class":36,"line":17319},[34,43287,31564],{"class":59},[34,43289,447],{"class":112},[34,43291,31286],{"class":63},[34,43293,43294],{"class":59},".b3(x)\n",[34,43296,43297,43299,43301,43303],{"class":36,"line":17333},[34,43298,31564],{"class":59},[34,43300,447],{"class":112},[34,43302,31286],{"class":63},[34,43304,43305],{"class":59},".b4(x)\n",[34,43307,43308,43310,43312,43314],{"class":36,"line":17345},[34,43309,31564],{"class":59},[34,43311,447],{"class":112},[34,43313,31286],{"class":63},[34,43315,43316],{"class":59},".b5(x)\n",[34,43318,43319,43321],{"class":36,"line":17350},[34,43320,15216],{"class":112},[34,43322,31672],{"class":59},[34,43324,43325],{"class":36,"line":17363},[34,43326,2864],{"emptyLinePlaceholder":540},[34,43328,43329],{"class":36,"line":17368},[34,43330,43331],{"class":40},"# 模型展示\n",[34,43333,43334,43336,43338,43340,43342],{"class":36,"line":17373},[34,43335,2002],{"class":112},[34,43337,31683],{"class":63},[34,43339,3413],{"class":112},[34,43341,31688],{"class":187},[34,43343,4203],{"class":59},[34,43345,43346,43348,43350,43352,43354,43356,43358,43360,43362],{"class":36,"line":17378},[34,43347,31700],{"class":59},[34,43349,447],{"class":112},[34,43351,30914],{"class":59},[34,43353,31707],{"class":187},[34,43355,2168],{"class":112},[34,43357,31712],{"class":59},[34,43359,2165],{"class":112},[34,43361,30939],{"class":187},[34,43363,623],{"class":59},[34,43365,43366,43368,43370],{"class":36,"line":17391},[34,43367,31752],{"class":59},[34,43369,447],{"class":112},[34,43371,43372],{"class":59},"GoogLeNet(Inception).to(device)\n",[34,43374,43375,43377,43379,43381,43383,43385,43387,43389],{"class":36,"line":17396},[34,43376,31762],{"class":63},[34,43378,31765],{"class":59},[34,43380,64],{"class":63},[34,43382,67],{"class":59},[34,43384,31964],{"class":63},[34,43386,67],{"class":59},[34,43388,31964],{"class":63},[34,43390,31778],{"class":59},[567,43392,43393],{"start":44},[570,43394,39645],{},[25,43396,43398],{"className":27,"code":43397,"language":29,"meta":22,"style":22},"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",[31,43399,43400,43406,43412,43422,43428,43438,43448,43458,43468,43478,43482,43493,43503,43507,43511,43515,43523,43535,43545,43561,43571,43603,43617,43627,43637,43641,43651,43665,43675,43685,43695,43701,43705,43709,43713,43717,43721,43729,43749,43753,43757,43761,43765,43769,43785,43789,43793,43801,43805,43809,43817,43821,43825,43829,43837,43841,43845,43849,43853,43861,43865,43873,43877,43885,43889,43897,43901,43909,43913,43917,43925,43929,43933,43937,43949,43973,43987,43991,43995,43999,44007,44011,44019,44023,44031,44035,44043,44047,44055,44059,44067,44071,44083,44087,44095,44099,44107,44111,44115,44119,44123,44131,44135,44151,44155,44163,44167,44171,44175,44179,44183,44187,44191,44207,44211,44223,44227,44239,44243,44255,44259,44267,44271,44279,44283,44287,44291,44297,44301,44309,44313,44329,44333,44341,44345,44361,44373,44377,44389,44393,44397,44405,44409,44413,44421,44425,44433,44437,44445,44449,44453,44495,44537,44541,44545,44561,44565,44581,44585,44589,44597,44601,44605,44617,44655,44659,44663,44671,44675,44689,44699,44705,44711,44717,44723,44727,44731,44737,44741,44745,44753,44757,44775,44779,44783,44787,44803,44807,44811,44815,44819,44823,44843,44863,44867,44871,44875,44883,44891,44895,44911,44931,44951,44955,44959,44967,44975,44979,44983,44987,44999,45003,45013,45021,45038],{"__ignoreMap":22},[34,43401,43402,43404],{"class":36,"line":37},[34,43403,30855],{"class":112},[34,43405,32285],{"class":59},[34,43407,43408,43410],{"class":36,"line":44},[34,43409,30855],{"class":112},[34,43411,32292],{"class":59},[34,43413,43414,43416,43418,43420],{"class":36,"line":50},[34,43415,30855],{"class":112},[34,43417,32303],{"class":59},[34,43419,31846],{"class":112},[34,43421,32308],{"class":59},[34,43423,43424,43426],{"class":36,"line":56},[34,43425,30855],{"class":112},[34,43427,30858],{"class":59},[34,43429,43430,43432,43434,43436],{"class":36,"line":107},[34,43431,31200],{"class":112},[34,43433,31878],{"class":59},[34,43435,30855],{"class":112},[34,43437,32325],{"class":59},[34,43439,43440,43442,43444,43446],{"class":36,"line":196},[34,43441,31200],{"class":112},[34,43443,31831],{"class":59},[34,43445,30855],{"class":112},[34,43447,31836],{"class":59},[34,43449,43450,43452,43454,43456],{"class":36,"line":202},[34,43451,31200],{"class":112},[34,43453,31861],{"class":59},[34,43455,30855],{"class":112},[34,43457,31866],{"class":59},[34,43459,43460,43462,43464,43466],{"class":36,"line":207},[34,43461,30855],{"class":112},[34,43463,31878],{"class":59},[34,43465,31846],{"class":112},[34,43467,31883],{"class":59},[34,43469,43470,43472,43474,43476],{"class":36,"line":222},[34,43471,30855],{"class":112},[34,43473,31895],{"class":59},[34,43475,31846],{"class":112},[34,43477,31900],{"class":59},[34,43479,43480],{"class":36,"line":227},[34,43481,32370],{"class":40},[34,43483,43484,43486,43488,43490],{"class":36,"line":232},[34,43485,31200],{"class":112},[34,43487,32377],{"class":59},[34,43489,30855],{"class":112},[34,43491,43492],{"class":59}," GoogLeNet, Inception\n",[34,43494,43495,43497,43499,43501],{"class":36,"line":238},[34,43496,31200],{"class":112},[34,43498,31203],{"class":59},[34,43500,30855],{"class":112},[34,43502,31208],{"class":59},[34,43504,43505],{"class":36,"line":244},[34,43506,2864],{"emptyLinePlaceholder":540},[34,43508,43509],{"class":36,"line":250},[34,43510,2864],{"emptyLinePlaceholder":540},[34,43512,43513],{"class":36,"line":256},[34,43514,32405],{"class":40},[34,43516,43517,43519,43521],{"class":36,"line":261},[34,43518,32410],{"class":112},[34,43520,32413],{"class":2427},[34,43522,32416],{"class":59},[34,43524,43525,43527,43529,43531,43533],{"class":36,"line":267},[34,43526,32421],{"class":59},[34,43528,447],{"class":112},[34,43530,31918],{"class":59},[34,43532,31926],{"class":187},[34,43534,31929],{"class":59},[34,43536,43537,43539,43541,43543],{"class":36,"line":2138},[34,43538,32434],{"class":5680},[34,43540,447],{"class":112},[34,43542,31939],{"class":63},[34,43544,31929],{"class":59},[34,43546,43547,43549,43551,43553,43555,43557,43559],{"class":36,"line":2143},[34,43548,32445],{"class":5680},[34,43550,447],{"class":112},[34,43552,31956],{"class":59},[34,43554,31959],{"class":5680},[34,43556,447],{"class":112},[34,43558,35911],{"class":63},[34,43560,31967],{"class":59},[34,43562,43563,43565,43567,43569],{"class":36,"line":2157},[34,43564,32462],{"class":5680},[34,43566,447],{"class":112},[34,43568,31939],{"class":63},[34,43570,623],{"class":59},[34,43572,43573,43575,43577,43579,43581,43583,43585,43587,43589,43591,43593,43595,43597,43599,43601],{"class":36,"line":2162},[34,43574,32473],{"class":59},[34,43576,447],{"class":112},[34,43578,32478],{"class":59},[34,43580,32481],{"class":63},[34,43582,617],{"class":59},[34,43584,32486],{"class":63},[34,43586,1062],{"class":112},[34,43588,7822],{"class":63},[34,43590,32493],{"class":59},[34,43592,32481],{"class":63},[34,43594,617],{"class":59},[34,43596,32500],{"class":63},[34,43598,1062],{"class":112},[34,43600,7822],{"class":63},[34,43602,32507],{"class":59},[34,43604,43605,43607,43609,43611,43613,43615],{"class":36,"line":2191},[34,43606,32512],{"class":59},[34,43608,447],{"class":112},[34,43610,32517],{"class":59},[34,43612,32000],{"class":5680},[34,43614,447],{"class":112},[34,43616,32005],{"class":59},[34,43618,43619,43621,43623,43625],{"class":36,"line":2196},[34,43620,32528],{"class":5680},[34,43622,447],{"class":112},[34,43624,807],{"class":63},[34,43626,31929],{"class":59},[34,43628,43629,43631,43633,43635],{"class":36,"line":2213},[34,43630,32540],{"class":5680},[34,43632,447],{"class":112},[34,43634,31939],{"class":63},[34,43636,31929],{"class":59},[34,43638,43639],{"class":36,"line":2218},[34,43640,32551],{"class":40},[34,43642,43643,43645,43647,43649],{"class":36,"line":2223},[34,43644,32556],{"class":5680},[34,43646,447],{"class":112},[34,43648,1002],{"class":63},[34,43650,623],{"class":59},[34,43652,43653,43655,43657,43659,43661,43663],{"class":36,"line":2228},[34,43654,32567],{"class":59},[34,43656,447],{"class":112},[34,43658,31997],{"class":59},[34,43660,32000],{"class":5680},[34,43662,447],{"class":112},[34,43664,32578],{"class":59},[34,43666,43667,43669,43671,43673],{"class":36,"line":2242},[34,43668,32583],{"class":5680},[34,43670,447],{"class":112},[34,43672,807],{"class":63},[34,43674,31929],{"class":59},[34,43676,43677,43679,43681,43683],{"class":36,"line":2247},[34,43678,32594],{"class":5680},[34,43680,447],{"class":112},[34,43682,31939],{"class":63},[34,43684,31929],{"class":59},[34,43686,43687,43689,43691,43693],{"class":36,"line":3041},[34,43688,32605],{"class":5680},[34,43690,447],{"class":112},[34,43692,1002],{"class":63},[34,43694,623],{"class":59},[34,43696,43697,43699],{"class":36,"line":3055},[34,43698,4554],{"class":112},[34,43700,32618],{"class":59},[34,43702,43703],{"class":36,"line":3063},[34,43704,2864],{"emptyLinePlaceholder":540},[34,43706,43707],{"class":36,"line":3068},[34,43708,32627],{"class":40},[34,43710,43711],{"class":36,"line":3074},[34,43712,32632],{"class":40},[34,43714,43715],{"class":36,"line":3080},[34,43716,2864],{"emptyLinePlaceholder":540},[34,43718,43719],{"class":36,"line":3085},[34,43720,32641],{"class":40},[34,43722,43723,43725,43727],{"class":36,"line":8412},[34,43724,32410],{"class":112},[34,43726,32648],{"class":2427},[34,43728,32651],{"class":59},[34,43730,43731,43733,43735,43737,43739,43741,43743,43745,43747],{"class":36,"line":8436},[34,43732,31700],{"class":59},[34,43734,447],{"class":112},[34,43736,30914],{"class":59},[34,43738,31707],{"class":187},[34,43740,2168],{"class":112},[34,43742,31712],{"class":59},[34,43744,2165],{"class":112},[34,43746,32670],{"class":187},[34,43748,623],{"class":59},[34,43750,43751],{"class":36,"line":8441},[34,43752,2864],{"emptyLinePlaceholder":540},[34,43754,43755],{"class":36,"line":8447},[34,43756,2864],{"emptyLinePlaceholder":540},[34,43758,43759],{"class":36,"line":8474},[34,43760,32685],{"class":40},[34,43762,43763],{"class":36,"line":8479},[34,43764,32690],{"class":40},[34,43766,43767],{"class":36,"line":8485},[34,43768,32695],{"class":40},[34,43770,43771,43773,43775,43777,43779,43781,43783],{"class":36,"line":8497},[34,43772,32700],{"class":59},[34,43774,447],{"class":112},[34,43776,32705],{"class":59},[34,43778,32708],{"class":5680},[34,43780,447],{"class":112},[34,43782,32713],{"class":63},[34,43784,623],{"class":59},[34,43786,43787],{"class":36,"line":8509},[34,43788,2864],{"emptyLinePlaceholder":540},[34,43790,43791],{"class":36,"line":8521},[34,43792,32724],{"class":40},[34,43794,43795,43797,43799],{"class":36,"line":10180},[34,43796,32729],{"class":59},[34,43798,447],{"class":112},[34,43800,32734],{"class":59},[34,43802,43803],{"class":36,"line":10205},[34,43804,2864],{"emptyLinePlaceholder":540},[34,43806,43807],{"class":36,"line":10228},[34,43808,32743],{"class":40},[34,43810,43811,43813,43815],{"class":36,"line":10252},[34,43812,31752],{"class":59},[34,43814,447],{"class":112},[34,43816,32752],{"class":59},[34,43818,43819],{"class":36,"line":10257},[34,43820,32757],{"class":40},[34,43822,43823],{"class":36,"line":10262},[34,43824,32762],{"class":40},[34,43826,43827],{"class":36,"line":10267},[34,43828,32767],{"class":40},[34,43830,43831,43833,43835],{"class":36,"line":10276},[34,43832,32772],{"class":59},[34,43834,447],{"class":112},[34,43836,32777],{"class":59},[34,43838,43839],{"class":36,"line":10281},[34,43840,2864],{"emptyLinePlaceholder":540},[34,43842,43843],{"class":36,"line":10287},[34,43844,2864],{"emptyLinePlaceholder":540},[34,43846,43847],{"class":36,"line":10308},[34,43848,32790],{"class":40},[34,43850,43851],{"class":36,"line":10314},[34,43852,32795],{"class":40},[34,43854,43855,43857,43859],{"class":36,"line":10328},[34,43856,32800],{"class":59},[34,43858,447],{"class":112},[34,43860,32805],{"class":63},[34,43862,43863],{"class":36,"line":10334},[34,43864,32810],{"class":40},[34,43866,43867,43869,43871],{"class":36,"line":10361},[34,43868,32815],{"class":59},[34,43870,447],{"class":112},[34,43872,32820],{"class":59},[34,43874,43875],{"class":36,"line":10370},[34,43876,32825],{"class":40},[34,43878,43879,43881,43883],{"class":36,"line":10376},[34,43880,32830],{"class":59},[34,43882,447],{"class":112},[34,43884,32820],{"class":59},[34,43886,43887],{"class":36,"line":10384},[34,43888,32839],{"class":40},[34,43890,43891,43893,43895],{"class":36,"line":10389},[34,43892,32844],{"class":59},[34,43894,447],{"class":112},[34,43896,32820],{"class":59},[34,43898,43899],{"class":36,"line":17068},[34,43900,32853],{"class":40},[34,43902,43903,43905,43907],{"class":36,"line":17074},[34,43904,32858],{"class":59},[34,43906,447],{"class":112},[34,43908,32820],{"class":59},[34,43910,43911],{"class":36,"line":17097},[34,43912,2864],{"emptyLinePlaceholder":540},[34,43914,43915],{"class":36,"line":17103},[34,43916,32871],{"class":40},[34,43918,43919,43921,43923],{"class":36,"line":17126},[34,43920,32876],{"class":59},[34,43922,447],{"class":112},[34,43924,32881],{"class":59},[34,43926,43927],{"class":36,"line":17140},[34,43928,2864],{"emptyLinePlaceholder":540},[34,43930,43931],{"class":36,"line":17160},[34,43932,2864],{"emptyLinePlaceholder":540},[34,43934,43935],{"class":36,"line":17166},[34,43936,32894],{"class":40},[34,43938,43939,43941,43943,43945,43947],{"class":36,"line":17177},[34,43940,3665],{"class":112},[34,43942,32901],{"class":59},[34,43944,26508],{"class":112},[34,43946,32906],{"class":63},[34,43948,32909],{"class":59},[34,43950,43951,43953,43955,43957,43959,43961,43963,43965,43967,43969,43971],{"class":36,"line":17200},[34,43952,32914],{"class":63},[34,43954,617],{"class":59},[34,43956,32919],{"class":187},[34,43958,32922],{"class":63},[34,43960,1190],{"class":187},[34,43962,32922],{"class":63},[34,43964,860],{"class":187},[34,43966,32931],{"class":59},[34,43968,113],{"class":112},[34,43970,64],{"class":63},[34,43972,30960],{"class":59},[34,43974,43975,43977,43979,43981,43983,43985],{"class":36,"line":17222},[34,43976,32914],{"class":63},[34,43978,617],{"class":59},[34,43980,32946],{"class":187},[34,43982,1062],{"class":112},[34,43984,1053],{"class":63},[34,43986,623],{"class":59},[34,43988,43989],{"class":36,"line":17227},[34,43990,2864],{"emptyLinePlaceholder":540},[34,43992,43993],{"class":36,"line":17233},[34,43994,32961],{"class":40},[34,43996,43997],{"class":36,"line":17247},[34,43998,32966],{"class":40},[34,44000,44001,44003,44005],{"class":36,"line":17260},[34,44002,32971],{"class":59},[34,44004,447],{"class":112},[34,44006,32805],{"class":63},[34,44008,44009],{"class":36,"line":17265},[34,44010,32980],{"class":40},[34,44012,44013,44015,44017],{"class":36,"line":17279},[34,44014,32985],{"class":59},[34,44016,447],{"class":112},[34,44018,3549],{"class":63},[34,44020,44021],{"class":36,"line":17284},[34,44022,32994],{"class":40},[34,44024,44025,44027,44029],{"class":36,"line":17290},[34,44026,32999],{"class":59},[34,44028,447],{"class":112},[34,44030,32805],{"class":63},[34,44032,44033],{"class":36,"line":17295},[34,44034,33008],{"class":40},[34,44036,44037,44039,44041],{"class":36,"line":17309},[34,44038,33013],{"class":59},[34,44040,447],{"class":112},[34,44042,3549],{"class":63},[34,44044,44045],{"class":36,"line":17314},[34,44046,33022],{"class":40},[34,44048,44049,44051,44053],{"class":36,"line":17319},[34,44050,33027],{"class":59},[34,44052,447],{"class":112},[34,44054,3549],{"class":63},[34,44056,44057],{"class":36,"line":17333},[34,44058,33036],{"class":40},[34,44060,44061,44063,44065],{"class":36,"line":17345},[34,44062,33041],{"class":59},[34,44064,447],{"class":112},[34,44066,3549],{"class":63},[34,44068,44069],{"class":36,"line":17350},[34,44070,33050],{"class":40},[34,44072,44073,44075,44077,44079,44081],{"class":36,"line":17363},[34,44074,3867],{"class":112},[34,44076,32064],{"class":59},[34,44078,26508],{"class":112},[34,44080,32069],{"class":63},[34,44082,33063],{"class":59},[34,44084,44085],{"class":36,"line":17368},[34,44086,33068],{"class":40},[34,44088,44089,44091,44093],{"class":36,"line":17373},[34,44090,33073],{"class":59},[34,44092,447],{"class":112},[34,44094,33078],{"class":59},[34,44096,44097],{"class":36,"line":17378},[34,44098,33083],{"class":40},[34,44100,44101,44103,44105],{"class":36,"line":17391},[34,44102,33088],{"class":59},[34,44104,447],{"class":112},[34,44106,33093],{"class":59},[34,44108,44109],{"class":36,"line":17396},[34,44110,33099],{"class":40},[34,44112,44113],{"class":36,"line":33096},[34,44114,33105],{"class":59},[34,44116,44117],{"class":36,"line":33102},[34,44118,33111],{"class":40},[34,44120,44121],{"class":36,"line":33108},[34,44122,33117],{"class":40},[34,44124,44125,44127,44129],{"class":36,"line":33114},[34,44126,33123],{"class":59},[34,44128,447],{"class":112},[34,44130,33128],{"class":59},[34,44132,44133],{"class":36,"line":33120},[34,44134,33134],{"class":40},[34,44136,44137,44139,44141,44143,44145,44147,44149],{"class":36,"line":33131},[34,44138,33140],{"class":59},[34,44140,447],{"class":112},[34,44142,33145],{"class":59},[34,44144,33148],{"class":5680},[34,44146,447],{"class":112},[34,44148,64],{"class":63},[34,44150,623],{"class":59},[34,44152,44153],{"class":36,"line":33137},[34,44154,33160],{"class":40},[34,44156,44157,44159,44161],{"class":36,"line":33157},[34,44158,33166],{"class":59},[34,44160,447],{"class":112},[34,44162,33171],{"class":59},[34,44164,44165],{"class":36,"line":33163},[34,44166,33177],{"class":40},[34,44168,44169],{"class":36,"line":33174},[34,44170,33183],{"class":59},[34,44172,44173],{"class":36,"line":33180},[34,44174,33189],{"class":40},[34,44176,44177],{"class":36,"line":33186},[34,44178,33195],{"class":59},[34,44180,44181],{"class":36,"line":33192},[34,44182,33201],{"class":40},[34,44184,44185],{"class":36,"line":33198},[34,44186,33207],{"class":59},[34,44188,44189],{"class":36,"line":33204},[34,44190,33213],{"class":40},[34,44192,44193,44195,44197,44199,44201,44203,44205],{"class":36,"line":33210},[34,44194,33219],{"class":59},[34,44196,9941],{"class":112},[34,44198,33224],{"class":59},[34,44200,1062],{"class":112},[34,44202,33229],{"class":59},[34,44204,319],{"class":63},[34,44206,623],{"class":59},[34,44208,44209],{"class":36,"line":33216},[34,44210,33239],{"class":40},[34,44212,44213,44215,44217,44219,44221],{"class":36,"line":33236},[34,44214,33245],{"class":59},[34,44216,9941],{"class":112},[34,44218,33250],{"class":59},[34,44220,3413],{"class":112},[34,44222,33255],{"class":59},[34,44224,44225],{"class":36,"line":33242},[34,44226,33261],{"class":40},[34,44228,44229,44231,44233,44235,44237],{"class":36,"line":33258},[34,44230,33267],{"class":59},[34,44232,9941],{"class":112},[34,44234,33229],{"class":59},[34,44236,319],{"class":63},[34,44238,623],{"class":59},[34,44240,44241],{"class":36,"line":33264},[34,44242,33281],{"class":40},[34,44244,44245,44247,44249,44251,44253],{"class":36,"line":33278},[34,44246,3867],{"class":112},[34,44248,33289],{"class":59},[34,44250,26508],{"class":112},[34,44252,32069],{"class":63},[34,44254,33296],{"class":59},[34,44256,44257],{"class":36,"line":33284},[34,44258,33302],{"class":40},[34,44260,44261,44263,44265],{"class":36,"line":33299},[34,44262,33073],{"class":59},[34,44264,447],{"class":112},[34,44266,33078],{"class":59},[34,44268,44269],{"class":36,"line":33305},[34,44270,33317],{"class":40},[34,44272,44273,44275,44277],{"class":36,"line":33314},[34,44274,33088],{"class":59},[34,44276,447],{"class":112},[34,44278,33093],{"class":59},[34,44280,44281],{"class":36,"line":33320},[34,44282,33332],{"class":40},[34,44284,44285],{"class":36,"line":33329},[34,44286,33338],{"class":59},[34,44288,44289],{"class":36,"line":33335},[34,44290,36818],{"class":40},[34,44292,44293,44295],{"class":36,"line":33341},[34,44294,33344],{"class":112},[34,44296,33347],{"class":59},[34,44298,44299],{"class":36,"line":33350},[34,44300,33353],{"class":40},[34,44302,44303,44305,44307],{"class":36,"line":33356},[34,44304,36833],{"class":59},[34,44306,447],{"class":112},[34,44308,33128],{"class":59},[34,44310,44311],{"class":36,"line":33367},[34,44312,33370],{"class":40},[34,44314,44315,44317,44319,44321,44323,44325,44327],{"class":36,"line":33373},[34,44316,36846],{"class":59},[34,44318,447],{"class":112},[34,44320,33145],{"class":59},[34,44322,33148],{"class":5680},[34,44324,447],{"class":112},[34,44326,64],{"class":63},[34,44328,623],{"class":59},[34,44330,44331],{"class":36,"line":33392},[34,44332,33395],{"class":40},[34,44334,44335,44337,44339],{"class":36,"line":33398},[34,44336,36867],{"class":59},[34,44338,447],{"class":112},[34,44340,33171],{"class":59},[34,44342,44343],{"class":36,"line":33409},[34,44344,33412],{"class":40},[34,44346,44347,44349,44351,44353,44355,44357,44359],{"class":36,"line":33415},[34,44348,36880],{"class":59},[34,44350,9941],{"class":112},[34,44352,36885],{"class":59},[34,44354,1062],{"class":112},[34,44356,33229],{"class":59},[34,44358,319],{"class":63},[34,44360,623],{"class":59},[34,44362,44363,44365,44367,44369,44371],{"class":36,"line":33435},[34,44364,36898],{"class":59},[34,44366,9941],{"class":112},[34,44368,33250],{"class":59},[34,44370,3413],{"class":112},[34,44372,33255],{"class":59},[34,44374,44375],{"class":36,"line":33451},[34,44376,36911],{"class":40},[34,44378,44379,44381,44383,44385,44387],{"class":36,"line":33457},[34,44380,36916],{"class":59},[34,44382,9941],{"class":112},[34,44384,33229],{"class":59},[34,44386,319],{"class":63},[34,44388,623],{"class":59},[34,44390,44391],{"class":36,"line":33471},[34,44392,33474],{"class":40},[34,44394,44395],{"class":36,"line":33477},[34,44396,33480],{"class":40},[34,44398,44399,44401,44403],{"class":36,"line":33483},[34,44400,33486],{"class":59},[34,44402,1190],{"class":112},[34,44404,33491],{"class":59},[34,44406,44407],{"class":36,"line":33494},[34,44408,33497],{"class":40},[34,44410,44411],{"class":36,"line":33500},[34,44412,33503],{"class":40},[34,44414,44415,44417,44419],{"class":36,"line":33506},[34,44416,33509],{"class":59},[34,44418,1190],{"class":112},[34,44420,33491],{"class":59},[34,44422,44423],{"class":36,"line":33516},[34,44424,33519],{"class":40},[34,44426,44427,44429,44431],{"class":36,"line":33522},[34,44428,33525],{"class":59},[34,44430,1190],{"class":112},[34,44432,33530],{"class":59},[34,44434,44435],{"class":36,"line":33533},[34,44436,33536],{"class":40},[34,44438,44439,44441,44443],{"class":36,"line":33539},[34,44440,33542],{"class":59},[34,44442,1190],{"class":112},[34,44444,33530],{"class":59},[34,44446,44447],{"class":36,"line":33549},[34,44448,2864],{"emptyLinePlaceholder":540},[34,44450,44451],{"class":36,"line":33554},[34,44452,33557],{"class":40},[34,44454,44455,44457,44459,44461,44463,44465,44467,44469,44471,44473,44475,44477,44479,44481,44483,44485,44487,44489,44491,44493],{"class":36,"line":33560},[34,44456,32914],{"class":63},[34,44458,617],{"class":59},[34,44460,4056],{"class":187},[34,44462,32922],{"class":63},[34,44464,33571],{"class":187},[34,44466,1501],{"class":63},[34,44468,33576],{"class":112},[34,44470,1550],{"class":63},[34,44472,33581],{"class":187},[34,44474,1501],{"class":63},[34,44476,33576],{"class":112},[34,44478,1550],{"class":63},[34,44480,4056],{"class":187},[34,44482,33592],{"class":59},[34,44484,113],{"class":112},[34,44486,64],{"class":63},[34,44488,33599],{"class":59},[34,44490,113],{"class":112},[34,44492,64],{"class":63},[34,44494,33606],{"class":59},[34,44496,44497,44499,44501,44503,44505,44507,44509,44511,44513,44515,44517,44519,44521,44523,44525,44527,44529,44531,44533,44535],{"class":36,"line":33609},[34,44498,32914],{"class":63},[34,44500,617],{"class":59},[34,44502,4056],{"class":187},[34,44504,32922],{"class":63},[34,44506,33620],{"class":187},[34,44508,1501],{"class":63},[34,44510,33576],{"class":112},[34,44512,1550],{"class":63},[34,44514,33629],{"class":187},[34,44516,1501],{"class":63},[34,44518,33576],{"class":112},[34,44520,1550],{"class":63},[34,44522,4056],{"class":187},[34,44524,33640],{"class":59},[34,44526,113],{"class":112},[34,44528,64],{"class":63},[34,44530,33647],{"class":59},[34,44532,113],{"class":112},[34,44534,64],{"class":63},[34,44536,33606],{"class":59},[34,44538,44539],{"class":36,"line":33656},[34,44540,2864],{"emptyLinePlaceholder":540},[34,44542,44543],{"class":36,"line":33661},[34,44544,33664],{"class":40},[34,44546,44547,44549,44551,44553,44555,44557,44559],{"class":36,"line":33667},[34,44548,2961],{"class":112},[34,44550,33672],{"class":59},[34,44552,113],{"class":112},[34,44554,64],{"class":63},[34,44556,477],{"class":59},[34,44558,1564],{"class":112},[34,44560,33683],{"class":59},[34,44562,44563],{"class":36,"line":33686},[34,44564,33689],{"class":40},[34,44566,44567,44569,44571,44573,44575,44577,44579],{"class":36,"line":33692},[34,44568,33695],{"class":59},[34,44570,656],{"class":63},[34,44572,447],{"class":112},[34,44574,33702],{"class":59},[34,44576,113],{"class":112},[34,44578,64],{"class":63},[34,44580,73],{"class":59},[34,44582,44583],{"class":36,"line":33711},[34,44584,33714],{"class":40},[34,44586,44587],{"class":36,"line":33717},[34,44588,33720],{"class":40},[34,44590,44591,44593,44595],{"class":36,"line":33723},[34,44592,33726],{"class":59},[34,44594,447],{"class":112},[34,44596,32777],{"class":59},[34,44598,44599],{"class":36,"line":33733},[34,44600,2864],{"emptyLinePlaceholder":540},[34,44602,44603],{"class":36,"line":33738},[34,44604,33741],{"class":40},[34,44606,44607,44609,44611,44613,44615],{"class":36,"line":33744},[34,44608,33747],{"class":59},[34,44610,447],{"class":112},[34,44612,33752],{"class":59},[34,44614,113],{"class":112},[34,44616,33757],{"class":59},[34,44618,44619,44621,44623,44625,44627,44629,44631,44633,44635,44637,44639,44641,44643,44645,44647,44649,44651,44653],{"class":36,"line":33760},[34,44620,32914],{"class":63},[34,44622,617],{"class":59},[34,44624,33767],{"class":187},[34,44626,1501],{"class":63},[34,44628,33772],{"class":112},[34,44630,1550],{"class":63},[34,44632,1150],{"class":187},[34,44634,1501],{"class":63},[34,44636,33772],{"class":112},[34,44638,1550],{"class":63},[34,44640,33785],{"class":187},[34,44642,33788],{"class":59},[34,44644,33791],{"class":112},[34,44646,1512],{"class":63},[34,44648,33796],{"class":59},[34,44650,936],{"class":112},[34,44652,1512],{"class":63},[34,44654,30960],{"class":59},[34,44656,44657],{"class":36,"line":33805},[34,44658,37195],{"class":40},[34,44660,44661],{"class":36,"line":33811},[34,44662,37200],{"class":40},[34,44664,44665,44667,44669],{"class":36,"line":33817},[34,44666,37205],{"class":59},[34,44668,33829],{"class":187},[34,44670,623],{"class":59},[34,44672,44673],{"class":36,"line":33823},[34,44674,33849],{"class":40},[34,44676,44677,44679,44681,44683,44685,44687],{"class":36,"line":33834},[34,44678,33855],{"class":59},[34,44680,447],{"class":112},[34,44682,33860],{"class":59},[34,44684,33863],{"class":5680},[34,44686,447],{"class":112},[34,44688,2017],{"class":59},[34,44690,44691,44693,44695,44697],{"class":36,"line":33840},[34,44692,33873],{"class":187},[34,44694,214],{"class":59},[34,44696,33878],{"class":63},[34,44698,33881],{"class":59},[34,44700,44701,44703],{"class":36,"line":33846},[34,44702,33887],{"class":187},[34,44704,33890],{"class":59},[34,44706,44707,44709],{"class":36,"line":33852},[34,44708,33896],{"class":187},[34,44710,33899],{"class":59},[34,44712,44713,44715],{"class":36,"line":33870},[34,44714,33905],{"class":187},[34,44716,33908],{"class":59},[34,44718,44719,44721],{"class":36,"line":33884},[34,44720,33914],{"class":187},[34,44722,33917],{"class":59},[34,44724,44725],{"class":36,"line":33893},[34,44726,33923],{"class":59},[34,44728,44729],{"class":36,"line":33902},[34,44730,33929],{"class":40},[34,44732,44733,44735],{"class":36,"line":33911},[34,44734,4554],{"class":112},[34,44736,33937],{"class":59},[34,44738,44739],{"class":36,"line":33920},[34,44740,2864],{"emptyLinePlaceholder":540},[34,44742,44743],{"class":36,"line":33926},[34,44744,33948],{"class":40},[34,44746,44747,44749,44751],{"class":36,"line":33932},[34,44748,32410],{"class":112},[34,44750,33956],{"class":2427},[34,44752,33959],{"class":59},[34,44754,44755],{"class":36,"line":33940},[34,44756,33965],{"class":40},[34,44758,44759,44761,44763,44765,44767,44769,44771,44773],{"class":36,"line":33945},[34,44760,33971],{"class":59},[34,44762,32156],{"class":5680},[34,44764,447],{"class":112},[34,44766,617],{"class":59},[34,44768,1105],{"class":63},[34,44770,67],{"class":59},[34,44772,217],{"class":63},[34,44774,30960],{"class":59},[34,44776,44777],{"class":36,"line":33951},[34,44778,33991],{"class":40},[34,44780,44781],{"class":36,"line":33962},[34,44782,33997],{"class":40},[34,44784,44785],{"class":36,"line":33968},[34,44786,34003],{"class":40},[34,44788,44789,44791,44793,44795,44797,44799,44801],{"class":36,"line":33988},[34,44790,32190],{"class":59},[34,44792,64],{"class":63},[34,44794,67],{"class":59},[34,44796,70],{"class":63},[34,44798,67],{"class":59},[34,44800,64],{"class":63},[34,44802,623],{"class":59},[34,44804,44805],{"class":36,"line":33994},[34,44806,34026],{"class":40},[34,44808,44809],{"class":36,"line":34000},[34,44810,34032],{"class":40},[34,44812,44813],{"class":36,"line":34006},[34,44814,34038],{"class":40},[34,44816,44817],{"class":36,"line":34023},[34,44818,34044],{"class":40},[34,44820,44821],{"class":36,"line":34029},[34,44822,34050],{"class":40},[34,44824,44825,44827,44829,44831,44833,44835,44837,44839,44841],{"class":36,"line":34035},[34,44826,34056],{"class":59},[34,44828,34059],{"class":187},[34,44830,34062],{"class":59},[34,44832,34065],{"class":187},[34,44834,67],{"class":59},[34,44836,34070],{"class":5680},[34,44838,447],{"class":112},[34,44840,34075],{"class":187},[34,44842,623],{"class":59},[34,44844,44845,44847,44849,44851,44853,44855,44857,44859,44861],{"class":36,"line":34041},[34,44846,34056],{"class":59},[34,44848,34059],{"class":187},[34,44850,34087],{"class":59},[34,44852,34090],{"class":187},[34,44854,67],{"class":59},[34,44856,34070],{"class":5680},[34,44858,447],{"class":112},[34,44860,34099],{"class":187},[34,44862,623],{"class":59},[34,44864,44865],{"class":36,"line":34047},[34,44866,34107],{"class":40},[34,44868,44869],{"class":36,"line":34053},[34,44870,34113],{"class":59},[34,44872,44873],{"class":36,"line":34080},[34,44874,34119],{"class":40},[34,44876,44877,44879,44881],{"class":36,"line":34104},[34,44878,34125],{"class":59},[34,44880,34128],{"class":187},[34,44882,623],{"class":59},[34,44884,44885,44887,44889],{"class":36,"line":34110},[34,44886,34136],{"class":59},[34,44888,34139],{"class":187},[34,44890,623],{"class":59},[34,44892,44893],{"class":36,"line":34116},[34,44894,34147],{"class":40},[34,44896,44897,44899,44901,44903,44905,44907,44909],{"class":36,"line":34122},[34,44898,32190],{"class":59},[34,44900,64],{"class":63},[34,44902,67],{"class":59},[34,44904,70],{"class":63},[34,44906,67],{"class":59},[34,44908,70],{"class":63},[34,44910,623],{"class":59},[34,44912,44913,44915,44917,44919,44921,44923,44925,44927,44929],{"class":36,"line":34133},[34,44914,34056],{"class":59},[34,44916,34059],{"class":187},[34,44918,34174],{"class":59},[34,44920,34065],{"class":187},[34,44922,67],{"class":59},[34,44924,34070],{"class":5680},[34,44926,447],{"class":112},[34,44928,34185],{"class":187},[34,44930,623],{"class":59},[34,44932,44933,44935,44937,44939,44941,44943,44945,44947,44949],{"class":36,"line":34144},[34,44934,34056],{"class":59},[34,44936,34059],{"class":187},[34,44938,34197],{"class":59},[34,44940,34090],{"class":187},[34,44942,67],{"class":59},[34,44944,34070],{"class":5680},[34,44946,447],{"class":112},[34,44948,34208],{"class":187},[34,44950,623],{"class":59},[34,44952,44953],{"class":36,"line":34150},[34,44954,34216],{"class":40},[34,44956,44957],{"class":36,"line":34167},[34,44958,34113],{"class":59},[34,44960,44961,44963,44965],{"class":36,"line":34190},[34,44962,34125],{"class":59},[34,44964,34059],{"class":187},[34,44966,623],{"class":59},[34,44968,44969,44971,44973],{"class":36,"line":34213},[34,44970,34136],{"class":59},[34,44972,34238],{"class":187},[34,44974,623],{"class":59},[34,44976,44977],{"class":36,"line":34219},[34,44978,34246],{"class":59},[34,44980,44981],{"class":36,"line":34224},[34,44982,2864],{"emptyLinePlaceholder":540},[34,44984,44985],{"class":36,"line":34233},[34,44986,34257],{"class":40},[34,44988,44989,44991,44993,44995,44997],{"class":36,"line":34243},[34,44990,2002],{"class":112},[34,44992,31683],{"class":63},[34,44994,3413],{"class":112},[34,44996,31688],{"class":187},[34,44998,4203],{"class":59},[34,45000,45001],{"class":36,"line":34249},[34,45002,34276],{"class":40},[34,45004,45005,45008,45010],{"class":36,"line":34254},[34,45006,45007],{"class":59},"    GoogLeNet",[34,45009,447],{"class":112},[34,45011,45012],{"class":59},"GoogLeNet(Inception)\n",[34,45014,45015,45017,45019],{"class":36,"line":34260},[34,45016,34293],{"class":59},[34,45018,447],{"class":112},[34,45020,34298],{"class":59},[34,45022,45023,45025,45027,45030,45032,45034,45036],{"class":36,"line":34273},[34,45024,33855],{"class":59},[34,45026,447],{"class":112},[34,45028,45029],{"class":59},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[34,45031,34311],{"class":5680},[34,45033,447],{"class":112},[34,45035,1555],{"class":63},[34,45037,623],{"class":59},[34,45039,45040],{"class":36,"line":34279},[34,45041,34323],{"class":59},[567,45043,45044],{"start":50},[570,45045,41036],{},[25,45047,45049],{"className":27,"code":45048,"language":29,"meta":22,"style":22},"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",[31,45050,45051,45057,45067,45077,45081,45091,45102,45106,45110,45114,45122,45138,45148,45164,45174,45188,45192,45202,45212,45222,45228,45232,45236,45244,45248,45264,45272,45276,45280,45288,45296,45300,45304,45308,45312,45318,45322,45332,45340,45348,45352,45356,45360,45368,45372,45388,45392,45396,45400,45412,45416,45428,45432,45436,45448,45452,45462,45466,45470,45482,45486,45494,45498,45502,45510,45514,45522,45526,45530,45534,45538,45542,45558,45566,45570,45574,45622,45628,45632,45642,45650,45658,45662,45666,45670,45674,45682,45686,45702,45706,45714,45722],{"__ignoreMap":22},[34,45052,45053,45055],{"class":36,"line":37},[34,45054,30855],{"class":112},[34,45056,30858],{"class":59},[34,45058,45059,45061,45063,45065],{"class":36,"line":44},[34,45060,30855],{"class":112},[34,45062,31878],{"class":59},[34,45064,31846],{"class":112},[34,45066,31883],{"class":59},[34,45068,45069,45071,45073,45075],{"class":36,"line":50},[34,45070,31200],{"class":112},[34,45072,31861],{"class":59},[34,45074,30855],{"class":112},[34,45076,31866],{"class":59},[34,45078,45079],{"class":36,"line":56},[34,45080,34384],{"class":40},[34,45082,45083,45085,45087,45089],{"class":36,"line":107},[34,45084,31200],{"class":112},[34,45086,31831],{"class":59},[34,45088,30855],{"class":112},[34,45090,31836],{"class":59},[34,45092,45093,45095,45097,45099],{"class":36,"line":196},[34,45094,31200],{"class":112},[34,45096,32377],{"class":59},[34,45098,30855],{"class":112},[34,45100,45101],{"class":59}," GoogLeNet,Inception\n",[34,45103,45104],{"class":36,"line":202},[34,45105,2864],{"emptyLinePlaceholder":540},[34,45107,45108],{"class":36,"line":207},[34,45109,2864],{"emptyLinePlaceholder":540},[34,45111,45112],{"class":36,"line":222},[34,45113,34413],{"class":40},[34,45115,45116,45118,45120],{"class":36,"line":227},[34,45117,32410],{"class":112},[34,45119,34420],{"class":2427},[34,45121,32416],{"class":59},[34,45123,45124,45126,45128,45130,45132,45134,45136],{"class":36,"line":232},[34,45125,34427],{"class":59},[34,45127,447],{"class":112},[34,45129,31918],{"class":59},[34,45131,31921],{"class":5680},[34,45133,447],{"class":112},[34,45135,31926],{"class":187},[34,45137,31929],{"class":59},[34,45139,45140,45142,45144,45146],{"class":36,"line":238},[34,45141,34444],{"class":5680},[34,45143,447],{"class":112},[34,45145,34449],{"class":63},[34,45147,31929],{"class":59},[34,45149,45150,45152,45154,45156,45158,45160,45162],{"class":36,"line":244},[34,45151,34456],{"class":5680},[34,45153,447],{"class":112},[34,45155,31956],{"class":59},[34,45157,31959],{"class":5680},[34,45159,447],{"class":112},[34,45161,35911],{"class":63},[34,45163,31967],{"class":59},[34,45165,45166,45168,45170,45172],{"class":36,"line":250},[34,45167,34473],{"class":5680},[34,45169,447],{"class":112},[34,45171,31939],{"class":63},[34,45173,623],{"class":59},[34,45175,45176,45178,45180,45182,45184,45186],{"class":36,"line":256},[34,45177,34484],{"class":59},[34,45179,447],{"class":112},[34,45181,31997],{"class":59},[34,45183,32000],{"class":5680},[34,45185,447],{"class":112},[34,45187,34495],{"class":59},[34,45189,45190],{"class":36,"line":261},[34,45191,34500],{"class":40},[34,45193,45194,45196,45198,45200],{"class":36,"line":267},[34,45195,34505],{"class":5680},[34,45197,447],{"class":112},[34,45199,64],{"class":63},[34,45201,31929],{"class":59},[34,45203,45204,45206,45208,45210],{"class":36,"line":2138},[34,45205,34516],{"class":5680},[34,45207,447],{"class":112},[34,45209,31939],{"class":63},[34,45211,31929],{"class":59},[34,45213,45214,45216,45218,45220],{"class":36,"line":2143},[34,45215,34527],{"class":5680},[34,45217,447],{"class":112},[34,45219,319],{"class":63},[34,45221,623],{"class":59},[34,45223,45224,45226],{"class":36,"line":2157},[34,45225,4554],{"class":112},[34,45227,34540],{"class":59},[34,45229,45230],{"class":36,"line":2162},[34,45231,2864],{"emptyLinePlaceholder":540},[34,45233,45234],{"class":36,"line":2191},[34,45235,34549],{"class":40},[34,45237,45238,45240,45242],{"class":36,"line":2196},[34,45239,32410],{"class":112},[34,45241,34556],{"class":2427},[34,45243,34559],{"class":59},[34,45245,45246],{"class":36,"line":2213},[34,45247,34564],{"class":40},[34,45249,45250,45252,45254,45256,45258,45260,45262],{"class":36,"line":2218},[34,45251,31700],{"class":59},[34,45253,447],{"class":112},[34,45255,31707],{"class":187},[34,45257,2168],{"class":112},[34,45259,31712],{"class":59},[34,45261,2165],{"class":112},[34,45263,34581],{"class":187},[34,45265,45266,45268,45270],{"class":36,"line":2223},[34,45267,31752],{"class":59},[34,45269,447],{"class":112},[34,45271,32752],{"class":59},[34,45273,45274],{"class":36,"line":2228},[34,45275,2864],{"emptyLinePlaceholder":540},[34,45277,45278],{"class":36,"line":2242},[34,45279,34598],{"class":40},[34,45281,45282,45284,45286],{"class":36,"line":2247},[34,45283,34603],{"class":59},[34,45285,447],{"class":112},[34,45287,32805],{"class":63},[34,45289,45290,45292,45294],{"class":36,"line":3041},[34,45291,34612],{"class":59},[34,45293,447],{"class":112},[34,45295,3549],{"class":63},[34,45297,45298],{"class":36,"line":3055},[34,45299,2864],{"emptyLinePlaceholder":540},[34,45301,45302],{"class":36,"line":3063},[34,45303,34625],{"class":40},[34,45305,45306],{"class":36,"line":3068},[34,45307,34630],{"class":40},[34,45309,45310],{"class":36,"line":3074},[34,45311,34635],{"class":40},[34,45313,45314,45316],{"class":36,"line":3080},[34,45315,34640],{"class":112},[34,45317,33347],{"class":59},[34,45319,45320],{"class":36,"line":3085},[34,45321,34647],{"class":40},[34,45323,45324,45326,45328,45330],{"class":36,"line":8412},[34,45325,3867],{"class":112},[34,45327,34654],{"class":59},[34,45329,26508],{"class":112},[34,45331,34659],{"class":59},[34,45333,45334,45336,45338],{"class":36,"line":8436},[34,45335,34664],{"class":59},[34,45337,447],{"class":112},[34,45339,34669],{"class":59},[34,45341,45342,45344,45346],{"class":36,"line":8441},[34,45343,34674],{"class":59},[34,45345,447],{"class":112},[34,45347,34679],{"class":59},[34,45349,45350],{"class":36,"line":8447},[34,45351,34684],{"class":40},[34,45353,45354],{"class":36,"line":8474},[34,45355,33338],{"class":59},[34,45357,45358],{"class":36,"line":8479},[34,45359,34693],{"class":40},[34,45361,45362,45364,45366],{"class":36,"line":8485},[34,45363,33123],{"class":59},[34,45365,447],{"class":112},[34,45367,34702],{"class":59},[34,45369,45370],{"class":36,"line":8497},[34,45371,34707],{"class":40},[34,45373,45374,45376,45378,45380,45382,45384,45386],{"class":36,"line":8509},[34,45375,33140],{"class":59},[34,45377,447],{"class":112},[34,45379,33145],{"class":59},[34,45381,33148],{"class":5680},[34,45383,447],{"class":112},[34,45385,64],{"class":63},[34,45387,623],{"class":59},[34,45389,45390],{"class":36,"line":8521},[34,45391,34728],{"class":40},[34,45393,45394],{"class":36,"line":10180},[34,45395,34733],{"class":40},[34,45397,45398],{"class":36,"line":10205},[34,45399,34738],{"class":40},[34,45401,45402,45404,45406,45408,45410],{"class":36,"line":10228},[34,45403,34743],{"class":59},[34,45405,9941],{"class":112},[34,45407,33250],{"class":59},[34,45409,3413],{"class":112},[34,45411,34752],{"class":59},[34,45413,45414],{"class":36,"line":10252},[34,45415,34757],{"class":40},[34,45417,45418,45420,45422,45424,45426],{"class":36,"line":10257},[34,45419,34762],{"class":59},[34,45421,9941],{"class":112},[34,45423,34767],{"class":59},[34,45425,319],{"class":63},[34,45427,623],{"class":59},[34,45429,45430],{"class":36,"line":10262},[34,45431,2864],{"emptyLinePlaceholder":540},[34,45433,45434],{"class":36,"line":10267},[34,45435,34780],{"class":40},[34,45437,45438,45440,45442,45444,45446],{"class":36,"line":10276},[34,45439,34785],{"class":59},[34,45441,447],{"class":112},[34,45443,34790],{"class":59},[34,45445,1190],{"class":112},[34,45447,34795],{"class":59},[34,45449,45450],{"class":36,"line":10281},[34,45451,34800],{"class":40},[34,45453,45454,45456,45458,45460],{"class":36,"line":10287},[34,45455,32914],{"class":63},[34,45457,617],{"class":59},[34,45459,34809],{"class":187},[34,45461,34812],{"class":59},[34,45463,45464],{"class":36,"line":10308},[34,45465,2864],{"emptyLinePlaceholder":540},[34,45467,45468],{"class":36,"line":10314},[34,45469,34821],{"class":40},[34,45471,45472,45474,45476,45478,45480],{"class":36,"line":10328},[34,45473,2002],{"class":112},[34,45475,31683],{"class":63},[34,45477,3413],{"class":112},[34,45479,31688],{"class":187},[34,45481,4203],{"class":59},[34,45483,45484],{"class":36,"line":10334},[34,45485,34838],{"class":40},[34,45487,45488,45490,45492],{"class":36,"line":10361},[34,45489,31752],{"class":59},[34,45491,447],{"class":112},[34,45493,45012],{"class":59},[34,45495,45496],{"class":36,"line":10370},[34,45497,34851],{"class":40},[34,45499,45500],{"class":36,"line":10376},[34,45501,34856],{"class":40},[34,45503,45504,45506,45508],{"class":36,"line":10384},[34,45505,34861],{"class":59},[34,45507,34864],{"class":187},[34,45509,30960],{"class":59},[34,45511,45512],{"class":36,"line":10389},[34,45513,34871],{"class":40},[34,45515,45516,45518,45520],{"class":36,"line":17068},[34,45517,34484],{"class":59},[34,45519,447],{"class":112},[34,45521,34880],{"class":59},[34,45523,45524],{"class":36,"line":17074},[34,45525,34885],{"class":40},[34,45527,45528],{"class":36,"line":17097},[34,45529,34890],{"class":59},[34,45531,45532],{"class":36,"line":17103},[34,45533,2864],{"emptyLinePlaceholder":540},[34,45535,45536],{"class":36,"line":17126},[34,45537,34899],{"class":40},[34,45539,45540],{"class":36,"line":17140},[34,45541,34904],{"class":40},[34,45543,45544,45546,45548,45550,45552,45554,45556],{"class":36,"line":17160},[34,45545,31700],{"class":59},[34,45547,447],{"class":112},[34,45549,31707],{"class":187},[34,45551,2168],{"class":112},[34,45553,31712],{"class":59},[34,45555,2165],{"class":112},[34,45557,34581],{"class":187},[34,45559,45560,45562,45564],{"class":36,"line":17166},[34,45561,31752],{"class":59},[34,45563,447],{"class":112},[34,45565,32752],{"class":59},[34,45567,45568],{"class":36,"line":17177},[34,45569,34933],{"class":40},[34,45571,45572],{"class":36,"line":17200},[34,45573,34938],{"class":40},[34,45575,45576,45578,45580,45582,45584,45586,45588,45590,45592,45594,45596,45598,45600,45602,45604,45606,45608,45610,45612,45614,45616,45618,45620],{"class":36,"line":17222},[34,45577,34943],{"class":59},[34,45579,447],{"class":112},[34,45581,1495],{"class":59},[34,45583,34950],{"class":187},[34,45585,67],{"class":59},[34,45587,34955],{"class":187},[34,45589,67],{"class":59},[34,45591,34960],{"class":187},[34,45593,67],{"class":59},[34,45595,34965],{"class":187},[34,45597,67],{"class":59},[34,45599,34970],{"class":187},[34,45601,67],{"class":59},[34,45603,34975],{"class":187},[34,45605,67],{"class":59},[34,45607,34980],{"class":187},[34,45609,67],{"class":59},[34,45611,34985],{"class":187},[34,45613,67],{"class":59},[34,45615,34990],{"class":187},[34,45617,67],{"class":59},[34,45619,34995],{"class":187},[34,45621,73],{"class":59},[34,45623,45624,45626],{"class":36,"line":17227},[34,45625,34640],{"class":112},[34,45627,33347],{"class":59},[34,45629,45630],{"class":36,"line":17233},[34,45631,35008],{"class":40},[34,45633,45634,45636,45638,45640],{"class":36,"line":17247},[34,45635,3867],{"class":112},[34,45637,35015],{"class":59},[34,45639,26508],{"class":112},[34,45641,34659],{"class":59},[34,45643,45644,45646,45648],{"class":36,"line":17260},[34,45645,33073],{"class":59},[34,45647,447],{"class":112},[34,45649,33078],{"class":59},[34,45651,45652,45654,45656],{"class":36,"line":17265},[34,45653,33088],{"class":59},[34,45655,447],{"class":112},[34,45657,33093],{"class":59},[34,45659,45660],{"class":36,"line":17279},[34,45661,2864],{"emptyLinePlaceholder":540},[34,45663,45664],{"class":36,"line":17284},[34,45665,35044],{"class":40},[34,45667,45668],{"class":36,"line":17290},[34,45669,33338],{"class":59},[34,45671,45672],{"class":36,"line":17295},[34,45673,35053],{"class":40},[34,45675,45676,45678,45680],{"class":36,"line":17309},[34,45677,33123],{"class":59},[34,45679,447],{"class":112},[34,45681,33128],{"class":59},[34,45683,45684],{"class":36,"line":17314},[34,45685,35066],{"class":40},[34,45687,45688,45690,45692,45694,45696,45698,45700],{"class":36,"line":17319},[34,45689,33140],{"class":59},[34,45691,447],{"class":112},[34,45693,33145],{"class":59},[34,45695,33148],{"class":5680},[34,45697,447],{"class":112},[34,45699,64],{"class":63},[34,45701,623],{"class":59},[34,45703,45704],{"class":36,"line":17333},[34,45705,35087],{"class":40},[34,45707,45708,45710,45712],{"class":36,"line":17345},[34,45709,35092],{"class":59},[34,45711,447],{"class":112},[34,45713,35097],{"class":59},[34,45715,45716,45718,45720],{"class":36,"line":17350},[34,45717,35102],{"class":59},[34,45719,447],{"class":112},[34,45721,35107],{"class":59},[34,45723,45724,45726,45728,45730,45732,45734,45736,45738],{"class":36,"line":17363},[34,45725,35112],{"class":63},[34,45727,617],{"class":59},[34,45729,35117],{"class":187},[34,45731,35120],{"class":59},[34,45733,35123],{"class":187},[34,45735,67],{"class":59},[34,45737,35128],{"class":187},[34,45739,35131],{"class":59},[584,45741,45743],{"id":45742},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45745,45746],{},"猫狗分类任务",[14,45748,45749],{},"划分数据集和验证集",[25,45751,45753],{"className":27,"code":45752,"language":29,"meta":22,"style":22},"# 创建脚本，用于划分数据集和验证集\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",[31,45754,45755,45760,45767,45772,45783,45790,45794,45804,45818,45827,45831,45836,45846,45866,45870,45875,45885,45896,45909,45913,45918,45927,45937,45948,45952,45957,45967,45971,45976,45981,45986,45991,45996,46000,46010,46037,46050,46062,46089,46094,46099,46113,46118,46130,46145,46160,46168,46172,46177,46183,46195,46208,46213,46218,46223,46273,46279,46283],{"__ignoreMap":22},[34,45756,45757],{"class":36,"line":37},[34,45758,45759],{"class":40},"# 创建脚本，用于划分数据集和验证集\n",[34,45761,45762,45764],{"class":36,"line":44},[34,45763,30855],{"class":112},[34,45765,45766],{"class":59}," os\n",[34,45768,45769],{"class":36,"line":50},[34,45770,45771],{"class":40},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[34,45773,45774,45776,45779,45781],{"class":36,"line":56},[34,45775,31200],{"class":112},[34,45777,45778],{"class":59}," shutil ",[34,45780,30855],{"class":112},[34,45782,32285],{"class":59},[34,45784,45785,45787],{"class":36,"line":107},[34,45786,30855],{"class":112},[34,45788,45789],{"class":59}," random\n",[34,45791,45792],{"class":36,"line":196},[34,45793,2864],{"emptyLinePlaceholder":540},[34,45795,45796,45798,45801],{"class":36,"line":202},[34,45797,32410],{"class":112},[34,45799,45800],{"class":2427}," mkfile",[34,45802,45803],{"class":59},"(file):\n",[34,45805,45806,45808,45810,45813,45816],{"class":36,"line":207},[34,45807,3565],{"class":112},[34,45809,39392],{"class":112},[34,45811,45812],{"class":59}," os.path.exists(",[34,45814,45815],{"class":5680},"file",[34,45817,31249],{"class":59},[34,45819,45820,45823,45825],{"class":36,"line":222},[34,45821,45822],{"class":59},"        os.makedirs(",[34,45824,45815],{"class":5680},[34,45826,623],{"class":59},[34,45828,45829],{"class":36,"line":227},[34,45830,2864],{"emptyLinePlaceholder":540},[34,45832,45833],{"class":36,"line":232},[34,45834,45835],{"class":40},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[34,45837,45838,45841,45843],{"class":36,"line":238},[34,45839,45840],{"class":59},"file_path",[34,45842,447],{"class":112},[34,45844,45845],{"class":187},"'data_cat_dog'\n",[34,45847,45848,45851,45853,45856,45858,45861,45863],{"class":36,"line":244},[34,45849,45850],{"class":59},"flower_class",[34,45852,447],{"class":112},[34,45854,45855],{"class":59},"[cla ",[34,45857,3489],{"class":112},[34,45859,45860],{"class":59}," cla ",[34,45862,26508],{"class":112},[34,45864,45865],{"class":59}," os.listdir(file_path)]\n",[34,45867,45868],{"class":36,"line":250},[34,45869,2864],{"emptyLinePlaceholder":540},[34,45871,45872],{"class":36,"line":256},[34,45873,45874],{"class":40},"# 创建训练集train文件夹\n",[34,45876,45877,45880,45883],{"class":36,"line":261},[34,45878,45879],{"class":59},"mkfile(",[34,45881,45882],{"class":187},"'data\u002Ftrain'",[34,45884,623],{"class":59},[34,45886,45887,45889,45891,45893],{"class":36,"line":267},[34,45888,3489],{"class":112},[34,45890,45860],{"class":59},[34,45892,26508],{"class":112},[34,45894,45895],{"class":59}," flower_class:\n",[34,45897,45898,45901,45904,45906],{"class":36,"line":2138},[34,45899,45900],{"class":59},"    mkfile(",[34,45902,45903],{"class":187},"'data\u002Ftrain\u002F'",[34,45905,1088],{"class":112},[34,45907,45908],{"class":59},"cla)\n",[34,45910,45911],{"class":36,"line":2143},[34,45912,2864],{"emptyLinePlaceholder":540},[34,45914,45915],{"class":36,"line":2157},[34,45916,45917],{"class":40},"# 创建验证集val文件夹\n",[34,45919,45920,45922,45925],{"class":36,"line":2162},[34,45921,45879],{"class":59},[34,45923,45924],{"class":187},"'data\u002Ftest'",[34,45926,623],{"class":59},[34,45928,45929,45931,45933,45935],{"class":36,"line":2191},[34,45930,3489],{"class":112},[34,45932,45860],{"class":59},[34,45934,26508],{"class":112},[34,45936,45895],{"class":59},[34,45938,45939,45941,45944,45946],{"class":36,"line":2196},[34,45940,45900],{"class":59},[34,45942,45943],{"class":187},"'data\u002Ftest\u002F'",[34,45945,1088],{"class":112},[34,45947,45908],{"class":59},[34,45949,45950],{"class":36,"line":2213},[34,45951,2864],{"emptyLinePlaceholder":540},[34,45953,45954],{"class":36,"line":2218},[34,45955,45956],{"class":40},"# 划分比例，训练集：测试集=9：1\n",[34,45958,45959,45962,45964],{"class":36,"line":2223},[34,45960,45961],{"class":59},"split_rate",[34,45963,447],{"class":112},[34,45965,45966],{"class":63},"0.1\n",[34,45968,45969],{"class":36,"line":2228},[34,45970,2864],{"emptyLinePlaceholder":540},[34,45972,45973],{"class":36,"line":2242},[34,45974,45975],{"class":40},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[34,45977,45978],{"class":36,"line":2247},[34,45979,45980],{"class":40},"# cla_path：当前类别的原始图片路径\n",[34,45982,45983],{"class":36,"line":3041},[34,45984,45985],{"class":40},"# images：当前类别下所有图片的文件名列表\n",[34,45987,45988],{"class":36,"line":3055},[34,45989,45990],{"class":40},"# num：该类别图片总数\n",[34,45992,45993],{"class":36,"line":3063},[34,45994,45995],{"class":40},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[34,45997,45998],{"class":36,"line":3068},[34,45999,2864],{"emptyLinePlaceholder":540},[34,46001,46002,46004,46006,46008],{"class":36,"line":3074},[34,46003,3489],{"class":112},[34,46005,45860],{"class":59},[34,46007,26508],{"class":112},[34,46009,45895],{"class":59},[34,46011,46012,46015,46017,46020,46022,46025,46028,46030,46032,46034],{"class":36,"line":3080},[34,46013,46014],{"class":59},"    cla_path ",[34,46016,447],{"class":112},[34,46018,46019],{"class":59}," file_path ",[34,46021,1088],{"class":112},[34,46023,46024],{"class":187}," '\u002F'",[34,46026,46027],{"class":112}," +",[34,46029,45860],{"class":59},[34,46031,1088],{"class":112},[34,46033,46024],{"class":187},[34,46035,46036],{"class":40},"  # 某一类别的子目录\n",[34,46038,46039,46042,46044,46047],{"class":36,"line":3085},[34,46040,46041],{"class":59},"    images ",[34,46043,447],{"class":112},[34,46045,46046],{"class":59}," os.listdir(cla_path)  ",[34,46048,46049],{"class":40},"# iamges 列表存储了该目录下所有图像的名称\n",[34,46051,46052,46055,46057,46059],{"class":36,"line":8412},[34,46053,46054],{"class":59},"    num ",[34,46056,447],{"class":112},[34,46058,7795],{"class":63},[34,46060,46061],{"class":59},"(images)\n",[34,46063,46064,46067,46069,46072,46074,46076,46078,46081,46083,46086],{"class":36,"line":8436},[34,46065,46066],{"class":59},"    eval_index ",[34,46068,447],{"class":112},[34,46070,46071],{"class":59}," random.sample(images, ",[34,46073,1100],{"class":5680},[34,46075,447],{"class":112},[34,46077,620],{"class":63},[34,46079,46080],{"class":59},"(num ",[34,46082,1062],{"class":112},[34,46084,46085],{"class":59}," split_rate))  ",[34,46087,46088],{"class":40},"# 从images列表中随机抽取 k 个图像名称\n",[34,46090,46091],{"class":36,"line":8441},[34,46092,46093],{"class":40},"    # 遍历该类别下的所有图片\n",[34,46095,46096],{"class":36,"line":8447},[34,46097,46098],{"class":40},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[34,46100,46101,46103,46106,46108,46110],{"class":36,"line":8474},[34,46102,3665],{"class":112},[34,46104,46105],{"class":59}," index, image ",[34,46107,26508],{"class":112},[34,46109,32069],{"class":63},[34,46111,46112],{"class":59},"(images):\n",[34,46114,46115],{"class":36,"line":8479},[34,46116,46117],{"class":40},"        # eval_index 中保存验证集val的图像名称\n",[34,46119,46120,46122,46125,46127],{"class":36,"line":8485},[34,46121,2961],{"class":112},[34,46123,46124],{"class":59}," image ",[34,46126,26508],{"class":112},[34,46128,46129],{"class":59}," eval_index:\n",[34,46131,46132,46135,46137,46140,46142],{"class":36,"line":8497},[34,46133,46134],{"class":59},"            image_path ",[34,46136,447],{"class":112},[34,46138,46139],{"class":59}," cla_path ",[34,46141,1088],{"class":112},[34,46143,46144],{"class":59}," image\n",[34,46146,46147,46150,46152,46155,46157],{"class":36,"line":8509},[34,46148,46149],{"class":59},"            new_path ",[34,46151,447],{"class":112},[34,46153,46154],{"class":187}," 'data\u002Ftest\u002F'",[34,46156,46027],{"class":112},[34,46158,46159],{"class":59}," cla\n",[34,46161,46162,46165],{"class":36,"line":8521},[34,46163,46164],{"class":59},"            copy(image_path, new_path)  ",[34,46166,46167],{"class":40},"# 将选中的图像复制到新路径\n",[34,46169,46170],{"class":36,"line":10180},[34,46171,2864],{"emptyLinePlaceholder":540},[34,46173,46174],{"class":36,"line":10205},[34,46175,46176],{"class":40},"        # 其余的图像保存在训练集train中\n",[34,46178,46179,46181],{"class":36,"line":10228},[34,46180,2998],{"class":112},[34,46182,4203],{"class":59},[34,46184,46185,46187,46189,46191,46193],{"class":36,"line":10252},[34,46186,46134],{"class":59},[34,46188,447],{"class":112},[34,46190,46139],{"class":59},[34,46192,1088],{"class":112},[34,46194,46144],{"class":59},[34,46196,46197,46199,46201,46204,46206],{"class":36,"line":10257},[34,46198,46149],{"class":59},[34,46200,447],{"class":112},[34,46202,46203],{"class":187}," 'data\u002Ftrain\u002F'",[34,46205,46027],{"class":112},[34,46207,46159],{"class":59},[34,46209,46210],{"class":36,"line":10262},[34,46211,46212],{"class":59},"            copy(image_path, new_path)\n",[34,46214,46215],{"class":36,"line":10267},[34,46216,46217],{"class":40},"            # 打印进度条信息\n",[34,46219,46220],{"class":36,"line":10276},[34,46221,46222],{"class":40},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[34,46224,46225,46227,46229,46231,46234,46236,46238,46241,46243,46245,46247,46250,46253,46255,46257,46260,46263,46265,46267,46270],{"class":36,"line":10281},[34,46226,32914],{"class":63},[34,46228,617],{"class":59},[34,46230,860],{"class":187},[34,46232,46233],{"class":63},"\\r",[34,46235,1495],{"class":187},[34,46237,32922],{"class":63},[34,46239,46240],{"class":187},"] processing [",[34,46242,32922],{"class":63},[34,46244,1190],{"class":187},[34,46246,32922],{"class":63},[34,46248,46249],{"class":187},"]\"",[34,46251,46252],{"class":59},".format(cla, index ",[34,46254,1088],{"class":112},[34,46256,25583],{"class":63},[34,46258,46259],{"class":59},", num), ",[34,46261,46262],{"class":5680},"end",[34,46264,447],{"class":112},[34,46266,8116],{"class":187},[34,46268,46269],{"class":59},")  ",[34,46271,46272],{"class":40},"# processing bar\n",[34,46274,46275,46277],{"class":36,"line":10287},[34,46276,31762],{"class":63},[34,46278,2440],{"class":59},[34,46280,46281],{"class":36,"line":10308},[34,46282,2864],{"emptyLinePlaceholder":540},[34,46284,46285,46287,46289,46292],{"class":36,"line":10314},[34,46286,30878],{"class":63},[34,46288,617],{"class":59},[34,46290,46291],{"class":187},"\"processing done!\"",[34,46293,623],{"class":59},[14,46295,46296],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22462,46298,46300],{"id":46299},"_242模型代码","2.4.2.模型代码",[14,46302,46303],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[25,46305,46307],{"className":27,"code":46306,"language":29,"meta":22,"style":22},"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",[31,46308,46309,46315,46325,46335,46339,46355,46363,46377,46387,46391,46421,46425,46459,46505,46509,46543,46589,46593,46597,46631,46661,46665,46673,46687,46709,46731,46749,46753,46767,46771,46775,46791,46795,46803,46817,46827,46871,46875,46903,46907,46917,46945,46949,46985,46989,47017,47021,47031,47063,47095,47123,47127,47137,47169,47201,47233,47265,47297,47325,47329,47339,47371,47403,47415,47419,47431,47435,47439,47451,47459,47479,47483,47487,47491,47495,47499,47503,47517,47525,47533,47545,47559,47567,47571,47579,47589,47599,47609,47619,47629,47635,47639,47643,47655,47675,47683],{"__ignoreMap":22},[34,46310,46311,46313],{"class":36,"line":37},[34,46312,30855],{"class":112},[34,46314,30858],{"class":59},[34,46316,46317,46319,46321,46323],{"class":36,"line":44},[34,46318,31200],{"class":112},[34,46320,31203],{"class":59},[34,46322,30855],{"class":112},[34,46324,31208],{"class":59},[34,46326,46327,46329,46331,46333],{"class":36,"line":50},[34,46328,31200],{"class":112},[34,46330,31220],{"class":59},[34,46332,30855],{"class":112},[34,46334,31225],{"class":59},[34,46336,46337],{"class":36,"line":56},[34,46338,2864],{"emptyLinePlaceholder":540},[34,46340,46341,46343,46345,46347,46349,46351,46353],{"class":36,"line":107},[34,46342,15158],{"class":112},[34,46344,41955],{"class":2427},[34,46346,617],{"class":59},[34,46348,31241],{"class":2427},[34,46350,1164],{"class":59},[34,46352,31246],{"class":2427},[34,46354,31249],{"class":59},[34,46356,46357,46359,46361],{"class":36,"line":196},[34,46358,31264],{"class":112},[34,46360,31267],{"class":63},[34,46362,41974],{"class":59},[34,46364,46365,46367,46369,46371,46373,46375],{"class":36,"line":202},[34,46366,31280],{"class":63},[34,46368,41981],{"class":59},[34,46370,31286],{"class":63},[34,46372,31289],{"class":59},[34,46374,31292],{"class":63},[34,46376,2440],{"class":59},[34,46378,46379,46381,46383,46385],{"class":36,"line":207},[34,46380,31308],{"class":63},[34,46382,35233],{"class":59},[34,46384,447],{"class":112},[34,46386,35238],{"class":59},[34,46388,46389],{"class":36,"line":222},[34,46390,42004],{"class":40},[34,46392,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419],{"class":36,"line":227},[34,46394,31308],{"class":63},[34,46396,42011],{"class":59},[34,46398,447],{"class":112},[34,46400,31316],{"class":59},[34,46402,31319],{"class":5680},[34,46404,447],{"class":112},[34,46406,42022],{"class":59},[34,46408,31328],{"class":5680},[34,46410,447],{"class":112},[34,46412,42029],{"class":59},[34,46414,31337],{"class":5680},[34,46416,447],{"class":112},[34,46418,64],{"class":63},[34,46420,623],{"class":59},[34,46422,46423],{"class":36,"line":232},[34,46424,42042],{"class":40},[34,46426,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457],{"class":36,"line":238},[34,46428,31308],{"class":63},[34,46430,42049],{"class":59},[34,46432,447],{"class":112},[34,46434,31316],{"class":59},[34,46436,31319],{"class":5680},[34,46438,447],{"class":112},[34,46440,42022],{"class":59},[34,46442,31328],{"class":5680},[34,46444,447],{"class":112},[34,46446,42066],{"class":59},[34,46448,319],{"class":63},[34,46450,42071],{"class":59},[34,46452,31337],{"class":5680},[34,46454,447],{"class":112},[34,46456,64],{"class":63},[34,46458,623],{"class":59},[34,46460,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503],{"class":36,"line":244},[34,46462,31308],{"class":63},[34,46464,42086],{"class":59},[34,46466,447],{"class":112},[34,46468,31316],{"class":59},[34,46470,31319],{"class":5680},[34,46472,447],{"class":112},[34,46474,42066],{"class":59},[34,46476,319],{"class":63},[34,46478,42071],{"class":59},[34,46480,31328],{"class":5680},[34,46482,447],{"class":112},[34,46484,42066],{"class":59},[34,46486,64],{"class":63},[34,46488,42071],{"class":59},[34,46490,31337],{"class":5680},[34,46492,447],{"class":112},[34,46494,309],{"class":63},[34,46496,67],{"class":59},[34,46498,31346],{"class":5680},[34,46500,447],{"class":112},[34,46502,64],{"class":63},[34,46504,623],{"class":59},[34,46506,46507],{"class":36,"line":250},[34,46508,42131],{"class":40},[34,46510,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541],{"class":36,"line":256},[34,46512,31308],{"class":63},[34,46514,42138],{"class":59},[34,46516,447],{"class":112},[34,46518,31316],{"class":59},[34,46520,31319],{"class":5680},[34,46522,447],{"class":112},[34,46524,42022],{"class":59},[34,46526,31328],{"class":5680},[34,46528,447],{"class":112},[34,46530,42155],{"class":59},[34,46532,319],{"class":63},[34,46534,42071],{"class":59},[34,46536,31337],{"class":5680},[34,46538,447],{"class":112},[34,46540,64],{"class":63},[34,46542,623],{"class":59},[34,46544,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587],{"class":36,"line":261},[34,46546,31308],{"class":63},[34,46548,42174],{"class":59},[34,46550,447],{"class":112},[34,46552,31316],{"class":59},[34,46554,31319],{"class":5680},[34,46556,447],{"class":112},[34,46558,42155],{"class":59},[34,46560,319],{"class":63},[34,46562,42071],{"class":59},[34,46564,31328],{"class":5680},[34,46566,447],{"class":112},[34,46568,42155],{"class":59},[34,46570,64],{"class":63},[34,46572,42071],{"class":59},[34,46574,31337],{"class":5680},[34,46576,447],{"class":112},[34,46578,927],{"class":63},[34,46580,67],{"class":59},[34,46582,31346],{"class":5680},[34,46584,447],{"class":112},[34,46586,70],{"class":63},[34,46588,623],{"class":59},[34,46590,46591],{"class":36,"line":267},[34,46592,42219],{"class":40},[34,46594,46595],{"class":36,"line":2138},[34,46596,42224],{"class":40},[34,46598,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629],{"class":36,"line":2143},[34,46600,31308],{"class":63},[34,46602,42231],{"class":59},[34,46604,447],{"class":112},[34,46606,35291],{"class":59},[34,46608,31337],{"class":5680},[34,46610,447],{"class":112},[34,46612,309],{"class":63},[34,46614,67],{"class":59},[34,46616,31392],{"class":5680},[34,46618,447],{"class":112},[34,46620,64],{"class":63},[34,46622,67],{"class":59},[34,46624,31346],{"class":5680},[34,46626,447],{"class":112},[34,46628,64],{"class":63},[34,46630,623],{"class":59},[34,46632,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659],{"class":36,"line":2157},[34,46634,31308],{"class":63},[34,46636,42266],{"class":59},[34,46638,447],{"class":112},[34,46640,31316],{"class":59},[34,46642,31319],{"class":5680},[34,46644,447],{"class":112},[34,46646,42022],{"class":59},[34,46648,31328],{"class":5680},[34,46650,447],{"class":112},[34,46652,42283],{"class":59},[34,46654,31337],{"class":5680},[34,46656,447],{"class":112},[34,46658,64],{"class":63},[34,46660,623],{"class":59},[34,46662,46663],{"class":36,"line":2162},[34,46664,2864],{"emptyLinePlaceholder":540},[34,46666,46667,46669,46671],{"class":36,"line":2191},[34,46668,31264],{"class":112},[34,46670,31556],{"class":2427},[34,46672,31559],{"class":59},[34,46674,46675,46677,46679,46681,46683,46685],{"class":36,"line":2196},[34,46676,42308],{"class":59},[34,46678,447],{"class":112},[34,46680,31286],{"class":63},[34,46682,35646],{"class":59},[34,46684,31286],{"class":63},[34,46686,42319],{"class":59},[34,46688,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707],{"class":36,"line":2213},[34,46690,7549],{"class":59},[34,46692,447],{"class":112},[34,46694,31286],{"class":63},[34,46696,35646],{"class":59},[34,46698,31286],{"class":63},[34,46700,42334],{"class":59},[34,46702,31286],{"class":63},[34,46704,35646],{"class":59},[34,46706,31286],{"class":63},[34,46708,42343],{"class":59},[34,46710,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729],{"class":36,"line":2218},[34,46712,42348],{"class":59},[34,46714,447],{"class":112},[34,46716,31286],{"class":63},[34,46718,35646],{"class":59},[34,46720,31286],{"class":63},[34,46722,42359],{"class":59},[34,46724,31286],{"class":63},[34,46726,35646],{"class":59},[34,46728,31286],{"class":63},[34,46730,42368],{"class":59},[34,46732,46733,46735,46737,46739,46741,46743,46745,46747],{"class":36,"line":2223},[34,46734,42373],{"class":59},[34,46736,447],{"class":112},[34,46738,31286],{"class":63},[34,46740,35646],{"class":59},[34,46742,31286],{"class":63},[34,46744,42384],{"class":59},[34,46746,31286],{"class":63},[34,46748,42389],{"class":59},[34,46750,46751],{"class":36,"line":2228},[34,46752,42394],{"class":40},[34,46754,46755,46757,46759,46761,46763,46765],{"class":36,"line":2242},[34,46756,15216],{"class":112},[34,46758,42401],{"class":59},[34,46760,33148],{"class":5680},[34,46762,447],{"class":112},[34,46764,64],{"class":63},[34,46766,623],{"class":59},[34,46768,46769],{"class":36,"line":2247},[34,46770,2864],{"emptyLinePlaceholder":540},[34,46772,46773],{"class":36,"line":3041},[34,46774,42422],{"class":40},[34,46776,46777,46779,46781,46783,46785,46787,46789],{"class":36,"line":3055},[34,46778,15158],{"class":112},[34,46780,42429],{"class":2427},[34,46782,617],{"class":59},[34,46784,31241],{"class":2427},[34,46786,1164],{"class":59},[34,46788,31246],{"class":2427},[34,46790,31249],{"class":59},[34,46792,46793],{"class":36,"line":3063},[34,46794,42444],{"class":40},[34,46796,46797,46799,46801],{"class":36,"line":3068},[34,46798,31264],{"class":112},[34,46800,31267],{"class":63},[34,46802,42453],{"class":59},[34,46804,46805,46807,46809,46811,46813,46815],{"class":36,"line":3074},[34,46806,31280],{"class":63},[34,46808,42460],{"class":59},[34,46810,31286],{"class":63},[34,46812,31289],{"class":59},[34,46814,31292],{"class":63},[34,46816,2440],{"class":59},[34,46818,46819,46821,46823,46825],{"class":36,"line":3080},[34,46820,31308],{"class":63},[34,46822,42475],{"class":59},[34,46824,447],{"class":112},[34,46826,38471],{"class":59},[34,46828,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869],{"class":36,"line":3085},[34,46830,38476],{"class":59},[34,46832,31319],{"class":5680},[34,46834,447],{"class":112},[34,46836,309],{"class":63},[34,46838,67],{"class":59},[34,46840,31328],{"class":5680},[34,46842,447],{"class":112},[34,46844,813],{"class":63},[34,46846,67],{"class":59},[34,46848,31337],{"class":5680},[34,46850,447],{"class":112},[34,46852,977],{"class":63},[34,46854,67],{"class":59},[34,46856,31392],{"class":5680},[34,46858,447],{"class":112},[34,46860,70],{"class":63},[34,46862,67],{"class":59},[34,46864,31346],{"class":5680},[34,46866,447],{"class":112},[34,46868,309],{"class":63},[34,46870,38509],{"class":59},[34,46872,46873],{"class":36,"line":8412},[34,46874,38514],{"class":59},[34,46876,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901],{"class":36,"line":8436},[34,46878,38559],{"class":59},[34,46880,31337],{"class":5680},[34,46882,447],{"class":112},[34,46884,309],{"class":63},[34,46886,67],{"class":59},[34,46888,31392],{"class":5680},[34,46890,447],{"class":112},[34,46892,70],{"class":63},[34,46894,67],{"class":59},[34,46896,31346],{"class":5680},[34,46898,447],{"class":112},[34,46900,64],{"class":63},[34,46902,623],{"class":59},[34,46904,46905],{"class":36,"line":8441},[34,46906,38588],{"class":59},[34,46908,46909,46911,46913,46915],{"class":36,"line":8447},[34,46910,31308],{"class":63},[34,46912,42566],{"class":59},[34,46914,447],{"class":112},[34,46916,38471],{"class":59},[34,46918,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943],{"class":36,"line":8474},[34,46920,38476],{"class":59},[34,46922,31319],{"class":5680},[34,46924,447],{"class":112},[34,46926,813],{"class":63},[34,46928,67],{"class":59},[34,46930,31328],{"class":5680},[34,46932,447],{"class":112},[34,46934,813],{"class":63},[34,46936,67],{"class":59},[34,46938,31337],{"class":5680},[34,46940,447],{"class":112},[34,46942,64],{"class":63},[34,46944,38509],{"class":59},[34,46946,46947],{"class":36,"line":8479},[34,46948,38514],{"class":59},[34,46950,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983],{"class":36,"line":8485},[34,46952,38476],{"class":59},[34,46954,31319],{"class":5680},[34,46956,447],{"class":112},[34,46958,813],{"class":63},[34,46960,67],{"class":59},[34,46962,31328],{"class":5680},[34,46964,447],{"class":112},[34,46966,42621],{"class":63},[34,46968,67],{"class":59},[34,46970,31337],{"class":5680},[34,46972,447],{"class":112},[34,46974,309],{"class":63},[34,46976,67],{"class":59},[34,46978,31346],{"class":5680},[34,46980,447],{"class":112},[34,46982,64],{"class":63},[34,46984,38509],{"class":59},[34,46986,46987],{"class":36,"line":8497},[34,46988,38514],{"class":59},[34,46990,46991,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015],{"class":36,"line":8509},[34,46992,38559],{"class":59},[34,46994,31337],{"class":5680},[34,46996,447],{"class":112},[34,46998,309],{"class":63},[34,47000,67],{"class":59},[34,47002,31392],{"class":5680},[34,47004,447],{"class":112},[34,47006,70],{"class":63},[34,47008,67],{"class":59},[34,47010,31346],{"class":5680},[34,47012,447],{"class":112},[34,47014,64],{"class":63},[34,47016,623],{"class":59},[34,47018,47019],{"class":36,"line":8521},[34,47020,38588],{"class":59},[34,47022,47023,47025,47027,47029],{"class":36,"line":10180},[34,47024,31308],{"class":63},[34,47026,42682],{"class":59},[34,47028,447],{"class":112},[34,47030,38471],{"class":59},[34,47032,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059,47061],{"class":36,"line":10205},[34,47034,42691],{"class":59},[34,47036,42621],{"class":63},[34,47038,67],{"class":59},[34,47040,813],{"class":63},[34,47042,42700],{"class":59},[34,47044,819],{"class":63},[34,47046,67],{"class":59},[34,47048,32533],{"class":63},[34,47050,312],{"class":59},[34,47052,1207],{"class":63},[34,47054,67],{"class":59},[34,47056,807],{"class":63},[34,47058,42717],{"class":59},[34,47060,807],{"class":63},[34,47062,38509],{"class":59},[34,47064,47065,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093],{"class":36,"line":10228},[34,47066,42691],{"class":59},[34,47068,35332],{"class":63},[34,47070,67],{"class":59},[34,47072,32533],{"class":63},[34,47074,42700],{"class":59},[34,47076,32533],{"class":63},[34,47078,67],{"class":59},[34,47080,42621],{"class":63},[34,47082,312],{"class":59},[34,47084,807],{"class":63},[34,47086,67],{"class":59},[34,47088,819],{"class":63},[34,47090,42717],{"class":59},[34,47092,813],{"class":63},[34,47094,38509],{"class":59},[34,47096,47097,47099,47101,47103,47105,47107,47109,47111,47113,47115,47117,47119,47121],{"class":36,"line":10252},[34,47098,38559],{"class":59},[34,47100,31337],{"class":5680},[34,47102,447],{"class":112},[34,47104,309],{"class":63},[34,47106,67],{"class":59},[34,47108,31392],{"class":5680},[34,47110,447],{"class":112},[34,47112,70],{"class":63},[34,47114,67],{"class":59},[34,47116,31346],{"class":5680},[34,47118,447],{"class":112},[34,47120,64],{"class":63},[34,47122,623],{"class":59},[34,47124,47125],{"class":36,"line":10257},[34,47126,38588],{"class":59},[34,47128,47129,47131,47133,47135],{"class":36,"line":10262},[34,47130,31308],{"class":63},[34,47132,42792],{"class":59},[34,47134,447],{"class":112},[34,47136,38471],{"class":59},[34,47138,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167],{"class":36,"line":10267},[34,47140,42691],{"class":59},[34,47142,42803],{"class":63},[34,47144,67],{"class":59},[34,47146,42621],{"class":63},[34,47148,42700],{"class":59},[34,47150,819],{"class":63},[34,47152,67],{"class":59},[34,47154,42816],{"class":63},[34,47156,312],{"class":59},[34,47158,1207],{"class":63},[34,47160,67],{"class":59},[34,47162,1213],{"class":63},[34,47164,42717],{"class":59},[34,47166,813],{"class":63},[34,47168,38509],{"class":59},[34,47170,47171,47173,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195,47197,47199],{"class":36,"line":10276},[34,47172,42691],{"class":59},[34,47174,38919],{"class":63},[34,47176,67],{"class":59},[34,47178,21512],{"class":63},[34,47180,42700],{"class":59},[34,47182,1224],{"class":63},[34,47184,67],{"class":59},[34,47186,31964],{"class":63},[34,47188,312],{"class":59},[34,47190,1406],{"class":63},[34,47192,67],{"class":59},[34,47194,813],{"class":63},[34,47196,42717],{"class":59},[34,47198,813],{"class":63},[34,47200,38509],{"class":59},[34,47202,47203,47205,47207,47209,47211,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231],{"class":36,"line":10281},[34,47204,42691],{"class":59},[34,47206,38919],{"class":63},[34,47208,67],{"class":59},[34,47210,32533],{"class":63},[34,47212,42700],{"class":59},[34,47214,32533],{"class":63},[34,47216,67],{"class":59},[34,47218,35332],{"class":63},[34,47220,312],{"class":59},[34,47222,1406],{"class":63},[34,47224,67],{"class":59},[34,47226,813],{"class":63},[34,47228,42717],{"class":59},[34,47230,813],{"class":63},[34,47232,38509],{"class":59},[34,47234,47235,47237,47239,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263],{"class":36,"line":10287},[34,47236,42691],{"class":59},[34,47238,38919],{"class":63},[34,47240,67],{"class":59},[34,47242,1224],{"class":63},[34,47244,42700],{"class":59},[34,47246,32533],{"class":63},[34,47248,67],{"class":59},[34,47250,42913],{"class":63},[34,47252,312],{"class":59},[34,47254,807],{"class":63},[34,47256,67],{"class":59},[34,47258,813],{"class":63},[34,47260,42717],{"class":59},[34,47262,813],{"class":63},[34,47264,38509],{"class":59},[34,47266,47267,47269,47271,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295],{"class":36,"line":10308},[34,47268,42691],{"class":59},[34,47270,42934],{"class":63},[34,47272,67],{"class":59},[34,47274,35332],{"class":63},[34,47276,42700],{"class":59},[34,47278,21512],{"class":63},[34,47280,67],{"class":59},[34,47282,42947],{"class":63},[34,47284,312],{"class":59},[34,47286,807],{"class":63},[34,47288,67],{"class":59},[34,47290,32533],{"class":63},[34,47292,42717],{"class":59},[34,47294,32533],{"class":63},[34,47296,38509],{"class":59},[34,47298,47299,47301,47303,47305,47307,47309,47311,47313,47315,47317,47319,47321,47323],{"class":36,"line":10314},[34,47300,38559],{"class":59},[34,47302,31337],{"class":5680},[34,47304,447],{"class":112},[34,47306,309],{"class":63},[34,47308,67],{"class":59},[34,47310,31392],{"class":5680},[34,47312,447],{"class":112},[34,47314,70],{"class":63},[34,47316,67],{"class":59},[34,47318,31346],{"class":5680},[34,47320,447],{"class":112},[34,47322,64],{"class":63},[34,47324,623],{"class":59},[34,47326,47327],{"class":36,"line":10328},[34,47328,38588],{"class":59},[34,47330,47331,47333,47335,47337],{"class":36,"line":10334},[34,47332,31308],{"class":63},[34,47334,43000],{"class":59},[34,47336,447],{"class":112},[34,47338,38471],{"class":59},[34,47340,47341,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369],{"class":36,"line":10361},[34,47342,42691],{"class":59},[34,47344,43011],{"class":63},[34,47346,67],{"class":59},[34,47348,35332],{"class":63},[34,47350,42700],{"class":59},[34,47352,21512],{"class":63},[34,47354,67],{"class":59},[34,47356,42947],{"class":63},[34,47358,312],{"class":59},[34,47360,807],{"class":63},[34,47362,67],{"class":59},[34,47364,32533],{"class":63},[34,47366,42717],{"class":59},[34,47368,32533],{"class":63},[34,47370,38509],{"class":59},[34,47372,47373,47375,47377,47379,47381,47383,47385,47387,47389,47391,47393,47395,47397,47399,47401],{"class":36,"line":10370},[34,47374,42691],{"class":59},[34,47376,43011],{"class":63},[34,47378,67],{"class":59},[34,47380,35402],{"class":63},[34,47382,42700],{"class":59},[34,47384,42621],{"class":63},[34,47386,67],{"class":59},[34,47388,35402],{"class":63},[34,47390,312],{"class":59},[34,47392,1213],{"class":63},[34,47394,67],{"class":59},[34,47396,32533],{"class":63},[34,47398,42717],{"class":59},[34,47400,32533],{"class":63},[34,47402,38509],{"class":59},[34,47404,47405,47407,47409,47411,47413],{"class":36,"line":10376},[34,47406,43074],{"class":59},[34,47408,64],{"class":63},[34,47410,67],{"class":59},[34,47412,64],{"class":63},[34,47414,43083],{"class":59},[34,47416,47417],{"class":36,"line":10384},[34,47418,39252],{"class":59},[34,47420,47421,47423,47425,47427,47429],{"class":36,"line":10389},[34,47422,39257],{"class":59},[34,47424,43094],{"class":63},[34,47426,67],{"class":59},[34,47428,70],{"class":63},[34,47430,623],{"class":59},[34,47432,47433],{"class":36,"line":17068},[34,47434,38588],{"class":59},[34,47436,47437],{"class":36,"line":17074},[34,47438,43109],{"class":40},[34,47440,47441,47443,47445,47447,47449],{"class":36,"line":17097},[34,47442,3867],{"class":112},[34,47444,39330],{"class":59},[34,47446,26508],{"class":112},[34,47448,39335],{"class":63},[34,47450,39338],{"class":59},[34,47452,47453,47455,47457],{"class":36,"line":17103},[34,47454,5106],{"class":112},[34,47456,39350],{"class":63},[34,47458,39353],{"class":59},[34,47460,47461,47463,47465,47467,47469,47471,47473,47475,47477],{"class":36,"line":17126},[34,47462,39363],{"class":59},[34,47464,43136],{"class":5680},[34,47466,447],{"class":112},[34,47468,43141],{"class":187},[34,47470,67],{"class":59},[34,47472,39366],{"class":5680},[34,47474,447],{"class":112},[34,47476,39371],{"class":187},[34,47478,623],{"class":59},[34,47480,47481],{"class":36,"line":17140},[34,47482,43156],{"class":40},[34,47484,47485],{"class":36,"line":17160},[34,47486,43161],{"class":40},[34,47488,47489],{"class":36,"line":17166},[34,47490,43166],{"class":40},[34,47492,47493],{"class":36,"line":17177},[34,47494,43171],{"class":40},[34,47496,47497],{"class":36,"line":17200},[34,47498,43176],{"class":40},[34,47500,47501],{"class":36,"line":17222},[34,47502,43181],{"class":40},[34,47504,47505,47507,47509,47511,47513,47515],{"class":36,"line":17227},[34,47506,39383],{"class":112},[34,47508,39386],{"class":59},[34,47510,39389],{"class":112},[34,47512,39392],{"class":112},[34,47514,39395],{"class":63},[34,47516,4203],{"class":59},[34,47518,47519,47521,47523],{"class":36,"line":17233},[34,47520,39407],{"class":59},[34,47522,319],{"class":63},[34,47524,623],{"class":59},[34,47526,47527,47529,47531],{"class":36,"line":17247},[34,47528,43208],{"class":112},[34,47530,39350],{"class":63},[34,47532,39426],{"class":59},[34,47534,47535,47537,47539,47541,47543],{"class":36,"line":17260},[34,47536,43217],{"class":59},[34,47538,319],{"class":63},[34,47540,67],{"class":59},[34,47542,39448],{"class":63},[34,47544,623],{"class":59},[34,47546,47547,47549,47551,47553,47555,47557],{"class":36,"line":17265},[34,47548,43230],{"class":112},[34,47550,39386],{"class":59},[34,47552,39389],{"class":112},[34,47554,39392],{"class":112},[34,47556,39395],{"class":63},[34,47558,4203],{"class":59},[34,47560,47561,47563,47565],{"class":36,"line":17279},[34,47562,43245],{"class":59},[34,47564,319],{"class":63},[34,47566,623],{"class":59},[34,47568,47569],{"class":36,"line":17284},[34,47570,35627],{"class":40},[34,47572,47573,47575,47577],{"class":36,"line":17290},[34,47574,31264],{"class":112},[34,47576,31556],{"class":2427},[34,47578,31559],{"class":59},[34,47580,47581,47583,47585,47587],{"class":36,"line":17295},[34,47582,31564],{"class":59},[34,47584,447],{"class":112},[34,47586,31286],{"class":63},[34,47588,43272],{"class":59},[34,47590,47591,47593,47595,47597],{"class":36,"line":17309},[34,47592,31564],{"class":59},[34,47594,447],{"class":112},[34,47596,31286],{"class":63},[34,47598,43283],{"class":59},[34,47600,47601,47603,47605,47607],{"class":36,"line":17314},[34,47602,31564],{"class":59},[34,47604,447],{"class":112},[34,47606,31286],{"class":63},[34,47608,43294],{"class":59},[34,47610,47611,47613,47615,47617],{"class":36,"line":17319},[34,47612,31564],{"class":59},[34,47614,447],{"class":112},[34,47616,31286],{"class":63},[34,47618,43305],{"class":59},[34,47620,47621,47623,47625,47627],{"class":36,"line":17333},[34,47622,31564],{"class":59},[34,47624,447],{"class":112},[34,47626,31286],{"class":63},[34,47628,43316],{"class":59},[34,47630,47631,47633],{"class":36,"line":17345},[34,47632,15216],{"class":112},[34,47634,31672],{"class":59},[34,47636,47637],{"class":36,"line":17350},[34,47638,2864],{"emptyLinePlaceholder":540},[34,47640,47641],{"class":36,"line":17363},[34,47642,43331],{"class":40},[34,47644,47645,47647,47649,47651,47653],{"class":36,"line":17368},[34,47646,2002],{"class":112},[34,47648,31683],{"class":63},[34,47650,3413],{"class":112},[34,47652,31688],{"class":187},[34,47654,4203],{"class":59},[34,47656,47657,47659,47661,47663,47665,47667,47669,47671,47673],{"class":36,"line":17373},[34,47658,31700],{"class":59},[34,47660,447],{"class":112},[34,47662,30914],{"class":59},[34,47664,31707],{"class":187},[34,47666,2168],{"class":112},[34,47668,31712],{"class":59},[34,47670,2165],{"class":112},[34,47672,30939],{"class":187},[34,47674,623],{"class":59},[34,47676,47677,47679,47681],{"class":36,"line":17378},[34,47678,31752],{"class":59},[34,47680,447],{"class":112},[34,47682,43372],{"class":59},[34,47684,47685,47687,47689,47691,47693,47695,47697,47699],{"class":36,"line":17391},[34,47686,31762],{"class":63},[34,47688,31765],{"class":59},[34,47690,64],{"class":63},[34,47692,67],{"class":59},[34,47694,31964],{"class":63},[34,47696,67],{"class":59},[34,47698,31964],{"class":63},[34,47700,31778],{"class":59},[22462,47702,47704],{"id":47703},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47706,47707],{},"计算图片的均值与方差，用于训练中归一化处理操作",[25,47709,47711],{"className":27,"code":47710,"language":29,"meta":22,"style":22},"# 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",[31,47712,47713,47718,47731,47736,47742,47747,47757,47761,47766,47776,47780,47785,47795,47812,47816,47821,47833,47845,47876,47885,47895,47905,47909,47914,47929,47933,47938,47943,47948,47958,47963,47988,47992,47997,48012,48016,48029,48033,48038,48043,48048,48053,48058,48068,48078,48101,48109,48117,48125,48129,48141,48145,48150,48154,48158,48165,48185,48209,48216,48230,48235,48240,48244,48258,48262,48274],{"__ignoreMap":22},[34,47714,47715],{"class":36,"line":37},[34,47716,47717],{"class":40},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[34,47719,47720,47722,47725,47728],{"class":36,"line":44},[34,47721,31200],{"class":112},[34,47723,47724],{"class":63}," PIL",[34,47726,47727],{"class":112}," import",[34,47729,47730],{"class":59}," Image\n",[34,47732,47733],{"class":36,"line":50},[34,47734,47735],{"class":40},"# os 用来处理文件夹和文件路径\n",[34,47737,47738,47740],{"class":36,"line":56},[34,47739,30855],{"class":112},[34,47741,45766],{"class":59},[34,47743,47744],{"class":36,"line":107},[34,47745,47746],{"class":40},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[34,47748,47749,47751,47753,47755],{"class":36,"line":196},[34,47750,30855],{"class":112},[34,47752,31843],{"class":59},[34,47754,31846],{"class":112},[34,47756,31849],{"class":59},[34,47758,47759],{"class":36,"line":202},[34,47760,2864],{"emptyLinePlaceholder":540},[34,47762,47763],{"class":36,"line":207},[34,47764,47765],{"class":40},"# 文件夹路径，包含所有图片文件\n",[34,47767,47768,47771,47773],{"class":36,"line":222},[34,47769,47770],{"class":59},"folder_path ",[34,47772,447],{"class":112},[34,47774,47775],{"class":187}," 'data_cat_dog'\n",[34,47777,47778],{"class":36,"line":227},[34,47779,2864],{"emptyLinePlaceholder":540},[34,47781,47782],{"class":36,"line":232},[34,47783,47784],{"class":40},"# 初始化累积变量\n",[34,47786,47787,47790,47792],{"class":36,"line":238},[34,47788,47789],{"class":59},"total_pixels ",[34,47791,447],{"class":112},[34,47793,47794],{"class":63}," 0\n",[34,47796,47797,47800,47802,47805,47807,47809],{"class":36,"line":244},[34,47798,47799],{"class":59},"sum_normalized_pixel_values ",[34,47801,447],{"class":112},[34,47803,47804],{"class":59}," np.zeros(",[34,47806,309],{"class":63},[34,47808,46269],{"class":59},[34,47810,47811],{"class":40},"# 如果是RGB图像，需要三个通道的均值和方差\n",[34,47813,47814],{"class":36,"line":250},[34,47815,2864],{"emptyLinePlaceholder":540},[34,47817,47818],{"class":36,"line":256},[34,47819,47820],{"class":40},"# 遍历文件夹中的图片文件\n",[34,47822,47823,47825,47828,47830],{"class":36,"line":261},[34,47824,3489],{"class":112},[34,47826,47827],{"class":59}," root, dirs, files ",[34,47829,26508],{"class":112},[34,47831,47832],{"class":59}," os.walk(folder_path):\n",[34,47834,47835,47837,47840,47842],{"class":36,"line":267},[34,47836,3665],{"class":112},[34,47838,47839],{"class":59}," filename ",[34,47841,26508],{"class":112},[34,47843,47844],{"class":59}," files:\n",[34,47846,47847,47849,47852,47855,47857,47860,47862,47865,47867,47870,47873],{"class":36,"line":2138},[34,47848,2961],{"class":112},[34,47850,47851],{"class":59}," filename.endswith((",[34,47853,47854],{"class":187},"'.jpg'",[34,47856,12899],{"class":59},[34,47858,47859],{"class":187},"'.jpeg'",[34,47861,12899],{"class":59},[34,47863,47864],{"class":187},"'.png'",[34,47866,12899],{"class":59},[34,47868,47869],{"class":187},"'.bmp'",[34,47871,47872],{"class":59},")):  ",[34,47874,47875],{"class":40},"# 可根据实际情况添加其他格式\n",[34,47877,47878,47880,47882],{"class":36,"line":2143},[34,47879,46134],{"class":59},[34,47881,447],{"class":112},[34,47883,47884],{"class":59}," os.path.join(root, filename)\n",[34,47886,47887,47890,47892],{"class":36,"line":2157},[34,47888,47889],{"class":59},"            image ",[34,47891,447],{"class":112},[34,47893,47894],{"class":59}," Image.open(image_path)\n",[34,47896,47897,47900,47902],{"class":36,"line":2162},[34,47898,47899],{"class":59},"            image_array ",[34,47901,447],{"class":112},[34,47903,47904],{"class":59}," np.array(image)\n",[34,47906,47907],{"class":36,"line":2191},[34,47908,2864],{"emptyLinePlaceholder":540},[34,47910,47911],{"class":36,"line":2196},[34,47912,47913],{"class":40},"            # 归一化像素值到0-1之间\n",[34,47915,47916,47919,47921,47924,47926],{"class":36,"line":2213},[34,47917,47918],{"class":59},"            normalized_image_array ",[34,47920,447],{"class":112},[34,47922,47923],{"class":59}," image_array ",[34,47925,1190],{"class":112},[34,47927,47928],{"class":63}," 255.0\n",[34,47930,47931],{"class":36,"line":2218},[34,47932,2864],{"emptyLinePlaceholder":540},[34,47934,47935],{"class":36,"line":2223},[34,47936,47937],{"class":40},"            # print(image_path)\n",[34,47939,47940],{"class":36,"line":2228},[34,47941,47942],{"class":40},"            # print(normalized_image_array.shape)\n",[34,47944,47945],{"class":36,"line":2242},[34,47946,47947],{"class":40},"            # 累积归一化后的像素值和像素数量\n",[34,47949,47950,47953,47955],{"class":36,"line":2247},[34,47951,47952],{"class":59},"            total_pixels ",[34,47954,9941],{"class":112},[34,47956,47957],{"class":59}," normalized_image_array.size\n",[34,47959,47960],{"class":36,"line":3041},[34,47961,47962],{"class":40},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[34,47964,47965,47968,47970,47973,47976,47978,47980,47982,47984,47986],{"class":36,"line":3055},[34,47966,47967],{"class":59},"            sum_normalized_pixel_values ",[34,47969,9941],{"class":112},[34,47971,47972],{"class":59}," np.sum(normalized_image_array, ",[34,47974,47975],{"class":5680},"axis",[34,47977,447],{"class":112},[34,47979,617],{"class":59},[34,47981,319],{"class":63},[34,47983,12899],{"class":59},[34,47985,64],{"class":63},[34,47987,30960],{"class":59},[34,47989,47990],{"class":36,"line":3063},[34,47991,2864],{"emptyLinePlaceholder":540},[34,47993,47994],{"class":36,"line":3068},[34,47995,47996],{"class":40},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[34,47998,47999,48002,48004,48007,48009],{"class":36,"line":3074},[34,48000,48001],{"class":59},"mean ",[34,48003,447],{"class":112},[34,48005,48006],{"class":59}," sum_normalized_pixel_values ",[34,48008,1190],{"class":112},[34,48010,48011],{"class":59}," total_pixels\n",[34,48013,48014],{"class":36,"line":3080},[34,48015,2864],{"emptyLinePlaceholder":540},[34,48017,48018,48021,48023,48025,48027],{"class":36,"line":3085},[34,48019,48020],{"class":59},"sum_squared_diff ",[34,48022,447],{"class":112},[34,48024,47804],{"class":59},[34,48026,309],{"class":63},[34,48028,623],{"class":59},[34,48030,48031],{"class":36,"line":8412},[34,48032,2864],{"emptyLinePlaceholder":540},[34,48034,48035],{"class":36,"line":8436},[34,48036,48037],{"class":40},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[34,48039,48040],{"class":36,"line":8441},[34,48041,48042],{"class":40},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[34,48044,48045],{"class":36,"line":8447},[34,48046,48047],{"class":40},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[34,48049,48050],{"class":36,"line":8474},[34,48051,48052],{"class":40},"# Image.open(image_path)：打开图片\n",[34,48054,48055],{"class":36,"line":8479},[34,48056,48057],{"class":40},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[34,48059,48060,48062,48064,48066],{"class":36,"line":8485},[34,48061,3489],{"class":112},[34,48063,47827],{"class":59},[34,48065,26508],{"class":112},[34,48067,47832],{"class":59},[34,48069,48070,48072,48074,48076],{"class":36,"line":8497},[34,48071,3665],{"class":112},[34,48073,47839],{"class":59},[34,48075,26508],{"class":112},[34,48077,47844],{"class":59},[34,48079,48080,48082,48084,48086,48088,48090,48092,48094,48096,48098],{"class":36,"line":8509},[34,48081,2961],{"class":112},[34,48083,47851],{"class":59},[34,48085,47854],{"class":187},[34,48087,12899],{"class":59},[34,48089,47859],{"class":187},[34,48091,12899],{"class":59},[34,48093,47864],{"class":187},[34,48095,12899],{"class":59},[34,48097,47869],{"class":187},[34,48099,48100],{"class":59},")):\n",[34,48102,48103,48105,48107],{"class":36,"line":8521},[34,48104,46134],{"class":59},[34,48106,447],{"class":112},[34,48108,47884],{"class":59},[34,48110,48111,48113,48115],{"class":36,"line":10180},[34,48112,47889],{"class":59},[34,48114,447],{"class":112},[34,48116,47894],{"class":59},[34,48118,48119,48121,48123],{"class":36,"line":10205},[34,48120,47899],{"class":59},[34,48122,447],{"class":112},[34,48124,47904],{"class":59},[34,48126,48127],{"class":36,"line":10228},[34,48128,47913],{"class":40},[34,48130,48131,48133,48135,48137,48139],{"class":36,"line":10252},[34,48132,47918],{"class":59},[34,48134,447],{"class":112},[34,48136,47923],{"class":59},[34,48138,1190],{"class":112},[34,48140,47928],{"class":63},[34,48142,48143],{"class":36,"line":10257},[34,48144,47942],{"class":40},[34,48146,48147],{"class":36,"line":10262},[34,48148,48149],{"class":40},"            # print(mean.shape)\n",[34,48151,48152],{"class":36,"line":10267},[34,48153,47937],{"class":40},[34,48155,48156],{"class":36,"line":10276},[34,48157,2864],{"emptyLinePlaceholder":540},[34,48159,48160,48163],{"class":36,"line":10281},[34,48161,48162],{"class":112},"            try",[34,48164,4203],{"class":59},[34,48166,48167,48170,48172,48175,48177,48180,48182],{"class":36,"line":10287},[34,48168,48169],{"class":59},"                diff ",[34,48171,447],{"class":112},[34,48173,48174],{"class":59}," (normalized_image_array ",[34,48176,113],{"class":112},[34,48178,48179],{"class":59}," mean) ",[34,48181,11125],{"class":112},[34,48183,48184],{"class":63}," 2\n",[34,48186,48187,48190,48192,48195,48197,48199,48201,48203,48205,48207],{"class":36,"line":10308},[34,48188,48189],{"class":59},"                sum_squared_diff ",[34,48191,9941],{"class":112},[34,48193,48194],{"class":59}," np.sum(diff, ",[34,48196,47975],{"class":5680},[34,48198,447],{"class":112},[34,48200,617],{"class":59},[34,48202,319],{"class":63},[34,48204,12899],{"class":59},[34,48206,64],{"class":63},[34,48208,30960],{"class":59},[34,48210,48211,48214],{"class":36,"line":10314},[34,48212,48213],{"class":112},"            except",[34,48215,4203],{"class":59},[34,48217,48218,48221,48223,48225,48228],{"class":36,"line":10328},[34,48219,48220],{"class":63},"                print",[34,48222,617],{"class":59},[34,48224,667],{"class":112},[34,48226,48227],{"class":187},"\"捕获到自定义异常\"",[34,48229,623],{"class":59},[34,48231,48232],{"class":36,"line":10334},[34,48233,48234],{"class":40},"            # diff = (normalized_image_array - mean) ** 2\n",[34,48236,48237],{"class":36,"line":10361},[34,48238,48239],{"class":40},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[34,48241,48242],{"class":36,"line":10370},[34,48243,2864],{"emptyLinePlaceholder":540},[34,48245,48246,48249,48251,48254,48256],{"class":36,"line":10376},[34,48247,48248],{"class":59},"variance ",[34,48250,447],{"class":112},[34,48252,48253],{"class":59}," sum_squared_diff ",[34,48255,1190],{"class":112},[34,48257,48011],{"class":59},[34,48259,48260],{"class":36,"line":10384},[34,48261,2864],{"emptyLinePlaceholder":540},[34,48263,48264,48266,48268,48271],{"class":36,"line":10389},[34,48265,30878],{"class":63},[34,48267,617],{"class":59},[34,48269,48270],{"class":187},"\"Mean:\"",[34,48272,48273],{"class":59},", mean)\n",[34,48275,48276,48278,48280,48283],{"class":36,"line":17068},[34,48277,30878],{"class":63},[34,48279,617],{"class":59},[34,48281,48282],{"class":187},"\"Variance:\"",[34,48284,48285],{"class":59},", variance)\n",[25,48287,48289],{"className":27,"code":48288,"language":29,"meta":22,"style":22},"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",[31,48290,48291,48297,48303,48313,48319,48329,48343,48353,48363,48373,48377,48387,48397,48401,48405,48413,48418,48423,48442,48446,48451,48456,48461,48466,48507,48512,48522,48527,48540,48545,48550,48555,48560,48565,48569,48574,48579,48601,48605,48637,48651,48661,48671,48675,48685,48699,48709,48719,48729,48735,48739,48743,48747,48751,48755,48763,48783,48787,48791,48795,48799,48815,48819,48823,48831,48835,48839,48847,48851,48855,48859,48867,48871,48875,48879,48887,48891,48899,48903,48911,48915,48923,48927,48935,48939,48943,48951,48955,48959,48971,48995,49009,49013,49017,49021,49029,49033,49041,49045,49053,49057,49065,49069,49077,49081,49089,49093,49105,49109,49117,49121,49129,49133,49137,49141,49145,49153,49157,49173,49177,49185,49189,49193,49197,49201,49205,49209,49213,49229,49233,49245,49249,49261,49265,49277,49281,49289,49293,49301,49305,49309,49313,49319,49323,49331,49335,49351,49355,49363,49367,49383,49395,49399,49411,49415,49419,49427,49431,49435,49443,49447,49455,49459,49467,49471,49475,49517,49559,49563,49567,49583,49587,49603,49607,49611,49619,49623,49627,49639,49677,49681,49685,49693,49697,49711,49721,49727,49733,49739,49745,49749,49753,49759,49763,49767,49775,49779,49797,49801,49805,49809,49825,49829,49833,49837,49841,49845,49865,49885,49889,49893,49897,49905,49913,49917,49933,49953,49973,49977,49982,49991,50000,50005,50010,50015,50028,50033,50042,50051,50068],{"__ignoreMap":22},[34,48292,48293,48295],{"class":36,"line":37},[34,48294,30855],{"class":112},[34,48296,32285],{"class":59},[34,48298,48299,48301],{"class":36,"line":44},[34,48300,30855],{"class":112},[34,48302,32292],{"class":59},[34,48304,48305,48307,48309,48311],{"class":36,"line":50},[34,48306,30855],{"class":112},[34,48308,32303],{"class":59},[34,48310,31846],{"class":112},[34,48312,32308],{"class":59},[34,48314,48315,48317],{"class":36,"line":56},[34,48316,30855],{"class":112},[34,48318,30858],{"class":59},[34,48320,48321,48323,48325,48327],{"class":36,"line":107},[34,48322,31200],{"class":112},[34,48324,31878],{"class":59},[34,48326,30855],{"class":112},[34,48328,32325],{"class":59},[34,48330,48331,48333,48335,48337,48340],{"class":36,"line":196},[34,48332,31200],{"class":112},[34,48334,31831],{"class":59},[34,48336,30855],{"class":112},[34,48338,48339],{"class":59}," ImageFolder ",[34,48341,48342],{"class":40},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[34,48344,48345,48347,48349,48351],{"class":36,"line":202},[34,48346,31200],{"class":112},[34,48348,31861],{"class":59},[34,48350,30855],{"class":112},[34,48352,31866],{"class":59},[34,48354,48355,48357,48359,48361],{"class":36,"line":207},[34,48356,30855],{"class":112},[34,48358,31878],{"class":59},[34,48360,31846],{"class":112},[34,48362,31883],{"class":59},[34,48364,48365,48367,48369,48371],{"class":36,"line":222},[34,48366,30855],{"class":112},[34,48368,31895],{"class":59},[34,48370,31846],{"class":112},[34,48372,31900],{"class":59},[34,48374,48375],{"class":36,"line":227},[34,48376,32370],{"class":40},[34,48378,48379,48381,48383,48385],{"class":36,"line":232},[34,48380,31200],{"class":112},[34,48382,32377],{"class":59},[34,48384,30855],{"class":112},[34,48386,43492],{"class":59},[34,48388,48389,48391,48393,48395],{"class":36,"line":238},[34,48390,31200],{"class":112},[34,48392,31203],{"class":59},[34,48394,30855],{"class":112},[34,48396,31208],{"class":59},[34,48398,48399],{"class":36,"line":244},[34,48400,2864],{"emptyLinePlaceholder":540},[34,48402,48403],{"class":36,"line":250},[34,48404,32405],{"class":40},[34,48406,48407,48409,48411],{"class":36,"line":256},[34,48408,32410],{"class":112},[34,48410,32413],{"class":2427},[34,48412,32416],{"class":59},[34,48414,48415],{"class":36,"line":261},[34,48416,48417],{"class":40},"    # 导入自己的数据集，并进行数据处理\n",[34,48419,48420],{"class":36,"line":267},[34,48421,48422],{"class":40},"    # 定义数据集的路径\n",[34,48424,48425,48428,48430,48432,48434,48436,48440],{"class":36,"line":2138},[34,48426,48427],{"class":63},"    ROOT_PATH",[34,48429,447],{"class":112},[34,48431,1276],{"class":112},[34,48433,860],{"class":187},[34,48435,1164],{"class":63},[34,48437,48439],{"class":48438},"sA_wV","\u002Fdata\u002Ftrain",[34,48441,25598],{"class":187},[34,48443,48444],{"class":36,"line":2143},[34,48445,2864],{"emptyLinePlaceholder":540},[34,48447,48448],{"class":36,"line":2157},[34,48449,48450],{"class":40},"    # 定义归一化方法\n",[34,48452,48453],{"class":36,"line":2162},[34,48454,48455],{"class":40},"    # 这里需要先计算一下数据集的均值和方差\n",[34,48457,48458],{"class":36,"line":2191},[34,48459,48460],{"class":40},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[34,48462,48463],{"class":36,"line":2196},[34,48464,48465],{"class":40},"    # 第一个参数是均值，第二个参数是方差\n",[34,48467,48468,48471,48473,48476,48479,48481,48484,48486,48489,48492,48495,48497,48500,48502,48505],{"class":36,"line":2213},[34,48469,48470],{"class":59},"    normalize",[34,48472,447],{"class":112},[34,48474,48475],{"class":59},"transforms.Normalize([",[34,48477,48478],{"class":63},"0.162",[34,48480,67],{"class":59},[34,48482,48483],{"class":63},"0.151",[34,48485,67],{"class":59},[34,48487,48488],{"class":63},"0.138",[34,48490,48491],{"class":59},"],[",[34,48493,48494],{"class":63},"0.058",[34,48496,67],{"class":59},[34,48498,48499],{"class":63},"0.052",[34,48501,67],{"class":59},[34,48503,48504],{"class":63},"0.048",[34,48506,5121],{"class":59},[34,48508,48509],{"class":36,"line":2218},[34,48510,48511],{"class":40},"    # 定义数据集处理方法变量\n",[34,48513,48514,48517,48519],{"class":36,"line":2223},[34,48515,48516],{"class":59},"    train_transform",[34,48518,447],{"class":112},[34,48520,48521],{"class":59},"transforms.Compose([\n",[34,48523,48524],{"class":36,"line":2228},[34,48525,48526],{"class":40},"        # 调整图像大小为224*224\n",[34,48528,48529,48532,48534,48536,48538],{"class":36,"line":2242},[34,48530,48531],{"class":59},"        transforms.Resize((",[34,48533,31964],{"class":63},[34,48535,67],{"class":59},[34,48537,31964],{"class":63},[34,48539,43083],{"class":59},[34,48541,48542],{"class":36,"line":2247},[34,48543,48544],{"class":40},"        # 将图像转换为张量\n",[34,48546,48547],{"class":36,"line":3041},[34,48548,48549],{"class":59},"        transforms.ToTensor(),\n",[34,48551,48552],{"class":36,"line":3055},[34,48553,48554],{"class":59},"        normalize])\n",[34,48556,48557],{"class":36,"line":3063},[34,48558,48559],{"class":40},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[34,48561,48562],{"class":36,"line":3068},[34,48563,48564],{"class":40},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[34,48566,48567],{"class":36,"line":3074},[34,48568,2864],{"emptyLinePlaceholder":540},[34,48570,48571],{"class":36,"line":3080},[34,48572,48573],{"class":40},"    # 加载数据集\n",[34,48575,48576],{"class":36,"line":3085},[34,48577,48578],{"class":40},"    # 传入数据集路径与处理方法\n",[34,48580,48581,48583,48585,48588,48591,48593,48596,48598],{"class":36,"line":8412},[34,48582,32421],{"class":59},[34,48584,447],{"class":112},[34,48586,48587],{"class":59},"ImageFolder(",[34,48589,48590],{"class":63},"ROOT_PATH",[34,48592,67],{"class":59},[34,48594,48595],{"class":5680},"transform",[34,48597,447],{"class":112},[34,48599,48600],{"class":59},"train_transform)\n",[34,48602,48603],{"class":36,"line":8436},[34,48604,2864],{"emptyLinePlaceholder":540},[34,48606,48607,48609,48611,48613,48615,48617,48619,48621,48623,48625,48627,48629,48631,48633,48635],{"class":36,"line":8441},[34,48608,32473],{"class":59},[34,48610,447],{"class":112},[34,48612,32478],{"class":59},[34,48614,32481],{"class":63},[34,48616,617],{"class":59},[34,48618,32486],{"class":63},[34,48620,1062],{"class":112},[34,48622,7822],{"class":63},[34,48624,32493],{"class":59},[34,48626,32481],{"class":63},[34,48628,617],{"class":59},[34,48630,32500],{"class":63},[34,48632,1062],{"class":112},[34,48634,7822],{"class":63},[34,48636,32507],{"class":59},[34,48638,48639,48641,48643,48645,48647,48649],{"class":36,"line":8447},[34,48640,32512],{"class":59},[34,48642,447],{"class":112},[34,48644,32517],{"class":59},[34,48646,32000],{"class":5680},[34,48648,447],{"class":112},[34,48650,32005],{"class":59},[34,48652,48653,48655,48657,48659],{"class":36,"line":8474},[34,48654,32528],{"class":5680},[34,48656,447],{"class":112},[34,48658,807],{"class":63},[34,48660,31929],{"class":59},[34,48662,48663,48665,48667,48669],{"class":36,"line":8479},[34,48664,32540],{"class":5680},[34,48666,447],{"class":112},[34,48668,31939],{"class":63},[34,48670,31929],{"class":59},[34,48672,48673],{"class":36,"line":8485},[34,48674,32551],{"class":40},[34,48676,48677,48679,48681,48683],{"class":36,"line":8497},[34,48678,32556],{"class":5680},[34,48680,447],{"class":112},[34,48682,1002],{"class":63},[34,48684,623],{"class":59},[34,48686,48687,48689,48691,48693,48695,48697],{"class":36,"line":8509},[34,48688,32567],{"class":59},[34,48690,447],{"class":112},[34,48692,31997],{"class":59},[34,48694,32000],{"class":5680},[34,48696,447],{"class":112},[34,48698,32578],{"class":59},[34,48700,48701,48703,48705,48707],{"class":36,"line":8521},[34,48702,32583],{"class":5680},[34,48704,447],{"class":112},[34,48706,807],{"class":63},[34,48708,31929],{"class":59},[34,48710,48711,48713,48715,48717],{"class":36,"line":10180},[34,48712,32594],{"class":5680},[34,48714,447],{"class":112},[34,48716,31939],{"class":63},[34,48718,31929],{"class":59},[34,48720,48721,48723,48725,48727],{"class":36,"line":10205},[34,48722,32605],{"class":5680},[34,48724,447],{"class":112},[34,48726,1002],{"class":63},[34,48728,623],{"class":59},[34,48730,48731,48733],{"class":36,"line":10228},[34,48732,4554],{"class":112},[34,48734,32618],{"class":59},[34,48736,48737],{"class":36,"line":10252},[34,48738,2864],{"emptyLinePlaceholder":540},[34,48740,48741],{"class":36,"line":10257},[34,48742,32627],{"class":40},[34,48744,48745],{"class":36,"line":10262},[34,48746,32632],{"class":40},[34,48748,48749],{"class":36,"line":10267},[34,48750,2864],{"emptyLinePlaceholder":540},[34,48752,48753],{"class":36,"line":10276},[34,48754,32641],{"class":40},[34,48756,48757,48759,48761],{"class":36,"line":10281},[34,48758,32410],{"class":112},[34,48760,32648],{"class":2427},[34,48762,32651],{"class":59},[34,48764,48765,48767,48769,48771,48773,48775,48777,48779,48781],{"class":36,"line":10287},[34,48766,31700],{"class":59},[34,48768,447],{"class":112},[34,48770,30914],{"class":59},[34,48772,31707],{"class":187},[34,48774,2168],{"class":112},[34,48776,31712],{"class":59},[34,48778,2165],{"class":112},[34,48780,32670],{"class":187},[34,48782,623],{"class":59},[34,48784,48785],{"class":36,"line":10308},[34,48786,2864],{"emptyLinePlaceholder":540},[34,48788,48789],{"class":36,"line":10314},[34,48790,32685],{"class":40},[34,48792,48793],{"class":36,"line":10328},[34,48794,32690],{"class":40},[34,48796,48797],{"class":36,"line":10334},[34,48798,32695],{"class":40},[34,48800,48801,48803,48805,48807,48809,48811,48813],{"class":36,"line":10361},[34,48802,32700],{"class":59},[34,48804,447],{"class":112},[34,48806,32705],{"class":59},[34,48808,32708],{"class":5680},[34,48810,447],{"class":112},[34,48812,32713],{"class":63},[34,48814,623],{"class":59},[34,48816,48817],{"class":36,"line":10370},[34,48818,2864],{"emptyLinePlaceholder":540},[34,48820,48821],{"class":36,"line":10376},[34,48822,32724],{"class":40},[34,48824,48825,48827,48829],{"class":36,"line":10384},[34,48826,32729],{"class":59},[34,48828,447],{"class":112},[34,48830,32734],{"class":59},[34,48832,48833],{"class":36,"line":10389},[34,48834,2864],{"emptyLinePlaceholder":540},[34,48836,48837],{"class":36,"line":17068},[34,48838,32743],{"class":40},[34,48840,48841,48843,48845],{"class":36,"line":17074},[34,48842,31752],{"class":59},[34,48844,447],{"class":112},[34,48846,32752],{"class":59},[34,48848,48849],{"class":36,"line":17097},[34,48850,32757],{"class":40},[34,48852,48853],{"class":36,"line":17103},[34,48854,32762],{"class":40},[34,48856,48857],{"class":36,"line":17126},[34,48858,32767],{"class":40},[34,48860,48861,48863,48865],{"class":36,"line":17140},[34,48862,32772],{"class":59},[34,48864,447],{"class":112},[34,48866,32777],{"class":59},[34,48868,48869],{"class":36,"line":17160},[34,48870,2864],{"emptyLinePlaceholder":540},[34,48872,48873],{"class":36,"line":17166},[34,48874,32790],{"class":40},[34,48876,48877],{"class":36,"line":17177},[34,48878,32795],{"class":40},[34,48880,48881,48883,48885],{"class":36,"line":17200},[34,48882,32800],{"class":59},[34,48884,447],{"class":112},[34,48886,32805],{"class":63},[34,48888,48889],{"class":36,"line":17222},[34,48890,32810],{"class":40},[34,48892,48893,48895,48897],{"class":36,"line":17227},[34,48894,32815],{"class":59},[34,48896,447],{"class":112},[34,48898,32820],{"class":59},[34,48900,48901],{"class":36,"line":17233},[34,48902,32825],{"class":40},[34,48904,48905,48907,48909],{"class":36,"line":17247},[34,48906,32830],{"class":59},[34,48908,447],{"class":112},[34,48910,32820],{"class":59},[34,48912,48913],{"class":36,"line":17260},[34,48914,32839],{"class":40},[34,48916,48917,48919,48921],{"class":36,"line":17265},[34,48918,32844],{"class":59},[34,48920,447],{"class":112},[34,48922,32820],{"class":59},[34,48924,48925],{"class":36,"line":17279},[34,48926,32853],{"class":40},[34,48928,48929,48931,48933],{"class":36,"line":17284},[34,48930,32858],{"class":59},[34,48932,447],{"class":112},[34,48934,32820],{"class":59},[34,48936,48937],{"class":36,"line":17290},[34,48938,2864],{"emptyLinePlaceholder":540},[34,48940,48941],{"class":36,"line":17295},[34,48942,32871],{"class":40},[34,48944,48945,48947,48949],{"class":36,"line":17309},[34,48946,32876],{"class":59},[34,48948,447],{"class":112},[34,48950,32881],{"class":59},[34,48952,48953],{"class":36,"line":17314},[34,48954,2864],{"emptyLinePlaceholder":540},[34,48956,48957],{"class":36,"line":17319},[34,48958,32894],{"class":40},[34,48960,48961,48963,48965,48967,48969],{"class":36,"line":17333},[34,48962,3665],{"class":112},[34,48964,32901],{"class":59},[34,48966,26508],{"class":112},[34,48968,32906],{"class":63},[34,48970,32909],{"class":59},[34,48972,48973,48975,48977,48979,48981,48983,48985,48987,48989,48991,48993],{"class":36,"line":17345},[34,48974,32914],{"class":63},[34,48976,617],{"class":59},[34,48978,32919],{"class":187},[34,48980,32922],{"class":63},[34,48982,1190],{"class":187},[34,48984,32922],{"class":63},[34,48986,860],{"class":187},[34,48988,32931],{"class":59},[34,48990,113],{"class":112},[34,48992,64],{"class":63},[34,48994,30960],{"class":59},[34,48996,48997,48999,49001,49003,49005,49007],{"class":36,"line":17350},[34,48998,32914],{"class":63},[34,49000,617],{"class":59},[34,49002,32946],{"class":187},[34,49004,1062],{"class":112},[34,49006,1053],{"class":63},[34,49008,623],{"class":59},[34,49010,49011],{"class":36,"line":17363},[34,49012,2864],{"emptyLinePlaceholder":540},[34,49014,49015],{"class":36,"line":17368},[34,49016,32961],{"class":40},[34,49018,49019],{"class":36,"line":17373},[34,49020,32966],{"class":40},[34,49022,49023,49025,49027],{"class":36,"line":17378},[34,49024,32971],{"class":59},[34,49026,447],{"class":112},[34,49028,32805],{"class":63},[34,49030,49031],{"class":36,"line":17391},[34,49032,32980],{"class":40},[34,49034,49035,49037,49039],{"class":36,"line":17396},[34,49036,32985],{"class":59},[34,49038,447],{"class":112},[34,49040,3549],{"class":63},[34,49042,49043],{"class":36,"line":33096},[34,49044,32994],{"class":40},[34,49046,49047,49049,49051],{"class":36,"line":33102},[34,49048,32999],{"class":59},[34,49050,447],{"class":112},[34,49052,32805],{"class":63},[34,49054,49055],{"class":36,"line":33108},[34,49056,33008],{"class":40},[34,49058,49059,49061,49063],{"class":36,"line":33114},[34,49060,33013],{"class":59},[34,49062,447],{"class":112},[34,49064,3549],{"class":63},[34,49066,49067],{"class":36,"line":33120},[34,49068,33022],{"class":40},[34,49070,49071,49073,49075],{"class":36,"line":33131},[34,49072,33027],{"class":59},[34,49074,447],{"class":112},[34,49076,3549],{"class":63},[34,49078,49079],{"class":36,"line":33137},[34,49080,33036],{"class":40},[34,49082,49083,49085,49087],{"class":36,"line":33157},[34,49084,33041],{"class":59},[34,49086,447],{"class":112},[34,49088,3549],{"class":63},[34,49090,49091],{"class":36,"line":33163},[34,49092,33050],{"class":40},[34,49094,49095,49097,49099,49101,49103],{"class":36,"line":33174},[34,49096,3867],{"class":112},[34,49098,32064],{"class":59},[34,49100,26508],{"class":112},[34,49102,32069],{"class":63},[34,49104,33063],{"class":59},[34,49106,49107],{"class":36,"line":33180},[34,49108,33068],{"class":40},[34,49110,49111,49113,49115],{"class":36,"line":33186},[34,49112,33073],{"class":59},[34,49114,447],{"class":112},[34,49116,33078],{"class":59},[34,49118,49119],{"class":36,"line":33192},[34,49120,33083],{"class":40},[34,49122,49123,49125,49127],{"class":36,"line":33198},[34,49124,33088],{"class":59},[34,49126,447],{"class":112},[34,49128,33093],{"class":59},[34,49130,49131],{"class":36,"line":33204},[34,49132,33099],{"class":40},[34,49134,49135],{"class":36,"line":33210},[34,49136,33105],{"class":59},[34,49138,49139],{"class":36,"line":33216},[34,49140,33111],{"class":40},[34,49142,49143],{"class":36,"line":33236},[34,49144,33117],{"class":40},[34,49146,49147,49149,49151],{"class":36,"line":33242},[34,49148,33123],{"class":59},[34,49150,447],{"class":112},[34,49152,33128],{"class":59},[34,49154,49155],{"class":36,"line":33258},[34,49156,33134],{"class":40},[34,49158,49159,49161,49163,49165,49167,49169,49171],{"class":36,"line":33264},[34,49160,33140],{"class":59},[34,49162,447],{"class":112},[34,49164,33145],{"class":59},[34,49166,33148],{"class":5680},[34,49168,447],{"class":112},[34,49170,64],{"class":63},[34,49172,623],{"class":59},[34,49174,49175],{"class":36,"line":33278},[34,49176,33160],{"class":40},[34,49178,49179,49181,49183],{"class":36,"line":33284},[34,49180,33166],{"class":59},[34,49182,447],{"class":112},[34,49184,33171],{"class":59},[34,49186,49187],{"class":36,"line":33299},[34,49188,33177],{"class":40},[34,49190,49191],{"class":36,"line":33305},[34,49192,33183],{"class":59},[34,49194,49195],{"class":36,"line":33314},[34,49196,33189],{"class":40},[34,49198,49199],{"class":36,"line":33320},[34,49200,33195],{"class":59},[34,49202,49203],{"class":36,"line":33329},[34,49204,33201],{"class":40},[34,49206,49207],{"class":36,"line":33335},[34,49208,33207],{"class":59},[34,49210,49211],{"class":36,"line":33341},[34,49212,33213],{"class":40},[34,49214,49215,49217,49219,49221,49223,49225,49227],{"class":36,"line":33350},[34,49216,33219],{"class":59},[34,49218,9941],{"class":112},[34,49220,33224],{"class":59},[34,49222,1062],{"class":112},[34,49224,33229],{"class":59},[34,49226,319],{"class":63},[34,49228,623],{"class":59},[34,49230,49231],{"class":36,"line":33356},[34,49232,33239],{"class":40},[34,49234,49235,49237,49239,49241,49243],{"class":36,"line":33367},[34,49236,33245],{"class":59},[34,49238,9941],{"class":112},[34,49240,33250],{"class":59},[34,49242,3413],{"class":112},[34,49244,33255],{"class":59},[34,49246,49247],{"class":36,"line":33373},[34,49248,33261],{"class":40},[34,49250,49251,49253,49255,49257,49259],{"class":36,"line":33392},[34,49252,33267],{"class":59},[34,49254,9941],{"class":112},[34,49256,33229],{"class":59},[34,49258,319],{"class":63},[34,49260,623],{"class":59},[34,49262,49263],{"class":36,"line":33398},[34,49264,33281],{"class":40},[34,49266,49267,49269,49271,49273,49275],{"class":36,"line":33409},[34,49268,3867],{"class":112},[34,49270,33289],{"class":59},[34,49272,26508],{"class":112},[34,49274,32069],{"class":63},[34,49276,33296],{"class":59},[34,49278,49279],{"class":36,"line":33415},[34,49280,33302],{"class":40},[34,49282,49283,49285,49287],{"class":36,"line":33435},[34,49284,33073],{"class":59},[34,49286,447],{"class":112},[34,49288,33078],{"class":59},[34,49290,49291],{"class":36,"line":33451},[34,49292,33317],{"class":40},[34,49294,49295,49297,49299],{"class":36,"line":33457},[34,49296,33088],{"class":59},[34,49298,447],{"class":112},[34,49300,33093],{"class":59},[34,49302,49303],{"class":36,"line":33471},[34,49304,33332],{"class":40},[34,49306,49307],{"class":36,"line":33477},[34,49308,33338],{"class":59},[34,49310,49311],{"class":36,"line":33483},[34,49312,36818],{"class":40},[34,49314,49315,49317],{"class":36,"line":33494},[34,49316,33344],{"class":112},[34,49318,33347],{"class":59},[34,49320,49321],{"class":36,"line":33500},[34,49322,33353],{"class":40},[34,49324,49325,49327,49329],{"class":36,"line":33506},[34,49326,36833],{"class":59},[34,49328,447],{"class":112},[34,49330,33128],{"class":59},[34,49332,49333],{"class":36,"line":33516},[34,49334,33370],{"class":40},[34,49336,49337,49339,49341,49343,49345,49347,49349],{"class":36,"line":33522},[34,49338,36846],{"class":59},[34,49340,447],{"class":112},[34,49342,33145],{"class":59},[34,49344,33148],{"class":5680},[34,49346,447],{"class":112},[34,49348,64],{"class":63},[34,49350,623],{"class":59},[34,49352,49353],{"class":36,"line":33533},[34,49354,33395],{"class":40},[34,49356,49357,49359,49361],{"class":36,"line":33539},[34,49358,36867],{"class":59},[34,49360,447],{"class":112},[34,49362,33171],{"class":59},[34,49364,49365],{"class":36,"line":33549},[34,49366,33412],{"class":40},[34,49368,49369,49371,49373,49375,49377,49379,49381],{"class":36,"line":33554},[34,49370,36880],{"class":59},[34,49372,9941],{"class":112},[34,49374,36885],{"class":59},[34,49376,1062],{"class":112},[34,49378,33229],{"class":59},[34,49380,319],{"class":63},[34,49382,623],{"class":59},[34,49384,49385,49387,49389,49391,49393],{"class":36,"line":33560},[34,49386,36898],{"class":59},[34,49388,9941],{"class":112},[34,49390,33250],{"class":59},[34,49392,3413],{"class":112},[34,49394,33255],{"class":59},[34,49396,49397],{"class":36,"line":33609},[34,49398,36911],{"class":40},[34,49400,49401,49403,49405,49407,49409],{"class":36,"line":33656},[34,49402,36916],{"class":59},[34,49404,9941],{"class":112},[34,49406,33229],{"class":59},[34,49408,319],{"class":63},[34,49410,623],{"class":59},[34,49412,49413],{"class":36,"line":33661},[34,49414,33474],{"class":40},[34,49416,49417],{"class":36,"line":33667},[34,49418,33480],{"class":40},[34,49420,49421,49423,49425],{"class":36,"line":33686},[34,49422,33486],{"class":59},[34,49424,1190],{"class":112},[34,49426,33491],{"class":59},[34,49428,49429],{"class":36,"line":33692},[34,49430,33497],{"class":40},[34,49432,49433],{"class":36,"line":33711},[34,49434,33503],{"class":40},[34,49436,49437,49439,49441],{"class":36,"line":33717},[34,49438,33509],{"class":59},[34,49440,1190],{"class":112},[34,49442,33491],{"class":59},[34,49444,49445],{"class":36,"line":33723},[34,49446,33519],{"class":40},[34,49448,49449,49451,49453],{"class":36,"line":33733},[34,49450,33525],{"class":59},[34,49452,1190],{"class":112},[34,49454,33530],{"class":59},[34,49456,49457],{"class":36,"line":33738},[34,49458,33536],{"class":40},[34,49460,49461,49463,49465],{"class":36,"line":33744},[34,49462,33542],{"class":59},[34,49464,1190],{"class":112},[34,49466,33530],{"class":59},[34,49468,49469],{"class":36,"line":33760},[34,49470,2864],{"emptyLinePlaceholder":540},[34,49472,49473],{"class":36,"line":33805},[34,49474,33557],{"class":40},[34,49476,49477,49479,49481,49483,49485,49487,49489,49491,49493,49495,49497,49499,49501,49503,49505,49507,49509,49511,49513,49515],{"class":36,"line":33811},[34,49478,32914],{"class":63},[34,49480,617],{"class":59},[34,49482,4056],{"class":187},[34,49484,32922],{"class":63},[34,49486,33571],{"class":187},[34,49488,1501],{"class":63},[34,49490,33576],{"class":112},[34,49492,1550],{"class":63},[34,49494,33581],{"class":187},[34,49496,1501],{"class":63},[34,49498,33576],{"class":112},[34,49500,1550],{"class":63},[34,49502,4056],{"class":187},[34,49504,33592],{"class":59},[34,49506,113],{"class":112},[34,49508,64],{"class":63},[34,49510,33599],{"class":59},[34,49512,113],{"class":112},[34,49514,64],{"class":63},[34,49516,33606],{"class":59},[34,49518,49519,49521,49523,49525,49527,49529,49531,49533,49535,49537,49539,49541,49543,49545,49547,49549,49551,49553,49555,49557],{"class":36,"line":33817},[34,49520,32914],{"class":63},[34,49522,617],{"class":59},[34,49524,4056],{"class":187},[34,49526,32922],{"class":63},[34,49528,33620],{"class":187},[34,49530,1501],{"class":63},[34,49532,33576],{"class":112},[34,49534,1550],{"class":63},[34,49536,33629],{"class":187},[34,49538,1501],{"class":63},[34,49540,33576],{"class":112},[34,49542,1550],{"class":63},[34,49544,4056],{"class":187},[34,49546,33640],{"class":59},[34,49548,113],{"class":112},[34,49550,64],{"class":63},[34,49552,33647],{"class":59},[34,49554,113],{"class":112},[34,49556,64],{"class":63},[34,49558,33606],{"class":59},[34,49560,49561],{"class":36,"line":33823},[34,49562,2864],{"emptyLinePlaceholder":540},[34,49564,49565],{"class":36,"line":33834},[34,49566,33664],{"class":40},[34,49568,49569,49571,49573,49575,49577,49579,49581],{"class":36,"line":33840},[34,49570,2961],{"class":112},[34,49572,33672],{"class":59},[34,49574,113],{"class":112},[34,49576,64],{"class":63},[34,49578,477],{"class":59},[34,49580,1564],{"class":112},[34,49582,33683],{"class":59},[34,49584,49585],{"class":36,"line":33846},[34,49586,33689],{"class":40},[34,49588,49589,49591,49593,49595,49597,49599,49601],{"class":36,"line":33852},[34,49590,33695],{"class":59},[34,49592,656],{"class":63},[34,49594,447],{"class":112},[34,49596,33702],{"class":59},[34,49598,113],{"class":112},[34,49600,64],{"class":63},[34,49602,73],{"class":59},[34,49604,49605],{"class":36,"line":33870},[34,49606,33714],{"class":40},[34,49608,49609],{"class":36,"line":33884},[34,49610,33720],{"class":40},[34,49612,49613,49615,49617],{"class":36,"line":33893},[34,49614,33726],{"class":59},[34,49616,447],{"class":112},[34,49618,32777],{"class":59},[34,49620,49621],{"class":36,"line":33902},[34,49622,2864],{"emptyLinePlaceholder":540},[34,49624,49625],{"class":36,"line":33911},[34,49626,33741],{"class":40},[34,49628,49629,49631,49633,49635,49637],{"class":36,"line":33920},[34,49630,33747],{"class":59},[34,49632,447],{"class":112},[34,49634,33752],{"class":59},[34,49636,113],{"class":112},[34,49638,33757],{"class":59},[34,49640,49641,49643,49645,49647,49649,49651,49653,49655,49657,49659,49661,49663,49665,49667,49669,49671,49673,49675],{"class":36,"line":33926},[34,49642,32914],{"class":63},[34,49644,617],{"class":59},[34,49646,33767],{"class":187},[34,49648,1501],{"class":63},[34,49650,33772],{"class":112},[34,49652,1550],{"class":63},[34,49654,1150],{"class":187},[34,49656,1501],{"class":63},[34,49658,33772],{"class":112},[34,49660,1550],{"class":63},[34,49662,33785],{"class":187},[34,49664,33788],{"class":59},[34,49666,33791],{"class":112},[34,49668,1512],{"class":63},[34,49670,33796],{"class":59},[34,49672,936],{"class":112},[34,49674,1512],{"class":63},[34,49676,30960],{"class":59},[34,49678,49679],{"class":36,"line":33932},[34,49680,37195],{"class":40},[34,49682,49683],{"class":36,"line":33940},[34,49684,37200],{"class":40},[34,49686,49687,49689,49691],{"class":36,"line":33945},[34,49688,37205],{"class":59},[34,49690,33829],{"class":187},[34,49692,623],{"class":59},[34,49694,49695],{"class":36,"line":33951},[34,49696,33849],{"class":40},[34,49698,49699,49701,49703,49705,49707,49709],{"class":36,"line":33962},[34,49700,33855],{"class":59},[34,49702,447],{"class":112},[34,49704,33860],{"class":59},[34,49706,33863],{"class":5680},[34,49708,447],{"class":112},[34,49710,2017],{"class":59},[34,49712,49713,49715,49717,49719],{"class":36,"line":33968},[34,49714,33873],{"class":187},[34,49716,214],{"class":59},[34,49718,33878],{"class":63},[34,49720,33881],{"class":59},[34,49722,49723,49725],{"class":36,"line":33988},[34,49724,33887],{"class":187},[34,49726,33890],{"class":59},[34,49728,49729,49731],{"class":36,"line":33994},[34,49730,33896],{"class":187},[34,49732,33899],{"class":59},[34,49734,49735,49737],{"class":36,"line":34000},[34,49736,33905],{"class":187},[34,49738,33908],{"class":59},[34,49740,49741,49743],{"class":36,"line":34006},[34,49742,33914],{"class":187},[34,49744,33917],{"class":59},[34,49746,49747],{"class":36,"line":34023},[34,49748,33923],{"class":59},[34,49750,49751],{"class":36,"line":34029},[34,49752,33929],{"class":40},[34,49754,49755,49757],{"class":36,"line":34035},[34,49756,4554],{"class":112},[34,49758,33937],{"class":59},[34,49760,49761],{"class":36,"line":34041},[34,49762,2864],{"emptyLinePlaceholder":540},[34,49764,49765],{"class":36,"line":34047},[34,49766,33948],{"class":40},[34,49768,49769,49771,49773],{"class":36,"line":34053},[34,49770,32410],{"class":112},[34,49772,33956],{"class":2427},[34,49774,33959],{"class":59},[34,49776,49777],{"class":36,"line":34080},[34,49778,33965],{"class":40},[34,49780,49781,49783,49785,49787,49789,49791,49793,49795],{"class":36,"line":34104},[34,49782,33971],{"class":59},[34,49784,32156],{"class":5680},[34,49786,447],{"class":112},[34,49788,617],{"class":59},[34,49790,1105],{"class":63},[34,49792,67],{"class":59},[34,49794,217],{"class":63},[34,49796,30960],{"class":59},[34,49798,49799],{"class":36,"line":34110},[34,49800,33991],{"class":40},[34,49802,49803],{"class":36,"line":34116},[34,49804,33997],{"class":40},[34,49806,49807],{"class":36,"line":34122},[34,49808,34003],{"class":40},[34,49810,49811,49813,49815,49817,49819,49821,49823],{"class":36,"line":34133},[34,49812,32190],{"class":59},[34,49814,64],{"class":63},[34,49816,67],{"class":59},[34,49818,70],{"class":63},[34,49820,67],{"class":59},[34,49822,64],{"class":63},[34,49824,623],{"class":59},[34,49826,49827],{"class":36,"line":34144},[34,49828,34026],{"class":40},[34,49830,49831],{"class":36,"line":34150},[34,49832,34032],{"class":40},[34,49834,49835],{"class":36,"line":34167},[34,49836,34038],{"class":40},[34,49838,49839],{"class":36,"line":34190},[34,49840,34044],{"class":40},[34,49842,49843],{"class":36,"line":34213},[34,49844,34050],{"class":40},[34,49846,49847,49849,49851,49853,49855,49857,49859,49861,49863],{"class":36,"line":34219},[34,49848,34056],{"class":59},[34,49850,34059],{"class":187},[34,49852,34062],{"class":59},[34,49854,34065],{"class":187},[34,49856,67],{"class":59},[34,49858,34070],{"class":5680},[34,49860,447],{"class":112},[34,49862,34075],{"class":187},[34,49864,623],{"class":59},[34,49866,49867,49869,49871,49873,49875,49877,49879,49881,49883],{"class":36,"line":34224},[34,49868,34056],{"class":59},[34,49870,34059],{"class":187},[34,49872,34087],{"class":59},[34,49874,34090],{"class":187},[34,49876,67],{"class":59},[34,49878,34070],{"class":5680},[34,49880,447],{"class":112},[34,49882,34099],{"class":187},[34,49884,623],{"class":59},[34,49886,49887],{"class":36,"line":34233},[34,49888,34107],{"class":40},[34,49890,49891],{"class":36,"line":34243},[34,49892,34113],{"class":59},[34,49894,49895],{"class":36,"line":34249},[34,49896,34119],{"class":40},[34,49898,49899,49901,49903],{"class":36,"line":34254},[34,49900,34125],{"class":59},[34,49902,34128],{"class":187},[34,49904,623],{"class":59},[34,49906,49907,49909,49911],{"class":36,"line":34260},[34,49908,34136],{"class":59},[34,49910,34139],{"class":187},[34,49912,623],{"class":59},[34,49914,49915],{"class":36,"line":34273},[34,49916,34147],{"class":40},[34,49918,49919,49921,49923,49925,49927,49929,49931],{"class":36,"line":34279},[34,49920,32190],{"class":59},[34,49922,64],{"class":63},[34,49924,67],{"class":59},[34,49926,70],{"class":63},[34,49928,67],{"class":59},[34,49930,70],{"class":63},[34,49932,623],{"class":59},[34,49934,49935,49937,49939,49941,49943,49945,49947,49949,49951],{"class":36,"line":34290},[34,49936,34056],{"class":59},[34,49938,34059],{"class":187},[34,49940,34174],{"class":59},[34,49942,34065],{"class":187},[34,49944,67],{"class":59},[34,49946,34070],{"class":5680},[34,49948,447],{"class":112},[34,49950,34185],{"class":187},[34,49952,623],{"class":59},[34,49954,49955,49957,49959,49961,49963,49965,49967,49969,49971],{"class":36,"line":34301},[34,49956,34056],{"class":59},[34,49958,34059],{"class":187},[34,49960,34197],{"class":59},[34,49962,34090],{"class":187},[34,49964,67],{"class":59},[34,49966,34070],{"class":5680},[34,49968,447],{"class":112},[34,49970,34208],{"class":187},[34,49972,623],{"class":59},[34,49974,49975],{"class":36,"line":34320},[34,49976,34216],{"class":40},[34,49978,49980],{"class":36,"line":49979},219,[34,49981,34113],{"class":59},[34,49983,49985,49987,49989],{"class":36,"line":49984},220,[34,49986,34125],{"class":59},[34,49988,34059],{"class":187},[34,49990,623],{"class":59},[34,49992,49994,49996,49998],{"class":36,"line":49993},221,[34,49995,34136],{"class":59},[34,49997,34238],{"class":187},[34,49999,623],{"class":59},[34,50001,50003],{"class":36,"line":50002},222,[34,50004,34246],{"class":59},[34,50006,50008],{"class":36,"line":50007},223,[34,50009,2864],{"emptyLinePlaceholder":540},[34,50011,50013],{"class":36,"line":50012},224,[34,50014,34257],{"class":40},[34,50016,50018,50020,50022,50024,50026],{"class":36,"line":50017},225,[34,50019,2002],{"class":112},[34,50021,31683],{"class":63},[34,50023,3413],{"class":112},[34,50025,31688],{"class":187},[34,50027,4203],{"class":59},[34,50029,50031],{"class":36,"line":50030},226,[34,50032,34276],{"class":40},[34,50034,50036,50038,50040],{"class":36,"line":50035},227,[34,50037,45007],{"class":59},[34,50039,447],{"class":112},[34,50041,45012],{"class":59},[34,50043,50045,50047,50049],{"class":36,"line":50044},228,[34,50046,34293],{"class":59},[34,50048,447],{"class":112},[34,50050,34298],{"class":59},[34,50052,50054,50056,50058,50060,50062,50064,50066],{"class":36,"line":50053},229,[34,50055,33855],{"class":59},[34,50057,447],{"class":112},[34,50059,45029],{"class":59},[34,50061,34311],{"class":5680},[34,50063,447],{"class":112},[34,50065,1512],{"class":63},[34,50067,623],{"class":59},[34,50069,50071],{"class":36,"line":50070},230,[34,50072,34323],{"class":59},[22462,50074,50076],{"id":50075},"_242测试代码","2.4.2.测试代码",[14,50078,50079],{},"使用测试集进行测试与推理",[25,50081,50083],{"className":27,"code":50082,"language":29,"meta":22,"style":22},"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",[31,50084,50085,50091,50101,50111,50122,50132,50136,50140,50148,50153,50157,50174,50178,50182,50186,50190,50194,50226,50230,50238,50242,50254,50258,50262,50266,50270,50274,50278,50282,50286,50304,50318,50322,50332,50342,50352,50358,50362,50366,50374,50378,50394,50402,50406,50410,50418,50426,50430,50434,50438,50442,50448,50452,50462,50470,50478,50482,50486,50490,50498,50502,50518,50522,50526,50530,50542,50546,50558,50562,50566,50578,50582,50592,50596,50600,50612,50616,50624,50628,50632,50640,50644,50652,50656,50660,50664,50668,50672,50688,50696,50700,50704,50722,50728,50732,50742,50750,50758,50762,50766,50770,50774,50782,50786,50802,50806,50814,50822],{"__ignoreMap":22},[34,50086,50087,50089],{"class":36,"line":37},[34,50088,30855],{"class":112},[34,50090,30858],{"class":59},[34,50092,50093,50095,50097,50099],{"class":36,"line":44},[34,50094,30855],{"class":112},[34,50096,31878],{"class":59},[34,50098,31846],{"class":112},[34,50100,31883],{"class":59},[34,50102,50103,50105,50107,50109],{"class":36,"line":50},[34,50104,31200],{"class":112},[34,50106,31861],{"class":59},[34,50108,30855],{"class":112},[34,50110,31866],{"class":59},[34,50112,50113,50115,50117,50119],{"class":36,"line":56},[34,50114,31200],{"class":112},[34,50116,31831],{"class":59},[34,50118,30855],{"class":112},[34,50120,50121],{"class":59}," ImageFolder\n",[34,50123,50124,50126,50128,50130],{"class":36,"line":107},[34,50125,31200],{"class":112},[34,50127,32377],{"class":59},[34,50129,30855],{"class":112},[34,50131,45101],{"class":59},[34,50133,50134],{"class":36,"line":196},[34,50135,2864],{"emptyLinePlaceholder":540},[34,50137,50138],{"class":36,"line":202},[34,50139,34413],{"class":40},[34,50141,50142,50144,50146],{"class":36,"line":207},[34,50143,32410],{"class":112},[34,50145,34420],{"class":2427},[34,50147,32416],{"class":59},[34,50149,50150],{"class":36,"line":222},[34,50151,50152],{"class":40},"   # 导入自己的数据集，并进行数据处理\n",[34,50154,50155],{"class":36,"line":227},[34,50156,48422],{"class":40},[34,50158,50159,50161,50163,50165,50167,50169,50172],{"class":36,"line":232},[34,50160,48427],{"class":63},[34,50162,447],{"class":112},[34,50164,1276],{"class":112},[34,50166,860],{"class":187},[34,50168,1164],{"class":63},[34,50170,50171],{"class":48438},"\u002Fdata\u002Ftest",[34,50173,25598],{"class":187},[34,50175,50176],{"class":36,"line":238},[34,50177,2864],{"emptyLinePlaceholder":540},[34,50179,50180],{"class":36,"line":244},[34,50181,48450],{"class":40},[34,50183,50184],{"class":36,"line":250},[34,50185,48455],{"class":40},[34,50187,50188],{"class":36,"line":256},[34,50189,48460],{"class":40},[34,50191,50192],{"class":36,"line":261},[34,50193,48465],{"class":40},[34,50195,50196,50198,50200,50202,50204,50206,50208,50210,50212,50214,50216,50218,50220,50222,50224],{"class":36,"line":267},[34,50197,48470],{"class":59},[34,50199,447],{"class":112},[34,50201,48475],{"class":59},[34,50203,48478],{"class":63},[34,50205,67],{"class":59},[34,50207,48483],{"class":63},[34,50209,67],{"class":59},[34,50211,48488],{"class":63},[34,50213,48491],{"class":59},[34,50215,48494],{"class":63},[34,50217,67],{"class":59},[34,50219,48499],{"class":63},[34,50221,67],{"class":59},[34,50223,48504],{"class":63},[34,50225,5121],{"class":59},[34,50227,50228],{"class":36,"line":2138},[34,50229,48511],{"class":40},[34,50231,50232,50234,50236],{"class":36,"line":2143},[34,50233,48516],{"class":59},[34,50235,447],{"class":112},[34,50237,48521],{"class":59},[34,50239,50240],{"class":36,"line":2157},[34,50241,48526],{"class":40},[34,50243,50244,50246,50248,50250,50252],{"class":36,"line":2162},[34,50245,48531],{"class":59},[34,50247,31964],{"class":63},[34,50249,67],{"class":59},[34,50251,31964],{"class":63},[34,50253,43083],{"class":59},[34,50255,50256],{"class":36,"line":2191},[34,50257,48544],{"class":40},[34,50259,50260],{"class":36,"line":2196},[34,50261,48549],{"class":59},[34,50263,50264],{"class":36,"line":2213},[34,50265,48554],{"class":59},[34,50267,50268],{"class":36,"line":2218},[34,50269,48559],{"class":40},[34,50271,50272],{"class":36,"line":2223},[34,50273,48564],{"class":40},[34,50275,50276],{"class":36,"line":2228},[34,50277,2864],{"emptyLinePlaceholder":540},[34,50279,50280],{"class":36,"line":2242},[34,50281,48573],{"class":40},[34,50283,50284],{"class":36,"line":2247},[34,50285,48578],{"class":40},[34,50287,50288,50290,50292,50294,50296,50298,50300,50302],{"class":36,"line":3041},[34,50289,34427],{"class":59},[34,50291,447],{"class":112},[34,50293,48587],{"class":59},[34,50295,48590],{"class":63},[34,50297,67],{"class":59},[34,50299,48595],{"class":5680},[34,50301,447],{"class":112},[34,50303,48600],{"class":59},[34,50305,50306,50308,50310,50312,50314,50316],{"class":36,"line":3055},[34,50307,34484],{"class":59},[34,50309,447],{"class":112},[34,50311,31997],{"class":59},[34,50313,32000],{"class":5680},[34,50315,447],{"class":112},[34,50317,34495],{"class":59},[34,50319,50320],{"class":36,"line":3063},[34,50321,34500],{"class":40},[34,50323,50324,50326,50328,50330],{"class":36,"line":3068},[34,50325,34505],{"class":5680},[34,50327,447],{"class":112},[34,50329,64],{"class":63},[34,50331,31929],{"class":59},[34,50333,50334,50336,50338,50340],{"class":36,"line":3074},[34,50335,34516],{"class":5680},[34,50337,447],{"class":112},[34,50339,31939],{"class":63},[34,50341,31929],{"class":59},[34,50343,50344,50346,50348,50350],{"class":36,"line":3080},[34,50345,34527],{"class":5680},[34,50347,447],{"class":112},[34,50349,319],{"class":63},[34,50351,623],{"class":59},[34,50353,50354,50356],{"class":36,"line":3085},[34,50355,4554],{"class":112},[34,50357,34540],{"class":59},[34,50359,50360],{"class":36,"line":8412},[34,50361,2864],{"emptyLinePlaceholder":540},[34,50363,50364],{"class":36,"line":8436},[34,50365,34549],{"class":40},[34,50367,50368,50370,50372],{"class":36,"line":8441},[34,50369,32410],{"class":112},[34,50371,34556],{"class":2427},[34,50373,34559],{"class":59},[34,50375,50376],{"class":36,"line":8447},[34,50377,34564],{"class":40},[34,50379,50380,50382,50384,50386,50388,50390,50392],{"class":36,"line":8474},[34,50381,31700],{"class":59},[34,50383,447],{"class":112},[34,50385,31707],{"class":187},[34,50387,2168],{"class":112},[34,50389,31712],{"class":59},[34,50391,2165],{"class":112},[34,50393,34581],{"class":187},[34,50395,50396,50398,50400],{"class":36,"line":8479},[34,50397,31752],{"class":59},[34,50399,447],{"class":112},[34,50401,32752],{"class":59},[34,50403,50404],{"class":36,"line":8485},[34,50405,2864],{"emptyLinePlaceholder":540},[34,50407,50408],{"class":36,"line":8497},[34,50409,34598],{"class":40},[34,50411,50412,50414,50416],{"class":36,"line":8509},[34,50413,34603],{"class":59},[34,50415,447],{"class":112},[34,50417,32805],{"class":63},[34,50419,50420,50422,50424],{"class":36,"line":8521},[34,50421,34612],{"class":59},[34,50423,447],{"class":112},[34,50425,3549],{"class":63},[34,50427,50428],{"class":36,"line":10180},[34,50429,2864],{"emptyLinePlaceholder":540},[34,50431,50432],{"class":36,"line":10205},[34,50433,34625],{"class":40},[34,50435,50436],{"class":36,"line":10228},[34,50437,34630],{"class":40},[34,50439,50440],{"class":36,"line":10252},[34,50441,34635],{"class":40},[34,50443,50444,50446],{"class":36,"line":10257},[34,50445,34640],{"class":112},[34,50447,33347],{"class":59},[34,50449,50450],{"class":36,"line":10262},[34,50451,34647],{"class":40},[34,50453,50454,50456,50458,50460],{"class":36,"line":10267},[34,50455,3867],{"class":112},[34,50457,34654],{"class":59},[34,50459,26508],{"class":112},[34,50461,34659],{"class":59},[34,50463,50464,50466,50468],{"class":36,"line":10276},[34,50465,34664],{"class":59},[34,50467,447],{"class":112},[34,50469,34669],{"class":59},[34,50471,50472,50474,50476],{"class":36,"line":10281},[34,50473,34674],{"class":59},[34,50475,447],{"class":112},[34,50477,34679],{"class":59},[34,50479,50480],{"class":36,"line":10287},[34,50481,34684],{"class":40},[34,50483,50484],{"class":36,"line":10308},[34,50485,33338],{"class":59},[34,50487,50488],{"class":36,"line":10314},[34,50489,34693],{"class":40},[34,50491,50492,50494,50496],{"class":36,"line":10328},[34,50493,33123],{"class":59},[34,50495,447],{"class":112},[34,50497,34702],{"class":59},[34,50499,50500],{"class":36,"line":10334},[34,50501,34707],{"class":40},[34,50503,50504,50506,50508,50510,50512,50514,50516],{"class":36,"line":10361},[34,50505,33140],{"class":59},[34,50507,447],{"class":112},[34,50509,33145],{"class":59},[34,50511,33148],{"class":5680},[34,50513,447],{"class":112},[34,50515,64],{"class":63},[34,50517,623],{"class":59},[34,50519,50520],{"class":36,"line":10370},[34,50521,34728],{"class":40},[34,50523,50524],{"class":36,"line":10376},[34,50525,34733],{"class":40},[34,50527,50528],{"class":36,"line":10384},[34,50529,34738],{"class":40},[34,50531,50532,50534,50536,50538,50540],{"class":36,"line":10389},[34,50533,34743],{"class":59},[34,50535,9941],{"class":112},[34,50537,33250],{"class":59},[34,50539,3413],{"class":112},[34,50541,34752],{"class":59},[34,50543,50544],{"class":36,"line":17068},[34,50545,34757],{"class":40},[34,50547,50548,50550,50552,50554,50556],{"class":36,"line":17074},[34,50549,34762],{"class":59},[34,50551,9941],{"class":112},[34,50553,34767],{"class":59},[34,50555,319],{"class":63},[34,50557,623],{"class":59},[34,50559,50560],{"class":36,"line":17097},[34,50561,2864],{"emptyLinePlaceholder":540},[34,50563,50564],{"class":36,"line":17103},[34,50565,34780],{"class":40},[34,50567,50568,50570,50572,50574,50576],{"class":36,"line":17126},[34,50569,34785],{"class":59},[34,50571,447],{"class":112},[34,50573,34790],{"class":59},[34,50575,1190],{"class":112},[34,50577,34795],{"class":59},[34,50579,50580],{"class":36,"line":17140},[34,50581,34800],{"class":40},[34,50583,50584,50586,50588,50590],{"class":36,"line":17160},[34,50585,32914],{"class":63},[34,50587,617],{"class":59},[34,50589,34809],{"class":187},[34,50591,34812],{"class":59},[34,50593,50594],{"class":36,"line":17166},[34,50595,2864],{"emptyLinePlaceholder":540},[34,50597,50598],{"class":36,"line":17177},[34,50599,34821],{"class":40},[34,50601,50602,50604,50606,50608,50610],{"class":36,"line":17200},[34,50603,2002],{"class":112},[34,50605,31683],{"class":63},[34,50607,3413],{"class":112},[34,50609,31688],{"class":187},[34,50611,4203],{"class":59},[34,50613,50614],{"class":36,"line":17222},[34,50615,34838],{"class":40},[34,50617,50618,50620,50622],{"class":36,"line":17227},[34,50619,31752],{"class":59},[34,50621,447],{"class":112},[34,50623,45012],{"class":59},[34,50625,50626],{"class":36,"line":17233},[34,50627,34851],{"class":40},[34,50629,50630],{"class":36,"line":17247},[34,50631,34856],{"class":40},[34,50633,50634,50636,50638],{"class":36,"line":17260},[34,50635,34861],{"class":59},[34,50637,34864],{"class":187},[34,50639,30960],{"class":59},[34,50641,50642],{"class":36,"line":17265},[34,50643,34871],{"class":40},[34,50645,50646,50648,50650],{"class":36,"line":17279},[34,50647,34484],{"class":59},[34,50649,447],{"class":112},[34,50651,34880],{"class":59},[34,50653,50654],{"class":36,"line":17284},[34,50655,34885],{"class":40},[34,50657,50658],{"class":36,"line":17290},[34,50659,34890],{"class":59},[34,50661,50662],{"class":36,"line":17295},[34,50663,2864],{"emptyLinePlaceholder":540},[34,50665,50666],{"class":36,"line":17309},[34,50667,34899],{"class":40},[34,50669,50670],{"class":36,"line":17314},[34,50671,34904],{"class":40},[34,50673,50674,50676,50678,50680,50682,50684,50686],{"class":36,"line":17319},[34,50675,31700],{"class":59},[34,50677,447],{"class":112},[34,50679,31707],{"class":187},[34,50681,2168],{"class":112},[34,50683,31712],{"class":59},[34,50685,2165],{"class":112},[34,50687,34581],{"class":187},[34,50689,50690,50692,50694],{"class":36,"line":17333},[34,50691,31752],{"class":59},[34,50693,447],{"class":112},[34,50695,32752],{"class":59},[34,50697,50698],{"class":36,"line":17345},[34,50699,34933],{"class":40},[34,50701,50702],{"class":36,"line":17350},[34,50703,34938],{"class":40},[34,50705,50706,50708,50710,50712,50715,50717,50720],{"class":36,"line":17363},[34,50707,34943],{"class":59},[34,50709,447],{"class":112},[34,50711,1495],{"class":59},[34,50713,50714],{"class":187},"'猫'",[34,50716,67],{"class":59},[34,50718,50719],{"class":187},"'狗'",[34,50721,73],{"class":59},[34,50723,50724,50726],{"class":36,"line":17368},[34,50725,34640],{"class":112},[34,50727,33347],{"class":59},[34,50729,50730],{"class":36,"line":17373},[34,50731,35008],{"class":40},[34,50733,50734,50736,50738,50740],{"class":36,"line":17378},[34,50735,3867],{"class":112},[34,50737,35015],{"class":59},[34,50739,26508],{"class":112},[34,50741,34659],{"class":59},[34,50743,50744,50746,50748],{"class":36,"line":17391},[34,50745,33073],{"class":59},[34,50747,447],{"class":112},[34,50749,33078],{"class":59},[34,50751,50752,50754,50756],{"class":36,"line":17396},[34,50753,33088],{"class":59},[34,50755,447],{"class":112},[34,50757,33093],{"class":59},[34,50759,50760],{"class":36,"line":33096},[34,50761,2864],{"emptyLinePlaceholder":540},[34,50763,50764],{"class":36,"line":33102},[34,50765,35044],{"class":40},[34,50767,50768],{"class":36,"line":33108},[34,50769,33338],{"class":59},[34,50771,50772],{"class":36,"line":33114},[34,50773,35053],{"class":40},[34,50775,50776,50778,50780],{"class":36,"line":33120},[34,50777,33123],{"class":59},[34,50779,447],{"class":112},[34,50781,33128],{"class":59},[34,50783,50784],{"class":36,"line":33131},[34,50785,35066],{"class":40},[34,50787,50788,50790,50792,50794,50796,50798,50800],{"class":36,"line":33137},[34,50789,33140],{"class":59},[34,50791,447],{"class":112},[34,50793,33145],{"class":59},[34,50795,33148],{"class":5680},[34,50797,447],{"class":112},[34,50799,64],{"class":63},[34,50801,623],{"class":59},[34,50803,50804],{"class":36,"line":33157},[34,50805,35087],{"class":40},[34,50807,50808,50810,50812],{"class":36,"line":33163},[34,50809,35092],{"class":59},[34,50811,447],{"class":112},[34,50813,35097],{"class":59},[34,50815,50816,50818,50820],{"class":36,"line":33174},[34,50817,35102],{"class":59},[34,50819,447],{"class":112},[34,50821,35107],{"class":59},[34,50823,50824,50826,50828,50830,50832,50834,50836,50838],{"class":36,"line":33180},[34,50825,35112],{"class":63},[34,50827,617],{"class":59},[34,50829,35117],{"class":187},[34,50831,35120],{"class":59},[34,50833,35123],{"class":187},[34,50835,67],{"class":59},[34,50837,35128],{"class":187},[34,50839,35131],{"class":59},[532,50841,50842],{},"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":22,"searchDepth":44,"depth":44,"links":50844},[50845,50846,50847,50848],{"id":31054,"depth":50,"text":31055},{"id":38301,"depth":50,"text":38302},{"id":41734,"depth":50,"text":41735},{"id":45742,"depth":50,"text":45743},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31046,"description":537},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50855,"title":50856,"body":50857,"description":537,"extension":538,"meta":50864,"navigation":540,"path":50865,"seo":50866,"stem":50867,"__hash__":50868},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50858,"toc":50862},[50859],[10,50860,50856],{"id":50861},"_3yolo模型学习",{"title":22,"searchDepth":44,"depth":44,"links":50863},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50856,"description":537},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50870,"title":50871,"body":50872,"description":50879,"extension":538,"meta":50880,"navigation":540,"path":50882,"seo":50883,"stem":50884,"__hash__":50885},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50873,"toc":50877},[50874],[14,50875,50876],{},"yolo模型还未补充",{"title":22,"searchDepth":44,"depth":44,"links":50878},[],"深度学习学习",{"category":50881},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50871,"description":50879},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50887,"title":50888,"body":50889,"description":537,"extension":538,"meta":50914,"navigation":540,"path":50915,"seo":50916,"stem":50917,"__hash__":50918},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50890,"toc":50912},[50891,50894,50897,50902,50909],[10,50892,50888],{"id":50893},"_1工具",[14,50895,50896],{},"提示错误插件：有问题会提前报错",[14,50898,50899],{},[20,50900],{"alt":22,"src":50901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50903,50904],{},[847,50905,50908],{"href":50906,"rel":50907},"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",[24329],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50910,50911],{},"alt键加上下箭头可以实现语句的移动",{"title":22,"searchDepth":44,"depth":44,"links":50913},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50888,"description":537},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50920,"title":50921,"body":50922,"description":537,"extension":538,"meta":53786,"navigation":540,"path":53787,"seo":53788,"stem":53789,"__hash__":53790},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50923,"toc":53737},[50924,50927,50931,50935,50940,50943,50948,50952,50959,50964,50971,50976,50983,50988,50992,50997,51000,51004,51009,51013,51018,51021,51024,51027,51030,51033,51036,51039,51042,51047,51052,51057,51061,51064,51067,51071,51076,51079,51087,51092,51109,51117,51122,51127,51132,51137,51142,51145,51150,51155,51159,51168,51173,51178,51182,51187,51190,51194,51199,51207,51212,51217,51220,51225,51230,51235,51238,51241,51244,51249,51254,51257,51262,51265,51270,51273,51276,51279,51284,51287,51290,51305,51310,51315,51320,51323,51326,51329,51343,51346,51351,51356,51359,51362,51365,51368,51371,51374,51377,51381,51385,51390,51394,51397,51402,51407,51410,51415,51418,51422,51427,51430,51433,51436,51439,51442,51445,51448,51451,51454,51458,51463,51468,51473,51476,51479,51483,51488,51491,51495,51498,51501,51506,51509,51512,51516,51520,51523,51528,51533,51536,51565,51570,51575,51580,51585,51589,51594,51598,51603,51606,51610,51614,51619,51623,51628,51633,51637,51642,51645,51647,51650,51655,51659,51664,51668,51672,51677,51682,51687,51692,51696,51701,51706,51711,51714,51717,51722,51725,51730,51735,51740,51745,51749,52556,52560,52903,52908,52911,52914,52917,52920,52923,52926,52929,52932,52934,52937,52939,52942,52946,52951,52954,52957,52960,52964,52969,52974,52994,52997,53001,53006,53011,53028,53032,53061,53065,53087,53089,53128,53136,53142,53146,53149,53152,53157,53162,53165,53168,53171,53176,53181,53184,53187,53190,53193,53196,53199,53202,53205,53208,53211,53214,53216,53219,53222,53225,53228,53231,53234,53237,53240,53244,53249,53252,53257,53260,53263,53266,53269,53272,53275,53278,53280,53283,53286,53289,53292,53295,53298,53302,53305,53314,53317,53322,53325,53330,53333,53336,53339,53342,53345,53348,53351,53355,53359,53362,53365,53370,53375,53380,53384,53389,53394,53397,53400,53403,53406,53409,53414,53417,53422,53424,53429,53432,53436,53441,53444,53447,53452,53456,53459,53464,53467,53470,53499,53504,53507,53510,53513,53516,53519,53523,53526,53612,53616,53619,53624,53629,53636,53639,53642,53645,53648,53651,53656,53661,53664,53667,53670,53673,53676,53679,53682,53685,53688,53690,53693,53697,53702,53707,53712,53715,53720,53725,53728,53731,53734],[10,50925,50921],{"id":50926},"_2基础语法",[555,50928,50930],{"id":50929},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[584,50932,50934],{"id":50933},"_211-js组成","2.1.1 js组成",[567,50936,50937],{},[570,50938,50939],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50941,50942],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[567,50944,50945],{"start":44},[570,50946,50947],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[584,50949,50951],{"id":50950},"_212-js书写位置","2.1.2 js书写位置",[567,50953,50954],{},[570,50955,50956],{},[760,50957,50958],{},"内部 JavaScript",[14,50960,50961],{},[20,50962],{"alt":22,"src":50963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[567,50965,50966],{"start":44},[570,50967,50968],{},[760,50969,50970],{},"外部 JavaScript",[14,50972,50973],{},[20,50974],{"alt":22,"src":50975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[567,50977,50978],{"start":50},[570,50979,50980],{},[760,50981,50982],{},"内联 JavaScript",[14,50984,50985],{},[20,50986],{"alt":22,"src":50987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[584,50989,50991],{"id":50990},"_213-javascript注释","2.1.3 JavaScript注释",[14,50993,50994],{},[20,50995],{"alt":22,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50998,50999],{},"alt+shift+a一定要记住！",[584,51001,51003],{"id":51002},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,51005,51006],{},[20,51007],{"alt":22,"src":51008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[584,51010,51012],{"id":51011},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[567,51014,51015],{},[570,51016,51017],{},"输出语法：",[14,51019,51020],{},"①document.write('要出的内容')",[14,51022,51023],{},"向body内输出内容；",[14,51025,51026],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51028,51029],{},"②alert('要出的内容')",[14,51031,51032],{},"页面弹出警告对话框",[14,51034,51035],{},"③console.log('控制台打印')",[14,51037,51038],{},"控制台输出语法，程序员调试使用",[14,51040,51041],{},"输入log就行，自动生成：",[14,51043,51044],{},[20,51045],{"alt":22,"src":51046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[567,51048,51049],{"start":44},[570,51050,51051],{},"输入语法：",[14,51053,51054],{},[20,51055],{"alt":22,"src":51056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[584,51058,51060],{"id":51059},"_2116-字面量","21.1.6 字面量",[14,51062,51063],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51065,51066],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[555,51068,51070],{"id":51069},"_22-变量","2.2 变量",[567,51072,51073],{},[570,51074,51075],{},"变量声明",[14,51077,51078],{},"let 变量名",[1611,51080,51081,51084],{},[570,51082,51083],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[570,51085,51086],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[567,51088,51089],{"start":44},[570,51090,51091],{},"变量赋值",[25,51093,51097],{"className":51094,"code":51095,"language":51096,"meta":22,"style":22},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[31,51098,51099,51104],{"__ignoreMap":22},[34,51100,51101],{"class":36,"line":37},[34,51102,51103],{"class":59},"let age\n",[34,51105,51106],{"class":36,"line":44},[34,51107,51108],{"class":59},"age=18\n",[567,51110,51111,51114],{"start":50},[570,51112,51113],{},"连这些（变量的初始化）：let age=18",[570,51115,51116],{},"更新变量",[14,51118,51119],{},[20,51120],{"alt":22,"src":51121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[567,51123,51124],{"start":107},[570,51125,51126],{},"声明多个变量",[14,51128,51129],{},[20,51130],{"alt":22,"src":51131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[567,51133,51134],{"start":196},[570,51135,51136],{},"变量命名规则与规范",[14,51138,51139],{},[20,51140],{"alt":22,"src":51141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51143,51144],{},"遵守小驼峰！",[567,51146,51147],{"start":202},[570,51148,51149],{},"变量拓展-let和var的区别",[14,51151,51152],{},[20,51153],{"alt":22,"src":51154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[555,51156,51158],{"id":51157},"_23-数组","2.3 数组",[25,51160,51162],{"className":51094,"code":51161,"language":51096,"meta":22,"style":22},"let arr = []\n",[31,51163,51164],{"__ignoreMap":22},[34,51165,51166],{"class":36,"line":37},[34,51167,51161],{"class":59},[14,51169,51170],{},[20,51171],{"alt":22,"src":51172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51174,51175],{},[20,51176],{"alt":22,"src":51177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[555,51179,51181],{"id":51180},"_24-常量","2.4 常量",[14,51183,51184],{},[20,51185],{"alt":22,"src":51186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51188,51189],{},"const — 类似于 let ，但是变量的值无法被修改",[555,51191,51193],{"id":51192},"_25-数据类型","2.5 数据类型",[14,51195,51196],{},[20,51197],{"alt":22,"src":51198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[567,51200,51201,51204],{},[570,51202,51203],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[570,51205,51206],{},"算数运算符：",[14,51208,51209],{},[20,51210],{"alt":22,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[567,51213,51214],{"start":50},[570,51215,51216],{},"数字类型（Number）",[14,51218,51219],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51221,51222],{},[20,51223],{"alt":22,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[567,51226,51227],{"start":56},[570,51228,51229],{},"字符串类型（string）",[14,51231,51232],{},[20,51233],{"alt":22,"src":51234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51236,51237],{},"反引号也是可以使用的",[14,51239,51240],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51242,51243],{},"例如：document.write(\"我今年\"+age+\"岁\")",[567,51245,51246],{"start":107},[570,51247,51248],{},"模板字符串",[14,51250,51251],{},[20,51252],{"alt":22,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51255,51256],{},"类似于python的字符串格式化",[567,51258,51259],{"start":196},[570,51260,51261],{},"布尔类型",[14,51263,51264],{},"true 和 false",[567,51266,51267],{"start":202},[570,51268,51269],{},"未定义类型（underfined）",[14,51271,51272],{},"表示没有赋值",[14,51274,51275],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51277,51278],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[567,51280,51281],{"start":207},[570,51282,51283],{},"null（空类型）",[14,51285,51286],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51288,51289],{},"赋值了，但是内容为空",[25,51291,51293],{"className":51094,"code":51292,"language":51096,"meta":22,"style":22},"typeof null\n输出的是'object'，是一个对象数据类型\n",[31,51294,51295,51300],{"__ignoreMap":22},[34,51296,51297],{"class":36,"line":37},[34,51298,51299],{"class":59},"typeof null\n",[34,51301,51302],{"class":36,"line":44},[34,51303,51304],{"class":59},"输出的是'object'，是一个对象数据类型\n",[567,51306,51307],{"start":222},[570,51308,51309],{},"控制台检测数据类型",[14,51311,51312],{},[20,51313],{"alt":22,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[567,51316,51317],{"start":227},[570,51318,51319],{},"类型转换",[14,51321,51322],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51324,51325],{},"转换方式：隐式转换和显示转换",[14,51327,51328],{},"①隐式转换",[1611,51330,51331,51334,51337,51340],{},[570,51332,51333],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[570,51335,51336],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[570,51338,51339],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[570,51341,51342],{},"任何数据和字符串相加结果都是字符串",[14,51344,51345],{},"②显示转换",[14,51347,51348],{},[20,51349],{"alt":22,"src":51350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51352,51353],{},[20,51354],{"alt":22,"src":51355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51357,51358],{},"在输入的时候要用好隐式转换，简单写起来",[14,51360,51361],{},"let num = +prompt(’请输入数字：‘)",[14,51363,51364],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51366,51367],{},"console.log(parseInt('12.333px'))",[14,51369,51370],{},"输出为：12",[14,51372,51373],{},"console.log(parseInt('a'a'a12.333px'))",[14,51375,51376],{},"输出：NaN",[555,51378,51380],{"id":51379},"_26-运算符","2.6 运算符",[584,51382,51384],{"id":51383},"_261-赋值运算符","2.6.1 赋值运算符",[14,51386,51387],{},[20,51388],{"alt":22,"src":51389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[584,51391,51393],{"id":51392},"_262-一元运算符","2.6.2 一元运算符",[14,51395,51396],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51398,51399],{},[20,51400],{"alt":22,"src":51401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51403,51404],{},[20,51405],{"alt":22,"src":51406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51408,51409],{},"两者的区别：",[14,51411,51412],{},[20,51413],{"alt":22,"src":51414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51416,51417],{},"前置先自加；后置后加，代码执行完之后再加",[584,51419,51421],{"id":51420},"_263-比较运算符","2.6.3 比较运算符",[14,51423,51424],{},[20,51425],{"alt":22,"src":51426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51428,51429],{},"比较运算符也有隐式转换",[14,51431,51432],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51434,51435],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51437,51438],{},"要使用三等，开发的时候",[14,51440,51441],{},"NaN不等于任何人，包括它自己",[14,51443,51444],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51446,51447],{},"7\u002F10=0.7",[14,51449,51450],{},"最后：0.5+0.2=0.7",[14,51452,51453],{},"字符串比较，比较的是字符对应的ASCII码",[584,51455,51457],{"id":51456},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51459,51460],{},[20,51461],{"alt":22,"src":51462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51464,51465],{},[20,51466],{"alt":22,"src":51467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51469,51470],{},[20,51471],{"alt":22,"src":51472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51474,51475],{},"上述题目选D",[14,51477,51478],{},"与真2假1；或真1假2",[584,51480,51482],{"id":51481},"_265-运算符优先级","2.6.5 运算符优先级",[14,51484,51485],{},[20,51486],{"alt":22,"src":51487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51489,51490],{},"先算逻辑与，后算逻辑或",[555,51492,51494],{"id":51493},"_27-语句","2.7 语句",[14,51496,51497],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51499,51500],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51502,51503],{},[20,51504],{"alt":22,"src":51505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51507,51508],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51510,51511],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[584,51513,51515],{"id":51514},"_271-分支语句","2.7.1 分支语句",[22462,51517,51519],{"id":51518},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51521,51522],{},"if语句单行简单的话，可以不写{}，写在一行就行",[567,51524,51525],{},[570,51526,51527],{},"单分支语句",[14,51529,51530],{},[20,51531],{"alt":22,"src":51532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51534,51535],{},"除了0，所有数字都为真",[25,51537,51539],{"className":51094,"code":51538,"language":51096,"meta":22,"style":22},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[31,51540,51541,51546,51551,51556,51560],{"__ignoreMap":22},[34,51542,51543],{"class":36,"line":37},[34,51544,51545],{"class":59},"if（0) {\n",[34,51547,51548],{"class":36,"line":44},[34,51549,51550],{"class":59},"    let a=1\n",[34,51552,51553],{"class":36,"line":50},[34,51554,51555],{"class":59},"    alert(typeof a)\n",[34,51557,51558],{"class":36,"line":56},[34,51559,2036],{"class":59},[34,51561,51562],{"class":36,"line":107},[34,51563,51564],{"class":59},"不输出，括号为假\n",[567,51566,51567],{"start":44},[570,51568,51569],{},"双分支语句",[14,51571,51572],{},[20,51573],{"alt":22,"src":51574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[567,51576,51577],{"start":50},[570,51578,51579],{},"多分支语句",[14,51581,51582],{},[20,51583],{"alt":22,"src":51584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22462,51586,51588],{"id":51587},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51590,51591],{},[20,51592],{"alt":22,"src":51593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22462,51595,51597],{"id":51596},"_2713-switch语句","2.7.1.3 switch语句",[14,51599,51600],{},[20,51601],{"alt":22,"src":51602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51604,51605],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[584,51607,51609],{"id":51608},"_272-循环语句","2.7.2 循环语句",[22462,51611,51613],{"id":51612},"_2721-断点演示","2.7.2.1 断点演示",[14,51615,51616],{},[20,51617],{"alt":22,"src":51618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22462,51620,51622],{"id":51621},"_2722-while循环","2.7.2.2 while循环",[14,51624,51625],{},[20,51626],{"alt":22,"src":51627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51629,51630],{},[20,51631],{"alt":22,"src":51632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22462,51634,51636],{"id":51635},"_2723-for循环","2.7.2.3 for循环",[14,51638,51639],{},[20,51640],{"alt":22,"src":51641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51643,51644],{},"for(;;) {",[14,51646,1550],{},[14,51648,51649],{},"表示无限循环",[14,51651,51652],{},[20,51653],{"alt":22,"src":51654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22462,51656,51658],{"id":51657},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51660,51661],{},[20,51662],{"alt":22,"src":51663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[555,51665,51667],{"id":51666},"_28-数组","2.8 数组",[584,51669,51671],{"id":51670},"_281-基础认识","2.8.1 基础认识",[14,51673,51674],{},[20,51675],{"alt":22,"src":51676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51678,51679],{},[20,51680],{"alt":22,"src":51681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51683,51684],{},[20,51685],{"alt":22,"src":51686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51688,51689],{},[20,51690],{"alt":22,"src":51691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[584,51693,51695],{"id":51694},"_282-操作数组","2.8.2 操作数组",[14,51697,51698],{},[20,51699],{"alt":22,"src":51700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[567,51702,51703],{},[570,51704,51705],{},"添加元素",[14,51707,51708],{},[20,51709],{"alt":22,"src":51710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51712,51713],{},"console.log(arr.push('green'))",[14,51715,51716],{},"输出结果：为新数组的长度",[14,51718,51719],{},[20,51720],{"alt":22,"src":51721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51723,51724],{},"push用的非常多，一定要记住",[567,51726,51727],{},[570,51728,51729],{},"删除元素",[14,51731,51732],{},[20,51733],{"alt":22,"src":51734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51736,51737],{},[20,51738],{"alt":22,"src":51739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51741,51742],{},[20,51743],{"alt":22,"src":51744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[584,51746,51748],{"id":51747},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[25,51750,51752],{"className":51094,"code":51751,"language":51096,"meta":22,"style":22},"\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",[31,51753,51754,51769,51785,51789,51798,51816,51840,51862,51876,51884,51891,51903,51914,51918,51922,51929,51941,51956,51969,51988,52005,52020,52032,52044,52056,52060,52064,52075,52085,52097,52109,52121,52132,52136,52140,52152,52156,52170,52174,52178,52189,52203,52215,52229,52233,52242,52251,52255,52264,52268,52277,52282,52287,52300,52328,52333,52338,52363,52368,52372,52377,52382,52397,52401,52406,52436,52448,52464,52480,52494,52499,52506,52510,52515,52528,52536,52544,52548],{"__ignoreMap":22},[34,51755,51756,51759,51763,51766],{"class":36,"line":37},[34,51757,51758],{"class":59},"\u003C!",[34,51760,51762],{"class":51761},"s9eBZ","DOCTYPE",[34,51764,51765],{"class":2427}," html",[34,51767,51768],{"class":59},">\n",[34,51770,51771,51773,51775,51778,51780,51783],{"class":36,"line":44},[34,51772,1515],{"class":59},[34,51774,51096],{"class":51761},[34,51776,51777],{"class":2427}," lang",[34,51779,447],{"class":59},[34,51781,51782],{"class":187},"\"en\"",[34,51784,51768],{"class":59},[34,51786,51787],{"class":36,"line":50},[34,51788,2864],{"emptyLinePlaceholder":540},[34,51790,51791,51793,51796],{"class":36,"line":56},[34,51792,1515],{"class":59},[34,51794,51795],{"class":51761},"head",[34,51797,51768],{"class":59},[34,51799,51800,51803,51806,51809,51811,51814],{"class":36,"line":107},[34,51801,51802],{"class":59},"    \u003C",[34,51804,51805],{"class":51761},"meta",[34,51807,51808],{"class":2427}," charset",[34,51810,447],{"class":59},[34,51812,51813],{"class":187},"\"UTF-8\"",[34,51815,51768],{"class":59},[34,51817,51818,51820,51822,51825,51827,51830,51833,51835,51838],{"class":36,"line":196},[34,51819,51802],{"class":59},[34,51821,51805],{"class":51761},[34,51823,51824],{"class":2427}," http-equiv",[34,51826,447],{"class":59},[34,51828,51829],{"class":187},"\"X-UA-Compatible\"",[34,51831,51832],{"class":2427}," content",[34,51834,447],{"class":59},[34,51836,51837],{"class":187},"\"IE=edge\"",[34,51839,51768],{"class":59},[34,51841,51842,51844,51846,51848,51850,51853,51855,51857,51860],{"class":36,"line":202},[34,51843,51802],{"class":59},[34,51845,51805],{"class":51761},[34,51847,15384],{"class":2427},[34,51849,447],{"class":59},[34,51851,51852],{"class":187},"\"viewport\"",[34,51854,51832],{"class":2427},[34,51856,447],{"class":59},[34,51858,51859],{"class":187},"\"width=device-width, initial-scale=1.0\"",[34,51861,51768],{"class":59},[34,51863,51864,51866,51869,51872,51874],{"class":36,"line":207},[34,51865,51802],{"class":59},[34,51867,51868],{"class":51761},"title",[34,51870,51871],{"class":59},">Document\u003C\u002F",[34,51873,51868],{"class":51761},[34,51875,51768],{"class":59},[34,51877,51878,51880,51882],{"class":36,"line":222},[34,51879,51802],{"class":59},[34,51881,532],{"class":51761},[34,51883,51768],{"class":59},[34,51885,51886,51889],{"class":36,"line":227},[34,51887,51888],{"class":51761},"        *",[34,51890,16036],{"class":59},[34,51892,51893,51896,51899,51901],{"class":36,"line":232},[34,51894,51895],{"class":63},"            margin",[34,51897,51898],{"class":59},": ",[34,51900,319],{"class":63},[34,51902,1765],{"class":59},[34,51904,51905,51908,51910,51912],{"class":36,"line":238},[34,51906,51907],{"class":63},"            padding",[34,51909,51898],{"class":59},[34,51911,319],{"class":63},[34,51913,1765],{"class":59},[34,51915,51916],{"class":36,"line":244},[34,51917,2993],{"class":59},[34,51919,51920],{"class":36,"line":250},[34,51921,2864],{"emptyLinePlaceholder":540},[34,51923,51924,51927],{"class":36,"line":256},[34,51925,51926],{"class":2427},"        .box",[34,51928,16036],{"class":59},[34,51930,51931,51934,51936,51939],{"class":36,"line":261},[34,51932,51933],{"class":63},"            display",[34,51935,51898],{"class":59},[34,51937,51938],{"class":63},"flex",[34,51940,1765],{"class":59},[34,51942,51943,51946,51948,51951,51954],{"class":36,"line":267},[34,51944,51945],{"class":63},"            width",[34,51947,51898],{"class":59},[34,51949,51950],{"class":63},"700",[34,51952,51953],{"class":112},"px",[34,51955,1765],{"class":59},[34,51957,51958,51961,51963,51965,51967],{"class":36,"line":2138},[34,51959,51960],{"class":63},"            height",[34,51962,51898],{"class":59},[34,51964,4437],{"class":63},[34,51966,51953],{"class":112},[34,51968,1765],{"class":59},[34,51970,51971,51974,51976,51978,51980,51983,51986],{"class":36,"line":2143},[34,51972,51973],{"class":63},"            border-left",[34,51975,51898],{"class":59},[34,51977,64],{"class":63},[34,51979,51953],{"class":112},[34,51981,51982],{"class":63}," solid",[34,51984,51985],{"class":63}," pink",[34,51987,1765],{"class":59},[34,51989,51990,51993,51995,51997,51999,52001,52003],{"class":36,"line":2157},[34,51991,51992],{"class":63},"            border-bottom",[34,51994,51898],{"class":59},[34,51996,64],{"class":63},[34,51998,51953],{"class":112},[34,52000,51982],{"class":63},[34,52002,51985],{"class":63},[34,52004,1765],{"class":59},[34,52006,52007,52009,52011,52013,52015,52018],{"class":36,"line":2162},[34,52008,51895],{"class":63},[34,52010,51898],{"class":59},[34,52012,1262],{"class":63},[34,52014,51953],{"class":112},[34,52016,52017],{"class":63}," auto",[34,52019,1765],{"class":59},[34,52021,52022,52025,52027,52030],{"class":36,"line":2191},[34,52023,52024],{"class":63},"            justify-content",[34,52026,51898],{"class":59},[34,52028,52029],{"class":63},"space-around",[34,52031,1765],{"class":59},[34,52033,52034,52037,52039,52042],{"class":36,"line":2196},[34,52035,52036],{"class":63},"            align-items",[34,52038,51898],{"class":59},[34,52040,52041],{"class":63},"flex-end",[34,52043,1765],{"class":59},[34,52045,52046,52049,52051,52054],{"class":36,"line":2213},[34,52047,52048],{"class":63},"            text-align",[34,52050,51898],{"class":59},[34,52052,52053],{"class":63},"center",[34,52055,1765],{"class":59},[34,52057,52058],{"class":36,"line":2218},[34,52059,2993],{"class":59},[34,52061,52062],{"class":36,"line":2223},[34,52063,2864],{"emptyLinePlaceholder":540},[34,52065,52066,52068,52070,52073],{"class":36,"line":2228},[34,52067,51926],{"class":2427},[34,52069,1564],{"class":112},[34,52071,52072],{"class":51761},"div",[34,52074,16036],{"class":59},[34,52076,52077,52079,52081,52083],{"class":36,"line":2242},[34,52078,51933],{"class":63},[34,52080,51898],{"class":59},[34,52082,51938],{"class":63},[34,52084,1765],{"class":59},[34,52086,52087,52089,52091,52093,52095],{"class":36,"line":2247},[34,52088,51945],{"class":63},[34,52090,51898],{"class":59},[34,52092,1262],{"class":63},[34,52094,51953],{"class":112},[34,52096,1765],{"class":59},[34,52098,52099,52102,52104,52107],{"class":36,"line":3041},[34,52100,52101],{"class":63},"            background-color",[34,52103,51898],{"class":59},[34,52105,52106],{"class":63},"pink",[34,52108,1765],{"class":59},[34,52110,52111,52114,52116,52119],{"class":36,"line":3055},[34,52112,52113],{"class":63},"            flex-direction",[34,52115,51898],{"class":59},[34,52117,52118],{"class":63},"column",[34,52120,1765],{"class":59},[34,52122,52123,52125,52127,52130],{"class":36,"line":3063},[34,52124,52024],{"class":63},[34,52126,51898],{"class":59},[34,52128,52129],{"class":63},"space-between",[34,52131,1765],{"class":59},[34,52133,52134],{"class":36,"line":3068},[34,52135,2993],{"class":59},[34,52137,52138],{"class":36,"line":3074},[34,52139,2864],{"emptyLinePlaceholder":540},[34,52141,52142,52144,52147,52150],{"class":36,"line":3080},[34,52143,51926],{"class":2427},[34,52145,52146],{"class":51761}," div",[34,52148,52149],{"class":51761}," span",[34,52151,16036],{"class":59},[34,52153,52154],{"class":36,"line":3085},[34,52155,2864],{"emptyLinePlaceholder":540},[34,52157,52158,52161,52163,52166,52168],{"class":36,"line":8412},[34,52159,52160],{"class":63},"            margin-top",[34,52162,51898],{"class":59},[34,52164,52165],{"class":63},"-20",[34,52167,51953],{"class":112},[34,52169,1765],{"class":59},[34,52171,52172],{"class":36,"line":8436},[34,52173,2993],{"class":59},[34,52175,52176],{"class":36,"line":8441},[34,52177,2864],{"emptyLinePlaceholder":540},[34,52179,52180,52182,52184,52187],{"class":36,"line":8447},[34,52181,51926],{"class":2427},[34,52183,52146],{"class":51761},[34,52185,52186],{"class":51761}," h4",[34,52188,16036],{"class":59},[34,52190,52191,52194,52196,52199,52201],{"class":36,"line":8474},[34,52192,52193],{"class":63},"            margin-bottom",[34,52195,51898],{"class":59},[34,52197,52198],{"class":63},"-35",[34,52200,51953],{"class":112},[34,52202,1765],{"class":59},[34,52204,52205,52207,52209,52211,52213],{"class":36,"line":8479},[34,52206,51945],{"class":63},[34,52208,51898],{"class":59},[34,52210,964],{"class":63},[34,52212,51953],{"class":112},[34,52214,1765],{"class":59},[34,52216,52217,52220,52222,52225,52227],{"class":36,"line":8485},[34,52218,52219],{"class":63},"            margin-left",[34,52221,51898],{"class":59},[34,52223,52224],{"class":63},"-10",[34,52226,51953],{"class":112},[34,52228,1765],{"class":59},[34,52230,52231],{"class":36,"line":8497},[34,52232,2993],{"class":59},[34,52234,52235,52238,52240],{"class":36,"line":8509},[34,52236,52237],{"class":59},"    \u003C\u002F",[34,52239,532],{"class":51761},[34,52241,51768],{"class":59},[34,52243,52244,52247,52249],{"class":36,"line":8521},[34,52245,52246],{"class":59},"\u003C\u002F",[34,52248,51795],{"class":51761},[34,52250,51768],{"class":59},[34,52252,52253],{"class":36,"line":10180},[34,52254,2864],{"emptyLinePlaceholder":540},[34,52256,52257,52259,52262],{"class":36,"line":10205},[34,52258,1515],{"class":59},[34,52260,52261],{"class":51761},"body",[34,52263,51768],{"class":59},[34,52265,52266],{"class":36,"line":10228},[34,52267,2864],{"emptyLinePlaceholder":540},[34,52269,52270,52272,52275],{"class":36,"line":10252},[34,52271,51802],{"class":59},[34,52273,52274],{"class":51761},"script",[34,52276,51768],{"class":59},[34,52278,52279],{"class":36,"line":10257},[34,52280,52281],{"class":40},"        \u002F\u002F 1. 四次弹框效果\n",[34,52283,52284],{"class":36,"line":10262},[34,52285,52286],{"class":40},"        \u002F\u002F 声明一个新的数组\n",[34,52288,52289,52292,52295,52297],{"class":36,"line":10267},[34,52290,52291],{"class":112},"        let",[34,52293,52294],{"class":59}," arr ",[34,52296,447],{"class":112},[34,52298,52299],{"class":59}," []\n",[34,52301,52302,52304,52306,52309,52311,52313,52315,52317,52319,52322,52324,52326],{"class":36,"line":10276},[34,52303,3867],{"class":112},[34,52305,2122],{"class":59},[34,52307,52308],{"class":112},"let",[34,52310,9902],{"class":59},[34,52312,447],{"class":112},[34,52314,25583],{"class":63},[34,52316,9909],{"class":59},[34,52318,2059],{"class":112},[34,52320,52321],{"class":63}," 4",[34,52323,3678],{"class":59},[34,52325,2756],{"class":112},[34,52327,12906],{"class":59},[34,52329,52330],{"class":36,"line":10281},[34,52331,52332],{"class":40},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[34,52334,52335],{"class":36,"line":10287},[34,52336,52337],{"class":40},"            \u002F\u002F arr.push(num)\n",[34,52339,52340,52343,52346,52348,52351,52353,52356,52358,52361],{"class":36,"line":10308},[34,52341,52342],{"class":59},"            arr.",[34,52344,52345],{"class":2427},"push",[34,52347,617],{"class":59},[34,52349,52350],{"class":2427},"prompt",[34,52352,617],{"class":59},[34,52354,52355],{"class":187},"`请输入第${",[34,52357,1048],{"class":59},[34,52359,52360],{"class":187},"}季度的数据:`",[34,52362,30960],{"class":59},[34,52364,52365],{"class":36,"line":10314},[34,52366,52367],{"class":40},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[34,52369,52370],{"class":36,"line":10328},[34,52371,2993],{"class":59},[34,52373,52374],{"class":36,"line":10334},[34,52375,52376],{"class":40},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[34,52378,52379],{"class":36,"line":10361},[34,52380,52381],{"class":40},"        \u002F\u002F 盒子开头\n",[34,52383,52384,52387,52390,52392,52395],{"class":36,"line":10370},[34,52385,52386],{"class":59},"        document.",[34,52388,52389],{"class":2427},"write",[34,52391,617],{"class":59},[34,52393,52394],{"class":187},"` \u003Cdiv class=\"box\">`",[34,52396,623],{"class":59},[34,52398,52399],{"class":36,"line":10376},[34,52400,2864],{"emptyLinePlaceholder":540},[34,52402,52403],{"class":36,"line":10384},[34,52404,52405],{"class":40},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[34,52407,52408,52410,52412,52414,52416,52418,52420,52422,52424,52427,52430,52432,52434],{"class":36,"line":10389},[34,52409,3867],{"class":112},[34,52411,2122],{"class":59},[34,52413,52308],{"class":112},[34,52415,9902],{"class":59},[34,52417,447],{"class":112},[34,52419,4557],{"class":63},[34,52421,9909],{"class":59},[34,52423,1515],{"class":112},[34,52425,52426],{"class":59}," arr.",[34,52428,52429],{"class":63},"length",[34,52431,3678],{"class":59},[34,52433,2756],{"class":112},[34,52435,12906],{"class":59},[34,52437,52438,52441,52443,52445],{"class":36,"line":17068},[34,52439,52440],{"class":59},"            document.",[34,52442,52389],{"class":2427},[34,52444,617],{"class":59},[34,52446,52447],{"class":187},"`\n",[34,52449,52450,52453,52455,52457,52459,52461],{"class":36,"line":17074},[34,52451,52452],{"class":187},"              \u003Cdiv style=\"height: ${",[34,52454,4344],{"class":59},[34,52456,1495],{"class":187},[34,52458,1048],{"class":59},[34,52460,477],{"class":187},[34,52462,52463],{"class":187},"}px;\">\n",[34,52465,52466,52469,52471,52473,52475,52477],{"class":36,"line":17097},[34,52467,52468],{"class":187},"                \u003Cspan>${",[34,52470,4344],{"class":59},[34,52472,1495],{"class":187},[34,52474,1048],{"class":59},[34,52476,477],{"class":187},[34,52478,52479],{"class":187},"}\u003C\u002Fspan>\n",[34,52481,52482,52485,52487,52489,52491],{"class":36,"line":17103},[34,52483,52484],{"class":187},"                \u003Ch4>第${",[34,52486,1048],{"class":59},[34,52488,46027],{"class":112},[34,52490,25583],{"class":63},[34,52492,52493],{"class":187},"}季度\u003C\u002Fh4>\n",[34,52495,52496],{"class":36,"line":17126},[34,52497,52498],{"class":187},"              \u003C\u002Fdiv>          \n",[34,52500,52501,52504],{"class":36,"line":17140},[34,52502,52503],{"class":187},"            `",[34,52505,623],{"class":59},[34,52507,52508],{"class":36,"line":17160},[34,52509,2993],{"class":59},[34,52511,52512],{"class":36,"line":17166},[34,52513,52514],{"class":40},"        \u002F\u002F 盒子结尾\n",[34,52516,52517,52519,52521,52523,52526],{"class":36,"line":17177},[34,52518,52386],{"class":59},[34,52520,52389],{"class":2427},[34,52522,617],{"class":59},[34,52524,52525],{"class":187},"` \u003C\u002Fdiv>`",[34,52527,623],{"class":59},[34,52529,52530,52532,52534],{"class":36,"line":17200},[34,52531,52237],{"class":59},[34,52533,52274],{"class":51761},[34,52535,51768],{"class":59},[34,52537,52538,52540,52542],{"class":36,"line":17222},[34,52539,52246],{"class":59},[34,52541,52261],{"class":51761},[34,52543,51768],{"class":59},[34,52545,52546],{"class":36,"line":17227},[34,52547,2864],{"emptyLinePlaceholder":540},[34,52549,52550,52552,52554],{"class":36,"line":17233},[34,52551,52246],{"class":59},[34,52553,51096],{"class":51761},[34,52555,51768],{"class":59},[584,52557,52559],{"id":52558},"_284-冒泡排序","2.8.4 冒泡排序",[25,52561,52563],{"className":51094,"code":52562,"language":51096,"meta":22,"style":22},"\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",[31,52564,52565,52575,52589,52593,52601,52616,52636,52648,52656,52660,52668,52676,52708,52741,52778,52783,52802,52807,52820,52835,52851,52855,52860,52864,52874,52883,52891,52895],{"__ignoreMap":22},[34,52566,52567,52569,52571,52573],{"class":36,"line":37},[34,52568,51758],{"class":59},[34,52570,51762],{"class":51761},[34,52572,51765],{"class":2427},[34,52574,51768],{"class":59},[34,52576,52577,52579,52581,52583,52585,52587],{"class":36,"line":44},[34,52578,1515],{"class":59},[34,52580,51096],{"class":51761},[34,52582,51777],{"class":2427},[34,52584,447],{"class":59},[34,52586,51782],{"class":187},[34,52588,51768],{"class":59},[34,52590,52591],{"class":36,"line":50},[34,52592,2864],{"emptyLinePlaceholder":540},[34,52594,52595,52597,52599],{"class":36,"line":56},[34,52596,1515],{"class":59},[34,52598,51795],{"class":51761},[34,52600,51768],{"class":59},[34,52602,52603,52606,52608,52610,52612,52614],{"class":36,"line":107},[34,52604,52605],{"class":59},"  \u003C",[34,52607,51805],{"class":51761},[34,52609,51808],{"class":2427},[34,52611,447],{"class":59},[34,52613,51813],{"class":187},[34,52615,51768],{"class":59},[34,52617,52618,52620,52622,52624,52626,52628,52630,52632,52634],{"class":36,"line":196},[34,52619,52605],{"class":59},[34,52621,51805],{"class":51761},[34,52623,15384],{"class":2427},[34,52625,447],{"class":59},[34,52627,51852],{"class":187},[34,52629,51832],{"class":2427},[34,52631,447],{"class":59},[34,52633,51859],{"class":187},[34,52635,51768],{"class":59},[34,52637,52638,52640,52642,52644,52646],{"class":36,"line":202},[34,52639,52605],{"class":59},[34,52641,51868],{"class":51761},[34,52643,51871],{"class":59},[34,52645,51868],{"class":51761},[34,52647,51768],{"class":59},[34,52649,52650,52652,52654],{"class":36,"line":207},[34,52651,52246],{"class":59},[34,52653,51795],{"class":51761},[34,52655,51768],{"class":59},[34,52657,52658],{"class":36,"line":222},[34,52659,2864],{"emptyLinePlaceholder":540},[34,52661,52662,52664,52666],{"class":36,"line":227},[34,52663,1515],{"class":59},[34,52665,52261],{"class":51761},[34,52667,51768],{"class":59},[34,52669,52670,52672,52674],{"class":36,"line":232},[34,52671,52605],{"class":59},[34,52673,52274],{"class":51761},[34,52675,51768],{"class":59},[34,52677,52678,52681,52683,52685,52688,52690,52692,52694,52696,52698,52700,52702,52704,52706],{"class":36,"line":238},[34,52679,52680],{"class":112},"    let",[34,52682,52294],{"class":59},[34,52684,447],{"class":112},[34,52686,52687],{"class":59}," [",[34,52689,927],{"class":63},[34,52691,12899],{"class":59},[34,52693,217],{"class":63},[34,52695,12899],{"class":59},[34,52697,309],{"class":63},[34,52699,12899],{"class":59},[34,52701,70],{"class":63},[34,52703,12899],{"class":59},[34,52705,64],{"class":63},[34,52707,73],{"class":59},[34,52709,52710,52712,52714,52716,52718,52720,52722,52724,52726,52728,52730,52733,52735,52737,52739],{"class":36,"line":244},[34,52711,3665],{"class":112},[34,52713,2122],{"class":59},[34,52715,52308],{"class":112},[34,52717,9902],{"class":59},[34,52719,447],{"class":112},[34,52721,4557],{"class":63},[34,52723,9909],{"class":59},[34,52725,1515],{"class":112},[34,52727,52426],{"class":59},[34,52729,52429],{"class":63},[34,52731,52732],{"class":112}," -",[34,52734,25583],{"class":63},[34,52736,3678],{"class":59},[34,52738,2756],{"class":112},[34,52740,12906],{"class":59},[34,52742,52743,52746,52748,52750,52752,52754,52756,52758,52760,52762,52764,52766,52768,52770,52772,52774,52776],{"class":36,"line":250},[34,52744,52745],{"class":112},"      for",[34,52747,2122],{"class":59},[34,52749,52308],{"class":112},[34,52751,9964],{"class":59},[34,52753,447],{"class":112},[34,52755,4557],{"class":63},[34,52757,9971],{"class":59},[34,52759,1515],{"class":112},[34,52761,52426],{"class":59},[34,52763,52429],{"class":63},[34,52765,52732],{"class":112},[34,52767,9902],{"class":59},[34,52769,113],{"class":112},[34,52771,25583],{"class":63},[34,52773,9978],{"class":59},[34,52775,2756],{"class":112},[34,52777,12906],{"class":59},[34,52779,52780],{"class":36,"line":256},[34,52781,52782],{"class":40},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[34,52784,52785,52787,52790,52792,52795,52797,52799],{"class":36,"line":261},[34,52786,2961],{"class":112},[34,52788,52789],{"class":59}," (arr[j] ",[34,52791,1564],{"class":112},[34,52793,52794],{"class":59}," arr[j ",[34,52796,1088],{"class":112},[34,52798,25583],{"class":63},[34,52800,52801],{"class":59},"]) {\n",[34,52803,52804],{"class":36,"line":267},[34,52805,52806],{"class":40},"          \u002F\u002F 交换两个变量\n",[34,52808,52809,52812,52815,52817],{"class":36,"line":2138},[34,52810,52811],{"class":112},"          let",[34,52813,52814],{"class":59}," tmp ",[34,52816,447],{"class":112},[34,52818,52819],{"class":59}," arr[j]\n",[34,52821,52822,52825,52827,52829,52831,52833],{"class":36,"line":2143},[34,52823,52824],{"class":59},"          arr[j] ",[34,52826,447],{"class":112},[34,52828,52794],{"class":59},[34,52830,1088],{"class":112},[34,52832,25583],{"class":63},[34,52834,73],{"class":59},[34,52836,52837,52840,52842,52844,52846,52848],{"class":36,"line":2157},[34,52838,52839],{"class":59},"          arr[j ",[34,52841,1088],{"class":112},[34,52843,25583],{"class":63},[34,52845,4907],{"class":59},[34,52847,447],{"class":112},[34,52849,52850],{"class":59}," tmp\n",[34,52852,52853],{"class":36,"line":2162},[34,52854,2993],{"class":59},[34,52856,52857],{"class":36,"line":2191},[34,52858,52859],{"class":59},"      }\n",[34,52861,52862],{"class":36,"line":2196},[34,52863,2651],{"class":59},[34,52865,52866,52869,52871],{"class":36,"line":2213},[34,52867,52868],{"class":59},"    document.",[34,52870,52389],{"class":2427},[34,52872,52873],{"class":59},"(arr)\n",[34,52875,52876,52879,52881],{"class":36,"line":2218},[34,52877,52878],{"class":59},"  \u003C\u002F",[34,52880,52274],{"class":51761},[34,52882,51768],{"class":59},[34,52884,52885,52887,52889],{"class":36,"line":2223},[34,52886,52246],{"class":59},[34,52888,52261],{"class":51761},[34,52890,51768],{"class":59},[34,52892,52893],{"class":36,"line":2228},[34,52894,2864],{"emptyLinePlaceholder":540},[34,52896,52897,52899,52901],{"class":36,"line":2242},[34,52898,52246],{"class":59},[34,52900,51096],{"class":51761},[34,52902,51768],{"class":59},[14,52904,52905],{},[20,52906],{"alt":22,"src":52907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52909,52910],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52912,52913],{},"let arr = [4, 2, 5, 1, 3]",[14,52915,52916],{},"\u002F\u002F 1.升序排列写法",[14,52918,52919],{},"arr.sort(function (a, b) {",[14,52921,52922],{},"return a - b",[14,52924,52925],{},"})",[14,52927,52928],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52930,52931],{},"\u002F\u002F 降序排列写法",[14,52933,52919],{},[14,52935,52936],{},"return b - a",[14,52938,52925],{},[14,52940,52941],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[555,52943,52945],{"id":52944},"_29-函数","2.9 函数",[14,52947,52948],{},[20,52949],{"alt":22,"src":52950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52952,52953],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52955,52956],{},"函数的声明用function",[14,52958,52959],{},"函数里边可以嵌套函数",[584,52961,52963],{"id":52962},"_291-函数传参","2.9.1 函数传参",[14,52965,52966],{},[20,52967],{"alt":22,"src":52968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52970,52971],{},[20,52972],{"alt":22,"src":52973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1611,52975,52976,52979,52982,52985,52988,52991],{},[570,52977,52978],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[570,52980,52981],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[570,52983,52984],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[570,52986,52987],{},"开发中尽量保持形参和实参个数一致",[570,52989,52990],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[570,52992,52993],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52995,52996],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[584,52998,53000],{"id":52999},"_292-函数的返回值","2.9.2 函数的返回值",[14,53002,53003],{},[20,53004],{"alt":22,"src":53005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,53007,53008],{},[20,53009],{"alt":22,"src":53010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1611,53012,53013,53016,53019,53022,53025],{},[570,53014,53015],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[570,53017,53018],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[570,53020,53021],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[570,53023,53024],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[570,53026,53027],{},"断点调试:进入函数内部看执行过程F11",[584,53029,53031],{"id":53030},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[25,53033,53035],{"className":51094,"code":53034,"language":51096,"meta":22,"style":22},"    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",[31,53036,53037,53042,53047,53051,53056],{"__ignoreMap":22},[34,53038,53039],{"class":36,"line":37},[34,53040,53041],{"class":59},"    function fn(a, b) {\n",[34,53043,53044],{"class":36,"line":44},[34,53045,53046],{"class":59},"      console.log(a + b);\n",[34,53048,53049],{"class":36,"line":50},[34,53050,2651],{"class":59},[34,53052,53053],{"class":36,"line":56},[34,53054,53055],{"class":59},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[34,53057,53058],{"class":36,"line":107},[34,53059,53060],{"class":59},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[584,53062,53064],{"id":53063},"_294-作用域","2.9.4 作用域",[1611,53066,53067,53073,53078,53081,53084],{},[570,53068,53069,53070],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[760,53071,53072],{},"作用域",[570,53074,53075],{},[760,53076,53077],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[570,53079,53080],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[570,53082,53083],{},"函数内部可以直接所使用全局变量",[570,53085,53086],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53088,15097],{},[25,53090,53092],{"className":51094,"code":53091,"language":51096,"meta":22,"style":22},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[31,53093,53094,53099,53104,53108,53113,53118,53123],{"__ignoreMap":22},[34,53095,53096],{"class":36,"line":37},[34,53097,53098],{"class":59},"    function fun() {\n",[34,53100,53101],{"class":36,"line":44},[34,53102,53103],{"class":59},"      num = 10\n",[34,53105,53106],{"class":36,"line":50},[34,53107,2651],{"class":59},[34,53109,53110],{"class":36,"line":56},[34,53111,53112],{"class":59},"    fun()\n",[34,53114,53115],{"class":36,"line":107},[34,53116,53117],{"class":59},"    console.log(num)\n",[34,53119,53120],{"class":36,"line":196},[34,53121,53122],{"class":59},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[34,53124,53125],{"class":36,"line":202},[34,53126,53127],{"class":59},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1611,53129,53130,53133],{},[570,53131,53132],{},"函数内部的形参可以看做是局部变量",[570,53134,53135],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53137,53138,53139],{},"变量访问原则： ",[760,53140,53141],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[584,53143,53145],{"id":53144},"_295-匿名函数","2.9.5 匿名函数",[14,53147,53148],{},"函数可以分为具名函数和匿名函数",[14,53150,53151],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[567,53153,53154],{},[570,53155,53156],{},"函数表达式",[14,53158,53159],{},[20,53160],{"alt":22,"src":53161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53163,53164],{},"里边也可以写参数",[14,53166,53167],{},"具名函数调用位置可以随意调整；",[14,53169,53170],{},"匿名函数函数表达式形式只能在声明后才可以使用",[567,53172,53173],{"start":44},[570,53174,53175],{},"立即执行函数",[14,53177,53178],{},[20,53179],{"alt":22,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53182,53183],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53185,53186],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53188,53189],{},"(function () {})();",[14,53191,53192],{},"不要落下最后的;",[14,53194,53195],{},"立即执行函数必须要加;",[14,53197,53198],{},"分号写前写后都没问题",[14,53200,53201],{},"写前：",[14,53203,53204],{},"(function() {})()",[14,53206,53207],{},";(function () {})();",[14,53209,53210],{},"写后:",[14,53212,53213],{},"(function() {})();",[14,53215,53189],{},[14,53217,53218],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53220,53221],{},"还有一种写法：",[14,53223,53224],{},"(function(){}());",[14,53226,53227],{},"或者:",[14,53229,53230],{},"!function(){}();",[14,53232,53233],{},"立即执行函数有时候也是可以加名字的：",[14,53235,53236],{},"(function flexible(window,document) {}(window,document));",[14,53238,53239],{},"省一些调用方法",[584,53241,53243],{"id":53242},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53245,53246],{},[20,53247],{"alt":22,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53250,53251],{},"这样就不用非得给x,y初始化了",[14,53253,53254],{},[20,53255],{"alt":22,"src":53256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53258,53259],{},"代码执行时先看左边",[14,53261,53262],{},"例如：console.log(false && 3+5)",[14,53264,53265],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53267,53268],{},"&&都是真时，就返回最后一个真值",[14,53270,53271],{},"console.log(11 && 22)",[14,53273,53274],{},"输出22",[14,53276,53277],{},"逻辑与：遇真则真",[14,53279,15097],{},[14,53281,53282],{},"let age=1",[14,53284,53285],{},"console.log(11 || age++)",[14,53287,53288],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53290,53291],{},"console.log(11 || 22)",[14,53293,53294],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53296,53297],{},"||如果都是假的话，就取最后一个假的值了",[584,53299,53301],{"id":53300},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53303,53304],{},"显示转换：",[14,53306,53307,53310,53311],{},[760,53308,53309],{},"记忆","： ",[760,53312,53313],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53315,53316],{},"空字符串为假，其他字符串全为真",[14,53318,53319],{},[20,53320],{"alt":22,"src":53321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53323,53324],{},"隐式转换：",[14,53326,53327],{},[20,53328],{"alt":22,"src":53329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53331,53332],{},"隐式转换:",[14,53334,53335],{},"null+3=3",[14,53337,53338],{},"undefined+3=NaN",[14,53340,53341],{},"null==undefined 输出true,他两个都当0看",[14,53343,53344],{},"null===undefined 输出false",[14,53346,53347],{},"undefined做任何操作都是NaN",[14,53349,53350],{},"NaN不等于NaN，NaN表示计算错误",[555,53352,53354],{"id":53353},"_210-对象","2.10 对象",[584,53356,53358],{"id":53357},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53360,53361],{},"对象也是一种数据类型，里边的数据是无序的",[14,53363,53364],{},"对象由属性和方法组成",[14,53366,53367],{},[20,53368],{"alt":22,"src":53369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53371,53372],{},[20,53373],{"alt":22,"src":53374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53376,53377],{},[20,53378],{"alt":22,"src":53379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[584,53381,53383],{"id":53382},"_2102-对象属性","2.10.2 对象属性",[14,53385,53386],{},[20,53387],{"alt":22,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[567,53390,53391],{},[570,53392,53393],{},"查询对象",[14,53395,53396],{},"对象名.属性 goods.uname",[14,53398,53399],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53401,53402],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53404,53405],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53407,53408],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[567,53410,53411],{"start":44},[570,53412,53413],{},"重新赋值",[14,53415,53416],{},"对象名.属性=新值",[567,53418,53419],{"start":50},[570,53420,53421],{},"增加新数据",[14,53423,53416],{},[567,53425,53426],{"start":56},[570,53427,53428],{},"删除对象中的属性",[14,53430,53431],{},"delete 对象名.属性",[584,53433,53435],{"id":53434},"_2103-对象方法","2.10.3 对象方法",[14,53437,53438],{},[20,53439],{"alt":22,"src":53440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53442,53443],{},"后边跟的是匿名函数",[14,53445,53446],{},"对象外面的叫函数；对象内部的叫方法",[14,53448,53449],{},[20,53450],{"alt":22,"src":53451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[584,53453,53455],{"id":53454},"_2104-遍历对象","2.10.4 遍历对象",[14,53457,53458],{},"理解为加括号的python字典遍历",[14,53460,53461],{},[20,53462],{"alt":22,"src":53463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53465,53466],{},"k是字符串类型",[14,53468,53469],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[25,53471,53473],{"className":51094,"code":53472,"language":51096,"meta":22,"style":22},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[31,53474,53475,53480,53485,53490,53495],{"__ignoreMap":22},[34,53476,53477],{"class":36,"line":37},[34,53478,53479],{"class":59},"   let arr = [1, 2, 3]\n",[34,53481,53482],{"class":36,"line":44},[34,53483,53484],{"class":59},"    for (let k in arr) {\n",[34,53486,53487],{"class":36,"line":50},[34,53488,53489],{"class":59},"      console.log(k)\n",[34,53491,53492],{"class":36,"line":56},[34,53493,53494],{"class":59},"      console.log(arr[k])\n",[34,53496,53497],{"class":36,"line":107},[34,53498,2651],{"class":59},[14,53500,53501],{},[20,53502],{"alt":22,"src":53503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53505,53506],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53508,53509],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53511,53512],{},"for in 得到的k是属性名",[52274,53514,53515],{},"\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",[14,53517,53518],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[584,53520,53522],{"id":53521},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53524,53525],{},"数组中放对象信息",[25,53527,53531],{"className":53528,"code":53529,"language":53530,"meta":22,"style":22},"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",[31,53532,53533,53541,53546,53551,53556,53561,53566,53571,53576,53581,53586,53591,53596,53600,53604],{"__ignoreMap":22},[34,53534,53535,53537,53539],{"class":36,"line":37},[34,53536,1515],{"class":59},[34,53538,52274],{"class":51761},[34,53540,51768],{"class":59},[34,53542,53543],{"class":36,"line":44},[34,53544,53545],{"class":59},"    let students = [\n",[34,53547,53548],{"class":36,"line":50},[34,53549,53550],{"class":59},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[34,53552,53553],{"class":36,"line":56},[34,53554,53555],{"class":59},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[34,53557,53558],{"class":36,"line":107},[34,53559,53560],{"class":59},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[34,53562,53563],{"class":36,"line":196},[34,53564,53565],{"class":59},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[34,53567,53568],{"class":36,"line":202},[34,53569,53570],{"class":59},"    ]\n",[34,53572,53573],{"class":36,"line":207},[34,53574,53575],{"class":59},"    for (let i = 0; i \u003C students.length; i++) {\n",[34,53577,53578],{"class":36,"line":222},[34,53579,53580],{"class":59},"      for (let k in students[i]) {\n",[34,53582,53583],{"class":36,"line":227},[34,53584,53585],{"class":59},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[34,53587,53588],{"class":36,"line":232},[34,53589,53590],{"class":59},"        \u002F\u002F输出每个人的名字：\n",[34,53592,53593],{"class":36,"line":238},[34,53594,53595],{"class":59},"        \u002F\u002Fconsole.log(students[i].name)\n",[34,53597,53598],{"class":36,"line":244},[34,53599,52859],{"class":59},[34,53601,53602],{"class":36,"line":250},[34,53603,2651],{"class":59},[34,53605,53606,53608,53610],{"class":36,"line":256},[34,53607,52878],{"class":59},[34,53609,52274],{"class":51761},[34,53611,51768],{"class":59},[584,53613,53615],{"id":53614},"_2106-内置对象","2.10.6 内置对象",[14,53617,53618],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[567,53620,53621],{},[570,53622,53623],{},"数学对象Math",[14,53625,53626],{},[20,53627],{"alt":22,"src":53628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53630,53631],{},[847,53632,53635],{"href":53633,"rel":53634},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24329],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53637,53638],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53640,53641],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53643,53644],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53646,53647],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53649,53650],{},"null属于对象数据类型",[567,53652,53653],{"start":44},[570,53654,53655],{},"生成任意范围随机数",[14,53657,53658],{},[20,53659],{"alt":22,"src":53660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53662,53663],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53665,53666],{},"乘以几就取不到几",[14,53668,53669],{},"取数组中的随机元素：",[14,53671,53672],{},"let arr = ['red', 'green', 'blue']",[14,53674,53675],{},"let random = Math.floor(Math.random() * arr.length)",[14,53677,53678],{},"console.log(arr[random])",[14,53680,53681],{},"这个函数得到的是全闭区间",[14,53683,53684],{},"function getRandom(N, M) {",[14,53686,53687],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53689,1550],{},[14,53691,53692],{},"console.log(getRandom(4, 8))",[584,53694,53696],{"id":53695},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53698,53699],{},[20,53700],{"alt":22,"src":53701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53703,53704],{},[20,53705],{"alt":22,"src":53706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53708,53709],{},[20,53710],{"alt":22,"src":53711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53713,53714],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53716,53717],{},[20,53718],{"alt":22,"src":53719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53721,53722],{},[20,53723],{"alt":22,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53726,53727],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53729,53730],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53732,53733],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[532,53735,53736],{},"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":22,"searchDepth":44,"depth":44,"links":53738},[53739,53747,53748,53749,53750,53751,53758,53762,53768,53777],{"id":50929,"depth":44,"text":50930,"children":53740},[53741,53742,53743,53744,53745,53746],{"id":50933,"depth":50,"text":50934},{"id":50950,"depth":50,"text":50951},{"id":50990,"depth":50,"text":50991},{"id":51002,"depth":50,"text":51003},{"id":51011,"depth":50,"text":51012},{"id":51059,"depth":50,"text":51060},{"id":51069,"depth":44,"text":51070},{"id":51157,"depth":44,"text":51158},{"id":51180,"depth":44,"text":51181},{"id":51192,"depth":44,"text":51193},{"id":51379,"depth":44,"text":51380,"children":53752},[53753,53754,53755,53756,53757],{"id":51383,"depth":50,"text":51384},{"id":51392,"depth":50,"text":51393},{"id":51420,"depth":50,"text":51421},{"id":51456,"depth":50,"text":51457},{"id":51481,"depth":50,"text":51482},{"id":51493,"depth":44,"text":51494,"children":53759},[53760,53761],{"id":51514,"depth":50,"text":51515},{"id":51608,"depth":50,"text":51609},{"id":51666,"depth":44,"text":51667,"children":53763},[53764,53765,53766,53767],{"id":51670,"depth":50,"text":51671},{"id":51694,"depth":50,"text":51695},{"id":51747,"depth":50,"text":51748},{"id":52558,"depth":50,"text":52559},{"id":52944,"depth":44,"text":52945,"children":53769},[53770,53771,53772,53773,53774,53775,53776],{"id":52962,"depth":50,"text":52963},{"id":52999,"depth":50,"text":53000},{"id":53030,"depth":50,"text":53031},{"id":53063,"depth":50,"text":53064},{"id":53144,"depth":50,"text":53145},{"id":53242,"depth":50,"text":53243},{"id":53300,"depth":50,"text":53301},{"id":53353,"depth":44,"text":53354,"children":53778},[53779,53780,53781,53782,53783,53784,53785],{"id":53357,"depth":50,"text":53358},{"id":53382,"depth":50,"text":53383},{"id":53434,"depth":50,"text":53435},{"id":53454,"depth":50,"text":53455},{"id":53521,"depth":50,"text":53522},{"id":53614,"depth":50,"text":53615},{"id":53695,"depth":50,"text":53696},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50921,"description":537},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53792,"title":53793,"body":53794,"description":537,"extension":538,"meta":77134,"navigation":540,"path":77135,"seo":77136,"stem":77137,"__hash__":77138},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53795,"toc":77074},[53796,53799,53802,53805,53810,53813,53816,53819,53823,53827,53833,53838,53846,53853,53856,53860,53865,53870,53875,53878,53881,53892,53895,53899,53902,53905,53910,53915,53920,53923,53926,54018,54021,54026,54029,54034,54037,54040,54045,54048,54053,54057,54060,54074,54078,54083,54086,54089,54093,54098,54101,54105,54109,54114,54118,54123,54126,54129,54132,54135,54138,54141,54146,54151,54179,54182,54185,54188,54193,54196,54199,54202,54205,54209,54238,54242,54247,54252,54255,54258,54261,54266,54381,54386,54391,54552,54557,54560,54564,54569,54574,54577,54580,54583,54586,54589,54592,54595,54598,54601,54604,54607,54610,54613,54616,54618,54621,54624,54627,54632,54636,55033,55036,55042,55046,55051,56333,56338,56341,56344,56347,56352,57548,57552,57558,57563,57566,57571,57576,57580,57584,57589,57592,57597,57600,57603,57607,58515,58518,58522,58743,58746,58749,58752,58978,58981,59205,59208,59212,59217,59220,59223,59451,59454,59487,59490,59494,59499,59503,59506,59509,59512,59515,59518,59521,59524,59529,60809,60813,60816,61909,61913,61916,61919,61922,61925,61929,61932,61935,61937,61945,63426,63430,63433,63436,63439,63648,63651,63655,63659,63664,63669,63672,63675,63680,63684,63689,63692,63801,63805,63810,63815,63818,63821,63825,63830,63835,63840,63843,63846,63857,63860,63865,63870,63873,63876,63949,63953,63958,63961,63963,63974,63978,63983,65309,65312,65315,65318,65320,65323,65326,65329,65332,65335,65338,65341,65344,65347,65350,65353,65356,65358,65360,65363,65367,66461,66464,66467,66483,66497,66500,66505,66511,66516,66520,66524,66529,66533,66538,66980,66985,66988,66992,66997,67000,67003,67007,67012,67016,67021,67026,67030,67035,67040,67043,67048,67053,67057,67062,67067,67171,67174,67178,67183,67549,67552,67555,67558,67561,67564,67567,67570,67573,68869,68873,68878,68883,68886,68889,68892,68895,68897,68902,68907,68910,68914,68919,68924,68929,68932,68935,68938,68941,68944,68949,68952,68956,68961,68966,68970,68975,68978,68983,68986,68989,68992,68995,68998,69003,69006,69009,69012,69015,69019,69024,69027,69031,69036,69039,69042,69046,69075,69078,69082,69086,69091,69095,69100,69103,69106,69109,69112,69115,69118,69121,69124,69127,69130,69133,69136,69139,69142,69146,69151,69156,69159,69163,69167,69172,69175,69179,69182,69185,69190,69195,69200,69205,69210,69213,69216,69221,69226,69230,69235,69238,69243,69246,69249,69252,69255,69260,69263,69272,69276,69281,69284,69287,69291,69294,69299,69303,69306,69312,69318,69322,69348,69351,70912,70915,71411,71414,71419,71424,71429,71433,71438,71443,71448,71452,71457,71460,71463,71466,71469,71473,71476,71481,71484,71489,71493,71498,71501,71506,71511,71516,71519,71522,71527,71532,71535,71538,71542,71545,71550,71553,71558,71561,71566,71571,71576,71579,71584,71649,71652,71663,71667,71672,71844,71848,71853,71856,71859,71862,71866,71877,71881,71884,71889,71894,71897,71900,71903,71906,71909,71911,71914,71917,71920,71925,71928,71933,71936,71940,71943,71946,71960,71964,71967,72022,72027,72030,72033,72038,72041,72045,72050,72180,72184,72189,72194,72275,72280,72284,72287,72292,72297,72303,72306,72309,72312,72316,72321,72324,72335,72339,72356,75403,75407,75410,75413,75416,75437,75441,75444,75452,75455,75460,75463,75466,75471,75476,75480,75501,75505,75510,75513,75516,75519,75522,75526,75531,75534,75538,75543,75546,75551,75554,75559,75562,75567,76770,76774,76779,76782,76787,77071],[10,53797,53793],{"id":53798},"_3web-apis",[14,53800,53801],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53803,53804],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53806,53807],{},[20,53808],{"alt":22,"src":53809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53811,53812],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53814,53815],{},"建议数组和对象使用 const 来声明",[14,53817,53818],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[555,53820,53822],{"id":53821},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[584,53824,53826],{"id":53825},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53828,53829,53832],{},[31,53830,53831],{},"document"," = HTML 文件解析后的对象化表示；",[14,53834,53835,53837],{},[31,53836,53831],{}," ≠ HTML 文件本身",[14,53839,53840,53845],{},[760,53841,53842],{},[31,53843,53844],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53847,53848,53852],{},[760,53849,53850],{},[31,53851,53831],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53854,53855],{},"document实际上为window.document的简写",[584,53857,53859],{"id":53858},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53861,53862],{},[20,53863],{"alt":22,"src":53864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53866,53867],{},[20,53868],{"alt":22,"src":53869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53871,53872],{},[20,53873],{"alt":22,"src":53874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53876,53877],{},"console.dir()",[14,53879,53880],{},"dir用来打印对象",[1611,53882,53883,53886,53889],{},[570,53884,53885],{},"任何一个标签，都是一个对象",[570,53887,53888],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[570,53890,53891],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53893,53894],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[584,53896,53898],{"id":53897},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53900,53901],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53903,53904],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53906,53907],{},[760,53908,53909],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[567,53911,53912],{},[570,53913,53914],{},"利用CSS选择器来获取标签元素",[14,53916,53917],{},[20,53918],{"alt":22,"src":53919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53921,53922],{},"里边的选择器必须必须加引号！！！",[14,53924,53925],{},"只选择第一个元素",[25,53927,53929],{"className":53528,"code":53928,"language":53530,"meta":22,"style":22},"\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",[31,53930,53931,53939,53960,53979,53987,53992,53997,54002,54010],{"__ignoreMap":22},[34,53932,53933,53935,53937],{"class":36,"line":37},[34,53934,1515],{"class":59},[34,53936,52261],{"class":51761},[34,53938,51768],{"class":59},[34,53940,53941,53943,53945,53948,53950,53953,53956,53958],{"class":36,"line":44},[34,53942,52605],{"class":59},[34,53944,52072],{"class":51761},[34,53946,53947],{"class":2427}," class",[34,53949,447],{"class":59},[34,53951,53952],{"class":187},"\"box\"",[34,53954,53955],{"class":59},">123\u003C\u002F",[34,53957,52072],{"class":51761},[34,53959,51768],{"class":59},[34,53961,53962,53964,53966,53968,53970,53972,53975,53977],{"class":36,"line":50},[34,53963,52605],{"class":59},[34,53965,52072],{"class":51761},[34,53967,53947],{"class":2427},[34,53969,447],{"class":59},[34,53971,53952],{"class":187},[34,53973,53974],{"class":59},">456\u003C\u002F",[34,53976,52072],{"class":51761},[34,53978,51768],{"class":59},[34,53980,53981,53983,53985],{"class":36,"line":56},[34,53982,52605],{"class":59},[34,53984,52274],{"class":51761},[34,53986,51768],{"class":59},[34,53988,53989],{"class":36,"line":107},[34,53990,53991],{"class":59},"    \u002F\u002F 1.获取匹配的第一个元素\n",[34,53993,53994],{"class":36,"line":196},[34,53995,53996],{"class":59},"    const box = document.querySelector('div')\n",[34,53998,53999],{"class":36,"line":202},[34,54000,54001],{"class":59},"    console.dir(box)\n",[34,54003,54004,54006,54008],{"class":36,"line":207},[34,54005,52878],{"class":59},[34,54007,52274],{"class":51761},[34,54009,51768],{"class":59},[34,54011,54012,54014,54016],{"class":36,"line":222},[34,54013,52246],{"class":59},[34,54015,52261],{"class":51761},[34,54017,51768],{"class":59},[14,54019,54020],{},"只选123，不选456",[14,54022,54023],{},[20,54024],{"alt":22,"src":54025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,54027,54028],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54030,54031],{},[20,54032],{"alt":22,"src":54033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54035,54036],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54038,54039],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[567,54041,54042],{"start":44},[570,54043,54044],{},"其他方法来获取标签元素",[14,54046,54047],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54049,54050],{},[20,54051],{"alt":22,"src":54052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[584,54054,54056],{"id":54055},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54058,54059],{},"设置修改DOM元素内容有两种方式：",[1611,54061,54062,54065,54068,54071],{},[570,54063,54064],{},"元素.innerText=''",[570,54066,54067],{},"元素.innerHTML=''",[570,54069,54070],{},"不写字符串输出数字也是可以的",[570,54072,54073],{},"元素.innerHtml=1",[22462,54075,54077],{"id":54076},"_3131-innertext","3.1.3.1 innerText",[14,54079,54080],{},[20,54081],{"alt":22,"src":54082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54084,54085],{},"思路：实现了修改盒子中的内容！",[14,54087,54088],{},"它只显示纯文本，不解析标签",[22462,54090,54092],{"id":54091},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54094,54095],{},[20,54096],{"alt":22,"src":54097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54099,54100],{},"相比于innerText，他的强大之处在于可以解析标签",[584,54102,54104],{"id":54103},"_314-操作元素属性","3.1.4 操作元素属性",[22462,54106,54108],{"id":54107},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54110,54111],{},[20,54112],{"alt":22,"src":54113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22462,54115,54117],{"id":54116},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54119,54120],{},[20,54121],{"alt":22,"src":54122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54124,54125],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54127,54128],{},"div.style.backgroundColor = 'hotpink'",[14,54130,54131],{},"如果按照css的写法，-表示减，就会出错",[14,54133,54134],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54136,54137],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54139,54140],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54142,54143],{},[20,54144],{"alt":22,"src":54145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54147,54148],{},[20,54149],{"alt":22,"src":54150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[567,54152,54153,54156,54159,54162,54165,54168],{},[570,54154,54155],{},"className这个方式就是修改很多样式的时候来使用的！",[570,54157,54158],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[570,54160,54161],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[570,54163,54164],{},"className为属性名，如果还用class的话就导致与关键字冲突",[570,54166,54167],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[570,54169,54170,54171,54176],{},"解析标签的时候就变为了",[52072,54172],{"className":54173},[54174,54175],"nav","box",[54177,54178],"br",{},[14,54180,54181],{},"例子：",[52072,54183],{"className":54184},[54174],[52274,54186,54187],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54189,54190],{},[20,54191],{"alt":22,"src":54192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54194,54195],{},"追加和删除类名用classList",[14,54197,54198],{},"常用于类似于开关的操作",[14,54200,54201],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54203,54204],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22462,54206,54208],{"id":54207},"_3143-牢记点","3.1.4.3 牢记点",[567,54210,54211,54214,54217,54220,54223,54226,54229,54232,54235],{},[570,54212,54213],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[570,54215,54216],{},"使用style属性操作css时不要忘记引号",[570,54218,54219],{},"使用className或者classList时也不要忘记引号",[570,54221,54222],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[570,54224,54225],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[570,54227,54228],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[570,54230,54231],{},"若： let arr=['1','2',3] arr[0]=1",[570,54233,54234],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[570,54236,54237],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[584,54239,54241],{"id":54240},"_315-操作表单元素","3.1.5 操作表单元素",[567,54243,54244],{},[570,54245,54246],{},"天生的属性",[14,54248,54249],{},[20,54250],{"alt":22,"src":54251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54253,54254],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54256,54257],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54259,54260],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54262,54263],{},[20,54264],{"alt":22,"src":54265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[25,54267,54269],{"className":51094,"code":54268,"language":51096,"meta":22,"style":22},"在复选框中如果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",[31,54270,54271,54276,54308,54313,54318,54323,54328,54332,54337,54342,54359,54371,54376],{"__ignoreMap":22},[34,54272,54273],{"class":36,"line":37},[34,54274,54275],{"class":59},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[34,54277,54278,54280,54283,54286,54288,54291,54293,54295,54297,54299,54301,54303,54306],{"class":36,"line":44},[34,54279,1515],{"class":59},[34,54281,54282],{"class":51761},"input",[34,54284,54285],{"class":2427}," type",[34,54287,447],{"class":59},[34,54289,54290],{"class":187},"\"checkbox\"",[34,54292,15384],{"class":2427},[34,54294,447],{"class":59},[34,54296,8116],{"class":187},[34,54298,15423],{"class":2427},[34,54300,447],{"class":59},[34,54302,8116],{"class":187},[34,54304,54305],{"class":2427}," checked",[34,54307,51768],{"class":59},[34,54309,54310],{"class":36,"line":50},[34,54311,54312],{"class":59},"不选的话：\n",[34,54314,54315],{"class":36,"line":56},[34,54316,54317],{"class":59},"const input = document.querySelector('input')\n",[34,54319,54320],{"class":36,"line":107},[34,54321,54322],{"class":59},"input.checked=false\n",[34,54324,54325],{"class":36,"line":196},[34,54326,54327],{"class":59},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[34,54329,54330],{"class":36,"line":202},[34,54331,2864],{"emptyLinePlaceholder":540},[34,54333,54334],{"class":36,"line":207},[34,54335,54336],{"class":59},"禁用按钮：\n",[34,54338,54339],{"class":36,"line":222},[34,54340,54341],{"class":59},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[34,54343,54344,54346,54349,54352,54355,54357],{"class":36,"line":227},[34,54345,1515],{"class":59},[34,54347,54348],{"class":51761},"button",[34,54350,54351],{"class":2427}," disabled",[34,54353,54354],{"class":59},">点击\u003C\u002F",[34,54356,54348],{"class":51761},[34,54358,51768],{"class":59},[34,54360,54361,54363,54365,54367,54369],{"class":36,"line":232},[34,54362,1515],{"class":59},[34,54364,54348],{"class":51761},[34,54366,54354],{"class":59},[34,54368,54348],{"class":51761},[34,54370,51768],{"class":59},[34,54372,54373],{"class":36,"line":238},[34,54374,54375],{"class":59},"const bt = document.querySelector('button')\n",[34,54377,54378],{"class":36,"line":244},[34,54379,54380],{"class":59},"bt.disabled = false\n",[567,54382,54383],{"start":44},[570,54384,54385],{},"自定义属性",[14,54387,54388],{},[20,54389],{"alt":22,"src":54390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[25,54392,54394],{"className":53528,"code":54393,"language":53530,"meta":22,"style":22},"\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",[31,54395,54396,54404,54432,54451,54470,54489,54508,54516,54521,54526,54531,54536,54544],{"__ignoreMap":22},[34,54397,54398,54400,54402],{"class":36,"line":37},[34,54399,1515],{"class":59},[34,54401,52261],{"class":51761},[34,54403,51768],{"class":59},[34,54405,54406,54408,54410,54413,54415,54417,54420,54422,54425,54428,54430],{"class":36,"line":44},[34,54407,52605],{"class":59},[34,54409,52072],{"class":51761},[34,54411,54412],{"class":2427}," data-id",[34,54414,447],{"class":59},[34,54416,4142],{"class":187},[34,54418,54419],{"class":2427}," data-spm",[34,54421,447],{"class":59},[34,54423,54424],{"class":187},"\"我不知道\"",[34,54426,54427],{"class":59},">1\u003C\u002F",[34,54429,52072],{"class":51761},[34,54431,51768],{"class":59},[34,54433,54434,54436,54438,54440,54442,54444,54447,54449],{"class":36,"line":50},[34,54435,52605],{"class":59},[34,54437,52072],{"class":51761},[34,54439,54412],{"class":2427},[34,54441,447],{"class":59},[34,54443,4165],{"class":187},[34,54445,54446],{"class":59},">2\u003C\u002F",[34,54448,52072],{"class":51761},[34,54450,51768],{"class":59},[34,54452,54453,54455,54457,54459,54461,54463,54466,54468],{"class":36,"line":56},[34,54454,52605],{"class":59},[34,54456,52072],{"class":51761},[34,54458,54412],{"class":2427},[34,54460,447],{"class":59},[34,54462,4178],{"class":187},[34,54464,54465],{"class":59},">3\u003C\u002F",[34,54467,52072],{"class":51761},[34,54469,51768],{"class":59},[34,54471,54472,54474,54476,54478,54480,54482,54485,54487],{"class":36,"line":107},[34,54473,52605],{"class":59},[34,54475,52072],{"class":51761},[34,54477,54412],{"class":2427},[34,54479,447],{"class":59},[34,54481,4191],{"class":187},[34,54483,54484],{"class":59},">4\u003C\u002F",[34,54486,52072],{"class":51761},[34,54488,51768],{"class":59},[34,54490,54491,54493,54495,54497,54499,54501,54504,54506],{"class":36,"line":196},[34,54492,52605],{"class":59},[34,54494,52072],{"class":51761},[34,54496,54412],{"class":2427},[34,54498,447],{"class":59},[34,54500,4212],{"class":187},[34,54502,54503],{"class":59},">5\u003C\u002F",[34,54505,52072],{"class":51761},[34,54507,51768],{"class":59},[34,54509,54510,54512,54514],{"class":36,"line":202},[34,54511,52605],{"class":59},[34,54513,52274],{"class":51761},[34,54515,51768],{"class":59},[34,54517,54518],{"class":36,"line":207},[34,54519,54520],{"class":59},"    const one = document.querySelector('div')\n",[34,54522,54523],{"class":36,"line":222},[34,54524,54525],{"class":59},"    console.log(one.dataset)\n",[34,54527,54528],{"class":36,"line":227},[34,54529,54530],{"class":59},"    console.log(one.dataset.id)\n",[34,54532,54533],{"class":36,"line":232},[34,54534,54535],{"class":59},"    console.log(one.dataset.spm)\n",[34,54537,54538,54540,54542],{"class":36,"line":238},[34,54539,52878],{"class":59},[34,54541,52274],{"class":51761},[34,54543,51768],{"class":59},[34,54545,54546,54548,54550],{"class":36,"line":244},[34,54547,52246],{"class":59},[34,54549,52261],{"class":51761},[34,54551,51768],{"class":59},[14,54553,54554],{},[20,54555],{"alt":22,"src":54556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54558,54559],{},"document.querySelector选择的是第一个对象（元素）",[584,54561,54563],{"id":54562},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54565,54566],{},[20,54567],{"alt":22,"src":54568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54570,54571],{},[20,54572],{"alt":22,"src":54573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54575,54576],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52274,54578,54579],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54581,54582],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52274,54584,54585],{},"\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",[14,54587,54588],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54590,54591],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54593,54594],{},"单位为毫秒！！！",[14,54596,54597],{},"可以搭配匿名函数来用！！！",[14,54599,54600],{},"setInterval(function () {",[14,54602,54603],{},"alert('两秒执行一次')",[14,54605,54606],{},"}, 2000)",[14,54608,54609],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54611,54612],{},"function fn() {",[14,54614,54615],{},"document.write(1)",[14,54617,1550],{},[14,54619,54620],{},"setInterval(fn, 1000)",[14,54622,54623],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54625,54626],{},"setInterval('fn()', 1000)",[14,54628,54629],{},[20,54630],{"alt":22,"src":54631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22462,54633,54635],{"id":54634},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[25,54637,54639],{"className":51094,"code":54638,"language":51096,"meta":22,"style":22},"\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",[31,54640,54641,54651,54665,54669,54677,54691,54711,54723,54731,54735,54743,54780,54785,54790,54795,54803,54811,54833,54841,54846,54868,54873,54878,54889,54894,54914,54922,54937,54952,54963,54968,54978,54988,54992,55001,55005,55013,55021,55025],{"__ignoreMap":22},[34,54642,54643,54645,54647,54649],{"class":36,"line":37},[34,54644,51758],{"class":59},[34,54646,51762],{"class":51761},[34,54648,51765],{"class":2427},[34,54650,51768],{"class":59},[34,54652,54653,54655,54657,54659,54661,54663],{"class":36,"line":44},[34,54654,1515],{"class":59},[34,54656,51096],{"class":51761},[34,54658,51777],{"class":2427},[34,54660,447],{"class":59},[34,54662,51782],{"class":187},[34,54664,51768],{"class":59},[34,54666,54667],{"class":36,"line":50},[34,54668,2864],{"emptyLinePlaceholder":540},[34,54670,54671,54673,54675],{"class":36,"line":56},[34,54672,1515],{"class":59},[34,54674,51795],{"class":51761},[34,54676,51768],{"class":59},[34,54678,54679,54681,54683,54685,54687,54689],{"class":36,"line":107},[34,54680,52605],{"class":59},[34,54682,51805],{"class":51761},[34,54684,51808],{"class":2427},[34,54686,447],{"class":59},[34,54688,51813],{"class":187},[34,54690,51768],{"class":59},[34,54692,54693,54695,54697,54699,54701,54703,54705,54707,54709],{"class":36,"line":196},[34,54694,52605],{"class":59},[34,54696,51805],{"class":51761},[34,54698,15384],{"class":2427},[34,54700,447],{"class":59},[34,54702,51852],{"class":187},[34,54704,51832],{"class":2427},[34,54706,447],{"class":59},[34,54708,51859],{"class":187},[34,54710,51768],{"class":59},[34,54712,54713,54715,54717,54719,54721],{"class":36,"line":202},[34,54714,52605],{"class":59},[34,54716,51868],{"class":51761},[34,54718,51871],{"class":59},[34,54720,51868],{"class":51761},[34,54722,51768],{"class":59},[34,54724,54725,54727,54729],{"class":36,"line":207},[34,54726,52246],{"class":59},[34,54728,51795],{"class":51761},[34,54730,51768],{"class":59},[34,54732,54733],{"class":36,"line":222},[34,54734,2864],{"emptyLinePlaceholder":540},[34,54736,54737,54739,54741],{"class":36,"line":227},[34,54738,1515],{"class":59},[34,54740,52261],{"class":51761},[34,54742,51768],{"class":59},[34,54744,54745,54747,54750,54752,54754,54756,54758,54760,54762,54765,54767,54770,54773,54775,54778],{"class":36,"line":232},[34,54746,52605],{"class":59},[34,54748,54749],{"class":51761},"textarea",[34,54751,15384],{"class":2427},[34,54753,447],{"class":59},[34,54755,8116],{"class":187},[34,54757,15423],{"class":2427},[34,54759,447],{"class":59},[34,54761,8116],{"class":187},[34,54763,54764],{"class":2427}," cols",[34,54766,447],{"class":59},[34,54768,54769],{"class":187},"\"30\"",[34,54771,54772],{"class":2427}," rows",[34,54774,447],{"class":59},[34,54776,54777],{"class":187},"\"10\"",[34,54779,51768],{"class":59},[34,54781,54782],{"class":36,"line":238},[34,54783,54784],{"class":59},"        用户注册协议\n",[34,54786,54787],{"class":36,"line":244},[34,54788,54789],{"class":59},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[34,54791,54792],{"class":36,"line":250},[34,54793,54794],{"class":59},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[34,54796,54797,54799,54801],{"class":36,"line":256},[34,54798,52237],{"class":59},[34,54800,54749],{"class":51761},[34,54802,51768],{"class":59},[34,54804,54805,54807,54809],{"class":36,"line":261},[34,54806,52605],{"class":59},[34,54808,54177],{"class":51761},[34,54810,51768],{"class":59},[34,54812,54813,54815,54817,54819,54821,54824,54826,54829,54831],{"class":36,"line":267},[34,54814,52605],{"class":59},[34,54816,54348],{"class":51761},[34,54818,53947],{"class":2427},[34,54820,447],{"class":59},[34,54822,54823],{"class":187},"\"btn\"",[34,54825,54351],{"class":2427},[34,54827,54828],{"class":59},">我已经阅读用户协议(5)\u003C\u002F",[34,54830,54348],{"class":51761},[34,54832,51768],{"class":59},[34,54834,54835,54837,54839],{"class":36,"line":2138},[34,54836,52605],{"class":59},[34,54838,52274],{"class":51761},[34,54840,51768],{"class":59},[34,54842,54843],{"class":36,"line":2143},[34,54844,54845],{"class":40},"    \u002F\u002F 1. 获取元素\n",[34,54847,54848,54850,54853,54855,54858,54861,54863,54866],{"class":36,"line":2157},[34,54849,11685],{"class":112},[34,54851,54852],{"class":63}," btn",[34,54854,14028],{"class":112},[34,54856,54857],{"class":59}," document.",[34,54859,54860],{"class":2427},"querySelector",[34,54862,617],{"class":59},[34,54864,54865],{"class":187},"'.btn'",[34,54867,623],{"class":59},[34,54869,54870],{"class":36,"line":2162},[34,54871,54872],{"class":40},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[34,54874,54875],{"class":36,"line":2191},[34,54876,54877],{"class":40},"    \u002F\u002F 2. 倒计时\n",[34,54879,54880,54882,54884,54886],{"class":36,"line":2196},[34,54881,52680],{"class":112},[34,54883,9902],{"class":59},[34,54885,447],{"class":112},[34,54887,54888],{"class":63}," 5\n",[34,54890,54891],{"class":36,"line":2213},[34,54892,54893],{"class":40},"    \u002F\u002F 2.1 开启定时器\n",[34,54895,54896,54898,54901,54903,54906,54908,54911],{"class":36,"line":2218},[34,54897,52680],{"class":112},[34,54899,54900],{"class":59}," n ",[34,54902,447],{"class":112},[34,54904,54905],{"class":2427}," setInterval",[34,54907,617],{"class":59},[34,54909,54910],{"class":112},"function",[34,54912,54913],{"class":59}," () {\n",[34,54915,54916,54919],{"class":36,"line":2223},[34,54917,54918],{"class":59},"      i",[34,54920,54921],{"class":112},"--\n",[34,54923,54924,54927,54929,54932,54934],{"class":36,"line":2228},[34,54925,54926],{"class":59},"      btn.innerHTML ",[34,54928,447],{"class":112},[34,54930,54931],{"class":187}," `我已经阅读用户协议(${",[34,54933,1048],{"class":59},[34,54935,54936],{"class":187},"})`\n",[34,54938,54939,54942,54945,54948,54950],{"class":36,"line":2242},[34,54940,54941],{"class":112},"      if",[34,54943,54944],{"class":59}," (i ",[34,54946,54947],{"class":112},"===",[34,54949,4557],{"class":63},[34,54951,12906],{"class":59},[34,54953,54954,54957,54960],{"class":36,"line":2247},[34,54955,54956],{"class":2427},"        clearInterval",[34,54958,54959],{"class":59},"(n)  ",[34,54961,54962],{"class":40},"\u002F\u002F 关闭定时器\n",[34,54964,54965],{"class":36,"line":3041},[34,54966,54967],{"class":40},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[34,54969,54970,54973,54975],{"class":36,"line":3055},[34,54971,54972],{"class":59},"        btn.disabled ",[34,54974,447],{"class":112},[34,54976,54977],{"class":63}," false\n",[34,54979,54980,54983,54985],{"class":36,"line":3063},[34,54981,54982],{"class":59},"        btn.innerHTML ",[34,54984,447],{"class":112},[34,54986,54987],{"class":187}," '同意'\n",[34,54989,54990],{"class":36,"line":3068},[34,54991,52859],{"class":59},[34,54993,54994,54997,54999],{"class":36,"line":3074},[34,54995,54996],{"class":59},"    }, ",[34,54998,6874],{"class":63},[34,55000,623],{"class":59},[34,55002,55003],{"class":36,"line":3080},[34,55004,2864],{"emptyLinePlaceholder":540},[34,55006,55007,55009,55011],{"class":36,"line":3085},[34,55008,52878],{"class":59},[34,55010,52274],{"class":51761},[34,55012,51768],{"class":59},[34,55014,55015,55017,55019],{"class":36,"line":8412},[34,55016,52246],{"class":59},[34,55018,52261],{"class":51761},[34,55020,51768],{"class":59},[34,55022,55023],{"class":36,"line":8436},[34,55024,2864],{"emptyLinePlaceholder":540},[34,55026,55027,55029,55031],{"class":36,"line":8441},[34,55028,52246],{"class":59},[34,55030,51096],{"class":51761},[34,55032,51768],{"class":59},[14,55034,55035],{},"不要一直想着用死循环,避免死循环",[14,55037,55038,55041],{},[31,55039,55040],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22462,55043,55045],{"id":55044},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[567,55047,55048],{},[570,55049,55050],{},"法1",[25,55052,55054],{"className":51094,"code":55053,"language":51096,"meta":22,"style":22},"\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",[31,55055,55056,55066,55080,55084,55092,55106,55126,55138,55146,55152,55163,55174,55178,55182,55189,55201,55205,55209,55216,55228,55242,55255,55269,55273,55277,55284,55295,55306,55317,55329,55341,55353,55357,55361,55369,55379,55392,55404,55417,55421,55425,55432,55442,55454,55466,55477,55488,55498,55510,55522,55526,55530,55539,55551,55563,55591,55604,55608,55612,55619,55630,55634,55642,55650,55654,55662,55676,55691,55715,55723,55738,55751,55759,55780,55792,55804,55816,55828,55840,55852,55864,55873,55881,55889,55897,55909,55932,55951,55970,55989,56008,56027,56046,56066,56070,56090,56109,56129,56150,56161,56178,56188,56198,56208,56213,56218,56223,56228,56253,56266,56270,56293,56297,56305,56313,56321,56325],{"__ignoreMap":22},[34,55057,55058,55060,55062,55064],{"class":36,"line":37},[34,55059,51758],{"class":59},[34,55061,51762],{"class":51761},[34,55063,51765],{"class":2427},[34,55065,51768],{"class":59},[34,55067,55068,55070,55072,55074,55076,55078],{"class":36,"line":44},[34,55069,1515],{"class":59},[34,55071,51096],{"class":51761},[34,55073,51777],{"class":2427},[34,55075,447],{"class":59},[34,55077,51782],{"class":187},[34,55079,51768],{"class":59},[34,55081,55082],{"class":36,"line":50},[34,55083,2864],{"emptyLinePlaceholder":540},[34,55085,55086,55088,55090],{"class":36,"line":56},[34,55087,1515],{"class":59},[34,55089,51795],{"class":51761},[34,55091,51768],{"class":59},[34,55093,55094,55096,55098,55100,55102,55104],{"class":36,"line":107},[34,55095,52605],{"class":59},[34,55097,51805],{"class":51761},[34,55099,51808],{"class":2427},[34,55101,447],{"class":59},[34,55103,51813],{"class":187},[34,55105,51768],{"class":59},[34,55107,55108,55110,55112,55114,55116,55118,55120,55122,55124],{"class":36,"line":196},[34,55109,52605],{"class":59},[34,55111,51805],{"class":51761},[34,55113,15384],{"class":2427},[34,55115,447],{"class":59},[34,55117,51852],{"class":187},[34,55119,51832],{"class":2427},[34,55121,447],{"class":59},[34,55123,51859],{"class":187},[34,55125,51768],{"class":59},[34,55127,55128,55130,55132,55134,55136],{"class":36,"line":202},[34,55129,52605],{"class":59},[34,55131,51868],{"class":51761},[34,55133,51871],{"class":59},[34,55135,51868],{"class":51761},[34,55137,51768],{"class":59},[34,55139,55140,55142,55144],{"class":36,"line":207},[34,55141,52605],{"class":59},[34,55143,532],{"class":51761},[34,55145,51768],{"class":59},[34,55147,55148,55150],{"class":36,"line":222},[34,55149,6867],{"class":51761},[34,55151,16036],{"class":59},[34,55153,55154,55157,55159,55161],{"class":36,"line":227},[34,55155,55156],{"class":63},"      padding",[34,55158,51898],{"class":59},[34,55160,319],{"class":63},[34,55162,1765],{"class":59},[34,55164,55165,55168,55170,55172],{"class":36,"line":232},[34,55166,55167],{"class":63},"      margin",[34,55169,51898],{"class":59},[34,55171,319],{"class":63},[34,55173,1765],{"class":59},[34,55175,55176],{"class":36,"line":238},[34,55177,2651],{"class":59},[34,55179,55180],{"class":36,"line":244},[34,55181,2864],{"emptyLinePlaceholder":540},[34,55183,55184,55187],{"class":36,"line":250},[34,55185,55186],{"class":51761},"    li",[34,55188,16036],{"class":59},[34,55190,55191,55194,55196,55199],{"class":36,"line":256},[34,55192,55193],{"class":63},"      list-style",[34,55195,51898],{"class":59},[34,55197,55198],{"class":63},"none",[34,55200,1765],{"class":59},[34,55202,55203],{"class":36,"line":261},[34,55204,2651],{"class":59},[34,55206,55207],{"class":36,"line":267},[34,55208,2864],{"emptyLinePlaceholder":540},[34,55210,55211,55214],{"class":36,"line":2138},[34,55212,55213],{"class":2427},"    .box",[34,55215,16036],{"class":59},[34,55217,55218,55221,55223,55226],{"class":36,"line":2143},[34,55219,55220],{"class":63},"      position",[34,55222,51898],{"class":59},[34,55224,55225],{"class":63},"relative",[34,55227,1765],{"class":59},[34,55229,55230,55233,55235,55238,55240],{"class":36,"line":2157},[34,55231,55232],{"class":63},"      width",[34,55234,51898],{"class":59},[34,55236,55237],{"class":63},"976",[34,55239,51953],{"class":112},[34,55241,1765],{"class":59},[34,55243,55244,55247,55249,55251,55253],{"class":36,"line":2162},[34,55245,55246],{"class":63},"      height",[34,55248,51898],{"class":59},[34,55250,2010],{"class":63},[34,55252,51953],{"class":112},[34,55254,1765],{"class":59},[34,55256,55257,55259,55261,55263,55265,55267],{"class":36,"line":2191},[34,55258,55167],{"class":63},[34,55260,51898],{"class":59},[34,55262,919],{"class":63},[34,55264,51953],{"class":112},[34,55266,52017],{"class":63},[34,55268,1765],{"class":59},[34,55270,55271],{"class":36,"line":2196},[34,55272,2651],{"class":59},[34,55274,55275],{"class":36,"line":2213},[34,55276,2864],{"emptyLinePlaceholder":540},[34,55278,55279,55282],{"class":36,"line":2218},[34,55280,55281],{"class":2427},"    .slider-footer",[34,55283,16036],{"class":59},[34,55285,55286,55288,55290,55293],{"class":36,"line":2223},[34,55287,55220],{"class":63},[34,55289,51898],{"class":59},[34,55291,55292],{"class":63},"absolute",[34,55294,1765],{"class":59},[34,55296,55297,55300,55302,55304],{"class":36,"line":2228},[34,55298,55299],{"class":63},"      left",[34,55301,51898],{"class":59},[34,55303,319],{"class":63},[34,55305,1765],{"class":59},[34,55307,55308,55311,55313,55315],{"class":36,"line":2242},[34,55309,55310],{"class":63},"      bottom",[34,55312,51898],{"class":59},[34,55314,319],{"class":63},[34,55316,1765],{"class":59},[34,55318,55319,55321,55323,55325,55327],{"class":36,"line":2247},[34,55320,55232],{"class":63},[34,55322,51898],{"class":59},[34,55324,919],{"class":63},[34,55326,936],{"class":112},[34,55328,1765],{"class":59},[34,55330,55331,55333,55335,55337,55339],{"class":36,"line":3041},[34,55332,55246],{"class":63},[34,55334,51898],{"class":59},[34,55336,1181],{"class":63},[34,55338,936],{"class":112},[34,55340,1765],{"class":59},[34,55342,55343,55346,55348,55351],{"class":36,"line":3055},[34,55344,55345],{"class":63},"      background-color",[34,55347,51898],{"class":59},[34,55349,55350],{"class":63},"skyblue",[34,55352,1765],{"class":59},[34,55354,55355],{"class":36,"line":3063},[34,55356,2651],{"class":59},[34,55358,55359],{"class":36,"line":3068},[34,55360,2864],{"emptyLinePlaceholder":540},[34,55362,55363,55365,55367],{"class":36,"line":3074},[34,55364,55281],{"class":2427},[34,55366,7289],{"class":51761},[34,55368,16036],{"class":59},[34,55370,55371,55373,55375,55377],{"class":36,"line":3080},[34,55372,55220],{"class":63},[34,55374,51898],{"class":59},[34,55376,55292],{"class":63},[34,55378,1765],{"class":59},[34,55380,55381,55384,55386,55388,55390],{"class":36,"line":3085},[34,55382,55383],{"class":63},"      font-size",[34,55385,51898],{"class":59},[34,55387,1506],{"class":63},[34,55389,51953],{"class":112},[34,55391,1765],{"class":59},[34,55393,55394,55396,55398,55400,55402],{"class":36,"line":8412},[34,55395,55299],{"class":63},[34,55397,51898],{"class":59},[34,55399,1306],{"class":63},[34,55401,51953],{"class":112},[34,55403,1765],{"class":59},[34,55405,55406,55409,55411,55413,55415],{"class":36,"line":8436},[34,55407,55408],{"class":63},"      top",[34,55410,51898],{"class":59},[34,55412,927],{"class":63},[34,55414,51953],{"class":112},[34,55416,1765],{"class":59},[34,55418,55419],{"class":36,"line":8441},[34,55420,2651],{"class":59},[34,55422,55423],{"class":36,"line":8447},[34,55424,2864],{"emptyLinePlaceholder":540},[34,55426,55427,55430],{"class":36,"line":8474},[34,55428,55429],{"class":51761},"    ul",[34,55431,16036],{"class":59},[34,55433,55434,55436,55438,55440],{"class":36,"line":8479},[34,55435,55220],{"class":63},[34,55437,51898],{"class":59},[34,55439,55292],{"class":63},[34,55441,1765],{"class":59},[34,55443,55444,55446,55448,55450,55452],{"class":36,"line":8485},[34,55445,55408],{"class":63},[34,55447,51898],{"class":59},[34,55449,1387],{"class":63},[34,55451,51953],{"class":112},[34,55453,1765],{"class":59},[34,55455,55456,55458,55460,55462,55464],{"class":36,"line":8497},[34,55457,55299],{"class":63},[34,55459,51898],{"class":59},[34,55461,1306],{"class":63},[34,55463,51953],{"class":112},[34,55465,1765],{"class":59},[34,55467,55468,55471,55473,55475],{"class":36,"line":8509},[34,55469,55470],{"class":63},"      display",[34,55472,51898],{"class":59},[34,55474,51938],{"class":63},[34,55476,1765],{"class":59},[34,55478,55479,55482,55484,55486],{"class":36,"line":8521},[34,55480,55481],{"class":63},"      justify-content",[34,55483,51898],{"class":59},[34,55485,52129],{"class":63},[34,55487,1765],{"class":59},[34,55489,55490,55492,55494,55496],{"class":36,"line":10180},[34,55491,55220],{"class":63},[34,55493,51898],{"class":59},[34,55495,55292],{"class":63},[34,55497,1765],{"class":59},[34,55499,55500,55502,55504,55506,55508],{"class":36,"line":10205},[34,55501,55232],{"class":63},[34,55503,51898],{"class":59},[34,55505,4456],{"class":63},[34,55507,51953],{"class":112},[34,55509,1765],{"class":59},[34,55511,55512,55514,55516,55518,55520],{"class":36,"line":10228},[34,55513,55246],{"class":63},[34,55515,51898],{"class":59},[34,55517,1306],{"class":63},[34,55519,51953],{"class":112},[34,55521,1765],{"class":59},[34,55523,55524],{"class":36,"line":10252},[34,55525,2651],{"class":59},[34,55527,55528],{"class":36,"line":10257},[34,55529,2864],{"emptyLinePlaceholder":540},[34,55531,55532,55534,55537],{"class":36,"line":10262},[34,55533,55429],{"class":51761},[34,55535,55536],{"class":51761}," li",[34,55538,16036],{"class":59},[34,55540,55541,55543,55545,55547,55549],{"class":36,"line":10267},[34,55542,55232],{"class":63},[34,55544,51898],{"class":59},[34,55546,1306],{"class":63},[34,55548,51953],{"class":112},[34,55550,1765],{"class":59},[34,55552,55553,55555,55557,55559,55561],{"class":36,"line":10276},[34,55554,55246],{"class":63},[34,55556,51898],{"class":59},[34,55558,1306],{"class":63},[34,55560,51953],{"class":112},[34,55562,1765],{"class":59},[34,55564,55565,55567,55569,55572,55574,55576,55578,55580,55582,55584,55586,55589],{"class":36,"line":10281},[34,55566,55345],{"class":63},[34,55568,51898],{"class":59},[34,55570,55571],{"class":63},"rgba",[34,55573,617],{"class":59},[34,55575,319],{"class":63},[34,55577,12899],{"class":59},[34,55579,319],{"class":63},[34,55581,12899],{"class":59},[34,55583,319],{"class":63},[34,55585,12899],{"class":59},[34,55587,55588],{"class":63},".4",[34,55590,3183],{"class":59},[34,55592,55593,55596,55598,55600,55602],{"class":36,"line":10287},[34,55594,55595],{"class":63},"      border-radius",[34,55597,51898],{"class":59},[34,55599,1053],{"class":63},[34,55601,51953],{"class":112},[34,55603,1765],{"class":59},[34,55605,55606],{"class":36,"line":10308},[34,55607,2651],{"class":59},[34,55609,55610],{"class":36,"line":10314},[34,55611,2864],{"emptyLinePlaceholder":540},[34,55613,55614,55617],{"class":36,"line":10328},[34,55615,55616],{"class":2427},"    .activate",[34,55618,16036],{"class":59},[34,55620,55621,55623,55625,55628],{"class":36,"line":10334},[34,55622,55345],{"class":63},[34,55624,51898],{"class":59},[34,55626,55627],{"class":63},"#f7f7f7",[34,55629,1765],{"class":59},[34,55631,55632],{"class":36,"line":10361},[34,55633,2651],{"class":59},[34,55635,55636,55638,55640],{"class":36,"line":10370},[34,55637,52878],{"class":59},[34,55639,532],{"class":51761},[34,55641,51768],{"class":59},[34,55643,55644,55646,55648],{"class":36,"line":10376},[34,55645,52246],{"class":59},[34,55647,51795],{"class":51761},[34,55649,51768],{"class":59},[34,55651,55652],{"class":36,"line":10384},[34,55653,2864],{"emptyLinePlaceholder":540},[34,55655,55656,55658,55660],{"class":36,"line":10389},[34,55657,1515],{"class":59},[34,55659,52261],{"class":51761},[34,55661,51768],{"class":59},[34,55663,55664,55666,55668,55670,55672,55674],{"class":36,"line":17068},[34,55665,52605],{"class":59},[34,55667,52072],{"class":51761},[34,55669,53947],{"class":2427},[34,55671,447],{"class":59},[34,55673,53952],{"class":187},[34,55675,51768],{"class":59},[34,55677,55678,55680,55682,55684,55686,55689],{"class":36,"line":17074},[34,55679,51802],{"class":59},[34,55681,52072],{"class":51761},[34,55683,53947],{"class":2427},[34,55685,447],{"class":59},[34,55687,55688],{"class":187},"\"slider-wrapper\"",[34,55690,51768],{"class":59},[34,55692,55693,55696,55698,55701,55703,55706,55709,55711,55713],{"class":36,"line":17097},[34,55694,55695],{"class":59},"      \u003C",[34,55697,20],{"class":51761},[34,55699,55700],{"class":2427}," src",[34,55702,447],{"class":59},[34,55704,55705],{"class":187},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[34,55707,55708],{"class":2427}," alt",[34,55710,447],{"class":59},[34,55712,8116],{"class":187},[34,55714,51768],{"class":59},[34,55716,55717,55719,55721],{"class":36,"line":17103},[34,55718,52237],{"class":59},[34,55720,52072],{"class":51761},[34,55722,51768],{"class":59},[34,55724,55725,55727,55729,55731,55733,55736],{"class":36,"line":17126},[34,55726,51802],{"class":59},[34,55728,52072],{"class":51761},[34,55730,53947],{"class":2427},[34,55732,447],{"class":59},[34,55734,55735],{"class":187},"\"slider-footer\"",[34,55737,51768],{"class":59},[34,55739,55740,55742,55744,55747,55749],{"class":36,"line":17140},[34,55741,55695],{"class":59},[34,55743,14],{"class":51761},[34,55745,55746],{"class":59},">对人类来说会不会太超前了?\u003C\u002F",[34,55748,14],{"class":51761},[34,55750,51768],{"class":59},[34,55752,55753,55755,55757],{"class":36,"line":17160},[34,55754,55695],{"class":59},[34,55756,1611],{"class":51761},[34,55758,51768],{"class":59},[34,55760,55761,55764,55766,55768,55770,55773,55776,55778],{"class":36,"line":17166},[34,55762,55763],{"class":59},"        \u003C",[34,55765,570],{"class":51761},[34,55767,53947],{"class":2427},[34,55769,447],{"class":59},[34,55771,55772],{"class":187},"\"activate\"",[34,55774,55775],{"class":59},">\u003C\u002F",[34,55777,570],{"class":51761},[34,55779,51768],{"class":59},[34,55781,55782,55784,55786,55788,55790],{"class":36,"line":17177},[34,55783,55763],{"class":59},[34,55785,570],{"class":51761},[34,55787,55775],{"class":59},[34,55789,570],{"class":51761},[34,55791,51768],{"class":59},[34,55793,55794,55796,55798,55800,55802],{"class":36,"line":17200},[34,55795,55763],{"class":59},[34,55797,570],{"class":51761},[34,55799,55775],{"class":59},[34,55801,570],{"class":51761},[34,55803,51768],{"class":59},[34,55805,55806,55808,55810,55812,55814],{"class":36,"line":17222},[34,55807,55763],{"class":59},[34,55809,570],{"class":51761},[34,55811,55775],{"class":59},[34,55813,570],{"class":51761},[34,55815,51768],{"class":59},[34,55817,55818,55820,55822,55824,55826],{"class":36,"line":17227},[34,55819,55763],{"class":59},[34,55821,570],{"class":51761},[34,55823,55775],{"class":59},[34,55825,570],{"class":51761},[34,55827,51768],{"class":59},[34,55829,55830,55832,55834,55836,55838],{"class":36,"line":17233},[34,55831,55763],{"class":59},[34,55833,570],{"class":51761},[34,55835,55775],{"class":59},[34,55837,570],{"class":51761},[34,55839,51768],{"class":59},[34,55841,55842,55844,55846,55848,55850],{"class":36,"line":17247},[34,55843,55763],{"class":59},[34,55845,570],{"class":51761},[34,55847,55775],{"class":59},[34,55849,570],{"class":51761},[34,55851,51768],{"class":59},[34,55853,55854,55856,55858,55860,55862],{"class":36,"line":17260},[34,55855,55763],{"class":59},[34,55857,570],{"class":51761},[34,55859,55775],{"class":59},[34,55861,570],{"class":51761},[34,55863,51768],{"class":59},[34,55865,55866,55869,55871],{"class":36,"line":17265},[34,55867,55868],{"class":59},"      \u003C\u002F",[34,55870,1611],{"class":51761},[34,55872,51768],{"class":59},[34,55874,55875,55877,55879],{"class":36,"line":17279},[34,55876,52237],{"class":59},[34,55878,52072],{"class":51761},[34,55880,51768],{"class":59},[34,55882,55883,55885,55887],{"class":36,"line":17284},[34,55884,52878],{"class":59},[34,55886,52072],{"class":51761},[34,55888,51768],{"class":59},[34,55890,55891,55893,55895],{"class":36,"line":17290},[34,55892,52605],{"class":59},[34,55894,52274],{"class":51761},[34,55896,51768],{"class":59},[34,55898,55899,55901,55904,55906],{"class":36,"line":17295},[34,55900,11685],{"class":112},[34,55902,55903],{"class":63}," arrImage",[34,55905,14028],{"class":112},[34,55907,55908],{"class":59}," [\n",[34,55910,55911,55914,55917,55920,55923,55926,55929],{"class":36,"line":17309},[34,55912,55913],{"class":59},"      { url: ",[34,55915,55916],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[34,55918,55919],{"class":59},", title: ",[34,55921,55922],{"class":187},"'对人类来说会不会太超前了?'",[34,55924,55925],{"class":59},", color: ",[34,55927,55928],{"class":187},"'rgba(100,67,68)'",[34,55930,55931],{"class":59}," },\n",[34,55933,55934,55936,55939,55941,55944,55946,55949],{"class":36,"line":17314},[34,55935,55913],{"class":59},[34,55937,55938],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[34,55940,55919],{"class":59},[34,55942,55943],{"class":187},"'开启剑与雪的黑暗传说!'",[34,55945,55925],{"class":59},[34,55947,55948],{"class":187},"'rgba(43,35,26)'",[34,55950,55931],{"class":59},[34,55952,55953,55955,55958,55960,55963,55965,55968],{"class":36,"line":17319},[34,55954,55913],{"class":59},[34,55956,55957],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[34,55959,55919],{"class":59},[34,55961,55962],{"class":187},"'真正的jo厨出现了!'",[34,55964,55925],{"class":59},[34,55966,55967],{"class":187},"'rgba(36,31,33)'",[34,55969,55931],{"class":59},[34,55971,55972,55974,55977,55979,55982,55984,55987],{"class":36,"line":17333},[34,55973,55913],{"class":59},[34,55975,55976],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[34,55978,55919],{"class":59},[34,55980,55981],{"class":187},"'李玉刚:让世界通过b站看到东方大国文化'",[34,55983,55925],{"class":59},[34,55985,55986],{"class":187},"'rgba(139,98,66)'",[34,55988,55931],{"class":59},[34,55990,55991,55993,55996,55998,56001,56003,56006],{"class":36,"line":17345},[34,55992,55913],{"class":59},[34,55994,55995],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[34,55997,55919],{"class":59},[34,55999,56000],{"class":187},"'快来分享你的寒假日常吧'",[34,56002,55925],{"class":59},[34,56004,56005],{"class":187},"'rgba(67,90,92)'",[34,56007,55931],{"class":59},[34,56009,56010,56012,56015,56017,56020,56022,56025],{"class":36,"line":17350},[34,56011,55913],{"class":59},[34,56013,56014],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[34,56016,55919],{"class":59},[34,56018,56019],{"class":187},"'哔哩哔哩小年YEAR'",[34,56021,55925],{"class":59},[34,56023,56024],{"class":187},"'rgba(166,131,143)'",[34,56026,55931],{"class":59},[34,56028,56029,56031,56034,56036,56039,56041,56044],{"class":36,"line":17363},[34,56030,55913],{"class":59},[34,56032,56033],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[34,56035,55919],{"class":59},[34,56037,56038],{"class":187},"'一站式解决你的电脑配置问题'",[34,56040,55925],{"class":59},[34,56042,56043],{"class":187},"'rgba(53,29,25)'",[34,56045,55931],{"class":59},[34,56047,56048,56050,56053,56055,56058,56060,56063],{"class":36,"line":17368},[34,56049,55913],{"class":59},[34,56051,56052],{"class":187},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[34,56054,55919],{"class":59},[34,56056,56057],{"class":187},"'谁不想和小猫咪贴贴呢?'",[34,56059,55925],{"class":59},[34,56061,56062],{"class":187},"'rgba(99,72,114)'",[34,56064,56065],{"class":59}," }\n",[34,56067,56068],{"class":36,"line":17373},[34,56069,53570],{"class":59},[34,56071,56072,56074,56077,56079,56081,56083,56085,56088],{"class":36,"line":17378},[34,56073,11685],{"class":112},[34,56075,56076],{"class":63}," img",[34,56078,14028],{"class":112},[34,56080,54857],{"class":59},[34,56082,54860],{"class":2427},[34,56084,617],{"class":59},[34,56086,56087],{"class":187},"'.slider-wrapper img'",[34,56089,623],{"class":59},[34,56091,56092,56094,56096,56098,56100,56102,56104,56107],{"class":36,"line":17391},[34,56093,11685],{"class":112},[34,56095,7289],{"class":63},[34,56097,14028],{"class":112},[34,56099,54857],{"class":59},[34,56101,54860],{"class":2427},[34,56103,617],{"class":59},[34,56105,56106],{"class":187},"'.slider-footer p'",[34,56108,623],{"class":59},[34,56110,56111,56113,56116,56118,56120,56122,56124,56127],{"class":36,"line":17396},[34,56112,11685],{"class":112},[34,56114,56115],{"class":63}," color",[34,56117,14028],{"class":112},[34,56119,54857],{"class":59},[34,56121,54860],{"class":2427},[34,56123,617],{"class":59},[34,56125,56126],{"class":187},"'.slider-footer'",[34,56128,623],{"class":59},[34,56130,56131,56133,56136,56138,56140,56143,56145,56148],{"class":36,"line":33096},[34,56132,11685],{"class":112},[34,56134,56135],{"class":63}," lis",[34,56137,14028],{"class":112},[34,56139,54857],{"class":59},[34,56141,56142],{"class":2427},"querySelectorAll",[34,56144,617],{"class":59},[34,56146,56147],{"class":187},"'.slider-footer ul li'",[34,56149,623],{"class":59},[34,56151,56152,56154,56156,56158],{"class":36,"line":33102},[34,56153,52680],{"class":112},[34,56155,9902],{"class":59},[34,56157,447],{"class":112},[34,56159,56160],{"class":63}," 1\n",[34,56162,56163,56165,56168,56170,56172,56174,56176],{"class":36,"line":33108},[34,56164,52680],{"class":112},[34,56166,56167],{"class":59}," timer ",[34,56169,447],{"class":112},[34,56171,54905],{"class":2427},[34,56173,617],{"class":59},[34,56175,54910],{"class":112},[34,56177,54913],{"class":59},[34,56179,56180,56183,56185],{"class":36,"line":33114},[34,56181,56182],{"class":59},"      img.src ",[34,56184,447],{"class":112},[34,56186,56187],{"class":59}," arrImage[i].url\n",[34,56189,56190,56193,56195],{"class":36,"line":33120},[34,56191,56192],{"class":59},"      p.innerHTML ",[34,56194,447],{"class":112},[34,56196,56197],{"class":59}," arrImage[i].title\n",[34,56199,56200,56203,56205],{"class":36,"line":33131},[34,56201,56202],{"class":59},"      color.style.backgroundColor ",[34,56204,447],{"class":112},[34,56206,56207],{"class":59}," arrImage[i].color\n",[34,56209,56210],{"class":36,"line":33137},[34,56211,56212],{"class":40},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[34,56214,56215],{"class":36,"line":33157},[34,56216,56217],{"class":40},"      \u002F\u002F li.classList.add('activate')\n",[34,56219,56220],{"class":36,"line":33163},[34,56221,56222],{"class":40},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[34,56224,56225],{"class":36,"line":33174},[34,56226,56227],{"class":40},"      \u002F\u002F lis[i].classList.remove('activate')\n",[34,56229,56230,56233,56235,56237,56240,56243,56246,56248,56251],{"class":36,"line":33180},[34,56231,56232],{"class":59},"      document.",[34,56234,54860],{"class":2427},[34,56236,617],{"class":59},[34,56238,56239],{"class":187},"'.activate'",[34,56241,56242],{"class":59},")?.classList.",[34,56244,56245],{"class":2427},"toggle",[34,56247,617],{"class":59},[34,56249,56250],{"class":187},"'activate'",[34,56252,623],{"class":59},[34,56254,56255,56258,56260,56262,56264],{"class":36,"line":33186},[34,56256,56257],{"class":59},"      lis[i].classList.",[34,56259,5798],{"class":2427},[34,56261,617],{"class":59},[34,56263,56250],{"class":187},[34,56265,623],{"class":59},[34,56267,56268],{"class":36,"line":33192},[34,56269,2864],{"emptyLinePlaceholder":540},[34,56271,56272,56275,56277,56279,56281,56283,56285,56287,56290],{"class":36,"line":33198},[34,56273,56274],{"class":59},"      i ",[34,56276,447],{"class":112},[34,56278,54944],{"class":59},[34,56280,1088],{"class":112},[34,56282,25583],{"class":63},[34,56284,14178],{"class":59},[34,56286,936],{"class":112},[34,56288,56289],{"class":59}," arrImage.",[34,56291,56292],{"class":63},"length\n",[34,56294,56295],{"class":36,"line":33204},[34,56296,2864],{"emptyLinePlaceholder":540},[34,56298,56299,56301,56303],{"class":36,"line":33210},[34,56300,54996],{"class":59},[34,56302,6874],{"class":63},[34,56304,623],{"class":59},[34,56306,56307,56309,56311],{"class":36,"line":33216},[34,56308,52878],{"class":59},[34,56310,52274],{"class":51761},[34,56312,51768],{"class":59},[34,56314,56315,56317,56319],{"class":36,"line":33236},[34,56316,52246],{"class":59},[34,56318,52261],{"class":51761},[34,56320,51768],{"class":59},[34,56322,56323],{"class":36,"line":33242},[34,56324,2864],{"emptyLinePlaceholder":540},[34,56326,56327,56329,56331],{"class":36,"line":33258},[34,56328,52246],{"class":59},[34,56330,51096],{"class":51761},[34,56332,51768],{"class":59},[14,56334,56335],{},[20,56336],{"alt":22,"src":56337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56339,56340],{},"?.就是短路保护,确保输出正常进行",[14,56342,56343],{},"不要忘记取余%,有时候可以用",[14,56345,56346],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[567,56348,56349],{"start":44},[570,56350,56351],{},"法2",[25,56353,56355],{"className":51094,"code":56354,"language":51096,"meta":22,"style":22},"\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",[31,56356,56357,56367,56381,56385,56393,56407,56427,56439,56447,56453,56463,56473,56477,56481,56487,56497,56501,56505,56511,56521,56533,56545,56559,56563,56567,56573,56583,56593,56603,56615,56627,56637,56641,56645,56653,56663,56675,56687,56699,56703,56707,56713,56723,56735,56747,56757,56767,56777,56789,56801,56805,56809,56817,56829,56841,56867,56879,56883,56887,56893,56903,56907,56915,56923,56927,56935,56949,56963,56983,56991,57005,57017,57025,57043,57055,57067,57079,57091,57103,57115,57127,57135,57143,57151,57159,57170,57186,57202,57218,57234,57250,57266,57282,57298,57302,57307,57325,57343,57353,57358,57363,57374,57380,57395,57404,57408,57413,57422,57427,57436,57441,57446,57451,57474,57504,57508,57516,57520,57528,57536,57540],{"__ignoreMap":22},[34,56358,56359,56361,56363,56365],{"class":36,"line":37},[34,56360,51758],{"class":59},[34,56362,51762],{"class":51761},[34,56364,51765],{"class":2427},[34,56366,51768],{"class":59},[34,56368,56369,56371,56373,56375,56377,56379],{"class":36,"line":44},[34,56370,1515],{"class":59},[34,56372,51096],{"class":51761},[34,56374,51777],{"class":2427},[34,56376,447],{"class":59},[34,56378,51782],{"class":187},[34,56380,51768],{"class":59},[34,56382,56383],{"class":36,"line":50},[34,56384,2864],{"emptyLinePlaceholder":540},[34,56386,56387,56389,56391],{"class":36,"line":56},[34,56388,1515],{"class":59},[34,56390,51795],{"class":51761},[34,56392,51768],{"class":59},[34,56394,56395,56397,56399,56401,56403,56405],{"class":36,"line":107},[34,56396,52605],{"class":59},[34,56398,51805],{"class":51761},[34,56400,51808],{"class":2427},[34,56402,447],{"class":59},[34,56404,51813],{"class":187},[34,56406,51768],{"class":59},[34,56408,56409,56411,56413,56415,56417,56419,56421,56423,56425],{"class":36,"line":196},[34,56410,52605],{"class":59},[34,56412,51805],{"class":51761},[34,56414,15384],{"class":2427},[34,56416,447],{"class":59},[34,56418,51852],{"class":187},[34,56420,51832],{"class":2427},[34,56422,447],{"class":59},[34,56424,51859],{"class":187},[34,56426,51768],{"class":59},[34,56428,56429,56431,56433,56435,56437],{"class":36,"line":202},[34,56430,52605],{"class":59},[34,56432,51868],{"class":51761},[34,56434,51871],{"class":59},[34,56436,51868],{"class":51761},[34,56438,51768],{"class":59},[34,56440,56441,56443,56445],{"class":36,"line":207},[34,56442,52605],{"class":59},[34,56444,532],{"class":51761},[34,56446,51768],{"class":59},[34,56448,56449,56451],{"class":36,"line":222},[34,56450,6867],{"class":51761},[34,56452,16036],{"class":59},[34,56454,56455,56457,56459,56461],{"class":36,"line":227},[34,56456,55156],{"class":63},[34,56458,51898],{"class":59},[34,56460,319],{"class":63},[34,56462,1765],{"class":59},[34,56464,56465,56467,56469,56471],{"class":36,"line":232},[34,56466,55167],{"class":63},[34,56468,51898],{"class":59},[34,56470,319],{"class":63},[34,56472,1765],{"class":59},[34,56474,56475],{"class":36,"line":238},[34,56476,2651],{"class":59},[34,56478,56479],{"class":36,"line":244},[34,56480,2864],{"emptyLinePlaceholder":540},[34,56482,56483,56485],{"class":36,"line":250},[34,56484,55186],{"class":51761},[34,56486,16036],{"class":59},[34,56488,56489,56491,56493,56495],{"class":36,"line":256},[34,56490,55193],{"class":63},[34,56492,51898],{"class":59},[34,56494,55198],{"class":63},[34,56496,1765],{"class":59},[34,56498,56499],{"class":36,"line":261},[34,56500,2651],{"class":59},[34,56502,56503],{"class":36,"line":267},[34,56504,2864],{"emptyLinePlaceholder":540},[34,56506,56507,56509],{"class":36,"line":2138},[34,56508,55213],{"class":2427},[34,56510,16036],{"class":59},[34,56512,56513,56515,56517,56519],{"class":36,"line":2143},[34,56514,55220],{"class":63},[34,56516,51898],{"class":59},[34,56518,55225],{"class":63},[34,56520,1765],{"class":59},[34,56522,56523,56525,56527,56529,56531],{"class":36,"line":2157},[34,56524,55232],{"class":63},[34,56526,51898],{"class":59},[34,56528,55237],{"class":63},[34,56530,51953],{"class":112},[34,56532,1765],{"class":59},[34,56534,56535,56537,56539,56541,56543],{"class":36,"line":2162},[34,56536,55246],{"class":63},[34,56538,51898],{"class":59},[34,56540,2010],{"class":63},[34,56542,51953],{"class":112},[34,56544,1765],{"class":59},[34,56546,56547,56549,56551,56553,56555,56557],{"class":36,"line":2191},[34,56548,55167],{"class":63},[34,56550,51898],{"class":59},[34,56552,919],{"class":63},[34,56554,51953],{"class":112},[34,56556,52017],{"class":63},[34,56558,1765],{"class":59},[34,56560,56561],{"class":36,"line":2196},[34,56562,2651],{"class":59},[34,56564,56565],{"class":36,"line":2213},[34,56566,2864],{"emptyLinePlaceholder":540},[34,56568,56569,56571],{"class":36,"line":2218},[34,56570,55281],{"class":2427},[34,56572,16036],{"class":59},[34,56574,56575,56577,56579,56581],{"class":36,"line":2223},[34,56576,55220],{"class":63},[34,56578,51898],{"class":59},[34,56580,55292],{"class":63},[34,56582,1765],{"class":59},[34,56584,56585,56587,56589,56591],{"class":36,"line":2228},[34,56586,55299],{"class":63},[34,56588,51898],{"class":59},[34,56590,319],{"class":63},[34,56592,1765],{"class":59},[34,56594,56595,56597,56599,56601],{"class":36,"line":2242},[34,56596,55310],{"class":63},[34,56598,51898],{"class":59},[34,56600,319],{"class":63},[34,56602,1765],{"class":59},[34,56604,56605,56607,56609,56611,56613],{"class":36,"line":2247},[34,56606,55232],{"class":63},[34,56608,51898],{"class":59},[34,56610,919],{"class":63},[34,56612,936],{"class":112},[34,56614,1765],{"class":59},[34,56616,56617,56619,56621,56623,56625],{"class":36,"line":3041},[34,56618,55246],{"class":63},[34,56620,51898],{"class":59},[34,56622,1181],{"class":63},[34,56624,936],{"class":112},[34,56626,1765],{"class":59},[34,56628,56629,56631,56633,56635],{"class":36,"line":3055},[34,56630,55345],{"class":63},[34,56632,51898],{"class":59},[34,56634,55350],{"class":63},[34,56636,1765],{"class":59},[34,56638,56639],{"class":36,"line":3063},[34,56640,2651],{"class":59},[34,56642,56643],{"class":36,"line":3068},[34,56644,2864],{"emptyLinePlaceholder":540},[34,56646,56647,56649,56651],{"class":36,"line":3074},[34,56648,55281],{"class":2427},[34,56650,7289],{"class":51761},[34,56652,16036],{"class":59},[34,56654,56655,56657,56659,56661],{"class":36,"line":3080},[34,56656,55220],{"class":63},[34,56658,51898],{"class":59},[34,56660,55292],{"class":63},[34,56662,1765],{"class":59},[34,56664,56665,56667,56669,56671,56673],{"class":36,"line":3085},[34,56666,55383],{"class":63},[34,56668,51898],{"class":59},[34,56670,1506],{"class":63},[34,56672,51953],{"class":112},[34,56674,1765],{"class":59},[34,56676,56677,56679,56681,56683,56685],{"class":36,"line":8412},[34,56678,55299],{"class":63},[34,56680,51898],{"class":59},[34,56682,1306],{"class":63},[34,56684,51953],{"class":112},[34,56686,1765],{"class":59},[34,56688,56689,56691,56693,56695,56697],{"class":36,"line":8436},[34,56690,55408],{"class":63},[34,56692,51898],{"class":59},[34,56694,927],{"class":63},[34,56696,51953],{"class":112},[34,56698,1765],{"class":59},[34,56700,56701],{"class":36,"line":8441},[34,56702,2651],{"class":59},[34,56704,56705],{"class":36,"line":8447},[34,56706,2864],{"emptyLinePlaceholder":540},[34,56708,56709,56711],{"class":36,"line":8474},[34,56710,55429],{"class":51761},[34,56712,16036],{"class":59},[34,56714,56715,56717,56719,56721],{"class":36,"line":8479},[34,56716,55220],{"class":63},[34,56718,51898],{"class":59},[34,56720,55292],{"class":63},[34,56722,1765],{"class":59},[34,56724,56725,56727,56729,56731,56733],{"class":36,"line":8485},[34,56726,55408],{"class":63},[34,56728,51898],{"class":59},[34,56730,1387],{"class":63},[34,56732,51953],{"class":112},[34,56734,1765],{"class":59},[34,56736,56737,56739,56741,56743,56745],{"class":36,"line":8497},[34,56738,55299],{"class":63},[34,56740,51898],{"class":59},[34,56742,1306],{"class":63},[34,56744,51953],{"class":112},[34,56746,1765],{"class":59},[34,56748,56749,56751,56753,56755],{"class":36,"line":8509},[34,56750,55470],{"class":63},[34,56752,51898],{"class":59},[34,56754,51938],{"class":63},[34,56756,1765],{"class":59},[34,56758,56759,56761,56763,56765],{"class":36,"line":8521},[34,56760,55481],{"class":63},[34,56762,51898],{"class":59},[34,56764,52129],{"class":63},[34,56766,1765],{"class":59},[34,56768,56769,56771,56773,56775],{"class":36,"line":10180},[34,56770,55220],{"class":63},[34,56772,51898],{"class":59},[34,56774,55292],{"class":63},[34,56776,1765],{"class":59},[34,56778,56779,56781,56783,56785,56787],{"class":36,"line":10205},[34,56780,55232],{"class":63},[34,56782,51898],{"class":59},[34,56784,4456],{"class":63},[34,56786,51953],{"class":112},[34,56788,1765],{"class":59},[34,56790,56791,56793,56795,56797,56799],{"class":36,"line":10228},[34,56792,55246],{"class":63},[34,56794,51898],{"class":59},[34,56796,1306],{"class":63},[34,56798,51953],{"class":112},[34,56800,1765],{"class":59},[34,56802,56803],{"class":36,"line":10252},[34,56804,2651],{"class":59},[34,56806,56807],{"class":36,"line":10257},[34,56808,2864],{"emptyLinePlaceholder":540},[34,56810,56811,56813,56815],{"class":36,"line":10262},[34,56812,55429],{"class":51761},[34,56814,55536],{"class":51761},[34,56816,16036],{"class":59},[34,56818,56819,56821,56823,56825,56827],{"class":36,"line":10267},[34,56820,55232],{"class":63},[34,56822,51898],{"class":59},[34,56824,1306],{"class":63},[34,56826,51953],{"class":112},[34,56828,1765],{"class":59},[34,56830,56831,56833,56835,56837,56839],{"class":36,"line":10276},[34,56832,55246],{"class":63},[34,56834,51898],{"class":59},[34,56836,1306],{"class":63},[34,56838,51953],{"class":112},[34,56840,1765],{"class":59},[34,56842,56843,56845,56847,56849,56851,56853,56855,56857,56859,56861,56863,56865],{"class":36,"line":10281},[34,56844,55345],{"class":63},[34,56846,51898],{"class":59},[34,56848,55571],{"class":63},[34,56850,617],{"class":59},[34,56852,319],{"class":63},[34,56854,12899],{"class":59},[34,56856,319],{"class":63},[34,56858,12899],{"class":59},[34,56860,319],{"class":63},[34,56862,12899],{"class":59},[34,56864,55588],{"class":63},[34,56866,3183],{"class":59},[34,56868,56869,56871,56873,56875,56877],{"class":36,"line":10287},[34,56870,55595],{"class":63},[34,56872,51898],{"class":59},[34,56874,1053],{"class":63},[34,56876,51953],{"class":112},[34,56878,1765],{"class":59},[34,56880,56881],{"class":36,"line":10308},[34,56882,2651],{"class":59},[34,56884,56885],{"class":36,"line":10314},[34,56886,2864],{"emptyLinePlaceholder":540},[34,56888,56889,56891],{"class":36,"line":10328},[34,56890,55616],{"class":2427},[34,56892,16036],{"class":59},[34,56894,56895,56897,56899,56901],{"class":36,"line":10334},[34,56896,55345],{"class":63},[34,56898,51898],{"class":59},[34,56900,55627],{"class":63},[34,56902,1765],{"class":59},[34,56904,56905],{"class":36,"line":10361},[34,56906,2651],{"class":59},[34,56908,56909,56911,56913],{"class":36,"line":10370},[34,56910,52878],{"class":59},[34,56912,532],{"class":51761},[34,56914,51768],{"class":59},[34,56916,56917,56919,56921],{"class":36,"line":10376},[34,56918,52246],{"class":59},[34,56920,51795],{"class":51761},[34,56922,51768],{"class":59},[34,56924,56925],{"class":36,"line":10384},[34,56926,2864],{"emptyLinePlaceholder":540},[34,56928,56929,56931,56933],{"class":36,"line":10389},[34,56930,1515],{"class":59},[34,56932,52261],{"class":51761},[34,56934,51768],{"class":59},[34,56936,56937,56939,56941,56943,56945,56947],{"class":36,"line":17068},[34,56938,52605],{"class":59},[34,56940,52072],{"class":51761},[34,56942,53947],{"class":2427},[34,56944,447],{"class":59},[34,56946,53952],{"class":187},[34,56948,51768],{"class":59},[34,56950,56951,56953,56955,56957,56959,56961],{"class":36,"line":17074},[34,56952,51802],{"class":59},[34,56954,52072],{"class":51761},[34,56956,53947],{"class":2427},[34,56958,447],{"class":59},[34,56960,55688],{"class":187},[34,56962,51768],{"class":59},[34,56964,56965,56967,56969,56971,56973,56975,56977,56979,56981],{"class":36,"line":17097},[34,56966,55695],{"class":59},[34,56968,20],{"class":51761},[34,56970,55700],{"class":2427},[34,56972,447],{"class":59},[34,56974,55705],{"class":187},[34,56976,55708],{"class":2427},[34,56978,447],{"class":59},[34,56980,8116],{"class":187},[34,56982,51768],{"class":59},[34,56984,56985,56987,56989],{"class":36,"line":17103},[34,56986,52237],{"class":59},[34,56988,52072],{"class":51761},[34,56990,51768],{"class":59},[34,56992,56993,56995,56997,56999,57001,57003],{"class":36,"line":17126},[34,56994,51802],{"class":59},[34,56996,52072],{"class":51761},[34,56998,53947],{"class":2427},[34,57000,447],{"class":59},[34,57002,55735],{"class":187},[34,57004,51768],{"class":59},[34,57006,57007,57009,57011,57013,57015],{"class":36,"line":17140},[34,57008,55695],{"class":59},[34,57010,14],{"class":51761},[34,57012,55746],{"class":59},[34,57014,14],{"class":51761},[34,57016,51768],{"class":59},[34,57018,57019,57021,57023],{"class":36,"line":17160},[34,57020,55695],{"class":59},[34,57022,1611],{"class":51761},[34,57024,51768],{"class":59},[34,57026,57027,57029,57031,57033,57035,57037,57039,57041],{"class":36,"line":17166},[34,57028,55763],{"class":59},[34,57030,570],{"class":51761},[34,57032,53947],{"class":2427},[34,57034,447],{"class":59},[34,57036,55772],{"class":187},[34,57038,55775],{"class":59},[34,57040,570],{"class":51761},[34,57042,51768],{"class":59},[34,57044,57045,57047,57049,57051,57053],{"class":36,"line":17177},[34,57046,55763],{"class":59},[34,57048,570],{"class":51761},[34,57050,55775],{"class":59},[34,57052,570],{"class":51761},[34,57054,51768],{"class":59},[34,57056,57057,57059,57061,57063,57065],{"class":36,"line":17200},[34,57058,55763],{"class":59},[34,57060,570],{"class":51761},[34,57062,55775],{"class":59},[34,57064,570],{"class":51761},[34,57066,51768],{"class":59},[34,57068,57069,57071,57073,57075,57077],{"class":36,"line":17222},[34,57070,55763],{"class":59},[34,57072,570],{"class":51761},[34,57074,55775],{"class":59},[34,57076,570],{"class":51761},[34,57078,51768],{"class":59},[34,57080,57081,57083,57085,57087,57089],{"class":36,"line":17227},[34,57082,55763],{"class":59},[34,57084,570],{"class":51761},[34,57086,55775],{"class":59},[34,57088,570],{"class":51761},[34,57090,51768],{"class":59},[34,57092,57093,57095,57097,57099,57101],{"class":36,"line":17233},[34,57094,55763],{"class":59},[34,57096,570],{"class":51761},[34,57098,55775],{"class":59},[34,57100,570],{"class":51761},[34,57102,51768],{"class":59},[34,57104,57105,57107,57109,57111,57113],{"class":36,"line":17247},[34,57106,55763],{"class":59},[34,57108,570],{"class":51761},[34,57110,55775],{"class":59},[34,57112,570],{"class":51761},[34,57114,51768],{"class":59},[34,57116,57117,57119,57121,57123,57125],{"class":36,"line":17260},[34,57118,55763],{"class":59},[34,57120,570],{"class":51761},[34,57122,55775],{"class":59},[34,57124,570],{"class":51761},[34,57126,51768],{"class":59},[34,57128,57129,57131,57133],{"class":36,"line":17265},[34,57130,55868],{"class":59},[34,57132,1611],{"class":51761},[34,57134,51768],{"class":59},[34,57136,57137,57139,57141],{"class":36,"line":17279},[34,57138,52237],{"class":59},[34,57140,52072],{"class":51761},[34,57142,51768],{"class":59},[34,57144,57145,57147,57149],{"class":36,"line":17284},[34,57146,52878],{"class":59},[34,57148,52072],{"class":51761},[34,57150,51768],{"class":59},[34,57152,57153,57155,57157],{"class":36,"line":17290},[34,57154,52605],{"class":59},[34,57156,52274],{"class":51761},[34,57158,51768],{"class":59},[34,57160,57161,57163,57166,57168],{"class":36,"line":17295},[34,57162,11685],{"class":112},[34,57164,57165],{"class":63}," sliderData",[34,57167,14028],{"class":112},[34,57169,55908],{"class":59},[34,57171,57172,57174,57176,57178,57180,57182,57184],{"class":36,"line":17309},[34,57173,55913],{"class":59},[34,57175,55916],{"class":187},[34,57177,55919],{"class":59},[34,57179,55922],{"class":187},[34,57181,55925],{"class":59},[34,57183,55928],{"class":187},[34,57185,55931],{"class":59},[34,57187,57188,57190,57192,57194,57196,57198,57200],{"class":36,"line":17314},[34,57189,55913],{"class":59},[34,57191,55938],{"class":187},[34,57193,55919],{"class":59},[34,57195,55943],{"class":187},[34,57197,55925],{"class":59},[34,57199,55948],{"class":187},[34,57201,55931],{"class":59},[34,57203,57204,57206,57208,57210,57212,57214,57216],{"class":36,"line":17319},[34,57205,55913],{"class":59},[34,57207,55957],{"class":187},[34,57209,55919],{"class":59},[34,57211,55962],{"class":187},[34,57213,55925],{"class":59},[34,57215,55967],{"class":187},[34,57217,55931],{"class":59},[34,57219,57220,57222,57224,57226,57228,57230,57232],{"class":36,"line":17333},[34,57221,55913],{"class":59},[34,57223,55976],{"class":187},[34,57225,55919],{"class":59},[34,57227,55981],{"class":187},[34,57229,55925],{"class":59},[34,57231,55986],{"class":187},[34,57233,55931],{"class":59},[34,57235,57236,57238,57240,57242,57244,57246,57248],{"class":36,"line":17345},[34,57237,55913],{"class":59},[34,57239,55995],{"class":187},[34,57241,55919],{"class":59},[34,57243,56000],{"class":187},[34,57245,55925],{"class":59},[34,57247,56005],{"class":187},[34,57249,55931],{"class":59},[34,57251,57252,57254,57256,57258,57260,57262,57264],{"class":36,"line":17350},[34,57253,55913],{"class":59},[34,57255,56014],{"class":187},[34,57257,55919],{"class":59},[34,57259,56019],{"class":187},[34,57261,55925],{"class":59},[34,57263,56024],{"class":187},[34,57265,55931],{"class":59},[34,57267,57268,57270,57272,57274,57276,57278,57280],{"class":36,"line":17363},[34,57269,55913],{"class":59},[34,57271,56033],{"class":187},[34,57273,55919],{"class":59},[34,57275,56038],{"class":187},[34,57277,55925],{"class":59},[34,57279,56043],{"class":187},[34,57281,55931],{"class":59},[34,57283,57284,57286,57288,57290,57292,57294,57296],{"class":36,"line":17368},[34,57285,55913],{"class":59},[34,57287,56052],{"class":187},[34,57289,55919],{"class":59},[34,57291,56057],{"class":187},[34,57293,55925],{"class":59},[34,57295,56062],{"class":187},[34,57297,56065],{"class":59},[34,57299,57300],{"class":36,"line":17373},[34,57301,53570],{"class":59},[34,57303,57304],{"class":36,"line":17378},[34,57305,57306],{"class":40},"    \u002F\u002F 1.获取元素\n",[34,57308,57309,57311,57313,57315,57317,57319,57321,57323],{"class":36,"line":17391},[34,57310,11685],{"class":112},[34,57312,56076],{"class":63},[34,57314,14028],{"class":112},[34,57316,54857],{"class":59},[34,57318,54860],{"class":2427},[34,57320,617],{"class":59},[34,57322,56087],{"class":187},[34,57324,623],{"class":59},[34,57326,57327,57329,57331,57333,57335,57337,57339,57341],{"class":36,"line":17396},[34,57328,11685],{"class":112},[34,57330,7289],{"class":63},[34,57332,14028],{"class":112},[34,57334,54857],{"class":59},[34,57336,54860],{"class":2427},[34,57338,617],{"class":59},[34,57340,56106],{"class":187},[34,57342,623],{"class":59},[34,57344,57345,57347,57349,57351],{"class":36,"line":33096},[34,57346,52680],{"class":112},[34,57348,9902],{"class":59},[34,57350,447],{"class":112},[34,57352,47794],{"class":63},[34,57354,57355],{"class":36,"line":33102},[34,57356,57357],{"class":40},"    \u002F\u002F 2.开启定时器\n",[34,57359,57360],{"class":36,"line":33108},[34,57361,57362],{"class":40},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[34,57364,57365,57368,57370,57372],{"class":36,"line":33114},[34,57366,57367],{"class":2427},"    setInterval",[34,57369,617],{"class":59},[34,57371,54910],{"class":112},[34,57373,54913],{"class":59},[34,57375,57376,57378],{"class":36,"line":33120},[34,57377,54918],{"class":59},[34,57379,3166],{"class":112},[34,57381,57382,57384,57386,57388,57391,57393],{"class":36,"line":33131},[34,57383,54941],{"class":112},[34,57385,54944],{"class":59},[34,57387,2174],{"class":112},[34,57389,57390],{"class":59}," sliderData.",[34,57392,52429],{"class":63},[34,57394,12906],{"class":59},[34,57396,57397,57400,57402],{"class":36,"line":33137},[34,57398,57399],{"class":59},"        i ",[34,57401,447],{"class":112},[34,57403,47794],{"class":63},[34,57405,57406],{"class":36,"line":33157},[34,57407,52859],{"class":59},[34,57409,57410],{"class":36,"line":33163},[34,57411,57412],{"class":40},"      \u002F\u002F 更换图片路径\n",[34,57414,57415,57417,57419],{"class":36,"line":33174},[34,57416,56182],{"class":59},[34,57418,447],{"class":112},[34,57420,57421],{"class":59}," sliderData[i].url\n",[34,57423,57424],{"class":36,"line":33180},[34,57425,57426],{"class":40},"      \u002F\u002F 把文字写到p里面\n",[34,57428,57429,57431,57433],{"class":36,"line":33186},[34,57430,56192],{"class":59},[34,57432,447],{"class":112},[34,57434,57435],{"class":59}," sliderData[i].title\n",[34,57437,57438],{"class":36,"line":33192},[34,57439,57440],{"class":40},"      \u002F\u002F 小圆点\n",[34,57442,57443],{"class":36,"line":33198},[34,57444,57445],{"class":40},"      \u002F\u002F 先删除以前的active\n",[34,57447,57448],{"class":36,"line":33204},[34,57449,57450],{"class":40},"      \u002F\u002F 只让当前li添加active\n",[34,57452,57453,57455,57457,57459,57462,57465,57468,57470,57472],{"class":36,"line":33210},[34,57454,56232],{"class":59},[34,57456,54860],{"class":2427},[34,57458,617],{"class":59},[34,57460,57461],{"class":187},"'.slider-footer .activate'",[34,57463,57464],{"class":59},").classList.",[34,57466,57467],{"class":2427},"remove",[34,57469,617],{"class":59},[34,57471,56250],{"class":187},[34,57473,623],{"class":59},[34,57475,57476,57478,57480,57482,57485,57487,57489,57491,57494,57496,57498,57500,57502],{"class":36,"line":33216},[34,57477,56232],{"class":59},[34,57479,54860],{"class":2427},[34,57481,617],{"class":59},[34,57483,57484],{"class":187},"`.slider-footer ul li:nth-child(${",[34,57486,1048],{"class":59},[34,57488,46027],{"class":112},[34,57490,25583],{"class":63},[34,57492,57493],{"class":187},"})`",[34,57495,57464],{"class":59},[34,57497,5798],{"class":2427},[34,57499,617],{"class":59},[34,57501,56250],{"class":187},[34,57503,623],{"class":59},[34,57505,57506],{"class":36,"line":33236},[34,57507,2864],{"emptyLinePlaceholder":540},[34,57509,57510,57512,57514],{"class":36,"line":33242},[34,57511,54996],{"class":59},[34,57513,6874],{"class":63},[34,57515,623],{"class":59},[34,57517,57518],{"class":36,"line":33258},[34,57519,2864],{"emptyLinePlaceholder":540},[34,57521,57522,57524,57526],{"class":36,"line":33264},[34,57523,52878],{"class":59},[34,57525,52274],{"class":51761},[34,57527,51768],{"class":59},[34,57529,57530,57532,57534],{"class":36,"line":33278},[34,57531,52246],{"class":59},[34,57533,52261],{"class":51761},[34,57535,51768],{"class":59},[34,57537,57538],{"class":36,"line":33284},[34,57539,2864],{"emptyLinePlaceholder":540},[34,57541,57542,57544,57546],{"class":36,"line":33299},[34,57543,52246],{"class":59},[34,57545,51096],{"class":51761},[34,57547,51768],{"class":59},[584,57549,57551],{"id":57550},"_317-重要知识点","3.1.7 重要知识点",[14,57553,57554,57555],{},"浏览器在渲染文本时， ",[760,57556,57557],{},"没有空格或换行符就没有“断行点”",[14,57559,57560],{},[20,57561],{"alt":22,"src":57562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57564,57565],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57567,57568],{},[20,57569],{"alt":22,"src":57570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57572,57573],{},[20,57574],{"alt":22,"src":57575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[555,57577,57579],{"id":57578},"_32-dom事件基础","3.2 DOM事件基础",[584,57581,57583],{"id":57582},"_321-事件监听","3.2.1 事件监听",[14,57585,57586],{},[20,57587],{"alt":22,"src":57588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57590,57591],{},"事件监听有响应的发生",[14,57593,57594],{},[20,57595],{"alt":22,"src":57596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57598,57599],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57601,57602],{},"对于有名函数,要执行的函数名后边不要加()",[584,57604,57606],{"id":57605},"_322-随机点名案例","3.2.2 随机点名案例",[25,57608,57610],{"className":51094,"code":57609,"language":51096,"meta":22,"style":22},"\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",[31,57611,57612,57622,57636,57640,57648,57662,57682,57694,57702,57708,57718,57728,57732,57736,57743,57754,57758,57762,57768,57780,57794,57804,57816,57829,57833,57837,57844,57848,57861,57873,57885,57889,57893,57897,57904,57914,57918,57922,57931,57943,57955,57970,57974,57982,57990,57994,58002,58015,58029,58042,58062,58070,58085,58105,58125,58133,58137,58145,58150,58186,58206,58211,58230,58235,58246,58251,58262,58267,58286,58301,58306,58332,58342,58351,58356,58372,58377,58382,58387,58402,58406,58410,58415,58434,58451,58459,58464,58479,58483,58487,58495,58503,58507],{"__ignoreMap":22},[34,57613,57614,57616,57618,57620],{"class":36,"line":37},[34,57615,51758],{"class":59},[34,57617,51762],{"class":51761},[34,57619,51765],{"class":2427},[34,57621,51768],{"class":59},[34,57623,57624,57626,57628,57630,57632,57634],{"class":36,"line":44},[34,57625,1515],{"class":59},[34,57627,51096],{"class":51761},[34,57629,51777],{"class":2427},[34,57631,447],{"class":59},[34,57633,51782],{"class":187},[34,57635,51768],{"class":59},[34,57637,57638],{"class":36,"line":50},[34,57639,2864],{"emptyLinePlaceholder":540},[34,57641,57642,57644,57646],{"class":36,"line":56},[34,57643,1515],{"class":59},[34,57645,51795],{"class":51761},[34,57647,51768],{"class":59},[34,57649,57650,57652,57654,57656,57658,57660],{"class":36,"line":107},[34,57651,52605],{"class":59},[34,57653,51805],{"class":51761},[34,57655,51808],{"class":2427},[34,57657,447],{"class":59},[34,57659,51813],{"class":187},[34,57661,51768],{"class":59},[34,57663,57664,57666,57668,57670,57672,57674,57676,57678,57680],{"class":36,"line":196},[34,57665,52605],{"class":59},[34,57667,51805],{"class":51761},[34,57669,15384],{"class":2427},[34,57671,447],{"class":59},[34,57673,51852],{"class":187},[34,57675,51832],{"class":2427},[34,57677,447],{"class":59},[34,57679,51859],{"class":187},[34,57681,51768],{"class":59},[34,57683,57684,57686,57688,57690,57692],{"class":36,"line":202},[34,57685,52605],{"class":59},[34,57687,51868],{"class":51761},[34,57689,51871],{"class":59},[34,57691,51868],{"class":51761},[34,57693,51768],{"class":59},[34,57695,57696,57698,57700],{"class":36,"line":207},[34,57697,52605],{"class":59},[34,57699,532],{"class":51761},[34,57701,51768],{"class":59},[34,57703,57704,57706],{"class":36,"line":222},[34,57705,6867],{"class":51761},[34,57707,16036],{"class":59},[34,57709,57710,57712,57714,57716],{"class":36,"line":227},[34,57711,55167],{"class":63},[34,57713,51898],{"class":59},[34,57715,319],{"class":63},[34,57717,1765],{"class":59},[34,57719,57720,57722,57724,57726],{"class":36,"line":232},[34,57721,55156],{"class":63},[34,57723,51898],{"class":59},[34,57725,319],{"class":63},[34,57727,1765],{"class":59},[34,57729,57730],{"class":36,"line":238},[34,57731,2651],{"class":59},[34,57733,57734],{"class":36,"line":244},[34,57735,2864],{"emptyLinePlaceholder":540},[34,57737,57738,57741],{"class":36,"line":250},[34,57739,57740],{"class":51761},"    h2",[34,57742,16036],{"class":59},[34,57744,57745,57748,57750,57752],{"class":36,"line":256},[34,57746,57747],{"class":63},"      text-align",[34,57749,51898],{"class":59},[34,57751,52053],{"class":63},[34,57753,1765],{"class":59},[34,57755,57756],{"class":36,"line":261},[34,57757,2651],{"class":59},[34,57759,57760],{"class":36,"line":267},[34,57761,2864],{"emptyLinePlaceholder":540},[34,57763,57764,57766],{"class":36,"line":2138},[34,57765,55213],{"class":2427},[34,57767,16036],{"class":59},[34,57769,57770,57772,57774,57776,57778],{"class":36,"line":2143},[34,57771,55232],{"class":63},[34,57773,51898],{"class":59},[34,57775,2010],{"class":63},[34,57777,51953],{"class":112},[34,57779,1765],{"class":59},[34,57781,57782,57784,57786,57788,57790,57792],{"class":36,"line":2157},[34,57783,55167],{"class":63},[34,57785,51898],{"class":59},[34,57787,1262],{"class":63},[34,57789,51953],{"class":112},[34,57791,52017],{"class":63},[34,57793,1765],{"class":59},[34,57795,57796,57798,57800,57802],{"class":36,"line":2162},[34,57797,55470],{"class":63},[34,57799,51898],{"class":59},[34,57801,51938],{"class":63},[34,57803,1765],{"class":59},[34,57805,57806,57808,57810,57812,57814],{"class":36,"line":2191},[34,57807,55383],{"class":63},[34,57809,51898],{"class":59},[34,57811,1431],{"class":63},[34,57813,51953],{"class":112},[34,57815,1765],{"class":59},[34,57817,57818,57821,57823,57825,57827],{"class":36,"line":2196},[34,57819,57820],{"class":63},"      line-height",[34,57822,51898],{"class":59},[34,57824,1008],{"class":63},[34,57826,51953],{"class":112},[34,57828,1765],{"class":59},[34,57830,57831],{"class":36,"line":2213},[34,57832,2651],{"class":59},[34,57834,57835],{"class":36,"line":2218},[34,57836,2864],{"emptyLinePlaceholder":540},[34,57838,57839,57842],{"class":36,"line":2223},[34,57840,57841],{"class":2427},"    .qs",[34,57843,16036],{"class":59},[34,57845,57846],{"class":36,"line":2228},[34,57847,2864],{"emptyLinePlaceholder":540},[34,57849,57850,57852,57854,57857,57859],{"class":36,"line":2242},[34,57851,55232],{"class":63},[34,57853,51898],{"class":59},[34,57855,57856],{"class":63},"450",[34,57858,51953],{"class":112},[34,57860,1765],{"class":59},[34,57862,57863,57865,57867,57869,57871],{"class":36,"line":2247},[34,57864,55246],{"class":63},[34,57866,51898],{"class":59},[34,57868,1008],{"class":63},[34,57870,51953],{"class":112},[34,57872,1765],{"class":59},[34,57874,57875,57878,57880,57883],{"class":36,"line":3041},[34,57876,57877],{"class":63},"      color",[34,57879,51898],{"class":59},[34,57881,57882],{"class":63},"red",[34,57884,1765],{"class":59},[34,57886,57887],{"class":36,"line":3055},[34,57888,2864],{"emptyLinePlaceholder":540},[34,57890,57891],{"class":36,"line":3063},[34,57892,2651],{"class":59},[34,57894,57895],{"class":36,"line":3068},[34,57896,2864],{"emptyLinePlaceholder":540},[34,57898,57899,57902],{"class":36,"line":3074},[34,57900,57901],{"class":2427},"    .btns",[34,57903,16036],{"class":59},[34,57905,57906,57908,57910,57912],{"class":36,"line":3080},[34,57907,57747],{"class":63},[34,57909,51898],{"class":59},[34,57911,52053],{"class":63},[34,57913,1765],{"class":59},[34,57915,57916],{"class":36,"line":3085},[34,57917,2651],{"class":59},[34,57919,57920],{"class":36,"line":8412},[34,57921,2864],{"emptyLinePlaceholder":540},[34,57923,57924,57926,57929],{"class":36,"line":8436},[34,57925,57901],{"class":2427},[34,57927,57928],{"class":51761}," button",[34,57930,16036],{"class":59},[34,57932,57933,57935,57937,57939,57941],{"class":36,"line":8441},[34,57934,55232],{"class":63},[34,57936,51898],{"class":59},[34,57938,1423],{"class":63},[34,57940,51953],{"class":112},[34,57942,1765],{"class":59},[34,57944,57945,57947,57949,57951,57953],{"class":36,"line":8447},[34,57946,55246],{"class":63},[34,57948,51898],{"class":59},[34,57950,882],{"class":63},[34,57952,51953],{"class":112},[34,57954,1765],{"class":59},[34,57956,57957,57959,57961,57963,57966,57968],{"class":36,"line":8474},[34,57958,55167],{"class":63},[34,57960,51898],{"class":59},[34,57962,319],{"class":63},[34,57964,57965],{"class":63}," 50",[34,57967,51953],{"class":112},[34,57969,1765],{"class":59},[34,57971,57972],{"class":36,"line":8479},[34,57973,2651],{"class":59},[34,57975,57976,57978,57980],{"class":36,"line":8485},[34,57977,52878],{"class":59},[34,57979,532],{"class":51761},[34,57981,51768],{"class":59},[34,57983,57984,57986,57988],{"class":36,"line":8497},[34,57985,52246],{"class":59},[34,57987,51795],{"class":51761},[34,57989,51768],{"class":59},[34,57991,57992],{"class":36,"line":8509},[34,57993,2864],{"emptyLinePlaceholder":540},[34,57995,57996,57998,58000],{"class":36,"line":8521},[34,57997,1515],{"class":59},[34,57999,52261],{"class":51761},[34,58001,51768],{"class":59},[34,58003,58004,58006,58008,58011,58013],{"class":36,"line":10180},[34,58005,52605],{"class":59},[34,58007,555],{"class":51761},[34,58009,58010],{"class":59},">随机点名\u003C\u002F",[34,58012,555],{"class":51761},[34,58014,51768],{"class":59},[34,58016,58017,58019,58021,58023,58025,58027],{"class":36,"line":10205},[34,58018,52605],{"class":59},[34,58020,52072],{"class":51761},[34,58022,53947],{"class":2427},[34,58024,447],{"class":59},[34,58026,53952],{"class":187},[34,58028,51768],{"class":59},[34,58030,58031,58033,58035,58038,58040],{"class":36,"line":10228},[34,58032,51802],{"class":59},[34,58034,34],{"class":51761},[34,58036,58037],{"class":59},">名字是：\u003C\u002F",[34,58039,34],{"class":51761},[34,58041,51768],{"class":59},[34,58043,58044,58046,58048,58050,58052,58055,58058,58060],{"class":36,"line":10252},[34,58045,51802],{"class":59},[34,58047,52072],{"class":51761},[34,58049,53947],{"class":2427},[34,58051,447],{"class":59},[34,58053,58054],{"class":187},"\"qs\"",[34,58056,58057],{"class":59},">这里显示姓名\u003C\u002F",[34,58059,52072],{"class":51761},[34,58061,51768],{"class":59},[34,58063,58064,58066,58068],{"class":36,"line":10257},[34,58065,52878],{"class":59},[34,58067,52072],{"class":51761},[34,58069,51768],{"class":59},[34,58071,58072,58074,58076,58078,58080,58083],{"class":36,"line":10262},[34,58073,52605],{"class":59},[34,58075,52072],{"class":51761},[34,58077,53947],{"class":2427},[34,58079,447],{"class":59},[34,58081,58082],{"class":187},"\"btns\"",[34,58084,51768],{"class":59},[34,58086,58087,58089,58091,58093,58095,58098,58101,58103],{"class":36,"line":10267},[34,58088,51802],{"class":59},[34,58090,54348],{"class":51761},[34,58092,53947],{"class":2427},[34,58094,447],{"class":59},[34,58096,58097],{"class":187},"\"start\"",[34,58099,58100],{"class":59},">开始\u003C\u002F",[34,58102,54348],{"class":51761},[34,58104,51768],{"class":59},[34,58106,58107,58109,58111,58113,58115,58118,58121,58123],{"class":36,"line":10276},[34,58108,51802],{"class":59},[34,58110,54348],{"class":51761},[34,58112,53947],{"class":2427},[34,58114,447],{"class":59},[34,58116,58117],{"class":187},"\"end\"",[34,58119,58120],{"class":59},">结束\u003C\u002F",[34,58122,54348],{"class":51761},[34,58124,51768],{"class":59},[34,58126,58127,58129,58131],{"class":36,"line":10281},[34,58128,52878],{"class":59},[34,58130,52072],{"class":51761},[34,58132,51768],{"class":59},[34,58134,58135],{"class":36,"line":10287},[34,58136,2864],{"emptyLinePlaceholder":540},[34,58138,58139,58141,58143],{"class":36,"line":10308},[34,58140,52605],{"class":59},[34,58142,52274],{"class":51761},[34,58144,51768],{"class":59},[34,58146,58147],{"class":36,"line":10314},[34,58148,58149],{"class":40},"    \u002F\u002F 数据数组\n",[34,58151,58152,58154,58157,58159,58161,58164,58166,58169,58171,58174,58176,58179,58181,58184],{"class":36,"line":10328},[34,58153,11685],{"class":112},[34,58155,58156],{"class":63}," arr",[34,58158,14028],{"class":112},[34,58160,52687],{"class":59},[34,58162,58163],{"class":187},"'马超'",[34,58165,12899],{"class":59},[34,58167,58168],{"class":187},"'黄忠'",[34,58170,12899],{"class":59},[34,58172,58173],{"class":187},"'赵云'",[34,58175,12899],{"class":59},[34,58177,58178],{"class":187},"'关羽'",[34,58180,12899],{"class":59},[34,58182,58183],{"class":187},"'张飞'",[34,58185,73],{"class":59},[34,58187,58188,58190,58193,58195,58197,58199,58201,58204],{"class":36,"line":10334},[34,58189,11685],{"class":112},[34,58191,58192],{"class":63}," qs",[34,58194,14028],{"class":112},[34,58196,54857],{"class":59},[34,58198,54860],{"class":2427},[34,58200,617],{"class":59},[34,58202,58203],{"class":187},"'.qs'",[34,58205,623],{"class":59},[34,58207,58208],{"class":36,"line":10361},[34,58209,58210],{"class":40},"    \u002F\u002F 1.业务1.开始按钮模块\n",[34,58212,58213,58215,58217,58219,58221,58223,58225,58228],{"class":36,"line":10370},[34,58214,11685],{"class":112},[34,58216,4648],{"class":63},[34,58218,14028],{"class":112},[34,58220,54857],{"class":59},[34,58222,54860],{"class":2427},[34,58224,617],{"class":59},[34,58226,58227],{"class":187},"'.start'",[34,58229,623],{"class":59},[34,58231,58232],{"class":36,"line":10376},[34,58233,58234],{"class":40},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[34,58236,58237,58239,58242,58244],{"class":36,"line":10384},[34,58238,52680],{"class":112},[34,58240,58241],{"class":59}," timerId ",[34,58243,447],{"class":112},[34,58245,47794],{"class":63},[34,58247,58248],{"class":36,"line":10389},[34,58249,58250],{"class":40},"    \u002F\u002F 随机号要全局变量\n",[34,58252,58253,58255,58258,58260],{"class":36,"line":17068},[34,58254,52680],{"class":112},[34,58256,58257],{"class":59}," random ",[34,58259,447],{"class":112},[34,58261,47794],{"class":63},[34,58263,58264],{"class":36,"line":17074},[34,58265,58266],{"class":40},"    \u002F\u002F 1.1 添加点击事件\n",[34,58268,58269,58272,58275,58277,58280,58282,58284],{"class":36,"line":17097},[34,58270,58271],{"class":59},"    start.",[34,58273,58274],{"class":2427},"addEventListener",[34,58276,617],{"class":59},[34,58278,58279],{"class":187},"'click'",[34,58281,12899],{"class":59},[34,58283,54910],{"class":112},[34,58285,54913],{"class":59},[34,58287,58288,58291,58293,58295,58297,58299],{"class":36,"line":17103},[34,58289,58290],{"class":59},"      timerId ",[34,58292,447],{"class":112},[34,58294,54905],{"class":2427},[34,58296,617],{"class":59},[34,58298,54910],{"class":112},[34,58300,54913],{"class":59},[34,58302,58303],{"class":36,"line":17126},[34,58304,58305],{"class":40},"        \u002F\u002F 随机数\n",[34,58307,58308,58311,58313,58316,58319,58322,58324,58326,58328,58330],{"class":36,"line":17140},[34,58309,58310],{"class":59},"        random ",[34,58312,447],{"class":112},[34,58314,58315],{"class":2427}," parseInt",[34,58317,58318],{"class":59},"(Math.",[34,58320,58321],{"class":2427},"random",[34,58323,13514],{"class":59},[34,58325,1062],{"class":112},[34,58327,52426],{"class":59},[34,58329,52429],{"class":63},[34,58331,623],{"class":59},[34,58333,58334,58337,58339],{"class":36,"line":17160},[34,58335,58336],{"class":59},"        qs.innerHTML ",[34,58338,447],{"class":112},[34,58340,58341],{"class":59}," arr[random]\n",[34,58343,58344,58347,58349],{"class":36,"line":17166},[34,58345,58346],{"class":59},"      }, ",[34,58348,882],{"class":63},[34,58350,623],{"class":59},[34,58352,58353],{"class":36,"line":17177},[34,58354,58355],{"class":40},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[34,58357,58358,58360,58363,58365,58368,58370],{"class":36,"line":17200},[34,58359,54941],{"class":112},[34,58361,58362],{"class":59}," (arr.",[34,58364,52429],{"class":63},[34,58366,58367],{"class":112}," ===",[34,58369,25583],{"class":63},[34,58371,12906],{"class":59},[34,58373,58374],{"class":36,"line":17222},[34,58375,58376],{"class":40},"        \u002F\u002F start.disabled = true\n",[34,58378,58379],{"class":36,"line":17227},[34,58380,58381],{"class":40},"        \u002F\u002F end.disabled = true\n",[34,58383,58384],{"class":36,"line":17233},[34,58385,58386],{"class":40},"        \u002F\u002F 可以合起来写\n",[34,58388,58389,58392,58394,58397,58399],{"class":36,"line":17247},[34,58390,58391],{"class":59},"        start.disabled ",[34,58393,447],{"class":112},[34,58395,58396],{"class":59}," end.disabled ",[34,58398,447],{"class":112},[34,58400,58401],{"class":63}," true\n",[34,58403,58404],{"class":36,"line":17260},[34,58405,52859],{"class":59},[34,58407,58408],{"class":36,"line":17265},[34,58409,33923],{"class":59},[34,58411,58412],{"class":36,"line":17279},[34,58413,58414],{"class":40},"    \u002F\u002F 1.2 关闭按钮模块\n",[34,58416,58417,58419,58421,58423,58425,58427,58429,58432],{"class":36,"line":17284},[34,58418,11685],{"class":112},[34,58420,4664],{"class":63},[34,58422,14028],{"class":112},[34,58424,54857],{"class":59},[34,58426,54860],{"class":2427},[34,58428,617],{"class":59},[34,58430,58431],{"class":187},"'.end'",[34,58433,623],{"class":59},[34,58435,58436,58439,58441,58443,58445,58447,58449],{"class":36,"line":17290},[34,58437,58438],{"class":59},"    end.",[34,58440,58274],{"class":2427},[34,58442,617],{"class":59},[34,58444,58279],{"class":187},[34,58446,12899],{"class":59},[34,58448,54910],{"class":112},[34,58450,54913],{"class":59},[34,58452,58453,58456],{"class":36,"line":17295},[34,58454,58455],{"class":2427},"      clearInterval",[34,58457,58458],{"class":59},"(timerId)\n",[34,58460,58461],{"class":36,"line":17309},[34,58462,58463],{"class":40},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[34,58465,58466,58469,58472,58475,58477],{"class":36,"line":17314},[34,58467,58468],{"class":59},"      arr.",[34,58470,58471],{"class":2427},"splice",[34,58473,58474],{"class":59},"(random, ",[34,58476,64],{"class":63},[34,58478,623],{"class":59},[34,58480,58481],{"class":36,"line":17319},[34,58482,33923],{"class":59},[34,58484,58485],{"class":36,"line":17333},[34,58486,2864],{"emptyLinePlaceholder":540},[34,58488,58489,58491,58493],{"class":36,"line":17345},[34,58490,52878],{"class":59},[34,58492,52274],{"class":51761},[34,58494,51768],{"class":59},[34,58496,58497,58499,58501],{"class":36,"line":17350},[34,58498,52246],{"class":59},[34,58500,52261],{"class":51761},[34,58502,51768],{"class":59},[34,58504,58505],{"class":36,"line":17363},[34,58506,2864],{"emptyLinePlaceholder":540},[34,58508,58509,58511,58513],{"class":36,"line":17368},[34,58510,52246],{"class":59},[34,58512,51096],{"class":51761},[34,58514,51768],{"class":59},[14,58516,58517],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[584,58519,58521],{"id":58520},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[25,58523,58525],{"className":51094,"code":58524,"language":51096,"meta":22,"style":22},"\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",[31,58526,58527,58537,58551,58555,58563,58577,58597,58609,58617,58621,58629,58641,58649,58668,58685,58701,58711,58715,58723,58731,58735],{"__ignoreMap":22},[34,58528,58529,58531,58533,58535],{"class":36,"line":37},[34,58530,51758],{"class":59},[34,58532,51762],{"class":51761},[34,58534,51765],{"class":2427},[34,58536,51768],{"class":59},[34,58538,58539,58541,58543,58545,58547,58549],{"class":36,"line":44},[34,58540,1515],{"class":59},[34,58542,51096],{"class":51761},[34,58544,51777],{"class":2427},[34,58546,447],{"class":59},[34,58548,51782],{"class":187},[34,58550,51768],{"class":59},[34,58552,58553],{"class":36,"line":50},[34,58554,2864],{"emptyLinePlaceholder":540},[34,58556,58557,58559,58561],{"class":36,"line":56},[34,58558,1515],{"class":59},[34,58560,51795],{"class":51761},[34,58562,51768],{"class":59},[34,58564,58565,58567,58569,58571,58573,58575],{"class":36,"line":107},[34,58566,52605],{"class":59},[34,58568,51805],{"class":51761},[34,58570,51808],{"class":2427},[34,58572,447],{"class":59},[34,58574,51813],{"class":187},[34,58576,51768],{"class":59},[34,58578,58579,58581,58583,58585,58587,58589,58591,58593,58595],{"class":36,"line":196},[34,58580,52605],{"class":59},[34,58582,51805],{"class":51761},[34,58584,15384],{"class":2427},[34,58586,447],{"class":59},[34,58588,51852],{"class":187},[34,58590,51832],{"class":2427},[34,58592,447],{"class":59},[34,58594,51859],{"class":187},[34,58596,51768],{"class":59},[34,58598,58599,58601,58603,58605,58607],{"class":36,"line":202},[34,58600,52605],{"class":59},[34,58602,51868],{"class":51761},[34,58604,51871],{"class":59},[34,58606,51868],{"class":51761},[34,58608,51768],{"class":59},[34,58610,58611,58613,58615],{"class":36,"line":207},[34,58612,52246],{"class":59},[34,58614,51795],{"class":51761},[34,58616,51768],{"class":59},[34,58618,58619],{"class":36,"line":222},[34,58620,2864],{"emptyLinePlaceholder":540},[34,58622,58623,58625,58627],{"class":36,"line":227},[34,58624,1515],{"class":59},[34,58626,52261],{"class":51761},[34,58628,51768],{"class":59},[34,58630,58631,58633,58635,58637,58639],{"class":36,"line":232},[34,58632,52605],{"class":59},[34,58634,54348],{"class":51761},[34,58636,54354],{"class":59},[34,58638,54348],{"class":51761},[34,58640,51768],{"class":59},[34,58642,58643,58645,58647],{"class":36,"line":238},[34,58644,52605],{"class":59},[34,58646,52274],{"class":51761},[34,58648,51768],{"class":59},[34,58650,58651,58653,58655,58657,58659,58661,58663,58666],{"class":36,"line":244},[34,58652,11685],{"class":112},[34,58654,54852],{"class":63},[34,58656,14028],{"class":112},[34,58658,54857],{"class":59},[34,58660,54860],{"class":2427},[34,58662,617],{"class":59},[34,58664,58665],{"class":187},"'button'",[34,58667,623],{"class":59},[34,58669,58670,58673,58675,58677,58679,58681,58683],{"class":36,"line":250},[34,58671,58672],{"class":59},"    btn.",[34,58674,58274],{"class":2427},[34,58676,617],{"class":59},[34,58678,58279],{"class":187},[34,58680,12899],{"class":59},[34,58682,54910],{"class":112},[34,58684,54913],{"class":59},[34,58686,58687,58690,58692,58694,58697,58699],{"class":36,"line":256},[34,58688,58689],{"class":112},"      const",[34,58691,2704],{"class":63},[34,58693,14028],{"class":112},[34,58695,58696],{"class":59}," Math.",[34,58698,58321],{"class":2427},[34,58700,2440],{"class":59},[34,58702,58703,58706,58709],{"class":36,"line":261},[34,58704,58705],{"class":59},"      console.",[34,58707,58708],{"class":2427},"log",[34,58710,630],{"class":59},[34,58712,58713],{"class":36,"line":267},[34,58714,33923],{"class":59},[34,58716,58717,58719,58721],{"class":36,"line":2138},[34,58718,52878],{"class":59},[34,58720,52274],{"class":51761},[34,58722,51768],{"class":59},[34,58724,58725,58727,58729],{"class":36,"line":2143},[34,58726,52246],{"class":59},[34,58728,52261],{"class":51761},[34,58730,51768],{"class":59},[34,58732,58733],{"class":36,"line":2157},[34,58734,2864],{"emptyLinePlaceholder":540},[34,58736,58737,58739,58741],{"class":36,"line":2162},[34,58738,52246],{"class":59},[34,58740,51096],{"class":51761},[34,58742,51768],{"class":59},[14,58744,58745],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58747,58748],{},"常量不可以重新赋值",[14,58750,58751],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[25,58753,58755],{"className":51094,"code":58754,"language":51096,"meta":22,"style":22},"\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",[31,58756,58757,58767,58781,58785,58793,58807,58827,58839,58847,58851,58859,58871,58879,58890,58908,58924,58938,58946,58950,58958,58966,58970],{"__ignoreMap":22},[34,58758,58759,58761,58763,58765],{"class":36,"line":37},[34,58760,51758],{"class":59},[34,58762,51762],{"class":51761},[34,58764,51765],{"class":2427},[34,58766,51768],{"class":59},[34,58768,58769,58771,58773,58775,58777,58779],{"class":36,"line":44},[34,58770,1515],{"class":59},[34,58772,51096],{"class":51761},[34,58774,51777],{"class":2427},[34,58776,447],{"class":59},[34,58778,51782],{"class":187},[34,58780,51768],{"class":59},[34,58782,58783],{"class":36,"line":50},[34,58784,2864],{"emptyLinePlaceholder":540},[34,58786,58787,58789,58791],{"class":36,"line":56},[34,58788,1515],{"class":59},[34,58790,51795],{"class":51761},[34,58792,51768],{"class":59},[34,58794,58795,58797,58799,58801,58803,58805],{"class":36,"line":107},[34,58796,52605],{"class":59},[34,58798,51805],{"class":51761},[34,58800,51808],{"class":2427},[34,58802,447],{"class":59},[34,58804,51813],{"class":187},[34,58806,51768],{"class":59},[34,58808,58809,58811,58813,58815,58817,58819,58821,58823,58825],{"class":36,"line":196},[34,58810,52605],{"class":59},[34,58812,51805],{"class":51761},[34,58814,15384],{"class":2427},[34,58816,447],{"class":59},[34,58818,51852],{"class":187},[34,58820,51832],{"class":2427},[34,58822,447],{"class":59},[34,58824,51859],{"class":187},[34,58826,51768],{"class":59},[34,58828,58829,58831,58833,58835,58837],{"class":36,"line":202},[34,58830,52605],{"class":59},[34,58832,51868],{"class":51761},[34,58834,51871],{"class":59},[34,58836,51868],{"class":51761},[34,58838,51768],{"class":59},[34,58840,58841,58843,58845],{"class":36,"line":207},[34,58842,52246],{"class":59},[34,58844,51795],{"class":51761},[34,58846,51768],{"class":59},[34,58848,58849],{"class":36,"line":222},[34,58850,2864],{"emptyLinePlaceholder":540},[34,58852,58853,58855,58857],{"class":36,"line":227},[34,58854,1515],{"class":59},[34,58856,52261],{"class":51761},[34,58858,51768],{"class":59},[34,58860,58861,58863,58865,58867,58869],{"class":36,"line":232},[34,58862,52605],{"class":59},[34,58864,54348],{"class":51761},[34,58866,54354],{"class":59},[34,58868,54348],{"class":51761},[34,58870,51768],{"class":59},[34,58872,58873,58875,58877],{"class":36,"line":238},[34,58874,52605],{"class":59},[34,58876,52274],{"class":51761},[34,58878,51768],{"class":59},[34,58880,58881,58883,58885,58887],{"class":36,"line":244},[34,58882,11685],{"class":112},[34,58884,2704],{"class":63},[34,58886,14028],{"class":112},[34,58888,58889],{"class":63}," 10\n",[34,58891,58892,58894,58896,58898,58900,58902,58904,58906],{"class":36,"line":250},[34,58893,11685],{"class":112},[34,58895,54852],{"class":63},[34,58897,14028],{"class":112},[34,58899,54857],{"class":59},[34,58901,54860],{"class":2427},[34,58903,617],{"class":59},[34,58905,58665],{"class":187},[34,58907,623],{"class":59},[34,58909,58910,58912,58914,58916,58918,58920,58922],{"class":36,"line":256},[34,58911,58672],{"class":59},[34,58913,58274],{"class":2427},[34,58915,617],{"class":59},[34,58917,58279],{"class":187},[34,58919,12899],{"class":59},[34,58921,54910],{"class":112},[34,58923,54913],{"class":59},[34,58925,58926,58928,58930,58932,58934,58936],{"class":36,"line":261},[34,58927,58689],{"class":112},[34,58929,2704],{"class":63},[34,58931,14028],{"class":112},[34,58933,58696],{"class":59},[34,58935,58321],{"class":2427},[34,58937,2440],{"class":59},[34,58939,58940,58942,58944],{"class":36,"line":267},[34,58941,58705],{"class":59},[34,58943,58708],{"class":2427},[34,58945,630],{"class":59},[34,58947,58948],{"class":36,"line":2138},[34,58949,33923],{"class":59},[34,58951,58952,58954,58956],{"class":36,"line":2143},[34,58953,52878],{"class":59},[34,58955,52274],{"class":51761},[34,58957,51768],{"class":59},[34,58959,58960,58962,58964],{"class":36,"line":2157},[34,58961,52246],{"class":59},[34,58963,52261],{"class":51761},[34,58965,51768],{"class":59},[34,58967,58968],{"class":36,"line":2162},[34,58969,2864],{"emptyLinePlaceholder":540},[34,58971,58972,58974,58976],{"class":36,"line":2191},[34,58973,52246],{"class":59},[34,58975,51096],{"class":51761},[34,58977,51768],{"class":59},[14,58979,58980],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[25,58982,58984],{"className":51094,"code":58983,"language":51096,"meta":22,"style":22},"\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",[31,58985,58986,58996,59010,59014,59022,59036,59056,59068,59076,59080,59088,59100,59108,59118,59136,59152,59165,59173,59177,59185,59193,59197],{"__ignoreMap":22},[34,58987,58988,58990,58992,58994],{"class":36,"line":37},[34,58989,51758],{"class":59},[34,58991,51762],{"class":51761},[34,58993,51765],{"class":2427},[34,58995,51768],{"class":59},[34,58997,58998,59000,59002,59004,59006,59008],{"class":36,"line":44},[34,58999,1515],{"class":59},[34,59001,51096],{"class":51761},[34,59003,51777],{"class":2427},[34,59005,447],{"class":59},[34,59007,51782],{"class":187},[34,59009,51768],{"class":59},[34,59011,59012],{"class":36,"line":50},[34,59013,2864],{"emptyLinePlaceholder":540},[34,59015,59016,59018,59020],{"class":36,"line":56},[34,59017,1515],{"class":59},[34,59019,51795],{"class":51761},[34,59021,51768],{"class":59},[34,59023,59024,59026,59028,59030,59032,59034],{"class":36,"line":107},[34,59025,52605],{"class":59},[34,59027,51805],{"class":51761},[34,59029,51808],{"class":2427},[34,59031,447],{"class":59},[34,59033,51813],{"class":187},[34,59035,51768],{"class":59},[34,59037,59038,59040,59042,59044,59046,59048,59050,59052,59054],{"class":36,"line":196},[34,59039,52605],{"class":59},[34,59041,51805],{"class":51761},[34,59043,15384],{"class":2427},[34,59045,447],{"class":59},[34,59047,51852],{"class":187},[34,59049,51832],{"class":2427},[34,59051,447],{"class":59},[34,59053,51859],{"class":187},[34,59055,51768],{"class":59},[34,59057,59058,59060,59062,59064,59066],{"class":36,"line":202},[34,59059,52605],{"class":59},[34,59061,51868],{"class":51761},[34,59063,51871],{"class":59},[34,59065,51868],{"class":51761},[34,59067,51768],{"class":59},[34,59069,59070,59072,59074],{"class":36,"line":207},[34,59071,52246],{"class":59},[34,59073,51795],{"class":51761},[34,59075,51768],{"class":59},[34,59077,59078],{"class":36,"line":222},[34,59079,2864],{"emptyLinePlaceholder":540},[34,59081,59082,59084,59086],{"class":36,"line":227},[34,59083,1515],{"class":59},[34,59085,52261],{"class":51761},[34,59087,51768],{"class":59},[34,59089,59090,59092,59094,59096,59098],{"class":36,"line":232},[34,59091,52605],{"class":59},[34,59093,54348],{"class":51761},[34,59095,54354],{"class":59},[34,59097,54348],{"class":51761},[34,59099,51768],{"class":59},[34,59101,59102,59104,59106],{"class":36,"line":238},[34,59103,52605],{"class":59},[34,59105,52274],{"class":51761},[34,59107,51768],{"class":59},[34,59109,59110,59112,59114,59116],{"class":36,"line":244},[34,59111,11685],{"class":112},[34,59113,2704],{"class":63},[34,59115,14028],{"class":112},[34,59117,58889],{"class":63},[34,59119,59120,59122,59124,59126,59128,59130,59132,59134],{"class":36,"line":250},[34,59121,11685],{"class":112},[34,59123,54852],{"class":63},[34,59125,14028],{"class":112},[34,59127,54857],{"class":59},[34,59129,54860],{"class":2427},[34,59131,617],{"class":59},[34,59133,58665],{"class":187},[34,59135,623],{"class":59},[34,59137,59138,59140,59142,59144,59146,59148,59150],{"class":36,"line":256},[34,59139,58672],{"class":59},[34,59141,58274],{"class":2427},[34,59143,617],{"class":59},[34,59145,58279],{"class":187},[34,59147,12899],{"class":59},[34,59149,54910],{"class":112},[34,59151,54913],{"class":59},[34,59153,59154,59157,59159,59161,59163],{"class":36,"line":261},[34,59155,59156],{"class":59},"      num ",[34,59158,447],{"class":112},[34,59160,58696],{"class":59},[34,59162,58321],{"class":2427},[34,59164,2440],{"class":59},[34,59166,59167,59169,59171],{"class":36,"line":267},[34,59168,58705],{"class":59},[34,59170,58708],{"class":2427},[34,59172,630],{"class":59},[34,59174,59175],{"class":36,"line":2138},[34,59176,33923],{"class":59},[34,59178,59179,59181,59183],{"class":36,"line":2143},[34,59180,52878],{"class":59},[34,59182,52274],{"class":51761},[34,59184,51768],{"class":59},[34,59186,59187,59189,59191],{"class":36,"line":2157},[34,59188,52246],{"class":59},[34,59190,52261],{"class":51761},[34,59192,51768],{"class":59},[34,59194,59195],{"class":36,"line":2162},[34,59196,2864],{"emptyLinePlaceholder":540},[34,59198,59199,59201,59203],{"class":36,"line":2191},[34,59200,52246],{"class":59},[34,59202,51096],{"class":51761},[34,59204,51768],{"class":59},[14,59206,59207],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[584,59209,59211],{"id":59210},"_324-事件监听版本","3.2.4 事件监听版本",[14,59213,59214],{},[20,59215],{"alt":22,"src":59216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59218,59219],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59221,59222],{},"这种方式会覆盖前边的事件监听:",[25,59224,59226],{"className":51094,"code":59225,"language":51096,"meta":22,"style":22},"\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",[31,59227,59228,59238,59252,59256,59264,59278,59298,59310,59318,59322,59330,59342,59350,59368,59382,59393,59397,59409,59419,59423,59431,59439,59443],{"__ignoreMap":22},[34,59229,59230,59232,59234,59236],{"class":36,"line":37},[34,59231,51758],{"class":59},[34,59233,51762],{"class":51761},[34,59235,51765],{"class":2427},[34,59237,51768],{"class":59},[34,59239,59240,59242,59244,59246,59248,59250],{"class":36,"line":44},[34,59241,1515],{"class":59},[34,59243,51096],{"class":51761},[34,59245,51777],{"class":2427},[34,59247,447],{"class":59},[34,59249,51782],{"class":187},[34,59251,51768],{"class":59},[34,59253,59254],{"class":36,"line":50},[34,59255,2864],{"emptyLinePlaceholder":540},[34,59257,59258,59260,59262],{"class":36,"line":56},[34,59259,1515],{"class":59},[34,59261,51795],{"class":51761},[34,59263,51768],{"class":59},[34,59265,59266,59268,59270,59272,59274,59276],{"class":36,"line":107},[34,59267,52605],{"class":59},[34,59269,51805],{"class":51761},[34,59271,51808],{"class":2427},[34,59273,447],{"class":59},[34,59275,51813],{"class":187},[34,59277,51768],{"class":59},[34,59279,59280,59282,59284,59286,59288,59290,59292,59294,59296],{"class":36,"line":196},[34,59281,52605],{"class":59},[34,59283,51805],{"class":51761},[34,59285,15384],{"class":2427},[34,59287,447],{"class":59},[34,59289,51852],{"class":187},[34,59291,51832],{"class":2427},[34,59293,447],{"class":59},[34,59295,51859],{"class":187},[34,59297,51768],{"class":59},[34,59299,59300,59302,59304,59306,59308],{"class":36,"line":202},[34,59301,52605],{"class":59},[34,59303,51868],{"class":51761},[34,59305,51871],{"class":59},[34,59307,51868],{"class":51761},[34,59309,51768],{"class":59},[34,59311,59312,59314,59316],{"class":36,"line":207},[34,59313,52246],{"class":59},[34,59315,51795],{"class":51761},[34,59317,51768],{"class":59},[34,59319,59320],{"class":36,"line":222},[34,59321,2864],{"emptyLinePlaceholder":540},[34,59323,59324,59326,59328],{"class":36,"line":227},[34,59325,1515],{"class":59},[34,59327,52261],{"class":51761},[34,59329,51768],{"class":59},[34,59331,59332,59334,59336,59338,59340],{"class":36,"line":232},[34,59333,52605],{"class":59},[34,59335,54348],{"class":51761},[34,59337,54354],{"class":59},[34,59339,54348],{"class":51761},[34,59341,51768],{"class":59},[34,59343,59344,59346,59348],{"class":36,"line":238},[34,59345,52605],{"class":59},[34,59347,52274],{"class":51761},[34,59349,51768],{"class":59},[34,59351,59352,59354,59356,59358,59360,59362,59364,59366],{"class":36,"line":244},[34,59353,11685],{"class":112},[34,59355,54852],{"class":63},[34,59357,14028],{"class":112},[34,59359,54857],{"class":59},[34,59361,54860],{"class":2427},[34,59363,617],{"class":59},[34,59365,58665],{"class":187},[34,59367,623],{"class":59},[34,59369,59370,59372,59375,59377,59380],{"class":36,"line":250},[34,59371,58672],{"class":59},[34,59373,59374],{"class":2427},"onclick",[34,59376,14028],{"class":112},[34,59378,59379],{"class":112}," function",[34,59381,54913],{"class":59},[34,59383,59384,59387,59389,59391],{"class":36,"line":256},[34,59385,59386],{"class":2427},"      alert",[34,59388,617],{"class":59},[34,59390,1079],{"class":63},[34,59392,623],{"class":59},[34,59394,59395],{"class":36,"line":261},[34,59396,2651],{"class":59},[34,59398,59399,59401,59403,59405,59407],{"class":36,"line":267},[34,59400,58672],{"class":59},[34,59402,59374],{"class":2427},[34,59404,14028],{"class":112},[34,59406,59379],{"class":112},[34,59408,54913],{"class":59},[34,59410,59411,59413,59415,59417],{"class":36,"line":2138},[34,59412,59386],{"class":2427},[34,59414,617],{"class":59},[34,59416,1356],{"class":63},[34,59418,623],{"class":59},[34,59420,59421],{"class":36,"line":2143},[34,59422,2651],{"class":59},[34,59424,59425,59427,59429],{"class":36,"line":2157},[34,59426,52878],{"class":59},[34,59428,52274],{"class":51761},[34,59430,51768],{"class":59},[34,59432,59433,59435,59437],{"class":36,"line":2162},[34,59434,52246],{"class":59},[34,59436,52261],{"class":51761},[34,59438,51768],{"class":59},[34,59440,59441],{"class":36,"line":2191},[34,59442,2864],{"emptyLinePlaceholder":540},[34,59444,59445,59447,59449],{"class":36,"line":2196},[34,59446,52246],{"class":59},[34,59448,51096],{"class":51761},[34,59450,51768],{"class":59},[14,59452,59453],{},"只要点击就输出结果为22,前边11被覆盖了",[25,59455,59457],{"className":51094,"code":59456,"language":51096,"meta":22,"style":22},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[31,59458,59459,59464,59469,59473,59478,59483],{"__ignoreMap":22},[34,59460,59461],{"class":36,"line":37},[34,59462,59463],{"class":59},"  btn.addEventListener('click', function () {\n",[34,59465,59466],{"class":36,"line":44},[34,59467,59468],{"class":59},"      alert(11)\n",[34,59470,59471],{"class":36,"line":50},[34,59472,33923],{"class":59},[34,59474,59475],{"class":36,"line":56},[34,59476,59477],{"class":59},"    btn.addEventListener('click', function () {\n",[34,59479,59480],{"class":36,"line":107},[34,59481,59482],{"class":59},"      alert(22)\n",[34,59484,59485],{"class":36,"line":196},[34,59486,33923],{"class":59},[14,59488,59489],{},"点击第一次输出11,第二次点击为22",[584,59491,59493],{"id":59492},"_325-事件类型","3.2.5 事件类型",[14,59495,59496],{},[20,59497],{"alt":22,"src":59498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22462,59500,59502],{"id":59501},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59504,59505],{},"补充知识:",[14,59507,59508],{},"轮播图自动播放模块,可以使用",[14,59510,59511],{},"let timerId = setInterval(function () {",[14,59513,59514],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59516,59517],{},"用js方法模拟进行点击事件,click必须加()",[14,59519,59520],{},"next.click()",[14,59522,59523],{},"}, 1000)",[14,59525,59526],{},[20,59527],{"alt":22,"src":59528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[25,59530,59532],{"className":53528,"code":59531,"language":53530,"meta":22,"style":22},"\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",[31,59533,59534,59538,59548,59562,59566,59574,59589,59609,59629,59642,59650,59655,59660,59664,59668,59673,59678,59683,59688,59692,59696,59701,59706,59711,59715,59719,59724,59728,59733,59738,59742,59746,59751,59756,59761,59766,59771,59775,59779,59784,59789,59794,59799,59804,59808,59812,59817,59822,59827,59832,59837,59842,59847,59852,59857,59862,59866,59870,59875,59880,59884,59888,59893,59898,59902,59907,59912,59916,59920,59925,59929,59934,59939,59943,59948,59952,59956,59961,59966,59971,59976,59981,59986,59991,59995,59999,60003,60008,60013,60018,60023,60027,60035,60043,60047,60055,60070,60084,60105,60113,60127,60140,60155,60174,60186,60198,60210,60222,60234,60246,60258,60266,60281,60305,60329,60337,60345,60353,60361,60366,60371,60376,60381,60386,60391,60396,60401,60406,60411,60415,60420,60425,60430,60435,60440,60445,60450,60455,60460,60464,60469,60474,60479,60484,60489,60494,60499,60504,60509,60514,60519,60524,60528,60532,60537,60542,60547,60551,60556,60561,60566,60571,60576,60580,60585,60589,60593,60597,60601,60605,60609,60614,60619,60624,60629,60634,60639,60644,60649,60654,60658,60662,60667,60672,60677,60682,60687,60691,60696,60701,60706,60711,60716,60721,60725,60729,60734,60738,60743,60747,60752,60757,60762,60767,60772,60777,60781,60789,60797,60801],{"__ignoreMap":22},[34,59535,59536],{"class":36,"line":37},[34,59537,2864],{"emptyLinePlaceholder":540},[34,59539,59540,59542,59544,59546],{"class":36,"line":44},[34,59541,51758],{"class":59},[34,59543,51762],{"class":112},[34,59545,51765],{"class":63},[34,59547,51768],{"class":59},[34,59549,59550,59552,59554,59556,59558,59560],{"class":36,"line":50},[34,59551,1515],{"class":59},[34,59553,51096],{"class":51761},[34,59555,51777],{"class":2427},[34,59557,447],{"class":59},[34,59559,51782],{"class":187},[34,59561,51768],{"class":59},[34,59563,59564],{"class":36,"line":56},[34,59565,2864],{"emptyLinePlaceholder":540},[34,59567,59568,59570,59572],{"class":36,"line":107},[34,59569,1515],{"class":59},[34,59571,51795],{"class":51761},[34,59573,51768],{"class":59},[34,59575,59576,59578,59580,59582,59584,59586],{"class":36,"line":196},[34,59577,52605],{"class":59},[34,59579,51805],{"class":51761},[34,59581,51808],{"class":2427},[34,59583,447],{"class":59},[34,59585,51813],{"class":187},[34,59587,59588],{"class":59}," \u002F>\n",[34,59590,59591,59593,59595,59597,59599,59601,59603,59605,59607],{"class":36,"line":202},[34,59592,52605],{"class":59},[34,59594,51805],{"class":51761},[34,59596,51824],{"class":2427},[34,59598,447],{"class":59},[34,59600,51829],{"class":187},[34,59602,51832],{"class":2427},[34,59604,447],{"class":59},[34,59606,51837],{"class":187},[34,59608,59588],{"class":59},[34,59610,59611,59613,59615,59617,59619,59621,59623,59625,59627],{"class":36,"line":207},[34,59612,52605],{"class":59},[34,59614,51805],{"class":51761},[34,59616,15384],{"class":2427},[34,59618,447],{"class":59},[34,59620,51852],{"class":187},[34,59622,51832],{"class":2427},[34,59624,447],{"class":59},[34,59626,51859],{"class":187},[34,59628,59588],{"class":59},[34,59630,59631,59633,59635,59638,59640],{"class":36,"line":222},[34,59632,52605],{"class":59},[34,59634,51868],{"class":51761},[34,59636,59637],{"class":59},">轮播图点击切换\u003C\u002F",[34,59639,51868],{"class":51761},[34,59641,51768],{"class":59},[34,59643,59644,59646,59648],{"class":36,"line":227},[34,59645,52605],{"class":59},[34,59647,532],{"class":51761},[34,59649,51768],{"class":59},[34,59651,59652],{"class":36,"line":232},[34,59653,59654],{"class":59},"    * {\n",[34,59656,59657],{"class":36,"line":238},[34,59658,59659],{"class":59},"      box-sizing: border-box;\n",[34,59661,59662],{"class":36,"line":244},[34,59663,2651],{"class":59},[34,59665,59666],{"class":36,"line":250},[34,59667,2864],{"emptyLinePlaceholder":540},[34,59669,59670],{"class":36,"line":256},[34,59671,59672],{"class":59},"    .slider {\n",[34,59674,59675],{"class":36,"line":261},[34,59676,59677],{"class":59},"      width: 560px;\n",[34,59679,59680],{"class":36,"line":267},[34,59681,59682],{"class":59},"      height: 400px;\n",[34,59684,59685],{"class":36,"line":2138},[34,59686,59687],{"class":59},"      overflow: hidden;\n",[34,59689,59690],{"class":36,"line":2143},[34,59691,2651],{"class":59},[34,59693,59694],{"class":36,"line":2157},[34,59695,2864],{"emptyLinePlaceholder":540},[34,59697,59698],{"class":36,"line":2162},[34,59699,59700],{"class":59},"    .slider-wrapper {\n",[34,59702,59703],{"class":36,"line":2191},[34,59704,59705],{"class":59},"      width: 100%;\n",[34,59707,59708],{"class":36,"line":2196},[34,59709,59710],{"class":59},"      height: 320px;\n",[34,59712,59713],{"class":36,"line":2213},[34,59714,2651],{"class":59},[34,59716,59717],{"class":36,"line":2218},[34,59718,2864],{"emptyLinePlaceholder":540},[34,59720,59721],{"class":36,"line":2223},[34,59722,59723],{"class":59},"    .slider-wrapper img {\n",[34,59725,59726],{"class":36,"line":2228},[34,59727,59705],{"class":59},[34,59729,59730],{"class":36,"line":2242},[34,59731,59732],{"class":59},"      height: 100%;\n",[34,59734,59735],{"class":36,"line":2247},[34,59736,59737],{"class":59},"      display: block;\n",[34,59739,59740],{"class":36,"line":3041},[34,59741,2651],{"class":59},[34,59743,59744],{"class":36,"line":3055},[34,59745,2864],{"emptyLinePlaceholder":540},[34,59747,59748],{"class":36,"line":3063},[34,59749,59750],{"class":59},"    .slider-footer {\n",[34,59752,59753],{"class":36,"line":3068},[34,59754,59755],{"class":59},"      height: 80px;\n",[34,59757,59758],{"class":36,"line":3074},[34,59759,59760],{"class":59},"      background-color: rgb(100, 67, 68);\n",[34,59762,59763],{"class":36,"line":3080},[34,59764,59765],{"class":59},"      padding: 12px 12px 0 12px;\n",[34,59767,59768],{"class":36,"line":3085},[34,59769,59770],{"class":59},"      position: relative;\n",[34,59772,59773],{"class":36,"line":8412},[34,59774,2651],{"class":59},[34,59776,59777],{"class":36,"line":8436},[34,59778,2864],{"emptyLinePlaceholder":540},[34,59780,59781],{"class":36,"line":8441},[34,59782,59783],{"class":59},"    .slider-footer .toggle {\n",[34,59785,59786],{"class":36,"line":8447},[34,59787,59788],{"class":59},"      position: absolute;\n",[34,59790,59791],{"class":36,"line":8474},[34,59792,59793],{"class":59},"      right: 0;\n",[34,59795,59796],{"class":36,"line":8479},[34,59797,59798],{"class":59},"      top: 12px;\n",[34,59800,59801],{"class":36,"line":8485},[34,59802,59803],{"class":59},"      display: flex;\n",[34,59805,59806],{"class":36,"line":8497},[34,59807,2651],{"class":59},[34,59809,59810],{"class":36,"line":8509},[34,59811,2864],{"emptyLinePlaceholder":540},[34,59813,59814],{"class":36,"line":8521},[34,59815,59816],{"class":59},"    .slider-footer .toggle button {\n",[34,59818,59819],{"class":36,"line":10180},[34,59820,59821],{"class":59},"      margin-right: 12px;\n",[34,59823,59824],{"class":36,"line":10205},[34,59825,59826],{"class":59},"      width: 28px;\n",[34,59828,59829],{"class":36,"line":10228},[34,59830,59831],{"class":59},"      height: 28px;\n",[34,59833,59834],{"class":36,"line":10252},[34,59835,59836],{"class":59},"      appearance: none;\n",[34,59838,59839],{"class":36,"line":10257},[34,59840,59841],{"class":59},"      border: none;\n",[34,59843,59844],{"class":36,"line":10262},[34,59845,59846],{"class":59},"      background: rgba(255, 255, 255, 0.1);\n",[34,59848,59849],{"class":36,"line":10267},[34,59850,59851],{"class":59},"      color: #fff;\n",[34,59853,59854],{"class":36,"line":10276},[34,59855,59856],{"class":59},"      border-radius: 4px;\n",[34,59858,59859],{"class":36,"line":10281},[34,59860,59861],{"class":59},"      cursor: pointer;\n",[34,59863,59864],{"class":36,"line":10287},[34,59865,2651],{"class":59},[34,59867,59868],{"class":36,"line":10308},[34,59869,2864],{"emptyLinePlaceholder":540},[34,59871,59872],{"class":36,"line":10314},[34,59873,59874],{"class":59},"    .slider-footer .toggle button:hover {\n",[34,59876,59877],{"class":36,"line":10328},[34,59878,59879],{"class":59},"      background: rgba(255, 255, 255, 0.2);\n",[34,59881,59882],{"class":36,"line":10334},[34,59883,2651],{"class":59},[34,59885,59886],{"class":36,"line":10361},[34,59887,2864],{"emptyLinePlaceholder":540},[34,59889,59890],{"class":36,"line":10370},[34,59891,59892],{"class":59},"    .slider-footer p {\n",[34,59894,59895],{"class":36,"line":10376},[34,59896,59897],{"class":59},"      margin: 0;\n",[34,59899,59900],{"class":36,"line":10384},[34,59901,59851],{"class":59},[34,59903,59904],{"class":36,"line":10389},[34,59905,59906],{"class":59},"      font-size: 18px;\n",[34,59908,59909],{"class":36,"line":17068},[34,59910,59911],{"class":59},"      margin-bottom: 10px;\n",[34,59913,59914],{"class":36,"line":17074},[34,59915,2651],{"class":59},[34,59917,59918],{"class":36,"line":17097},[34,59919,2864],{"emptyLinePlaceholder":540},[34,59921,59922],{"class":36,"line":17103},[34,59923,59924],{"class":59},"    .slider-indicator {\n",[34,59926,59927],{"class":36,"line":17126},[34,59928,59897],{"class":59},[34,59930,59931],{"class":36,"line":17140},[34,59932,59933],{"class":59},"      padding: 0;\n",[34,59935,59936],{"class":36,"line":17160},[34,59937,59938],{"class":59},"      list-style: none;\n",[34,59940,59941],{"class":36,"line":17166},[34,59942,59803],{"class":59},[34,59944,59945],{"class":36,"line":17177},[34,59946,59947],{"class":59},"      align-items: center;\n",[34,59949,59950],{"class":36,"line":17200},[34,59951,2651],{"class":59},[34,59953,59954],{"class":36,"line":17222},[34,59955,2864],{"emptyLinePlaceholder":540},[34,59957,59958],{"class":36,"line":17227},[34,59959,59960],{"class":59},"    .slider-indicator li {\n",[34,59962,59963],{"class":36,"line":17233},[34,59964,59965],{"class":59},"      width: 8px;\n",[34,59967,59968],{"class":36,"line":17247},[34,59969,59970],{"class":59},"      height: 8px;\n",[34,59972,59973],{"class":36,"line":17260},[34,59974,59975],{"class":59},"      margin: 4px;\n",[34,59977,59978],{"class":36,"line":17265},[34,59979,59980],{"class":59},"      border-radius: 50%;\n",[34,59982,59983],{"class":36,"line":17279},[34,59984,59985],{"class":59},"      background: #fff;\n",[34,59987,59988],{"class":36,"line":17284},[34,59989,59990],{"class":59},"      opacity: 0.4;\n",[34,59992,59993],{"class":36,"line":17290},[34,59994,59861],{"class":59},[34,59996,59997],{"class":36,"line":17295},[34,59998,2651],{"class":59},[34,60000,60001],{"class":36,"line":17309},[34,60002,2864],{"emptyLinePlaceholder":540},[34,60004,60005],{"class":36,"line":17314},[34,60006,60007],{"class":59},"    .slider-indicator li.active {\n",[34,60009,60010],{"class":36,"line":17319},[34,60011,60012],{"class":59},"      width: 12px;\n",[34,60014,60015],{"class":36,"line":17333},[34,60016,60017],{"class":59},"      height: 12px;\n",[34,60019,60020],{"class":36,"line":17345},[34,60021,60022],{"class":59},"      opacity: 1;\n",[34,60024,60025],{"class":36,"line":17350},[34,60026,2651],{"class":59},[34,60028,60029,60031,60033],{"class":36,"line":17363},[34,60030,52878],{"class":59},[34,60032,532],{"class":51761},[34,60034,51768],{"class":59},[34,60036,60037,60039,60041],{"class":36,"line":17368},[34,60038,52246],{"class":59},[34,60040,51795],{"class":51761},[34,60042,51768],{"class":59},[34,60044,60045],{"class":36,"line":17373},[34,60046,2864],{"emptyLinePlaceholder":540},[34,60048,60049,60051,60053],{"class":36,"line":17378},[34,60050,1515],{"class":59},[34,60052,52261],{"class":51761},[34,60054,51768],{"class":59},[34,60056,60057,60059,60061,60063,60065,60068],{"class":36,"line":17391},[34,60058,52605],{"class":59},[34,60060,52072],{"class":51761},[34,60062,53947],{"class":2427},[34,60064,447],{"class":59},[34,60066,60067],{"class":187},"\"slider\"",[34,60069,51768],{"class":59},[34,60071,60072,60074,60076,60078,60080,60082],{"class":36,"line":17396},[34,60073,51802],{"class":59},[34,60075,52072],{"class":51761},[34,60077,53947],{"class":2427},[34,60079,447],{"class":59},[34,60081,55688],{"class":187},[34,60083,51768],{"class":59},[34,60085,60086,60088,60090,60092,60094,60097,60099,60101,60103],{"class":36,"line":33096},[34,60087,55695],{"class":59},[34,60089,20],{"class":51761},[34,60091,55700],{"class":2427},[34,60093,447],{"class":59},[34,60095,60096],{"class":187},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[34,60098,55708],{"class":2427},[34,60100,447],{"class":59},[34,60102,8116],{"class":187},[34,60104,59588],{"class":59},[34,60106,60107,60109,60111],{"class":36,"line":33102},[34,60108,52237],{"class":59},[34,60110,52072],{"class":51761},[34,60112,51768],{"class":59},[34,60114,60115,60117,60119,60121,60123,60125],{"class":36,"line":33108},[34,60116,51802],{"class":59},[34,60118,52072],{"class":51761},[34,60120,53947],{"class":2427},[34,60122,447],{"class":59},[34,60124,55735],{"class":187},[34,60126,51768],{"class":59},[34,60128,60129,60131,60133,60136,60138],{"class":36,"line":33114},[34,60130,55695],{"class":59},[34,60132,14],{"class":51761},[34,60134,60135],{"class":59},">对人类来说会不会太超前了？\u003C\u002F",[34,60137,14],{"class":51761},[34,60139,51768],{"class":59},[34,60141,60142,60144,60146,60148,60150,60153],{"class":36,"line":33120},[34,60143,55695],{"class":59},[34,60145,1611],{"class":51761},[34,60147,53947],{"class":2427},[34,60149,447],{"class":59},[34,60151,60152],{"class":187},"\"slider-indicator\"",[34,60154,51768],{"class":59},[34,60156,60157,60159,60161,60163,60165,60168,60170,60172],{"class":36,"line":33131},[34,60158,55763],{"class":59},[34,60160,570],{"class":51761},[34,60162,53947],{"class":2427},[34,60164,447],{"class":59},[34,60166,60167],{"class":187},"\"active\"",[34,60169,55775],{"class":59},[34,60171,570],{"class":51761},[34,60173,51768],{"class":59},[34,60175,60176,60178,60180,60182,60184],{"class":36,"line":33137},[34,60177,55763],{"class":59},[34,60179,570],{"class":51761},[34,60181,55775],{"class":59},[34,60183,570],{"class":51761},[34,60185,51768],{"class":59},[34,60187,60188,60190,60192,60194,60196],{"class":36,"line":33157},[34,60189,55763],{"class":59},[34,60191,570],{"class":51761},[34,60193,55775],{"class":59},[34,60195,570],{"class":51761},[34,60197,51768],{"class":59},[34,60199,60200,60202,60204,60206,60208],{"class":36,"line":33163},[34,60201,55763],{"class":59},[34,60203,570],{"class":51761},[34,60205,55775],{"class":59},[34,60207,570],{"class":51761},[34,60209,51768],{"class":59},[34,60211,60212,60214,60216,60218,60220],{"class":36,"line":33174},[34,60213,55763],{"class":59},[34,60215,570],{"class":51761},[34,60217,55775],{"class":59},[34,60219,570],{"class":51761},[34,60221,51768],{"class":59},[34,60223,60224,60226,60228,60230,60232],{"class":36,"line":33180},[34,60225,55763],{"class":59},[34,60227,570],{"class":51761},[34,60229,55775],{"class":59},[34,60231,570],{"class":51761},[34,60233,51768],{"class":59},[34,60235,60236,60238,60240,60242,60244],{"class":36,"line":33186},[34,60237,55763],{"class":59},[34,60239,570],{"class":51761},[34,60241,55775],{"class":59},[34,60243,570],{"class":51761},[34,60245,51768],{"class":59},[34,60247,60248,60250,60252,60254,60256],{"class":36,"line":33192},[34,60249,55763],{"class":59},[34,60251,570],{"class":51761},[34,60253,55775],{"class":59},[34,60255,570],{"class":51761},[34,60257,51768],{"class":59},[34,60259,60260,60262,60264],{"class":36,"line":33198},[34,60261,55868],{"class":59},[34,60263,1611],{"class":51761},[34,60265,51768],{"class":59},[34,60267,60268,60270,60272,60274,60276,60279],{"class":36,"line":33204},[34,60269,55695],{"class":59},[34,60271,52072],{"class":51761},[34,60273,53947],{"class":2427},[34,60275,447],{"class":59},[34,60277,60278],{"class":187},"\"toggle\"",[34,60280,51768],{"class":59},[34,60282,60283,60285,60287,60289,60291,60294,60296,60299,60301,60303],{"class":36,"line":33210},[34,60284,55763],{"class":59},[34,60286,54348],{"class":51761},[34,60288,53947],{"class":2427},[34,60290,447],{"class":59},[34,60292,60293],{"class":187},"\"prev\"",[34,60295,1564],{"class":59},[34,60297,60298],{"class":63},"&lt;",[34,60300,52246],{"class":59},[34,60302,54348],{"class":51761},[34,60304,51768],{"class":59},[34,60306,60307,60309,60311,60313,60315,60318,60320,60323,60325,60327],{"class":36,"line":33216},[34,60308,55763],{"class":59},[34,60310,54348],{"class":51761},[34,60312,53947],{"class":2427},[34,60314,447],{"class":59},[34,60316,60317],{"class":187},"\"next\"",[34,60319,1564],{"class":59},[34,60321,60322],{"class":63},"&gt;",[34,60324,52246],{"class":59},[34,60326,54348],{"class":51761},[34,60328,51768],{"class":59},[34,60330,60331,60333,60335],{"class":36,"line":33236},[34,60332,55868],{"class":59},[34,60334,52072],{"class":51761},[34,60336,51768],{"class":59},[34,60338,60339,60341,60343],{"class":36,"line":33242},[34,60340,52237],{"class":59},[34,60342,52072],{"class":51761},[34,60344,51768],{"class":59},[34,60346,60347,60349,60351],{"class":36,"line":33258},[34,60348,52878],{"class":59},[34,60350,52072],{"class":51761},[34,60352,51768],{"class":59},[34,60354,60355,60357,60359],{"class":36,"line":33264},[34,60356,52605],{"class":59},[34,60358,52274],{"class":51761},[34,60360,51768],{"class":59},[34,60362,60363],{"class":36,"line":33278},[34,60364,60365],{"class":59},"    \u002F\u002F 1. 初始数据\n",[34,60367,60368],{"class":36,"line":33284},[34,60369,60370],{"class":59},"    const data = [\n",[34,60372,60373],{"class":36,"line":33299},[34,60374,60375],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[34,60377,60378],{"class":36,"line":33305},[34,60379,60380],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[34,60382,60383],{"class":36,"line":33314},[34,60384,60385],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[34,60387,60388],{"class":36,"line":33320},[34,60389,60390],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[34,60392,60393],{"class":36,"line":33329},[34,60394,60395],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[34,60397,60398],{"class":36,"line":33335},[34,60399,60400],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[34,60402,60403],{"class":36,"line":33341},[34,60404,60405],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[34,60407,60408],{"class":36,"line":33350},[34,60409,60410],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[34,60412,60413],{"class":36,"line":33356},[34,60414,53570],{"class":59},[34,60416,60417],{"class":36,"line":33367},[34,60418,60419],{"class":59},"    \u002F\u002F 获取元素\n",[34,60421,60422],{"class":36,"line":33373},[34,60423,60424],{"class":59},"    const img = document.querySelector('.slider-wrapper img')\n",[34,60426,60427],{"class":36,"line":33392},[34,60428,60429],{"class":59},"    const p = document.querySelector('.slider-footer p')\n",[34,60431,60432],{"class":36,"line":33398},[34,60433,60434],{"class":59},"    const footer = document.querySelector('.slider-footer')\n",[34,60436,60437],{"class":36,"line":33409},[34,60438,60439],{"class":59},"    \u002F\u002F 1. 右按钮业务\n",[34,60441,60442],{"class":36,"line":33415},[34,60443,60444],{"class":59},"    \u002F\u002F 1.1 获取右侧按钮 \n",[34,60446,60447],{"class":36,"line":33435},[34,60448,60449],{"class":59},"    const next = document.querySelector('.next')\n",[34,60451,60452],{"class":36,"line":33451},[34,60453,60454],{"class":59},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[34,60456,60457],{"class":36,"line":33457},[34,60458,60459],{"class":59},"    \u002F\u002F 1.2 注册点击事件\n",[34,60461,60462],{"class":36,"line":33471},[34,60463,2864],{"emptyLinePlaceholder":540},[34,60465,60466],{"class":36,"line":33477},[34,60467,60468],{"class":59},"    next.addEventListener('click', function () {\n",[34,60470,60471],{"class":36,"line":33483},[34,60472,60473],{"class":59},"      \u002F\u002F console.log(11)\n",[34,60475,60476],{"class":36,"line":33494},[34,60477,60478],{"class":59},"      i++\n",[34,60480,60481],{"class":36,"line":33500},[34,60482,60483],{"class":59},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[34,60485,60486],{"class":36,"line":33506},[34,60487,60488],{"class":59},"      \u002F\u002F if (i >= 8) {\n",[34,60490,60491],{"class":36,"line":33516},[34,60492,60493],{"class":59},"      \u002F\u002F   i = 0\n",[34,60495,60496],{"class":36,"line":33522},[34,60497,60498],{"class":59},"      \u002F\u002F }\n",[34,60500,60501],{"class":36,"line":33533},[34,60502,60503],{"class":59},"      i = i >= data.length ? 0 : i\n",[34,60505,60506],{"class":36,"line":33539},[34,60507,60508],{"class":59},"      \u002F\u002F 1.3 得到对应的对象\n",[34,60510,60511],{"class":36,"line":33549},[34,60512,60513],{"class":59},"      \u002F\u002F console.log(data[i])\n",[34,60515,60516],{"class":36,"line":33554},[34,60517,60518],{"class":59},"      \u002F\u002F 调用函数\n",[34,60520,60521],{"class":36,"line":33560},[34,60522,60523],{"class":59},"      toggle()\n",[34,60525,60526],{"class":36,"line":33609},[34,60527,33923],{"class":59},[34,60529,60530],{"class":36,"line":33656},[34,60531,2864],{"emptyLinePlaceholder":540},[34,60533,60534],{"class":36,"line":33661},[34,60535,60536],{"class":59},"    \u002F\u002F 2. 左侧按钮业务\n",[34,60538,60539],{"class":36,"line":33667},[34,60540,60541],{"class":59},"    \u002F\u002F 2.1 获取左侧按钮 \n",[34,60543,60544],{"class":36,"line":33686},[34,60545,60546],{"class":59},"    const prev = document.querySelector('.prev')\n",[34,60548,60549],{"class":36,"line":33692},[34,60550,60459],{"class":59},[34,60552,60553],{"class":36,"line":33711},[34,60554,60555],{"class":59},"    prev.addEventListener('click', function () {\n",[34,60557,60558],{"class":36,"line":33717},[34,60559,60560],{"class":59},"      i--\n",[34,60562,60563],{"class":36,"line":33723},[34,60564,60565],{"class":59},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[34,60567,60568],{"class":36,"line":33733},[34,60569,60570],{"class":59},"      \u002F\u002F if (i \u003C 0) {\n",[34,60572,60573],{"class":36,"line":33738},[34,60574,60575],{"class":59},"      \u002F\u002F   i = 7\n",[34,60577,60578],{"class":36,"line":33744},[34,60579,60498],{"class":59},[34,60581,60582],{"class":36,"line":33760},[34,60583,60584],{"class":59},"      i = i \u003C 0 ? data.length - 1 : i\n",[34,60586,60587],{"class":36,"line":33805},[34,60588,60508],{"class":59},[34,60590,60591],{"class":36,"line":33811},[34,60592,60513],{"class":59},[34,60594,60595],{"class":36,"line":33817},[34,60596,60518],{"class":59},[34,60598,60599],{"class":36,"line":33823},[34,60600,60523],{"class":59},[34,60602,60603],{"class":36,"line":33834},[34,60604,33923],{"class":59},[34,60606,60607],{"class":36,"line":33840},[34,60608,2864],{"emptyLinePlaceholder":540},[34,60610,60611],{"class":36,"line":33846},[34,60612,60613],{"class":59},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[34,60615,60616],{"class":36,"line":33852},[34,60617,60618],{"class":59},"    function toggle() {\n",[34,60620,60621],{"class":36,"line":33870},[34,60622,60623],{"class":59},"      \u002F\u002F 1.4 渲染对应的数据\n",[34,60625,60626],{"class":36,"line":33884},[34,60627,60628],{"class":59},"      img.src = data[i].url\n",[34,60630,60631],{"class":36,"line":33893},[34,60632,60633],{"class":59},"      p.innerHTML = data[i].title\n",[34,60635,60636],{"class":36,"line":33902},[34,60637,60638],{"class":59},"      footer.style.backgroundColor = data[i].color\n",[34,60640,60641],{"class":36,"line":33911},[34,60642,60643],{"class":59},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[34,60645,60646],{"class":36,"line":33920},[34,60647,60648],{"class":59},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[34,60650,60651],{"class":36,"line":33926},[34,60652,60653],{"class":59},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[34,60655,60656],{"class":36,"line":33932},[34,60657,2651],{"class":59},[34,60659,60660],{"class":36,"line":33940},[34,60661,2864],{"emptyLinePlaceholder":540},[34,60663,60664],{"class":36,"line":33945},[34,60665,60666],{"class":59},"    \u002F\u002F 3. 自动播放模块\n",[34,60668,60669],{"class":36,"line":33951},[34,60670,60671],{"class":59},"    let timerId = setInterval(function () {\n",[34,60673,60674],{"class":36,"line":33962},[34,60675,60676],{"class":59},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[34,60678,60679],{"class":36,"line":33968},[34,60680,60681],{"class":59},"      next.click()\n",[34,60683,60684],{"class":36,"line":33988},[34,60685,60686],{"class":59},"    }, 1000)\n",[34,60688,60689],{"class":36,"line":33994},[34,60690,2864],{"emptyLinePlaceholder":540},[34,60692,60693],{"class":36,"line":34000},[34,60694,60695],{"class":59},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[34,60697,60698],{"class":36,"line":34006},[34,60699,60700],{"class":59},"    const slider = document.querySelector('.slider')\n",[34,60702,60703],{"class":36,"line":34023},[34,60704,60705],{"class":59},"    \u002F\u002F 注册事件\n",[34,60707,60708],{"class":36,"line":34029},[34,60709,60710],{"class":59},"    slider.addEventListener('mouseenter', function () {\n",[34,60712,60713],{"class":36,"line":34035},[34,60714,60715],{"class":59},"      \u002F\u002F 停止定时器\n",[34,60717,60718],{"class":36,"line":34041},[34,60719,60720],{"class":59},"      clearInterval(timerId)\n",[34,60722,60723],{"class":36,"line":34047},[34,60724,33923],{"class":59},[34,60726,60727],{"class":36,"line":34053},[34,60728,2864],{"emptyLinePlaceholder":540},[34,60730,60731],{"class":36,"line":34080},[34,60732,60733],{"class":59},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[34,60735,60736],{"class":36,"line":34104},[34,60737,60705],{"class":59},[34,60739,60740],{"class":36,"line":34110},[34,60741,60742],{"class":59},"    slider.addEventListener('mouseleave', function () {\n",[34,60744,60745],{"class":36,"line":34116},[34,60746,60715],{"class":59},[34,60748,60749],{"class":36,"line":34122},[34,60750,60751],{"class":59},"      if (timerId) clearInterval(timerId)\n",[34,60753,60754],{"class":36,"line":34133},[34,60755,60756],{"class":59},"      \u002F\u002F 开启定时器\n",[34,60758,60759],{"class":36,"line":34144},[34,60760,60761],{"class":59},"      timerId = setInterval(function () {\n",[34,60763,60764],{"class":36,"line":34150},[34,60765,60766],{"class":59},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[34,60768,60769],{"class":36,"line":34167},[34,60770,60771],{"class":59},"        next.click()\n",[34,60773,60774],{"class":36,"line":34190},[34,60775,60776],{"class":59},"      }, 1000)\n",[34,60778,60779],{"class":36,"line":34213},[34,60780,33923],{"class":59},[34,60782,60783,60785,60787],{"class":36,"line":34219},[34,60784,52878],{"class":59},[34,60786,52274],{"class":51761},[34,60788,51768],{"class":59},[34,60790,60791,60793,60795],{"class":36,"line":34224},[34,60792,52246],{"class":59},[34,60794,52261],{"class":51761},[34,60796,51768],{"class":59},[34,60798,60799],{"class":36,"line":34233},[34,60800,2864],{"emptyLinePlaceholder":540},[34,60802,60803,60805,60807],{"class":36,"line":34243},[34,60804,52246],{"class":59},[34,60806,51096],{"class":51761},[34,60808,51768],{"class":59},[22462,60810,60812],{"id":60811},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60814,60815],{},"小米搜索框案例：",[25,60817,60819],{"className":51094,"code":60818,"language":51096,"meta":22,"style":22},"\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",[31,60820,60821,60831,60845,60849,60857,60871,60891,60911,60923,60931,60937,60947,60957,60969,60973,60977,60984,60988,60999,61003,61007,61014,61025,61038,61052,61056,61060,61069,61081,61093,61107,61120,61133,61151,61162,61166,61170,61179,61196,61200,61204,61211,61221,61231,61242,61255,61267,61283,61294,61306,61310,61314,61322,61333,61350,61362,61374,61385,61389,61393,61404,61415,61419,61427,61431,61439,61443,61451,61466,61489,61504,61535,61562,61589,61616,61643,61670,61697,61706,61714,61722,61727,61747,61767,61772,61777,61795,61800,61810,61815,61829,61834,61839,61856,61865,61877,61881,61889,61897,61901],{"__ignoreMap":22},[34,60822,60823,60825,60827,60829],{"class":36,"line":37},[34,60824,51758],{"class":59},[34,60826,51762],{"class":51761},[34,60828,51765],{"class":2427},[34,60830,51768],{"class":59},[34,60832,60833,60835,60837,60839,60841,60843],{"class":36,"line":44},[34,60834,1515],{"class":59},[34,60836,51096],{"class":51761},[34,60838,51777],{"class":2427},[34,60840,447],{"class":59},[34,60842,51782],{"class":187},[34,60844,51768],{"class":59},[34,60846,60847],{"class":36,"line":50},[34,60848,2864],{"emptyLinePlaceholder":540},[34,60850,60851,60853,60855],{"class":36,"line":56},[34,60852,1515],{"class":59},[34,60854,51795],{"class":51761},[34,60856,51768],{"class":59},[34,60858,60859,60861,60863,60865,60867,60869],{"class":36,"line":107},[34,60860,51802],{"class":59},[34,60862,51805],{"class":51761},[34,60864,51808],{"class":2427},[34,60866,447],{"class":59},[34,60868,51813],{"class":187},[34,60870,51768],{"class":59},[34,60872,60873,60875,60877,60879,60881,60883,60885,60887,60889],{"class":36,"line":196},[34,60874,51802],{"class":59},[34,60876,51805],{"class":51761},[34,60878,51824],{"class":2427},[34,60880,447],{"class":59},[34,60882,51829],{"class":187},[34,60884,51832],{"class":2427},[34,60886,447],{"class":59},[34,60888,51837],{"class":187},[34,60890,51768],{"class":59},[34,60892,60893,60895,60897,60899,60901,60903,60905,60907,60909],{"class":36,"line":202},[34,60894,51802],{"class":59},[34,60896,51805],{"class":51761},[34,60898,15384],{"class":2427},[34,60900,447],{"class":59},[34,60902,51852],{"class":187},[34,60904,51832],{"class":2427},[34,60906,447],{"class":59},[34,60908,51859],{"class":187},[34,60910,51768],{"class":59},[34,60912,60913,60915,60917,60919,60921],{"class":36,"line":207},[34,60914,51802],{"class":59},[34,60916,51868],{"class":51761},[34,60918,51871],{"class":59},[34,60920,51868],{"class":51761},[34,60922,51768],{"class":59},[34,60924,60925,60927,60929],{"class":36,"line":222},[34,60926,51802],{"class":59},[34,60928,532],{"class":51761},[34,60930,51768],{"class":59},[34,60932,60933,60935],{"class":36,"line":227},[34,60934,51888],{"class":51761},[34,60936,16036],{"class":59},[34,60938,60939,60941,60943,60945],{"class":36,"line":232},[34,60940,51895],{"class":63},[34,60942,51898],{"class":59},[34,60944,319],{"class":63},[34,60946,1765],{"class":59},[34,60948,60949,60951,60953,60955],{"class":36,"line":238},[34,60950,51907],{"class":63},[34,60952,51898],{"class":59},[34,60954,319],{"class":63},[34,60956,1765],{"class":59},[34,60958,60959,60962,60964,60967],{"class":36,"line":244},[34,60960,60961],{"class":63},"            box-sizing",[34,60963,51898],{"class":59},[34,60965,60966],{"class":63},"border-box",[34,60968,1765],{"class":59},[34,60970,60971],{"class":36,"line":250},[34,60972,2993],{"class":59},[34,60974,60975],{"class":36,"line":256},[34,60976,2864],{"emptyLinePlaceholder":540},[34,60978,60979,60982],{"class":36,"line":261},[34,60980,60981],{"class":51761},"        ul",[34,60983,16036],{"class":59},[34,60985,60986],{"class":36,"line":267},[34,60987,2864],{"emptyLinePlaceholder":540},[34,60989,60990,60993,60995,60997],{"class":36,"line":2138},[34,60991,60992],{"class":63},"            list-style",[34,60994,51898],{"class":59},[34,60996,55198],{"class":63},[34,60998,1765],{"class":59},[34,61000,61001],{"class":36,"line":2143},[34,61002,2993],{"class":59},[34,61004,61005],{"class":36,"line":2157},[34,61006,2864],{"emptyLinePlaceholder":540},[34,61008,61009,61012],{"class":36,"line":2162},[34,61010,61011],{"class":2427},"        .mi",[34,61013,16036],{"class":59},[34,61015,61016,61019,61021,61023],{"class":36,"line":2191},[34,61017,61018],{"class":63},"            position",[34,61020,51898],{"class":59},[34,61022,55225],{"class":63},[34,61024,1765],{"class":59},[34,61026,61027,61029,61031,61034,61036],{"class":36,"line":2196},[34,61028,51945],{"class":63},[34,61030,51898],{"class":59},[34,61032,61033],{"class":63},"223",[34,61035,51953],{"class":112},[34,61037,1765],{"class":59},[34,61039,61040,61042,61044,61046,61048,61050],{"class":36,"line":2213},[34,61041,51895],{"class":63},[34,61043,51898],{"class":59},[34,61045,919],{"class":63},[34,61047,51953],{"class":112},[34,61049,52017],{"class":63},[34,61051,1765],{"class":59},[34,61053,61054],{"class":36,"line":2218},[34,61055,2993],{"class":59},[34,61057,61058],{"class":36,"line":2223},[34,61059,2864],{"emptyLinePlaceholder":540},[34,61061,61062,61064,61067],{"class":36,"line":2228},[34,61063,61011],{"class":2427},[34,61065,61066],{"class":51761}," input",[34,61068,16036],{"class":59},[34,61070,61071,61073,61075,61077,61079],{"class":36,"line":2242},[34,61072,51945],{"class":63},[34,61074,51898],{"class":59},[34,61076,61033],{"class":63},[34,61078,51953],{"class":112},[34,61080,1765],{"class":59},[34,61082,61083,61085,61087,61089,61091],{"class":36,"line":2247},[34,61084,51960],{"class":63},[34,61086,51898],{"class":59},[34,61088,1213],{"class":63},[34,61090,51953],{"class":112},[34,61092,1765],{"class":59},[34,61094,61095,61097,61099,61101,61103,61105],{"class":36,"line":3041},[34,61096,51907],{"class":63},[34,61098,51898],{"class":59},[34,61100,319],{"class":63},[34,61102,2502],{"class":63},[34,61104,51953],{"class":112},[34,61106,1765],{"class":59},[34,61108,61109,61112,61114,61116,61118],{"class":36,"line":3055},[34,61110,61111],{"class":63},"            font-size",[34,61113,51898],{"class":59},[34,61115,1155],{"class":63},[34,61117,51953],{"class":112},[34,61119,1765],{"class":59},[34,61121,61122,61125,61127,61129,61131],{"class":36,"line":3063},[34,61123,61124],{"class":63},"            line-height",[34,61126,51898],{"class":59},[34,61128,1213],{"class":63},[34,61130,51953],{"class":112},[34,61132,1765],{"class":59},[34,61134,61135,61138,61140,61142,61144,61146,61149],{"class":36,"line":3068},[34,61136,61137],{"class":63},"            border",[34,61139,51898],{"class":59},[34,61141,64],{"class":63},[34,61143,51953],{"class":112},[34,61145,51982],{"class":63},[34,61147,61148],{"class":63}," #e0e0e0",[34,61150,1765],{"class":59},[34,61152,61153,61156,61158,61160],{"class":36,"line":3074},[34,61154,61155],{"class":63},"            outline",[34,61157,51898],{"class":59},[34,61159,55198],{"class":63},[34,61161,1765],{"class":59},[34,61163,61164],{"class":36,"line":3080},[34,61165,2993],{"class":59},[34,61167,61168],{"class":36,"line":3085},[34,61169,2864],{"emptyLinePlaceholder":540},[34,61171,61172,61174,61177],{"class":36,"line":8412},[34,61173,61011],{"class":2427},[34,61175,61176],{"class":2427}," .search",[34,61178,16036],{"class":59},[34,61180,61181,61183,61185,61187,61189,61191,61194],{"class":36,"line":8436},[34,61182,61137],{"class":63},[34,61184,51898],{"class":59},[34,61186,64],{"class":63},[34,61188,51953],{"class":112},[34,61190,51982],{"class":63},[34,61192,61193],{"class":63}," #ff6700",[34,61195,1765],{"class":59},[34,61197,61198],{"class":36,"line":8441},[34,61199,2993],{"class":59},[34,61201,61202],{"class":36,"line":8447},[34,61203,2864],{"emptyLinePlaceholder":540},[34,61205,61206,61209],{"class":36,"line":8474},[34,61207,61208],{"class":2427},"        .result-list",[34,61210,16036],{"class":59},[34,61212,61213,61215,61217,61219],{"class":36,"line":8479},[34,61214,51933],{"class":63},[34,61216,51898],{"class":59},[34,61218,55198],{"class":63},[34,61220,1765],{"class":59},[34,61222,61223,61225,61227,61229],{"class":36,"line":8485},[34,61224,61018],{"class":63},[34,61226,51898],{"class":59},[34,61228,55292],{"class":63},[34,61230,1765],{"class":59},[34,61232,61233,61236,61238,61240],{"class":36,"line":8497},[34,61234,61235],{"class":63},"            left",[34,61237,51898],{"class":59},[34,61239,319],{"class":63},[34,61241,1765],{"class":59},[34,61243,61244,61247,61249,61251,61253],{"class":36,"line":8509},[34,61245,61246],{"class":63},"            top",[34,61248,51898],{"class":59},[34,61250,1213],{"class":63},[34,61252,51953],{"class":112},[34,61254,1765],{"class":59},[34,61256,61257,61259,61261,61263,61265],{"class":36,"line":8521},[34,61258,51945],{"class":63},[34,61260,51898],{"class":59},[34,61262,61033],{"class":63},[34,61264,51953],{"class":112},[34,61266,1765],{"class":59},[34,61268,61269,61271,61273,61275,61277,61279,61281],{"class":36,"line":10180},[34,61270,61137],{"class":63},[34,61272,51898],{"class":59},[34,61274,64],{"class":63},[34,61276,51953],{"class":112},[34,61278,51982],{"class":63},[34,61280,61193],{"class":63},[34,61282,1765],{"class":59},[34,61284,61285,61288,61290,61292],{"class":36,"line":10205},[34,61286,61287],{"class":63},"            border-top",[34,61289,51898],{"class":59},[34,61291,319],{"class":63},[34,61293,1765],{"class":59},[34,61295,61296,61299,61301,61304],{"class":36,"line":10228},[34,61297,61298],{"class":63},"            background",[34,61300,51898],{"class":59},[34,61302,61303],{"class":63},"#fff",[34,61305,1765],{"class":59},[34,61307,61308],{"class":36,"line":10252},[34,61309,2993],{"class":59},[34,61311,61312],{"class":36,"line":10257},[34,61313,2864],{"emptyLinePlaceholder":540},[34,61315,61316,61318,61320],{"class":36,"line":10262},[34,61317,61208],{"class":2427},[34,61319,1870],{"class":51761},[34,61321,16036],{"class":59},[34,61323,61324,61326,61328,61331],{"class":36,"line":10267},[34,61325,51933],{"class":63},[34,61327,51898],{"class":59},[34,61329,61330],{"class":63},"block",[34,61332,1765],{"class":59},[34,61334,61335,61337,61339,61341,61343,61346,61348],{"class":36,"line":10276},[34,61336,51907],{"class":63},[34,61338,51898],{"class":59},[34,61340,952],{"class":63},[34,61342,51953],{"class":112},[34,61344,61345],{"class":63}," 15",[34,61347,51953],{"class":112},[34,61349,1765],{"class":59},[34,61351,61352,61354,61356,61358,61360],{"class":36,"line":10281},[34,61353,61111],{"class":63},[34,61355,51898],{"class":59},[34,61357,1105],{"class":63},[34,61359,51953],{"class":112},[34,61361,1765],{"class":59},[34,61363,61364,61367,61369,61372],{"class":36,"line":10287},[34,61365,61366],{"class":63},"            color",[34,61368,51898],{"class":59},[34,61370,61371],{"class":63},"#424242",[34,61373,1765],{"class":59},[34,61375,61376,61379,61381,61383],{"class":36,"line":10308},[34,61377,61378],{"class":63},"            text-decoration",[34,61380,51898],{"class":59},[34,61382,55198],{"class":63},[34,61384,1765],{"class":59},[34,61386,61387],{"class":36,"line":10314},[34,61388,2993],{"class":59},[34,61390,61391],{"class":36,"line":10328},[34,61392,2864],{"emptyLinePlaceholder":540},[34,61394,61395,61397,61399,61402],{"class":36,"line":10334},[34,61396,61208],{"class":2427},[34,61398,1870],{"class":51761},[34,61400,61401],{"class":2427},":hover",[34,61403,16036],{"class":59},[34,61405,61406,61408,61410,61413],{"class":36,"line":10361},[34,61407,52101],{"class":63},[34,61409,51898],{"class":59},[34,61411,61412],{"class":63},"#eee",[34,61414,1765],{"class":59},[34,61416,61417],{"class":36,"line":10370},[34,61418,2993],{"class":59},[34,61420,61421,61423,61425],{"class":36,"line":10376},[34,61422,52237],{"class":59},[34,61424,532],{"class":51761},[34,61426,51768],{"class":59},[34,61428,61429],{"class":36,"line":10384},[34,61430,2864],{"emptyLinePlaceholder":540},[34,61432,61433,61435,61437],{"class":36,"line":10389},[34,61434,52246],{"class":59},[34,61436,51795],{"class":51761},[34,61438,51768],{"class":59},[34,61440,61441],{"class":36,"line":17068},[34,61442,2864],{"emptyLinePlaceholder":540},[34,61444,61445,61447,61449],{"class":36,"line":17074},[34,61446,1515],{"class":59},[34,61448,52261],{"class":51761},[34,61450,51768],{"class":59},[34,61452,61453,61455,61457,61459,61461,61464],{"class":36,"line":17097},[34,61454,51802],{"class":59},[34,61456,52072],{"class":51761},[34,61458,53947],{"class":2427},[34,61460,447],{"class":59},[34,61462,61463],{"class":187},"\"mi\"",[34,61465,51768],{"class":59},[34,61467,61468,61470,61472,61474,61476,61479,61482,61484,61487],{"class":36,"line":17103},[34,61469,55763],{"class":59},[34,61471,54282],{"class":51761},[34,61473,54285],{"class":2427},[34,61475,447],{"class":59},[34,61477,61478],{"class":187},"\"search\"",[34,61480,61481],{"class":2427}," placeholder",[34,61483,447],{"class":59},[34,61485,61486],{"class":187},"\"小米笔记本\"",[34,61488,51768],{"class":59},[34,61490,61491,61493,61495,61497,61499,61502],{"class":36,"line":17126},[34,61492,55763],{"class":59},[34,61494,1611],{"class":51761},[34,61496,53947],{"class":2427},[34,61498,447],{"class":59},[34,61500,61501],{"class":187},"\"result-list\"",[34,61503,51768],{"class":59},[34,61505,61506,61509,61511,61514,61516,61519,61521,61524,61527,61529,61531,61533],{"class":36,"line":17140},[34,61507,61508],{"class":59},"            \u003C",[34,61510,570],{"class":51761},[34,61512,61513],{"class":59},">\u003C",[34,61515,847],{"class":51761},[34,61517,61518],{"class":2427}," href",[34,61520,447],{"class":59},[34,61522,61523],{"class":187},"\"#\"",[34,61525,61526],{"class":59},">全部商品\u003C\u002F",[34,61528,847],{"class":51761},[34,61530,55775],{"class":59},[34,61532,570],{"class":51761},[34,61534,51768],{"class":59},[34,61536,61537,61539,61541,61543,61545,61547,61549,61551,61554,61556,61558,61560],{"class":36,"line":17160},[34,61538,61508],{"class":59},[34,61540,570],{"class":51761},[34,61542,61513],{"class":59},[34,61544,847],{"class":51761},[34,61546,61518],{"class":2427},[34,61548,447],{"class":59},[34,61550,61523],{"class":187},[34,61552,61553],{"class":59},">小米11\u003C\u002F",[34,61555,847],{"class":51761},[34,61557,55775],{"class":59},[34,61559,570],{"class":51761},[34,61561,51768],{"class":59},[34,61563,61564,61566,61568,61570,61572,61574,61576,61578,61581,61583,61585,61587],{"class":36,"line":17166},[34,61565,61508],{"class":59},[34,61567,570],{"class":51761},[34,61569,61513],{"class":59},[34,61571,847],{"class":51761},[34,61573,61518],{"class":2427},[34,61575,447],{"class":59},[34,61577,61523],{"class":187},[34,61579,61580],{"class":59},">小米10S\u003C\u002F",[34,61582,847],{"class":51761},[34,61584,55775],{"class":59},[34,61586,570],{"class":51761},[34,61588,51768],{"class":59},[34,61590,61591,61593,61595,61597,61599,61601,61603,61605,61608,61610,61612,61614],{"class":36,"line":17177},[34,61592,61508],{"class":59},[34,61594,570],{"class":51761},[34,61596,61513],{"class":59},[34,61598,847],{"class":51761},[34,61600,61518],{"class":2427},[34,61602,447],{"class":59},[34,61604,61523],{"class":187},[34,61606,61607],{"class":59},">小米笔记本\u003C\u002F",[34,61609,847],{"class":51761},[34,61611,55775],{"class":59},[34,61613,570],{"class":51761},[34,61615,51768],{"class":59},[34,61617,61618,61620,61622,61624,61626,61628,61630,61632,61635,61637,61639,61641],{"class":36,"line":17200},[34,61619,61508],{"class":59},[34,61621,570],{"class":51761},[34,61623,61513],{"class":59},[34,61625,847],{"class":51761},[34,61627,61518],{"class":2427},[34,61629,447],{"class":59},[34,61631,61523],{"class":187},[34,61633,61634],{"class":59},">小米手机\u003C\u002F",[34,61636,847],{"class":51761},[34,61638,55775],{"class":59},[34,61640,570],{"class":51761},[34,61642,51768],{"class":59},[34,61644,61645,61647,61649,61651,61653,61655,61657,61659,61662,61664,61666,61668],{"class":36,"line":17222},[34,61646,61508],{"class":59},[34,61648,570],{"class":51761},[34,61650,61513],{"class":59},[34,61652,847],{"class":51761},[34,61654,61518],{"class":2427},[34,61656,447],{"class":59},[34,61658,61523],{"class":187},[34,61660,61661],{"class":59},">黑鲨4\u003C\u002F",[34,61663,847],{"class":51761},[34,61665,55775],{"class":59},[34,61667,570],{"class":51761},[34,61669,51768],{"class":59},[34,61671,61672,61674,61676,61678,61680,61682,61684,61686,61689,61691,61693,61695],{"class":36,"line":17227},[34,61673,61508],{"class":59},[34,61675,570],{"class":51761},[34,61677,61513],{"class":59},[34,61679,847],{"class":51761},[34,61681,61518],{"class":2427},[34,61683,447],{"class":59},[34,61685,61523],{"class":187},[34,61687,61688],{"class":59},">空调\u003C\u002F",[34,61690,847],{"class":51761},[34,61692,55775],{"class":59},[34,61694,570],{"class":51761},[34,61696,51768],{"class":59},[34,61698,61699,61702,61704],{"class":36,"line":17233},[34,61700,61701],{"class":59},"        \u003C\u002F",[34,61703,1611],{"class":51761},[34,61705,51768],{"class":59},[34,61707,61708,61710,61712],{"class":36,"line":17247},[34,61709,52237],{"class":59},[34,61711,52072],{"class":51761},[34,61713,51768],{"class":59},[34,61715,61716,61718,61720],{"class":36,"line":17260},[34,61717,51802],{"class":59},[34,61719,52274],{"class":51761},[34,61721,51768],{"class":59},[34,61723,61724],{"class":36,"line":17265},[34,61725,61726],{"class":40},"        \u002F\u002F 1. 获取元素\n",[34,61728,61729,61732,61734,61736,61738,61740,61742,61745],{"class":36,"line":17279},[34,61730,61731],{"class":112},"        const",[34,61733,61066],{"class":63},[34,61735,14028],{"class":112},[34,61737,54857],{"class":59},[34,61739,54860],{"class":2427},[34,61741,617],{"class":59},[34,61743,61744],{"class":187},"'[type=search]'",[34,61746,623],{"class":59},[34,61748,61749,61751,61754,61756,61758,61760,61762,61765],{"class":36,"line":17284},[34,61750,61731],{"class":112},[34,61752,61753],{"class":63}," ul",[34,61755,14028],{"class":112},[34,61757,54857],{"class":59},[34,61759,54860],{"class":2427},[34,61761,617],{"class":59},[34,61763,61764],{"class":187},"'.result-list'",[34,61766,623],{"class":59},[34,61768,61769],{"class":36,"line":17290},[34,61770,61771],{"class":40},"        \u002F\u002F console.log(input)\n",[34,61773,61774],{"class":36,"line":17295},[34,61775,61776],{"class":40},"        \u002F\u002F 2. 监听事件 获得焦点\n",[34,61778,61779,61782,61784,61786,61789,61791,61793],{"class":36,"line":17309},[34,61780,61781],{"class":59},"        input.",[34,61783,58274],{"class":2427},[34,61785,617],{"class":59},[34,61787,61788],{"class":187},"'focus'",[34,61790,12899],{"class":59},[34,61792,54910],{"class":112},[34,61794,54913],{"class":59},[34,61796,61797],{"class":36,"line":17314},[34,61798,61799],{"class":40},"            \u002F\u002F ul显示\n",[34,61801,61802,61805,61807],{"class":36,"line":17319},[34,61803,61804],{"class":59},"            ul.style.display ",[34,61806,447],{"class":112},[34,61808,61809],{"class":187}," 'block'\n",[34,61811,61812],{"class":36,"line":17333},[34,61813,61814],{"class":40},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[34,61816,61817,61820,61822,61824,61827],{"class":36,"line":17345},[34,61818,61819],{"class":59},"            input.classList.",[34,61821,5798],{"class":2427},[34,61823,617],{"class":59},[34,61825,61826],{"class":187},"'search'",[34,61828,623],{"class":59},[34,61830,61831],{"class":36,"line":17350},[34,61832,61833],{"class":59},"        })\n",[34,61835,61836],{"class":36,"line":17363},[34,61837,61838],{"class":40},"        \u002F\u002F 3. 监听事件 失去焦点\n",[34,61840,61841,61843,61845,61847,61850,61852,61854],{"class":36,"line":17368},[34,61842,61781],{"class":59},[34,61844,58274],{"class":2427},[34,61846,617],{"class":59},[34,61848,61849],{"class":187},"'blur'",[34,61851,12899],{"class":59},[34,61853,54910],{"class":112},[34,61855,54913],{"class":59},[34,61857,61858,61860,61862],{"class":36,"line":17373},[34,61859,61804],{"class":59},[34,61861,447],{"class":112},[34,61863,61864],{"class":187}," 'none'\n",[34,61866,61867,61869,61871,61873,61875],{"class":36,"line":17378},[34,61868,61819],{"class":59},[34,61870,57467],{"class":2427},[34,61872,617],{"class":59},[34,61874,61826],{"class":187},[34,61876,623],{"class":59},[34,61878,61879],{"class":36,"line":17391},[34,61880,61833],{"class":59},[34,61882,61883,61885,61887],{"class":36,"line":17396},[34,61884,52237],{"class":59},[34,61886,52274],{"class":51761},[34,61888,51768],{"class":59},[34,61890,61891,61893,61895],{"class":36,"line":33096},[34,61892,52246],{"class":59},[34,61894,52261],{"class":51761},[34,61896,51768],{"class":59},[34,61898,61899],{"class":36,"line":33102},[34,61900,2864],{"emptyLinePlaceholder":540},[34,61902,61903,61905,61907],{"class":36,"line":33108},[34,61904,52246],{"class":59},[34,61906,51096],{"class":51761},[34,61908,51768],{"class":59},[22462,61910,61912],{"id":61911},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61914,61915],{},"评论字数统计案例",[14,61917,61918],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61920,61921],{},"牢记focus伪类选择器",[51805,61923],{"charSet":61924},"UTF-8",[51805,61926],{"name":61927,"content":61928},"viewport","width=device-width, initial-scale=1.0",[51868,61930,61931],{},"Document",[532,61933,61934],{},"\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",[54282,61936],{"type":5651},[1611,61938,61939,61942],{},[570,61940,61941],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[570,61943,61944],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[25,61946,61948],{"className":51094,"code":61947,"language":51096,"meta":22,"style":22},"\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",[31,61949,61950,61960,61974,61978,61986,62000,62020,62040,62053,62061,62068,62081,62095,62105,62115,62119,62123,62130,62142,62154,62166,62178,62207,62220,62224,62228,62237,62248,62260,62271,62282,62294,62305,62317,62333,62345,62349,62353,62364,62375,62385,62397,62401,62405,62413,62424,62434,62445,62457,62470,62482,62494,62498,62502,62511,62523,62534,62547,62558,62572,62576,62580,62587,62599,62611,62621,62625,62629,62638,62650,62660,62664,62668,62679,62689,62708,62721,62725,62729,62739,62749,62753,62757,62768,62779,62791,62803,62807,62811,62822,62833,62847,62851,62855,62866,62876,62888,62892,62900,62908,62912,62920,62935,62954,62994,63007,63015,63029,63049,63057,63072,63095,63113,63128,63148,63168,63188,63196,63204,63212,63220,63240,63260,63265,63282,63291,63295,63300,63316,63324,63328,63333,63350,63355,63380,63384,63388,63393,63398,63406,63414,63418],{"__ignoreMap":22},[34,61951,61952,61954,61956,61958],{"class":36,"line":37},[34,61953,51758],{"class":59},[34,61955,51762],{"class":51761},[34,61957,51765],{"class":2427},[34,61959,51768],{"class":59},[34,61961,61962,61964,61966,61968,61970,61972],{"class":36,"line":44},[34,61963,1515],{"class":59},[34,61965,51096],{"class":51761},[34,61967,51777],{"class":2427},[34,61969,447],{"class":59},[34,61971,51782],{"class":187},[34,61973,51768],{"class":59},[34,61975,61976],{"class":36,"line":50},[34,61977,2864],{"emptyLinePlaceholder":540},[34,61979,61980,61982,61984],{"class":36,"line":56},[34,61981,1515],{"class":59},[34,61983,51795],{"class":51761},[34,61985,51768],{"class":59},[34,61987,61988,61990,61992,61994,61996,61998],{"class":36,"line":107},[34,61989,52605],{"class":59},[34,61991,51805],{"class":51761},[34,61993,51808],{"class":2427},[34,61995,447],{"class":59},[34,61997,51813],{"class":187},[34,61999,51768],{"class":59},[34,62001,62002,62004,62006,62008,62010,62012,62014,62016,62018],{"class":36,"line":196},[34,62003,52605],{"class":59},[34,62005,51805],{"class":51761},[34,62007,51824],{"class":2427},[34,62009,447],{"class":59},[34,62011,51829],{"class":187},[34,62013,51832],{"class":2427},[34,62015,447],{"class":59},[34,62017,51837],{"class":187},[34,62019,51768],{"class":59},[34,62021,62022,62024,62026,62028,62030,62032,62034,62036,62038],{"class":36,"line":202},[34,62023,52605],{"class":59},[34,62025,51805],{"class":51761},[34,62027,15384],{"class":2427},[34,62029,447],{"class":59},[34,62031,51852],{"class":187},[34,62033,51832],{"class":2427},[34,62035,447],{"class":59},[34,62037,51859],{"class":187},[34,62039,51768],{"class":59},[34,62041,62042,62044,62046,62049,62051],{"class":36,"line":207},[34,62043,52605],{"class":59},[34,62045,51868],{"class":51761},[34,62047,62048],{"class":59},">评论回车发布\u003C\u002F",[34,62050,51868],{"class":51761},[34,62052,51768],{"class":59},[34,62054,62055,62057,62059],{"class":36,"line":222},[34,62056,52605],{"class":59},[34,62058,532],{"class":51761},[34,62060,51768],{"class":59},[34,62062,62063,62066],{"class":36,"line":227},[34,62064,62065],{"class":2427},"    .wrapper",[34,62067,16036],{"class":59},[34,62069,62070,62073,62075,62077,62079],{"class":36,"line":232},[34,62071,62072],{"class":63},"      min-width",[34,62074,51898],{"class":59},[34,62076,4451],{"class":63},[34,62078,51953],{"class":112},[34,62080,1765],{"class":59},[34,62082,62083,62086,62088,62091,62093],{"class":36,"line":238},[34,62084,62085],{"class":63},"      max-width",[34,62087,51898],{"class":59},[34,62089,62090],{"class":63},"800",[34,62092,51953],{"class":112},[34,62094,1765],{"class":59},[34,62096,62097,62099,62101,62103],{"class":36,"line":244},[34,62098,55470],{"class":63},[34,62100,51898],{"class":59},[34,62102,51938],{"class":63},[34,62104,1765],{"class":59},[34,62106,62107,62109,62111,62113],{"class":36,"line":250},[34,62108,55481],{"class":63},[34,62110,51898],{"class":59},[34,62112,52041],{"class":63},[34,62114,1765],{"class":59},[34,62116,62117],{"class":36,"line":256},[34,62118,2651],{"class":59},[34,62120,62121],{"class":36,"line":261},[34,62122,2864],{"emptyLinePlaceholder":540},[34,62124,62125,62128],{"class":36,"line":267},[34,62126,62127],{"class":2427},"    .avatar",[34,62129,16036],{"class":59},[34,62131,62132,62134,62136,62138,62140],{"class":36,"line":2138},[34,62133,55232],{"class":63},[34,62135,51898],{"class":59},[34,62137,1213],{"class":63},[34,62139,51953],{"class":112},[34,62141,1765],{"class":59},[34,62143,62144,62146,62148,62150,62152],{"class":36,"line":2143},[34,62145,55246],{"class":63},[34,62147,51898],{"class":59},[34,62149,1213],{"class":63},[34,62151,51953],{"class":112},[34,62153,1765],{"class":59},[34,62155,62156,62158,62160,62162,62164],{"class":36,"line":2157},[34,62157,55595],{"class":63},[34,62159,51898],{"class":59},[34,62161,1262],{"class":63},[34,62163,936],{"class":112},[34,62165,1765],{"class":59},[34,62167,62168,62171,62173,62176],{"class":36,"line":2162},[34,62169,62170],{"class":63},"      overflow",[34,62172,51898],{"class":59},[34,62174,62175],{"class":63},"hidden",[34,62177,1765],{"class":59},[34,62179,62180,62183,62185,62188,62190,62193,62195,62198,62200,62202,62205],{"class":36,"line":2191},[34,62181,62182],{"class":63},"      background",[34,62184,51898],{"class":59},[34,62186,62187],{"class":63},"url",[34,62189,617],{"class":59},[34,62191,62192],{"class":5680},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[34,62194,14178],{"class":59},[34,62196,62197],{"class":63},"no-repeat",[34,62199,17608],{"class":63},[34,62201,25443],{"class":59},[34,62203,62204],{"class":63},"cover",[34,62206,1765],{"class":59},[34,62208,62209,62212,62214,62216,62218],{"class":36,"line":2196},[34,62210,62211],{"class":63},"      margin-right",[34,62213,51898],{"class":59},[34,62215,1306],{"class":63},[34,62217,51953],{"class":112},[34,62219,1765],{"class":59},[34,62221,62222],{"class":36,"line":2213},[34,62223,2651],{"class":59},[34,62225,62226],{"class":36,"line":2218},[34,62227,2864],{"emptyLinePlaceholder":540},[34,62229,62230,62232,62235],{"class":36,"line":2223},[34,62231,62065],{"class":2427},[34,62233,62234],{"class":51761}," textarea",[34,62236,16036],{"class":59},[34,62238,62239,62242,62244,62246],{"class":36,"line":2228},[34,62240,62241],{"class":63},"      outline",[34,62243,51898],{"class":59},[34,62245,55198],{"class":63},[34,62247,1765],{"class":59},[34,62249,62250,62253,62255,62258],{"class":36,"line":2242},[34,62251,62252],{"class":63},"      border-color",[34,62254,51898],{"class":59},[34,62256,62257],{"class":63},"transparent",[34,62259,1765],{"class":59},[34,62261,62262,62265,62267,62269],{"class":36,"line":2247},[34,62263,62264],{"class":63},"      resize",[34,62266,51898],{"class":59},[34,62268,55198],{"class":63},[34,62270,1765],{"class":59},[34,62272,62273,62275,62277,62280],{"class":36,"line":3041},[34,62274,62182],{"class":63},[34,62276,51898],{"class":59},[34,62278,62279],{"class":63},"#f5f5f5",[34,62281,1765],{"class":59},[34,62283,62284,62286,62288,62290,62292],{"class":36,"line":3055},[34,62285,55595],{"class":63},[34,62287,51898],{"class":59},[34,62289,217],{"class":63},[34,62291,51953],{"class":112},[34,62293,1765],{"class":59},[34,62295,62296,62299,62301,62303],{"class":36,"line":3063},[34,62297,62298],{"class":63},"      flex",[34,62300,51898],{"class":59},[34,62302,64],{"class":63},[34,62304,1765],{"class":59},[34,62306,62307,62309,62311,62313,62315],{"class":36,"line":3068},[34,62308,55156],{"class":63},[34,62310,51898],{"class":59},[34,62312,1053],{"class":63},[34,62314,51953],{"class":112},[34,62316,1765],{"class":59},[34,62318,62319,62322,62324,62326,62329,62331],{"class":36,"line":3074},[34,62320,62321],{"class":63},"      transition",[34,62323,51898],{"class":59},[34,62325,28586],{"class":63},[34,62327,62328],{"class":63}," 0.5",[34,62330,1301],{"class":112},[34,62332,1765],{"class":59},[34,62334,62335,62337,62339,62341,62343],{"class":36,"line":3080},[34,62336,55246],{"class":63},[34,62338,51898],{"class":59},[34,62340,1555],{"class":63},[34,62342,51953],{"class":112},[34,62344,1765],{"class":59},[34,62346,62347],{"class":36,"line":3085},[34,62348,2651],{"class":59},[34,62350,62351],{"class":36,"line":8412},[34,62352,2864],{"emptyLinePlaceholder":540},[34,62354,62355,62357,62359,62362],{"class":36,"line":8436},[34,62356,62065],{"class":2427},[34,62358,62234],{"class":51761},[34,62360,62361],{"class":2427},":focus",[34,62363,16036],{"class":59},[34,62365,62366,62368,62370,62373],{"class":36,"line":8441},[34,62367,62252],{"class":63},[34,62369,51898],{"class":59},[34,62371,62372],{"class":63},"#e4e4e4",[34,62374,1765],{"class":59},[34,62376,62377,62379,62381,62383],{"class":36,"line":8447},[34,62378,62182],{"class":63},[34,62380,51898],{"class":59},[34,62382,61303],{"class":63},[34,62384,1765],{"class":59},[34,62386,62387,62389,62391,62393,62395],{"class":36,"line":8474},[34,62388,55246],{"class":63},[34,62390,51898],{"class":59},[34,62392,1262],{"class":63},[34,62394,51953],{"class":112},[34,62396,1765],{"class":59},[34,62398,62399],{"class":36,"line":8479},[34,62400,2651],{"class":59},[34,62402,62403],{"class":36,"line":8485},[34,62404,2864],{"emptyLinePlaceholder":540},[34,62406,62407,62409,62411],{"class":36,"line":8497},[34,62408,62065],{"class":2427},[34,62410,57928],{"class":51761},[34,62412,16036],{"class":59},[34,62414,62415,62417,62419,62422],{"class":36,"line":8509},[34,62416,62182],{"class":63},[34,62418,51898],{"class":59},[34,62420,62421],{"class":63},"#00aeec",[34,62423,1765],{"class":59},[34,62425,62426,62428,62430,62432],{"class":36,"line":8521},[34,62427,57877],{"class":63},[34,62429,51898],{"class":59},[34,62431,61303],{"class":63},[34,62433,1765],{"class":59},[34,62435,62436,62439,62441,62443],{"class":36,"line":10180},[34,62437,62438],{"class":63},"      border",[34,62440,51898],{"class":59},[34,62442,55198],{"class":63},[34,62444,1765],{"class":59},[34,62446,62447,62449,62451,62453,62455],{"class":36,"line":10205},[34,62448,55595],{"class":63},[34,62450,51898],{"class":59},[34,62452,217],{"class":63},[34,62454,51953],{"class":112},[34,62456,1765],{"class":59},[34,62458,62459,62462,62464,62466,62468],{"class":36,"line":10228},[34,62460,62461],{"class":63},"      margin-left",[34,62463,51898],{"class":59},[34,62465,1053],{"class":63},[34,62467,51953],{"class":112},[34,62469,1765],{"class":59},[34,62471,62472,62474,62476,62478,62480],{"class":36,"line":10252},[34,62473,55232],{"class":63},[34,62475,51898],{"class":59},[34,62477,964],{"class":63},[34,62479,51953],{"class":112},[34,62481,1765],{"class":59},[34,62483,62484,62487,62489,62492],{"class":36,"line":10257},[34,62485,62486],{"class":63},"      cursor",[34,62488,51898],{"class":59},[34,62490,62491],{"class":63},"pointer",[34,62493,1765],{"class":59},[34,62495,62496],{"class":36,"line":10262},[34,62497,2651],{"class":59},[34,62499,62500],{"class":36,"line":10267},[34,62501,2864],{"emptyLinePlaceholder":540},[34,62503,62504,62506,62509],{"class":36,"line":10276},[34,62505,62065],{"class":2427},[34,62507,62508],{"class":2427}," .total",[34,62510,16036],{"class":59},[34,62512,62513,62515,62517,62519,62521],{"class":36,"line":10281},[34,62514,62211],{"class":63},[34,62516,51898],{"class":59},[34,62518,1218],{"class":63},[34,62520,51953],{"class":112},[34,62522,1765],{"class":59},[34,62524,62525,62527,62529,62532],{"class":36,"line":10287},[34,62526,57877],{"class":63},[34,62528,51898],{"class":59},[34,62530,62531],{"class":63},"#999",[34,62533,1765],{"class":59},[34,62535,62536,62539,62541,62543,62545],{"class":36,"line":10308},[34,62537,62538],{"class":63},"      margin-top",[34,62540,51898],{"class":59},[34,62542,927],{"class":63},[34,62544,51953],{"class":112},[34,62546,1765],{"class":59},[34,62548,62549,62552,62554,62556],{"class":36,"line":10314},[34,62550,62551],{"class":63},"      opacity",[34,62553,51898],{"class":59},[34,62555,319],{"class":63},[34,62557,1765],{"class":59},[34,62559,62560,62562,62564,62566,62568,62570],{"class":36,"line":10328},[34,62561,62321],{"class":63},[34,62563,51898],{"class":59},[34,62565,28586],{"class":63},[34,62567,62328],{"class":63},[34,62569,1301],{"class":112},[34,62571,1765],{"class":59},[34,62573,62574],{"class":36,"line":10334},[34,62575,2651],{"class":59},[34,62577,62578],{"class":36,"line":10361},[34,62579,2864],{"emptyLinePlaceholder":540},[34,62581,62582,62585],{"class":36,"line":10370},[34,62583,62584],{"class":2427},"    .list",[34,62586,16036],{"class":59},[34,62588,62589,62591,62593,62595,62597],{"class":36,"line":10376},[34,62590,62072],{"class":63},[34,62592,51898],{"class":59},[34,62594,4451],{"class":63},[34,62596,51953],{"class":112},[34,62598,1765],{"class":59},[34,62600,62601,62603,62605,62607,62609],{"class":36,"line":10384},[34,62602,62085],{"class":63},[34,62604,51898],{"class":59},[34,62606,62090],{"class":63},[34,62608,51953],{"class":112},[34,62610,1765],{"class":59},[34,62612,62613,62615,62617,62619],{"class":36,"line":10389},[34,62614,55470],{"class":63},[34,62616,51898],{"class":59},[34,62618,51938],{"class":63},[34,62620,1765],{"class":59},[34,62622,62623],{"class":36,"line":17068},[34,62624,2651],{"class":59},[34,62626,62627],{"class":36,"line":17074},[34,62628,2864],{"emptyLinePlaceholder":540},[34,62630,62631,62633,62636],{"class":36,"line":17097},[34,62632,62584],{"class":2427},[34,62634,62635],{"class":2427}," .item",[34,62637,16036],{"class":59},[34,62639,62640,62642,62644,62646,62648],{"class":36,"line":17103},[34,62641,55232],{"class":63},[34,62643,51898],{"class":59},[34,62645,919],{"class":63},[34,62647,936],{"class":112},[34,62649,1765],{"class":59},[34,62651,62652,62654,62656,62658],{"class":36,"line":17126},[34,62653,55470],{"class":63},[34,62655,51898],{"class":59},[34,62657,51938],{"class":63},[34,62659,1765],{"class":59},[34,62661,62662],{"class":36,"line":17140},[34,62663,2651],{"class":59},[34,62665,62666],{"class":36,"line":17160},[34,62667,2864],{"emptyLinePlaceholder":540},[34,62669,62670,62672,62674,62677],{"class":36,"line":17166},[34,62671,62584],{"class":2427},[34,62673,62635],{"class":2427},[34,62675,62676],{"class":2427}," .info",[34,62678,16036],{"class":59},[34,62680,62681,62683,62685,62687],{"class":36,"line":17177},[34,62682,62298],{"class":63},[34,62684,51898],{"class":59},[34,62686,64],{"class":63},[34,62688,1765],{"class":59},[34,62690,62691,62694,62696,62698,62700,62703,62706],{"class":36,"line":17200},[34,62692,62693],{"class":63},"      border-bottom",[34,62695,51898],{"class":59},[34,62697,64],{"class":63},[34,62699,51953],{"class":112},[34,62701,62702],{"class":63}," dashed",[34,62704,62705],{"class":63}," #e4e4e4",[34,62707,1765],{"class":59},[34,62709,62710,62713,62715,62717,62719],{"class":36,"line":17222},[34,62711,62712],{"class":63},"      padding-bottom",[34,62714,51898],{"class":59},[34,62716,1053],{"class":63},[34,62718,51953],{"class":112},[34,62720,1765],{"class":59},[34,62722,62723],{"class":36,"line":17227},[34,62724,2651],{"class":59},[34,62726,62727],{"class":36,"line":17233},[34,62728,2864],{"emptyLinePlaceholder":540},[34,62730,62731,62733,62735,62737],{"class":36,"line":17247},[34,62732,62584],{"class":2427},[34,62734,62635],{"class":2427},[34,62736,7289],{"class":51761},[34,62738,16036],{"class":59},[34,62740,62741,62743,62745,62747],{"class":36,"line":17260},[34,62742,55167],{"class":63},[34,62744,51898],{"class":59},[34,62746,319],{"class":63},[34,62748,1765],{"class":59},[34,62750,62751],{"class":36,"line":17265},[34,62752,2651],{"class":59},[34,62754,62755],{"class":36,"line":17279},[34,62756,2864],{"emptyLinePlaceholder":540},[34,62758,62759,62761,62763,62766],{"class":36,"line":17284},[34,62760,62584],{"class":2427},[34,62762,62635],{"class":2427},[34,62764,62765],{"class":2427}," .name",[34,62767,16036],{"class":59},[34,62769,62770,62772,62774,62777],{"class":36,"line":17290},[34,62771,57877],{"class":63},[34,62773,51898],{"class":59},[34,62775,62776],{"class":63},"#FB7299",[34,62778,1765],{"class":59},[34,62780,62781,62783,62785,62787,62789],{"class":36,"line":17295},[34,62782,55383],{"class":63},[34,62784,51898],{"class":59},[34,62786,1155],{"class":63},[34,62788,51953],{"class":112},[34,62790,1765],{"class":59},[34,62792,62793,62796,62798,62801],{"class":36,"line":17309},[34,62794,62795],{"class":63},"      font-weight",[34,62797,51898],{"class":59},[34,62799,62800],{"class":63},"bold",[34,62802,1765],{"class":59},[34,62804,62805],{"class":36,"line":17314},[34,62806,2651],{"class":59},[34,62808,62809],{"class":36,"line":17319},[34,62810,2864],{"emptyLinePlaceholder":540},[34,62812,62813,62815,62817,62820],{"class":36,"line":17333},[34,62814,62584],{"class":2427},[34,62816,62635],{"class":2427},[34,62818,62819],{"class":2427}," .text",[34,62821,16036],{"class":59},[34,62823,62824,62826,62828,62831],{"class":36,"line":17345},[34,62825,57877],{"class":63},[34,62827,51898],{"class":59},[34,62829,62830],{"class":63},"#333",[34,62832,1765],{"class":59},[34,62834,62835,62837,62839,62841,62843,62845],{"class":36,"line":17350},[34,62836,55156],{"class":63},[34,62838,51898],{"class":59},[34,62840,1053],{"class":63},[34,62842,51953],{"class":112},[34,62844,4557],{"class":63},[34,62846,1765],{"class":59},[34,62848,62849],{"class":36,"line":17363},[34,62850,2651],{"class":59},[34,62852,62853],{"class":36,"line":17368},[34,62854,2864],{"emptyLinePlaceholder":540},[34,62856,62857,62859,62861,62864],{"class":36,"line":17373},[34,62858,62584],{"class":2427},[34,62860,62635],{"class":2427},[34,62862,62863],{"class":2427}," .time",[34,62865,16036],{"class":59},[34,62867,62868,62870,62872,62874],{"class":36,"line":17378},[34,62869,57877],{"class":63},[34,62871,51898],{"class":59},[34,62873,62531],{"class":63},[34,62875,1765],{"class":59},[34,62877,62878,62880,62882,62884,62886],{"class":36,"line":17391},[34,62879,55383],{"class":63},[34,62881,51898],{"class":59},[34,62883,1105],{"class":63},[34,62885,51953],{"class":112},[34,62887,1765],{"class":59},[34,62889,62890],{"class":36,"line":17396},[34,62891,2651],{"class":59},[34,62893,62894,62896,62898],{"class":36,"line":33096},[34,62895,52878],{"class":59},[34,62897,532],{"class":51761},[34,62899,51768],{"class":59},[34,62901,62902,62904,62906],{"class":36,"line":33102},[34,62903,52246],{"class":59},[34,62905,51795],{"class":51761},[34,62907,51768],{"class":59},[34,62909,62910],{"class":36,"line":33108},[34,62911,2864],{"emptyLinePlaceholder":540},[34,62913,62914,62916,62918],{"class":36,"line":33114},[34,62915,1515],{"class":59},[34,62917,52261],{"class":51761},[34,62919,51768],{"class":59},[34,62921,62922,62924,62926,62928,62930,62933],{"class":36,"line":33120},[34,62923,52605],{"class":59},[34,62925,52072],{"class":51761},[34,62927,53947],{"class":2427},[34,62929,447],{"class":59},[34,62931,62932],{"class":187},"\"wrapper\"",[34,62934,51768],{"class":59},[34,62936,62937,62939,62941,62943,62945,62948,62950,62952],{"class":36,"line":33131},[34,62938,51802],{"class":59},[34,62940,1048],{"class":51761},[34,62942,53947],{"class":2427},[34,62944,447],{"class":59},[34,62946,62947],{"class":187},"\"avatar\"",[34,62949,55775],{"class":59},[34,62951,1048],{"class":51761},[34,62953,51768],{"class":59},[34,62955,62956,62958,62960,62962,62964,62967,62969,62971,62974,62976,62978,62980,62983,62985,62988,62990,62992],{"class":36,"line":33137},[34,62957,51802],{"class":59},[34,62959,54749],{"class":51761},[34,62961,15423],{"class":2427},[34,62963,447],{"class":59},[34,62965,62966],{"class":187},"\"tx\"",[34,62968,61481],{"class":2427},[34,62970,447],{"class":59},[34,62972,62973],{"class":187},"\"发一条友善的评论\"",[34,62975,54772],{"class":2427},[34,62977,447],{"class":59},[34,62979,4165],{"class":187},[34,62981,62982],{"class":2427}," maxlength",[34,62984,447],{"class":59},[34,62986,62987],{"class":187},"\"200\"",[34,62989,55775],{"class":59},[34,62991,54749],{"class":51761},[34,62993,51768],{"class":59},[34,62995,62996,62998,63000,63003,63005],{"class":36,"line":33157},[34,62997,51802],{"class":59},[34,62999,54348],{"class":51761},[34,63001,63002],{"class":59},">发布\u003C\u002F",[34,63004,54348],{"class":51761},[34,63006,51768],{"class":59},[34,63008,63009,63011,63013],{"class":36,"line":33163},[34,63010,52878],{"class":59},[34,63012,52072],{"class":51761},[34,63014,51768],{"class":59},[34,63016,63017,63019,63021,63023,63025,63027],{"class":36,"line":33174},[34,63018,52605],{"class":59},[34,63020,52072],{"class":51761},[34,63022,53947],{"class":2427},[34,63024,447],{"class":59},[34,63026,62932],{"class":187},[34,63028,51768],{"class":59},[34,63030,63031,63033,63035,63037,63039,63042,63045,63047],{"class":36,"line":33180},[34,63032,51802],{"class":59},[34,63034,34],{"class":51761},[34,63036,53947],{"class":2427},[34,63038,447],{"class":59},[34,63040,63041],{"class":187},"\"total\"",[34,63043,63044],{"class":59},">0\u002F200字\u003C\u002F",[34,63046,34],{"class":51761},[34,63048,51768],{"class":59},[34,63050,63051,63053,63055],{"class":36,"line":33186},[34,63052,52878],{"class":59},[34,63054,52072],{"class":51761},[34,63056,51768],{"class":59},[34,63058,63059,63061,63063,63065,63067,63070],{"class":36,"line":33192},[34,63060,52605],{"class":59},[34,63062,52072],{"class":51761},[34,63064,53947],{"class":2427},[34,63066,447],{"class":59},[34,63068,63069],{"class":187},"\"list\"",[34,63071,51768],{"class":59},[34,63073,63074,63076,63078,63080,63082,63085,63088,63090,63093],{"class":36,"line":33198},[34,63075,51802],{"class":59},[34,63077,52072],{"class":51761},[34,63079,53947],{"class":2427},[34,63081,447],{"class":59},[34,63083,63084],{"class":187},"\"item\"",[34,63086,63087],{"class":2427}," style",[34,63089,447],{"class":59},[34,63091,63092],{"class":187},"\"display: none;\"",[34,63094,51768],{"class":59},[34,63096,63097,63099,63101,63103,63105,63107,63109,63111],{"class":36,"line":33204},[34,63098,55695],{"class":59},[34,63100,1048],{"class":51761},[34,63102,53947],{"class":2427},[34,63104,447],{"class":59},[34,63106,62947],{"class":187},[34,63108,55775],{"class":59},[34,63110,1048],{"class":51761},[34,63112,51768],{"class":59},[34,63114,63115,63117,63119,63121,63123,63126],{"class":36,"line":33210},[34,63116,55695],{"class":59},[34,63118,52072],{"class":51761},[34,63120,53947],{"class":2427},[34,63122,447],{"class":59},[34,63124,63125],{"class":187},"\"info\"",[34,63127,51768],{"class":59},[34,63129,63130,63132,63134,63136,63138,63141,63144,63146],{"class":36,"line":33216},[34,63131,55763],{"class":59},[34,63133,14],{"class":51761},[34,63135,53947],{"class":2427},[34,63137,447],{"class":59},[34,63139,63140],{"class":187},"\"name\"",[34,63142,63143],{"class":59},">清风徐来\u003C\u002F",[34,63145,14],{"class":51761},[34,63147,51768],{"class":59},[34,63149,63150,63152,63154,63156,63158,63161,63164,63166],{"class":36,"line":33236},[34,63151,55763],{"class":59},[34,63153,14],{"class":51761},[34,63155,53947],{"class":2427},[34,63157,447],{"class":59},[34,63159,63160],{"class":187},"\"text\"",[34,63162,63163],{"class":59},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[34,63165,14],{"class":51761},[34,63167,51768],{"class":59},[34,63169,63170,63172,63174,63176,63178,63181,63184,63186],{"class":36,"line":33242},[34,63171,55763],{"class":59},[34,63173,14],{"class":51761},[34,63175,53947],{"class":2427},[34,63177,447],{"class":59},[34,63179,63180],{"class":187},"\"time\"",[34,63182,63183],{"class":59},">2022-10-10 20:29:21\u003C\u002F",[34,63185,14],{"class":51761},[34,63187,51768],{"class":59},[34,63189,63190,63192,63194],{"class":36,"line":33258},[34,63191,55868],{"class":59},[34,63193,52072],{"class":51761},[34,63195,51768],{"class":59},[34,63197,63198,63200,63202],{"class":36,"line":33264},[34,63199,52237],{"class":59},[34,63201,52072],{"class":51761},[34,63203,51768],{"class":59},[34,63205,63206,63208,63210],{"class":36,"line":33278},[34,63207,52878],{"class":59},[34,63209,52072],{"class":51761},[34,63211,51768],{"class":59},[34,63213,63214,63216,63218],{"class":36,"line":33284},[34,63215,52605],{"class":59},[34,63217,52274],{"class":51761},[34,63219,51768],{"class":59},[34,63221,63222,63224,63227,63229,63231,63233,63235,63238],{"class":36,"line":33299},[34,63223,11685],{"class":112},[34,63225,63226],{"class":63}," tx",[34,63228,14028],{"class":112},[34,63230,54857],{"class":59},[34,63232,54860],{"class":2427},[34,63234,617],{"class":59},[34,63236,63237],{"class":187},"'#tx'",[34,63239,623],{"class":59},[34,63241,63242,63244,63247,63249,63251,63253,63255,63258],{"class":36,"line":33305},[34,63243,11685],{"class":112},[34,63245,63246],{"class":63}," total",[34,63248,14028],{"class":112},[34,63250,54857],{"class":59},[34,63252,54860],{"class":2427},[34,63254,617],{"class":59},[34,63256,63257],{"class":187},"'.total'",[34,63259,623],{"class":59},[34,63261,63262],{"class":36,"line":33314},[34,63263,63264],{"class":40},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[34,63266,63267,63270,63272,63274,63276,63278,63280],{"class":36,"line":33320},[34,63268,63269],{"class":59},"    tx.",[34,63271,58274],{"class":2427},[34,63273,617],{"class":59},[34,63275,61788],{"class":187},[34,63277,12899],{"class":59},[34,63279,54910],{"class":112},[34,63281,54913],{"class":59},[34,63283,63284,63287,63289],{"class":36,"line":33329},[34,63285,63286],{"class":59},"      total.style.opacity ",[34,63288,447],{"class":112},[34,63290,56160],{"class":63},[34,63292,63293],{"class":36,"line":33335},[34,63294,33923],{"class":59},[34,63296,63297],{"class":36,"line":33341},[34,63298,63299],{"class":40},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[34,63301,63302,63304,63306,63308,63310,63312,63314],{"class":36,"line":33350},[34,63303,63269],{"class":59},[34,63305,58274],{"class":2427},[34,63307,617],{"class":59},[34,63309,61849],{"class":187},[34,63311,12899],{"class":59},[34,63313,54910],{"class":112},[34,63315,54913],{"class":59},[34,63317,63318,63320,63322],{"class":36,"line":33356},[34,63319,63286],{"class":59},[34,63321,447],{"class":112},[34,63323,47794],{"class":63},[34,63325,63326],{"class":36,"line":33367},[34,63327,33923],{"class":59},[34,63329,63330],{"class":36,"line":33373},[34,63331,63332],{"class":40},"    \u002F\u002F 3. 检测用户输入\n",[34,63334,63335,63337,63339,63341,63344,63346,63348],{"class":36,"line":33392},[34,63336,63269],{"class":59},[34,63338,58274],{"class":2427},[34,63340,617],{"class":59},[34,63342,63343],{"class":187},"'input'",[34,63345,12899],{"class":59},[34,63347,54910],{"class":112},[34,63349,54913],{"class":59},[34,63351,63352],{"class":36,"line":33398},[34,63353,63354],{"class":40},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[34,63356,63357,63360,63362,63365,63368,63370,63373,63375,63377],{"class":36,"line":33409},[34,63358,63359],{"class":59},"      total.innerHTML ",[34,63361,447],{"class":112},[34,63363,63364],{"class":187}," `${",[34,63366,63367],{"class":59},"tx",[34,63369,1164],{"class":187},[34,63371,63372],{"class":59},"value",[34,63374,1164],{"class":187},[34,63376,52429],{"class":63},[34,63378,63379],{"class":187},"}\u002F200字`\n",[34,63381,63382],{"class":36,"line":33415},[34,63383,33923],{"class":59},[34,63385,63386],{"class":36,"line":33435},[34,63387,2864],{"emptyLinePlaceholder":540},[34,63389,63390],{"class":36,"line":33451},[34,63391,63392],{"class":40},"    \u002F\u002F const str = 'andy'\n",[34,63394,63395],{"class":36,"line":33457},[34,63396,63397],{"class":40},"    \u002F\u002F console.log(str.length)\n",[34,63399,63400,63402,63404],{"class":36,"line":33471},[34,63401,52878],{"class":59},[34,63403,52274],{"class":51761},[34,63405,51768],{"class":59},[34,63407,63408,63410,63412],{"class":36,"line":33477},[34,63409,52246],{"class":59},[34,63411,52261],{"class":51761},[34,63413,51768],{"class":59},[34,63415,63416],{"class":36,"line":33483},[34,63417,2864],{"emptyLinePlaceholder":540},[34,63419,63420,63422,63424],{"class":36,"line":33494},[34,63421,52246],{"class":59},[34,63423,51096],{"class":51761},[34,63425,51768],{"class":59},[22462,63427,63429],{"id":63428},"_3254-change事件","3.2.5.4 change事件",[14,63431,63432],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63434,63435],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63437,63438],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[25,63440,63442],{"className":51094,"code":63441,"language":51096,"meta":22,"style":22},"\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",[31,63443,63444,63454,63468,63472,63480,63494,63514,63526,63534,63538,63546,63560,63568,63586,63604,63616,63620,63628,63636,63640],{"__ignoreMap":22},[34,63445,63446,63448,63450,63452],{"class":36,"line":37},[34,63447,51758],{"class":59},[34,63449,51762],{"class":51761},[34,63451,51765],{"class":2427},[34,63453,51768],{"class":59},[34,63455,63456,63458,63460,63462,63464,63466],{"class":36,"line":44},[34,63457,1515],{"class":59},[34,63459,51096],{"class":51761},[34,63461,51777],{"class":2427},[34,63463,447],{"class":59},[34,63465,51782],{"class":187},[34,63467,51768],{"class":59},[34,63469,63470],{"class":36,"line":50},[34,63471,2864],{"emptyLinePlaceholder":540},[34,63473,63474,63476,63478],{"class":36,"line":56},[34,63475,1515],{"class":59},[34,63477,51795],{"class":51761},[34,63479,51768],{"class":59},[34,63481,63482,63484,63486,63488,63490,63492],{"class":36,"line":107},[34,63483,52605],{"class":59},[34,63485,51805],{"class":51761},[34,63487,51808],{"class":2427},[34,63489,447],{"class":59},[34,63491,51813],{"class":187},[34,63493,51768],{"class":59},[34,63495,63496,63498,63500,63502,63504,63506,63508,63510,63512],{"class":36,"line":196},[34,63497,52605],{"class":59},[34,63499,51805],{"class":51761},[34,63501,15384],{"class":2427},[34,63503,447],{"class":59},[34,63505,51852],{"class":187},[34,63507,51832],{"class":2427},[34,63509,447],{"class":59},[34,63511,51859],{"class":187},[34,63513,51768],{"class":59},[34,63515,63516,63518,63520,63522,63524],{"class":36,"line":202},[34,63517,52605],{"class":59},[34,63519,51868],{"class":51761},[34,63521,51871],{"class":59},[34,63523,51868],{"class":51761},[34,63525,51768],{"class":59},[34,63527,63528,63530,63532],{"class":36,"line":207},[34,63529,52246],{"class":59},[34,63531,51795],{"class":51761},[34,63533,51768],{"class":59},[34,63535,63536],{"class":36,"line":222},[34,63537,2864],{"emptyLinePlaceholder":540},[34,63539,63540,63542,63544],{"class":36,"line":227},[34,63541,1515],{"class":59},[34,63543,52261],{"class":51761},[34,63545,51768],{"class":59},[34,63547,63548,63550,63552,63554,63556,63558],{"class":36,"line":232},[34,63549,52605],{"class":59},[34,63551,54282],{"class":51761},[34,63553,54285],{"class":2427},[34,63555,447],{"class":59},[34,63557,63160],{"class":187},[34,63559,51768],{"class":59},[34,63561,63562,63564,63566],{"class":36,"line":238},[34,63563,52605],{"class":59},[34,63565,52274],{"class":51761},[34,63567,51768],{"class":59},[34,63569,63570,63572,63574,63576,63578,63580,63582,63584],{"class":36,"line":244},[34,63571,11685],{"class":112},[34,63573,61066],{"class":63},[34,63575,14028],{"class":112},[34,63577,54857],{"class":59},[34,63579,54860],{"class":2427},[34,63581,617],{"class":59},[34,63583,63343],{"class":187},[34,63585,623],{"class":59},[34,63587,63588,63591,63593,63595,63598,63600,63602],{"class":36,"line":250},[34,63589,63590],{"class":59},"    input.",[34,63592,58274],{"class":2427},[34,63594,617],{"class":59},[34,63596,63597],{"class":187},"'change'",[34,63599,12899],{"class":59},[34,63601,54910],{"class":112},[34,63603,54913],{"class":59},[34,63605,63606,63608,63610,63612,63614],{"class":36,"line":256},[34,63607,58705],{"class":59},[34,63609,58708],{"class":2427},[34,63611,617],{"class":59},[34,63613,1199],{"class":63},[34,63615,623],{"class":59},[34,63617,63618],{"class":36,"line":261},[34,63619,33923],{"class":59},[34,63621,63622,63624,63626],{"class":36,"line":267},[34,63623,52878],{"class":59},[34,63625,52274],{"class":51761},[34,63627,51768],{"class":59},[34,63629,63630,63632,63634],{"class":36,"line":2138},[34,63631,52246],{"class":59},[34,63633,52261],{"class":51761},[34,63635,51768],{"class":59},[34,63637,63638],{"class":36,"line":2143},[34,63639,2864],{"emptyLinePlaceholder":540},[34,63641,63642,63644,63646],{"class":36,"line":2157},[34,63643,52246],{"class":59},[34,63645,51096],{"class":51761},[34,63647,51768],{"class":59},[14,63649,63650],{},"总结：内容发生改变才回去触发",[584,63652,63654],{"id":63653},"_326-事件对象","3.2.6 事件对象",[22462,63656,63658],{"id":63657},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63660,63661],{},[20,63662],{"alt":22,"src":63663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63665,63666],{},[20,63667],{"alt":22,"src":63668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63670,63671],{},"点击一次，就输出了事件对象，它是个对象",[14,63673,63674],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63676,63677],{},[20,63678],{"alt":22,"src":63679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22462,63681,63683],{"id":63682},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63685,63686],{},[20,63687],{"alt":22,"src":63688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63690,63691],{},"实现按特殊字符才是实现打印输出效果：",[25,63693,63695],{"className":53528,"code":63694,"language":53530,"meta":22,"style":22},"\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",[31,63696,63697,63705,63710,63724,63732,63737,63742,63747,63752,63757,63762,63767,63772,63777,63781,63785,63793],{"__ignoreMap":22},[34,63698,63699,63701,63703],{"class":36,"line":37},[34,63700,1515],{"class":59},[34,63702,52261],{"class":51761},[34,63704,51768],{"class":59},[34,63706,63707],{"class":36,"line":44},[34,63708,63709],{"class":40},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[34,63711,63712,63714,63716,63718,63720,63722],{"class":36,"line":50},[34,63713,52605],{"class":59},[34,63715,54282],{"class":51761},[34,63717,54285],{"class":2427},[34,63719,447],{"class":59},[34,63721,63160],{"class":187},[34,63723,51768],{"class":59},[34,63725,63726,63728,63730],{"class":36,"line":56},[34,63727,52605],{"class":59},[34,63729,52274],{"class":51761},[34,63731,51768],{"class":59},[34,63733,63734],{"class":36,"line":107},[34,63735,63736],{"class":59},"    \u002F\u002F const btn = document.querySelector('button')\n",[34,63738,63739],{"class":36,"line":196},[34,63740,63741],{"class":59},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[34,63743,63744],{"class":36,"line":202},[34,63745,63746],{"class":59},"    \u002F\u002F   console.log(e);\n",[34,63748,63749],{"class":36,"line":207},[34,63750,63751],{"class":59},"    \u002F\u002F })\n",[34,63753,63754],{"class":36,"line":222},[34,63755,63756],{"class":59},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[34,63758,63759],{"class":36,"line":227},[34,63760,63761],{"class":59},"    const input = document.querySelector('input')\n",[34,63763,63764],{"class":36,"line":232},[34,63765,63766],{"class":59},"    input.addEventListener('keyup', function (e) {\n",[34,63768,63769],{"class":36,"line":238},[34,63770,63771],{"class":59},"      if (e.key === 'Enter') {\n",[34,63773,63774],{"class":36,"line":244},[34,63775,63776],{"class":59},"        console.log('我按下了回车键')\n",[34,63778,63779],{"class":36,"line":250},[34,63780,52859],{"class":59},[34,63782,63783],{"class":36,"line":256},[34,63784,33923],{"class":59},[34,63786,63787,63789,63791],{"class":36,"line":261},[34,63788,52878],{"class":59},[34,63790,52274],{"class":51761},[34,63792,51768],{"class":59},[34,63794,63795,63797,63799],{"class":36,"line":267},[34,63796,52246],{"class":59},[34,63798,52261],{"class":51761},[34,63800,51768],{"class":59},[22462,63802,63804],{"id":63803},"_3263-trim方法","3.2.6.3 trim方法",[14,63806,63807],{},[20,63808],{"alt":22,"src":63809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63811,63812],{},[20,63813],{"alt":22,"src":63814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63816,63817],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63819,63820],{},"str.trim()",[584,63822,63824],{"id":63823},"_327-环境对象","3.2.7 环境对象",[14,63826,63827],{},[20,63828],{"alt":22,"src":63829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63831,63832],{},[20,63833],{"alt":22,"src":63834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63836,63837],{},[20,63838],{"alt":22,"src":63839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63841,63842],{},"实际函数调用是window.fn()",[14,63844,63845],{},"普通函数里面this指向的是window",[1611,63847,63848,63851,63854],{},[570,63849,63850],{},"在普通函数下，this指向的是window",[570,63852,63853],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[570,63855,63856],{},"箭头函数没有this",[14,63858,63859],{},"粗略记法就是：谁调用，this就指向谁",[14,63861,63862],{},[20,63863],{"alt":22,"src":63864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63866,63867],{},[20,63868],{"alt":22,"src":63869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63871,63872],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63874,63875],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[25,63877,63879],{"className":53528,"code":63878,"language":53530,"meta":22,"style":22},"\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",[31,63880,63881,63889,63901,63909,63914,63919,63924,63929,63933,63941],{"__ignoreMap":22},[34,63882,63883,63885,63887],{"class":36,"line":37},[34,63884,1515],{"class":59},[34,63886,52261],{"class":51761},[34,63888,51768],{"class":59},[34,63890,63891,63893,63895,63897,63899],{"class":36,"line":44},[34,63892,52605],{"class":59},[34,63894,54348],{"class":51761},[34,63896,54354],{"class":59},[34,63898,54348],{"class":51761},[34,63900,51768],{"class":59},[34,63902,63903,63905,63907],{"class":36,"line":50},[34,63904,52605],{"class":59},[34,63906,52274],{"class":51761},[34,63908,51768],{"class":59},[34,63910,63911],{"class":36,"line":56},[34,63912,63913],{"class":59},"    const button = document.querySelector('button')\n",[34,63915,63916],{"class":36,"line":107},[34,63917,63918],{"class":59},"    button.addEventListener('click', function () {\n",[34,63920,63921],{"class":36,"line":196},[34,63922,63923],{"class":59},"      \u002F\u002F console.log(this);\n",[34,63925,63926],{"class":36,"line":202},[34,63927,63928],{"class":59},"      this.style.color = 'pink'\n",[34,63930,63931],{"class":36,"line":207},[34,63932,33923],{"class":59},[34,63934,63935,63937,63939],{"class":36,"line":222},[34,63936,52878],{"class":59},[34,63938,52274],{"class":51761},[34,63940,51768],{"class":59},[34,63942,63943,63945,63947],{"class":36,"line":227},[34,63944,52246],{"class":59},[34,63946,52261],{"class":51761},[34,63948,51768],{"class":59},[584,63950,63952],{"id":63951},"_328-回调函数","3.2.8 回调函数",[14,63954,63955],{},[20,63956],{"alt":22,"src":63957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63959,63960],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63962,11796],{},[1611,63964,63965,63968,63971],{},[570,63966,63967],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[570,63969,63970],{},"回调函数本质还是函数，只不过把它当成参数使用",[570,63972,63973],{},"使用匿名函数做为回调函数比较常见",[584,63975,63977],{"id":63976},"_329-tab栏切换","3.2.9 tab栏切换",[14,63979,63980],{},[20,63981],{"alt":22,"src":63982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[25,63984,63986],{"className":51094,"code":63985,"language":51096,"meta":22,"style":22},"\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",[31,63987,63988,63998,64012,64016,64024,64038,64058,64078,64091,64099,64105,64115,64125,64129,64133,64140,64153,64166,64178,64194,64198,64202,64209,64221,64233,64245,64255,64265,64269,64273,64282,64294,64305,64317,64321,64325,64333,64343,64353,64363,64367,64371,64381,64395,64407,64411,64415,64427,64438,64455,64465,64469,64473,64488,64499,64509,64513,64517,64524,64539,64543,64547,64555,64565,64569,64573,64582,64592,64596,64604,64612,64616,64624,64639,64654,64667,64675,64709,64736,64763,64790,64817,64825,64833,64848,64885,64920,64955,64990,65025,65033,65041,65049,65054,65059,65079,65084,65113,65118,65123,65141,65146,65151,65156,65178,65183,65199,65203,65208,65213,65234,65239,65268,65272,65277,65281,65289,65297,65301],{"__ignoreMap":22},[34,63989,63990,63992,63994,63996],{"class":36,"line":37},[34,63991,51758],{"class":59},[34,63993,51762],{"class":51761},[34,63995,51765],{"class":2427},[34,63997,51768],{"class":59},[34,63999,64000,64002,64004,64006,64008,64010],{"class":36,"line":44},[34,64001,1515],{"class":59},[34,64003,51096],{"class":51761},[34,64005,51777],{"class":2427},[34,64007,447],{"class":59},[34,64009,51782],{"class":187},[34,64011,51768],{"class":59},[34,64013,64014],{"class":36,"line":50},[34,64015,2864],{"emptyLinePlaceholder":540},[34,64017,64018,64020,64022],{"class":36,"line":56},[34,64019,1515],{"class":59},[34,64021,51795],{"class":51761},[34,64023,51768],{"class":59},[34,64025,64026,64028,64030,64032,64034,64036],{"class":36,"line":107},[34,64027,52605],{"class":59},[34,64029,51805],{"class":51761},[34,64031,51808],{"class":2427},[34,64033,447],{"class":59},[34,64035,51813],{"class":187},[34,64037,59588],{"class":59},[34,64039,64040,64042,64044,64046,64048,64050,64052,64054,64056],{"class":36,"line":196},[34,64041,52605],{"class":59},[34,64043,51805],{"class":51761},[34,64045,51824],{"class":2427},[34,64047,447],{"class":59},[34,64049,51829],{"class":187},[34,64051,51832],{"class":2427},[34,64053,447],{"class":59},[34,64055,51837],{"class":187},[34,64057,59588],{"class":59},[34,64059,64060,64062,64064,64066,64068,64070,64072,64074,64076],{"class":36,"line":202},[34,64061,52605],{"class":59},[34,64063,51805],{"class":51761},[34,64065,15384],{"class":2427},[34,64067,447],{"class":59},[34,64069,51852],{"class":187},[34,64071,51832],{"class":2427},[34,64073,447],{"class":59},[34,64075,51859],{"class":187},[34,64077,59588],{"class":59},[34,64079,64080,64082,64084,64087,64089],{"class":36,"line":207},[34,64081,52605],{"class":59},[34,64083,51868],{"class":51761},[34,64085,64086],{"class":59},">tab栏切换\u003C\u002F",[34,64088,51868],{"class":51761},[34,64090,51768],{"class":59},[34,64092,64093,64095,64097],{"class":36,"line":222},[34,64094,52605],{"class":59},[34,64096,532],{"class":51761},[34,64098,51768],{"class":59},[34,64100,64101,64103],{"class":36,"line":227},[34,64102,6867],{"class":51761},[34,64104,16036],{"class":59},[34,64106,64107,64109,64111,64113],{"class":36,"line":232},[34,64108,55167],{"class":63},[34,64110,51898],{"class":59},[34,64112,319],{"class":63},[34,64114,1765],{"class":59},[34,64116,64117,64119,64121,64123],{"class":36,"line":238},[34,64118,55156],{"class":63},[34,64120,51898],{"class":59},[34,64122,319],{"class":63},[34,64124,1765],{"class":59},[34,64126,64127],{"class":36,"line":244},[34,64128,2651],{"class":59},[34,64130,64131],{"class":36,"line":250},[34,64132,2864],{"emptyLinePlaceholder":540},[34,64134,64135,64138],{"class":36,"line":256},[34,64136,64137],{"class":2427},"    .tab",[34,64139,16036],{"class":59},[34,64141,64142,64144,64146,64149,64151],{"class":36,"line":261},[34,64143,55232],{"class":63},[34,64145,51898],{"class":59},[34,64147,64148],{"class":63},"590",[34,64150,51953],{"class":112},[34,64152,1765],{"class":59},[34,64154,64155,64157,64159,64162,64164],{"class":36,"line":267},[34,64156,55246],{"class":63},[34,64158,51898],{"class":59},[34,64160,64161],{"class":63},"340",[34,64163,51953],{"class":112},[34,64165,1765],{"class":59},[34,64167,64168,64170,64172,64174,64176],{"class":36,"line":2138},[34,64169,55167],{"class":63},[34,64171,51898],{"class":59},[34,64173,1306],{"class":63},[34,64175,51953],{"class":112},[34,64177,1765],{"class":59},[34,64179,64180,64182,64184,64186,64188,64190,64192],{"class":36,"line":2143},[34,64181,62438],{"class":63},[34,64183,51898],{"class":59},[34,64185,64],{"class":63},[34,64187,51953],{"class":112},[34,64189,51982],{"class":63},[34,64191,62705],{"class":63},[34,64193,1765],{"class":59},[34,64195,64196],{"class":36,"line":2157},[34,64197,2651],{"class":59},[34,64199,64200],{"class":36,"line":2162},[34,64201,2864],{"emptyLinePlaceholder":540},[34,64203,64204,64207],{"class":36,"line":2191},[34,64205,64206],{"class":2427},"    .tab-nav",[34,64208,16036],{"class":59},[34,64210,64211,64213,64215,64217,64219],{"class":36,"line":2196},[34,64212,55232],{"class":63},[34,64214,51898],{"class":59},[34,64216,919],{"class":63},[34,64218,936],{"class":112},[34,64220,1765],{"class":59},[34,64222,64223,64225,64227,64229,64231],{"class":36,"line":2213},[34,64224,55246],{"class":63},[34,64226,51898],{"class":59},[34,64228,1512],{"class":63},[34,64230,51953],{"class":112},[34,64232,1765],{"class":59},[34,64234,64235,64237,64239,64241,64243],{"class":36,"line":2218},[34,64236,57820],{"class":63},[34,64238,51898],{"class":59},[34,64240,1512],{"class":63},[34,64242,51953],{"class":112},[34,64244,1765],{"class":59},[34,64246,64247,64249,64251,64253],{"class":36,"line":2223},[34,64248,55470],{"class":63},[34,64250,51898],{"class":59},[34,64252,51938],{"class":63},[34,64254,1765],{"class":59},[34,64256,64257,64259,64261,64263],{"class":36,"line":2228},[34,64258,55481],{"class":63},[34,64260,51898],{"class":59},[34,64262,52129],{"class":63},[34,64264,1765],{"class":59},[34,64266,64267],{"class":36,"line":2242},[34,64268,2651],{"class":59},[34,64270,64271],{"class":36,"line":2247},[34,64272,2864],{"emptyLinePlaceholder":540},[34,64274,64275,64277,64280],{"class":36,"line":3041},[34,64276,64206],{"class":2427},[34,64278,64279],{"class":51761}," h3",[34,64281,16036],{"class":59},[34,64283,64284,64286,64288,64290,64292],{"class":36,"line":3055},[34,64285,55383],{"class":63},[34,64287,51898],{"class":59},[34,64289,1406],{"class":63},[34,64291,51953],{"class":112},[34,64293,1765],{"class":59},[34,64295,64296,64298,64300,64303],{"class":36,"line":3063},[34,64297,62795],{"class":63},[34,64299,51898],{"class":59},[34,64301,64302],{"class":63},"normal",[34,64304,1765],{"class":59},[34,64306,64307,64309,64311,64313,64315],{"class":36,"line":3068},[34,64308,62461],{"class":63},[34,64310,51898],{"class":59},[34,64312,1306],{"class":63},[34,64314,51953],{"class":112},[34,64316,1765],{"class":59},[34,64318,64319],{"class":36,"line":3074},[34,64320,2651],{"class":59},[34,64322,64323],{"class":36,"line":3080},[34,64324,2864],{"emptyLinePlaceholder":540},[34,64326,64327,64329,64331],{"class":36,"line":3085},[34,64328,64206],{"class":2427},[34,64330,61753],{"class":51761},[34,64332,16036],{"class":59},[34,64334,64335,64337,64339,64341],{"class":36,"line":8412},[34,64336,55193],{"class":63},[34,64338,51898],{"class":59},[34,64340,55198],{"class":63},[34,64342,1765],{"class":59},[34,64344,64345,64347,64349,64351],{"class":36,"line":8436},[34,64346,55470],{"class":63},[34,64348,51898],{"class":59},[34,64350,51938],{"class":63},[34,64352,1765],{"class":59},[34,64354,64355,64357,64359,64361],{"class":36,"line":8441},[34,64356,55481],{"class":63},[34,64358,51898],{"class":59},[34,64360,52041],{"class":63},[34,64362,1765],{"class":59},[34,64364,64365],{"class":36,"line":8447},[34,64366,2651],{"class":59},[34,64368,64369],{"class":36,"line":8474},[34,64370,2864],{"emptyLinePlaceholder":540},[34,64372,64373,64375,64377,64379],{"class":36,"line":8479},[34,64374,64206],{"class":2427},[34,64376,61753],{"class":51761},[34,64378,55536],{"class":51761},[34,64380,16036],{"class":59},[34,64382,64383,64385,64387,64389,64391,64393],{"class":36,"line":8485},[34,64384,55167],{"class":63},[34,64386,51898],{"class":59},[34,64388,319],{"class":63},[34,64390,9414],{"class":63},[34,64392,51953],{"class":112},[34,64394,1765],{"class":59},[34,64396,64397,64399,64401,64403,64405],{"class":36,"line":8497},[34,64398,55383],{"class":63},[34,64400,51898],{"class":59},[34,64402,1155],{"class":63},[34,64404,51953],{"class":112},[34,64406,1765],{"class":59},[34,64408,64409],{"class":36,"line":8509},[34,64410,2651],{"class":59},[34,64412,64413],{"class":36,"line":8521},[34,64414,2864],{"emptyLinePlaceholder":540},[34,64416,64417,64419,64421,64423,64425],{"class":36,"line":10180},[34,64418,64206],{"class":2427},[34,64420,61753],{"class":51761},[34,64422,55536],{"class":51761},[34,64424,1870],{"class":51761},[34,64426,16036],{"class":59},[34,64428,64429,64432,64434,64436],{"class":36,"line":10205},[34,64430,64431],{"class":63},"      text-decoration",[34,64433,51898],{"class":59},[34,64435,55198],{"class":63},[34,64437,1765],{"class":59},[34,64439,64440,64442,64444,64446,64448,64450,64453],{"class":36,"line":10228},[34,64441,62693],{"class":63},[34,64443,51898],{"class":59},[34,64445,70],{"class":63},[34,64447,51953],{"class":112},[34,64449,51982],{"class":63},[34,64451,64452],{"class":63}," transparent",[34,64454,1765],{"class":59},[34,64456,64457,64459,64461,64463],{"class":36,"line":10252},[34,64458,57877],{"class":63},[34,64460,51898],{"class":59},[34,64462,62830],{"class":63},[34,64464,1765],{"class":59},[34,64466,64467],{"class":36,"line":10257},[34,64468,2651],{"class":59},[34,64470,64471],{"class":36,"line":10262},[34,64472,2864],{"emptyLinePlaceholder":540},[34,64474,64475,64477,64479,64481,64483,64486],{"class":36,"line":10267},[34,64476,64206],{"class":2427},[34,64478,61753],{"class":51761},[34,64480,55536],{"class":51761},[34,64482,1870],{"class":51761},[34,64484,64485],{"class":2427},".active",[34,64487,16036],{"class":59},[34,64489,64490,64492,64494,64497],{"class":36,"line":10276},[34,64491,62252],{"class":63},[34,64493,51898],{"class":59},[34,64495,64496],{"class":63},"#e1251b",[34,64498,1765],{"class":59},[34,64500,64501,64503,64505,64507],{"class":36,"line":10281},[34,64502,57877],{"class":63},[34,64504,51898],{"class":59},[34,64506,64496],{"class":63},[34,64508,1765],{"class":59},[34,64510,64511],{"class":36,"line":10287},[34,64512,2651],{"class":59},[34,64514,64515],{"class":36,"line":10308},[34,64516,2864],{"emptyLinePlaceholder":540},[34,64518,64519,64522],{"class":36,"line":10314},[34,64520,64521],{"class":2427},"    .tab-content",[34,64523,16036],{"class":59},[34,64525,64526,64528,64530,64532,64535,64537],{"class":36,"line":10328},[34,64527,55156],{"class":63},[34,64529,51898],{"class":59},[34,64531,319],{"class":63},[34,64533,64534],{"class":63}," 16",[34,64536,51953],{"class":112},[34,64538,1765],{"class":59},[34,64540,64541],{"class":36,"line":10334},[34,64542,2651],{"class":59},[34,64544,64545],{"class":36,"line":10361},[34,64546,2864],{"emptyLinePlaceholder":540},[34,64548,64549,64551,64553],{"class":36,"line":10370},[34,64550,64521],{"class":2427},[34,64552,62635],{"class":2427},[34,64554,16036],{"class":59},[34,64556,64557,64559,64561,64563],{"class":36,"line":10376},[34,64558,55470],{"class":63},[34,64560,51898],{"class":59},[34,64562,55198],{"class":63},[34,64564,1765],{"class":59},[34,64566,64567],{"class":36,"line":10384},[34,64568,2651],{"class":59},[34,64570,64571],{"class":36,"line":10389},[34,64572,2864],{"emptyLinePlaceholder":540},[34,64574,64575,64577,64580],{"class":36,"line":17068},[34,64576,64521],{"class":2427},[34,64578,64579],{"class":2427}," .item.active",[34,64581,16036],{"class":59},[34,64583,64584,64586,64588,64590],{"class":36,"line":17074},[34,64585,55470],{"class":63},[34,64587,51898],{"class":59},[34,64589,61330],{"class":63},[34,64591,1765],{"class":59},[34,64593,64594],{"class":36,"line":17097},[34,64595,2651],{"class":59},[34,64597,64598,64600,64602],{"class":36,"line":17103},[34,64599,52878],{"class":59},[34,64601,532],{"class":51761},[34,64603,51768],{"class":59},[34,64605,64606,64608,64610],{"class":36,"line":17126},[34,64607,52246],{"class":59},[34,64609,51795],{"class":51761},[34,64611,51768],{"class":59},[34,64613,64614],{"class":36,"line":17140},[34,64615,2864],{"emptyLinePlaceholder":540},[34,64617,64618,64620,64622],{"class":36,"line":17160},[34,64619,1515],{"class":59},[34,64621,52261],{"class":51761},[34,64623,51768],{"class":59},[34,64625,64626,64628,64630,64632,64634,64637],{"class":36,"line":17166},[34,64627,52605],{"class":59},[34,64629,52072],{"class":51761},[34,64631,53947],{"class":2427},[34,64633,447],{"class":59},[34,64635,64636],{"class":187},"\"tab\"",[34,64638,51768],{"class":59},[34,64640,64641,64643,64645,64647,64649,64652],{"class":36,"line":17177},[34,64642,51802],{"class":59},[34,64644,52072],{"class":51761},[34,64646,53947],{"class":2427},[34,64648,447],{"class":59},[34,64650,64651],{"class":187},"\"tab-nav\"",[34,64653,51768],{"class":59},[34,64655,64656,64658,64660,64663,64665],{"class":36,"line":17200},[34,64657,55695],{"class":59},[34,64659,584],{"class":51761},[34,64661,64662],{"class":59},">每日特价\u003C\u002F",[34,64664,584],{"class":51761},[34,64666,51768],{"class":59},[34,64668,64669,64671,64673],{"class":36,"line":17222},[34,64670,55695],{"class":59},[34,64672,1611],{"class":51761},[34,64674,51768],{"class":59},[34,64676,64677,64679,64681,64683,64685,64687,64689,64691,64693,64695,64698,64701,64703,64705,64707],{"class":36,"line":17227},[34,64678,55763],{"class":59},[34,64680,570],{"class":51761},[34,64682,61513],{"class":59},[34,64684,847],{"class":51761},[34,64686,53947],{"class":2427},[34,64688,447],{"class":59},[34,64690,60167],{"class":187},[34,64692,61518],{"class":2427},[34,64694,447],{"class":59},[34,64696,64697],{"class":187},"\"javascript:;\"",[34,64699,64700],{"class":59},">精选\u003C\u002F",[34,64702,847],{"class":51761},[34,64704,55775],{"class":59},[34,64706,570],{"class":51761},[34,64708,51768],{"class":59},[34,64710,64711,64713,64715,64717,64719,64721,64723,64725,64728,64730,64732,64734],{"class":36,"line":17233},[34,64712,55763],{"class":59},[34,64714,570],{"class":51761},[34,64716,61513],{"class":59},[34,64718,847],{"class":51761},[34,64720,61518],{"class":2427},[34,64722,447],{"class":59},[34,64724,64697],{"class":187},[34,64726,64727],{"class":59},">美食\u003C\u002F",[34,64729,847],{"class":51761},[34,64731,55775],{"class":59},[34,64733,570],{"class":51761},[34,64735,51768],{"class":59},[34,64737,64738,64740,64742,64744,64746,64748,64750,64752,64755,64757,64759,64761],{"class":36,"line":17247},[34,64739,55763],{"class":59},[34,64741,570],{"class":51761},[34,64743,61513],{"class":59},[34,64745,847],{"class":51761},[34,64747,61518],{"class":2427},[34,64749,447],{"class":59},[34,64751,64697],{"class":187},[34,64753,64754],{"class":59},">百货\u003C\u002F",[34,64756,847],{"class":51761},[34,64758,55775],{"class":59},[34,64760,570],{"class":51761},[34,64762,51768],{"class":59},[34,64764,64765,64767,64769,64771,64773,64775,64777,64779,64782,64784,64786,64788],{"class":36,"line":17260},[34,64766,55763],{"class":59},[34,64768,570],{"class":51761},[34,64770,61513],{"class":59},[34,64772,847],{"class":51761},[34,64774,61518],{"class":2427},[34,64776,447],{"class":59},[34,64778,64697],{"class":187},[34,64780,64781],{"class":59},">个护\u003C\u002F",[34,64783,847],{"class":51761},[34,64785,55775],{"class":59},[34,64787,570],{"class":51761},[34,64789,51768],{"class":59},[34,64791,64792,64794,64796,64798,64800,64802,64804,64806,64809,64811,64813,64815],{"class":36,"line":17265},[34,64793,55763],{"class":59},[34,64795,570],{"class":51761},[34,64797,61513],{"class":59},[34,64799,847],{"class":51761},[34,64801,61518],{"class":2427},[34,64803,447],{"class":59},[34,64805,64697],{"class":187},[34,64807,64808],{"class":59},">预告\u003C\u002F",[34,64810,847],{"class":51761},[34,64812,55775],{"class":59},[34,64814,570],{"class":51761},[34,64816,51768],{"class":59},[34,64818,64819,64821,64823],{"class":36,"line":17279},[34,64820,55868],{"class":59},[34,64822,1611],{"class":51761},[34,64824,51768],{"class":59},[34,64826,64827,64829,64831],{"class":36,"line":17284},[34,64828,52237],{"class":59},[34,64830,52072],{"class":51761},[34,64832,51768],{"class":59},[34,64834,64835,64837,64839,64841,64843,64846],{"class":36,"line":17290},[34,64836,51802],{"class":59},[34,64838,52072],{"class":51761},[34,64840,53947],{"class":2427},[34,64842,447],{"class":59},[34,64844,64845],{"class":187},"\"tab-content\"",[34,64847,51768],{"class":59},[34,64849,64850,64852,64854,64856,64858,64861,64863,64865,64867,64869,64872,64874,64876,64878,64881,64883],{"class":36,"line":17295},[34,64851,55695],{"class":59},[34,64853,52072],{"class":51761},[34,64855,53947],{"class":2427},[34,64857,447],{"class":59},[34,64859,64860],{"class":187},"\"item active\"",[34,64862,61513],{"class":59},[34,64864,20],{"class":51761},[34,64866,55700],{"class":2427},[34,64868,447],{"class":59},[34,64870,64871],{"class":187},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[34,64873,55708],{"class":2427},[34,64875,447],{"class":59},[34,64877,8116],{"class":187},[34,64879,64880],{"class":59}," \u002F>\u003C\u002F",[34,64882,52072],{"class":51761},[34,64884,51768],{"class":59},[34,64886,64887,64889,64891,64893,64895,64897,64899,64901,64903,64905,64908,64910,64912,64914,64916,64918],{"class":36,"line":17309},[34,64888,55695],{"class":59},[34,64890,52072],{"class":51761},[34,64892,53947],{"class":2427},[34,64894,447],{"class":59},[34,64896,63084],{"class":187},[34,64898,61513],{"class":59},[34,64900,20],{"class":51761},[34,64902,55700],{"class":2427},[34,64904,447],{"class":59},[34,64906,64907],{"class":187},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[34,64909,55708],{"class":2427},[34,64911,447],{"class":59},[34,64913,8116],{"class":187},[34,64915,64880],{"class":59},[34,64917,52072],{"class":51761},[34,64919,51768],{"class":59},[34,64921,64922,64924,64926,64928,64930,64932,64934,64936,64938,64940,64943,64945,64947,64949,64951,64953],{"class":36,"line":17314},[34,64923,55695],{"class":59},[34,64925,52072],{"class":51761},[34,64927,53947],{"class":2427},[34,64929,447],{"class":59},[34,64931,63084],{"class":187},[34,64933,61513],{"class":59},[34,64935,20],{"class":51761},[34,64937,55700],{"class":2427},[34,64939,447],{"class":59},[34,64941,64942],{"class":187},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[34,64944,55708],{"class":2427},[34,64946,447],{"class":59},[34,64948,8116],{"class":187},[34,64950,64880],{"class":59},[34,64952,52072],{"class":51761},[34,64954,51768],{"class":59},[34,64956,64957,64959,64961,64963,64965,64967,64969,64971,64973,64975,64978,64980,64982,64984,64986,64988],{"class":36,"line":17319},[34,64958,55695],{"class":59},[34,64960,52072],{"class":51761},[34,64962,53947],{"class":2427},[34,64964,447],{"class":59},[34,64966,63084],{"class":187},[34,64968,61513],{"class":59},[34,64970,20],{"class":51761},[34,64972,55700],{"class":2427},[34,64974,447],{"class":59},[34,64976,64977],{"class":187},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[34,64979,55708],{"class":2427},[34,64981,447],{"class":59},[34,64983,8116],{"class":187},[34,64985,64880],{"class":59},[34,64987,52072],{"class":51761},[34,64989,51768],{"class":59},[34,64991,64992,64994,64996,64998,65000,65002,65004,65006,65008,65010,65013,65015,65017,65019,65021,65023],{"class":36,"line":17333},[34,64993,55695],{"class":59},[34,64995,52072],{"class":51761},[34,64997,53947],{"class":2427},[34,64999,447],{"class":59},[34,65001,63084],{"class":187},[34,65003,61513],{"class":59},[34,65005,20],{"class":51761},[34,65007,55700],{"class":2427},[34,65009,447],{"class":59},[34,65011,65012],{"class":187},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[34,65014,55708],{"class":2427},[34,65016,447],{"class":59},[34,65018,8116],{"class":187},[34,65020,64880],{"class":59},[34,65022,52072],{"class":51761},[34,65024,51768],{"class":59},[34,65026,65027,65029,65031],{"class":36,"line":17345},[34,65028,52237],{"class":59},[34,65030,52072],{"class":51761},[34,65032,51768],{"class":59},[34,65034,65035,65037,65039],{"class":36,"line":17350},[34,65036,52878],{"class":59},[34,65038,52072],{"class":51761},[34,65040,51768],{"class":59},[34,65042,65043,65045,65047],{"class":36,"line":17363},[34,65044,52605],{"class":59},[34,65046,52274],{"class":51761},[34,65048,51768],{"class":59},[34,65050,65051],{"class":36,"line":17368},[34,65052,65053],{"class":40},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[34,65055,65056],{"class":36,"line":17373},[34,65057,65058],{"class":40},"    \u002F\u002F 1.1 获取 a 元素 \n",[34,65060,65061,65063,65066,65068,65070,65072,65074,65077],{"class":36,"line":17378},[34,65062,11685],{"class":112},[34,65064,65065],{"class":63}," as",[34,65067,14028],{"class":112},[34,65069,54857],{"class":59},[34,65071,56142],{"class":2427},[34,65073,617],{"class":59},[34,65075,65076],{"class":187},"'.tab-nav a'",[34,65078,623],{"class":59},[34,65080,65081],{"class":36,"line":17391},[34,65082,65083],{"class":40},"    \u002F\u002F console.log(as) \n",[34,65085,65086,65088,65090,65092,65094,65096,65098,65100,65102,65105,65107,65109,65111],{"class":36,"line":17396},[34,65087,3665],{"class":112},[34,65089,2122],{"class":59},[34,65091,52308],{"class":112},[34,65093,9902],{"class":59},[34,65095,447],{"class":112},[34,65097,4557],{"class":63},[34,65099,9909],{"class":59},[34,65101,1515],{"class":112},[34,65103,65104],{"class":59}," as.",[34,65106,52429],{"class":63},[34,65108,3678],{"class":59},[34,65110,2756],{"class":112},[34,65112,12906],{"class":59},[34,65114,65115],{"class":36,"line":33096},[34,65116,65117],{"class":40},"      \u002F\u002F console.log(as[i])\n",[34,65119,65120],{"class":36,"line":33102},[34,65121,65122],{"class":40},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[34,65124,65125,65128,65130,65132,65135,65137,65139],{"class":36,"line":33108},[34,65126,65127],{"class":59},"      as[i].",[34,65129,58274],{"class":2427},[34,65131,617],{"class":59},[34,65133,65134],{"class":187},"'mouseenter'",[34,65136,12899],{"class":59},[34,65138,54910],{"class":112},[34,65140,54913],{"class":59},[34,65142,65143],{"class":36,"line":33114},[34,65144,65145],{"class":40},"        \u002F\u002F console.log('鼠标经过')\n",[34,65147,65148],{"class":36,"line":33120},[34,65149,65150],{"class":40},"        \u002F\u002F 排他思想  \n",[34,65152,65153],{"class":36,"line":33131},[34,65154,65155],{"class":40},"        \u002F\u002F 干掉别人 移除类active\n",[34,65157,65158,65160,65162,65164,65167,65169,65171,65173,65176],{"class":36,"line":33137},[34,65159,52386],{"class":59},[34,65161,54860],{"class":2427},[34,65163,617],{"class":59},[34,65165,65166],{"class":187},"'.tab-nav .active'",[34,65168,57464],{"class":59},[34,65170,57467],{"class":2427},[34,65172,617],{"class":59},[34,65174,65175],{"class":187},"'active'",[34,65177,623],{"class":59},[34,65179,65180],{"class":36,"line":33157},[34,65181,65182],{"class":40},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[34,65184,65185,65188,65191,65193,65195,65197],{"class":36,"line":33163},[34,65186,65187],{"class":63},"        this",[34,65189,65190],{"class":59},".classList.",[34,65192,5798],{"class":2427},[34,65194,617],{"class":59},[34,65196,65175],{"class":187},[34,65198,623],{"class":59},[34,65200,65201],{"class":36,"line":33174},[34,65202,2864],{"emptyLinePlaceholder":540},[34,65204,65205],{"class":36,"line":33180},[34,65206,65207],{"class":40},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[34,65209,65210],{"class":36,"line":33186},[34,65211,65212],{"class":40},"        \u002F\u002F 干掉别人\n",[34,65214,65215,65217,65219,65221,65224,65226,65228,65230,65232],{"class":36,"line":33192},[34,65216,52386],{"class":59},[34,65218,54860],{"class":2427},[34,65220,617],{"class":59},[34,65222,65223],{"class":187},"'.tab-content .active'",[34,65225,57464],{"class":59},[34,65227,57467],{"class":2427},[34,65229,617],{"class":59},[34,65231,65175],{"class":187},[34,65233,623],{"class":59},[34,65235,65236],{"class":36,"line":33198},[34,65237,65238],{"class":40},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[34,65240,65241,65243,65245,65247,65250,65252,65254,65256,65258,65260,65262,65264,65266],{"class":36,"line":33204},[34,65242,52386],{"class":59},[34,65244,54860],{"class":2427},[34,65246,617],{"class":59},[34,65248,65249],{"class":187},"`.tab-content .item:nth-child(${",[34,65251,1048],{"class":59},[34,65253,46027],{"class":112},[34,65255,25583],{"class":63},[34,65257,57493],{"class":187},[34,65259,57464],{"class":59},[34,65261,5798],{"class":2427},[34,65263,617],{"class":59},[34,65265,65175],{"class":187},[34,65267,623],{"class":59},[34,65269,65270],{"class":36,"line":33210},[34,65271,2864],{"emptyLinePlaceholder":540},[34,65273,65274],{"class":36,"line":33216},[34,65275,65276],{"class":59},"      })\n",[34,65278,65279],{"class":36,"line":33236},[34,65280,2651],{"class":59},[34,65282,65283,65285,65287],{"class":36,"line":33242},[34,65284,52878],{"class":59},[34,65286,52274],{"class":51761},[34,65288,51768],{"class":59},[34,65290,65291,65293,65295],{"class":36,"line":33258},[34,65292,52246],{"class":59},[34,65294,52261],{"class":51761},[34,65296,51768],{"class":59},[34,65298,65299],{"class":36,"line":33264},[34,65300,2864],{"emptyLinePlaceholder":540},[34,65302,65303,65305,65307],{"class":36,"line":33278},[34,65304,52246],{"class":59},[34,65306,51096],{"class":51761},[34,65308,51768],{"class":59},[14,65310,65311],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65313,65314],{},"在监听事件中，this指向的就是他的调用者",[14,65316,65317],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65319,54181],{},[14,65321,65322],{},"(function () {",[14,65324,65325],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65327,65328],{},"list.addEventListener('click', function (e) {",[14,65330,65331],{},"if (e.target.tagName === 'A') {",[14,65333,65334],{},"\u002F\u002F 排他思想",[14,65336,65337],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65339,65340],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65342,65343],{},"\u002F\u002F console.log(old);",[14,65345,65346],{},"\u002F\u002F 判断",[14,65348,65349],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65351,65352],{},"if (old) old.classList.remove('active')",[14,65354,65355],{},"e.target.classList.add('active')",[14,65357,1550],{},[14,65359,52925],{},[14,65361,65362],{},"})();",[584,65364,65366],{"id":65365},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[25,65368,65370],{"className":51094,"code":65369,"language":51096,"meta":22,"style":22},"\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",[31,65371,65372,65382,65386,65394,65398,65412,65426,65438,65446,65452,65462,65472,65476,65480,65487,65499,65510,65527,65540,65554,65564,65568,65572,65579,65590,65608,65618,65630,65634,65638,65645,65662,65673,65685,65689,65693,65700,65712,65716,65724,65732,65736,65744,65752,65760,65775,65819,65827,65840,65853,65866,65874,65882,65890,65918,65926,65938,65951,65964,65972,65980,65988,66014,66022,66035,66047,66060,66068,66076,66084,66110,66118,66131,66143,66156,66164,66172,66180,66185,66205,66210,66230,66235,66252,66257,66265,66270,66299,66312,66316,66320,66325,66329,66357,66362,66379,66384,66389,66394,66399,66425,66429,66433,66441,66449,66453],{"__ignoreMap":22},[34,65373,65374,65376,65378,65380],{"class":36,"line":37},[34,65375,51758],{"class":59},[34,65377,51762],{"class":51761},[34,65379,51765],{"class":2427},[34,65381,51768],{"class":59},[34,65383,65384],{"class":36,"line":44},[34,65385,2864],{"emptyLinePlaceholder":540},[34,65387,65388,65390,65392],{"class":36,"line":50},[34,65389,1515],{"class":59},[34,65391,51096],{"class":51761},[34,65393,51768],{"class":59},[34,65395,65396],{"class":36,"line":56},[34,65397,2864],{"emptyLinePlaceholder":540},[34,65399,65400,65402,65404,65406,65408,65410],{"class":36,"line":107},[34,65401,1515],{"class":59},[34,65403,51795],{"class":51761},[34,65405,51777],{"class":2427},[34,65407,447],{"class":59},[34,65409,51782],{"class":187},[34,65411,51768],{"class":59},[34,65413,65414,65416,65418,65420,65422,65424],{"class":36,"line":196},[34,65415,52605],{"class":59},[34,65417,51805],{"class":51761},[34,65419,51808],{"class":2427},[34,65421,447],{"class":59},[34,65423,51813],{"class":187},[34,65425,51768],{"class":59},[34,65427,65428,65430,65432,65434,65436],{"class":36,"line":202},[34,65429,52605],{"class":59},[34,65431,51868],{"class":51761},[34,65433,55775],{"class":59},[34,65435,51868],{"class":51761},[34,65437,51768],{"class":59},[34,65439,65440,65442,65444],{"class":36,"line":207},[34,65441,52605],{"class":59},[34,65443,532],{"class":51761},[34,65445,51768],{"class":59},[34,65447,65448,65450],{"class":36,"line":222},[34,65449,6867],{"class":51761},[34,65451,16036],{"class":59},[34,65453,65454,65456,65458,65460],{"class":36,"line":227},[34,65455,55167],{"class":63},[34,65457,51898],{"class":59},[34,65459,319],{"class":63},[34,65461,1765],{"class":59},[34,65463,65464,65466,65468,65470],{"class":36,"line":232},[34,65465,55156],{"class":63},[34,65467,51898],{"class":59},[34,65469,319],{"class":63},[34,65471,1765],{"class":59},[34,65473,65474],{"class":36,"line":238},[34,65475,2651],{"class":59},[34,65477,65478],{"class":36,"line":244},[34,65479,2864],{"emptyLinePlaceholder":540},[34,65481,65482,65485],{"class":36,"line":250},[34,65483,65484],{"class":51761},"    table",[34,65486,16036],{"class":59},[34,65488,65489,65492,65494,65497],{"class":36,"line":256},[34,65490,65491],{"class":63},"      border-collapse",[34,65493,51898],{"class":59},[34,65495,65496],{"class":63},"collapse",[34,65498,1765],{"class":59},[34,65500,65501,65504,65506,65508],{"class":36,"line":261},[34,65502,65503],{"class":63},"      border-spacing",[34,65505,51898],{"class":59},[34,65507,319],{"class":63},[34,65509,1765],{"class":59},[34,65511,65512,65514,65516,65518,65520,65522,65525],{"class":36,"line":267},[34,65513,62438],{"class":63},[34,65515,51898],{"class":59},[34,65517,64],{"class":63},[34,65519,51953],{"class":112},[34,65521,51982],{"class":63},[34,65523,65524],{"class":63}," #c0c0c0",[34,65526,1765],{"class":59},[34,65528,65529,65531,65533,65536,65538],{"class":36,"line":2138},[34,65530,55232],{"class":63},[34,65532,51898],{"class":59},[34,65534,65535],{"class":63},"500",[34,65537,51953],{"class":112},[34,65539,1765],{"class":59},[34,65541,65542,65544,65546,65548,65550,65552],{"class":36,"line":2143},[34,65543,55167],{"class":63},[34,65545,51898],{"class":59},[34,65547,919],{"class":63},[34,65549,51953],{"class":112},[34,65551,52017],{"class":63},[34,65553,1765],{"class":59},[34,65555,65556,65558,65560,65562],{"class":36,"line":2157},[34,65557,57747],{"class":63},[34,65559,51898],{"class":59},[34,65561,52053],{"class":63},[34,65563,1765],{"class":59},[34,65565,65566],{"class":36,"line":2162},[34,65567,2651],{"class":59},[34,65569,65570],{"class":36,"line":2191},[34,65571,2864],{"emptyLinePlaceholder":540},[34,65573,65574,65577],{"class":36,"line":2196},[34,65575,65576],{"class":51761},"    th",[34,65578,16036],{"class":59},[34,65580,65581,65583,65585,65588],{"class":36,"line":2213},[34,65582,55345],{"class":63},[34,65584,51898],{"class":59},[34,65586,65587],{"class":63},"#09c",[34,65589,1765],{"class":59},[34,65591,65592,65595,65597,65599,65601,65603,65606],{"class":36,"line":2218},[34,65593,65594],{"class":63},"      font",[34,65596,51898],{"class":59},[34,65598,62800],{"class":63},[34,65600,64534],{"class":63},[34,65602,51953],{"class":112},[34,65604,65605],{"class":187}," \"微软雅黑\"",[34,65607,1765],{"class":59},[34,65609,65610,65612,65614,65616],{"class":36,"line":2223},[34,65611,57877],{"class":63},[34,65613,51898],{"class":59},[34,65615,61303],{"class":63},[34,65617,1765],{"class":59},[34,65619,65620,65622,65624,65626,65628],{"class":36,"line":2228},[34,65621,55246],{"class":63},[34,65623,51898],{"class":59},[34,65625,1406],{"class":63},[34,65627,51953],{"class":112},[34,65629,1765],{"class":59},[34,65631,65632],{"class":36,"line":2242},[34,65633,2651],{"class":59},[34,65635,65636],{"class":36,"line":2247},[34,65637,2864],{"emptyLinePlaceholder":540},[34,65639,65640,65643],{"class":36,"line":3041},[34,65641,65642],{"class":51761},"    td",[34,65644,16036],{"class":59},[34,65646,65647,65649,65651,65653,65655,65657,65660],{"class":36,"line":3055},[34,65648,62438],{"class":63},[34,65650,51898],{"class":59},[34,65652,64],{"class":63},[34,65654,51953],{"class":112},[34,65656,51982],{"class":63},[34,65658,65659],{"class":63}," #d0d0d0",[34,65661,1765],{"class":59},[34,65663,65664,65666,65668,65671],{"class":36,"line":3063},[34,65665,57877],{"class":63},[34,65667,51898],{"class":59},[34,65669,65670],{"class":63},"#404060",[34,65672,1765],{"class":59},[34,65674,65675,65677,65679,65681,65683],{"class":36,"line":3068},[34,65676,55156],{"class":63},[34,65678,51898],{"class":59},[34,65680,1053],{"class":63},[34,65682,51953],{"class":112},[34,65684,1765],{"class":59},[34,65686,65687],{"class":36,"line":3074},[34,65688,2651],{"class":59},[34,65690,65691],{"class":36,"line":3080},[34,65692,2864],{"emptyLinePlaceholder":540},[34,65694,65695,65698],{"class":36,"line":3085},[34,65696,65697],{"class":2427},"    .allCheck",[34,65699,16036],{"class":59},[34,65701,65702,65704,65706,65708,65710],{"class":36,"line":8412},[34,65703,55232],{"class":63},[34,65705,51898],{"class":59},[34,65707,1218],{"class":63},[34,65709,51953],{"class":112},[34,65711,1765],{"class":59},[34,65713,65714],{"class":36,"line":8436},[34,65715,2651],{"class":59},[34,65717,65718,65720,65722],{"class":36,"line":8441},[34,65719,52878],{"class":59},[34,65721,532],{"class":51761},[34,65723,51768],{"class":59},[34,65725,65726,65728,65730],{"class":36,"line":8447},[34,65727,52246],{"class":59},[34,65729,51795],{"class":51761},[34,65731,51768],{"class":59},[34,65733,65734],{"class":36,"line":8474},[34,65735,2864],{"emptyLinePlaceholder":540},[34,65737,65738,65740,65742],{"class":36,"line":8479},[34,65739,1515],{"class":59},[34,65741,52261],{"class":51761},[34,65743,51768],{"class":59},[34,65745,65746,65748,65750],{"class":36,"line":8485},[34,65747,52605],{"class":59},[34,65749,748],{"class":51761},[34,65751,51768],{"class":59},[34,65753,65754,65756,65758],{"class":36,"line":8497},[34,65755,51802],{"class":59},[34,65757,754],{"class":51761},[34,65759,51768],{"class":59},[34,65761,65762,65764,65766,65768,65770,65773],{"class":36,"line":8509},[34,65763,55695],{"class":59},[34,65765,757],{"class":51761},[34,65767,53947],{"class":2427},[34,65769,447],{"class":59},[34,65771,65772],{"class":187},"\"allCheck\"",[34,65774,51768],{"class":59},[34,65776,65777,65779,65781,65783,65785,65787,65789,65791,65793,65795,65797,65800,65803,65805,65807,65809,65812,65815,65817],{"class":36,"line":8521},[34,65778,55763],{"class":59},[34,65780,54282],{"class":51761},[34,65782,54285],{"class":2427},[34,65784,447],{"class":59},[34,65786,54290],{"class":187},[34,65788,15384],{"class":2427},[34,65790,447],{"class":59},[34,65792,8116],{"class":187},[34,65794,15423],{"class":2427},[34,65796,447],{"class":59},[34,65798,65799],{"class":187},"\"checkAll\"",[34,65801,65802],{"class":59},"> \u003C",[34,65804,34],{"class":51761},[34,65806,53947],{"class":2427},[34,65808,447],{"class":59},[34,65810,65811],{"class":187},"\"all\"",[34,65813,65814],{"class":59},">全选\u003C\u002F",[34,65816,34],{"class":51761},[34,65818,51768],{"class":59},[34,65820,65821,65823,65825],{"class":36,"line":10180},[34,65822,55868],{"class":59},[34,65824,757],{"class":51761},[34,65826,51768],{"class":59},[34,65828,65829,65831,65833,65836,65838],{"class":36,"line":10205},[34,65830,55695],{"class":59},[34,65832,757],{"class":51761},[34,65834,65835],{"class":59},">商品\u003C\u002F",[34,65837,757],{"class":51761},[34,65839,51768],{"class":59},[34,65841,65842,65844,65846,65849,65851],{"class":36,"line":10228},[34,65843,55695],{"class":59},[34,65845,757],{"class":51761},[34,65847,65848],{"class":59},">商家\u003C\u002F",[34,65850,757],{"class":51761},[34,65852,51768],{"class":59},[34,65854,65855,65857,65859,65862,65864],{"class":36,"line":10252},[34,65856,55695],{"class":59},[34,65858,757],{"class":51761},[34,65860,65861],{"class":59},">价格\u003C\u002F",[34,65863,757],{"class":51761},[34,65865,51768],{"class":59},[34,65867,65868,65870,65872],{"class":36,"line":10257},[34,65869,52237],{"class":59},[34,65871,754],{"class":51761},[34,65873,51768],{"class":59},[34,65875,65876,65878,65880],{"class":36,"line":10262},[34,65877,51802],{"class":59},[34,65879,754],{"class":51761},[34,65881,51768],{"class":59},[34,65883,65884,65886,65888],{"class":36,"line":10267},[34,65885,55695],{"class":59},[34,65887,800],{"class":51761},[34,65889,51768],{"class":59},[34,65891,65892,65894,65896,65898,65900,65902,65904,65906,65909,65911,65913,65916],{"class":36,"line":10276},[34,65893,55763],{"class":59},[34,65895,54282],{"class":51761},[34,65897,54285],{"class":2427},[34,65899,447],{"class":59},[34,65901,54290],{"class":187},[34,65903,15384],{"class":2427},[34,65905,447],{"class":59},[34,65907,65908],{"class":187},"\"check\"",[34,65910,53947],{"class":2427},[34,65912,447],{"class":59},[34,65914,65915],{"class":187},"\"ck\"",[34,65917,51768],{"class":59},[34,65919,65920,65922,65924],{"class":36,"line":10281},[34,65921,55868],{"class":59},[34,65923,800],{"class":51761},[34,65925,51768],{"class":59},[34,65927,65928,65930,65932,65934,65936],{"class":36,"line":10287},[34,65929,55695],{"class":59},[34,65931,800],{"class":51761},[34,65933,61634],{"class":59},[34,65935,800],{"class":51761},[34,65937,51768],{"class":59},[34,65939,65940,65942,65944,65947,65949],{"class":36,"line":10308},[34,65941,55695],{"class":59},[34,65943,800],{"class":51761},[34,65945,65946],{"class":59},">小米\u003C\u002F",[34,65948,800],{"class":51761},[34,65950,51768],{"class":59},[34,65952,65953,65955,65957,65960,65962],{"class":36,"line":10314},[34,65954,55695],{"class":59},[34,65956,800],{"class":51761},[34,65958,65959],{"class":59},">￥1999\u003C\u002F",[34,65961,800],{"class":51761},[34,65963,51768],{"class":59},[34,65965,65966,65968,65970],{"class":36,"line":10328},[34,65967,52237],{"class":59},[34,65969,754],{"class":51761},[34,65971,51768],{"class":59},[34,65973,65974,65976,65978],{"class":36,"line":10334},[34,65975,51802],{"class":59},[34,65977,754],{"class":51761},[34,65979,51768],{"class":59},[34,65981,65982,65984,65986],{"class":36,"line":10361},[34,65983,55695],{"class":59},[34,65985,800],{"class":51761},[34,65987,51768],{"class":59},[34,65989,65990,65992,65994,65996,65998,66000,66002,66004,66006,66008,66010,66012],{"class":36,"line":10370},[34,65991,55763],{"class":59},[34,65993,54282],{"class":51761},[34,65995,54285],{"class":2427},[34,65997,447],{"class":59},[34,65999,54290],{"class":187},[34,66001,15384],{"class":2427},[34,66003,447],{"class":59},[34,66005,65908],{"class":187},[34,66007,53947],{"class":2427},[34,66009,447],{"class":59},[34,66011,65915],{"class":187},[34,66013,51768],{"class":59},[34,66015,66016,66018,66020],{"class":36,"line":10376},[34,66017,55868],{"class":59},[34,66019,800],{"class":51761},[34,66021,51768],{"class":59},[34,66023,66024,66026,66028,66031,66033],{"class":36,"line":10384},[34,66025,55695],{"class":59},[34,66027,800],{"class":51761},[34,66029,66030],{"class":59},">小米净水器\u003C\u002F",[34,66032,800],{"class":51761},[34,66034,51768],{"class":59},[34,66036,66037,66039,66041,66043,66045],{"class":36,"line":10389},[34,66038,55695],{"class":59},[34,66040,800],{"class":51761},[34,66042,65946],{"class":59},[34,66044,800],{"class":51761},[34,66046,51768],{"class":59},[34,66048,66049,66051,66053,66056,66058],{"class":36,"line":17068},[34,66050,55695],{"class":59},[34,66052,800],{"class":51761},[34,66054,66055],{"class":59},">￥4999\u003C\u002F",[34,66057,800],{"class":51761},[34,66059,51768],{"class":59},[34,66061,66062,66064,66066],{"class":36,"line":17074},[34,66063,52237],{"class":59},[34,66065,754],{"class":51761},[34,66067,51768],{"class":59},[34,66069,66070,66072,66074],{"class":36,"line":17097},[34,66071,51802],{"class":59},[34,66073,754],{"class":51761},[34,66075,51768],{"class":59},[34,66077,66078,66080,66082],{"class":36,"line":17103},[34,66079,55695],{"class":59},[34,66081,800],{"class":51761},[34,66083,51768],{"class":59},[34,66085,66086,66088,66090,66092,66094,66096,66098,66100,66102,66104,66106,66108],{"class":36,"line":17126},[34,66087,55763],{"class":59},[34,66089,54282],{"class":51761},[34,66091,54285],{"class":2427},[34,66093,447],{"class":59},[34,66095,54290],{"class":187},[34,66097,15384],{"class":2427},[34,66099,447],{"class":59},[34,66101,65908],{"class":187},[34,66103,53947],{"class":2427},[34,66105,447],{"class":59},[34,66107,65915],{"class":187},[34,66109,51768],{"class":59},[34,66111,66112,66114,66116],{"class":36,"line":17140},[34,66113,55868],{"class":59},[34,66115,800],{"class":51761},[34,66117,51768],{"class":59},[34,66119,66120,66122,66124,66127,66129],{"class":36,"line":17160},[34,66121,55695],{"class":59},[34,66123,800],{"class":51761},[34,66125,66126],{"class":59},">小米电视\u003C\u002F",[34,66128,800],{"class":51761},[34,66130,51768],{"class":59},[34,66132,66133,66135,66137,66139,66141],{"class":36,"line":17166},[34,66134,55695],{"class":59},[34,66136,800],{"class":51761},[34,66138,65946],{"class":59},[34,66140,800],{"class":51761},[34,66142,51768],{"class":59},[34,66144,66145,66147,66149,66152,66154],{"class":36,"line":17177},[34,66146,55695],{"class":59},[34,66148,800],{"class":51761},[34,66150,66151],{"class":59},">￥5999\u003C\u002F",[34,66153,800],{"class":51761},[34,66155,51768],{"class":59},[34,66157,66158,66160,66162],{"class":36,"line":17200},[34,66159,52237],{"class":59},[34,66161,754],{"class":51761},[34,66163,51768],{"class":59},[34,66165,66166,66168,66170],{"class":36,"line":17222},[34,66167,52878],{"class":59},[34,66169,748],{"class":51761},[34,66171,51768],{"class":59},[34,66173,66174,66176,66178],{"class":36,"line":17227},[34,66175,52605],{"class":59},[34,66177,52274],{"class":51761},[34,66179,51768],{"class":59},[34,66181,66182],{"class":36,"line":17233},[34,66183,66184],{"class":40},"    \u002F\u002F 1. 获取大复选框\n",[34,66186,66187,66189,66192,66194,66196,66198,66200,66203],{"class":36,"line":17247},[34,66188,11685],{"class":112},[34,66190,66191],{"class":63}," checkAll",[34,66193,14028],{"class":112},[34,66195,54857],{"class":59},[34,66197,54860],{"class":2427},[34,66199,617],{"class":59},[34,66201,66202],{"class":187},"'#checkAll'",[34,66204,623],{"class":59},[34,66206,66207],{"class":36,"line":17260},[34,66208,66209],{"class":40},"    \u002F\u002F 2. 获取所有的小复选框\n",[34,66211,66212,66214,66217,66219,66221,66223,66225,66228],{"class":36,"line":17265},[34,66213,11685],{"class":112},[34,66215,66216],{"class":63}," cks",[34,66218,14028],{"class":112},[34,66220,54857],{"class":59},[34,66222,56142],{"class":2427},[34,66224,617],{"class":59},[34,66226,66227],{"class":187},"'.ck'",[34,66229,623],{"class":59},[34,66231,66232],{"class":36,"line":17279},[34,66233,66234],{"class":40},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[34,66236,66237,66240,66242,66244,66246,66248,66250],{"class":36,"line":17284},[34,66238,66239],{"class":59},"    checkAll.",[34,66241,58274],{"class":2427},[34,66243,617],{"class":59},[34,66245,58279],{"class":187},[34,66247,12899],{"class":59},[34,66249,54910],{"class":112},[34,66251,54913],{"class":59},[34,66253,66254],{"class":36,"line":17290},[34,66255,66256],{"class":40},"      \u002F\u002F 得到当前大复选框的选中状态\n",[34,66258,66259,66262],{"class":36,"line":17295},[34,66260,66261],{"class":40},"      \u002F\u002F console.log(checkAll.checked)",[34,66263,66264],{"class":40},"  \u002F\u002F 得到 是 true 或者是 false\n",[34,66266,66267],{"class":36,"line":17309},[34,66268,66269],{"class":40},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[34,66271,66272,66274,66276,66278,66280,66282,66284,66286,66288,66291,66293,66295,66297],{"class":36,"line":17314},[34,66273,52745],{"class":112},[34,66275,2122],{"class":59},[34,66277,52308],{"class":112},[34,66279,9902],{"class":59},[34,66281,447],{"class":112},[34,66283,4557],{"class":63},[34,66285,9909],{"class":59},[34,66287,1515],{"class":112},[34,66289,66290],{"class":59}," cks.",[34,66292,52429],{"class":63},[34,66294,3678],{"class":59},[34,66296,2756],{"class":112},[34,66298,12906],{"class":59},[34,66300,66301,66304,66306,66309],{"class":36,"line":17319},[34,66302,66303],{"class":59},"        cks[i].checked ",[34,66305,447],{"class":112},[34,66307,66308],{"class":63}," this",[34,66310,66311],{"class":59},".checked\n",[34,66313,66314],{"class":36,"line":17333},[34,66315,52859],{"class":59},[34,66317,66318],{"class":36,"line":17345},[34,66319,33923],{"class":59},[34,66321,66322],{"class":36,"line":17350},[34,66323,66324],{"class":40},"    \u002F\u002F 5. 小复选框控制大复选框\n",[34,66326,66327],{"class":36,"line":17363},[34,66328,2864],{"emptyLinePlaceholder":540},[34,66330,66331,66333,66335,66337,66339,66341,66343,66345,66347,66349,66351,66353,66355],{"class":36,"line":17368},[34,66332,3665],{"class":112},[34,66334,2122],{"class":59},[34,66336,52308],{"class":112},[34,66338,9902],{"class":59},[34,66340,447],{"class":112},[34,66342,4557],{"class":63},[34,66344,9909],{"class":59},[34,66346,1515],{"class":112},[34,66348,66290],{"class":59},[34,66350,52429],{"class":63},[34,66352,3678],{"class":59},[34,66354,2756],{"class":112},[34,66356,12906],{"class":59},[34,66358,66359],{"class":36,"line":17373},[34,66360,66361],{"class":40},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[34,66363,66364,66367,66369,66371,66373,66375,66377],{"class":36,"line":17378},[34,66365,66366],{"class":59},"      cks[i].",[34,66368,58274],{"class":2427},[34,66370,617],{"class":59},[34,66372,58279],{"class":187},[34,66374,12899],{"class":59},[34,66376,54910],{"class":112},[34,66378,54913],{"class":59},[34,66380,66381],{"class":36,"line":17391},[34,66382,66383],{"class":40},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[34,66385,66386],{"class":36,"line":17396},[34,66387,66388],{"class":40},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[34,66390,66391],{"class":36,"line":33096},[34,66392,66393],{"class":40},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[34,66395,66396],{"class":36,"line":33102},[34,66397,66398],{"class":40},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[34,66400,66401,66404,66406,66408,66410,66412,66415,66417,66419,66421,66423],{"class":36,"line":33108},[34,66402,66403],{"class":59},"        checkAll.checked ",[34,66405,447],{"class":112},[34,66407,54857],{"class":59},[34,66409,56142],{"class":2427},[34,66411,617],{"class":59},[34,66413,66414],{"class":187},"'.ck:checked'",[34,66416,31289],{"class":59},[34,66418,52429],{"class":63},[34,66420,58367],{"class":112},[34,66422,66290],{"class":59},[34,66424,56292],{"class":63},[34,66426,66427],{"class":36,"line":33114},[34,66428,65276],{"class":59},[34,66430,66431],{"class":36,"line":33120},[34,66432,2651],{"class":59},[34,66434,66435,66437,66439],{"class":36,"line":33131},[34,66436,52878],{"class":59},[34,66438,52274],{"class":51761},[34,66440,51768],{"class":59},[34,66442,66443,66445,66447],{"class":36,"line":33137},[34,66444,52246],{"class":59},[34,66446,52261],{"class":51761},[34,66448,51768],{"class":59},[34,66450,66451],{"class":36,"line":33157},[34,66452,2864],{"emptyLinePlaceholder":540},[34,66454,66455,66457,66459],{"class":36,"line":33163},[34,66456,52246],{"class":59},[34,66458,51096],{"class":51761},[34,66460,51768],{"class":59},[14,66462,66463],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66465,66466],{},"用好之间比较得到的布尔值！！！",[14,66468,66469,66470,66473,66474,2122,66477,1190,66479,66482],{},"在 JS 里访问的时候，",[31,66471,66472],{},"checkbox.checked"," 是一个 ",[760,66475,66476],{},"布尔值",[31,66478,1834],{},[31,66480,66481],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66484,66485,66486,66489,66490],{},"HTML 的 ",[31,66487,66488],{},"checked=\"checked\""," 只是 ",[760,66491,66492,66493,66496],{},"初始值；JS 的 ",[31,66494,66495],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66498,66499],{},"：checked是一个伪类选择器",[14,66501,66502],{},[20,66503],{"alt":22,"src":66504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66506,66507,66510],{},[66508,66509],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66512,66513],{},[20,66514],{"alt":22,"src":66515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[555,66517,66519],{"id":66518},"_33-dom事件进阶","3.3 DOM事件进阶",[584,66521,66523],{"id":66522},"_331-事件流","3.3.1 事件流",[14,66525,66526],{},[20,66527],{"alt":22,"src":66528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22462,66530,66532],{"id":66531},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66534,66535],{},[20,66536],{"alt":22,"src":66537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[25,66539,66541],{"className":51094,"code":66540,"language":51096,"meta":22,"style":22},"\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",[31,66542,66543,66553,66567,66571,66579,66593,66613,66625,66633,66640,66652,66664,66674,66678,66682,66689,66701,66713,66723,66727,66735,66743,66747,66755,66770,66789,66797,66805,66825,66845,66861,66872,66880,66897,66908,66916,66933,66944,66952,66960,66968,66972],{"__ignoreMap":22},[34,66544,66545,66547,66549,66551],{"class":36,"line":37},[34,66546,51758],{"class":59},[34,66548,51762],{"class":51761},[34,66550,51765],{"class":2427},[34,66552,51768],{"class":59},[34,66554,66555,66557,66559,66561,66563,66565],{"class":36,"line":44},[34,66556,1515],{"class":59},[34,66558,51096],{"class":51761},[34,66560,51777],{"class":2427},[34,66562,447],{"class":59},[34,66564,51782],{"class":187},[34,66566,51768],{"class":59},[34,66568,66569],{"class":36,"line":50},[34,66570,2864],{"emptyLinePlaceholder":540},[34,66572,66573,66575,66577],{"class":36,"line":56},[34,66574,1515],{"class":59},[34,66576,51795],{"class":51761},[34,66578,51768],{"class":59},[34,66580,66581,66583,66585,66587,66589,66591],{"class":36,"line":107},[34,66582,52605],{"class":59},[34,66584,51805],{"class":51761},[34,66586,51808],{"class":2427},[34,66588,447],{"class":59},[34,66590,51813],{"class":187},[34,66592,51768],{"class":59},[34,66594,66595,66597,66599,66601,66603,66605,66607,66609,66611],{"class":36,"line":196},[34,66596,52605],{"class":59},[34,66598,51805],{"class":51761},[34,66600,15384],{"class":2427},[34,66602,447],{"class":59},[34,66604,51852],{"class":187},[34,66606,51832],{"class":2427},[34,66608,447],{"class":59},[34,66610,51859],{"class":187},[34,66612,51768],{"class":59},[34,66614,66615,66617,66619,66621,66623],{"class":36,"line":202},[34,66616,52605],{"class":59},[34,66618,51868],{"class":51761},[34,66620,51871],{"class":59},[34,66622,51868],{"class":51761},[34,66624,51768],{"class":59},[34,66626,66627,66629,66631],{"class":36,"line":207},[34,66628,52605],{"class":59},[34,66630,532],{"class":51761},[34,66632,51768],{"class":59},[34,66634,66635,66638],{"class":36,"line":222},[34,66636,66637],{"class":2427},"    .father",[34,66639,16036],{"class":59},[34,66641,66642,66644,66646,66648,66650],{"class":36,"line":227},[34,66643,55232],{"class":63},[34,66645,51898],{"class":59},[34,66647,65535],{"class":63},[34,66649,51953],{"class":112},[34,66651,1765],{"class":59},[34,66653,66654,66656,66658,66660,66662],{"class":36,"line":232},[34,66655,55246],{"class":63},[34,66657,51898],{"class":59},[34,66659,65535],{"class":63},[34,66661,51953],{"class":112},[34,66663,1765],{"class":59},[34,66665,66666,66668,66670,66672],{"class":36,"line":238},[34,66667,55345],{"class":63},[34,66669,51898],{"class":59},[34,66671,52106],{"class":63},[34,66673,1765],{"class":59},[34,66675,66676],{"class":36,"line":244},[34,66677,2651],{"class":59},[34,66679,66680],{"class":36,"line":250},[34,66681,2864],{"emptyLinePlaceholder":540},[34,66683,66684,66687],{"class":36,"line":256},[34,66685,66686],{"class":2427},"    .son",[34,66688,16036],{"class":59},[34,66690,66691,66693,66695,66697,66699],{"class":36,"line":261},[34,66692,55232],{"class":63},[34,66694,51898],{"class":59},[34,66696,2186],{"class":63},[34,66698,51953],{"class":112},[34,66700,1765],{"class":59},[34,66702,66703,66705,66707,66709,66711],{"class":36,"line":267},[34,66704,55246],{"class":63},[34,66706,51898],{"class":59},[34,66708,2186],{"class":63},[34,66710,51953],{"class":112},[34,66712,1765],{"class":59},[34,66714,66715,66717,66719,66721],{"class":36,"line":2138},[34,66716,55345],{"class":63},[34,66718,51898],{"class":59},[34,66720,55350],{"class":63},[34,66722,1765],{"class":59},[34,66724,66725],{"class":36,"line":2143},[34,66726,2651],{"class":59},[34,66728,66729,66731,66733],{"class":36,"line":2157},[34,66730,52878],{"class":59},[34,66732,532],{"class":51761},[34,66734,51768],{"class":59},[34,66736,66737,66739,66741],{"class":36,"line":2162},[34,66738,52246],{"class":59},[34,66740,51795],{"class":51761},[34,66742,51768],{"class":59},[34,66744,66745],{"class":36,"line":2191},[34,66746,2864],{"emptyLinePlaceholder":540},[34,66748,66749,66751,66753],{"class":36,"line":2196},[34,66750,1515],{"class":59},[34,66752,52261],{"class":51761},[34,66754,51768],{"class":59},[34,66756,66757,66759,66761,66763,66765,66768],{"class":36,"line":2213},[34,66758,52605],{"class":59},[34,66760,52072],{"class":51761},[34,66762,53947],{"class":2427},[34,66764,447],{"class":59},[34,66766,66767],{"class":187},"\"father\"",[34,66769,51768],{"class":59},[34,66771,66772,66774,66776,66778,66780,66783,66785,66787],{"class":36,"line":2218},[34,66773,51802],{"class":59},[34,66775,52072],{"class":51761},[34,66777,53947],{"class":2427},[34,66779,447],{"class":59},[34,66781,66782],{"class":187},"\"son\"",[34,66784,55775],{"class":59},[34,66786,52072],{"class":51761},[34,66788,51768],{"class":59},[34,66790,66791,66793,66795],{"class":36,"line":2223},[34,66792,52878],{"class":59},[34,66794,52072],{"class":51761},[34,66796,51768],{"class":59},[34,66798,66799,66801,66803],{"class":36,"line":2228},[34,66800,52605],{"class":59},[34,66802,52274],{"class":51761},[34,66804,51768],{"class":59},[34,66806,66807,66809,66812,66814,66816,66818,66820,66823],{"class":36,"line":2242},[34,66808,11685],{"class":112},[34,66810,66811],{"class":63}," fa",[34,66813,14028],{"class":112},[34,66815,54857],{"class":59},[34,66817,54860],{"class":2427},[34,66819,617],{"class":59},[34,66821,66822],{"class":187},"'.father'",[34,66824,623],{"class":59},[34,66826,66827,66829,66832,66834,66836,66838,66840,66843],{"class":36,"line":2247},[34,66828,11685],{"class":112},[34,66830,66831],{"class":63}," son",[34,66833,14028],{"class":112},[34,66835,54857],{"class":59},[34,66837,54860],{"class":2427},[34,66839,617],{"class":59},[34,66841,66842],{"class":187},"'.son'",[34,66844,623],{"class":59},[34,66846,66847,66849,66851,66853,66855,66857,66859],{"class":36,"line":3041},[34,66848,52868],{"class":59},[34,66850,58274],{"class":2427},[34,66852,617],{"class":59},[34,66854,58279],{"class":187},[34,66856,12899],{"class":59},[34,66858,54910],{"class":112},[34,66860,54913],{"class":59},[34,66862,66863,66865,66867,66870],{"class":36,"line":3055},[34,66864,59386],{"class":2427},[34,66866,617],{"class":59},[34,66868,66869],{"class":187},"'woshiu1'",[34,66871,623],{"class":59},[34,66873,66874,66876,66878],{"class":36,"line":3063},[34,66875,54996],{"class":59},[34,66877,1834],{"class":63},[34,66879,623],{"class":59},[34,66881,66882,66885,66887,66889,66891,66893,66895],{"class":36,"line":3068},[34,66883,66884],{"class":59},"    fa.",[34,66886,58274],{"class":2427},[34,66888,617],{"class":59},[34,66890,58279],{"class":187},[34,66892,12899],{"class":59},[34,66894,54910],{"class":112},[34,66896,54913],{"class":59},[34,66898,66899,66901,66903,66906],{"class":36,"line":3074},[34,66900,59386],{"class":2427},[34,66902,617],{"class":59},[34,66904,66905],{"class":187},"'1'",[34,66907,623],{"class":59},[34,66909,66910,66912,66914],{"class":36,"line":3080},[34,66911,54996],{"class":59},[34,66913,1834],{"class":63},[34,66915,623],{"class":59},[34,66917,66918,66921,66923,66925,66927,66929,66931],{"class":36,"line":3085},[34,66919,66920],{"class":59},"    son.",[34,66922,58274],{"class":2427},[34,66924,617],{"class":59},[34,66926,58279],{"class":187},[34,66928,12899],{"class":59},[34,66930,54910],{"class":112},[34,66932,54913],{"class":59},[34,66934,66935,66937,66939,66942],{"class":36,"line":8412},[34,66936,59386],{"class":2427},[34,66938,617],{"class":59},[34,66940,66941],{"class":187},"'2'",[34,66943,623],{"class":59},[34,66945,66946,66948,66950],{"class":36,"line":8436},[34,66947,54996],{"class":59},[34,66949,1834],{"class":63},[34,66951,623],{"class":59},[34,66953,66954,66956,66958],{"class":36,"line":8441},[34,66955,52878],{"class":59},[34,66957,52274],{"class":51761},[34,66959,51768],{"class":59},[34,66961,66962,66964,66966],{"class":36,"line":8447},[34,66963,52246],{"class":59},[34,66965,52261],{"class":51761},[34,66967,51768],{"class":59},[34,66969,66970],{"class":36,"line":8474},[34,66971,2864],{"emptyLinePlaceholder":540},[34,66973,66974,66976,66978],{"class":36,"line":8479},[34,66975,52246],{"class":59},[34,66977,51096],{"class":51761},[34,66979,51768],{"class":59},[14,66981,66982],{},[20,66983],{"alt":22,"src":66984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66986,66987],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22462,66989,66991],{"id":66990},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66993,66994],{},[20,66995],{"alt":22,"src":66996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66998,66999],{},"反着来",[14,67001,67002],{},"注意是同名事件，比如都是‘click’",[22462,67004,67006],{"id":67005},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,67008,67009],{},[20,67010],{"alt":22,"src":67011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22462,67013,67015],{"id":67014},"_3314-解绑事件","3.3.1.4 解绑事件",[14,67017,67018],{},[20,67019],{"alt":22,"src":67020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,67022,67023],{},[20,67024],{"alt":22,"src":67025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22462,67027,67029],{"id":67028},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[567,67031,67032],{},[570,67033,67034],{},"事件类型的区别",[14,67036,67037],{},[20,67038],{"alt":22,"src":67039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67041,67042],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[567,67044,67045],{"start":44},[570,67046,67047],{},"注册事件的区别",[14,67049,67050],{},[20,67051],{"alt":22,"src":67052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22462,67054,67056],{"id":67055},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67058,67059],{},[20,67060],{"alt":22,"src":67061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67063,67064],{},[20,67065],{"alt":22,"src":67066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[25,67068,67070],{"className":53528,"code":67069,"language":53530,"meta":22,"style":22},"\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",[31,67071,67072,67080,67097,67120,67128,67133,67138,67143,67147,67155,67163],{"__ignoreMap":22},[34,67073,67074,67076,67078],{"class":36,"line":37},[34,67075,1515],{"class":59},[34,67077,52261],{"class":51761},[34,67079,51768],{"class":59},[34,67081,67082,67084,67087,67090,67092,67095],{"class":36,"line":44},[34,67083,52605],{"class":59},[34,67085,67086],{"class":51761},"form",[34,67088,67089],{"class":2427}," action",[34,67091,447],{"class":59},[34,67093,67094],{"class":187},"\"http:\u002F\u002Fwww.itcast.cn\"",[34,67096,51768],{"class":59},[34,67098,67099,67101,67103,67105,67107,67110,67113,67115,67118],{"class":36,"line":50},[34,67100,51802],{"class":59},[34,67102,54282],{"class":51761},[34,67104,54285],{"class":2427},[34,67106,447],{"class":59},[34,67108,67109],{"class":187},"\"submit\"",[34,67111,67112],{"class":2427}," value",[34,67114,447],{"class":59},[34,67116,67117],{"class":187},"\"免费注册\"",[34,67119,51768],{"class":59},[34,67121,67122,67124,67126],{"class":36,"line":56},[34,67123,51802],{"class":59},[34,67125,52274],{"class":51761},[34,67127,51768],{"class":59},[34,67129,67130],{"class":36,"line":107},[34,67131,67132],{"class":59},"      const form = document.querySelector('form')\n",[34,67134,67135],{"class":36,"line":196},[34,67136,67137],{"class":59},"      form.addEventListener('submit', function (e) {\n",[34,67139,67140],{"class":36,"line":202},[34,67141,67142],{"class":59},"        e.preventDefault()\n",[34,67144,67145],{"class":36,"line":207},[34,67146,65276],{"class":59},[34,67148,67149,67151,67153],{"class":36,"line":222},[34,67150,52237],{"class":59},[34,67152,52274],{"class":51761},[34,67154,51768],{"class":59},[34,67156,67157,67159,67161],{"class":36,"line":227},[34,67158,52878],{"class":59},[34,67160,67086],{"class":51761},[34,67162,51768],{"class":59},[34,67164,67165,67167,67169],{"class":36,"line":232},[34,67166,52246],{"class":59},[34,67168,52261],{"class":51761},[34,67170,51768],{"class":59},[14,67172,67173],{},"点击不在跳转！！！",[584,67175,67177],{"id":67176},"_332-事件委托","3.3.2 事件委托",[14,67179,67180],{},[20,67181],{"alt":22,"src":67182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[25,67184,67186],{"className":51094,"code":67185,"language":51096,"meta":22,"style":22},"\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",[31,67187,67188,67198,67212,67216,67224,67238,67258,67270,67278,67282,67290,67298,67310,67322,67334,67346,67358,67371,67379,67387,67392,67411,67432,67437,67442,67447,67452,67461,67465,67475,67479,67484,67489,67503,67513,67517,67521,67529,67537,67541],{"__ignoreMap":22},[34,67189,67190,67192,67194,67196],{"class":36,"line":37},[34,67191,51758],{"class":59},[34,67193,51762],{"class":51761},[34,67195,51765],{"class":2427},[34,67197,51768],{"class":59},[34,67199,67200,67202,67204,67206,67208,67210],{"class":36,"line":44},[34,67201,1515],{"class":59},[34,67203,51096],{"class":51761},[34,67205,51777],{"class":2427},[34,67207,447],{"class":59},[34,67209,51782],{"class":187},[34,67211,51768],{"class":59},[34,67213,67214],{"class":36,"line":50},[34,67215,2864],{"emptyLinePlaceholder":540},[34,67217,67218,67220,67222],{"class":36,"line":56},[34,67219,1515],{"class":59},[34,67221,51795],{"class":51761},[34,67223,51768],{"class":59},[34,67225,67226,67228,67230,67232,67234,67236],{"class":36,"line":107},[34,67227,52605],{"class":59},[34,67229,51805],{"class":51761},[34,67231,51808],{"class":2427},[34,67233,447],{"class":59},[34,67235,51813],{"class":187},[34,67237,51768],{"class":59},[34,67239,67240,67242,67244,67246,67248,67250,67252,67254,67256],{"class":36,"line":196},[34,67241,52605],{"class":59},[34,67243,51805],{"class":51761},[34,67245,15384],{"class":2427},[34,67247,447],{"class":59},[34,67249,51852],{"class":187},[34,67251,51832],{"class":2427},[34,67253,447],{"class":59},[34,67255,51859],{"class":187},[34,67257,51768],{"class":59},[34,67259,67260,67262,67264,67266,67268],{"class":36,"line":202},[34,67261,52605],{"class":59},[34,67263,51868],{"class":51761},[34,67265,51871],{"class":59},[34,67267,51868],{"class":51761},[34,67269,51768],{"class":59},[34,67271,67272,67274,67276],{"class":36,"line":207},[34,67273,52246],{"class":59},[34,67275,51795],{"class":51761},[34,67277,51768],{"class":59},[34,67279,67280],{"class":36,"line":222},[34,67281,2864],{"emptyLinePlaceholder":540},[34,67283,67284,67286,67288],{"class":36,"line":227},[34,67285,1515],{"class":59},[34,67287,52261],{"class":51761},[34,67289,51768],{"class":59},[34,67291,67292,67294,67296],{"class":36,"line":232},[34,67293,52605],{"class":59},[34,67295,1611],{"class":51761},[34,67297,51768],{"class":59},[34,67299,67300,67302,67304,67306,67308],{"class":36,"line":238},[34,67301,51802],{"class":59},[34,67303,570],{"class":51761},[34,67305,54427],{"class":59},[34,67307,570],{"class":51761},[34,67309,51768],{"class":59},[34,67311,67312,67314,67316,67318,67320],{"class":36,"line":244},[34,67313,51802],{"class":59},[34,67315,570],{"class":51761},[34,67317,54446],{"class":59},[34,67319,570],{"class":51761},[34,67321,51768],{"class":59},[34,67323,67324,67326,67328,67330,67332],{"class":36,"line":250},[34,67325,51802],{"class":59},[34,67327,570],{"class":51761},[34,67329,54465],{"class":59},[34,67331,570],{"class":51761},[34,67333,51768],{"class":59},[34,67335,67336,67338,67340,67342,67344],{"class":36,"line":256},[34,67337,51802],{"class":59},[34,67339,570],{"class":51761},[34,67341,54484],{"class":59},[34,67343,570],{"class":51761},[34,67345,51768],{"class":59},[34,67347,67348,67350,67352,67354,67356],{"class":36,"line":261},[34,67349,51802],{"class":59},[34,67351,570],{"class":51761},[34,67353,54503],{"class":59},[34,67355,570],{"class":51761},[34,67357,51768],{"class":59},[34,67359,67360,67362,67364,67367,67369],{"class":36,"line":267},[34,67361,51802],{"class":59},[34,67363,14],{"class":51761},[34,67365,67366],{"class":59},">我不需要变色\u003C\u002F",[34,67368,14],{"class":51761},[34,67370,51768],{"class":59},[34,67372,67373,67375,67377],{"class":36,"line":2138},[34,67374,52878],{"class":59},[34,67376,1611],{"class":51761},[34,67378,51768],{"class":59},[34,67380,67381,67383,67385],{"class":36,"line":2143},[34,67382,52605],{"class":59},[34,67384,52274],{"class":51761},[34,67386,51768],{"class":59},[34,67388,67389],{"class":36,"line":2157},[34,67390,67391],{"class":40},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[34,67393,67394,67396,67398,67400,67402,67404,67406,67409],{"class":36,"line":2162},[34,67395,11685],{"class":112},[34,67397,61753],{"class":63},[34,67399,14028],{"class":112},[34,67401,54857],{"class":59},[34,67403,54860],{"class":2427},[34,67405,617],{"class":59},[34,67407,67408],{"class":187},"'ul'",[34,67410,623],{"class":59},[34,67412,67413,67416,67418,67420,67422,67424,67426,67428,67430],{"class":36,"line":2191},[34,67414,67415],{"class":59},"    ul.",[34,67417,58274],{"class":2427},[34,67419,617],{"class":59},[34,67421,58279],{"class":187},[34,67423,12899],{"class":59},[34,67425,54910],{"class":112},[34,67427,2122],{"class":59},[34,67429,687],{"class":5680},[34,67431,12906],{"class":59},[34,67433,67434],{"class":36,"line":2196},[34,67435,67436],{"class":40},"      \u002F\u002F alert(1)\n",[34,67438,67439],{"class":36,"line":2213},[34,67440,67441],{"class":40},"      \u002F\u002F e.target就是我们点击的对象\n",[34,67443,67444],{"class":36,"line":2218},[34,67445,67446],{"class":40},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[34,67448,67449],{"class":36,"line":2223},[34,67450,67451],{"class":40},"      \u002F\u002F e.target.style.color = 'red'\n",[34,67453,67454,67456,67458],{"class":36,"line":2228},[34,67455,58705],{"class":59},[34,67457,58708],{"class":2427},[34,67459,67460],{"class":59},"(e)\n",[34,67462,67463],{"class":36,"line":2242},[34,67464,2864],{"emptyLinePlaceholder":540},[34,67466,67467,67469,67472],{"class":36,"line":2247},[34,67468,58705],{"class":59},[34,67470,67471],{"class":2427},"dir",[34,67473,67474],{"class":59},"(e.target)\n",[34,67476,67477],{"class":36,"line":3041},[34,67478,2864],{"emptyLinePlaceholder":540},[34,67480,67481],{"class":36,"line":3055},[34,67482,67483],{"class":40},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[34,67485,67486],{"class":36,"line":3063},[34,67487,67488],{"class":40},"      \u002F\u002F 通过tagName来进行判断\n",[34,67490,67491,67493,67496,67498,67501],{"class":36,"line":3068},[34,67492,54941],{"class":112},[34,67494,67495],{"class":59}," (e.target.tagName ",[34,67497,54947],{"class":112},[34,67499,67500],{"class":187}," 'LI'",[34,67502,12906],{"class":59},[34,67504,67505,67508,67510],{"class":36,"line":3074},[34,67506,67507],{"class":59},"        e.target.style.color ",[34,67509,447],{"class":112},[34,67511,67512],{"class":187}," 'red'\n",[34,67514,67515],{"class":36,"line":3080},[34,67516,52859],{"class":59},[34,67518,67519],{"class":36,"line":3085},[34,67520,33923],{"class":59},[34,67522,67523,67525,67527],{"class":36,"line":8412},[34,67524,52878],{"class":59},[34,67526,52274],{"class":51761},[34,67528,51768],{"class":59},[34,67530,67531,67533,67535],{"class":36,"line":8436},[34,67532,52246],{"class":59},[34,67534,52261],{"class":51761},[34,67536,51768],{"class":59},[34,67538,67539],{"class":36,"line":8441},[34,67540,2864],{"emptyLinePlaceholder":540},[34,67542,67543,67545,67547],{"class":36,"line":8447},[34,67544,52246],{"class":59},[34,67546,51096],{"class":51761},[34,67548,51768],{"class":59},[14,67550,67551],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67553,67554],{},"if(e.target.ragName==='P') {}",[14,67556,67557],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67559,67560],{},"通过事件委托的方式实现tab栏切换改造：",[14,67562,67563],{},"一定要记住自定义属性！！！！！！",[14,67565,67566],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67568,67569],{},"id是自定义的属性名",[14,67571,67572],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[25,67574,67576],{"className":51094,"code":67575,"language":51096,"meta":22,"style":22},"\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",[31,67577,67578,67588,67602,67606,67614,67628,67648,67668,67680,67688,67694,67704,67714,67718,67722,67728,67740,67752,67764,67780,67784,67788,67794,67806,67818,67830,67840,67850,67854,67858,67866,67878,67888,67900,67904,67908,67916,67926,67936,67946,67950,67954,67964,67978,67990,67994,67998,68010,68020,68036,68046,68050,68054,68068,68078,68088,68092,68096,68102,68116,68120,68124,68132,68142,68146,68150,68159,68169,68173,68181,68189,68193,68201,68215,68229,68241,68249,68288,68320,68352,68384,68416,68424,68432,68446,68480,68514,68548,68582,68616,68624,68632,68640,68645,68650,68669,68674,68694,68702,68707,68720,68741,68754,68758,68763,68768,68781,68801,68829,68833,68837,68841,68849,68857,68861],{"__ignoreMap":22},[34,67579,67580,67582,67584,67586],{"class":36,"line":37},[34,67581,51758],{"class":59},[34,67583,51762],{"class":51761},[34,67585,51765],{"class":2427},[34,67587,51768],{"class":59},[34,67589,67590,67592,67594,67596,67598,67600],{"class":36,"line":44},[34,67591,1515],{"class":59},[34,67593,51096],{"class":51761},[34,67595,51777],{"class":2427},[34,67597,447],{"class":59},[34,67599,51782],{"class":187},[34,67601,51768],{"class":59},[34,67603,67604],{"class":36,"line":50},[34,67605,2864],{"emptyLinePlaceholder":540},[34,67607,67608,67610,67612],{"class":36,"line":56},[34,67609,1515],{"class":59},[34,67611,51795],{"class":51761},[34,67613,51768],{"class":59},[34,67615,67616,67618,67620,67622,67624,67626],{"class":36,"line":107},[34,67617,52605],{"class":59},[34,67619,51805],{"class":51761},[34,67621,51808],{"class":2427},[34,67623,447],{"class":59},[34,67625,51813],{"class":187},[34,67627,59588],{"class":59},[34,67629,67630,67632,67634,67636,67638,67640,67642,67644,67646],{"class":36,"line":196},[34,67631,52605],{"class":59},[34,67633,51805],{"class":51761},[34,67635,51824],{"class":2427},[34,67637,447],{"class":59},[34,67639,51829],{"class":187},[34,67641,51832],{"class":2427},[34,67643,447],{"class":59},[34,67645,51837],{"class":187},[34,67647,59588],{"class":59},[34,67649,67650,67652,67654,67656,67658,67660,67662,67664,67666],{"class":36,"line":202},[34,67651,52605],{"class":59},[34,67653,51805],{"class":51761},[34,67655,15384],{"class":2427},[34,67657,447],{"class":59},[34,67659,51852],{"class":187},[34,67661,51832],{"class":2427},[34,67663,447],{"class":59},[34,67665,51859],{"class":187},[34,67667,59588],{"class":59},[34,67669,67670,67672,67674,67676,67678],{"class":36,"line":207},[34,67671,52605],{"class":59},[34,67673,51868],{"class":51761},[34,67675,64086],{"class":59},[34,67677,51868],{"class":51761},[34,67679,51768],{"class":59},[34,67681,67682,67684,67686],{"class":36,"line":222},[34,67683,52605],{"class":59},[34,67685,532],{"class":51761},[34,67687,51768],{"class":59},[34,67689,67690,67692],{"class":36,"line":227},[34,67691,6867],{"class":51761},[34,67693,16036],{"class":59},[34,67695,67696,67698,67700,67702],{"class":36,"line":232},[34,67697,55167],{"class":63},[34,67699,51898],{"class":59},[34,67701,319],{"class":63},[34,67703,1765],{"class":59},[34,67705,67706,67708,67710,67712],{"class":36,"line":238},[34,67707,55156],{"class":63},[34,67709,51898],{"class":59},[34,67711,319],{"class":63},[34,67713,1765],{"class":59},[34,67715,67716],{"class":36,"line":244},[34,67717,2651],{"class":59},[34,67719,67720],{"class":36,"line":250},[34,67721,2864],{"emptyLinePlaceholder":540},[34,67723,67724,67726],{"class":36,"line":256},[34,67725,64137],{"class":2427},[34,67727,16036],{"class":59},[34,67729,67730,67732,67734,67736,67738],{"class":36,"line":261},[34,67731,55232],{"class":63},[34,67733,51898],{"class":59},[34,67735,64148],{"class":63},[34,67737,51953],{"class":112},[34,67739,1765],{"class":59},[34,67741,67742,67744,67746,67748,67750],{"class":36,"line":267},[34,67743,55246],{"class":63},[34,67745,51898],{"class":59},[34,67747,64161],{"class":63},[34,67749,51953],{"class":112},[34,67751,1765],{"class":59},[34,67753,67754,67756,67758,67760,67762],{"class":36,"line":2138},[34,67755,55167],{"class":63},[34,67757,51898],{"class":59},[34,67759,1306],{"class":63},[34,67761,51953],{"class":112},[34,67763,1765],{"class":59},[34,67765,67766,67768,67770,67772,67774,67776,67778],{"class":36,"line":2143},[34,67767,62438],{"class":63},[34,67769,51898],{"class":59},[34,67771,64],{"class":63},[34,67773,51953],{"class":112},[34,67775,51982],{"class":63},[34,67777,62705],{"class":63},[34,67779,1765],{"class":59},[34,67781,67782],{"class":36,"line":2157},[34,67783,2651],{"class":59},[34,67785,67786],{"class":36,"line":2162},[34,67787,2864],{"emptyLinePlaceholder":540},[34,67789,67790,67792],{"class":36,"line":2191},[34,67791,64206],{"class":2427},[34,67793,16036],{"class":59},[34,67795,67796,67798,67800,67802,67804],{"class":36,"line":2196},[34,67797,55232],{"class":63},[34,67799,51898],{"class":59},[34,67801,919],{"class":63},[34,67803,936],{"class":112},[34,67805,1765],{"class":59},[34,67807,67808,67810,67812,67814,67816],{"class":36,"line":2213},[34,67809,55246],{"class":63},[34,67811,51898],{"class":59},[34,67813,1512],{"class":63},[34,67815,51953],{"class":112},[34,67817,1765],{"class":59},[34,67819,67820,67822,67824,67826,67828],{"class":36,"line":2218},[34,67821,57820],{"class":63},[34,67823,51898],{"class":59},[34,67825,1512],{"class":63},[34,67827,51953],{"class":112},[34,67829,1765],{"class":59},[34,67831,67832,67834,67836,67838],{"class":36,"line":2223},[34,67833,55470],{"class":63},[34,67835,51898],{"class":59},[34,67837,51938],{"class":63},[34,67839,1765],{"class":59},[34,67841,67842,67844,67846,67848],{"class":36,"line":2228},[34,67843,55481],{"class":63},[34,67845,51898],{"class":59},[34,67847,52129],{"class":63},[34,67849,1765],{"class":59},[34,67851,67852],{"class":36,"line":2242},[34,67853,2651],{"class":59},[34,67855,67856],{"class":36,"line":2247},[34,67857,2864],{"emptyLinePlaceholder":540},[34,67859,67860,67862,67864],{"class":36,"line":3041},[34,67861,64206],{"class":2427},[34,67863,64279],{"class":51761},[34,67865,16036],{"class":59},[34,67867,67868,67870,67872,67874,67876],{"class":36,"line":3055},[34,67869,55383],{"class":63},[34,67871,51898],{"class":59},[34,67873,1406],{"class":63},[34,67875,51953],{"class":112},[34,67877,1765],{"class":59},[34,67879,67880,67882,67884,67886],{"class":36,"line":3063},[34,67881,62795],{"class":63},[34,67883,51898],{"class":59},[34,67885,64302],{"class":63},[34,67887,1765],{"class":59},[34,67889,67890,67892,67894,67896,67898],{"class":36,"line":3068},[34,67891,62461],{"class":63},[34,67893,51898],{"class":59},[34,67895,1306],{"class":63},[34,67897,51953],{"class":112},[34,67899,1765],{"class":59},[34,67901,67902],{"class":36,"line":3074},[34,67903,2651],{"class":59},[34,67905,67906],{"class":36,"line":3080},[34,67907,2864],{"emptyLinePlaceholder":540},[34,67909,67910,67912,67914],{"class":36,"line":3085},[34,67911,64206],{"class":2427},[34,67913,61753],{"class":51761},[34,67915,16036],{"class":59},[34,67917,67918,67920,67922,67924],{"class":36,"line":8412},[34,67919,55193],{"class":63},[34,67921,51898],{"class":59},[34,67923,55198],{"class":63},[34,67925,1765],{"class":59},[34,67927,67928,67930,67932,67934],{"class":36,"line":8436},[34,67929,55470],{"class":63},[34,67931,51898],{"class":59},[34,67933,51938],{"class":63},[34,67935,1765],{"class":59},[34,67937,67938,67940,67942,67944],{"class":36,"line":8441},[34,67939,55481],{"class":63},[34,67941,51898],{"class":59},[34,67943,52041],{"class":63},[34,67945,1765],{"class":59},[34,67947,67948],{"class":36,"line":8447},[34,67949,2651],{"class":59},[34,67951,67952],{"class":36,"line":8474},[34,67953,2864],{"emptyLinePlaceholder":540},[34,67955,67956,67958,67960,67962],{"class":36,"line":8479},[34,67957,64206],{"class":2427},[34,67959,61753],{"class":51761},[34,67961,55536],{"class":51761},[34,67963,16036],{"class":59},[34,67965,67966,67968,67970,67972,67974,67976],{"class":36,"line":8485},[34,67967,55167],{"class":63},[34,67969,51898],{"class":59},[34,67971,319],{"class":63},[34,67973,9414],{"class":63},[34,67975,51953],{"class":112},[34,67977,1765],{"class":59},[34,67979,67980,67982,67984,67986,67988],{"class":36,"line":8497},[34,67981,55383],{"class":63},[34,67983,51898],{"class":59},[34,67985,1155],{"class":63},[34,67987,51953],{"class":112},[34,67989,1765],{"class":59},[34,67991,67992],{"class":36,"line":8509},[34,67993,2651],{"class":59},[34,67995,67996],{"class":36,"line":8521},[34,67997,2864],{"emptyLinePlaceholder":540},[34,67999,68000,68002,68004,68006,68008],{"class":36,"line":10180},[34,68001,64206],{"class":2427},[34,68003,61753],{"class":51761},[34,68005,55536],{"class":51761},[34,68007,1870],{"class":51761},[34,68009,16036],{"class":59},[34,68011,68012,68014,68016,68018],{"class":36,"line":10205},[34,68013,64431],{"class":63},[34,68015,51898],{"class":59},[34,68017,55198],{"class":63},[34,68019,1765],{"class":59},[34,68021,68022,68024,68026,68028,68030,68032,68034],{"class":36,"line":10228},[34,68023,62693],{"class":63},[34,68025,51898],{"class":59},[34,68027,70],{"class":63},[34,68029,51953],{"class":112},[34,68031,51982],{"class":63},[34,68033,64452],{"class":63},[34,68035,1765],{"class":59},[34,68037,68038,68040,68042,68044],{"class":36,"line":10252},[34,68039,57877],{"class":63},[34,68041,51898],{"class":59},[34,68043,62830],{"class":63},[34,68045,1765],{"class":59},[34,68047,68048],{"class":36,"line":10257},[34,68049,2651],{"class":59},[34,68051,68052],{"class":36,"line":10262},[34,68053,2864],{"emptyLinePlaceholder":540},[34,68055,68056,68058,68060,68062,68064,68066],{"class":36,"line":10267},[34,68057,64206],{"class":2427},[34,68059,61753],{"class":51761},[34,68061,55536],{"class":51761},[34,68063,1870],{"class":51761},[34,68065,64485],{"class":2427},[34,68067,16036],{"class":59},[34,68069,68070,68072,68074,68076],{"class":36,"line":10276},[34,68071,62252],{"class":63},[34,68073,51898],{"class":59},[34,68075,64496],{"class":63},[34,68077,1765],{"class":59},[34,68079,68080,68082,68084,68086],{"class":36,"line":10281},[34,68081,57877],{"class":63},[34,68083,51898],{"class":59},[34,68085,64496],{"class":63},[34,68087,1765],{"class":59},[34,68089,68090],{"class":36,"line":10287},[34,68091,2651],{"class":59},[34,68093,68094],{"class":36,"line":10308},[34,68095,2864],{"emptyLinePlaceholder":540},[34,68097,68098,68100],{"class":36,"line":10314},[34,68099,64521],{"class":2427},[34,68101,16036],{"class":59},[34,68103,68104,68106,68108,68110,68112,68114],{"class":36,"line":10328},[34,68105,55156],{"class":63},[34,68107,51898],{"class":59},[34,68109,319],{"class":63},[34,68111,64534],{"class":63},[34,68113,51953],{"class":112},[34,68115,1765],{"class":59},[34,68117,68118],{"class":36,"line":10334},[34,68119,2651],{"class":59},[34,68121,68122],{"class":36,"line":10361},[34,68123,2864],{"emptyLinePlaceholder":540},[34,68125,68126,68128,68130],{"class":36,"line":10370},[34,68127,64521],{"class":2427},[34,68129,62635],{"class":2427},[34,68131,16036],{"class":59},[34,68133,68134,68136,68138,68140],{"class":36,"line":10376},[34,68135,55470],{"class":63},[34,68137,51898],{"class":59},[34,68139,55198],{"class":63},[34,68141,1765],{"class":59},[34,68143,68144],{"class":36,"line":10384},[34,68145,2651],{"class":59},[34,68147,68148],{"class":36,"line":10389},[34,68149,2864],{"emptyLinePlaceholder":540},[34,68151,68152,68154,68157],{"class":36,"line":17068},[34,68153,64521],{"class":2427},[34,68155,68156],{"class":2427}," .active",[34,68158,16036],{"class":59},[34,68160,68161,68163,68165,68167],{"class":36,"line":17074},[34,68162,55470],{"class":63},[34,68164,51898],{"class":59},[34,68166,61330],{"class":63},[34,68168,1765],{"class":59},[34,68170,68171],{"class":36,"line":17097},[34,68172,2651],{"class":59},[34,68174,68175,68177,68179],{"class":36,"line":17103},[34,68176,52878],{"class":59},[34,68178,532],{"class":51761},[34,68180,51768],{"class":59},[34,68182,68183,68185,68187],{"class":36,"line":17126},[34,68184,52246],{"class":59},[34,68186,51795],{"class":51761},[34,68188,51768],{"class":59},[34,68190,68191],{"class":36,"line":17140},[34,68192,2864],{"emptyLinePlaceholder":540},[34,68194,68195,68197,68199],{"class":36,"line":17160},[34,68196,1515],{"class":59},[34,68198,52261],{"class":51761},[34,68200,51768],{"class":59},[34,68202,68203,68205,68207,68209,68211,68213],{"class":36,"line":17166},[34,68204,52605],{"class":59},[34,68206,52072],{"class":51761},[34,68208,53947],{"class":2427},[34,68210,447],{"class":59},[34,68212,64636],{"class":187},[34,68214,51768],{"class":59},[34,68216,68217,68219,68221,68223,68225,68227],{"class":36,"line":17177},[34,68218,51802],{"class":59},[34,68220,52072],{"class":51761},[34,68222,53947],{"class":2427},[34,68224,447],{"class":59},[34,68226,64651],{"class":187},[34,68228,51768],{"class":59},[34,68230,68231,68233,68235,68237,68239],{"class":36,"line":17200},[34,68232,55695],{"class":59},[34,68234,584],{"class":51761},[34,68236,64662],{"class":59},[34,68238,584],{"class":51761},[34,68240,51768],{"class":59},[34,68242,68243,68245,68247],{"class":36,"line":17222},[34,68244,55695],{"class":59},[34,68246,1611],{"class":51761},[34,68248,51768],{"class":59},[34,68250,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269,68271,68273,68275,68278,68280,68282,68284,68286],{"class":36,"line":17227},[34,68252,55763],{"class":59},[34,68254,570],{"class":51761},[34,68256,61513],{"class":59},[34,68258,847],{"class":51761},[34,68260,53947],{"class":2427},[34,68262,447],{"class":59},[34,68264,60167],{"class":187},[34,68266,61518],{"class":2427},[34,68268,447],{"class":59},[34,68270,64697],{"class":187},[34,68272,54412],{"class":2427},[34,68274,447],{"class":59},[34,68276,68277],{"class":187},"\"0\"",[34,68279,64700],{"class":59},[34,68281,847],{"class":51761},[34,68283,55775],{"class":59},[34,68285,570],{"class":51761},[34,68287,51768],{"class":59},[34,68289,68290,68292,68294,68296,68298,68300,68302,68304,68306,68308,68310,68312,68314,68316,68318],{"class":36,"line":17233},[34,68291,55763],{"class":59},[34,68293,570],{"class":51761},[34,68295,61513],{"class":59},[34,68297,847],{"class":51761},[34,68299,61518],{"class":2427},[34,68301,447],{"class":59},[34,68303,64697],{"class":187},[34,68305,54412],{"class":2427},[34,68307,447],{"class":59},[34,68309,4142],{"class":187},[34,68311,64727],{"class":59},[34,68313,847],{"class":51761},[34,68315,55775],{"class":59},[34,68317,570],{"class":51761},[34,68319,51768],{"class":59},[34,68321,68322,68324,68326,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346,68348,68350],{"class":36,"line":17247},[34,68323,55763],{"class":59},[34,68325,570],{"class":51761},[34,68327,61513],{"class":59},[34,68329,847],{"class":51761},[34,68331,61518],{"class":2427},[34,68333,447],{"class":59},[34,68335,64697],{"class":187},[34,68337,54412],{"class":2427},[34,68339,447],{"class":59},[34,68341,4165],{"class":187},[34,68343,64754],{"class":59},[34,68345,847],{"class":51761},[34,68347,55775],{"class":59},[34,68349,570],{"class":51761},[34,68351,51768],{"class":59},[34,68353,68354,68356,68358,68360,68362,68364,68366,68368,68370,68372,68374,68376,68378,68380,68382],{"class":36,"line":17260},[34,68355,55763],{"class":59},[34,68357,570],{"class":51761},[34,68359,61513],{"class":59},[34,68361,847],{"class":51761},[34,68363,61518],{"class":2427},[34,68365,447],{"class":59},[34,68367,64697],{"class":187},[34,68369,54412],{"class":2427},[34,68371,447],{"class":59},[34,68373,4178],{"class":187},[34,68375,64781],{"class":59},[34,68377,847],{"class":51761},[34,68379,55775],{"class":59},[34,68381,570],{"class":51761},[34,68383,51768],{"class":59},[34,68385,68386,68388,68390,68392,68394,68396,68398,68400,68402,68404,68406,68408,68410,68412,68414],{"class":36,"line":17265},[34,68387,55763],{"class":59},[34,68389,570],{"class":51761},[34,68391,61513],{"class":59},[34,68393,847],{"class":51761},[34,68395,61518],{"class":2427},[34,68397,447],{"class":59},[34,68399,64697],{"class":187},[34,68401,54412],{"class":2427},[34,68403,447],{"class":59},[34,68405,4191],{"class":187},[34,68407,64808],{"class":59},[34,68409,847],{"class":51761},[34,68411,55775],{"class":59},[34,68413,570],{"class":51761},[34,68415,51768],{"class":59},[34,68417,68418,68420,68422],{"class":36,"line":17279},[34,68419,55868],{"class":59},[34,68421,1611],{"class":51761},[34,68423,51768],{"class":59},[34,68425,68426,68428,68430],{"class":36,"line":17284},[34,68427,52237],{"class":59},[34,68429,52072],{"class":51761},[34,68431,51768],{"class":59},[34,68433,68434,68436,68438,68440,68442,68444],{"class":36,"line":17290},[34,68435,51802],{"class":59},[34,68437,52072],{"class":51761},[34,68439,53947],{"class":2427},[34,68441,447],{"class":59},[34,68443,64845],{"class":187},[34,68445,51768],{"class":59},[34,68447,68448,68450,68452,68454,68456,68458,68460,68462,68464,68466,68468,68470,68472,68474,68476,68478],{"class":36,"line":17295},[34,68449,55695],{"class":59},[34,68451,52072],{"class":51761},[34,68453,53947],{"class":2427},[34,68455,447],{"class":59},[34,68457,64860],{"class":187},[34,68459,61513],{"class":59},[34,68461,20],{"class":51761},[34,68463,55700],{"class":2427},[34,68465,447],{"class":59},[34,68467,64871],{"class":187},[34,68469,55708],{"class":2427},[34,68471,447],{"class":59},[34,68473,8116],{"class":187},[34,68475,64880],{"class":59},[34,68477,52072],{"class":51761},[34,68479,51768],{"class":59},[34,68481,68482,68484,68486,68488,68490,68492,68494,68496,68498,68500,68502,68504,68506,68508,68510,68512],{"class":36,"line":17309},[34,68483,55695],{"class":59},[34,68485,52072],{"class":51761},[34,68487,53947],{"class":2427},[34,68489,447],{"class":59},[34,68491,63084],{"class":187},[34,68493,61513],{"class":59},[34,68495,20],{"class":51761},[34,68497,55700],{"class":2427},[34,68499,447],{"class":59},[34,68501,64907],{"class":187},[34,68503,55708],{"class":2427},[34,68505,447],{"class":59},[34,68507,8116],{"class":187},[34,68509,64880],{"class":59},[34,68511,52072],{"class":51761},[34,68513,51768],{"class":59},[34,68515,68516,68518,68520,68522,68524,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544,68546],{"class":36,"line":17314},[34,68517,55695],{"class":59},[34,68519,52072],{"class":51761},[34,68521,53947],{"class":2427},[34,68523,447],{"class":59},[34,68525,63084],{"class":187},[34,68527,61513],{"class":59},[34,68529,20],{"class":51761},[34,68531,55700],{"class":2427},[34,68533,447],{"class":59},[34,68535,64942],{"class":187},[34,68537,55708],{"class":2427},[34,68539,447],{"class":59},[34,68541,8116],{"class":187},[34,68543,64880],{"class":59},[34,68545,52072],{"class":51761},[34,68547,51768],{"class":59},[34,68549,68550,68552,68554,68556,68558,68560,68562,68564,68566,68568,68570,68572,68574,68576,68578,68580],{"class":36,"line":17319},[34,68551,55695],{"class":59},[34,68553,52072],{"class":51761},[34,68555,53947],{"class":2427},[34,68557,447],{"class":59},[34,68559,63084],{"class":187},[34,68561,61513],{"class":59},[34,68563,20],{"class":51761},[34,68565,55700],{"class":2427},[34,68567,447],{"class":59},[34,68569,64977],{"class":187},[34,68571,55708],{"class":2427},[34,68573,447],{"class":59},[34,68575,8116],{"class":187},[34,68577,64880],{"class":59},[34,68579,52072],{"class":51761},[34,68581,51768],{"class":59},[34,68583,68584,68586,68588,68590,68592,68594,68596,68598,68600,68602,68604,68606,68608,68610,68612,68614],{"class":36,"line":17333},[34,68585,55695],{"class":59},[34,68587,52072],{"class":51761},[34,68589,53947],{"class":2427},[34,68591,447],{"class":59},[34,68593,63084],{"class":187},[34,68595,61513],{"class":59},[34,68597,20],{"class":51761},[34,68599,55700],{"class":2427},[34,68601,447],{"class":59},[34,68603,65012],{"class":187},[34,68605,55708],{"class":2427},[34,68607,447],{"class":59},[34,68609,8116],{"class":187},[34,68611,64880],{"class":59},[34,68613,52072],{"class":51761},[34,68615,51768],{"class":59},[34,68617,68618,68620,68622],{"class":36,"line":17345},[34,68619,52237],{"class":59},[34,68621,52072],{"class":51761},[34,68623,51768],{"class":59},[34,68625,68626,68628,68630],{"class":36,"line":17350},[34,68627,52878],{"class":59},[34,68629,52072],{"class":51761},[34,68631,51768],{"class":59},[34,68633,68634,68636,68638],{"class":36,"line":17363},[34,68635,52605],{"class":59},[34,68637,52274],{"class":51761},[34,68639,51768],{"class":59},[34,68641,68642],{"class":36,"line":17368},[34,68643,68644],{"class":40},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[34,68646,68647],{"class":36,"line":17373},[34,68648,68649],{"class":40},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[34,68651,68652,68654,68656,68658,68660,68662,68664,68667],{"class":36,"line":17378},[34,68653,11685],{"class":112},[34,68655,61753],{"class":63},[34,68657,14028],{"class":112},[34,68659,54857],{"class":59},[34,68661,54860],{"class":2427},[34,68663,617],{"class":59},[34,68665,68666],{"class":187},"'.tab-nav ul'",[34,68668,623],{"class":59},[34,68670,68671],{"class":36,"line":17391},[34,68672,68673],{"class":40},"    \u002F\u002F 2.添加事件\n",[34,68675,68676,68678,68680,68682,68684,68686,68688,68690,68692],{"class":36,"line":17396},[34,68677,67415],{"class":59},[34,68679,58274],{"class":2427},[34,68681,617],{"class":59},[34,68683,58279],{"class":187},[34,68685,12899],{"class":59},[34,68687,54910],{"class":112},[34,68689,2122],{"class":59},[34,68691,687],{"class":5680},[34,68693,12906],{"class":59},[34,68695,68696,68698,68700],{"class":36,"line":33096},[34,68697,58705],{"class":59},[34,68699,67471],{"class":2427},[34,68701,67474],{"class":59},[34,68703,68704],{"class":36,"line":33102},[34,68705,68706],{"class":40},"      \u002F\u002Fe.targer是我们点击的对象\n",[34,68708,68709,68711,68713,68715,68718],{"class":36,"line":33108},[34,68710,54941],{"class":112},[34,68712,67495],{"class":59},[34,68714,54947],{"class":112},[34,68716,68717],{"class":187}," 'A'",[34,68719,12906],{"class":59},[34,68721,68722,68724,68726,68728,68731,68733,68735,68737,68739],{"class":36,"line":33114},[34,68723,52386],{"class":59},[34,68725,54860],{"class":2427},[34,68727,617],{"class":59},[34,68729,68730],{"class":187},"'.active'",[34,68732,57464],{"class":59},[34,68734,57467],{"class":2427},[34,68736,617],{"class":59},[34,68738,65175],{"class":187},[34,68740,623],{"class":59},[34,68742,68743,68746,68748,68750,68752],{"class":36,"line":33120},[34,68744,68745],{"class":59},"        e.target.classList.",[34,68747,5798],{"class":2427},[34,68749,617],{"class":59},[34,68751,65175],{"class":187},[34,68753,623],{"class":59},[34,68755,68756],{"class":36,"line":33131},[34,68757,2864],{"emptyLinePlaceholder":540},[34,68759,68760],{"class":36,"line":33137},[34,68761,68762],{"class":40},"        \u002F\u002F 下面大盒子模块\n",[34,68764,68765],{"class":36,"line":33157},[34,68766,68767],{"class":40},"        \u002F\u002F console.log(e.target.dataset.id)\n",[34,68769,68770,68772,68774,68776,68778],{"class":36,"line":33163},[34,68771,61731],{"class":112},[34,68773,3496],{"class":63},[34,68775,14028],{"class":112},[34,68777,46027],{"class":112},[34,68779,68780],{"class":59},"e.target.dataset.id\n",[34,68782,68783,68785,68787,68789,68791,68793,68795,68797,68799],{"class":36,"line":33174},[34,68784,52386],{"class":59},[34,68786,54860],{"class":2427},[34,68788,617],{"class":59},[34,68790,65223],{"class":187},[34,68792,57464],{"class":59},[34,68794,57467],{"class":2427},[34,68796,617],{"class":59},[34,68798,65175],{"class":187},[34,68800,623],{"class":59},[34,68802,68803,68805,68807,68809,68811,68813,68815,68817,68819,68821,68823,68825,68827],{"class":36,"line":33180},[34,68804,52386],{"class":59},[34,68806,54860],{"class":2427},[34,68808,617],{"class":59},[34,68810,65249],{"class":187},[34,68812,1048],{"class":59},[34,68814,46027],{"class":112},[34,68816,25583],{"class":63},[34,68818,57493],{"class":187},[34,68820,57464],{"class":59},[34,68822,5798],{"class":2427},[34,68824,617],{"class":59},[34,68826,65175],{"class":187},[34,68828,623],{"class":59},[34,68830,68831],{"class":36,"line":33186},[34,68832,2864],{"emptyLinePlaceholder":540},[34,68834,68835],{"class":36,"line":33192},[34,68836,52859],{"class":59},[34,68838,68839],{"class":36,"line":33198},[34,68840,33923],{"class":59},[34,68842,68843,68845,68847],{"class":36,"line":33204},[34,68844,52878],{"class":59},[34,68846,52274],{"class":51761},[34,68848,51768],{"class":59},[34,68850,68851,68853,68855],{"class":36,"line":33210},[34,68852,52246],{"class":59},[34,68854,52261],{"class":51761},[34,68856,51768],{"class":59},[34,68858,68859],{"class":36,"line":33216},[34,68860,2864],{"emptyLinePlaceholder":540},[34,68862,68863,68865,68867],{"class":36,"line":33236},[34,68864,52246],{"class":59},[34,68866,51096],{"class":51761},[34,68868,51768],{"class":59},[584,68870,68872],{"id":68871},"_333-页面加载事件","3.3.3 页面加载事件",[567,68874,68875],{},[570,68876,68877],{},"load",[14,68879,68880],{},[20,68881],{"alt":22,"src":68882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68884,68885],{},"window代表整个窗口，比document还要大",[14,68887,68888],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68890,68891],{},"img.addEventListener('load', function () {",[14,68893,68894],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68896,52925],{},[567,68898,68899],{"start":44},[570,68900,68901],{},"DOMContentLoaded",[14,68903,68904],{},[20,68905],{"alt":22,"src":68906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68908,68909],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[584,68911,68913],{"id":68912},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68915,68916],{},[20,68917],{"alt":22,"src":68918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68920,68921],{},[20,68922],{"alt":22,"src":68923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68925,68926],{},[20,68927],{"alt":22,"src":68928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68930,68931],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68933,68934],{},"获得的是数字型数据，不带单位",[14,68936,68937],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68939,68940],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68942,68943],{},"它是通过document.documentElement来获取",[14,68945,68946],{},[20,68947],{"alt":22,"src":68948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68950,68951],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[584,68953,68955],{"id":68954},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68957,68958],{},[20,68959],{"alt":22,"src":68960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68962,68963],{},[20,68964],{"alt":22,"src":68965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[584,68967,68969],{"id":68968},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68971,68972],{},[20,68973],{"alt":22,"src":68974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68976,68977],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68979,68980],{},[20,68981],{"alt":22,"src":68982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68984,68985],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68987,68988],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68990,68991],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68993,68994],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68996,68997],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68999,69000],{},[20,69001],{"alt":22,"src":69002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,69004,69005],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,69007,69008],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,69010,69011],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,69013,69014],{},"e.pageX-box.getBoundingClientRect()",[584,69016,69018],{"id":69017},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,69020,69021],{},[20,69022],{"alt":22,"src":69023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,69025,69026],{},"这个是相对于视口来说的，它是个方法，不是属性值",[584,69028,69030],{"id":69029},"_338-总结","3.3.8 总结",[14,69032,69033],{},[20,69034],{"alt":22,"src":69035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69037,69038],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69040,69041],{},"修改盒子的宽高只能通过width和height来实现",[584,69043,69045],{"id":69044},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[25,69047,69049],{"className":51094,"code":69048,"language":51096,"meta":22,"style":22},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[31,69050,69051,69056,69061,69066,69071],{"__ignoreMap":22},[34,69052,69053],{"class":36,"line":37},[34,69054,69055],{"class":59},"\u002F* 页面滑动 *\u002F\n",[34,69057,69058],{"class":36,"line":44},[34,69059,69060],{"class":59},"html {\n",[34,69062,69063],{"class":36,"line":50},[34,69064,69065],{"class":59},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[34,69067,69068],{"class":36,"line":56},[34,69069,69070],{"class":59},"  scroll-behavior: smooth;\n",[34,69072,69073],{"class":36,"line":107},[34,69074,2036],{"class":59},[14,69076,69077],{},"默认是auto",[584,69079,69081],{"id":69080},"_3310-日期对象","3.3.10 日期对象",[22462,69083,69085],{"id":69084},"_33101-实例化","3.3.10.1 实例化",[14,69087,69088],{},[20,69089],{"alt":22,"src":69090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22462,69092,69094],{"id":69093},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69096,69097],{},[20,69098],{"alt":22,"src":69099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69101,69102],{},"月份+1",[14,69104,69105],{},"老外认为第一天为0，星期天",[14,69107,69108],{},"方法使用的时候必须要跟括号",[14,69110,69111],{},"快速获得日期",[14,69113,69114],{},"\u002F\u002F 得到年月日",[14,69116,69117],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69119,69120],{},"\u002F\u002F 得到当地日期",[14,69122,69123],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69125,69126],{},"\u002F\u002F 得到当地时间",[14,69128,69129],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69131,69132],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69134,69135],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52274,69137,69138],{},"\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",[14,69140,69141],{},"学会去封装函数！",[22462,69143,69145],{"id":69144},"_33103-时间戳","3.3.10.3 时间戳",[14,69147,69148],{},[20,69149],{"alt":22,"src":69150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69152,69153],{},[20,69154],{"alt":22,"src":69155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69157,69158],{},"三种方法记住一个就可以",[584,69160,69162],{"id":69161},"_3311-节点操作","3.3.11 节点操作",[22462,69164,69166],{"id":69165},"_33111-dom节点","3.3.11.1 DOM节点",[14,69168,69169],{},[20,69170],{"alt":22,"src":69171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69173,69174],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22462,69176,69178],{"id":69177},"_33112-查找节点","3.3.11.2 查找节点",[14,69180,69181],{},"前边的document.querySelector()是获取的元素",[14,69183,69184],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69186,69187],{},[20,69188],{"alt":22,"src":69189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[567,69191,69192],{},[570,69193,69194],{},"父节点",[14,69196,69197],{},[20,69198],{"alt":22,"src":69199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[567,69201,69202],{"start":44},[570,69203,69204],{},"子节点",[14,69206,69207],{},[20,69208],{"alt":22,"src":69209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69211,69212],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69214,69215],{},"children获得的是伪数组，是亲儿子",[567,69217,69218],{"start":50},[570,69219,69220],{},"兄弟节点",[14,69222,69223],{},[20,69224],{"alt":22,"src":69225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22462,69227,69229],{"id":69228},"_33113-增加节点","3.3.11.3 增加节点",[14,69231,69232],{},[20,69233],{"alt":22,"src":69234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69236,69237],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69239,69240],{},[20,69241],{"alt":22,"src":69242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69244,69245],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69247,69248],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69250,69251],{},"例：",[52274,69253,69254],{},"\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",[14,69256,69257],{},[20,69258],{"alt":22,"src":69259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69261,69262],{},"false只克隆标签，里边的内容不会克隆过来",[25,69264,69266],{"className":51094,"code":69265,"language":51096,"meta":22,"style":22},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[31,69267,69268],{"__ignoreMap":22},[34,69269,69270],{"class":36,"line":37},[34,69271,69265],{"class":59},[22462,69273,69275],{"id":69274},"_33114-删除节点","3.3.11.4 删除节点",[14,69277,69278],{},[20,69279],{"alt":22,"src":69280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69282,69283],{},"父亲删儿子",[14,69285,69286],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[584,69288,69290],{"id":69289},"_3312-m端事件","3.3.12 M端事件",[14,69292,69293],{},"M端就是移动端",[14,69295,69296],{},[20,69297],{"alt":22,"src":69298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[584,69300,69302],{"id":69301},"_3313-插件","3.3.13 插件",[14,69304,69305],{},"要熟悉官网！！！",[14,69307,69308],{},[847,69309,69310],{"href":69310,"rel":69311},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24329],[14,69313,69314],{},[847,69315,69316],{"href":69316,"rel":69317},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24329],[584,69319,69321],{"id":69320},"_3314-学生信息表","3.3.14 学生信息表",[567,69323,69324,69327,69330,69333,69336,69339,69342,69345],{},[570,69325,69326],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[570,69328,69329],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[570,69331,69332],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[570,69334,69335],{},"用好表单元素自带的属性，value,name等",[570,69337,69338],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[570,69340,69341],{},"不要忘记事件对象",[570,69343,69344],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[570,69346,69347],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69349,69350],{},"结构：",[25,69352,69354],{"className":51094,"code":69353,"language":51096,"meta":22,"style":22},"\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",[31,69355,69356,69366,69380,69384,69392,69406,69426,69447,69460,69484,69492,69496,69504,69517,69538,69566,69594,69599,69621,69641,69660,69668,69696,69718,69738,69758,69778,69798,69818,69826,69846,69854,69858,69871,69879,69887,69895,69908,69921,69934,69947,69960,69973,69986,69994,70002,70010,70015,70020,70025,70030,70035,70040,70045,70050,70055,70060,70065,70070,70075,70083,70091,70099,70103,70123,70142,70162,70182,70202,70222,70226,70231,70251,70256,70266,70271,70276,70296,70318,70323,70333,70337,70341,70346,70351,70380,70394,70409,70413,70417,70421,70426,70437,70450,70455,70460,70465,70470,70475,70479,70484,70489,70498,70503,70508,70520,70525,70532,70536,70541,70551,70556,70566,70571,70599,70620,70630,70650,70668,70685,70702,70719,70736,70740,70750,70755,70760,70765,70776,70780,70784,70788,70793,70798,70819,70831,70836,70841,70846,70860,70865,70872,70876,70880,70888,70892,70900,70904],{"__ignoreMap":22},[34,69357,69358,69360,69362,69364],{"class":36,"line":37},[34,69359,51758],{"class":59},[34,69361,51762],{"class":51761},[34,69363,51765],{"class":2427},[34,69365,51768],{"class":59},[34,69367,69368,69370,69372,69374,69376,69378],{"class":36,"line":44},[34,69369,1515],{"class":59},[34,69371,51096],{"class":51761},[34,69373,51777],{"class":2427},[34,69375,447],{"class":59},[34,69377,51782],{"class":187},[34,69379,51768],{"class":59},[34,69381,69382],{"class":36,"line":50},[34,69383,2864],{"emptyLinePlaceholder":540},[34,69385,69386,69388,69390],{"class":36,"line":56},[34,69387,1515],{"class":59},[34,69389,51795],{"class":51761},[34,69391,51768],{"class":59},[34,69393,69394,69396,69398,69400,69402,69404],{"class":36,"line":107},[34,69395,52605],{"class":59},[34,69397,51805],{"class":51761},[34,69399,51808],{"class":2427},[34,69401,447],{"class":59},[34,69403,51813],{"class":187},[34,69405,59588],{"class":59},[34,69407,69408,69410,69412,69414,69416,69418,69420,69422,69424],{"class":36,"line":196},[34,69409,52605],{"class":59},[34,69411,51805],{"class":51761},[34,69413,15384],{"class":2427},[34,69415,447],{"class":59},[34,69417,51852],{"class":187},[34,69419,51832],{"class":2427},[34,69421,447],{"class":59},[34,69423,51859],{"class":187},[34,69425,59588],{"class":59},[34,69427,69428,69430,69432,69434,69436,69438,69440,69442,69445],{"class":36,"line":202},[34,69429,52605],{"class":59},[34,69431,51805],{"class":51761},[34,69433,51824],{"class":2427},[34,69435,447],{"class":59},[34,69437,51829],{"class":187},[34,69439,51832],{"class":2427},[34,69441,447],{"class":59},[34,69443,69444],{"class":187},"\"ie=edge\"",[34,69446,59588],{"class":59},[34,69448,69449,69451,69453,69456,69458],{"class":36,"line":207},[34,69450,52605],{"class":59},[34,69452,51868],{"class":51761},[34,69454,69455],{"class":59},">学生信息管理\u003C\u002F",[34,69457,51868],{"class":51761},[34,69459,51768],{"class":59},[34,69461,69462,69464,69467,69470,69472,69475,69477,69479,69482],{"class":36,"line":222},[34,69463,52605],{"class":59},[34,69465,69466],{"class":51761},"link",[34,69468,69469],{"class":2427}," rel",[34,69471,447],{"class":59},[34,69473,69474],{"class":187},"\"stylesheet\"",[34,69476,61518],{"class":2427},[34,69478,447],{"class":59},[34,69480,69481],{"class":187},"\"css\u002Findex.css\"",[34,69483,59588],{"class":59},[34,69485,69486,69488,69490],{"class":36,"line":227},[34,69487,52246],{"class":59},[34,69489,51795],{"class":51761},[34,69491,51768],{"class":59},[34,69493,69494],{"class":36,"line":232},[34,69495,2864],{"emptyLinePlaceholder":540},[34,69497,69498,69500,69502],{"class":36,"line":238},[34,69499,1515],{"class":59},[34,69501,52261],{"class":51761},[34,69503,51768],{"class":59},[34,69505,69506,69508,69510,69513,69515],{"class":36,"line":244},[34,69507,52605],{"class":59},[34,69509,10],{"class":51761},[34,69511,69512],{"class":59},">新增学员\u003C\u002F",[34,69514,10],{"class":51761},[34,69516,51768],{"class":59},[34,69518,69519,69521,69523,69525,69527,69529,69532,69534,69536],{"class":36,"line":250},[34,69520,52605],{"class":59},[34,69522,67086],{"class":51761},[34,69524,53947],{"class":2427},[34,69526,447],{"class":59},[34,69528,63125],{"class":187},[34,69530,69531],{"class":2427}," autocomplete",[34,69533,447],{"class":59},[34,69535,32239],{"class":187},[34,69537,51768],{"class":59},[34,69539,69540,69543,69545,69547,69549,69551,69553,69555,69558,69560,69562,69564],{"class":36,"line":256},[34,69541,69542],{"class":59},"    姓名：\u003C",[34,69544,54282],{"class":51761},[34,69546,54285],{"class":2427},[34,69548,447],{"class":59},[34,69550,63160],{"class":187},[34,69552,53947],{"class":2427},[34,69554,447],{"class":59},[34,69556,69557],{"class":187},"\"uname\"",[34,69559,15384],{"class":2427},[34,69561,447],{"class":59},[34,69563,69557],{"class":187},[34,69565,59588],{"class":59},[34,69567,69568,69571,69573,69575,69577,69579,69581,69583,69586,69588,69590,69592],{"class":36,"line":261},[34,69569,69570],{"class":59},"    年龄：\u003C",[34,69572,54282],{"class":51761},[34,69574,54285],{"class":2427},[34,69576,447],{"class":59},[34,69578,63160],{"class":187},[34,69580,53947],{"class":2427},[34,69582,447],{"class":59},[34,69584,69585],{"class":187},"\"age\"",[34,69587,15384],{"class":2427},[34,69589,447],{"class":59},[34,69591,69585],{"class":187},[34,69593,59588],{"class":59},[34,69595,69596],{"class":36,"line":267},[34,69597,69598],{"class":59},"    性别:\n",[34,69600,69601,69603,69606,69608,69610,69613,69615,69617,69619],{"class":36,"line":2138},[34,69602,51802],{"class":59},[34,69604,69605],{"class":51761},"select",[34,69607,15384],{"class":2427},[34,69609,447],{"class":59},[34,69611,69612],{"class":187},"\"gender\"",[34,69614,53947],{"class":2427},[34,69616,447],{"class":59},[34,69618,69612],{"class":187},[34,69620,51768],{"class":59},[34,69622,69623,69625,69628,69630,69632,69634,69637,69639],{"class":36,"line":2143},[34,69624,55695],{"class":59},[34,69626,69627],{"class":51761},"option",[34,69629,67112],{"class":2427},[34,69631,447],{"class":59},[34,69633,10425],{"class":187},[34,69635,69636],{"class":59},">男\u003C\u002F",[34,69638,69627],{"class":51761},[34,69640,51768],{"class":59},[34,69642,69643,69645,69647,69649,69651,69653,69656,69658],{"class":36,"line":2157},[34,69644,55695],{"class":59},[34,69646,69627],{"class":51761},[34,69648,67112],{"class":2427},[34,69650,447],{"class":59},[34,69652,10494],{"class":187},[34,69654,69655],{"class":59},">女\u003C\u002F",[34,69657,69627],{"class":51761},[34,69659,51768],{"class":59},[34,69661,69662,69664,69666],{"class":36,"line":2162},[34,69663,52237],{"class":59},[34,69665,69605],{"class":51761},[34,69667,51768],{"class":59},[34,69669,69670,69673,69675,69677,69679,69681,69683,69685,69688,69690,69692,69694],{"class":36,"line":2191},[34,69671,69672],{"class":59},"    薪资：\u003C",[34,69674,54282],{"class":51761},[34,69676,54285],{"class":2427},[34,69678,447],{"class":59},[34,69680,63160],{"class":187},[34,69682,53947],{"class":2427},[34,69684,447],{"class":59},[34,69686,69687],{"class":187},"\"salary\"",[34,69689,15384],{"class":2427},[34,69691,447],{"class":59},[34,69693,69687],{"class":187},[34,69695,59588],{"class":59},[34,69697,69698,69701,69703,69705,69707,69710,69712,69714,69716],{"class":36,"line":2196},[34,69699,69700],{"class":59},"    就业城市：\u003C",[34,69702,69605],{"class":51761},[34,69704,15384],{"class":2427},[34,69706,447],{"class":59},[34,69708,69709],{"class":187},"\"city\"",[34,69711,53947],{"class":2427},[34,69713,447],{"class":59},[34,69715,69709],{"class":187},[34,69717,51768],{"class":59},[34,69719,69720,69722,69724,69726,69728,69731,69734,69736],{"class":36,"line":2213},[34,69721,55695],{"class":59},[34,69723,69627],{"class":51761},[34,69725,67112],{"class":2427},[34,69727,447],{"class":59},[34,69729,69730],{"class":187},"\"北京\"",[34,69732,69733],{"class":59},">北京\u003C\u002F",[34,69735,69627],{"class":51761},[34,69737,51768],{"class":59},[34,69739,69740,69742,69744,69746,69748,69751,69754,69756],{"class":36,"line":2218},[34,69741,55695],{"class":59},[34,69743,69627],{"class":51761},[34,69745,67112],{"class":2427},[34,69747,447],{"class":59},[34,69749,69750],{"class":187},"\"上海\"",[34,69752,69753],{"class":59},">上海\u003C\u002F",[34,69755,69627],{"class":51761},[34,69757,51768],{"class":59},[34,69759,69760,69762,69764,69766,69768,69771,69774,69776],{"class":36,"line":2223},[34,69761,55695],{"class":59},[34,69763,69627],{"class":51761},[34,69765,67112],{"class":2427},[34,69767,447],{"class":59},[34,69769,69770],{"class":187},"\"广州\"",[34,69772,69773],{"class":59},">广州\u003C\u002F",[34,69775,69627],{"class":51761},[34,69777,51768],{"class":59},[34,69779,69780,69782,69784,69786,69788,69791,69794,69796],{"class":36,"line":2228},[34,69781,55695],{"class":59},[34,69783,69627],{"class":51761},[34,69785,67112],{"class":2427},[34,69787,447],{"class":59},[34,69789,69790],{"class":187},"\"深圳\"",[34,69792,69793],{"class":59},">深圳\u003C\u002F",[34,69795,69627],{"class":51761},[34,69797,51768],{"class":59},[34,69799,69800,69802,69804,69806,69808,69811,69814,69816],{"class":36,"line":2242},[34,69801,55695],{"class":59},[34,69803,69627],{"class":51761},[34,69805,67112],{"class":2427},[34,69807,447],{"class":59},[34,69809,69810],{"class":187},"\"曹县\"",[34,69812,69813],{"class":59},">曹县\u003C\u002F",[34,69815,69627],{"class":51761},[34,69817,51768],{"class":59},[34,69819,69820,69822,69824],{"class":36,"line":2247},[34,69821,52237],{"class":59},[34,69823,69605],{"class":51761},[34,69825,51768],{"class":59},[34,69827,69828,69830,69832,69834,69836,69839,69842,69844],{"class":36,"line":3041},[34,69829,51802],{"class":59},[34,69831,54348],{"class":51761},[34,69833,53947],{"class":2427},[34,69835,447],{"class":59},[34,69837,69838],{"class":187},"\"add\"",[34,69840,69841],{"class":59},">录入\u003C\u002F",[34,69843,54348],{"class":51761},[34,69845,51768],{"class":59},[34,69847,69848,69850,69852],{"class":36,"line":3055},[34,69849,52878],{"class":59},[34,69851,67086],{"class":51761},[34,69853,51768],{"class":59},[34,69855,69856],{"class":36,"line":3063},[34,69857,2864],{"emptyLinePlaceholder":540},[34,69859,69860,69862,69864,69867,69869],{"class":36,"line":3068},[34,69861,52605],{"class":59},[34,69863,10],{"class":51761},[34,69865,69866],{"class":59},">就业榜\u003C\u002F",[34,69868,10],{"class":51761},[34,69870,51768],{"class":59},[34,69872,69873,69875,69877],{"class":36,"line":3074},[34,69874,52605],{"class":59},[34,69876,748],{"class":51761},[34,69878,51768],{"class":59},[34,69880,69881,69883,69885],{"class":36,"line":3080},[34,69882,51802],{"class":59},[34,69884,751],{"class":51761},[34,69886,51768],{"class":59},[34,69888,69889,69891,69893],{"class":36,"line":3085},[34,69890,55695],{"class":59},[34,69892,754],{"class":51761},[34,69894,51768],{"class":59},[34,69896,69897,69899,69901,69904,69906],{"class":36,"line":8412},[34,69898,55763],{"class":59},[34,69900,757],{"class":51761},[34,69902,69903],{"class":59},">序号\u003C\u002F",[34,69905,757],{"class":51761},[34,69907,51768],{"class":59},[34,69909,69910,69912,69914,69917,69919],{"class":36,"line":8436},[34,69911,55763],{"class":59},[34,69913,757],{"class":51761},[34,69915,69916],{"class":59},">姓名\u003C\u002F",[34,69918,757],{"class":51761},[34,69920,51768],{"class":59},[34,69922,69923,69925,69927,69930,69932],{"class":36,"line":8441},[34,69924,55763],{"class":59},[34,69926,757],{"class":51761},[34,69928,69929],{"class":59},">年龄\u003C\u002F",[34,69931,757],{"class":51761},[34,69933,51768],{"class":59},[34,69935,69936,69938,69940,69943,69945],{"class":36,"line":8447},[34,69937,55763],{"class":59},[34,69939,757],{"class":51761},[34,69941,69942],{"class":59},">性别\u003C\u002F",[34,69944,757],{"class":51761},[34,69946,51768],{"class":59},[34,69948,69949,69951,69953,69956,69958],{"class":36,"line":8474},[34,69950,55763],{"class":59},[34,69952,757],{"class":51761},[34,69954,69955],{"class":59},">薪资\u003C\u002F",[34,69957,757],{"class":51761},[34,69959,51768],{"class":59},[34,69961,69962,69964,69966,69969,69971],{"class":36,"line":8479},[34,69963,55763],{"class":59},[34,69965,757],{"class":51761},[34,69967,69968],{"class":59},">就业城市\u003C\u002F",[34,69970,757],{"class":51761},[34,69972,51768],{"class":59},[34,69974,69975,69977,69979,69982,69984],{"class":36,"line":8485},[34,69976,55763],{"class":59},[34,69978,757],{"class":51761},[34,69980,69981],{"class":59},">操作\u003C\u002F",[34,69983,757],{"class":51761},[34,69985,51768],{"class":59},[34,69987,69988,69990,69992],{"class":36,"line":8497},[34,69989,55868],{"class":59},[34,69991,754],{"class":51761},[34,69993,51768],{"class":59},[34,69995,69996,69998,70000],{"class":36,"line":8509},[34,69997,52237],{"class":59},[34,69999,751],{"class":51761},[34,70001,51768],{"class":59},[34,70003,70004,70006,70008],{"class":36,"line":8521},[34,70005,51802],{"class":59},[34,70007,795],{"class":51761},[34,70009,51768],{"class":59},[34,70011,70012],{"class":36,"line":10180},[34,70013,70014],{"class":40},"      \u003C!-- \n",[34,70016,70017],{"class":36,"line":10205},[34,70018,70019],{"class":40},"        \u003Ctr>\n",[34,70021,70022],{"class":36,"line":10228},[34,70023,70024],{"class":40},"          \u003Ctd>1001\u003C\u002Ftd>\n",[34,70026,70027],{"class":36,"line":10252},[34,70028,70029],{"class":40},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[34,70031,70032],{"class":36,"line":10257},[34,70033,70034],{"class":40},"          \u003Ctd>19\u003C\u002Ftd>\n",[34,70036,70037],{"class":36,"line":10262},[34,70038,70039],{"class":40},"          \u003Ctd>男\u003C\u002Ftd>\n",[34,70041,70042],{"class":36,"line":10267},[34,70043,70044],{"class":40},"          \u003Ctd>15000\u003C\u002Ftd>\n",[34,70046,70047],{"class":36,"line":10276},[34,70048,70049],{"class":40},"          \u003Ctd>上海\u003C\u002Ftd>\n",[34,70051,70052],{"class":36,"line":10281},[34,70053,70054],{"class":40},"          \u003Ctd>\n",[34,70056,70057],{"class":36,"line":10287},[34,70058,70059],{"class":40},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[34,70061,70062],{"class":36,"line":10308},[34,70063,70064],{"class":40},"          \u003C\u002Ftd>\n",[34,70066,70067],{"class":36,"line":10314},[34,70068,70069],{"class":40},"        \u003C\u002Ftr> \n",[34,70071,70072],{"class":36,"line":10328},[34,70073,70074],{"class":40},"        -->\n",[34,70076,70077,70079,70081],{"class":36,"line":10334},[34,70078,52237],{"class":59},[34,70080,795],{"class":51761},[34,70082,51768],{"class":59},[34,70084,70085,70087,70089],{"class":36,"line":10361},[34,70086,52878],{"class":59},[34,70088,748],{"class":51761},[34,70090,51768],{"class":59},[34,70092,70093,70095,70097],{"class":36,"line":10370},[34,70094,52605],{"class":59},[34,70096,52274],{"class":51761},[34,70098,51768],{"class":59},[34,70100,70101],{"class":36,"line":10376},[34,70102,60419],{"class":40},[34,70104,70105,70107,70110,70112,70114,70116,70118,70121],{"class":36,"line":10384},[34,70106,11685],{"class":112},[34,70108,70109],{"class":63}," uname",[34,70111,14028],{"class":112},[34,70113,54857],{"class":59},[34,70115,54860],{"class":2427},[34,70117,617],{"class":59},[34,70119,70120],{"class":187},"'.uname'",[34,70122,623],{"class":59},[34,70124,70125,70127,70129,70131,70133,70135,70137,70140],{"class":36,"line":10389},[34,70126,11685],{"class":112},[34,70128,16153],{"class":63},[34,70130,14028],{"class":112},[34,70132,54857],{"class":59},[34,70134,54860],{"class":2427},[34,70136,617],{"class":59},[34,70138,70139],{"class":187},"'.age'",[34,70141,623],{"class":59},[34,70143,70144,70146,70149,70151,70153,70155,70157,70160],{"class":36,"line":17068},[34,70145,11685],{"class":112},[34,70147,70148],{"class":63}," gender",[34,70150,14028],{"class":112},[34,70152,54857],{"class":59},[34,70154,54860],{"class":2427},[34,70156,617],{"class":59},[34,70158,70159],{"class":187},"'.gender'",[34,70161,623],{"class":59},[34,70163,70164,70166,70169,70171,70173,70175,70177,70180],{"class":36,"line":17074},[34,70165,11685],{"class":112},[34,70167,70168],{"class":63}," salary",[34,70170,14028],{"class":112},[34,70172,54857],{"class":59},[34,70174,54860],{"class":2427},[34,70176,617],{"class":59},[34,70178,70179],{"class":187},"'.salary'",[34,70181,623],{"class":59},[34,70183,70184,70186,70189,70191,70193,70195,70197,70200],{"class":36,"line":17097},[34,70185,11685],{"class":112},[34,70187,70188],{"class":63}," city",[34,70190,14028],{"class":112},[34,70192,54857],{"class":59},[34,70194,54860],{"class":2427},[34,70196,617],{"class":59},[34,70198,70199],{"class":187},"'.city'",[34,70201,623],{"class":59},[34,70203,70204,70206,70209,70211,70213,70215,70217,70220],{"class":36,"line":17103},[34,70205,11685],{"class":112},[34,70207,70208],{"class":63}," tbody",[34,70210,14028],{"class":112},[34,70212,54857],{"class":59},[34,70214,54860],{"class":2427},[34,70216,617],{"class":59},[34,70218,70219],{"class":187},"'tbody'",[34,70221,623],{"class":59},[34,70223,70224],{"class":36,"line":17126},[34,70225,2864],{"emptyLinePlaceholder":540},[34,70227,70228],{"class":36,"line":17140},[34,70229,70230],{"class":40},"    \u002F\u002F 获取所有带有name属性的元素\n",[34,70232,70233,70235,70238,70240,70242,70244,70246,70249],{"class":36,"line":17160},[34,70234,11685],{"class":112},[34,70236,70237],{"class":63}," items",[34,70239,14028],{"class":112},[34,70241,54857],{"class":59},[34,70243,56142],{"class":2427},[34,70245,617],{"class":59},[34,70247,70248],{"class":187},"'[name]'",[34,70250,623],{"class":59},[34,70252,70253],{"class":36,"line":17166},[34,70254,70255],{"class":40},"    \u002F\u002F 声明一个空的数组\n",[34,70257,70258,70260,70262,70264],{"class":36,"line":17177},[34,70259,11685],{"class":112},[34,70261,58156],{"class":63},[34,70263,14028],{"class":112},[34,70265,52299],{"class":59},[34,70267,70268],{"class":36,"line":17200},[34,70269,70270],{"class":40},"    \u002F\u002F 1.录入模块\n",[34,70272,70273],{"class":36,"line":17222},[34,70274,70275],{"class":40},"    \u002F\u002F 1.1这是一个表单提交事件\n",[34,70277,70278,70280,70283,70285,70287,70289,70291,70294],{"class":36,"line":17227},[34,70279,11685],{"class":112},[34,70281,70282],{"class":63}," info",[34,70284,14028],{"class":112},[34,70286,54857],{"class":59},[34,70288,54860],{"class":2427},[34,70290,617],{"class":59},[34,70292,70293],{"class":187},"'.info'",[34,70295,623],{"class":59},[34,70297,70298,70301,70303,70305,70308,70310,70312,70314,70316],{"class":36,"line":17233},[34,70299,70300],{"class":59},"    info.",[34,70302,58274],{"class":2427},[34,70304,617],{"class":59},[34,70306,70307],{"class":187},"'submit'",[34,70309,12899],{"class":59},[34,70311,54910],{"class":112},[34,70313,2122],{"class":59},[34,70315,687],{"class":5680},[34,70317,12906],{"class":59},[34,70319,70320],{"class":36,"line":17247},[34,70321,70322],{"class":40},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[34,70324,70325,70328,70331],{"class":36,"line":17260},[34,70326,70327],{"class":59},"      e.",[34,70329,70330],{"class":2427},"preventDefault",[34,70332,2440],{"class":59},[34,70334,70335],{"class":36,"line":17265},[34,70336,60473],{"class":40},[34,70338,70339],{"class":36,"line":17279},[34,70340,2864],{"emptyLinePlaceholder":540},[34,70342,70343],{"class":36,"line":17284},[34,70344,70345],{"class":40},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[34,70347,70348],{"class":36,"line":17290},[34,70349,70350],{"class":40},"      \u002F\u002F 先遍历循环\n",[34,70352,70353,70355,70357,70359,70361,70363,70365,70367,70369,70372,70374,70376,70378],{"class":36,"line":17295},[34,70354,52745],{"class":112},[34,70356,2122],{"class":59},[34,70358,52308],{"class":112},[34,70360,9902],{"class":59},[34,70362,447],{"class":112},[34,70364,4557],{"class":63},[34,70366,9909],{"class":59},[34,70368,1515],{"class":112},[34,70370,70371],{"class":59}," items.",[34,70373,52429],{"class":63},[34,70375,3678],{"class":59},[34,70377,2756],{"class":112},[34,70379,12906],{"class":59},[34,70381,70382,70384,70387,70389,70392],{"class":36,"line":17309},[34,70383,2961],{"class":112},[34,70385,70386],{"class":59}," (items[i].value ",[34,70388,54947],{"class":112},[34,70390,70391],{"class":187}," ''",[34,70393,12906],{"class":59},[34,70395,70396,70399,70402,70404,70407],{"class":36,"line":17314},[34,70397,70398],{"class":112},"          return",[34,70400,70401],{"class":2427}," alert",[34,70403,617],{"class":59},[34,70405,70406],{"class":187},"'输入内容不能为空'",[34,70408,623],{"class":59},[34,70410,70411],{"class":36,"line":17319},[34,70412,2993],{"class":59},[34,70414,70415],{"class":36,"line":17333},[34,70416,52859],{"class":59},[34,70418,70419],{"class":36,"line":17345},[34,70420,2864],{"emptyLinePlaceholder":540},[34,70422,70423],{"class":36,"line":17350},[34,70424,70425],{"class":40},"      \u002F\u002F 创建新的对象\n",[34,70427,70428,70430,70433,70435],{"class":36,"line":17363},[34,70429,58689],{"class":112},[34,70431,70432],{"class":63}," obj",[34,70434,14028],{"class":112},[34,70436,16036],{"class":59},[34,70438,70439,70442,70444,70446,70448],{"class":36,"line":17368},[34,70440,70441],{"class":59},"        stuID: arr.",[34,70443,52429],{"class":63},[34,70445,46027],{"class":112},[34,70447,25583],{"class":63},[34,70449,31929],{"class":59},[34,70451,70452],{"class":36,"line":17373},[34,70453,70454],{"class":59},"        uname: uname.value,\n",[34,70456,70457],{"class":36,"line":17378},[34,70458,70459],{"class":59},"        age: age.value,\n",[34,70461,70462],{"class":36,"line":17391},[34,70463,70464],{"class":59},"        gender: gender.value,\n",[34,70466,70467],{"class":36,"line":17396},[34,70468,70469],{"class":59},"        salary: salary.value,\n",[34,70471,70472],{"class":36,"line":33096},[34,70473,70474],{"class":59},"        city: city.value\n",[34,70476,70477],{"class":36,"line":33102},[34,70478,52859],{"class":59},[34,70480,70481],{"class":36,"line":33108},[34,70482,70483],{"class":40},"      \u002F\u002F console.log(obj);\n",[34,70485,70486],{"class":36,"line":33114},[34,70487,70488],{"class":40},"      \u002F\u002F 追加到数组里面\n",[34,70490,70491,70493,70495],{"class":36,"line":33120},[34,70492,58468],{"class":59},[34,70494,52345],{"class":2427},[34,70496,70497],{"class":59},"(obj)\n",[34,70499,70500],{"class":36,"line":33131},[34,70501,70502],{"class":40},"      \u002F\u002F console.log(arr);\n",[34,70504,70505],{"class":36,"line":33137},[34,70506,70507],{"class":40},"      \u002F\u002F 清空表单  reset重置表单\n",[34,70509,70510,70513,70515,70518],{"class":36,"line":33157},[34,70511,70512],{"class":63},"      this",[34,70514,1164],{"class":59},[34,70516,70517],{"class":2427},"reset",[34,70519,2440],{"class":59},[34,70521,70522],{"class":36,"line":33163},[34,70523,70524],{"class":40},"      \u002F\u002F 调用渲染函数\n",[34,70526,70527,70530],{"class":36,"line":33174},[34,70528,70529],{"class":2427},"      render",[34,70531,2440],{"class":59},[34,70533,70534],{"class":36,"line":33180},[34,70535,33923],{"class":59},[34,70537,70538],{"class":36,"line":33186},[34,70539,70540],{"class":40},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[34,70542,70543,70546,70549],{"class":36,"line":33192},[34,70544,70545],{"class":112},"    function",[34,70547,70548],{"class":2427}," render",[34,70550,11317],{"class":59},[34,70552,70553],{"class":36,"line":33198},[34,70554,70555],{"class":40},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[34,70557,70558,70561,70563],{"class":36,"line":33204},[34,70559,70560],{"class":59},"      tbody.innerHTML ",[34,70562,447],{"class":112},[34,70564,70565],{"class":187}," ''\n",[34,70567,70568],{"class":36,"line":33210},[34,70569,70570],{"class":40},"      \u002F\u002F 遍历数组\n",[34,70572,70573,70575,70577,70579,70581,70583,70585,70587,70589,70591,70593,70595,70597],{"class":36,"line":33216},[34,70574,52745],{"class":112},[34,70576,2122],{"class":59},[34,70578,52308],{"class":112},[34,70580,9902],{"class":59},[34,70582,447],{"class":112},[34,70584,4557],{"class":63},[34,70586,9909],{"class":59},[34,70588,1515],{"class":112},[34,70590,52426],{"class":59},[34,70592,52429],{"class":63},[34,70594,3678],{"class":59},[34,70596,2756],{"class":112},[34,70598,12906],{"class":59},[34,70600,70601,70603,70606,70608,70610,70613,70615,70618],{"class":36,"line":33236},[34,70602,61731],{"class":112},[34,70604,70605],{"class":63}," tr",[34,70607,14028],{"class":112},[34,70609,54857],{"class":59},[34,70611,70612],{"class":2427},"createElement",[34,70614,617],{"class":59},[34,70616,70617],{"class":187},"'tr'",[34,70619,623],{"class":59},[34,70621,70622,70625,70627],{"class":36,"line":33242},[34,70623,70624],{"class":59},"        tr.innerHTML ",[34,70626,447],{"class":112},[34,70628,70629],{"class":187}," `\n",[34,70631,70632,70635,70637,70639,70641,70644,70647],{"class":36,"line":33258},[34,70633,70634],{"class":187},"        \u003Ctd>${",[34,70636,4344],{"class":59},[34,70638,1495],{"class":187},[34,70640,1048],{"class":59},[34,70642,70643],{"class":187},"].",[34,70645,70646],{"class":59},"stuID",[34,70648,70649],{"class":187},"}\u003C\u002Ftd>\n",[34,70651,70652,70655,70657,70659,70661,70663,70666],{"class":36,"line":33264},[34,70653,70654],{"class":187},"          \u003Ctd>${",[34,70656,4344],{"class":59},[34,70658,1495],{"class":187},[34,70660,1048],{"class":59},[34,70662,70643],{"class":187},[34,70664,70665],{"class":59},"uname",[34,70667,70649],{"class":187},[34,70669,70670,70672,70674,70676,70678,70680,70683],{"class":36,"line":33278},[34,70671,70654],{"class":187},[34,70673,4344],{"class":59},[34,70675,1495],{"class":187},[34,70677,1048],{"class":59},[34,70679,70643],{"class":187},[34,70681,70682],{"class":59},"age",[34,70684,70649],{"class":187},[34,70686,70687,70689,70691,70693,70695,70697,70700],{"class":36,"line":33284},[34,70688,70654],{"class":187},[34,70690,4344],{"class":59},[34,70692,1495],{"class":187},[34,70694,1048],{"class":59},[34,70696,70643],{"class":187},[34,70698,70699],{"class":59},"gender",[34,70701,70649],{"class":187},[34,70703,70704,70706,70708,70710,70712,70714,70717],{"class":36,"line":33299},[34,70705,70654],{"class":187},[34,70707,4344],{"class":59},[34,70709,1495],{"class":187},[34,70711,1048],{"class":59},[34,70713,70643],{"class":187},[34,70715,70716],{"class":59},"salary",[34,70718,70649],{"class":187},[34,70720,70721,70723,70725,70727,70729,70731,70734],{"class":36,"line":33305},[34,70722,70654],{"class":187},[34,70724,4344],{"class":59},[34,70726,1495],{"class":187},[34,70728,1048],{"class":59},[34,70730,70643],{"class":187},[34,70732,70733],{"class":59},"city",[34,70735,70649],{"class":187},[34,70737,70738],{"class":36,"line":33314},[34,70739,70054],{"class":187},[34,70741,70742,70745,70747],{"class":36,"line":33320},[34,70743,70744],{"class":187},"            \u003Ca href=\"javascript:\" data-id=${",[34,70746,1048],{"class":59},[34,70748,70749],{"class":187},"}>删除\u003C\u002Fa>\n",[34,70751,70752],{"class":36,"line":33329},[34,70753,70754],{"class":187},"          \u003C\u002Ftd> \n",[34,70756,70757],{"class":36,"line":33335},[34,70758,70759],{"class":187},"          `\n",[34,70761,70762],{"class":36,"line":33341},[34,70763,70764],{"class":40},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[34,70766,70767,70770,70773],{"class":36,"line":33350},[34,70768,70769],{"class":59},"        tbody.",[34,70771,70772],{"class":2427},"appendChild",[34,70774,70775],{"class":59},"(tr)\n",[34,70777,70778],{"class":36,"line":33356},[34,70779,52859],{"class":59},[34,70781,70782],{"class":36,"line":33367},[34,70783,2651],{"class":59},[34,70785,70786],{"class":36,"line":33373},[34,70787,2864],{"emptyLinePlaceholder":540},[34,70789,70790],{"class":36,"line":33392},[34,70791,70792],{"class":40},"    \u002F\u002F 3.删除委托\n",[34,70794,70795],{"class":36,"line":33398},[34,70796,70797],{"class":40},"    \u002F\u002F 3.1 事件委托 tbody\n",[34,70799,70800,70803,70805,70807,70809,70811,70813,70815,70817],{"class":36,"line":33409},[34,70801,70802],{"class":59},"    tbody.",[34,70804,58274],{"class":2427},[34,70806,617],{"class":59},[34,70808,58279],{"class":187},[34,70810,12899],{"class":59},[34,70812,54910],{"class":112},[34,70814,2122],{"class":59},[34,70816,687],{"class":5680},[34,70818,12906],{"class":59},[34,70820,70821,70823,70825,70827,70829],{"class":36,"line":33415},[34,70822,54941],{"class":112},[34,70824,67495],{"class":59},[34,70826,54947],{"class":112},[34,70828,68717],{"class":187},[34,70830,12906],{"class":59},[34,70832,70833],{"class":36,"line":33435},[34,70834,70835],{"class":40},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[34,70837,70838],{"class":36,"line":33451},[34,70839,70840],{"class":40},"        \u002F\u002F console.log(e.target.dataset.id);\n",[34,70842,70843],{"class":36,"line":33457},[34,70844,70845],{"class":40},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[34,70847,70848,70851,70853,70856,70858],{"class":36,"line":33471},[34,70849,70850],{"class":59},"        arr.",[34,70852,58471],{"class":2427},[34,70854,70855],{"class":59},"(e.target.dataset.id, ",[34,70857,64],{"class":63},[34,70859,623],{"class":59},[34,70861,70862],{"class":36,"line":33477},[34,70863,70864],{"class":40},"        \u002F\u002F 重新渲染一次\n",[34,70866,70867,70870],{"class":36,"line":33483},[34,70868,70869],{"class":2427},"        render",[34,70871,2440],{"class":59},[34,70873,70874],{"class":36,"line":33494},[34,70875,52859],{"class":59},[34,70877,70878],{"class":36,"line":33500},[34,70879,33923],{"class":59},[34,70881,70882,70884,70886],{"class":36,"line":33506},[34,70883,52878],{"class":59},[34,70885,52274],{"class":51761},[34,70887,51768],{"class":59},[34,70889,70890],{"class":36,"line":33516},[34,70891,2864],{"emptyLinePlaceholder":540},[34,70893,70894,70896,70898],{"class":36,"line":33522},[34,70895,52246],{"class":59},[34,70897,52261],{"class":51761},[34,70899,51768],{"class":59},[34,70901,70902],{"class":36,"line":33533},[34,70903,2864],{"emptyLinePlaceholder":540},[34,70905,70906,70908,70910],{"class":36,"line":33539},[34,70907,52246],{"class":59},[34,70909,51096],{"class":51761},[34,70911,51768],{"class":59},[14,70913,70914],{},"样式：",[25,70916,70920],{"className":70917,"code":70918,"language":70919,"meta":22,"style":22},"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",[31,70921,70922,70927,70937,70946,70950,70954,70959,70969,70974,70978,70983,70993,70998,71007,71011,71015,71020,71025,71035,71045,71050,71054,71059,71068,71078,71083,71093,71103,71107,71112,71120,71124,71129,71134,71139,71147,71156,71160,71165,71174,71178,71183,71192,71196,71201,71210,71219,71227,71231,71236,71245,71255,71264,71274,71280,71289,71299,71309,71313,71318,71327,71335,71345,71353,71362,71371,71381,71389,71393,71398,71407],{"__ignoreMap":22},[34,70923,70924],{"class":36,"line":37},[34,70925,70926],{"class":59},"* {\n",[34,70928,70929,70932,70934],{"class":36,"line":44},[34,70930,70931],{"class":51761},"  margin",[34,70933,51898],{"class":59},[34,70935,70936],{"class":187},"0;\n",[34,70938,70939,70942,70944],{"class":36,"line":50},[34,70940,70941],{"class":187},"  padding",[34,70943,51898],{"class":59},[34,70945,70936],{"class":187},[34,70947,70948],{"class":36,"line":56},[34,70949,2036],{"class":59},[34,70951,70952],{"class":36,"line":107},[34,70953,2864],{"emptyLinePlaceholder":540},[34,70955,70956],{"class":36,"line":196},[34,70957,70958],{"class":187},"a {\n",[34,70960,70961,70964,70966],{"class":36,"line":202},[34,70962,70963],{"class":51761},"  text-decoration",[34,70965,51898],{"class":59},[34,70967,70968],{"class":187},"none;\n",[34,70970,70971],{"class":36,"line":207},[34,70972,70973],{"class":187},"  color:#721c24;\n",[34,70975,70976],{"class":36,"line":222},[34,70977,2036],{"class":59},[34,70979,70980],{"class":36,"line":227},[34,70981,70982],{"class":187},"h1 {\n",[34,70984,70985,70988,70990],{"class":36,"line":232},[34,70986,70987],{"class":51761},"  text-align",[34,70989,51898],{"class":59},[34,70991,70992],{"class":187},"center;\n",[34,70994,70995],{"class":36,"line":238},[34,70996,70997],{"class":187},"  color:#333;\n",[34,70999,71000,71002,71004],{"class":36,"line":244},[34,71001,70931],{"class":51761},[34,71003,51898],{"class":59},[34,71005,71006],{"class":187},"20px 0;\n",[34,71008,71009],{"class":36,"line":250},[34,71010,3138],{"class":59},[34,71012,71013],{"class":36,"line":256},[34,71014,2036],{"class":59},[34,71016,71017],{"class":36,"line":261},[34,71018,71019],{"class":187},"table {\n",[34,71021,71022],{"class":36,"line":267},[34,71023,71024],{"class":187},"  margin:0 auto;\n",[34,71026,71027,71030,71032],{"class":36,"line":2138},[34,71028,71029],{"class":51761},"  width",[34,71031,51898],{"class":59},[34,71033,71034],{"class":187},"800px;\n",[34,71036,71037,71040,71042],{"class":36,"line":2143},[34,71038,71039],{"class":51761},"  border-collapse",[34,71041,51898],{"class":59},[34,71043,71044],{"class":187},"collapse;\n",[34,71046,71047],{"class":36,"line":2157},[34,71048,71049],{"class":187},"  color:#004085;\n",[34,71051,71052],{"class":36,"line":2162},[34,71053,2036],{"class":59},[34,71055,71056],{"class":36,"line":2191},[34,71057,71058],{"class":187},"th {\n",[34,71060,71061,71063,71065],{"class":36,"line":2196},[34,71062,70941],{"class":51761},[34,71064,51898],{"class":59},[34,71066,71067],{"class":187},"10px;\n",[34,71069,71070,71073,71075],{"class":36,"line":2213},[34,71071,71072],{"class":51761},"  background",[34,71074,51898],{"class":59},[34,71076,71077],{"class":40},"#cfe5ff;\n",[34,71079,71080],{"class":36,"line":2218},[34,71081,71082],{"class":59},"  \n",[34,71084,71085,71088,71090],{"class":36,"line":2223},[34,71086,71087],{"class":51761},"  font-size",[34,71089,51898],{"class":59},[34,71091,71092],{"class":187},"20px;\n",[34,71094,71095,71098,71100],{"class":36,"line":2228},[34,71096,71097],{"class":51761},"  font-weight",[34,71099,51898],{"class":59},[34,71101,71102],{"class":187},"400;\n",[34,71104,71105],{"class":36,"line":2242},[34,71106,2036],{"class":59},[34,71108,71109],{"class":36,"line":2247},[34,71110,71111],{"class":187},"td,th {\n",[34,71113,71114,71117],{"class":36,"line":3041},[34,71115,71116],{"class":187},"  border:1px solid",[34,71118,71119],{"class":40}," #b8daff;\n",[34,71121,71122],{"class":36,"line":3055},[34,71123,2036],{"class":59},[34,71125,71126],{"class":36,"line":3063},[34,71127,71128],{"class":187},"td {\n",[34,71130,71131],{"class":36,"line":3068},[34,71132,71133],{"class":187},"  padding:10px;\n",[34,71135,71136],{"class":36,"line":3074},[34,71137,71138],{"class":187},"  color:#666;\n",[34,71140,71141,71143,71145],{"class":36,"line":3080},[34,71142,70987],{"class":51761},[34,71144,51898],{"class":59},[34,71146,70992],{"class":187},[34,71148,71149,71151,71153],{"class":36,"line":3085},[34,71150,71087],{"class":51761},[34,71152,51898],{"class":59},[34,71154,71155],{"class":187},"16px;\n",[34,71157,71158],{"class":36,"line":8412},[34,71159,2036],{"class":59},[34,71161,71162],{"class":36,"line":8436},[34,71163,71164],{"class":187},"tbody tr {\n",[34,71166,71167,71169,71171],{"class":36,"line":8441},[34,71168,71072],{"class":51761},[34,71170,51898],{"class":59},[34,71172,71173],{"class":40},"#fff;\n",[34,71175,71176],{"class":36,"line":8447},[34,71177,2036],{"class":59},[34,71179,71180],{"class":36,"line":8474},[34,71181,71182],{"class":187},"tbody tr:hover {\n",[34,71184,71185,71187,71189],{"class":36,"line":8479},[34,71186,71072],{"class":51761},[34,71188,51898],{"class":59},[34,71190,71191],{"class":40},"#e1ecf8;\n",[34,71193,71194],{"class":36,"line":8485},[34,71195,2036],{"class":59},[34,71197,71198],{"class":36,"line":8497},[34,71199,71200],{"class":187},".info {\n",[34,71202,71203,71205,71207],{"class":36,"line":8509},[34,71204,71029],{"class":51761},[34,71206,51898],{"class":59},[34,71208,71209],{"class":187},"900px;\n",[34,71211,71212,71214,71216],{"class":36,"line":8521},[34,71213,70931],{"class":51761},[34,71215,51898],{"class":59},[34,71217,71218],{"class":187},"50px auto;\n",[34,71220,71221,71223,71225],{"class":36,"line":10180},[34,71222,70987],{"class":51761},[34,71224,51898],{"class":59},[34,71226,70992],{"class":187},[34,71228,71229],{"class":36,"line":10205},[34,71230,2036],{"class":59},[34,71232,71233],{"class":36,"line":10228},[34,71234,71235],{"class":187},".info  input, .info select {\n",[34,71237,71238,71240,71242],{"class":36,"line":10252},[34,71239,71029],{"class":51761},[34,71241,51898],{"class":59},[34,71243,71244],{"class":187},"80px;\n",[34,71246,71247,71250,71252],{"class":36,"line":10257},[34,71248,71249],{"class":51761},"  height",[34,71251,51898],{"class":59},[34,71253,71254],{"class":187},"27px;\n",[34,71256,71257,71260,71262],{"class":36,"line":10262},[34,71258,71259],{"class":51761},"  outline",[34,71261,51898],{"class":59},[34,71263,70968],{"class":187},[34,71265,71266,71269,71271],{"class":36,"line":10267},[34,71267,71268],{"class":51761},"  border-radius",[34,71270,51898],{"class":59},[34,71272,71273],{"class":187},"5px;\n",[34,71275,71276,71278],{"class":36,"line":10276},[34,71277,71116],{"class":187},[34,71279,71119],{"class":40},[34,71281,71282,71285,71287],{"class":36,"line":10281},[34,71283,71284],{"class":51761},"  padding-left",[34,71286,51898],{"class":59},[34,71288,71273],{"class":187},[34,71290,71291,71294,71296],{"class":36,"line":10287},[34,71292,71293],{"class":51761},"  box-sizing",[34,71295,51898],{"class":59},[34,71297,71298],{"class":187},"border-box;\n",[34,71300,71301,71304,71306],{"class":36,"line":10308},[34,71302,71303],{"class":51761},"  margin-right",[34,71305,51898],{"class":59},[34,71307,71308],{"class":187},"15px;\n",[34,71310,71311],{"class":36,"line":10314},[34,71312,2036],{"class":59},[34,71314,71315],{"class":36,"line":10328},[34,71316,71317],{"class":187},".info button {\n",[34,71319,71320,71322,71324],{"class":36,"line":10334},[34,71321,71029],{"class":51761},[34,71323,51898],{"class":59},[34,71325,71326],{"class":187},"60px;\n",[34,71328,71329,71331,71333],{"class":36,"line":10361},[34,71330,71249],{"class":51761},[34,71332,51898],{"class":59},[34,71334,71254],{"class":187},[34,71336,71337,71340,71342],{"class":36,"line":10370},[34,71338,71339],{"class":51761},"  background-color",[34,71341,51898],{"class":59},[34,71343,71344],{"class":40},"#004085;\n",[34,71346,71347,71349,71351],{"class":36,"line":10376},[34,71348,71259],{"class":51761},[34,71350,51898],{"class":59},[34,71352,70968],{"class":187},[34,71354,71355,71358,71360],{"class":36,"line":10384},[34,71356,71357],{"class":51761},"  border",[34,71359,51898],{"class":59},[34,71361,70936],{"class":187},[34,71363,71364,71367,71369],{"class":36,"line":10389},[34,71365,71366],{"class":51761},"  color",[34,71368,51898],{"class":59},[34,71370,71173],{"class":40},[34,71372,71373,71376,71378],{"class":36,"line":17068},[34,71374,71375],{"class":51761},"  cursor",[34,71377,51898],{"class":59},[34,71379,71380],{"class":187},"pointer;\n",[34,71382,71383,71385,71387],{"class":36,"line":17074},[34,71384,71268],{"class":51761},[34,71386,51898],{"class":59},[34,71388,71273],{"class":187},[34,71390,71391],{"class":36,"line":17097},[34,71392,2036],{"class":59},[34,71394,71395],{"class":36,"line":17103},[34,71396,71397],{"class":187},".info .age {\n",[34,71399,71400,71402,71404],{"class":36,"line":17126},[34,71401,71029],{"class":51761},[34,71403,51898],{"class":59},[34,71405,71406],{"class":187},"50px;\n",[34,71408,71409],{"class":36,"line":17140},[34,71410,2036],{"class":59},[14,71412,71413],{},"思路：",[14,71415,71416],{},[20,71417],{"alt":22,"src":71418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71420,71421],{},[20,71422],{"alt":22,"src":71423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71425,71426],{},[20,71427],{"alt":22,"src":71428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[584,71430,71432],{"id":71431},"_3315-重绘回流","3.3.15 重绘回流",[14,71434,71435],{},[20,71436],{"alt":22,"src":71437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71439,71440],{},[20,71441],{"alt":22,"src":71442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71444,71445],{},[20,71446],{"alt":22,"src":71447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[555,71449,71451],{"id":71450},"_34-bom","3.4 BOM",[14,71453,71454],{},[20,71455],{"alt":22,"src":71456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71458,71459],{},"平时写的document省略了window而已，实际上是window.document",[14,71461,71462],{},"函数也是这样，调用的时候实际为window.fn()",[14,71464,71465],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71467,71468],{},"window大部分情况下可以省略",[584,71470,71472],{"id":71471},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71474,71475],{},"只执行一次",[14,71477,71478],{},[20,71479],{"alt":22,"src":71480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71482,71483],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71485,71486],{},[20,71487],{"alt":22,"src":71488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[584,71490,71492],{"id":71491},"_342-js执行机制","3.4.2 JS执行机制",[14,71494,71495],{},[20,71496],{"alt":22,"src":71497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71499,71500],{},"两个的结果都是1111 3333 2222",[14,71502,71503],{},[20,71504],{"alt":22,"src":71505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71507,71508],{},[20,71509],{"alt":22,"src":71510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71512,71513],{},[20,71514],{"alt":22,"src":71515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71517,71518],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71520,71521],{},"工作流程：",[14,71523,71524],{},[20,71525],{"alt":22,"src":71526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71528,71529],{},[20,71530],{"alt":22,"src":71531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71533,71534],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71536,71537],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[584,71539,71541],{"id":71540},"_343-location对象","3.4.3 location对象",[14,71543,71544],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71546,71547],{},[20,71548],{"alt":22,"src":71549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71551,71552],{},"href可以跳转页面",[567,71554,71555],{},[570,71556,71557],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71559,71560],{},"search得到提交信息之后网站后边的地址",[14,71562,71563],{},[20,71564],{"alt":22,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71567,71568],{},[20,71569],{"alt":22,"src":71570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[567,71572,71573],{"start":44},[570,71574,71575],{},"hash:这个获取单页面应用#后边的地址",[14,71577,71578],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71580,71581],{},[20,71582],{"alt":22,"src":71583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[25,71585,71587],{"className":53528,"code":71586,"language":53530,"meta":22,"style":22},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[31,71588,71589,71609,71629],{"__ignoreMap":22},[34,71590,71591,71593,71595,71597,71599,71602,71605,71607],{"class":36,"line":37},[34,71592,52605],{"class":59},[34,71594,847],{"class":51761},[34,71596,61518],{"class":2427},[34,71598,447],{"class":59},[34,71600,71601],{"class":187},"\"#\u002Fmy\"",[34,71603,71604],{"class":59},">我的\u003C\u002F",[34,71606,847],{"class":51761},[34,71608,51768],{"class":59},[34,71610,71611,71613,71615,71617,71619,71622,71625,71627],{"class":36,"line":44},[34,71612,52605],{"class":59},[34,71614,847],{"class":51761},[34,71616,61518],{"class":2427},[34,71618,447],{"class":59},[34,71620,71621],{"class":187},"\"#\u002Ffriend\"",[34,71623,71624],{"class":59},">关注\u003C\u002F",[34,71626,847],{"class":51761},[34,71628,51768],{"class":59},[34,71630,71631,71633,71635,71637,71639,71642,71645,71647],{"class":36,"line":50},[34,71632,52605],{"class":59},[34,71634,847],{"class":51761},[34,71636,61518],{"class":2427},[34,71638,447],{"class":59},[34,71640,71641],{"class":187},"\"#\u002Fdownload\"",[34,71643,71644],{"class":59},">下载\u003C\u002F",[34,71646,847],{"class":51761},[34,71648,51768],{"class":59},[14,71650,71651],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[567,71653,71654],{"start":50},[570,71655,71656,71657,71659,71660,71662],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54177,71658],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54177,71661],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[584,71664,71666],{"id":71665},"_345-navigator对象","3.4.5 navigator对象",[14,71668,71669],{},[20,71670],{"alt":22,"src":71671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[25,71673,71677],{"className":71674,"code":71675,"language":71676,"meta":22,"style":22},"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",[31,71678,71679,71684,71695,71707,71712,71763,71804,71809,71822,71834,71839],{"__ignoreMap":22},[34,71680,71681],{"class":36,"line":37},[34,71682,71683],{"class":40},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[34,71685,71686,71688,71690,71692],{"class":36,"line":44},[34,71687,835],{"class":112},[34,71689,617],{"class":59},[34,71691,54910],{"class":112},[34,71693,71694],{"class":59}," () { \n",[34,71696,71697,71699,71702,71704],{"class":36,"line":50},[34,71698,7256],{"class":112},[34,71700,71701],{"class":63}," userAgent",[34,71703,14028],{"class":112},[34,71705,71706],{"class":59}," navigator.userAgent \n",[34,71708,71709],{"class":36,"line":56},[34,71710,71711],{"class":40},"\u002F\u002F 验证是否为Android或iPhone \n",[34,71713,71714,71716,71719,71721,71724,71727,71729,71731,71734,71736,71739,71743,71745,71747,71749,71752,71754,71756,71758,71760],{"class":36,"line":107},[34,71715,7256],{"class":112},[34,71717,71718],{"class":63}," android",[34,71720,14028],{"class":112},[34,71722,71723],{"class":59}," userAgent.",[34,71725,71726],{"class":2427},"match",[34,71728,617],{"class":59},[34,71730,1190],{"class":187},[34,71732,71733],{"class":48438},"(Android);",[34,71735,1590],{"class":112},[34,71737,71738],{"class":63},"[\\s",[34,71740,71742],{"class":71741},"snhLl","\\\u002F",[34,71744,477],{"class":63},[34,71746,1088],{"class":112},[34,71748,617],{"class":48438},[34,71750,71751],{"class":63},"[\\d.]",[34,71753,1088],{"class":112},[34,71755,1036],{"class":48438},[34,71757,1590],{"class":112},[34,71759,1190],{"class":187},[34,71761,71762],{"class":59},") \n",[34,71764,71765,71767,71770,71772,71774,71776,71778,71780,71783,71786,71789,71791,71793,71796,71798,71800,71802],{"class":36,"line":196},[34,71766,7256],{"class":112},[34,71768,71769],{"class":63}," iphone",[34,71771,14028],{"class":112},[34,71773,71723],{"class":59},[34,71775,71726],{"class":2427},[34,71777,617],{"class":59},[34,71779,1190],{"class":187},[34,71781,71782],{"class":48438},"(iPhone",[34,71784,71785],{"class":63},"\\s",[34,71787,71788],{"class":48438},"OS)",[34,71790,71785],{"class":63},[34,71792,617],{"class":48438},[34,71794,71795],{"class":63},"[\\d_]",[34,71797,1088],{"class":112},[34,71799,1036],{"class":48438},[34,71801,1190],{"class":187},[34,71803,71762],{"class":59},[34,71805,71806],{"class":36,"line":202},[34,71807,71808],{"class":40},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[34,71810,71811,71813,71816,71819],{"class":36,"line":207},[34,71812,2002],{"class":112},[34,71814,71815],{"class":59}," (android ",[34,71817,71818],{"class":112},"||",[34,71820,71821],{"class":59}," iphone) { \n",[34,71823,71824,71827,71829,71832],{"class":36,"line":222},[34,71825,71826],{"class":59},"location.href ",[34,71828,447],{"class":112},[34,71830,71831],{"class":187}," 'http:\u002F\u002Fm.itcast.cn'",[34,71833,3138],{"class":59},[34,71835,71836],{"class":36,"line":227},[34,71837,71838],{"class":59},"} \n",[34,71840,71841],{"class":36,"line":232},[34,71842,71843],{"class":59},"})()\n",[584,71845,71847],{"id":71846},"_346-histroy对象","3.4.6 histroy对象",[14,71849,71850],{},[20,71851],{"alt":22,"src":71852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71854,71855],{},"浏览器地址的前进与后退!!!",[14,71857,71858],{},"history.back() 等效于 history.go(-1)",[14,71860,71861],{},"history.forward() 等效于 history.go(1)",[555,71863,71865],{"id":71864},"_35-本地存储","3.5 本地存储",[567,71867,71868,71871,71874],{},[570,71869,71870],{},"数据存储在用户浏览器中",[570,71872,71873],{},"设置、读取方便、甚至页面刷新不丢失数据",[570,71875,71876],{},"容量较大，sessionStorage和localStorage约 5M 左右",[584,71878,71880],{"id":71879},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71882,71883],{},"只能存储字符串",[14,71885,71886],{},[20,71887],{"alt":22,"src":71888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71890,71891],{},[20,71892],{"alt":22,"src":71893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71895,71896],{},"键值对要加引号,不然就会当变量来看了",[14,71898,71899],{},"localStorage.setItem('uname', 'pink')",[14,71901,71902],{},"刷新之后信息不再丢失",[14,71904,71905],{},"操作key,value会跟着变",[14,71907,71908],{},"删除只删除键就可以,即名字",[14,71910,71899],{},[14,71912,71913],{},"改:",[14,71915,71916],{},"localStorage.setItem('uname','red')",[14,71918,71919],{},"有这个键就是改,没有这个键就是改",[14,71921,71922],{},[20,71923],{"alt":22,"src":71924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71926,71927],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71929,71930],{},[20,71931],{"alt":22,"src":71932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71934,71935],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[584,71937,71939],{"id":71938},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71941,71942],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71944,71945],{},"特性:",[567,71947,71948,71951,71954,71957],{},[570,71949,71950],{},"生命周期为关闭浏览器窗口",[570,71952,71953],{},"在同一个窗口(页面)下数据可以共享",[570,71955,71956],{},"以键值对的形式存储使用",[570,71958,71959],{},"用法跟localStorage 基本相同",[584,71961,71963],{"id":71962},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71965,71966],{},"本地只能存储字符串,无法直接存储复杂数据类型",[25,71968,71970],{"className":53528,"code":71969,"language":53530,"meta":22,"style":22},"\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",[31,71971,71972,71980,71985,71990,71995,72000,72004,72009,72014],{"__ignoreMap":22},[34,71973,71974,71976,71978],{"class":36,"line":37},[34,71975,1515],{"class":59},[34,71977,52274],{"class":51761},[34,71979,51768],{"class":59},[34,71981,71982],{"class":36,"line":44},[34,71983,71984],{"class":59},"    const obj = {\n",[34,71986,71987],{"class":36,"line":50},[34,71988,71989],{"class":59},"      uname: 'pink老师',\n",[34,71991,71992],{"class":36,"line":56},[34,71993,71994],{"class":59},"      age: 18,\n",[34,71996,71997],{"class":36,"line":107},[34,71998,71999],{"class":59},"      gender: '女'\n",[34,72001,72002],{"class":36,"line":196},[34,72003,2651],{"class":59},[34,72005,72006],{"class":36,"line":202},[34,72007,72008],{"class":59},"    \u002F\u002F 存储复杂数据类型\n",[34,72010,72011],{"class":36,"line":207},[34,72012,72013],{"class":59},"    localStorage.setItem('obj', obj)\n",[34,72015,72016,72018,72020],{"class":36,"line":222},[34,72017,52878],{"class":59},[34,72019,52274],{"class":51761},[34,72021,51768],{"class":59},[14,72023,72024],{},[20,72025],{"alt":22,"src":72026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,72028,72029],{},"如果获取一下数据:",[14,72031,72032],{},"log(localStorage.getItem('obj'))",[14,72034,72035],{},[20,72036],{"alt":22,"src":72037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72039,72040],{},"发现直接存对象是使用不了的!!!",[22462,72042,72044],{"id":72043},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72046,72047],{},[20,72048],{"alt":22,"src":72049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[25,72051,72053],{"className":51094,"code":72052,"language":51096,"meta":22,"style":22},"\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",[31,72054,72055,72063,72073,72083,72092,72100,72104,72108,72134,72153,72161,72165,72170,72175],{"__ignoreMap":22},[34,72056,72057,72059,72061],{"class":36,"line":37},[34,72058,1515],{"class":59},[34,72060,52274],{"class":51761},[34,72062,51768],{"class":59},[34,72064,72065,72067,72069,72071],{"class":36,"line":44},[34,72066,11685],{"class":112},[34,72068,70432],{"class":63},[34,72070,14028],{"class":112},[34,72072,16036],{"class":59},[34,72074,72075,72078,72081],{"class":36,"line":50},[34,72076,72077],{"class":59},"      uname: ",[34,72079,72080],{"class":187},"'pink老师'",[34,72082,31929],{"class":59},[34,72084,72085,72088,72090],{"class":36,"line":56},[34,72086,72087],{"class":59},"      age: ",[34,72089,1256],{"class":63},[34,72091,31929],{"class":59},[34,72093,72094,72097],{"class":36,"line":107},[34,72095,72096],{"class":59},"      gender: ",[34,72098,72099],{"class":187},"'女'\n",[34,72101,72102],{"class":36,"line":196},[34,72103,2651],{"class":59},[34,72105,72106],{"class":36,"line":202},[34,72107,72008],{"class":40},[34,72109,72110,72113,72116,72118,72121,72123,72126,72128,72131],{"class":36,"line":207},[34,72111,72112],{"class":59},"  localStorage.",[34,72114,72115],{"class":2427},"setItem",[34,72117,617],{"class":59},[34,72119,72120],{"class":187},"'obj'",[34,72122,12899],{"class":59},[34,72124,72125],{"class":63},"JSON",[34,72127,1164],{"class":59},[34,72129,72130],{"class":2427},"stringify",[34,72132,72133],{"class":59},"(obj))\n",[34,72135,72136,72139,72141,72144,72147,72149,72151],{"class":36,"line":222},[34,72137,72138],{"class":59},"  console.",[34,72140,58708],{"class":2427},[34,72142,72143],{"class":59},"(localStorage.",[34,72145,72146],{"class":2427},"getItem",[34,72148,617],{"class":59},[34,72150,72120],{"class":187},[34,72152,30960],{"class":59},[34,72154,72155,72157,72159],{"class":36,"line":227},[34,72156,52878],{"class":59},[34,72158,52274],{"class":51761},[34,72160,51768],{"class":59},[34,72162,72163],{"class":36,"line":232},[34,72164,71082],{"class":59},[34,72166,72167],{"class":36,"line":238},[34,72168,72169],{"class":59},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[34,72171,72172],{"class":36,"line":244},[34,72173,72174],{"class":59},"  类型是字符串的\n",[34,72176,72177],{"class":36,"line":250},[34,72178,72179],{"class":59},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22462,72181,72183],{"id":72182},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72185,72186],{},[20,72187],{"alt":22,"src":72188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72190,72191],{},[20,72192],{"alt":22,"src":72193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[25,72195,72197],{"className":53528,"code":72196,"language":53530,"meta":22,"style":22},"  \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",[31,72198,72199,72207,72211,72215,72219,72223,72227,72232,72237,72242,72247,72252,72257,72262,72267],{"__ignoreMap":22},[34,72200,72201,72203,72205],{"class":36,"line":37},[34,72202,52605],{"class":59},[34,72204,52274],{"class":51761},[34,72206,51768],{"class":59},[34,72208,72209],{"class":36,"line":44},[34,72210,71984],{"class":59},[34,72212,72213],{"class":36,"line":50},[34,72214,71989],{"class":59},[34,72216,72217],{"class":36,"line":56},[34,72218,71994],{"class":59},[34,72220,72221],{"class":36,"line":107},[34,72222,71999],{"class":59},[34,72224,72225],{"class":36,"line":196},[34,72226,2651],{"class":59},[34,72228,72229],{"class":36,"line":202},[34,72230,72231],{"class":59},"    \u002F\u002F 1.存储复杂数据类型\n",[34,72233,72234],{"class":36,"line":207},[34,72235,72236],{"class":59},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[34,72238,72239],{"class":36,"line":222},[34,72240,72241],{"class":59},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[34,72243,72244],{"class":36,"line":227},[34,72245,72246],{"class":59},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[34,72248,72249],{"class":36,"line":232},[34,72250,72251],{"class":59},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[34,72253,72254],{"class":36,"line":238},[34,72255,72256],{"class":59},"    \u002F\u002F 取\n",[34,72258,72259],{"class":36,"line":244},[34,72260,72261],{"class":59},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[34,72263,72264],{"class":36,"line":250},[34,72265,72266],{"class":59},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[34,72268,72269,72271,72273],{"class":36,"line":256},[34,72270,52878],{"class":59},[34,72272,52274],{"class":51761},[34,72274,51768],{"class":59},[14,72276,72277],{},[20,72278],{"alt":22,"src":72279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[584,72281,72283],{"id":72282},"_356-数组map方法","3.5.6 数组map方法",[14,72285,72286],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72288,72289],{},[20,72290],{"alt":22,"src":72291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72293,72294],{},[20,72295],{"alt":22,"src":72296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72298,72299,72302],{},[760,72300,72301],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72304,72305],{},"map有返回值，但是forEach没有返回值",[14,72307,72308],{},"map是个方法。用的时候要加 ()",[14,72310,72311],{},"map返回的是一个数组",[584,72313,72315],{"id":72314},"_357-数组中join方法","3.5.7 数组中join方法",[14,72317,72318],{},[20,72319],{"alt":22,"src":72320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72322,72323],{},"类似于python中拼接字符串一样！",[567,72325,72326,72329,72332],{},[570,72327,72328],{},"小括号为空则逗号分开",[570,72330,72331],{},"小括号为空字符串 ''，则元素之间没有分隔符",[570,72333,72334],{},"小括号用啥符号就用进行分割",[584,72336,72338],{"id":72337},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[567,72340,72341,72344,72347,72350,72353],{},[570,72342,72343],{},"记住本地时间获取快速方式：new Date().toDateString()",[570,72345,72346],{},"尽量减少DOM操作，用好map+join的渲染方式",[570,72348,72349],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[570,72351,72352],{},"return可以实现函数的结束",[570,72354,72355],{},"禁止跳转是 preventDefault() 不要忘记",[25,72357,72359],{"className":51094,"code":72358,"language":51096,"meta":22,"style":22},"\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",[31,72360,72361,72371,72385,72389,72397,72411,72431,72443,72451,72457,72467,72477,72481,72485,72491,72501,72513,72517,72521,72528,72540,72554,72564,72568,72572,72579,72586,72593,72605,72617,72627,72639,72643,72647,72654,72661,72673,72685,72695,72707,72737,72741,72745,72752,72764,72776,72800,72810,72820,72824,72828,72836,72847,72859,72871,72883,72900,72912,72924,72928,72932,72939,72951,72963,72975,72986,73004,73017,73029,73053,73064,73068,73072,73080,73090,73094,73098,73104,73116,73127,73137,73141,73145,73151,73173,73177,73181,73187,73193,73205,73215,73227,73257,73270,73287,73291,73295,73306,73328,73338,73342,73346,73359,73369,73381,73393,73405,73417,73427,73437,73447,73458,73471,73475,73483,73491,73495,73503,73516,73536,73569,73602,73635,73661,73679,73697,73705,73731,73749,73767,73785,73803,73821,73829,73837,73855,73863,73892,73900,73908,73916,73929,73941,73953,73965,73977,73989,74002,74014,74022,74030,74038,74043,74048,74052,74056,74060,74064,74068,74072,74077,74082,74087,74092,74100,74108,74116,74121,74126,74131,74136,74141,74146,74151,74156,74161,74166,74171,74176,74181,74186,74190,74195,74200,74210,74219,74223,74228,74237,74253,74295,74335,74374,74439,74447,74451,74456,74474,74482,74487,74492,74522,74528,74533,74546,74558,74570,74582,74594,74606,74618,74622,74632,74636,74641,74646,74650,74659,74663,74668,74673,74692,74697,74717,74721,74726,74730,74735,74753,74771,74789,74808,74827,74846,74851,74857,74878,74884,74893,74899,74905,74911,74938,74951,74956,74966,74972,74978,74984,74990,74995,75001,75007,75013,75019,75052,75057,75062,75067,75072,75078,75084,75090,75101,75106,75112,75119,75133,75139,75163,75168,75173,75179,75185,75206,75212,75225,75231,75237,75243,75249,75254,75260,75266,75272,75290,75304,75310,75318,75324,75346,75351,75356,75361,75366,75371,75380,75389,75394],{"__ignoreMap":22},[34,72362,72363,72365,72367,72369],{"class":36,"line":37},[34,72364,51758],{"class":59},[34,72366,51762],{"class":51761},[34,72368,51765],{"class":2427},[34,72370,51768],{"class":59},[34,72372,72373,72375,72377,72379,72381,72383],{"class":36,"line":44},[34,72374,1515],{"class":59},[34,72376,51096],{"class":51761},[34,72378,51777],{"class":2427},[34,72380,447],{"class":59},[34,72382,51782],{"class":187},[34,72384,51768],{"class":59},[34,72386,72387],{"class":36,"line":50},[34,72388,2864],{"emptyLinePlaceholder":540},[34,72390,72391,72393,72395],{"class":36,"line":56},[34,72392,1515],{"class":59},[34,72394,51795],{"class":51761},[34,72396,51768],{"class":59},[34,72398,72399,72401,72403,72405,72407,72409],{"class":36,"line":107},[34,72400,52605],{"class":59},[34,72402,51805],{"class":51761},[34,72404,51808],{"class":2427},[34,72406,447],{"class":59},[34,72408,51813],{"class":187},[34,72410,51768],{"class":59},[34,72412,72413,72415,72417,72419,72421,72423,72425,72427,72429],{"class":36,"line":196},[34,72414,52605],{"class":59},[34,72416,51805],{"class":51761},[34,72418,15384],{"class":2427},[34,72420,447],{"class":59},[34,72422,51852],{"class":187},[34,72424,51832],{"class":2427},[34,72426,447],{"class":59},[34,72428,51859],{"class":187},[34,72430,51768],{"class":59},[34,72432,72433,72435,72437,72439,72441],{"class":36,"line":202},[34,72434,52605],{"class":59},[34,72436,51868],{"class":51761},[34,72438,51871],{"class":59},[34,72440,51868],{"class":51761},[34,72442,51768],{"class":59},[34,72444,72445,72447,72449],{"class":36,"line":207},[34,72446,52605],{"class":59},[34,72448,532],{"class":51761},[34,72450,51768],{"class":59},[34,72452,72453,72455],{"class":36,"line":222},[34,72454,6867],{"class":51761},[34,72456,16036],{"class":59},[34,72458,72459,72461,72463,72465],{"class":36,"line":227},[34,72460,55156],{"class":63},[34,72462,51898],{"class":59},[34,72464,319],{"class":63},[34,72466,1765],{"class":59},[34,72468,72469,72471,72473,72475],{"class":36,"line":232},[34,72470,55167],{"class":63},[34,72472,51898],{"class":59},[34,72474,319],{"class":63},[34,72476,1765],{"class":59},[34,72478,72479],{"class":36,"line":238},[34,72480,2651],{"class":59},[34,72482,72483],{"class":36,"line":244},[34,72484,2864],{"emptyLinePlaceholder":540},[34,72486,72487,72489],{"class":36,"line":250},[34,72488,57740],{"class":51761},[34,72490,16036],{"class":59},[34,72492,72493,72495,72497,72499],{"class":36,"line":256},[34,72494,57747],{"class":63},[34,72496,51898],{"class":59},[34,72498,52053],{"class":63},[34,72500,1765],{"class":59},[34,72502,72503,72505,72507,72509,72511],{"class":36,"line":261},[34,72504,62538],{"class":63},[34,72506,51898],{"class":59},[34,72508,1306],{"class":63},[34,72510,51953],{"class":112},[34,72512,1765],{"class":59},[34,72514,72515],{"class":36,"line":267},[34,72516,2651],{"class":59},[34,72518,72519],{"class":36,"line":2138},[34,72520,2864],{"emptyLinePlaceholder":540},[34,72522,72523,72526],{"class":36,"line":2143},[34,72524,72525],{"class":2427},"    .info",[34,72527,16036],{"class":59},[34,72529,72530,72532,72534,72536,72538],{"class":36,"line":2157},[34,72531,55232],{"class":63},[34,72533,51898],{"class":59},[34,72535,51950],{"class":63},[34,72537,51953],{"class":112},[34,72539,1765],{"class":59},[34,72541,72542,72544,72546,72548,72550,72552],{"class":36,"line":2162},[34,72543,55167],{"class":63},[34,72545,51898],{"class":59},[34,72547,1053],{"class":63},[34,72549,51953],{"class":112},[34,72551,52017],{"class":63},[34,72553,1765],{"class":59},[34,72555,72556,72558,72560,72562],{"class":36,"line":2191},[34,72557,57747],{"class":63},[34,72559,51898],{"class":59},[34,72561,52053],{"class":63},[34,72563,1765],{"class":59},[34,72565,72566],{"class":36,"line":2196},[34,72567,2651],{"class":59},[34,72569,72570],{"class":36,"line":2213},[34,72571,2864],{"emptyLinePlaceholder":540},[34,72573,72574,72577],{"class":36,"line":2218},[34,72575,72576],{"class":2427},"    .uname",[34,72578,31929],{"class":59},[34,72580,72581,72584],{"class":36,"line":2223},[34,72582,72583],{"class":2427},"    .age",[34,72585,31929],{"class":59},[34,72587,72588,72591],{"class":36,"line":2228},[34,72589,72590],{"class":2427},"    .salary",[34,72592,16036],{"class":59},[34,72594,72595,72597,72599,72601,72603],{"class":36,"line":2242},[34,72596,55232],{"class":63},[34,72598,51898],{"class":59},[34,72600,919],{"class":63},[34,72602,51953],{"class":112},[34,72604,1765],{"class":59},[34,72606,72607,72609,72611,72613,72615],{"class":36,"line":2247},[34,72608,55246],{"class":63},[34,72610,51898],{"class":59},[34,72612,1306],{"class":63},[34,72614,51953],{"class":112},[34,72616,1765],{"class":59},[34,72618,72619,72621,72623,72625],{"class":36,"line":3041},[34,72620,62241],{"class":63},[34,72622,51898],{"class":59},[34,72624,55198],{"class":63},[34,72626,1765],{"class":59},[34,72628,72629,72631,72633,72635,72637],{"class":36,"line":3055},[34,72630,62211],{"class":63},[34,72632,51898],{"class":59},[34,72634,1181],{"class":63},[34,72636,51953],{"class":112},[34,72638,1765],{"class":59},[34,72640,72641],{"class":36,"line":3063},[34,72642,2651],{"class":59},[34,72644,72645],{"class":36,"line":3068},[34,72646,2864],{"emptyLinePlaceholder":540},[34,72648,72649,72652],{"class":36,"line":3074},[34,72650,72651],{"class":2427},"    .gender",[34,72653,31929],{"class":59},[34,72655,72656,72659],{"class":36,"line":3080},[34,72657,72658],{"class":2427},"    .city",[34,72660,16036],{"class":59},[34,72662,72663,72665,72667,72669,72671],{"class":36,"line":3085},[34,72664,55232],{"class":63},[34,72666,51898],{"class":59},[34,72668,919],{"class":63},[34,72670,51953],{"class":112},[34,72672,1765],{"class":59},[34,72674,72675,72677,72679,72681,72683],{"class":36,"line":8412},[34,72676,55246],{"class":63},[34,72678,51898],{"class":59},[34,72680,1431],{"class":63},[34,72682,51953],{"class":112},[34,72684,1765],{"class":59},[34,72686,72687,72689,72691,72693],{"class":36,"line":8436},[34,72688,62241],{"class":63},[34,72690,51898],{"class":59},[34,72692,55198],{"class":63},[34,72694,1765],{"class":59},[34,72696,72697,72699,72701,72703,72705],{"class":36,"line":8441},[34,72698,62211],{"class":63},[34,72700,51898],{"class":59},[34,72702,1181],{"class":63},[34,72704,51953],{"class":112},[34,72706,1765],{"class":59},[34,72708,72709,72711,72713,72715,72717,72719,72722,72724,72726,72728,72731,72733,72735],{"class":36,"line":8447},[34,72710,62438],{"class":63},[34,72712,51898],{"class":59},[34,72714,64],{"class":63},[34,72716,51953],{"class":112},[34,72718,51982],{"class":63},[34,72720,72721],{"class":63}," rgb",[34,72723,617],{"class":59},[34,72725,2186],{"class":63},[34,72727,12899],{"class":59},[34,72729,72730],{"class":63},"197",[34,72732,12899],{"class":59},[34,72734,72730],{"class":63},[34,72736,3183],{"class":59},[34,72738,72739],{"class":36,"line":8474},[34,72740,2651],{"class":59},[34,72742,72743],{"class":36,"line":8479},[34,72744,2864],{"emptyLinePlaceholder":540},[34,72746,72747,72750],{"class":36,"line":8485},[34,72748,72749],{"class":51761},"    button",[34,72751,16036],{"class":59},[34,72753,72754,72756,72758,72760,72762],{"class":36,"line":8497},[34,72755,55246],{"class":63},[34,72757,51898],{"class":59},[34,72759,1431],{"class":63},[34,72761,51953],{"class":112},[34,72763,1765],{"class":59},[34,72765,72766,72768,72770,72772,72774],{"class":36,"line":8509},[34,72767,55232],{"class":63},[34,72769,51898],{"class":59},[34,72771,1091],{"class":63},[34,72773,51953],{"class":112},[34,72775,1765],{"class":59},[34,72777,72778,72780,72782,72785,72787,72789,72791,72794,72796,72798],{"class":36,"line":8521},[34,72779,55345],{"class":63},[34,72781,51898],{"class":59},[34,72783,72784],{"class":63},"rgb",[34,72786,617],{"class":59},[34,72788,1573],{"class":63},[34,72790,12899],{"class":59},[34,72792,72793],{"class":63},"187",[34,72795,12899],{"class":59},[34,72797,907],{"class":63},[34,72799,3183],{"class":59},[34,72801,72802,72804,72806,72808],{"class":36,"line":10180},[34,72803,57877],{"class":63},[34,72805,51898],{"class":59},[34,72807,61303],{"class":63},[34,72809,1765],{"class":59},[34,72811,72812,72814,72816,72818],{"class":36,"line":10205},[34,72813,62438],{"class":63},[34,72815,51898],{"class":59},[34,72817,319],{"class":63},[34,72819,1765],{"class":59},[34,72821,72822],{"class":36,"line":10228},[34,72823,2651],{"class":59},[34,72825,72826],{"class":36,"line":10252},[34,72827,2864],{"emptyLinePlaceholder":540},[34,72829,72830,72832,72834],{"class":36,"line":10257},[34,72831,72749],{"class":51761},[34,72833,52149],{"class":51761},[34,72835,16036],{"class":59},[34,72837,72838,72840,72842,72845],{"class":36,"line":10262},[34,72839,55470],{"class":63},[34,72841,51898],{"class":59},[34,72843,72844],{"class":63},"inline-block",[34,72846,1765],{"class":59},[34,72848,72849,72851,72853,72855,72857],{"class":36,"line":10267},[34,72850,55232],{"class":63},[34,72852,51898],{"class":59},[34,72854,1053],{"class":63},[34,72856,51953],{"class":112},[34,72858,1765],{"class":59},[34,72860,72861,72863,72865,72867,72869],{"class":36,"line":10276},[34,72862,55246],{"class":63},[34,72864,51898],{"class":59},[34,72866,1053],{"class":63},[34,72868,51953],{"class":112},[34,72870,1765],{"class":59},[34,72872,72873,72875,72877,72879,72881],{"class":36,"line":10281},[34,72874,57820],{"class":63},[34,72876,51898],{"class":59},[34,72878,1079],{"class":63},[34,72880,51953],{"class":112},[34,72882,1765],{"class":59},[34,72884,72885,72887,72889,72891,72893,72895,72898],{"class":36,"line":10287},[34,72886,62438],{"class":63},[34,72888,51898],{"class":59},[34,72890,64],{"class":63},[34,72892,51953],{"class":112},[34,72894,51982],{"class":63},[34,72896,72897],{"class":63}," #fff",[34,72899,1765],{"class":59},[34,72901,72902,72904,72906,72908,72910],{"class":36,"line":10308},[34,72903,55595],{"class":63},[34,72905,51898],{"class":59},[34,72907,927],{"class":63},[34,72909,51953],{"class":112},[34,72911,1765],{"class":59},[34,72913,72914,72916,72918,72920,72922],{"class":36,"line":10314},[34,72915,62211],{"class":63},[34,72917,51898],{"class":59},[34,72919,64],{"class":63},[34,72921,51953],{"class":112},[34,72923,1765],{"class":59},[34,72925,72926],{"class":36,"line":10328},[34,72927,2651],{"class":59},[34,72929,72930],{"class":36,"line":10334},[34,72931,2864],{"emptyLinePlaceholder":540},[34,72933,72934,72937],{"class":36,"line":10361},[34,72935,72936],{"class":2427},"    .total",[34,72938,16036],{"class":59},[34,72940,72941,72943,72945,72947,72949],{"class":36,"line":10370},[34,72942,55232],{"class":63},[34,72944,51898],{"class":59},[34,72946,62090],{"class":63},[34,72948,51953],{"class":112},[34,72950,1765],{"class":59},[34,72952,72953,72955,72957,72959,72961],{"class":36,"line":10376},[34,72954,55246],{"class":63},[34,72956,51898],{"class":59},[34,72958,1008],{"class":63},[34,72960,51953],{"class":112},[34,72962,1765],{"class":59},[34,72964,72965,72967,72969,72971,72973],{"class":36,"line":10384},[34,72966,57820],{"class":63},[34,72968,51898],{"class":59},[34,72970,1008],{"class":63},[34,72972,51953],{"class":112},[34,72974,1765],{"class":59},[34,72976,72977,72979,72981,72984],{"class":36,"line":10389},[34,72978,57747],{"class":63},[34,72980,51898],{"class":59},[34,72982,72983],{"class":63},"right",[34,72985,1765],{"class":59},[34,72987,72988,72990,72992,72994,72996,72998,73000,73002],{"class":36,"line":17068},[34,72989,55167],{"class":63},[34,72991,51898],{"class":59},[34,72993,1008],{"class":63},[34,72995,51953],{"class":112},[34,72997,52017],{"class":63},[34,72999,2502],{"class":63},[34,73001,51953],{"class":112},[34,73003,1765],{"class":59},[34,73005,73006,73009,73011,73013,73015],{"class":36,"line":17074},[34,73007,73008],{"class":63},"      padding-right",[34,73010,51898],{"class":59},[34,73012,1053],{"class":63},[34,73014,51953],{"class":112},[34,73016,1765],{"class":59},[34,73018,73019,73021,73023,73025,73027],{"class":36,"line":17097},[34,73020,55383],{"class":63},[34,73022,51898],{"class":59},[34,73024,1130],{"class":63},[34,73026,51953],{"class":112},[34,73028,1765],{"class":59},[34,73030,73031,73033,73035,73037,73039,73042,73044,73047,73049,73051],{"class":36,"line":17103},[34,73032,55345],{"class":63},[34,73034,51898],{"class":59},[34,73036,72784],{"class":63},[34,73038,617],{"class":59},[34,73040,73041],{"class":63},"237",[34,73043,12899],{"class":59},[34,73045,73046],{"class":63},"235",[34,73048,12899],{"class":59},[34,73050,73046],{"class":63},[34,73052,3183],{"class":59},[34,73054,73055,73058,73060,73062],{"class":36,"line":17126},[34,73056,73057],{"class":63},"      box-sizing",[34,73059,51898],{"class":59},[34,73061,60966],{"class":63},[34,73063,1765],{"class":59},[34,73065,73066],{"class":36,"line":17140},[34,73067,2651],{"class":59},[34,73069,73070],{"class":36,"line":17160},[34,73071,2864],{"emptyLinePlaceholder":540},[34,73073,73074,73076,73078],{"class":36,"line":17166},[34,73075,72936],{"class":2427},[34,73077,52149],{"class":51761},[34,73079,16036],{"class":59},[34,73081,73082,73084,73086,73088],{"class":36,"line":17177},[34,73083,57877],{"class":63},[34,73085,51898],{"class":59},[34,73087,57882],{"class":63},[34,73089,1765],{"class":59},[34,73091,73092],{"class":36,"line":17200},[34,73093,2651],{"class":59},[34,73095,73096],{"class":36,"line":17222},[34,73097,2864],{"emptyLinePlaceholder":540},[34,73099,73100,73102],{"class":36,"line":17227},[34,73101,65484],{"class":51761},[34,73103,16036],{"class":59},[34,73105,73106,73108,73110,73112,73114],{"class":36,"line":17233},[34,73107,55232],{"class":63},[34,73109,51898],{"class":59},[34,73111,62090],{"class":63},[34,73113,51953],{"class":112},[34,73115,1765],{"class":59},[34,73117,73118,73120,73122,73125],{"class":36,"line":17247},[34,73119,55167],{"class":63},[34,73121,51898],{"class":59},[34,73123,73124],{"class":63},"auto",[34,73126,1765],{"class":59},[34,73128,73129,73131,73133,73135],{"class":36,"line":17260},[34,73130,65491],{"class":63},[34,73132,51898],{"class":59},[34,73134,65496],{"class":63},[34,73136,1765],{"class":59},[34,73138,73139],{"class":36,"line":17265},[34,73140,2651],{"class":59},[34,73142,73143],{"class":36,"line":17279},[34,73144,2864],{"emptyLinePlaceholder":540},[34,73146,73147,73149],{"class":36,"line":17284},[34,73148,65576],{"class":51761},[34,73150,16036],{"class":59},[34,73152,73153,73155,73157,73159,73161,73163,73165,73167,73169,73171],{"class":36,"line":17290},[34,73154,55345],{"class":63},[34,73156,51898],{"class":59},[34,73158,72784],{"class":63},[34,73160,617],{"class":59},[34,73162,73041],{"class":63},[34,73164,12899],{"class":59},[34,73166,73046],{"class":63},[34,73168,12899],{"class":59},[34,73170,73046],{"class":63},[34,73172,3183],{"class":59},[34,73174,73175],{"class":36,"line":17295},[34,73176,2651],{"class":59},[34,73178,73179],{"class":36,"line":17309},[34,73180,2864],{"emptyLinePlaceholder":540},[34,73182,73183,73185],{"class":36,"line":17314},[34,73184,65576],{"class":51761},[34,73186,31929],{"class":59},[34,73188,73189,73191],{"class":36,"line":17319},[34,73190,65642],{"class":51761},[34,73192,16036],{"class":59},[34,73194,73195,73197,73199,73201,73203],{"class":36,"line":17333},[34,73196,55246],{"class":63},[34,73198,51898],{"class":59},[34,73200,882],{"class":63},[34,73202,51953],{"class":112},[34,73204,1765],{"class":59},[34,73206,73207,73209,73211,73213],{"class":36,"line":17345},[34,73208,57747],{"class":63},[34,73210,51898],{"class":59},[34,73212,24200],{"class":63},[34,73214,1765],{"class":59},[34,73216,73217,73219,73221,73223,73225],{"class":36,"line":17350},[34,73218,55383],{"class":63},[34,73220,51898],{"class":59},[34,73222,1155],{"class":63},[34,73224,51953],{"class":112},[34,73226,1765],{"class":59},[34,73228,73229,73231,73233,73235,73237,73239,73241,73243,73246,73248,73251,73253,73255],{"class":36,"line":17363},[34,73230,62438],{"class":63},[34,73232,51898],{"class":59},[34,73234,64],{"class":63},[34,73236,51953],{"class":112},[34,73238,51982],{"class":63},[34,73240,72721],{"class":63},[34,73242,617],{"class":59},[34,73244,73245],{"class":63},"228",[34,73247,12899],{"class":59},[34,73249,73250],{"class":63},"225",[34,73252,12899],{"class":59},[34,73254,73250],{"class":63},[34,73256,3183],{"class":59},[34,73258,73259,73262,73264,73266,73268],{"class":36,"line":17368},[34,73260,73261],{"class":63},"      padding-left",[34,73263,51898],{"class":59},[34,73265,927],{"class":63},[34,73267,51953],{"class":112},[34,73269,1765],{"class":59},[34,73271,73272,73274,73276,73278,73281,73283,73285],{"class":36,"line":17373},[34,73273,62321],{"class":63},[34,73275,51898],{"class":59},[34,73277,28586],{"class":63},[34,73279,73280],{"class":63}," linear",[34,73282,62328],{"class":63},[34,73284,1301],{"class":112},[34,73286,1765],{"class":59},[34,73288,73289],{"class":36,"line":17378},[34,73290,2651],{"class":59},[34,73292,73293],{"class":36,"line":17391},[34,73294,2864],{"emptyLinePlaceholder":540},[34,73296,73297,73300,73302,73304],{"class":36,"line":17396},[34,73298,73299],{"class":51761},"    tbody",[34,73301,70605],{"class":51761},[34,73303,61401],{"class":2427},[34,73305,16036],{"class":59},[34,73307,73308,73310,73312,73314,73316,73318,73320,73322,73324,73326],{"class":36,"line":33096},[34,73309,55345],{"class":63},[34,73311,51898],{"class":59},[34,73313,72784],{"class":63},[34,73315,617],{"class":59},[34,73317,73041],{"class":63},[34,73319,12899],{"class":59},[34,73321,73046],{"class":63},[34,73323,12899],{"class":59},[34,73325,73046],{"class":63},[34,73327,3183],{"class":59},[34,73329,73330,73332,73334,73336],{"class":36,"line":33102},[34,73331,62486],{"class":63},[34,73333,51898],{"class":59},[34,73335,62491],{"class":63},[34,73337,1765],{"class":59},[34,73339,73340],{"class":36,"line":33108},[34,73341,2651],{"class":59},[34,73343,73344],{"class":36,"line":33114},[34,73345,2864],{"emptyLinePlaceholder":540},[34,73347,73348,73350,73352,73355,73357],{"class":36,"line":33120},[34,73349,73299],{"class":51761},[34,73351,70605],{"class":51761},[34,73353,73354],{"class":51761}," td",[34,73356,1870],{"class":51761},[34,73358,16036],{"class":59},[34,73360,73361,73363,73365,73367],{"class":36,"line":33131},[34,73362,55470],{"class":63},[34,73364,51898],{"class":59},[34,73366,61330],{"class":63},[34,73368,1765],{"class":59},[34,73370,73371,73373,73375,73377,73379],{"class":36,"line":33137},[34,73372,55232],{"class":63},[34,73374,51898],{"class":59},[34,73376,1512],{"class":63},[34,73378,51953],{"class":112},[34,73380,1765],{"class":59},[34,73382,73383,73385,73387,73389,73391],{"class":36,"line":33157},[34,73384,55246],{"class":63},[34,73386,51898],{"class":59},[34,73388,1431],{"class":63},[34,73390,51953],{"class":112},[34,73392,1765],{"class":59},[34,73394,73395,73397,73399,73401,73403],{"class":36,"line":33163},[34,73396,57820],{"class":63},[34,73398,51898],{"class":59},[34,73400,1431],{"class":63},[34,73402,51953],{"class":112},[34,73404,1765],{"class":59},[34,73406,73407,73409,73411,73413,73415],{"class":36,"line":33174},[34,73408,62538],{"class":63},[34,73410,51898],{"class":59},[34,73412,70],{"class":63},[34,73414,51953],{"class":112},[34,73416,1765],{"class":59},[34,73418,73419,73421,73423,73425],{"class":36,"line":33180},[34,73420,57877],{"class":63},[34,73422,51898],{"class":59},[34,73424,61303],{"class":63},[34,73426,1765],{"class":59},[34,73428,73429,73431,73433,73435],{"class":36,"line":33186},[34,73430,57747],{"class":63},[34,73432,51898],{"class":59},[34,73434,52053],{"class":63},[34,73436,1765],{"class":59},[34,73438,73439,73441,73443,73445],{"class":36,"line":33192},[34,73440,64431],{"class":63},[34,73442,51898],{"class":59},[34,73444,55198],{"class":63},[34,73446,1765],{"class":59},[34,73448,73449,73451,73453,73456],{"class":36,"line":33198},[34,73450,55345],{"class":63},[34,73452,51898],{"class":59},[34,73454,73455],{"class":63},"orange",[34,73457,1765],{"class":59},[34,73459,73460,73462,73464,73467,73469],{"class":36,"line":33204},[34,73461,55595],{"class":63},[34,73463,51898],{"class":59},[34,73465,73466],{"class":63},"12.5",[34,73468,51953],{"class":112},[34,73470,1765],{"class":59},[34,73472,73473],{"class":36,"line":33210},[34,73474,2651],{"class":59},[34,73476,73477,73479,73481],{"class":36,"line":33216},[34,73478,52878],{"class":59},[34,73480,532],{"class":51761},[34,73482,51768],{"class":59},[34,73484,73485,73487,73489],{"class":36,"line":33236},[34,73486,52246],{"class":59},[34,73488,51795],{"class":51761},[34,73490,51768],{"class":59},[34,73492,73493],{"class":36,"line":33242},[34,73494,2864],{"emptyLinePlaceholder":540},[34,73496,73497,73499,73501],{"class":36,"line":33258},[34,73498,1515],{"class":59},[34,73500,52261],{"class":51761},[34,73502,51768],{"class":59},[34,73504,73505,73507,73509,73512,73514],{"class":36,"line":33264},[34,73506,52605],{"class":59},[34,73508,555],{"class":51761},[34,73510,73511],{"class":59},">学生就业统计表\u003C\u002F",[34,73513,555],{"class":51761},[34,73515,51768],{"class":59},[34,73517,73518,73520,73522,73524,73526,73528,73530,73532,73534],{"class":36,"line":33278},[34,73519,52605],{"class":59},[34,73521,67086],{"class":51761},[34,73523,53947],{"class":2427},[34,73525,447],{"class":59},[34,73527,63125],{"class":187},[34,73529,69531],{"class":2427},[34,73531,447],{"class":59},[34,73533,32239],{"class":187},[34,73535,51768],{"class":59},[34,73537,73538,73540,73542,73544,73546,73548,73550,73552,73554,73556,73558,73561,73563,73565,73567],{"class":36,"line":33284},[34,73539,51802],{"class":59},[34,73541,54282],{"class":51761},[34,73543,54285],{"class":2427},[34,73545,447],{"class":59},[34,73547,63160],{"class":187},[34,73549,15384],{"class":2427},[34,73551,447],{"class":59},[34,73553,69557],{"class":187},[34,73555,61481],{"class":2427},[34,73557,447],{"class":59},[34,73559,73560],{"class":187},"\"姓名\"",[34,73562,53947],{"class":2427},[34,73564,447],{"class":59},[34,73566,69557],{"class":187},[34,73568,51768],{"class":59},[34,73570,73571,73573,73575,73577,73579,73581,73583,73585,73587,73589,73591,73594,73596,73598,73600],{"class":36,"line":33299},[34,73572,51802],{"class":59},[34,73574,54282],{"class":51761},[34,73576,54285],{"class":2427},[34,73578,447],{"class":59},[34,73580,63160],{"class":187},[34,73582,15384],{"class":2427},[34,73584,447],{"class":59},[34,73586,69585],{"class":187},[34,73588,61481],{"class":2427},[34,73590,447],{"class":59},[34,73592,73593],{"class":187},"\"年龄\"",[34,73595,53947],{"class":2427},[34,73597,447],{"class":59},[34,73599,69585],{"class":187},[34,73601,51768],{"class":59},[34,73603,73604,73606,73608,73610,73612,73614,73616,73618,73620,73622,73624,73627,73629,73631,73633],{"class":36,"line":33305},[34,73605,51802],{"class":59},[34,73607,54282],{"class":51761},[34,73609,54285],{"class":2427},[34,73611,447],{"class":59},[34,73613,63160],{"class":187},[34,73615,15384],{"class":2427},[34,73617,447],{"class":59},[34,73619,69687],{"class":187},[34,73621,61481],{"class":2427},[34,73623,447],{"class":59},[34,73625,73626],{"class":187},"\"薪资\"",[34,73628,53947],{"class":2427},[34,73630,447],{"class":59},[34,73632,69687],{"class":187},[34,73634,51768],{"class":59},[34,73636,73637,73639,73641,73643,73645,73647,73649,73651,73653,73655,73657,73659],{"class":36,"line":33314},[34,73638,51802],{"class":59},[34,73640,69605],{"class":51761},[34,73642,15384],{"class":2427},[34,73644,447],{"class":59},[34,73646,69612],{"class":187},[34,73648,15423],{"class":2427},[34,73650,447],{"class":59},[34,73652,8116],{"class":187},[34,73654,53947],{"class":2427},[34,73656,447],{"class":59},[34,73658,69612],{"class":187},[34,73660,51768],{"class":59},[34,73662,73663,73665,73667,73669,73671,73673,73675,73677],{"class":36,"line":33320},[34,73664,55695],{"class":59},[34,73666,69627],{"class":51761},[34,73668,67112],{"class":2427},[34,73670,447],{"class":59},[34,73672,10425],{"class":187},[34,73674,69636],{"class":59},[34,73676,69627],{"class":51761},[34,73678,51768],{"class":59},[34,73680,73681,73683,73685,73687,73689,73691,73693,73695],{"class":36,"line":33329},[34,73682,55695],{"class":59},[34,73684,69627],{"class":51761},[34,73686,67112],{"class":2427},[34,73688,447],{"class":59},[34,73690,10494],{"class":187},[34,73692,69655],{"class":59},[34,73694,69627],{"class":51761},[34,73696,51768],{"class":59},[34,73698,73699,73701,73703],{"class":36,"line":33335},[34,73700,52237],{"class":59},[34,73702,69605],{"class":51761},[34,73704,51768],{"class":59},[34,73706,73707,73709,73711,73713,73715,73717,73719,73721,73723,73725,73727,73729],{"class":36,"line":33341},[34,73708,51802],{"class":59},[34,73710,69605],{"class":51761},[34,73712,15384],{"class":2427},[34,73714,447],{"class":59},[34,73716,69709],{"class":187},[34,73718,15423],{"class":2427},[34,73720,447],{"class":59},[34,73722,8116],{"class":187},[34,73724,53947],{"class":2427},[34,73726,447],{"class":59},[34,73728,69709],{"class":187},[34,73730,51768],{"class":59},[34,73732,73733,73735,73737,73739,73741,73743,73745,73747],{"class":36,"line":33350},[34,73734,55695],{"class":59},[34,73736,69627],{"class":51761},[34,73738,67112],{"class":2427},[34,73740,447],{"class":59},[34,73742,69730],{"class":187},[34,73744,69733],{"class":59},[34,73746,69627],{"class":51761},[34,73748,51768],{"class":59},[34,73750,73751,73753,73755,73757,73759,73761,73763,73765],{"class":36,"line":33356},[34,73752,55695],{"class":59},[34,73754,69627],{"class":51761},[34,73756,67112],{"class":2427},[34,73758,447],{"class":59},[34,73760,69750],{"class":187},[34,73762,69753],{"class":59},[34,73764,69627],{"class":51761},[34,73766,51768],{"class":59},[34,73768,73769,73771,73773,73775,73777,73779,73781,73783],{"class":36,"line":33367},[34,73770,55695],{"class":59},[34,73772,69627],{"class":51761},[34,73774,67112],{"class":2427},[34,73776,447],{"class":59},[34,73778,69770],{"class":187},[34,73780,69773],{"class":59},[34,73782,69627],{"class":51761},[34,73784,51768],{"class":59},[34,73786,73787,73789,73791,73793,73795,73797,73799,73801],{"class":36,"line":33373},[34,73788,55695],{"class":59},[34,73790,69627],{"class":51761},[34,73792,67112],{"class":2427},[34,73794,447],{"class":59},[34,73796,69790],{"class":187},[34,73798,69793],{"class":59},[34,73800,69627],{"class":51761},[34,73802,51768],{"class":59},[34,73804,73805,73807,73809,73811,73813,73815,73817,73819],{"class":36,"line":33392},[34,73806,55695],{"class":59},[34,73808,69627],{"class":51761},[34,73810,67112],{"class":2427},[34,73812,447],{"class":59},[34,73814,69810],{"class":187},[34,73816,69813],{"class":59},[34,73818,69627],{"class":51761},[34,73820,51768],{"class":59},[34,73822,73823,73825,73827],{"class":36,"line":33398},[34,73824,52237],{"class":59},[34,73826,69605],{"class":51761},[34,73828,51768],{"class":59},[34,73830,73831,73833,73835],{"class":36,"line":33409},[34,73832,51802],{"class":59},[34,73834,54348],{"class":51761},[34,73836,51768],{"class":59},[34,73838,73839,73841,73843,73846,73848,73851,73853],{"class":36,"line":33415},[34,73840,55695],{"class":59},[34,73842,34],{"class":51761},[34,73844,73845],{"class":59},">+\u003C\u002F",[34,73847,34],{"class":51761},[34,73849,73850],{"class":59},">添加\u003C\u002F",[34,73852,54348],{"class":51761},[34,73854,51768],{"class":59},[34,73856,73857,73859,73861],{"class":36,"line":33435},[34,73858,52878],{"class":59},[34,73860,67086],{"class":51761},[34,73862,51768],{"class":59},[34,73864,73865,73867,73869,73871,73873,73875,73878,73880,73883,73885,73888,73890],{"class":36,"line":33451},[34,73866,52605],{"class":59},[34,73868,52072],{"class":51761},[34,73870,53947],{"class":2427},[34,73872,447],{"class":59},[34,73874,63041],{"class":187},[34,73876,73877],{"class":59},">共有数据 \u003C",[34,73879,34],{"class":51761},[34,73881,73882],{"class":59},">0\u003C\u002F",[34,73884,34],{"class":51761},[34,73886,73887],{"class":59},"> 条\u003C\u002F",[34,73889,52072],{"class":51761},[34,73891,51768],{"class":59},[34,73893,73894,73896,73898],{"class":36,"line":33457},[34,73895,52605],{"class":59},[34,73897,748],{"class":51761},[34,73899,51768],{"class":59},[34,73901,73902,73904,73906],{"class":36,"line":33471},[34,73903,51802],{"class":59},[34,73905,751],{"class":51761},[34,73907,51768],{"class":59},[34,73909,73910,73912,73914],{"class":36,"line":33477},[34,73911,55695],{"class":59},[34,73913,754],{"class":51761},[34,73915,51768],{"class":59},[34,73917,73918,73920,73922,73925,73927],{"class":36,"line":33483},[34,73919,55763],{"class":59},[34,73921,757],{"class":51761},[34,73923,73924],{"class":59},">ID\u003C\u002F",[34,73926,757],{"class":51761},[34,73928,51768],{"class":59},[34,73930,73931,73933,73935,73937,73939],{"class":36,"line":33494},[34,73932,55763],{"class":59},[34,73934,757],{"class":51761},[34,73936,69916],{"class":59},[34,73938,757],{"class":51761},[34,73940,51768],{"class":59},[34,73942,73943,73945,73947,73949,73951],{"class":36,"line":33500},[34,73944,55763],{"class":59},[34,73946,757],{"class":51761},[34,73948,69929],{"class":59},[34,73950,757],{"class":51761},[34,73952,51768],{"class":59},[34,73954,73955,73957,73959,73961,73963],{"class":36,"line":33506},[34,73956,55763],{"class":59},[34,73958,757],{"class":51761},[34,73960,69942],{"class":59},[34,73962,757],{"class":51761},[34,73964,51768],{"class":59},[34,73966,73967,73969,73971,73973,73975],{"class":36,"line":33516},[34,73968,55763],{"class":59},[34,73970,757],{"class":51761},[34,73972,69955],{"class":59},[34,73974,757],{"class":51761},[34,73976,51768],{"class":59},[34,73978,73979,73981,73983,73985,73987],{"class":36,"line":33522},[34,73980,55763],{"class":59},[34,73982,757],{"class":51761},[34,73984,69968],{"class":59},[34,73986,757],{"class":51761},[34,73988,51768],{"class":59},[34,73990,73991,73993,73995,73998,74000],{"class":36,"line":33533},[34,73992,55763],{"class":59},[34,73994,757],{"class":51761},[34,73996,73997],{"class":59},">录入时间\u003C\u002F",[34,73999,757],{"class":51761},[34,74001,51768],{"class":59},[34,74003,74004,74006,74008,74010,74012],{"class":36,"line":33539},[34,74005,55763],{"class":59},[34,74007,757],{"class":51761},[34,74009,69981],{"class":59},[34,74011,757],{"class":51761},[34,74013,51768],{"class":59},[34,74015,74016,74018,74020],{"class":36,"line":33549},[34,74017,55868],{"class":59},[34,74019,754],{"class":51761},[34,74021,51768],{"class":59},[34,74023,74024,74026,74028],{"class":36,"line":33554},[34,74025,52237],{"class":59},[34,74027,751],{"class":51761},[34,74029,51768],{"class":59},[34,74031,74032,74034,74036],{"class":36,"line":33560},[34,74033,51802],{"class":59},[34,74035,795],{"class":51761},[34,74037,51768],{"class":59},[34,74039,74040],{"class":36,"line":33609},[34,74041,74042],{"class":40},"      \u003C!-- \u003Ctr>\n",[34,74044,74045],{"class":36,"line":33656},[34,74046,74047],{"class":40},"        \u003Ctd>1\u003C\u002Ftd>\n",[34,74049,74050],{"class":36,"line":33661},[34,74051,74047],{"class":40},[34,74053,74054],{"class":36,"line":33667},[34,74055,74047],{"class":40},[34,74057,74058],{"class":36,"line":33686},[34,74059,74047],{"class":40},[34,74061,74062],{"class":36,"line":33692},[34,74063,74047],{"class":40},[34,74065,74066],{"class":36,"line":33711},[34,74067,74047],{"class":40},[34,74069,74070],{"class":36,"line":33717},[34,74071,74047],{"class":40},[34,74073,74074],{"class":36,"line":33723},[34,74075,74076],{"class":40},"        \u003Ctd>\n",[34,74078,74079],{"class":36,"line":33733},[34,74080,74081],{"class":40},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[34,74083,74084],{"class":36,"line":33738},[34,74085,74086],{"class":40},"        \u003C\u002Ftd>\n",[34,74088,74089],{"class":36,"line":33744},[34,74090,74091],{"class":40},"      \u003C\u002Ftr> -->\n",[34,74093,74094,74096,74098],{"class":36,"line":33760},[34,74095,52237],{"class":59},[34,74097,795],{"class":51761},[34,74099,51768],{"class":59},[34,74101,74102,74104,74106],{"class":36,"line":33805},[34,74103,52878],{"class":59},[34,74105,748],{"class":51761},[34,74107,51768],{"class":59},[34,74109,74110,74112,74114],{"class":36,"line":33811},[34,74111,52605],{"class":59},[34,74113,52274],{"class":51761},[34,74115,51768],{"class":59},[34,74117,74118],{"class":36,"line":33817},[34,74119,74120],{"class":40},"    \u002F\u002F const initData = [{\n",[34,74122,74123],{"class":36,"line":33823},[34,74124,74125],{"class":40},"    \u002F\u002F   unameId: 1,\n",[34,74127,74128],{"class":36,"line":33834},[34,74129,74130],{"class":40},"    \u002F\u002F   uname: '华晨宇',\n",[34,74132,74133],{"class":36,"line":33840},[34,74134,74135],{"class":40},"    \u002F\u002F   age: 22,\n",[34,74137,74138],{"class":36,"line":33846},[34,74139,74140],{"class":40},"    \u002F\u002F   salary: 12000,\n",[34,74142,74143],{"class":36,"line":33852},[34,74144,74145],{"class":40},"    \u002F\u002F   gender: '男',\n",[34,74147,74148],{"class":36,"line":33870},[34,74149,74150],{"class":40},"    \u002F\u002F   city: '北京',\n",[34,74152,74153],{"class":36,"line":33884},[34,74154,74155],{"class":40},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[34,74157,74158],{"class":36,"line":33893},[34,74159,74160],{"class":40},"    \u002F\u002F }]\n",[34,74162,74163],{"class":36,"line":33902},[34,74164,74165],{"class":40},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[34,74167,74168],{"class":36,"line":33911},[34,74169,74170],{"class":40},"    \u002F\u002F 1.渲染业务\n",[34,74172,74173],{"class":36,"line":33920},[34,74174,74175],{"class":40},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[34,74177,74178],{"class":36,"line":33926},[34,74179,74180],{"class":40},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[34,74182,74183],{"class":36,"line":33932},[34,74184,74185],{"class":40},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[34,74187,74188],{"class":36,"line":33940},[34,74189,2864],{"emptyLinePlaceholder":540},[34,74191,74192],{"class":36,"line":33945},[34,74193,74194],{"class":40},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[34,74196,74197],{"class":36,"line":33951},[34,74198,74199],{"class":40},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[34,74201,74202,74204,74206,74208],{"class":36,"line":33962},[34,74203,11685],{"class":112},[34,74205,58156],{"class":63},[34,74207,14028],{"class":112},[34,74209,52299],{"class":59},[34,74211,74212,74215,74217],{"class":36,"line":33968},[34,74213,74214],{"class":59},"    console.",[34,74216,58708],{"class":2427},[34,74218,52873],{"class":59},[34,74220,74221],{"class":36,"line":33988},[34,74222,2864],{"emptyLinePlaceholder":540},[34,74224,74225],{"class":36,"line":33994},[34,74226,74227],{"class":40},"    \u002F\u002F 时间函数\n",[34,74229,74230,74232,74235],{"class":36,"line":34000},[34,74231,70545],{"class":112},[34,74233,74234],{"class":2427}," getTime",[34,74236,11317],{"class":59},[34,74238,74239,74241,74244,74246,74248,74251],{"class":36,"line":34006},[34,74240,58689],{"class":112},[34,74242,74243],{"class":63}," date",[34,74245,14028],{"class":112},[34,74247,12042],{"class":112},[34,74249,74250],{"class":2427}," Date",[34,74252,2440],{"class":59},[34,74254,74255,74257,74259,74261,74264,74267,74269,74271,74273,74276,74279,74281,74283,74285,74287,74289,74291,74293],{"class":36,"line":34023},[34,74256,58689],{"class":112},[34,74258,16555],{"class":63},[34,74260,14028],{"class":112},[34,74262,74263],{"class":59}," date.",[34,74265,74266],{"class":2427},"getHours",[34,74268,13514],{"class":59},[34,74270,1515],{"class":112},[34,74272,2502],{"class":63},[34,74274,74275],{"class":112}," ?",[34,74277,74278],{"class":187}," '0'",[34,74280,46027],{"class":112},[34,74282,74263],{"class":59},[34,74284,74266],{"class":2427},[34,74286,13514],{"class":59},[34,74288,214],{"class":112},[34,74290,74263],{"class":59},[34,74292,74266],{"class":2427},[34,74294,2440],{"class":59},[34,74296,74297,74299,74302,74304,74306,74309,74311,74313,74315,74317,74319,74321,74323,74325,74327,74329,74331,74333],{"class":36,"line":34029},[34,74298,58689],{"class":112},[34,74300,74301],{"class":63}," m",[34,74303,14028],{"class":112},[34,74305,74263],{"class":59},[34,74307,74308],{"class":2427},"getMinutes",[34,74310,13514],{"class":59},[34,74312,1515],{"class":112},[34,74314,2502],{"class":63},[34,74316,74275],{"class":112},[34,74318,74278],{"class":187},[34,74320,46027],{"class":112},[34,74322,74263],{"class":59},[34,74324,74308],{"class":2427},[34,74326,13514],{"class":59},[34,74328,214],{"class":112},[34,74330,74263],{"class":59},[34,74332,74308],{"class":2427},[34,74334,2440],{"class":59},[34,74336,74337,74339,74341,74343,74345,74348,74350,74352,74354,74356,74358,74360,74362,74364,74366,74368,74370,74372],{"class":36,"line":34035},[34,74338,58689],{"class":112},[34,74340,8892],{"class":63},[34,74342,14028],{"class":112},[34,74344,74263],{"class":59},[34,74346,74347],{"class":2427},"getSeconds",[34,74349,13514],{"class":59},[34,74351,1515],{"class":112},[34,74353,2502],{"class":63},[34,74355,74275],{"class":112},[34,74357,74278],{"class":187},[34,74359,46027],{"class":112},[34,74361,74263],{"class":59},[34,74363,74347],{"class":2427},[34,74365,13514],{"class":59},[34,74367,214],{"class":112},[34,74369,74263],{"class":59},[34,74371,74347],{"class":2427},[34,74373,2440],{"class":59},[34,74375,74376,74378,74381,74383,74385,74388,74390,74393,74395,74398,74400,74402,74405,74407,74409,74411,74413,74415,74417,74420,74422,74425,74427,74430,74432,74434,74436],{"class":36,"line":34041},[34,74377,58689],{"class":112},[34,74379,74380],{"class":63}," str",[34,74382,14028],{"class":112},[34,74384,63364],{"class":187},[34,74386,74387],{"class":59},"date",[34,74389,1164],{"class":187},[34,74391,74392],{"class":2427},"getFullYear",[34,74394,2891],{"class":187},[34,74396,74397],{"class":187},"}\u002F${",[34,74399,74387],{"class":59},[34,74401,1164],{"class":187},[34,74403,74404],{"class":2427},"getMonth",[34,74406,13514],{"class":187},[34,74408,1088],{"class":112},[34,74410,25583],{"class":63},[34,74412,74397],{"class":187},[34,74414,74387],{"class":59},[34,74416,1164],{"class":187},[34,74418,74419],{"class":2427},"getDate",[34,74421,2891],{"class":187},[34,74423,74424],{"class":187},"} ${",[34,74426,1022],{"class":59},[34,74428,74429],{"class":187},"}:${",[34,74431,1150],{"class":59},[34,74433,74429],{"class":187},[34,74435,1301],{"class":59},[34,74437,74438],{"class":187},"}`\n",[34,74440,74441,74444],{"class":36,"line":34047},[34,74442,74443],{"class":112},"      return",[34,74445,74446],{"class":59}," str\n",[34,74448,74449],{"class":36,"line":34053},[34,74450,2651],{"class":59},[34,74452,74453],{"class":36,"line":34080},[34,74454,74455],{"class":40},"    \u002F\u002F 渲染函数\n",[34,74457,74458,74460,74462,74464,74466,74468,74470,74472],{"class":36,"line":34104},[34,74459,11685],{"class":112},[34,74461,70208],{"class":63},[34,74463,14028],{"class":112},[34,74465,54857],{"class":59},[34,74467,54860],{"class":2427},[34,74469,617],{"class":59},[34,74471,70219],{"class":187},[34,74473,623],{"class":59},[34,74475,74476,74478,74480],{"class":36,"line":34110},[34,74477,70545],{"class":112},[34,74479,70548],{"class":2427},[34,74481,11317],{"class":59},[34,74483,74484],{"class":36,"line":34116},[34,74485,74486],{"class":40},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[34,74488,74489],{"class":36,"line":34122},[34,74490,74491],{"class":40},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[34,74493,74494,74496,74499,74501,74503,74506,74508,74510,74512,74515,74517,74520],{"class":36,"line":34133},[34,74495,58689],{"class":112},[34,74497,74498],{"class":63}," trArr",[34,74500,14028],{"class":112},[34,74502,52426],{"class":59},[34,74504,74505],{"class":2427},"map",[34,74507,617],{"class":59},[34,74509,54910],{"class":112},[34,74511,2122],{"class":59},[34,74513,74514],{"class":5680},"ele",[34,74516,12899],{"class":59},[34,74518,74519],{"class":5680},"index",[34,74521,12906],{"class":59},[34,74523,74524,74526],{"class":36,"line":34144},[34,74525,15216],{"class":112},[34,74527,70629],{"class":187},[34,74529,74530],{"class":36,"line":34150},[34,74531,74532],{"class":187},"      \u003Ctr>\n",[34,74534,74535,74537,74539,74541,74544],{"class":36,"line":34167},[34,74536,70634],{"class":187},[34,74538,74514],{"class":59},[34,74540,1164],{"class":187},[34,74542,74543],{"class":59},"unameId",[34,74545,70649],{"class":187},[34,74547,74548,74550,74552,74554,74556],{"class":36,"line":34190},[34,74549,70634],{"class":187},[34,74551,74514],{"class":59},[34,74553,1164],{"class":187},[34,74555,70665],{"class":59},[34,74557,70649],{"class":187},[34,74559,74560,74562,74564,74566,74568],{"class":36,"line":34213},[34,74561,70634],{"class":187},[34,74563,74514],{"class":59},[34,74565,1164],{"class":187},[34,74567,70682],{"class":59},[34,74569,70649],{"class":187},[34,74571,74572,74574,74576,74578,74580],{"class":36,"line":34219},[34,74573,70634],{"class":187},[34,74575,74514],{"class":59},[34,74577,1164],{"class":187},[34,74579,70699],{"class":59},[34,74581,70649],{"class":187},[34,74583,74584,74586,74588,74590,74592],{"class":36,"line":34224},[34,74585,70634],{"class":187},[34,74587,74514],{"class":59},[34,74589,1164],{"class":187},[34,74591,70716],{"class":59},[34,74593,70649],{"class":187},[34,74595,74596,74598,74600,74602,74604],{"class":36,"line":34233},[34,74597,70634],{"class":187},[34,74599,74514],{"class":59},[34,74601,1164],{"class":187},[34,74603,70733],{"class":59},[34,74605,70649],{"class":187},[34,74607,74608,74610,74612,74614,74616],{"class":36,"line":34243},[34,74609,70634],{"class":187},[34,74611,74514],{"class":59},[34,74613,1164],{"class":187},[34,74615,2851],{"class":59},[34,74617,70649],{"class":187},[34,74619,74620],{"class":36,"line":34249},[34,74621,74076],{"class":187},[34,74623,74624,74627,74629],{"class":36,"line":34254},[34,74625,74626],{"class":187},"          \u003Ca href=\"#\" data-id=\"${",[34,74628,74519],{"class":59},[34,74630,74631],{"class":187},"}\">删除\u003C\u002Fa>\n",[34,74633,74634],{"class":36,"line":34260},[34,74635,74086],{"class":187},[34,74637,74638],{"class":36,"line":34273},[34,74639,74640],{"class":187},"      \u003C\u002Ftr>\n",[34,74642,74643],{"class":36,"line":34279},[34,74644,74645],{"class":187},"  `\n",[34,74647,74648],{"class":36,"line":34290},[34,74649,65276],{"class":59},[34,74651,74652,74654,74656],{"class":36,"line":34301},[34,74653,58705],{"class":59},[34,74655,58708],{"class":2427},[34,74657,74658],{"class":59},"(trArr)\n",[34,74660,74661],{"class":36,"line":34320},[34,74662,2864],{"emptyLinePlaceholder":540},[34,74664,74665],{"class":36,"line":49979},[34,74666,74667],{"class":40},"      \u002F\u002F (2) 把数组转换为字符串join\n",[34,74669,74670],{"class":36,"line":49984},[34,74671,74672],{"class":40},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[34,74674,74675,74677,74679,74682,74685,74687,74690],{"class":36,"line":49993},[34,74676,70560],{"class":59},[34,74678,447],{"class":112},[34,74680,74681],{"class":59}," trArr.",[34,74683,74684],{"class":2427},"join",[34,74686,617],{"class":59},[34,74688,74689],{"class":187},"''",[34,74691,623],{"class":59},[34,74693,74694],{"class":36,"line":50002},[34,74695,74696],{"class":40},"      \u002F\u002F 显示共有几条\n",[34,74698,74699,74701,74703,74705,74708,74711,74713,74715],{"class":36,"line":50007},[34,74700,56232],{"class":59},[34,74702,54860],{"class":2427},[34,74704,617],{"class":59},[34,74706,74707],{"class":187},"'.total span'",[34,74709,74710],{"class":59},").innerHTML ",[34,74712,447],{"class":112},[34,74714,52426],{"class":59},[34,74716,56292],{"class":63},[34,74718,74719],{"class":36,"line":50012},[34,74720,2651],{"class":59},[34,74722,74723],{"class":36,"line":50017},[34,74724,74725],{"class":40},"    \u002F\u002F render()\n",[34,74727,74728],{"class":36,"line":50030},[34,74729,2864],{"emptyLinePlaceholder":540},[34,74731,74732],{"class":36,"line":50035},[34,74733,74734],{"class":40},"    \u002F\u002F 获取DOM对象\n",[34,74736,74737,74739,74741,74743,74745,74747,74749,74751],{"class":36,"line":50044},[34,74738,11685],{"class":112},[34,74740,70282],{"class":63},[34,74742,14028],{"class":112},[34,74744,54857],{"class":59},[34,74746,54860],{"class":2427},[34,74748,617],{"class":59},[34,74750,70293],{"class":187},[34,74752,623],{"class":59},[34,74754,74755,74757,74759,74761,74763,74765,74767,74769],{"class":36,"line":50053},[34,74756,11685],{"class":112},[34,74758,70109],{"class":63},[34,74760,14028],{"class":112},[34,74762,54857],{"class":59},[34,74764,54860],{"class":2427},[34,74766,617],{"class":59},[34,74768,70120],{"class":187},[34,74770,623],{"class":59},[34,74772,74773,74775,74777,74779,74781,74783,74785,74787],{"class":36,"line":50070},[34,74774,11685],{"class":112},[34,74776,16153],{"class":63},[34,74778,14028],{"class":112},[34,74780,54857],{"class":59},[34,74782,54860],{"class":2427},[34,74784,617],{"class":59},[34,74786,70139],{"class":187},[34,74788,623],{"class":59},[34,74790,74792,74794,74796,74798,74800,74802,74804,74806],{"class":36,"line":74791},231,[34,74793,11685],{"class":112},[34,74795,70168],{"class":63},[34,74797,14028],{"class":112},[34,74799,54857],{"class":59},[34,74801,54860],{"class":2427},[34,74803,617],{"class":59},[34,74805,70179],{"class":187},[34,74807,623],{"class":59},[34,74809,74811,74813,74815,74817,74819,74821,74823,74825],{"class":36,"line":74810},232,[34,74812,11685],{"class":112},[34,74814,70148],{"class":63},[34,74816,14028],{"class":112},[34,74818,54857],{"class":59},[34,74820,54860],{"class":2427},[34,74822,617],{"class":59},[34,74824,70159],{"class":187},[34,74826,623],{"class":59},[34,74828,74830,74832,74834,74836,74838,74840,74842,74844],{"class":36,"line":74829},233,[34,74831,11685],{"class":112},[34,74833,70188],{"class":63},[34,74835,14028],{"class":112},[34,74837,54857],{"class":59},[34,74839,54860],{"class":2427},[34,74841,617],{"class":59},[34,74843,70199],{"class":187},[34,74845,623],{"class":59},[34,74847,74849],{"class":36,"line":74848},234,[34,74850,2864],{"emptyLinePlaceholder":540},[34,74852,74854],{"class":36,"line":74853},235,[34,74855,74856],{"class":40},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[34,74858,74860,74862,74864,74866,74868,74870,74872,74874,74876],{"class":36,"line":74859},236,[34,74861,70300],{"class":59},[34,74863,58274],{"class":2427},[34,74865,617],{"class":59},[34,74867,70307],{"class":187},[34,74869,12899],{"class":59},[34,74871,54910],{"class":112},[34,74873,2122],{"class":59},[34,74875,687],{"class":5680},[34,74877,12906],{"class":59},[34,74879,74881],{"class":36,"line":74880},237,[34,74882,74883],{"class":40},"      \u002F\u002F 禁止浏览器跳转\n",[34,74885,74887,74889,74891],{"class":36,"line":74886},238,[34,74888,70327],{"class":59},[34,74890,70330],{"class":2427},[34,74892,2440],{"class":59},[34,74894,74896],{"class":36,"line":74895},239,[34,74897,74898],{"class":40},"      \u002F\u002F 非空判断\n",[34,74900,74902],{"class":36,"line":74901},240,[34,74903,74904],{"class":40},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[34,74906,74908],{"class":36,"line":74907},241,[34,74909,74910],{"class":40},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[34,74912,74914,74916,74918,74920,74923,74925,74928,74931,74933,74935],{"class":36,"line":74913},242,[34,74915,54941],{"class":112},[34,74917,2122],{"class":59},[34,74919,835],{"class":112},[34,74921,74922],{"class":59},"uname.value ",[34,74924,71818],{"class":112},[34,74926,74927],{"class":112}," !",[34,74929,74930],{"class":59},"age.value ",[34,74932,71818],{"class":112},[34,74934,74927],{"class":112},[34,74936,74937],{"class":59},"salary.value) {\n",[34,74939,74941,74943,74945,74947,74949],{"class":36,"line":74940},243,[34,74942,15216],{"class":112},[34,74944,70401],{"class":2427},[34,74946,617],{"class":59},[34,74948,70406],{"class":187},[34,74950,623],{"class":59},[34,74952,74954],{"class":36,"line":74953},244,[34,74955,52859],{"class":59},[34,74957,74959,74961,74963],{"class":36,"line":74958},245,[34,74960,58468],{"class":59},[34,74962,52345],{"class":2427},[34,74964,74965],{"class":59},"({\n",[34,74967,74969],{"class":36,"line":74968},246,[34,74970,74971],{"class":40},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[34,74973,74975],{"class":36,"line":74974},247,[34,74976,74977],{"class":40},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[34,74979,74981],{"class":36,"line":74980},248,[34,74982,74983],{"class":40},"        \u002F\u002F 对象的序号应为数组长度+1\n",[34,74985,74987],{"class":36,"line":74986},249,[34,74988,74989],{"class":40},"        \u002F\u002F unameId: arr.length + 1,\n",[34,74991,74993],{"class":36,"line":74992},250,[34,74994,2864],{"emptyLinePlaceholder":540},[34,74996,74998],{"class":36,"line":74997},251,[34,74999,75000],{"class":40},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[34,75002,75004],{"class":36,"line":75003},252,[34,75005,75006],{"class":40},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[34,75008,75010],{"class":36,"line":75009},253,[34,75011,75012],{"class":40},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[34,75014,75016],{"class":36,"line":75015},254,[34,75017,75018],{"class":40},"        \u002F\u002F 0当假看\n",[34,75020,75022,75025,75027,75029,75032,75034,75036,75038,75041,75043,75045,75048,75050],{"class":36,"line":75021},255,[34,75023,75024],{"class":59},"        unameId: arr.",[34,75026,52429],{"class":63},[34,75028,74275],{"class":112},[34,75030,75031],{"class":59}," arr[arr.",[34,75033,52429],{"class":63},[34,75035,52732],{"class":112},[34,75037,25583],{"class":63},[34,75039,75040],{"class":59},"].unameId ",[34,75042,1088],{"class":112},[34,75044,25583],{"class":63},[34,75046,75047],{"class":112}," :",[34,75049,25583],{"class":63},[34,75051,31929],{"class":59},[34,75053,75055],{"class":36,"line":75054},256,[34,75056,70454],{"class":59},[34,75058,75060],{"class":36,"line":75059},257,[34,75061,70459],{"class":59},[34,75063,75065],{"class":36,"line":75064},258,[34,75066,70469],{"class":59},[34,75068,75070],{"class":36,"line":75069},259,[34,75071,70464],{"class":59},[34,75073,75075],{"class":36,"line":75074},260,[34,75076,75077],{"class":59},"        city: city.value,\n",[34,75079,75081],{"class":36,"line":75080},261,[34,75082,75083],{"class":40},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[34,75085,75087],{"class":36,"line":75086},262,[34,75088,75089],{"class":40},"        \u002F\u002F time: new Date().toDateString()\n",[34,75091,75093,75096,75099],{"class":36,"line":75092},263,[34,75094,75095],{"class":59},"        time: ",[34,75097,75098],{"class":2427},"getTime",[34,75100,2440],{"class":59},[34,75102,75104],{"class":36,"line":75103},264,[34,75105,65276],{"class":59},[34,75107,75109],{"class":36,"line":75108},265,[34,75110,75111],{"class":40},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[34,75113,75115,75117],{"class":36,"line":75114},266,[34,75116,70529],{"class":2427},[34,75118,2440],{"class":59},[34,75120,75122,75124,75126,75128,75130],{"class":36,"line":75121},267,[34,75123,70512],{"class":63},[34,75125,1164],{"class":59},[34,75127,70517],{"class":2427},[34,75129,13514],{"class":59},[34,75131,75132],{"class":40},"\u002F\u002F重置表单\n",[34,75134,75136],{"class":36,"line":75135},268,[34,75137,75138],{"class":40},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[34,75140,75142,75145,75147,75149,75152,75154,75156,75158,75160],{"class":36,"line":75141},269,[34,75143,75144],{"class":59},"      localStorage.",[34,75146,72115],{"class":2427},[34,75148,617],{"class":59},[34,75150,75151],{"class":187},"'data'",[34,75153,12899],{"class":59},[34,75155,72125],{"class":63},[34,75157,1164],{"class":59},[34,75159,72130],{"class":2427},[34,75161,75162],{"class":59},"(arr))\n",[34,75164,75166],{"class":36,"line":75165},270,[34,75167,33923],{"class":59},[34,75169,75171],{"class":36,"line":75170},271,[34,75172,2864],{"emptyLinePlaceholder":540},[34,75174,75176],{"class":36,"line":75175},272,[34,75177,75178],{"class":40},"    \u002F\u002F 3.删除业务\n",[34,75180,75182],{"class":36,"line":75181},273,[34,75183,75184],{"class":40},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[34,75186,75188,75190,75192,75194,75196,75198,75200,75202,75204],{"class":36,"line":75187},274,[34,75189,70802],{"class":59},[34,75191,58274],{"class":2427},[34,75193,617],{"class":59},[34,75195,58279],{"class":187},[34,75197,12899],{"class":59},[34,75199,54910],{"class":112},[34,75201,2122],{"class":59},[34,75203,687],{"class":5680},[34,75205,12906],{"class":59},[34,75207,75209],{"class":36,"line":75208},275,[34,75210,75211],{"class":40},"      \u002F\u002F 判断是否点击的是删除按钮\n",[34,75213,75215,75217,75219,75221,75223],{"class":36,"line":75214},276,[34,75216,54941],{"class":112},[34,75218,67495],{"class":59},[34,75220,54947],{"class":112},[34,75222,68717],{"class":187},[34,75224,12906],{"class":59},[34,75226,75228],{"class":36,"line":75227},277,[34,75229,75230],{"class":40},"        \u002F\u002F alert(1)\n",[34,75232,75234],{"class":36,"line":75233},278,[34,75235,75236],{"class":40},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[34,75238,75240],{"class":36,"line":75239},279,[34,75241,75242],{"class":40},"        \u002F\u002F console.log(e.target)\n",[34,75244,75246],{"class":36,"line":75245},280,[34,75247,75248],{"class":40},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[34,75250,75252],{"class":36,"line":75251},281,[34,75253,2864],{"emptyLinePlaceholder":540},[34,75255,75257],{"class":36,"line":75256},282,[34,75258,75259],{"class":40},"        \u002F\u002F 确认框，确然是否真的要删除\n",[34,75261,75263],{"class":36,"line":75262},283,[34,75264,75265],{"class":40},"        \u002F\u002F confirm()为确认框\n",[34,75267,75269],{"class":36,"line":75268},284,[34,75270,75271],{"class":40},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[34,75273,75275,75277,75279,75282,75284,75287],{"class":36,"line":75274},285,[34,75276,2961],{"class":112},[34,75278,2122],{"class":59},[34,75280,75281],{"class":2427},"confirm",[34,75283,617],{"class":59},[34,75285,75286],{"class":187},"'您确定要删除这条数据吗？'",[34,75288,75289],{"class":59},")) {\n",[34,75291,75293,75296,75298,75300,75302],{"class":36,"line":75292},286,[34,75294,75295],{"class":59},"          arr.",[34,75297,58471],{"class":2427},[34,75299,70855],{"class":59},[34,75301,64],{"class":63},[34,75303,623],{"class":59},[34,75305,75307],{"class":36,"line":75306},287,[34,75308,75309],{"class":40},"          \u002F\u002F 3.4 重新渲染页面\n",[34,75311,75313,75316],{"class":36,"line":75312},288,[34,75314,75315],{"class":2427},"          render",[34,75317,2440],{"class":59},[34,75319,75321],{"class":36,"line":75320},289,[34,75322,75323],{"class":40},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[34,75325,75327,75330,75332,75334,75336,75338,75340,75342,75344],{"class":36,"line":75326},290,[34,75328,75329],{"class":59},"          localStorage.",[34,75331,72115],{"class":2427},[34,75333,617],{"class":59},[34,75335,75151],{"class":187},[34,75337,12899],{"class":59},[34,75339,72125],{"class":63},[34,75341,1164],{"class":59},[34,75343,72130],{"class":2427},[34,75345,75162],{"class":59},[34,75347,75349],{"class":36,"line":75348},291,[34,75350,2993],{"class":59},[34,75352,75354],{"class":36,"line":75353},292,[34,75355,52859],{"class":59},[34,75357,75359],{"class":36,"line":75358},293,[34,75360,2864],{"emptyLinePlaceholder":540},[34,75362,75364],{"class":36,"line":75363},294,[34,75365,33923],{"class":59},[34,75367,75369],{"class":36,"line":75368},295,[34,75370,2864],{"emptyLinePlaceholder":540},[34,75372,75374,75376,75378],{"class":36,"line":75373},296,[34,75375,52878],{"class":59},[34,75377,52274],{"class":51761},[34,75379,51768],{"class":59},[34,75381,75383,75385,75387],{"class":36,"line":75382},297,[34,75384,52246],{"class":59},[34,75386,52261],{"class":51761},[34,75388,51768],{"class":59},[34,75390,75392],{"class":36,"line":75391},298,[34,75393,2864],{"emptyLinePlaceholder":540},[34,75395,75397,75399,75401],{"class":36,"line":75396},299,[34,75398,52246],{"class":59},[34,75400,51096],{"class":51761},[34,75402,51768],{"class":59},[555,75404,75406],{"id":75405},"_36-正则表达式","3.6 正则表达式",[14,75408,75409],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75411,75412],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75414,75415],{},"正则表达式的作用：",[1611,75417,75418,75425,75431],{},[570,75419,75420,75421,75424],{},"表单验证（ ",[760,75422,75423],{},"匹配"," ）",[570,75426,75427,75428,75424],{},"过滤敏感词（ ",[760,75429,75430],{},"替换",[570,75432,75433,75434,75424],{},"字符串中提取我们想要的部分（ ",[760,75435,75436],{},"提取",[584,75438,75440],{"id":75439},"_361-语法","3.6.1 语法",[14,75442,75443],{},"正则表达式使用步骤：",[567,75445,75446,75449],{},[570,75447,75448],{},"定义规则",[570,75450,75451],{},"查找是否匹配",[14,75453,75454],{},"正则表达式里边不需要写引号",[14,75456,75457],{},[20,75458],{"alt":22,"src":75459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75461,75462],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75464,75465],{},"reg.test(str)",[14,75467,75468],{},[20,75469],{"alt":22,"src":75470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75472,75473],{},[20,75474],{"alt":22,"src":75475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[584,75477,75479],{"id":75478},"_362-元字符","3.6.2 元字符",[567,75481,75482,75485,75488,75491,75498],{},[570,75483,75484],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[570,75486,75487],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[570,75489,75490],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[570,75492,75493,75494],{},"正则验证工具：",[847,75495,75496],{"href":75496,"rel":75497},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24329],[570,75499,75500],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22462,75502,75504],{"id":75503},"_3621-边界符","3.6.2.1 边界符",[14,75506,75507],{},[20,75508],{"alt":22,"src":75509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75511,75512],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75514,75515],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75517,75518],{},"只匹配一次",[14,75520,75521],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22462,75523,75525],{"id":75524},"_3622-量词","3.6.2.2 量词",[14,75527,75528],{},[20,75529],{"alt":22,"src":75530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75532,75533],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22462,75535,75537],{"id":75536},"_3623-元字符","3.6.2.3 元字符",[14,75539,75540],{},[20,75541],{"alt":22,"src":75542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75544,75545],{},"匹配的是a或b或c []只选一个",[14,75547,75548],{},[20,75549],{"alt":22,"src":75550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75552,75553],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75555,75556],{},[20,75557],{"alt":22,"src":75558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75560,75561],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75563,75564],{},[20,75565],{"alt":22,"src":75566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[25,75568,75570],{"className":51094,"code":75569,"language":51096,"meta":22,"style":22},"\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",[31,75571,75572,75582,75596,75600,75608,75622,75642,75654,75662,75666,75674,75682,75687,75718,75745,75773,75777,75782,75810,75841,75846,75851,75882,75914,75946,75950,75955,75986,76016,76046,76050,76055,76086,76117,76147,76177,76181,76186,76219,76223,76228,76259,76290,76294,76299,76330,76360,76391,76395,76400,76432,76463,76494,76521,76552,76584,76617,76648,76679,76711,76742,76750,76758,76762],{"__ignoreMap":22},[34,75573,75574,75576,75578,75580],{"class":36,"line":37},[34,75575,51758],{"class":59},[34,75577,51762],{"class":51761},[34,75579,51765],{"class":2427},[34,75581,51768],{"class":59},[34,75583,75584,75586,75588,75590,75592,75594],{"class":36,"line":44},[34,75585,1515],{"class":59},[34,75587,51096],{"class":51761},[34,75589,51777],{"class":2427},[34,75591,447],{"class":59},[34,75593,51782],{"class":187},[34,75595,51768],{"class":59},[34,75597,75598],{"class":36,"line":50},[34,75599,2864],{"emptyLinePlaceholder":540},[34,75601,75602,75604,75606],{"class":36,"line":56},[34,75603,1515],{"class":59},[34,75605,51795],{"class":51761},[34,75607,51768],{"class":59},[34,75609,75610,75612,75614,75616,75618,75620],{"class":36,"line":107},[34,75611,52605],{"class":59},[34,75613,51805],{"class":51761},[34,75615,51808],{"class":2427},[34,75617,447],{"class":59},[34,75619,51813],{"class":187},[34,75621,51768],{"class":59},[34,75623,75624,75626,75628,75630,75632,75634,75636,75638,75640],{"class":36,"line":196},[34,75625,52605],{"class":59},[34,75627,51805],{"class":51761},[34,75629,15384],{"class":2427},[34,75631,447],{"class":59},[34,75633,51852],{"class":187},[34,75635,51832],{"class":2427},[34,75637,447],{"class":59},[34,75639,51859],{"class":187},[34,75641,51768],{"class":59},[34,75643,75644,75646,75648,75650,75652],{"class":36,"line":202},[34,75645,52605],{"class":59},[34,75647,51868],{"class":51761},[34,75649,51871],{"class":59},[34,75651,51868],{"class":51761},[34,75653,51768],{"class":59},[34,75655,75656,75658,75660],{"class":36,"line":207},[34,75657,52246],{"class":59},[34,75659,51795],{"class":51761},[34,75661,51768],{"class":59},[34,75663,75664],{"class":36,"line":222},[34,75665,2864],{"emptyLinePlaceholder":540},[34,75667,75668,75670,75672],{"class":36,"line":227},[34,75669,1515],{"class":59},[34,75671,52261],{"class":51761},[34,75673,51768],{"class":59},[34,75675,75676,75678,75680],{"class":36,"line":232},[34,75677,52605],{"class":59},[34,75679,52274],{"class":51761},[34,75681,51768],{"class":59},[34,75683,75684],{"class":36,"line":238},[34,75685,75686],{"class":40},"    \u002F\u002F 元字符中\n",[34,75688,75689,75691,75693,75695,75697,75700,75702,75704,75707,75709,75712,75715],{"class":36,"line":244},[34,75690,74214],{"class":59},[34,75692,58708],{"class":2427},[34,75694,617],{"class":59},[34,75696,1190],{"class":187},[34,75698,75699],{"class":48438},"哈",[34,75701,1190],{"class":187},[34,75703,1164],{"class":59},[34,75705,75706],{"class":2427},"test",[34,75708,617],{"class":59},[34,75710,75711],{"class":187},"'哈'",[34,75713,75714],{"class":59},"))  ",[34,75716,75717],{"class":40},"\u002F\u002Ftrue\n",[34,75719,75720,75722,75724,75726,75728,75730,75732,75734,75736,75738,75741,75743],{"class":36,"line":250},[34,75721,74214],{"class":59},[34,75723,58708],{"class":2427},[34,75725,617],{"class":59},[34,75727,1190],{"class":187},[34,75729,75699],{"class":48438},[34,75731,1190],{"class":187},[34,75733,1164],{"class":59},[34,75735,75706],{"class":2427},[34,75737,617],{"class":59},[34,75739,75740],{"class":187},"'哈哈'",[34,75742,75714],{"class":59},[34,75744,75717],{"class":40},[34,75746,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765,75768,75771],{"class":36,"line":256},[34,75748,74214],{"class":59},[34,75750,58708],{"class":2427},[34,75752,617],{"class":59},[34,75754,1190],{"class":187},[34,75756,75699],{"class":48438},[34,75758,1190],{"class":187},[34,75760,1164],{"class":59},[34,75762,75706],{"class":2427},[34,75764,617],{"class":59},[34,75766,75767],{"class":187},"'二哈'",[34,75769,75770],{"class":59},"))   ",[34,75772,75717],{"class":40},[34,75774,75775],{"class":36,"line":261},[34,75776,2864],{"emptyLinePlaceholder":540},[34,75778,75779],{"class":36,"line":267},[34,75780,75781],{"class":40},"    \u002F\u002F 1.边界符\n",[34,75783,75784,75786,75788,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808],{"class":36,"line":2138},[34,75785,74214],{"class":59},[34,75787,58708],{"class":2427},[34,75789,617],{"class":59},[34,75791,1190],{"class":187},[34,75793,1570],{"class":112},[34,75795,75699],{"class":48438},[34,75797,1190],{"class":187},[34,75799,1164],{"class":59},[34,75801,75706],{"class":2427},[34,75803,617],{"class":59},[34,75805,75711],{"class":187},[34,75807,75714],{"class":59},[34,75809,75717],{"class":40},[34,75811,75812,75814,75816,75818,75820,75822,75824,75826,75828,75830,75832,75834,75836,75838],{"class":36,"line":2143},[34,75813,74214],{"class":59},[34,75815,58708],{"class":2427},[34,75817,617],{"class":59},[34,75819,1190],{"class":187},[34,75821,1570],{"class":112},[34,75823,75699],{"class":48438},[34,75825,910],{"class":112},[34,75827,1190],{"class":187},[34,75829,1164],{"class":59},[34,75831,75706],{"class":2427},[34,75833,617],{"class":59},[34,75835,75740],{"class":187},[34,75837,75714],{"class":59},[34,75839,75840],{"class":40},"\u002F\u002Ffalse\n",[34,75842,75843],{"class":36,"line":2157},[34,75844,75845],{"class":40},"    \u002F\u002F 2.量词\n",[34,75847,75848],{"class":36,"line":2162},[34,75849,75850],{"class":40},"    \u002F\u002F 量词 * 类似于 >= 0\n",[34,75852,75853,75855,75857,75859,75861,75863,75865,75868,75870,75872,75874,75876,75878,75880],{"class":36,"line":2191},[34,75854,74214],{"class":59},[34,75856,58708],{"class":2427},[34,75858,617],{"class":59},[34,75860,1190],{"class":187},[34,75862,1570],{"class":112},[34,75864,75699],{"class":48438},[34,75866,75867],{"class":112},"*$",[34,75869,1190],{"class":187},[34,75871,1164],{"class":59},[34,75873,75706],{"class":2427},[34,75875,617],{"class":59},[34,75877,75740],{"class":187},[34,75879,75714],{"class":59},[34,75881,75717],{"class":40},[34,75883,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75909,75911],{"class":36,"line":2196},[34,75885,74214],{"class":59},[34,75887,58708],{"class":2427},[34,75889,617],{"class":59},[34,75891,1190],{"class":187},[34,75893,1570],{"class":112},[34,75895,75699],{"class":48438},[34,75897,75867],{"class":112},[34,75899,1190],{"class":187},[34,75901,1164],{"class":59},[34,75903,75706],{"class":2427},[34,75905,617],{"class":59},[34,75907,75908],{"class":187},"'二哈好傻'",[34,75910,75714],{"class":59},[34,75912,75913],{"class":40},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[34,75915,75916,75918,75920,75922,75924,75926,75928,75930,75932,75934,75936,75938,75941,75943],{"class":36,"line":2213},[34,75917,74214],{"class":59},[34,75919,58708],{"class":2427},[34,75921,617],{"class":59},[34,75923,1190],{"class":187},[34,75925,1570],{"class":112},[34,75927,75699],{"class":48438},[34,75929,75867],{"class":112},[34,75931,1190],{"class":187},[34,75933,1164],{"class":59},[34,75935,75706],{"class":2427},[34,75937,617],{"class":59},[34,75939,75940],{"class":187},"'哈好哈'",[34,75942,75770],{"class":59},[34,75944,75945],{"class":40},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[34,75947,75948],{"class":36,"line":2218},[34,75949,2864],{"emptyLinePlaceholder":540},[34,75951,75952],{"class":36,"line":2223},[34,75953,75954],{"class":40},"    \u002F\u002F +类似于>=1\n",[34,75956,75957,75959,75961,75963,75965,75967,75969,75972,75974,75976,75978,75980,75982,75984],{"class":36,"line":2228},[34,75958,74214],{"class":59},[34,75960,58708],{"class":2427},[34,75962,617],{"class":59},[34,75964,1190],{"class":187},[34,75966,1570],{"class":112},[34,75968,75699],{"class":48438},[34,75970,75971],{"class":112},"+$",[34,75973,1190],{"class":187},[34,75975,1164],{"class":59},[34,75977,75706],{"class":2427},[34,75979,617],{"class":59},[34,75981,75740],{"class":187},[34,75983,75714],{"class":59},[34,75985,75717],{"class":40},[34,75987,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012,76014],{"class":36,"line":2242},[34,75989,74214],{"class":59},[34,75991,58708],{"class":2427},[34,75993,617],{"class":59},[34,75995,1190],{"class":187},[34,75997,1570],{"class":112},[34,75999,75699],{"class":48438},[34,76001,75971],{"class":112},[34,76003,1190],{"class":187},[34,76005,1164],{"class":59},[34,76007,75706],{"class":2427},[34,76009,617],{"class":59},[34,76011,75908],{"class":187},[34,76013,75714],{"class":59},[34,76015,75913],{"class":40},[34,76017,76018,76020,76022,76024,76026,76028,76030,76032,76034,76036,76038,76040,76042,76044],{"class":36,"line":2247},[34,76019,74214],{"class":59},[34,76021,58708],{"class":2427},[34,76023,617],{"class":59},[34,76025,1190],{"class":187},[34,76027,1570],{"class":112},[34,76029,75699],{"class":48438},[34,76031,75971],{"class":112},[34,76033,1190],{"class":187},[34,76035,1164],{"class":59},[34,76037,75706],{"class":2427},[34,76039,617],{"class":59},[34,76041,75940],{"class":187},[34,76043,75770],{"class":59},[34,76045,75840],{"class":40},[34,76047,76048],{"class":36,"line":3041},[34,76049,2864],{"emptyLinePlaceholder":540},[34,76051,76052],{"class":36,"line":3055},[34,76053,76054],{"class":40},"    \u002F\u002F ?类似于0次或一次\n",[34,76056,76057,76059,76061,76063,76065,76067,76070,76072,76074,76076,76078,76080,76082,76084],{"class":36,"line":3063},[34,76058,74214],{"class":59},[34,76060,58708],{"class":2427},[34,76062,617],{"class":59},[34,76064,1190],{"class":187},[34,76066,1570],{"class":112},[34,76068,76069],{"class":48438},"哈？",[34,76071,910],{"class":112},[34,76073,1190],{"class":187},[34,76075,1164],{"class":59},[34,76077,75706],{"class":2427},[34,76079,617],{"class":59},[34,76081,74689],{"class":187},[34,76083,75770],{"class":59},[34,76085,75717],{"class":40},[34,76087,76088,76090,76092,76094,76096,76098,76100,76103,76105,76107,76109,76111,76113,76115],{"class":36,"line":3068},[34,76089,74214],{"class":59},[34,76091,58708],{"class":2427},[34,76093,617],{"class":59},[34,76095,1190],{"class":187},[34,76097,1570],{"class":112},[34,76099,75699],{"class":48438},[34,76101,76102],{"class":112},"?$",[34,76104,1190],{"class":187},[34,76106,1164],{"class":59},[34,76108,75706],{"class":2427},[34,76110,617],{"class":59},[34,76112,75740],{"class":187},[34,76114,75714],{"class":59},[34,76116,75840],{"class":40},[34,76118,76119,76121,76123,76125,76127,76129,76131,76133,76135,76137,76139,76141,76143,76145],{"class":36,"line":3074},[34,76120,74214],{"class":59},[34,76122,58708],{"class":2427},[34,76124,617],{"class":59},[34,76126,1190],{"class":187},[34,76128,1570],{"class":112},[34,76130,75699],{"class":48438},[34,76132,76102],{"class":112},[34,76134,1190],{"class":187},[34,76136,1164],{"class":59},[34,76138,75706],{"class":2427},[34,76140,617],{"class":59},[34,76142,75908],{"class":187},[34,76144,75714],{"class":59},[34,76146,75913],{"class":40},[34,76148,76149,76151,76153,76155,76157,76159,76161,76163,76165,76167,76169,76171,76173,76175],{"class":36,"line":3080},[34,76150,74214],{"class":59},[34,76152,58708],{"class":2427},[34,76154,617],{"class":59},[34,76156,1190],{"class":187},[34,76158,1570],{"class":112},[34,76160,75699],{"class":48438},[34,76162,76102],{"class":112},[34,76164,1190],{"class":187},[34,76166,1164],{"class":59},[34,76168,75706],{"class":2427},[34,76170,617],{"class":59},[34,76172,75940],{"class":187},[34,76174,75714],{"class":59},[34,76176,75840],{"class":40},[34,76178,76179],{"class":36,"line":3085},[34,76180,2864],{"emptyLinePlaceholder":540},[34,76182,76183],{"class":36,"line":8412},[34,76184,76185],{"class":40},"    \u002F\u002F {n}写几，就必须出现几次\n",[34,76187,76188,76190,76192,76194,76196,76198,76200,76203,76205,76207,76209,76211,76214,76217],{"class":36,"line":8436},[34,76189,74214],{"class":59},[34,76191,58708],{"class":2427},[34,76193,617],{"class":59},[34,76195,1190],{"class":187},[34,76197,1570],{"class":112},[34,76199,75699],{"class":48438},[34,76201,76202],{"class":112},"{4}$",[34,76204,1190],{"class":187},[34,76206,1164],{"class":59},[34,76208,75706],{"class":2427},[34,76210,617],{"class":59},[34,76212,76213],{"class":187},"'哈哈哈哈'",[34,76215,76216],{"class":59},")) ",[34,76218,75717],{"class":40},[34,76220,76221],{"class":36,"line":8441},[34,76222,2864],{"emptyLinePlaceholder":540},[34,76224,76225],{"class":36,"line":8447},[34,76226,76227],{"class":40},"    \u002F\u002F {n,}大于等于n次\n",[34,76229,76230,76232,76234,76236,76238,76240,76242,76245,76247,76249,76251,76253,76255,76257],{"class":36,"line":8474},[34,76231,74214],{"class":59},[34,76233,58708],{"class":2427},[34,76235,617],{"class":59},[34,76237,1190],{"class":187},[34,76239,1570],{"class":112},[34,76241,75699],{"class":48438},[34,76243,76244],{"class":112},"{4,}$",[34,76246,1190],{"class":187},[34,76248,1164],{"class":59},[34,76250,75706],{"class":2427},[34,76252,617],{"class":59},[34,76254,76213],{"class":187},[34,76256,76216],{"class":59},[34,76258,75717],{"class":40},[34,76260,76261,76263,76265,76267,76269,76271,76273,76275,76277,76279,76281,76283,76286,76288],{"class":36,"line":8479},[34,76262,74214],{"class":59},[34,76264,58708],{"class":2427},[34,76266,617],{"class":59},[34,76268,1190],{"class":187},[34,76270,1570],{"class":112},[34,76272,75699],{"class":48438},[34,76274,76244],{"class":112},[34,76276,1190],{"class":187},[34,76278,1164],{"class":59},[34,76280,75706],{"class":2427},[34,76282,617],{"class":59},[34,76284,76285],{"class":187},"'哈哈哈哈哈'",[34,76287,76216],{"class":59},[34,76289,75717],{"class":40},[34,76291,76292],{"class":36,"line":8485},[34,76293,2864],{"emptyLinePlaceholder":540},[34,76295,76296],{"class":36,"line":8497},[34,76297,76298],{"class":40},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[34,76300,76301,76303,76305,76307,76309,76311,76313,76316,76318,76320,76322,76324,76326,76328],{"class":36,"line":8509},[34,76302,74214],{"class":59},[34,76304,58708],{"class":2427},[34,76306,617],{"class":59},[34,76308,1190],{"class":187},[34,76310,1570],{"class":112},[34,76312,75699],{"class":48438},[34,76314,76315],{"class":112},"{4,6}$",[34,76317,1190],{"class":187},[34,76319,1164],{"class":59},[34,76321,75706],{"class":2427},[34,76323,617],{"class":59},[34,76325,76213],{"class":187},[34,76327,76216],{"class":59},[34,76329,75717],{"class":40},[34,76331,76332,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352,76354,76356,76358],{"class":36,"line":8521},[34,76333,74214],{"class":59},[34,76335,58708],{"class":2427},[34,76337,617],{"class":59},[34,76339,1190],{"class":187},[34,76341,1570],{"class":112},[34,76343,75699],{"class":48438},[34,76345,76315],{"class":112},[34,76347,1190],{"class":187},[34,76349,1164],{"class":59},[34,76351,75706],{"class":2427},[34,76353,617],{"class":59},[34,76355,76285],{"class":187},[34,76357,76216],{"class":59},[34,76359,75717],{"class":40},[34,76361,76362,76364,76366,76368,76370,76372,76374,76376,76378,76380,76382,76384,76387,76389],{"class":36,"line":10180},[34,76363,74214],{"class":59},[34,76365,58708],{"class":2427},[34,76367,617],{"class":59},[34,76369,1190],{"class":187},[34,76371,1570],{"class":112},[34,76373,75699],{"class":48438},[34,76375,76315],{"class":112},[34,76377,1190],{"class":187},[34,76379,1164],{"class":59},[34,76381,75706],{"class":2427},[34,76383,617],{"class":59},[34,76385,76386],{"class":187},"'哈哈哈哈哈哈哈'",[34,76388,76216],{"class":59},[34,76390,75840],{"class":40},[34,76392,76393],{"class":36,"line":10205},[34,76394,2864],{"emptyLinePlaceholder":540},[34,76396,76397],{"class":36,"line":10228},[34,76398,76399],{"class":40},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[34,76401,76402,76404,76406,76408,76410,76412,76415,76417,76419,76421,76423,76425,76428,76430],{"class":36,"line":10252},[34,76403,74214],{"class":59},[34,76405,58708],{"class":2427},[34,76407,617],{"class":59},[34,76409,1190],{"class":187},[34,76411,1570],{"class":112},[34,76413,76414],{"class":63},"[abc]",[34,76416,910],{"class":112},[34,76418,1190],{"class":187},[34,76420,1164],{"class":59},[34,76422,75706],{"class":2427},[34,76424,617],{"class":59},[34,76426,76427],{"class":187},"'a'",[34,76429,75714],{"class":59},[34,76431,75717],{"class":40},[34,76433,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76459,76461],{"class":36,"line":10257},[34,76435,74214],{"class":59},[34,76437,58708],{"class":2427},[34,76439,617],{"class":59},[34,76441,1190],{"class":187},[34,76443,1570],{"class":112},[34,76445,76414],{"class":63},[34,76447,910],{"class":112},[34,76449,1190],{"class":187},[34,76451,1164],{"class":59},[34,76453,75706],{"class":2427},[34,76455,617],{"class":59},[34,76457,76458],{"class":187},"'b'",[34,76460,75714],{"class":59},[34,76462,75717],{"class":40},[34,76464,76465,76467,76469,76471,76473,76475,76477,76479,76481,76483,76485,76487,76490,76492],{"class":36,"line":10262},[34,76466,74214],{"class":59},[34,76468,58708],{"class":2427},[34,76470,617],{"class":59},[34,76472,1190],{"class":187},[34,76474,1570],{"class":112},[34,76476,76414],{"class":63},[34,76478,910],{"class":112},[34,76480,1190],{"class":187},[34,76482,1164],{"class":59},[34,76484,75706],{"class":2427},[34,76486,617],{"class":59},[34,76488,76489],{"class":187},"'c'",[34,76491,75714],{"class":59},[34,76493,75717],{"class":40},[34,76495,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76517,76519],{"class":36,"line":10267},[34,76497,74214],{"class":59},[34,76499,58708],{"class":2427},[34,76501,617],{"class":59},[34,76503,1190],{"class":187},[34,76505,76414],{"class":63},[34,76507,1190],{"class":187},[34,76509,1164],{"class":59},[34,76511,75706],{"class":2427},[34,76513,617],{"class":59},[34,76515,76516],{"class":187},"'ab'",[34,76518,75714],{"class":59},[34,76520,75717],{"class":40},[34,76522,76523,76525,76527,76529,76531,76533,76535,76537,76539,76541,76543,76545,76547,76549],{"class":36,"line":10276},[34,76524,74214],{"class":59},[34,76526,58708],{"class":2427},[34,76528,617],{"class":59},[34,76530,1190],{"class":187},[34,76532,1570],{"class":112},[34,76534,76414],{"class":63},[34,76536,910],{"class":112},[34,76538,1190],{"class":187},[34,76540,1164],{"class":59},[34,76542,75706],{"class":2427},[34,76544,617],{"class":59},[34,76546,76516],{"class":187},[34,76548,75714],{"class":59},[34,76550,76551],{"class":40},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[34,76553,76554,76556,76558,76560,76562,76564,76566,76569,76571,76573,76575,76577,76579,76581],{"class":36,"line":10281},[34,76555,74214],{"class":59},[34,76557,58708],{"class":2427},[34,76559,617],{"class":59},[34,76561,1190],{"class":187},[34,76563,1570],{"class":112},[34,76565,76414],{"class":63},[34,76567,76568],{"class":112},"{2}$",[34,76570,1190],{"class":187},[34,76572,1164],{"class":59},[34,76574,75706],{"class":2427},[34,76576,617],{"class":59},[34,76578,76516],{"class":187},[34,76580,75714],{"class":59},[34,76582,76583],{"class":40},"\u002F\u002Ftrue   可以选两个\n",[34,76585,76586,76588,76590,76592,76594,76596,76599,76601,76603,76605,76607,76609,76612,76614],{"class":36,"line":10287},[34,76587,74214],{"class":59},[34,76589,58708],{"class":2427},[34,76591,617],{"class":59},[34,76593,1190],{"class":187},[34,76595,1570],{"class":112},[34,76597,76598],{"class":63},"[a-z]",[34,76600,910],{"class":112},[34,76602,1190],{"class":187},[34,76604,1164],{"class":59},[34,76606,75706],{"class":2427},[34,76608,617],{"class":59},[34,76610,76611],{"class":187},"'p'",[34,76613,75770],{"class":59},[34,76615,76616],{"class":40},"\u002F\u002Ftrue   依然只能选一个\n",[34,76618,76619,76621,76623,76625,76627,76629,76632,76634,76636,76638,76640,76642,76644,76646],{"class":36,"line":10308},[34,76620,74214],{"class":59},[34,76622,58708],{"class":2427},[34,76624,617],{"class":59},[34,76626,1190],{"class":187},[34,76628,1570],{"class":112},[34,76630,76631],{"class":63},"[A-Z]",[34,76633,910],{"class":112},[34,76635,1190],{"class":187},[34,76637,1164],{"class":59},[34,76639,75706],{"class":2427},[34,76641,617],{"class":59},[34,76643,76611],{"class":187},[34,76645,75770],{"class":59},[34,76647,75840],{"class":40},[34,76649,76650,76652,76654,76656,76658,76660,76662,76664,76666,76668,76670,76672,76675,76677],{"class":36,"line":10314},[34,76651,74214],{"class":59},[34,76653,58708],{"class":2427},[34,76655,617],{"class":59},[34,76657,1190],{"class":187},[34,76659,1570],{"class":112},[34,76661,76631],{"class":63},[34,76663,910],{"class":112},[34,76665,1190],{"class":187},[34,76667,1164],{"class":59},[34,76669,75706],{"class":2427},[34,76671,617],{"class":59},[34,76673,76674],{"class":187},"'P'",[34,76676,75770],{"class":59},[34,76678,75717],{"class":40},[34,76680,76681,76683,76685,76687,76689,76691,76694,76696,76698,76700,76702,76704,76707,76709],{"class":36,"line":10328},[34,76682,74214],{"class":59},[34,76684,58708],{"class":2427},[34,76686,617],{"class":59},[34,76688,1190],{"class":187},[34,76690,1570],{"class":112},[34,76692,76693],{"class":63},"[0-9]",[34,76695,910],{"class":112},[34,76697,1190],{"class":187},[34,76699,1164],{"class":59},[34,76701,75706],{"class":2427},[34,76703,617],{"class":59},[34,76705,76706],{"class":187},"'0'",[34,76708,75770],{"class":59},[34,76710,75717],{"class":40},[34,76712,76713,76715,76717,76719,76721,76723,76726,76728,76730,76732,76734,76736,76738,76740],{"class":36,"line":10334},[34,76714,74214],{"class":59},[34,76716,58708],{"class":2427},[34,76718,617],{"class":59},[34,76720,1190],{"class":187},[34,76722,1570],{"class":112},[34,76724,76725],{"class":63},"[a-zA-Z0-9]",[34,76727,910],{"class":112},[34,76729,1190],{"class":187},[34,76731,1164],{"class":59},[34,76733,75706],{"class":2427},[34,76735,617],{"class":59},[34,76737,76611],{"class":187},[34,76739,75714],{"class":59},[34,76741,75717],{"class":40},[34,76743,76744,76746,76748],{"class":36,"line":10361},[34,76745,52878],{"class":59},[34,76747,52274],{"class":51761},[34,76749,51768],{"class":59},[34,76751,76752,76754,76756],{"class":36,"line":10370},[34,76753,52246],{"class":59},[34,76755,52261],{"class":51761},[34,76757,51768],{"class":59},[34,76759,76760],{"class":36,"line":10376},[34,76761,2864],{"emptyLinePlaceholder":540},[34,76763,76764,76766,76768],{"class":36,"line":10384},[34,76765,52246],{"class":59},[34,76767,51096],{"class":51761},[34,76769,51768],{"class":59},[22462,76771,76773],{"id":76772},"_3624-修饰符","3.6.2.4 修饰符",[14,76775,76776],{},[20,76777],{"alt":22,"src":76778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76780,76781],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76783,76784],{},[20,76785],{"alt":22,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[25,76788,76790],{"className":51094,"code":76789,"language":51096,"meta":22,"style":22},"\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",[31,76791,76792,76802,76816,76824,76838,76858,76870,76878,76886,76894,76926,76957,76962,76994,77005,77038,77047,77055,77063],{"__ignoreMap":22},[34,76793,76794,76796,76798,76800],{"class":36,"line":37},[34,76795,51758],{"class":59},[34,76797,51762],{"class":51761},[34,76799,51765],{"class":2427},[34,76801,51768],{"class":59},[34,76803,76804,76806,76808,76810,76812,76814],{"class":36,"line":44},[34,76805,1515],{"class":59},[34,76807,51096],{"class":51761},[34,76809,51777],{"class":2427},[34,76811,447],{"class":59},[34,76813,51782],{"class":187},[34,76815,51768],{"class":59},[34,76817,76818,76820,76822],{"class":36,"line":50},[34,76819,1515],{"class":59},[34,76821,51795],{"class":51761},[34,76823,51768],{"class":59},[34,76825,76826,76828,76830,76832,76834,76836],{"class":36,"line":56},[34,76827,52605],{"class":59},[34,76829,51805],{"class":51761},[34,76831,51808],{"class":2427},[34,76833,447],{"class":59},[34,76835,51813],{"class":187},[34,76837,51768],{"class":59},[34,76839,76840,76842,76844,76846,76848,76850,76852,76854,76856],{"class":36,"line":107},[34,76841,52605],{"class":59},[34,76843,51805],{"class":51761},[34,76845,15384],{"class":2427},[34,76847,447],{"class":59},[34,76849,51852],{"class":187},[34,76851,51832],{"class":2427},[34,76853,447],{"class":59},[34,76855,51859],{"class":187},[34,76857,51768],{"class":59},[34,76859,76860,76862,76864,76866,76868],{"class":36,"line":196},[34,76861,52605],{"class":59},[34,76863,51868],{"class":51761},[34,76865,51871],{"class":59},[34,76867,51868],{"class":51761},[34,76869,51768],{"class":59},[34,76871,76872,76874,76876],{"class":36,"line":202},[34,76873,52246],{"class":59},[34,76875,51795],{"class":51761},[34,76877,51768],{"class":59},[34,76879,76880,76882,76884],{"class":36,"line":207},[34,76881,1515],{"class":59},[34,76883,52261],{"class":51761},[34,76885,51768],{"class":59},[34,76887,76888,76890,76892],{"class":36,"line":222},[34,76889,52605],{"class":59},[34,76891,52274],{"class":51761},[34,76893,51768],{"class":59},[34,76895,76896,76898,76900,76902,76904,76906,76909,76911,76913,76915,76917,76919,76922,76924],{"class":36,"line":227},[34,76897,74214],{"class":59},[34,76899,58708],{"class":2427},[34,76901,617],{"class":59},[34,76903,1190],{"class":187},[34,76905,1570],{"class":112},[34,76907,76908],{"class":48438},"java",[34,76910,910],{"class":112},[34,76912,1190],{"class":187},[34,76914,1164],{"class":59},[34,76916,75706],{"class":2427},[34,76918,617],{"class":59},[34,76920,76921],{"class":187},"'java'",[34,76923,76216],{"class":59},[34,76925,75717],{"class":40},[34,76927,76928,76930,76932,76934,76936,76938,76940,76942,76944,76946,76948,76950,76953,76955],{"class":36,"line":232},[34,76929,74214],{"class":59},[34,76931,58708],{"class":2427},[34,76933,617],{"class":59},[34,76935,1190],{"class":187},[34,76937,1570],{"class":112},[34,76939,76908],{"class":48438},[34,76941,910],{"class":112},[34,76943,1190],{"class":187},[34,76945,1164],{"class":59},[34,76947,75706],{"class":2427},[34,76949,617],{"class":59},[34,76951,76952],{"class":187},"'Java'",[34,76954,76216],{"class":59},[34,76956,75840],{"class":40},[34,76958,76959],{"class":36,"line":238},[34,76960,76961],{"class":40},"    \u002F\u002F 不区分大小写、\n",[34,76963,76964,76966,76968,76970,76972,76974,76976,76978,76980,76982,76984,76986,76988,76990,76992],{"class":36,"line":244},[34,76965,74214],{"class":59},[34,76967,58708],{"class":2427},[34,76969,617],{"class":59},[34,76971,1190],{"class":187},[34,76973,1570],{"class":112},[34,76975,76908],{"class":48438},[34,76977,910],{"class":112},[34,76979,1190],{"class":187},[34,76981,1048],{"class":112},[34,76983,1164],{"class":59},[34,76985,75706],{"class":2427},[34,76987,617],{"class":59},[34,76989,76952],{"class":187},[34,76991,76216],{"class":59},[34,76993,75717],{"class":40},[34,76995,76996,76998,77000,77002],{"class":36,"line":250},[34,76997,11685],{"class":112},[34,76999,74380],{"class":63},[34,77001,14028],{"class":112},[34,77003,77004],{"class":187}," 'java是一门编程语言，学完java工资很高'\n",[34,77006,77007,77009,77012,77014,77017,77020,77022,77024,77026,77028,77031,77033,77036],{"class":36,"line":256},[34,77008,11685],{"class":112},[34,77010,77011],{"class":63}," result",[34,77013,14028],{"class":112},[34,77015,77016],{"class":59}," str.",[34,77018,77019],{"class":2427},"replace",[34,77021,617],{"class":59},[34,77023,1190],{"class":187},[34,77025,76908],{"class":48438},[34,77027,1190],{"class":187},[34,77029,77030],{"class":112},"ig",[34,77032,12899],{"class":59},[34,77034,77035],{"class":187},"'前端'",[34,77037,623],{"class":59},[34,77039,77040,77042,77044],{"class":36,"line":261},[34,77041,74214],{"class":59},[34,77043,58708],{"class":2427},[34,77045,77046],{"class":59},"(result)\n",[34,77048,77049,77051,77053],{"class":36,"line":267},[34,77050,52878],{"class":59},[34,77052,52274],{"class":51761},[34,77054,51768],{"class":59},[34,77056,77057,77059,77061],{"class":36,"line":2138},[34,77058,52246],{"class":59},[34,77060,52261],{"class":51761},[34,77062,51768],{"class":59},[34,77064,77065,77067,77069],{"class":36,"line":2143},[34,77066,52246],{"class":59},[34,77068,51096],{"class":51761},[34,77070,51768],{"class":59},[532,77072,77073],{},"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":22,"searchDepth":44,"depth":44,"links":77075},[77076,77086,77098,77115,77122,77130],{"id":53821,"depth":44,"text":53822,"children":77077},[77078,77079,77080,77081,77082,77083,77084,77085],{"id":53825,"depth":50,"text":53826},{"id":53858,"depth":50,"text":53859},{"id":53897,"depth":50,"text":53898},{"id":54055,"depth":50,"text":54056},{"id":54103,"depth":50,"text":54104},{"id":54240,"depth":50,"text":54241},{"id":54562,"depth":50,"text":54563},{"id":57550,"depth":50,"text":57551},{"id":57578,"depth":44,"text":57579,"children":77087},[77088,77089,77090,77091,77092,77093,77094,77095,77096,77097],{"id":57582,"depth":50,"text":57583},{"id":57605,"depth":50,"text":57606},{"id":58520,"depth":50,"text":58521},{"id":59210,"depth":50,"text":59211},{"id":59492,"depth":50,"text":59493},{"id":63653,"depth":50,"text":63654},{"id":63823,"depth":50,"text":63824},{"id":63951,"depth":50,"text":63952},{"id":63976,"depth":50,"text":63977},{"id":65365,"depth":50,"text":65366},{"id":66518,"depth":44,"text":66519,"children":77099},[77100,77101,77102,77103,77104,77105,77106,77107,77108,77109,77110,77111,77112,77113,77114],{"id":66522,"depth":50,"text":66523},{"id":67176,"depth":50,"text":67177},{"id":68871,"depth":50,"text":68872},{"id":68912,"depth":50,"text":68913},{"id":68954,"depth":50,"text":68955},{"id":68968,"depth":50,"text":68969},{"id":69017,"depth":50,"text":69018},{"id":69029,"depth":50,"text":69030},{"id":69044,"depth":50,"text":69045},{"id":69080,"depth":50,"text":69081},{"id":69161,"depth":50,"text":69162},{"id":69289,"depth":50,"text":69290},{"id":69301,"depth":50,"text":69302},{"id":69320,"depth":50,"text":69321},{"id":71431,"depth":50,"text":71432},{"id":71450,"depth":44,"text":71451,"children":77116},[77117,77118,77119,77120,77121],{"id":71471,"depth":50,"text":71472},{"id":71491,"depth":50,"text":71492},{"id":71540,"depth":50,"text":71541},{"id":71665,"depth":50,"text":71666},{"id":71846,"depth":50,"text":71847},{"id":71864,"depth":44,"text":71865,"children":77123},[77124,77125,77126,77127,77128,77129],{"id":71879,"depth":50,"text":71880},{"id":71938,"depth":50,"text":71939},{"id":71962,"depth":50,"text":71963},{"id":72282,"depth":50,"text":72283},{"id":72314,"depth":50,"text":72315},{"id":72337,"depth":50,"text":72338},{"id":75405,"depth":44,"text":75406,"children":77131},[77132,77133],{"id":75439,"depth":50,"text":75440},{"id":75478,"depth":50,"text":75479},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53793,"description":537},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77140,"title":77141,"body":77142,"description":537,"extension":538,"meta":93279,"navigation":540,"path":93280,"seo":93281,"stem":93282,"__hash__":93283},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77143,"toc":93215},[77144,77147,77150,77154,77158,77163,77168,77179,77183,77188,77191,77195,77198,77203,77207,77211,77214,77219,77222,77226,77229,77237,77240,77244,77249,77254,77257,77261,77266,77271,77274,77278,77283,77286,77291,77294,77299,77302,77307,77312,77315,77318,77322,77327,77332,77335,77339,77343,77346,77349,77352,77356,77360,77365,77370,77373,77377,77382,77387,77390,77393,77396,77399,77402,77405,77408,77411,77414,77419,77423,77428,77433,77436,77439,77442,77445,77448,77451,77454,77457,77461,77465,77468,77471,77474,77479,77481,77484,77487,77490,77493,77496,77499,77502,77505,77508,77511,77514,77517,77520,77525,77530,77535,77538,77542,77545,77550,77554,77556,77567,77572,77673,77676,77679,77682,77685,77688,77691,77694,77697,77699,77702,77705,77708,77711,77714,77716,77719,77722,77725,77728,77731,77734,77736,77739,77741,77743,77746,77750,77754,77757,77760,77763,77766,77769,77772,77775,77778,77781,77786,77906,77909,77912,77917,77920,77923,77926,77929,77934,77937,77940,77943,77946,77951,77954,78054,78119,78193,78197,78200,78203,78207,78210,78224,78253,78256,78259,78262,78265,78268,78271,78274,78276,78279,78282,78285,78288,78292,78297,78301,78306,78381,78384,78567,78570,78573,78576,78579,78582,78584,78587,78590,78593,78596,78599,78602,78604,78608,78611,78616,78619,78622,78625,78628,78630,78635,78638,78641,78644,78647,78649,78654,78657,78660,78662,78664,78667,78671,78674,78677,78682,78685,78688,78691,78741,78746,78750,78755,78758,78827,78830,78839,78843,78848,78851,78854,78862,78865,78882,80684,80688,80692,80697,80700,80704,80710,80716,80868,80873,80878,80881,80884,80887,80890,80893,80896,80899,80902,80905,80908,80911,80914,80919,80923,80926,80937,80941,80946,80949,80952,80955,80958,80961,80963,80966,80969,80972,80975,80977,80994,80997,81001,81004,81009,81014,81017,81020,81024,81027,81030,81039,81042,81046,81049,81054,81059,81126,81130,81133,81136,81141,81146,81232,81237,81241,81244,81247,81262,81265,81270,81274,81279,81388,81391,81402,81552,81556,81561,81670,81674,81679,81684,81689,81692,81699,81719,81755,81919,81924,81927,81932,81939,81942,81945,81948,82007,82063,82119,82123,82128,82443,82446,82450,82453,82458,82567,82572,82576,82581,82585,82656,82660,82662,82665,82668,82706,82982,82986,83003,83069,83103,83107,83110,83115,83144,83151,83160,83165,83180,83185,83194,83197,83334,83338,83400,83404,83409,83654,83658,83663,83666,83669,83672,83675,83679,83684,85265,85269,85273,85279,85282,85287,85291,85294,85299,85302,85313,85317,85322,85326,85331,85336,85339,85344,85348,85352,85355,85360,85365,85368,85371,85374,85496,85501,85603,85606,85609,85613,85618,85790,85795,85799,85802,85807,85873,85878,85881,86012,86015,86020,86023,86026,86117,86122,86125,86128,86131,86134,86139,86144,86147,86152,86157,86162,86166,86169,86172,86177,86182,86187,86192,86246,86249,86252,86257,86260,86263,86268,86273,86278,86282,86287,86301,86306,86309,86314,86318,86323,86328,86333,86338,86343,86348,86353,86358,86361,86365,86370,86373,86376,86379,86384,86389,86392,86395,86399,86402,86405,86410,86415,86420,86425,86428,86433,86438,86499,86504,86507,86512,87753,87758,87762,87766,87771,87774,87779,87784,87787,87792,87794,87799,87803,87806,87809,87820,87824,87829,87834,87889,87894,87899,87904,88115,88120,88124,88129,88132,88134,88137,88140,88587,88592,88599,88605,88608,88611,88875,88880,88884,89149,89154,89158,89163,89168,89173,89178,89509,89512,89517,89522,89525,89529,89533,89538,89543,89548,89553,89558,89563,89567,89570,89575,89580,89583,89657,89662,89667,89672,89674,89677,90047,90052,90057,90062,90065,90068,90170,90175,90180,90283,90287,90292,90296,90300,90305,90310,90313,90318,90321,90324,90717,90722,90725,90728,90731,90734,91254,91258,91263,91268,91273,91276,91281,91284,91287,91669,91674,91676,91678,91681,91684,92196,92200,92261,92264,92267,92270,92274,92277,92282,92287,93212],[10,77145,77141],{"id":77146},"_4js进阶",[14,77148,77149],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[555,77151,77153],{"id":77152},"_41-作用域","4.1 作用域",[584,77155,77157],{"id":77156},"_411-局部作用域","4.1.1 局部作用域",[14,77159,77160],{},[20,77161],{"alt":22,"src":77162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77164,77165],{},[20,77166],{"alt":22,"src":77167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1611,77169,77170,77173,77176],{},[570,77171,77172],{},"函数作用域在函数内部",[570,77174,77175],{},"块级作用域在{}",[570,77177,77178],{},"对象的那个{}不是作用域，不是块作用域",[584,77180,77182],{"id":77181},"_412-全局作用域","4.1.2 全局作用域",[14,77184,77185],{},[20,77186],{"alt":22,"src":77187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77189,77190],{},"window.a=10不要这样写",[584,77192,77194],{"id":77193},"_413-作用域链","4.1.3 作用域链",[14,77196,77197],{},"变量查找机制",[14,77199,77200],{},[20,77201],{"alt":22,"src":77202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[555,77204,77206],{"id":77205},"_42-垃圾回收机制","4.2 垃圾回收机制",[584,77208,77210],{"id":77209},"_421-大体介绍","4.2.1 大体介绍",[14,77212,77213],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77215,77216],{},[20,77217],{"alt":22,"src":77218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77220,77221],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[584,77223,77225],{"id":77224},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77227,77228],{},"堆栈空间分配区别：",[567,77230,77231,77234],{},[570,77232,77233],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[570,77235,77236],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77238,77239],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22462,77241,77243],{"id":77242},"_4221-引用计数","4.2.2.1 引用计数",[14,77245,77246],{},[20,77247],{"alt":22,"src":77248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77250,77251],{},[20,77252],{"alt":22,"src":77253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77255,77256],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22462,77258,77260],{"id":77259},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77262,77263],{},[20,77264],{"alt":22,"src":77265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77267,77268],{},[20,77269],{"alt":22,"src":77270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77272,77273],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[555,77275,77277],{"id":77276},"_43-闭包","4.3 闭包",[14,77279,77280],{},[20,77281],{"alt":22,"src":77282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77284,77285],{},"闭包：内层函数+外层函数的变量",[14,77287,77288],{},[20,77289],{"alt":22,"src":77290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77292,77293],{},"closure就是闭包",[14,77295,77296],{},[20,77297],{"alt":22,"src":77298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77300,77301],{},"内层函数必须包含外层函数的变量才是闭包",[14,77303,77304],{},[20,77305],{"alt":22,"src":77306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77308,77309],{},[20,77310],{"alt":22,"src":77311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77313,77314],{},"闭包可能会引起内存泄漏",[14,77316,77317],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[555,77319,77321],{"id":77320},"_44-变量提升","4.4 变量提升",[14,77323,77324],{},[20,77325],{"alt":22,"src":77326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77328,77329],{},[20,77330],{"alt":22,"src":77331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77333,77334],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[555,77336,77338],{"id":77337},"_45-函数进阶","4.5 函数进阶",[584,77340,77342],{"id":77341},"_451-函数提升","4.5.1 函数提升",[14,77344,77345],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77347,77348],{},"只提升函数声明，不提升函数调用",[52274,77350,77351],{},"\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",[584,77353,77355],{"id":77354},"_452-函数参数","4.5.2 函数参数",[22462,77357,77359],{"id":77358},"_4521-动态参数","4.5.2.1 动态参数",[14,77361,77362],{},[20,77363],{"alt":22,"src":77364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77366,77367],{},[20,77368],{"alt":22,"src":77369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77371,77372],{},"箭头函数里边没有arguments",[22462,77374,77376],{"id":77375},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77378,77379],{},[20,77380],{"alt":22,"src":77381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77383,77384],{},[20,77385],{"alt":22,"src":77386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77388,77389],{},"剩余参数使用的时候不需要写...",[14,77391,77392],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77394,77395],{},"  function getSum(a,b,...arr) {",[14,77397,77398],{},"  console.log(11)",[14,77400,77401],{},"  }",[14,77403,77404],{},"  getSum(1,2,3,4)",[14,77406,77407],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77409,77410],{},"  getSum(1,2)",[14,77412,77413],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77415,77416],{},[20,77417],{"alt":22,"src":77418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22462,77420,77422],{"id":77421},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77424,77425],{},[20,77426],{"alt":22,"src":77427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77429,77430],{},[20,77431],{"alt":22,"src":77432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77434,77435],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77437,77438],{},"展开运算符可以用于数组之间的合并：",[14,77440,77441],{},"const arr1 = [1, 2, 3]",[14,77443,77444],{},"const arr2 = [3, 4, 5]",[14,77446,77447],{},"const arr = [...arr1, ...arr2]",[14,77449,77450],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77452,77453],{},"剩余参数：函数参数使用，得到真数组",[14,77455,77456],{},"展开运算符：数组中使用，数组展开",[584,77458,77460],{"id":77459},"_453-箭头函数","4.5.3 箭头函数",[22462,77462,77464],{"id":77463},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77466,77467],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77469,77470],{},"它不是万能的！！！",[14,77472,77473],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77475,77476],{},[20,77477],{"alt":22,"src":77478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77480,646],{},[14,77482,77483],{},"① 只有一个形参的时候，可以省略小括号：",[14,77485,77486],{},"const fn=x=>{console.log(x)}",[14,77488,77489],{},"② 只有一行代码时可以省略大括号：",[14,77491,77492],{},"const fn=x=>console.log(11)",[14,77494,77495],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77497,77498],{},"const fn=x=>x+x",[14,77500,77501],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77503,77504],{},"⑤ 阻止表单默认提交：",[14,77506,77507],{},"const form = document.querySelector('form')",[14,77509,77510],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77512,77513],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77515,77516],{},"const fn=uname=>({uname:uname})",[14,77518,77519],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77521,77522],{},[20,77523],{"alt":22,"src":77524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77526,77527],{},[20,77528],{"alt":22,"src":77529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77531,77532],{},[20,77533],{"alt":22,"src":77534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77536,77537],{},"一定不要忘记用()，有()就理解为自带return",[22462,77539,77541],{"id":77540},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77543,77544],{},"箭头函数是没有动态参数的arguments",[14,77546,77547],{},[20,77548],{"alt":22,"src":77549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22462,77551,77553],{"id":77552},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77555,11796],{},[567,77557,77558,77561,77564],{},[570,77559,77560],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[570,77562,77563],{},"事件回调函数使用箭头函数时，this 为全局的 window",[570,77565,77566],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77568,77569],{},[20,77570],{"alt":22,"src":77571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[25,77573,77575],{"className":53528,"code":77574,"language":53530,"meta":22,"style":22},"  \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",[31,77576,77577,77585,77590,77595,77600,77605,77610,77614,77619,77623,77627,77632,77637,77642,77646,77650,77655,77660,77665],{"__ignoreMap":22},[34,77578,77579,77581,77583],{"class":36,"line":37},[34,77580,52605],{"class":59},[34,77582,52274],{"class":51761},[34,77584,51768],{"class":59},[34,77586,77587],{"class":36,"line":44},[34,77588,77589],{"class":59},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[34,77591,77592],{"class":36,"line":50},[34,77593,77594],{"class":59},"    console.log(this) \u002F\u002F指向window\n",[34,77596,77597],{"class":36,"line":56},[34,77598,77599],{"class":59},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[34,77601,77602],{"class":36,"line":107},[34,77603,77604],{"class":59},"    function fn() {\n",[34,77606,77607],{"class":36,"line":196},[34,77608,77609],{"class":59},"      console.log(this)  \u002F\u002F指向window\n",[34,77611,77612],{"class":36,"line":202},[34,77613,2651],{"class":59},[34,77615,77616],{"class":36,"line":207},[34,77617,77618],{"class":59},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[34,77620,77621],{"class":36,"line":222},[34,77622,2864],{"emptyLinePlaceholder":540},[34,77624,77625],{"class":36,"line":227},[34,77626,71984],{"class":59},[34,77628,77629],{"class":36,"line":232},[34,77630,77631],{"class":59},"      name: 'andy',\n",[34,77633,77634],{"class":36,"line":238},[34,77635,77636],{"class":59},"      sayHai: function () {\n",[34,77638,77639],{"class":36,"line":244},[34,77640,77641],{"class":59},"        console.log(this)\n",[34,77643,77644],{"class":36,"line":250},[34,77645,52859],{"class":59},[34,77647,77648],{"class":36,"line":256},[34,77649,2651],{"class":59},[34,77651,77652],{"class":36,"line":261},[34,77653,77654],{"class":59},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[34,77656,77657],{"class":36,"line":267},[34,77658,77659],{"class":59},"    \u002F\u002F 2.箭头函数的this\n",[34,77661,77662],{"class":36,"line":2138},[34,77663,77664],{"class":59},"    const fn = () => console.log(this)\n",[34,77666,77667,77669,77671],{"class":36,"line":2143},[34,77668,52878],{"class":59},[34,77670,52274],{"class":51761},[34,77672,51768],{"class":59},[14,77674,77675],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77677,77678],{},"const fn = () => console.log(this)",[14,77680,77681],{},"fn() \u002F\u002F指向window",[14,77683,77684],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77686,77687],{},"①",[14,77689,77690],{},"const obj = {",[14,77692,77693],{},"uname: 'pink老师',",[14,77695,77696],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77698,1550],{},[14,77700,77701],{},"调用对象里边的函数",[14,77703,77704],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77706,77707],{},"obj.sayHai()",[14,77709,77710],{},"②",[14,77712,77713],{},"const obj1 = {",[14,77715,77693],{},[14,77717,77718],{},"sayHai: function () {",[14,77720,77721],{},"let i = 10",[14,77723,77724],{},"const count = () => {",[14,77726,77727],{},"console.log(this)",[14,77729,77730],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77732,77733],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77735,1550],{},[14,77737,77738],{},"count()",[14,77740,1550],{},[14,77742,1550],{},[14,77744,77745],{},"obj1.sayHai()",[555,77747,77749],{"id":77748},"_46-解构赋值","4.6 解构赋值",[584,77751,77753],{"id":77752},"_461-数组解构","4.6.1 数组解构",[14,77755,77756],{},"以前要是使用数组中的值的话：",[14,77758,77759],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77761,77762],{},"const arr=[100,60,80]",[14,77764,77765],{},"const max=arr[0]",[14,77767,77768],{},"const min=arr[1]",[14,77770,77771],{},"const avg=arr[2]",[14,77773,77774],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77776,77777],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77779,77780],{},"这个写法就类似于上边的那种用很多const的方法",[14,77782,77783],{},[20,77784],{"alt":22,"src":77785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[25,77787,77789],{"className":51094,"code":77788,"language":51096,"meta":22,"style":22},"①变量之间交换值:\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",[31,77790,77791,77796,77801,77806,77811,77816,77820,77824,77829,77833,77838,77843,77847,77852,77857,77868,77878,77883,77888,77893,77897,77901],{"__ignoreMap":22},[34,77792,77793],{"class":36,"line":37},[34,77794,77795],{"class":59},"①变量之间交换值:\n",[34,77797,77798],{"class":36,"line":44},[34,77799,77800],{"class":59},"let a=1\n",[34,77802,77803],{"class":36,"line":50},[34,77804,77805],{"class":59},"let b=2;\n",[34,77807,77808],{"class":36,"line":56},[34,77809,77810],{"class":59},"必须加这行代码，不然就会报错\n",[34,77812,77813],{"class":36,"line":107},[34,77814,77815],{"class":59},"[b,a]=[a,b]\n",[34,77817,77818],{"class":36,"line":196},[34,77819,2864],{"emptyLinePlaceholder":540},[34,77821,77822],{"class":36,"line":202},[34,77823,2864],{"emptyLinePlaceholder":540},[34,77825,77826],{"class":36,"line":207},[34,77827,77828],{"class":59},"可以写成下面的方式：\n",[34,77830,77831],{"class":36,"line":222},[34,77832,77800],{"class":59},[34,77834,77835],{"class":36,"line":227},[34,77836,77837],{"class":59},"let b=2\n",[34,77839,77840],{"class":36,"line":232},[34,77841,77842],{"class":59},";[b,a]=[a,b]\n",[34,77844,77845],{"class":36,"line":238},[34,77846,2864],{"emptyLinePlaceholder":540},[34,77848,77849],{"class":36,"line":244},[34,77850,77851],{"class":59},"②排序\n",[34,77853,77854],{"class":36,"line":250},[34,77855,77856],{"class":59},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[34,77858,77859,77862,77865],{"class":36,"line":256},[34,77860,77861],{"class":59},"for (let i = 0; i ",[34,77863,1515],{"class":77864},"s7hpK",[34,77866,77867],{"class":59}," arr1.length; i++) {\n",[34,77869,77870,77873,77875],{"class":36,"line":261},[34,77871,77872],{"class":59},"   for (let j = 0; j ",[34,77874,1515],{"class":77864},[34,77876,77877],{"class":59}," arr1.length - 1; j++) {\n",[34,77879,77880],{"class":36,"line":267},[34,77881,77882],{"class":59},"      if (arr1[j] > arr1[j + 1]) {\n",[34,77884,77885],{"class":36,"line":2138},[34,77886,77887],{"class":59},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[34,77889,77890],{"class":36,"line":2143},[34,77891,77892],{"class":59},"       }\n",[34,77894,77895],{"class":36,"line":2157},[34,77896,4773],{"class":59},[34,77898,77899],{"class":36,"line":2162},[34,77900,2036],{"class":59},[34,77902,77903],{"class":36,"line":2191},[34,77904,77905],{"class":59},"console.log(arr1)\n",[14,77907,77908],{},"数组解构的细节：",[14,77910,77911],{},"①变量多，单元值少",[14,77913,77914],{},[20,77915],{"alt":22,"src":77916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77918,77919],{},"防止出现undefined的方法：",[14,77921,77922],{},"const [a=0,b=0] =[1]",[14,77924,77925],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77927,77928],{},"②变量少，单元值多",[14,77930,77931],{},[20,77932],{"alt":22,"src":77933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77935,77936],{},"此时可以使用剩余参数来接收多余的值",[14,77938,77939],{},"const [a,b,...c]=[1,2,3,4]",[14,77941,77942],{},"console.log(c) 输出[3,4]",[14,77944,77945],{},"③可以按需导入，忽略某些返回值",[14,77947,77948],{},[20,77949],{"alt":22,"src":77950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77952,77953],{},"④支持多维数组的结构",[25,77955,77959],{"className":77956,"code":77957,"language":77958,"meta":22,"style":22},"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",[31,77960,77961,77989,78005,78020,78035],{"__ignoreMap":22},[34,77962,77963,77965,77967,77969,77971,77973,77975,77977,77980,77982,77984,77986],{"class":36,"line":37},[34,77964,7256],{"class":112},[34,77966,52294],{"class":59},[34,77968,447],{"class":112},[34,77970,52687],{"class":59},[34,77972,64],{"class":63},[34,77974,12899],{"class":59},[34,77976,70],{"class":63},[34,77978,77979],{"class":59},", [",[34,77981,309],{"class":63},[34,77983,12899],{"class":59},[34,77985,217],{"class":63},[34,77987,77988],{"class":59},"]]\n",[34,77990,77991,77994,77996,77998,78000,78002],{"class":36,"line":44},[34,77992,77993],{"class":59},"console.",[34,77995,58708],{"class":2427},[34,77997,4315],{"class":59},[34,77999,319],{"class":63},[34,78001,4680],{"class":59},[34,78003,78004],{"class":40},"  \u002F\u002F1\n",[34,78006,78007,78009,78011,78013,78015,78017],{"class":36,"line":50},[34,78008,77993],{"class":59},[34,78010,58708],{"class":2427},[34,78012,4315],{"class":59},[34,78014,64],{"class":63},[34,78016,4680],{"class":59},[34,78018,78019],{"class":40},"  \u002F\u002F2\n",[34,78021,78022,78024,78026,78028,78030,78032],{"class":36,"line":56},[34,78023,77993],{"class":59},[34,78025,58708],{"class":2427},[34,78027,4315],{"class":59},[34,78029,70],{"class":63},[34,78031,4680],{"class":59},[34,78033,78034],{"class":40},"  \u002F\u002F[3,4]\n",[34,78036,78037,78039,78041,78043,78045,78047,78049,78051],{"class":36,"line":107},[34,78038,77993],{"class":59},[34,78040,58708],{"class":2427},[34,78042,4315],{"class":59},[34,78044,70],{"class":63},[34,78046,5365],{"class":59},[34,78048,319],{"class":63},[34,78050,4680],{"class":59},[34,78052,78053],{"class":40},"  \u002F\u002F3\n",[25,78055,78057],{"className":77956,"code":78056,"language":77958,"meta":22,"style":22},"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",[31,78058,78059,78086,78097,78108],{"__ignoreMap":22},[34,78060,78061,78063,78066,78068,78070,78072,78074,78076,78078,78080,78082,78084],{"class":36,"line":37},[34,78062,7256],{"class":112},[34,78064,78065],{"class":59}," [a, b, c] ",[34,78067,447],{"class":112},[34,78069,52687],{"class":59},[34,78071,64],{"class":63},[34,78073,12899],{"class":59},[34,78075,70],{"class":63},[34,78077,77979],{"class":59},[34,78079,309],{"class":63},[34,78081,12899],{"class":59},[34,78083,217],{"class":63},[34,78085,77988],{"class":59},[34,78087,78088,78090,78092,78095],{"class":36,"line":44},[34,78089,77993],{"class":59},[34,78091,58708],{"class":2427},[34,78093,78094],{"class":59},"(a)",[34,78096,78004],{"class":40},[34,78098,78099,78101,78103,78106],{"class":36,"line":50},[34,78100,77993],{"class":59},[34,78102,58708],{"class":2427},[34,78104,78105],{"class":59},"(b)",[34,78107,78019],{"class":40},[34,78109,78110,78112,78114,78117],{"class":36,"line":56},[34,78111,77993],{"class":59},[34,78113,58708],{"class":2427},[34,78115,78116],{"class":59},"(c)",[34,78118,78034],{"class":40},[25,78120,78122],{"className":77956,"code":78121,"language":77958,"meta":22,"style":22},"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",[31,78123,78124,78151,78161,78171,78181],{"__ignoreMap":22},[34,78125,78126,78128,78131,78133,78135,78137,78139,78141,78143,78145,78147,78149],{"class":36,"line":37},[34,78127,7256],{"class":112},[34,78129,78130],{"class":59}," [a, b, [c, d]] ",[34,78132,447],{"class":112},[34,78134,52687],{"class":59},[34,78136,64],{"class":63},[34,78138,12899],{"class":59},[34,78140,70],{"class":63},[34,78142,77979],{"class":59},[34,78144,309],{"class":63},[34,78146,12899],{"class":59},[34,78148,217],{"class":63},[34,78150,77988],{"class":59},[34,78152,78153,78155,78157,78159],{"class":36,"line":44},[34,78154,77993],{"class":59},[34,78156,58708],{"class":2427},[34,78158,78094],{"class":59},[34,78160,78004],{"class":40},[34,78162,78163,78165,78167,78169],{"class":36,"line":50},[34,78164,77993],{"class":59},[34,78166,58708],{"class":2427},[34,78168,78105],{"class":59},[34,78170,78019],{"class":40},[34,78172,78173,78175,78177,78179],{"class":36,"line":56},[34,78174,77993],{"class":59},[34,78176,58708],{"class":2427},[34,78178,78116],{"class":59},[34,78180,78053],{"class":40},[34,78182,78183,78185,78187,78190],{"class":36,"line":107},[34,78184,77993],{"class":59},[34,78186,58708],{"class":2427},[34,78188,78189],{"class":59},"(d)",[34,78191,78192],{"class":40},"  \u002F\u002F4\n",[584,78194,78196],{"id":78195},"_462-对象解构","4.6.2 对象解构",[14,78198,78199],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78201,78202],{},"用的非常非常多！！！！！！",[22462,78204,78206],{"id":78205},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78208,78209],{},"基本语法：",[567,78211,78212,78215,78218,78221],{},[570,78213,78214],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[570,78216,78217],{},"对象属性的值将被赋值给与属性名相同的变量",[570,78219,78220],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[570,78222,78223],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[25,78225,78227],{"className":51094,"code":78226,"language":51096,"meta":22,"style":22},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[31,78228,78229,78234,78239,78244,78248],{"__ignoreMap":22},[34,78230,78231],{"class":36,"line":37},[34,78232,78233],{"class":59},"const obj = {\n",[34,78235,78236],{"class":36,"line":44},[34,78237,78238],{"class":59},"   uname: 'pink老师',\n",[34,78240,78241],{"class":36,"line":50},[34,78242,78243],{"class":59},"   age: 18,\n",[34,78245,78246],{"class":36,"line":56},[34,78247,2036],{"class":59},[34,78249,78250],{"class":36,"line":107},[34,78251,78252],{"class":59},"const { uname, age } = obj\n",[14,78254,78255],{},"上方代码这样写等价于：",[14,78257,78258],{},"const uname等价于obj.uname",[14,78260,78261],{},"变量名可以重新改名：",[14,78263,78264],{},"const uname='red老师'",[14,78266,78267],{},"const user={",[14,78269,78270],{},"  uname:'pink老师',",[14,78272,78273],{},"  age:18",[14,78275,1550],{},[14,78277,78278],{},"const {uname,age}=user",[14,78280,78281],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78283,78284],{},"const {旧变量名：新变量名}=对象",[14,78286,78287],{},"const {uname:username,age}=user",[22462,78289,78291],{"id":78290},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78293,78294],{},[20,78295],{"alt":22,"src":78296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22462,78298,78300],{"id":78299},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78302,78303],{},[20,78304],{"alt":22,"src":78305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[25,78307,78309],{"className":53528,"code":78308,"language":53530,"meta":22,"style":22},"  \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",[31,78310,78311,78319,78324,78329,78334,78339,78344,78349,78354,78359,78363,78368,78373],{"__ignoreMap":22},[34,78312,78313,78315,78317],{"class":36,"line":37},[34,78314,52605],{"class":59},[34,78316,52274],{"class":51761},[34,78318,51768],{"class":59},[34,78320,78321],{"class":36,"line":44},[34,78322,78323],{"class":59},"    const pig = {\n",[34,78325,78326],{"class":36,"line":50},[34,78327,78328],{"class":59},"      name: '佩奇',\n",[34,78330,78331],{"class":36,"line":56},[34,78332,78333],{"class":59},"      family: {\n",[34,78335,78336],{"class":36,"line":107},[34,78337,78338],{"class":59},"        mother: '猪妈妈',\n",[34,78340,78341],{"class":36,"line":196},[34,78342,78343],{"class":59},"        father: '猪爸爸',\n",[34,78345,78346],{"class":36,"line":202},[34,78347,78348],{"class":59},"        sister: '乔治'\n",[34,78350,78351],{"class":36,"line":207},[34,78352,78353],{"class":59},"      },\n",[34,78355,78356],{"class":36,"line":222},[34,78357,78358],{"class":59},"      age: 6\n",[34,78360,78361],{"class":36,"line":227},[34,78362,2651],{"class":59},[34,78364,78365],{"class":36,"line":232},[34,78366,78367],{"class":59},"    \u002F\u002F 多级对象解构\n",[34,78369,78370],{"class":36,"line":238},[34,78371,78372],{"class":59},"    const { name, family: { mother, father, sister }, age } = pig\n",[34,78374,78375,78377,78379],{"class":36,"line":244},[34,78376,52878],{"class":59},[34,78378,52274],{"class":51761},[34,78380,51768],{"class":59},[14,78382,78383],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[25,78385,78388],{"className":78386,"code":78387,"language":76908,"meta":22,"style":22},"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",[31,78389,78390,78395,78406,78418,78430,78439,78443,78454,78466,78476,78481,78485,78495,78506,78515,78519,78523,78534,78545,78554,78558,78563],{"__ignoreMap":22},[34,78391,78392],{"class":36,"line":37},[34,78393,78394],{"class":40},"    \u002F\u002F 这是后台传递过来的数据\n",[34,78396,78397,78399,78402,78404],{"class":36,"line":44},[34,78398,11685],{"class":112},[34,78400,78401],{"class":59}," msg ",[34,78403,447],{"class":112},[34,78405,16036],{"class":59},[34,78407,78408,78411,78413,78416],{"class":36,"line":50},[34,78409,78410],{"class":187},"      \"code\"",[34,78412,214],{"class":112},[34,78414,78415],{"class":63}," 200",[34,78417,31929],{"class":59},[34,78419,78420,78423,78425,78428],{"class":36,"line":56},[34,78421,78422],{"class":187},"      \"msg\"",[34,78424,214],{"class":112},[34,78426,78427],{"class":187}," \"获取新闻列表成功\"",[34,78429,31929],{"class":59},[34,78431,78432,78435,78437],{"class":36,"line":107},[34,78433,78434],{"class":187},"      \"data\"",[34,78436,214],{"class":112},[34,78438,55908],{"class":59},[34,78440,78441],{"class":36,"line":196},[34,78442,2974],{"class":59},[34,78444,78445,78448,78450,78452],{"class":36,"line":202},[34,78446,78447],{"class":187},"          \"id\"",[34,78449,214],{"class":112},[34,78451,25583],{"class":63},[34,78453,31929],{"class":59},[34,78455,78456,78459,78461,78464],{"class":36,"line":207},[34,78457,78458],{"class":187},"          \"title\"",[34,78460,214],{"class":112},[34,78462,78463],{"class":187}," \"5G商用自己，三大运用商收入下降\"",[34,78465,31929],{"class":59},[34,78467,78468,78471,78473],{"class":36,"line":222},[34,78469,78470],{"class":187},"          \"count\"",[34,78472,214],{"class":112},[34,78474,78475],{"class":63}," 58\n",[34,78477,78478],{"class":36,"line":227},[34,78479,78480],{"class":59},"        },\n",[34,78482,78483],{"class":36,"line":232},[34,78484,2974],{"class":59},[34,78486,78487,78489,78491,78493],{"class":36,"line":238},[34,78488,78447],{"class":187},[34,78490,214],{"class":112},[34,78492,15219],{"class":63},[34,78494,31929],{"class":59},[34,78496,78497,78499,78501,78504],{"class":36,"line":244},[34,78498,78458],{"class":187},[34,78500,214],{"class":112},[34,78502,78503],{"class":187}," \"国际媒体头条速览\"",[34,78505,31929],{"class":59},[34,78507,78508,78510,78512],{"class":36,"line":250},[34,78509,78470],{"class":187},[34,78511,214],{"class":112},[34,78513,78514],{"class":63}," 56\n",[34,78516,78517],{"class":36,"line":256},[34,78518,78480],{"class":59},[34,78520,78521],{"class":36,"line":261},[34,78522,2974],{"class":59},[34,78524,78525,78527,78529,78532],{"class":36,"line":267},[34,78526,78447],{"class":187},[34,78528,214],{"class":112},[34,78530,78531],{"class":63}," 3",[34,78533,31929],{"class":59},[34,78535,78536,78538,78540,78543],{"class":36,"line":2138},[34,78537,78458],{"class":187},[34,78539,214],{"class":112},[34,78541,78542],{"class":187}," \"乌克兰和俄罗斯持续冲突\"",[34,78544,31929],{"class":59},[34,78546,78547,78549,78551],{"class":36,"line":2143},[34,78548,78470],{"class":187},[34,78550,214],{"class":112},[34,78552,78553],{"class":63}," 1669\n",[34,78555,78556],{"class":36,"line":2157},[34,78557,78480],{"class":59},[34,78559,78560],{"class":36,"line":2162},[34,78561,78562],{"class":59},"      ]\n",[34,78564,78565],{"class":36,"line":2191},[34,78566,2651],{"class":59},[14,78568,78569],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78571,78572],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78574,78575],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78577,78578],{},"function({data}) {",[14,78580,78581],{},"console.log(data)",[14,78583,1550],{},[14,78585,78586],{},"render(msg)",[14,78588,78589],{},"实参传递给形参的时候解构了",[14,78591,78592],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78594,78595],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78597,78598],{},"function render({data:mydata}) {",[14,78600,78601],{},"  console.log(data)",[14,78603,1550],{},[584,78605,78607],{"id":78606},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78609,78610],{},"有两种情况：一个是数组结构，一个是立即执行函数",[567,78612,78613],{},[570,78614,78615],{},"如果对一个数组进行遍历，有两种方式：",[14,78617,78618],{},"①法1",[14,78620,78621],{},"const arr=[1,2,3]",[14,78623,78624],{},"arr.map(function(item,index) {",[14,78626,78627],{},"  console.log(item)",[14,78629,52925],{},[14,78631,78632],{},[20,78633],{"alt":22,"src":78634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78636,78637],{},"②法2",[14,78639,78640],{},"const str='pink'",[14,78642,78643],{},"[1,2,3].map(function(item,index) {",[14,78645,78646],{},"console.log(item)",[14,78648,52925],{},[14,78650,78651],{},[20,78652],{"alt":22,"src":78653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78655,78656],{},"此时会报错",[14,78658,78659],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78661,78646],{},[14,78663,52925],{},[14,78665,78666],{},"内部会当成这样处理，所以我们用分号进行隔开",[555,78668,78670],{"id":78669},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78672,78673],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78675,78676],{},"可以理解为加强版的for循环",[14,78678,78679],{},[20,78680],{"alt":22,"src":78681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78683,78684],{},"里边不写return，不返回数组，只遍历不返回",[14,78686,78687],{},"map是返回数组",[14,78689,78690],{},"forEach主要用于遍历数组对象",[25,78692,78694],{"className":53528,"code":78693,"language":53530,"meta":22,"style":22},"  \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",[31,78695,78696,78704,78709,78714,78719,78724,78728,78733],{"__ignoreMap":22},[34,78697,78698,78700,78702],{"class":36,"line":37},[34,78699,52605],{"class":59},[34,78701,52274],{"class":51761},[34,78703,51768],{"class":59},[34,78705,78706],{"class":36,"line":44},[34,78707,78708],{"class":59},"    const arr = ['red', 'green', 'pink']\n",[34,78710,78711],{"class":36,"line":50},[34,78712,78713],{"class":59},"    const result = arr.forEach(function (item, index) {\n",[34,78715,78716],{"class":36,"line":56},[34,78717,78718],{"class":59},"      console.log(item)\n",[34,78720,78721],{"class":36,"line":107},[34,78722,78723],{"class":59},"      console.log(index)\n",[34,78725,78726],{"class":36,"line":196},[34,78727,33923],{"class":59},[34,78729,78730],{"class":36,"line":202},[34,78731,78732],{"class":59},"    console.log(result)\n",[34,78734,78735,78737,78739],{"class":36,"line":207},[34,78736,52878],{"class":59},[34,78738,52274],{"class":51761},[34,78740,51768],{"class":59},[14,78742,78743],{},[20,78744],{"alt":22,"src":78745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[555,78747,78749],{"id":78748},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78751,78752],{},[20,78753],{"alt":22,"src":78754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78756,78757],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[25,78759,78761],{"className":53528,"code":78760,"language":53530,"meta":22,"style":22},"\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",[31,78762,78763,78771,78779,78784,78789,78793,78797,78802,78806,78811,78819],{"__ignoreMap":22},[34,78764,78765,78767,78769],{"class":36,"line":37},[34,78766,1515],{"class":59},[34,78768,52261],{"class":51761},[34,78770,51768],{"class":59},[34,78772,78773,78775,78777],{"class":36,"line":44},[34,78774,52605],{"class":59},[34,78776,52274],{"class":51761},[34,78778,51768],{"class":59},[34,78780,78781],{"class":36,"line":50},[34,78782,78783],{"class":59},"    const arr = [10, 20, 30]\n",[34,78785,78786],{"class":36,"line":56},[34,78787,78788],{"class":59},"    const newArr = arr.filter(function (item, index) {\n",[34,78790,78791],{"class":36,"line":107},[34,78792,78718],{"class":59},[34,78794,78795],{"class":36,"line":196},[34,78796,78723],{"class":59},[34,78798,78799],{"class":36,"line":202},[34,78800,78801],{"class":59},"      return item >= 20\n",[34,78803,78804],{"class":36,"line":207},[34,78805,33923],{"class":59},[34,78807,78808],{"class":36,"line":222},[34,78809,78810],{"class":59},"    console.log(newArr)\n",[34,78812,78813,78815,78817],{"class":36,"line":227},[34,78814,52878],{"class":59},[34,78816,52274],{"class":51761},[34,78818,51768],{"class":59},[34,78820,78821,78823,78825],{"class":36,"line":232},[34,78822,52246],{"class":59},[34,78824,52261],{"class":51761},[34,78826,51768],{"class":59},[14,78828,78829],{},"这个也可以写成箭头函数：",[25,78831,78833],{"className":51094,"code":78832,"language":51096,"meta":22,"style":22},"const newArr = arr.filter(item => item >= 20)\n",[31,78834,78835],{"__ignoreMap":22},[34,78836,78837],{"class":36,"line":37},[34,78838,78832],{"class":59},[555,78840,78842],{"id":78841},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78844,78845],{},[20,78846],{"alt":22,"src":78847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78849,78850],{},"步骤：",[14,78852,78853],{},"①：渲染页面模块",[1611,78855,78856,78859],{},[570,78857,78858],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[570,78860,78861],{},"用forEach+字符串的形式",[14,78863,78864],{},"②：点击不同需求，显示不同页面内容",[1611,78866,78867,78870,78873,78876,78879],{},[570,78868,78869],{},"点击采取事件委托方式 .filter",[570,78871,78872],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[570,78874,78875],{},"筛选条件是根据点击的 data-index 来判断",[570,78877,78878],{},"可以使用对象解构，把事件对象解构",[570,78880,78881],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[25,78883,78885],{"className":51094,"code":78884,"language":51096,"meta":22,"style":22},"\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",[31,78886,78887,78897,78911,78915,78923,78937,78957,78969,78977,78983,78993,79003,79013,79017,79021,79027,79040,79052,79062,79074,79078,79082,79089,79102,79114,79131,79149,79162,79166,79170,79182,79192,79196,79200,79207,79248,79275,79285,79289,79293,79301,79313,79317,79321,79329,79341,79353,79364,79368,79372,79381,79393,79404,79408,79412,79421,79433,79445,79449,79453,79460,79470,79482,79494,79509,79513,79517,79525,79541,79551,79561,79571,79583,79587,79591,79601,79612,79622,79626,79634,79642,79646,79654,79669,79695,79720,79745,79764,79772,79786,79791,79796,79801,79806,79811,79819,79827,79832,79843,79848,79858,79868,79878,79888,79892,79896,79905,79914,79923,79932,79936,79940,79949,79958,79967,79976,79980,79984,79993,80002,80011,80020,80024,80028,80037,80046,80055,80064,80068,80072,80081,80090,80099,80108,80112,80116,80125,80134,80143,80152,80156,80160,80169,80178,80186,80195,80199,80203,80207,80212,80224,80229,80241,80245,80262,80290,80299,80304,80314,80324,80333,80338,80343,80347,80352,80369,80373,80378,80386,80391,80418,80423,80443,80448,80460,80465,80470,80475,80486,80500,80537,80555,80588,80605,80629,80633,80638,80644,80648,80652,80656,80664,80672,80676],{"__ignoreMap":22},[34,78888,78889,78891,78893,78895],{"class":36,"line":37},[34,78890,51758],{"class":59},[34,78892,51762],{"class":51761},[34,78894,51765],{"class":2427},[34,78896,51768],{"class":59},[34,78898,78899,78901,78903,78905,78907,78909],{"class":36,"line":44},[34,78900,1515],{"class":59},[34,78902,51096],{"class":51761},[34,78904,51777],{"class":2427},[34,78906,447],{"class":59},[34,78908,51782],{"class":187},[34,78910,51768],{"class":59},[34,78912,78913],{"class":36,"line":50},[34,78914,2864],{"emptyLinePlaceholder":540},[34,78916,78917,78919,78921],{"class":36,"line":56},[34,78918,1515],{"class":59},[34,78920,51795],{"class":51761},[34,78922,51768],{"class":59},[34,78924,78925,78927,78929,78931,78933,78935],{"class":36,"line":107},[34,78926,52605],{"class":59},[34,78928,51805],{"class":51761},[34,78930,51808],{"class":2427},[34,78932,447],{"class":59},[34,78934,51813],{"class":187},[34,78936,51768],{"class":59},[34,78938,78939,78941,78943,78945,78947,78949,78951,78953,78955],{"class":36,"line":196},[34,78940,52605],{"class":59},[34,78942,51805],{"class":51761},[34,78944,15384],{"class":2427},[34,78946,447],{"class":59},[34,78948,51852],{"class":187},[34,78950,51832],{"class":2427},[34,78952,447],{"class":59},[34,78954,51859],{"class":187},[34,78956,51768],{"class":59},[34,78958,78959,78961,78963,78965,78967],{"class":36,"line":202},[34,78960,52605],{"class":59},[34,78962,51868],{"class":51761},[34,78964,51871],{"class":59},[34,78966,51868],{"class":51761},[34,78968,51768],{"class":59},[34,78970,78971,78973,78975],{"class":36,"line":207},[34,78972,52605],{"class":59},[34,78974,532],{"class":51761},[34,78976,51768],{"class":59},[34,78978,78979,78981],{"class":36,"line":222},[34,78980,6867],{"class":51761},[34,78982,16036],{"class":59},[34,78984,78985,78987,78989,78991],{"class":36,"line":227},[34,78986,55156],{"class":63},[34,78988,51898],{"class":59},[34,78990,319],{"class":63},[34,78992,1765],{"class":59},[34,78994,78995,78997,78999,79001],{"class":36,"line":232},[34,78996,55167],{"class":63},[34,78998,51898],{"class":59},[34,79000,319],{"class":63},[34,79002,1765],{"class":59},[34,79004,79005,79007,79009,79011],{"class":36,"line":238},[34,79006,73057],{"class":63},[34,79008,51898],{"class":59},[34,79010,60966],{"class":63},[34,79012,1765],{"class":59},[34,79014,79015],{"class":36,"line":244},[34,79016,2651],{"class":59},[34,79018,79019],{"class":36,"line":250},[34,79020,2864],{"emptyLinePlaceholder":540},[34,79022,79023,79025],{"class":36,"line":256},[34,79024,62584],{"class":2427},[34,79026,16036],{"class":59},[34,79028,79029,79031,79033,79036,79038],{"class":36,"line":261},[34,79030,55232],{"class":63},[34,79032,51898],{"class":59},[34,79034,79035],{"class":63},"990",[34,79037,51953],{"class":112},[34,79039,1765],{"class":59},[34,79041,79042,79044,79046,79048,79050],{"class":36,"line":267},[34,79043,55167],{"class":63},[34,79045,51898],{"class":59},[34,79047,319],{"class":63},[34,79049,52017],{"class":63},[34,79051,1765],{"class":59},[34,79053,79054,79056,79058,79060],{"class":36,"line":2138},[34,79055,55470],{"class":63},[34,79057,51898],{"class":59},[34,79059,51938],{"class":63},[34,79061,1765],{"class":59},[34,79063,79064,79067,79069,79072],{"class":36,"line":2143},[34,79065,79066],{"class":63},"      flex-wrap",[34,79068,51898],{"class":59},[34,79070,79071],{"class":63},"wrap",[34,79073,1765],{"class":59},[34,79075,79076],{"class":36,"line":2157},[34,79077,2651],{"class":59},[34,79079,79080],{"class":36,"line":2162},[34,79081,2864],{"emptyLinePlaceholder":540},[34,79083,79084,79087],{"class":36,"line":2191},[34,79085,79086],{"class":2427},"    .item",[34,79088,16036],{"class":59},[34,79090,79091,79093,79095,79098,79100],{"class":36,"line":2196},[34,79092,55232],{"class":63},[34,79094,51898],{"class":59},[34,79096,79097],{"class":63},"240",[34,79099,51953],{"class":112},[34,79101,1765],{"class":59},[34,79103,79104,79106,79108,79110,79112],{"class":36,"line":2213},[34,79105,62461],{"class":63},[34,79107,51898],{"class":59},[34,79109,1053],{"class":63},[34,79111,51953],{"class":112},[34,79113,1765],{"class":59},[34,79115,79116,79118,79120,79122,79124,79127,79129],{"class":36,"line":2218},[34,79117,55156],{"class":63},[34,79119,51898],{"class":59},[34,79121,1306],{"class":63},[34,79123,51953],{"class":112},[34,79125,79126],{"class":63}," 30",[34,79128,51953],{"class":112},[34,79130,1765],{"class":59},[34,79132,79133,79135,79137,79139,79142,79145,79147],{"class":36,"line":2223},[34,79134,62321],{"class":63},[34,79136,51898],{"class":59},[34,79138,28586],{"class":63},[34,79140,79141],{"class":63}," ease",[34,79143,79144],{"class":63}," .5",[34,79146,1301],{"class":112},[34,79148,1765],{"class":59},[34,79150,79151,79154,79156,79158,79160],{"class":36,"line":2228},[34,79152,79153],{"class":63},"      margin-bottom",[34,79155,51898],{"class":59},[34,79157,1306],{"class":63},[34,79159,51953],{"class":112},[34,79161,1765],{"class":59},[34,79163,79164],{"class":36,"line":2242},[34,79165,2651],{"class":59},[34,79167,79168],{"class":36,"line":2247},[34,79169,2864],{"emptyLinePlaceholder":540},[34,79171,79172,79175,79177,79180],{"class":36,"line":3041},[34,79173,79174],{"class":2427},"    .item:nth-child",[34,79176,617],{"class":59},[34,79178,79179],{"class":63},"4n",[34,79181,12906],{"class":59},[34,79183,79184,79186,79188,79190],{"class":36,"line":3055},[34,79185,62461],{"class":63},[34,79187,51898],{"class":59},[34,79189,319],{"class":63},[34,79191,1765],{"class":59},[34,79193,79194],{"class":36,"line":3063},[34,79195,2651],{"class":59},[34,79197,79198],{"class":36,"line":3068},[34,79199,2864],{"emptyLinePlaceholder":540},[34,79201,79202,79205],{"class":36,"line":3074},[34,79203,79204],{"class":2427},"    .item:hover",[34,79206,16036],{"class":59},[34,79208,79209,79212,79214,79216,79218,79220,79222,79224,79226,79229,79231,79233,79235,79237,79239,79241,79243,79246],{"class":36,"line":3080},[34,79210,79211],{"class":63},"      box-shadow",[34,79213,51898],{"class":59},[34,79215,319],{"class":63},[34,79217,51953],{"class":112},[34,79219,4557],{"class":63},[34,79221,51953],{"class":112},[34,79223,2612],{"class":63},[34,79225,51953],{"class":112},[34,79227,79228],{"class":63}," rgba",[34,79230,617],{"class":59},[34,79232,319],{"class":63},[34,79234,12899],{"class":59},[34,79236,319],{"class":63},[34,79238,12899],{"class":59},[34,79240,319],{"class":63},[34,79242,12899],{"class":59},[34,79244,79245],{"class":63},".2",[34,79247,3183],{"class":59},[34,79249,79250,79253,79255,79258,79260,79262,79264,79267,79269,79271,79273],{"class":36,"line":3085},[34,79251,79252],{"class":63},"      transform",[34,79254,51898],{"class":59},[34,79256,79257],{"class":63},"translate3d",[34,79259,617],{"class":59},[34,79261,319],{"class":63},[34,79263,12899],{"class":59},[34,79265,79266],{"class":63},"-4",[34,79268,51953],{"class":112},[34,79270,12899],{"class":59},[34,79272,319],{"class":63},[34,79274,3183],{"class":59},[34,79276,79277,79279,79281,79283],{"class":36,"line":8412},[34,79278,62486],{"class":63},[34,79280,51898],{"class":59},[34,79282,62491],{"class":63},[34,79284,1765],{"class":59},[34,79286,79287],{"class":36,"line":8436},[34,79288,2651],{"class":59},[34,79290,79291],{"class":36,"line":8441},[34,79292,2864],{"emptyLinePlaceholder":540},[34,79294,79295,79297,79299],{"class":36,"line":8447},[34,79296,79086],{"class":2427},[34,79298,56076],{"class":51761},[34,79300,16036],{"class":59},[34,79302,79303,79305,79307,79309,79311],{"class":36,"line":8474},[34,79304,55232],{"class":63},[34,79306,51898],{"class":59},[34,79308,919],{"class":63},[34,79310,936],{"class":112},[34,79312,1765],{"class":59},[34,79314,79315],{"class":36,"line":8479},[34,79316,2651],{"class":59},[34,79318,79319],{"class":36,"line":8485},[34,79320,2864],{"emptyLinePlaceholder":540},[34,79322,79323,79325,79327],{"class":36,"line":8497},[34,79324,79086],{"class":2427},[34,79326,62765],{"class":2427},[34,79328,16036],{"class":59},[34,79330,79331,79333,79335,79337,79339],{"class":36,"line":8509},[34,79332,55383],{"class":63},[34,79334,51898],{"class":59},[34,79336,1256],{"class":63},[34,79338,51953],{"class":112},[34,79340,1765],{"class":59},[34,79342,79343,79345,79347,79349,79351],{"class":36,"line":8521},[34,79344,79153],{"class":63},[34,79346,51898],{"class":59},[34,79348,1053],{"class":63},[34,79350,51953],{"class":112},[34,79352,1765],{"class":59},[34,79354,79355,79357,79359,79362],{"class":36,"line":10180},[34,79356,57877],{"class":63},[34,79358,51898],{"class":59},[34,79360,79361],{"class":63},"#666",[34,79363,1765],{"class":59},[34,79365,79366],{"class":36,"line":10205},[34,79367,2651],{"class":59},[34,79369,79370],{"class":36,"line":10228},[34,79371,2864],{"emptyLinePlaceholder":540},[34,79373,79374,79376,79379],{"class":36,"line":10252},[34,79375,79086],{"class":2427},[34,79377,79378],{"class":2427}," .price",[34,79380,16036],{"class":59},[34,79382,79383,79385,79387,79389,79391],{"class":36,"line":10257},[34,79384,55383],{"class":63},[34,79386,51898],{"class":59},[34,79388,1356],{"class":63},[34,79390,51953],{"class":112},[34,79392,1765],{"class":59},[34,79394,79395,79397,79399,79402],{"class":36,"line":10262},[34,79396,57877],{"class":63},[34,79398,51898],{"class":59},[34,79400,79401],{"class":63},"firebrick",[34,79403,1765],{"class":59},[34,79405,79406],{"class":36,"line":10267},[34,79407,2651],{"class":59},[34,79409,79410],{"class":36,"line":10276},[34,79411,2864],{"emptyLinePlaceholder":540},[34,79413,79414,79416,79419],{"class":36,"line":10281},[34,79415,79086],{"class":2427},[34,79417,79418],{"class":2427}," .price::before",[34,79420,16036],{"class":59},[34,79422,79423,79426,79428,79431],{"class":36,"line":10287},[34,79424,79425],{"class":63},"      content",[34,79427,51898],{"class":59},[34,79429,79430],{"class":187},"'￥'",[34,79432,1765],{"class":59},[34,79434,79435,79437,79439,79441,79443],{"class":36,"line":10308},[34,79436,55383],{"class":63},[34,79438,51898],{"class":59},[34,79440,1155],{"class":63},[34,79442,51953],{"class":112},[34,79444,1765],{"class":59},[34,79446,79447],{"class":36,"line":10314},[34,79448,2651],{"class":59},[34,79450,79451],{"class":36,"line":10328},[34,79452,2864],{"emptyLinePlaceholder":540},[34,79454,79455,79458],{"class":36,"line":10334},[34,79456,79457],{"class":2427},"    .filter",[34,79459,16036],{"class":59},[34,79461,79462,79464,79466,79468],{"class":36,"line":10361},[34,79463,55470],{"class":63},[34,79465,51898],{"class":59},[34,79467,51938],{"class":63},[34,79469,1765],{"class":59},[34,79471,79472,79474,79476,79478,79480],{"class":36,"line":10370},[34,79473,55232],{"class":63},[34,79475,51898],{"class":59},[34,79477,79035],{"class":63},[34,79479,51953],{"class":112},[34,79481,1765],{"class":59},[34,79483,79484,79486,79488,79490,79492],{"class":36,"line":10376},[34,79485,55167],{"class":63},[34,79487,51898],{"class":59},[34,79489,319],{"class":63},[34,79491,52017],{"class":63},[34,79493,1765],{"class":59},[34,79495,79496,79498,79500,79502,79504,79506],{"class":36,"line":10384},[34,79497,55156],{"class":63},[34,79499,51898],{"class":59},[34,79501,1262],{"class":63},[34,79503,51953],{"class":112},[34,79505,79126],{"class":63},[34,79507,79508],{"class":112},"px\n",[34,79510,79511],{"class":36,"line":10389},[34,79512,2651],{"class":59},[34,79514,79515],{"class":36,"line":17068},[34,79516,2864],{"emptyLinePlaceholder":540},[34,79518,79519,79521,79523],{"class":36,"line":17074},[34,79520,79457],{"class":2427},[34,79522,1870],{"class":51761},[34,79524,16036],{"class":59},[34,79526,79527,79529,79531,79533,79535,79537,79539],{"class":36,"line":17097},[34,79528,55156],{"class":63},[34,79530,51898],{"class":59},[34,79532,1053],{"class":63},[34,79534,51953],{"class":112},[34,79536,9414],{"class":63},[34,79538,51953],{"class":112},[34,79540,1765],{"class":59},[34,79542,79543,79545,79547,79549],{"class":36,"line":17103},[34,79544,62182],{"class":63},[34,79546,51898],{"class":59},[34,79548,62279],{"class":63},[34,79550,1765],{"class":59},[34,79552,79553,79555,79557,79559],{"class":36,"line":17126},[34,79554,57877],{"class":63},[34,79556,51898],{"class":59},[34,79558,79361],{"class":63},[34,79560,1765],{"class":59},[34,79562,79563,79565,79567,79569],{"class":36,"line":17140},[34,79564,64431],{"class":63},[34,79566,51898],{"class":59},[34,79568,55198],{"class":63},[34,79570,1765],{"class":59},[34,79572,79573,79575,79577,79579,79581],{"class":36,"line":17160},[34,79574,62211],{"class":63},[34,79576,51898],{"class":59},[34,79578,1306],{"class":63},[34,79580,51953],{"class":112},[34,79582,1765],{"class":59},[34,79584,79585],{"class":36,"line":17166},[34,79586,2651],{"class":59},[34,79588,79589],{"class":36,"line":17177},[34,79590,2864],{"emptyLinePlaceholder":540},[34,79592,79593,79595,79597,79599],{"class":36,"line":17200},[34,79594,79457],{"class":2427},[34,79596,1870],{"class":51761},[34,79598,62361],{"class":2427},[34,79600,16036],{"class":59},[34,79602,79603,79605,79607,79610],{"class":36,"line":17222},[34,79604,55345],{"class":63},[34,79606,51898],{"class":59},[34,79608,79609],{"class":63},"#05943c",[34,79611,1765],{"class":59},[34,79613,79614,79616,79618,79620],{"class":36,"line":17227},[34,79615,57877],{"class":63},[34,79617,51898],{"class":59},[34,79619,61303],{"class":63},[34,79621,1765],{"class":59},[34,79623,79624],{"class":36,"line":17233},[34,79625,2651],{"class":59},[34,79627,79628,79630,79632],{"class":36,"line":17247},[34,79629,52878],{"class":59},[34,79631,532],{"class":51761},[34,79633,51768],{"class":59},[34,79635,79636,79638,79640],{"class":36,"line":17260},[34,79637,52246],{"class":59},[34,79639,51795],{"class":51761},[34,79641,51768],{"class":59},[34,79643,79644],{"class":36,"line":17265},[34,79645,2864],{"emptyLinePlaceholder":540},[34,79647,79648,79650,79652],{"class":36,"line":17279},[34,79649,1515],{"class":59},[34,79651,52261],{"class":51761},[34,79653,51768],{"class":59},[34,79655,79656,79658,79660,79662,79664,79667],{"class":36,"line":17284},[34,79657,52605],{"class":59},[34,79659,52072],{"class":51761},[34,79661,53947],{"class":2427},[34,79663,447],{"class":59},[34,79665,79666],{"class":187},"\"filter\"",[34,79668,51768],{"class":59},[34,79670,79671,79673,79675,79677,79679,79681,79684,79686,79688,79691,79693],{"class":36,"line":17290},[34,79672,51802],{"class":59},[34,79674,847],{"class":51761},[34,79676,61518],{"class":2427},[34,79678,447],{"class":59},[34,79680,61523],{"class":187},[34,79682,79683],{"class":2427}," data-index",[34,79685,447],{"class":59},[34,79687,4142],{"class":187},[34,79689,79690],{"class":59},">0-100元\u003C\u002F",[34,79692,847],{"class":51761},[34,79694,51768],{"class":59},[34,79696,79697,79699,79701,79703,79705,79707,79709,79711,79713,79716,79718],{"class":36,"line":17295},[34,79698,51802],{"class":59},[34,79700,847],{"class":51761},[34,79702,61518],{"class":2427},[34,79704,447],{"class":59},[34,79706,61523],{"class":187},[34,79708,79683],{"class":2427},[34,79710,447],{"class":59},[34,79712,4165],{"class":187},[34,79714,79715],{"class":59},">100-300元\u003C\u002F",[34,79717,847],{"class":51761},[34,79719,51768],{"class":59},[34,79721,79722,79724,79726,79728,79730,79732,79734,79736,79738,79741,79743],{"class":36,"line":17309},[34,79723,51802],{"class":59},[34,79725,847],{"class":51761},[34,79727,61518],{"class":2427},[34,79729,447],{"class":59},[34,79731,61523],{"class":187},[34,79733,79683],{"class":2427},[34,79735,447],{"class":59},[34,79737,4178],{"class":187},[34,79739,79740],{"class":59},">300元以上\u003C\u002F",[34,79742,847],{"class":51761},[34,79744,51768],{"class":59},[34,79746,79747,79749,79751,79753,79755,79757,79760,79762],{"class":36,"line":17314},[34,79748,51802],{"class":59},[34,79750,847],{"class":51761},[34,79752,61518],{"class":2427},[34,79754,447],{"class":59},[34,79756,61523],{"class":187},[34,79758,79759],{"class":59},">全部区间\u003C\u002F",[34,79761,847],{"class":51761},[34,79763,51768],{"class":59},[34,79765,79766,79768,79770],{"class":36,"line":17319},[34,79767,52878],{"class":59},[34,79769,52072],{"class":51761},[34,79771,51768],{"class":59},[34,79773,79774,79776,79778,79780,79782,79784],{"class":36,"line":17333},[34,79775,52605],{"class":59},[34,79777,52072],{"class":51761},[34,79779,53947],{"class":2427},[34,79781,447],{"class":59},[34,79783,63069],{"class":187},[34,79785,51768],{"class":59},[34,79787,79788],{"class":36,"line":17345},[34,79789,79790],{"class":40},"    \u003C!-- \u003Cdiv class=\"item\">\n",[34,79792,79793],{"class":36,"line":17350},[34,79794,79795],{"class":40},"      \u003Cimg src=\"\" alt=\"\">\n",[34,79797,79798],{"class":36,"line":17363},[34,79799,79800],{"class":40},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[34,79802,79803],{"class":36,"line":17368},[34,79804,79805],{"class":40},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[34,79807,79808],{"class":36,"line":17373},[34,79809,79810],{"class":40},"    \u003C\u002Fdiv> -->\n",[34,79812,79813,79815,79817],{"class":36,"line":17378},[34,79814,52878],{"class":59},[34,79816,52072],{"class":51761},[34,79818,51768],{"class":59},[34,79820,79821,79823,79825],{"class":36,"line":17391},[34,79822,52605],{"class":59},[34,79824,52274],{"class":51761},[34,79826,51768],{"class":59},[34,79828,79829],{"class":36,"line":17396},[34,79830,79831],{"class":40},"    \u002F\u002F 2. 初始化数据\n",[34,79833,79834,79836,79839,79841],{"class":36,"line":33096},[34,79835,11685],{"class":112},[34,79837,79838],{"class":63}," goodsList",[34,79840,14028],{"class":112},[34,79842,55908],{"class":59},[34,79844,79845],{"class":36,"line":33102},[34,79846,79847],{"class":59},"      {\n",[34,79849,79850,79853,79856],{"class":36,"line":33108},[34,79851,79852],{"class":59},"        id: ",[34,79854,79855],{"class":187},"'4001172'",[34,79857,31929],{"class":59},[34,79859,79860,79863,79866],{"class":36,"line":33114},[34,79861,79862],{"class":59},"        name: ",[34,79864,79865],{"class":187},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[34,79867,31929],{"class":59},[34,79869,79870,79873,79876],{"class":36,"line":33120},[34,79871,79872],{"class":59},"        price: ",[34,79874,79875],{"class":187},"'289.00'",[34,79877,31929],{"class":59},[34,79879,79880,79883,79886],{"class":36,"line":33131},[34,79881,79882],{"class":59},"        picture: ",[34,79884,79885],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[34,79887,31929],{"class":59},[34,79889,79890],{"class":36,"line":33137},[34,79891,78353],{"class":59},[34,79893,79894],{"class":36,"line":33157},[34,79895,79847],{"class":59},[34,79897,79898,79900,79903],{"class":36,"line":33163},[34,79899,79852],{"class":59},[34,79901,79902],{"class":187},"'4001594'",[34,79904,31929],{"class":59},[34,79906,79907,79909,79912],{"class":36,"line":33174},[34,79908,79862],{"class":59},[34,79910,79911],{"class":187},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[34,79913,31929],{"class":59},[34,79915,79916,79918,79921],{"class":36,"line":33180},[34,79917,79872],{"class":59},[34,79919,79920],{"class":187},"'288.00'",[34,79922,31929],{"class":59},[34,79924,79925,79927,79930],{"class":36,"line":33186},[34,79926,79882],{"class":59},[34,79928,79929],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[34,79931,31929],{"class":59},[34,79933,79934],{"class":36,"line":33192},[34,79935,78353],{"class":59},[34,79937,79938],{"class":36,"line":33198},[34,79939,79847],{"class":59},[34,79941,79942,79944,79947],{"class":36,"line":33204},[34,79943,79852],{"class":59},[34,79945,79946],{"class":187},"'4001009'",[34,79948,31929],{"class":59},[34,79950,79951,79953,79956],{"class":36,"line":33210},[34,79952,79862],{"class":59},[34,79954,79955],{"class":187},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[34,79957,31929],{"class":59},[34,79959,79960,79962,79965],{"class":36,"line":33216},[34,79961,79872],{"class":59},[34,79963,79964],{"class":187},"'109.00'",[34,79966,31929],{"class":59},[34,79968,79969,79971,79974],{"class":36,"line":33236},[34,79970,79882],{"class":59},[34,79972,79973],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[34,79975,31929],{"class":59},[34,79977,79978],{"class":36,"line":33242},[34,79979,78353],{"class":59},[34,79981,79982],{"class":36,"line":33258},[34,79983,79847],{"class":59},[34,79985,79986,79988,79991],{"class":36,"line":33264},[34,79987,79852],{"class":59},[34,79989,79990],{"class":187},"'4001874'",[34,79992,31929],{"class":59},[34,79994,79995,79997,80000],{"class":36,"line":33278},[34,79996,79862],{"class":59},[34,79998,79999],{"class":187},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[34,80001,31929],{"class":59},[34,80003,80004,80006,80009],{"class":36,"line":33284},[34,80005,79872],{"class":59},[34,80007,80008],{"class":187},"'488.00'",[34,80010,31929],{"class":59},[34,80012,80013,80015,80018],{"class":36,"line":33299},[34,80014,79882],{"class":59},[34,80016,80017],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[34,80019,31929],{"class":59},[34,80021,80022],{"class":36,"line":33305},[34,80023,78353],{"class":59},[34,80025,80026],{"class":36,"line":33314},[34,80027,79847],{"class":59},[34,80029,80030,80032,80035],{"class":36,"line":33320},[34,80031,79852],{"class":59},[34,80033,80034],{"class":187},"'4001649'",[34,80036,31929],{"class":59},[34,80038,80039,80041,80044],{"class":36,"line":33329},[34,80040,79862],{"class":59},[34,80042,80043],{"class":187},"'大师监制龙泉青瓷茶叶罐'",[34,80045,31929],{"class":59},[34,80047,80048,80050,80053],{"class":36,"line":33335},[34,80049,79872],{"class":59},[34,80051,80052],{"class":187},"'139.00'",[34,80054,31929],{"class":59},[34,80056,80057,80059,80062],{"class":36,"line":33341},[34,80058,79882],{"class":59},[34,80060,80061],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[34,80063,31929],{"class":59},[34,80065,80066],{"class":36,"line":33350},[34,80067,78353],{"class":59},[34,80069,80070],{"class":36,"line":33356},[34,80071,79847],{"class":59},[34,80073,80074,80076,80079],{"class":36,"line":33367},[34,80075,79852],{"class":59},[34,80077,80078],{"class":187},"'3997185'",[34,80080,31929],{"class":59},[34,80082,80083,80085,80088],{"class":36,"line":33373},[34,80084,79862],{"class":59},[34,80086,80087],{"class":187},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[34,80089,31929],{"class":59},[34,80091,80092,80094,80097],{"class":36,"line":33392},[34,80093,79872],{"class":59},[34,80095,80096],{"class":187},"'108.00'",[34,80098,31929],{"class":59},[34,80100,80101,80103,80106],{"class":36,"line":33398},[34,80102,79882],{"class":59},[34,80104,80105],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[34,80107,31929],{"class":59},[34,80109,80110],{"class":36,"line":33409},[34,80111,78353],{"class":59},[34,80113,80114],{"class":36,"line":33415},[34,80115,79847],{"class":59},[34,80117,80118,80120,80123],{"class":36,"line":33435},[34,80119,79852],{"class":59},[34,80121,80122],{"class":187},"'3997403'",[34,80124,31929],{"class":59},[34,80126,80127,80129,80132],{"class":36,"line":33451},[34,80128,79862],{"class":59},[34,80130,80131],{"class":187},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[34,80133,31929],{"class":59},[34,80135,80136,80138,80141],{"class":36,"line":33457},[34,80137,79872],{"class":59},[34,80139,80140],{"class":187},"'100.00'",[34,80142,31929],{"class":59},[34,80144,80145,80147,80150],{"class":36,"line":33471},[34,80146,79882],{"class":59},[34,80148,80149],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[34,80151,31929],{"class":59},[34,80153,80154],{"class":36,"line":33477},[34,80155,78353],{"class":59},[34,80157,80158],{"class":36,"line":33483},[34,80159,79847],{"class":59},[34,80161,80162,80164,80167],{"class":36,"line":33494},[34,80163,79852],{"class":59},[34,80165,80166],{"class":187},"'3998274'",[34,80168,31929],{"class":59},[34,80170,80171,80173,80176],{"class":36,"line":33500},[34,80172,79862],{"class":59},[34,80174,80175],{"class":187},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[34,80177,31929],{"class":59},[34,80179,80180,80182,80184],{"class":36,"line":33506},[34,80181,79872],{"class":59},[34,80183,80052],{"class":187},[34,80185,31929],{"class":59},[34,80187,80188,80190,80193],{"class":36,"line":33516},[34,80189,79882],{"class":59},[34,80191,80192],{"class":187},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[34,80194,31929],{"class":59},[34,80196,80197],{"class":36,"line":33522},[34,80198,78353],{"class":59},[34,80200,80201],{"class":36,"line":33533},[34,80202,53570],{"class":59},[34,80204,80205],{"class":36,"line":33539},[34,80206,2864],{"emptyLinePlaceholder":540},[34,80208,80209],{"class":36,"line":33549},[34,80210,80211],{"class":40},"    \u002F\u002F 1.渲染函数\n",[34,80213,80214,80216,80218,80220,80222],{"class":36,"line":33554},[34,80215,70545],{"class":112},[34,80217,70548],{"class":2427},[34,80219,617],{"class":59},[34,80221,4344],{"class":5680},[34,80223,12906],{"class":59},[34,80225,80226],{"class":36,"line":33560},[34,80227,80228],{"class":40},"      \u002F\u002F 声明空字符串\n",[34,80230,80231,80234,80237,80239],{"class":36,"line":33609},[34,80232,80233],{"class":112},"      let",[34,80235,80236],{"class":59}," str ",[34,80238,447],{"class":112},[34,80240,70565],{"class":187},[34,80242,80243],{"class":36,"line":33656},[34,80244,70570],{"class":40},[34,80246,80247,80249,80252,80254,80257,80260],{"class":36,"line":33661},[34,80248,58468],{"class":59},[34,80250,80251],{"class":2427},"forEach",[34,80253,617],{"class":59},[34,80255,80256],{"class":5680},"item",[34,80258,80259],{"class":112}," =>",[34,80261,16036],{"class":59},[34,80263,80264,80266,80269,80272,80274,80277,80279,80282,80285,80287],{"class":36,"line":33667},[34,80265,61731],{"class":112},[34,80267,80268],{"class":59}," { ",[34,80270,80271],{"class":63},"name",[34,80273,12899],{"class":59},[34,80275,80276],{"class":63},"price",[34,80278,12899],{"class":59},[34,80280,80281],{"class":63},"picture",[34,80283,80284],{"class":59}," } ",[34,80286,447],{"class":112},[34,80288,80289],{"class":59}," item\n",[34,80291,80292,80295,80297],{"class":36,"line":33686},[34,80293,80294],{"class":59},"        str ",[34,80296,9941],{"class":112},[34,80298,70629],{"class":187},[34,80300,80301],{"class":36,"line":33692},[34,80302,80303],{"class":187},"          \u003Cdiv class=\"item\">\n",[34,80305,80306,80309,80311],{"class":36,"line":33711},[34,80307,80308],{"class":187},"            \u003Cimg src=\"${",[34,80310,80281],{"class":59},[34,80312,80313],{"class":187},"}\" alt=\"\">\n",[34,80315,80316,80319,80321],{"class":36,"line":33717},[34,80317,80318],{"class":187},"            \u003Cp class=\"name\">${",[34,80320,80271],{"class":59},[34,80322,80323],{"class":187},"}\u003C\u002Fp>\n",[34,80325,80326,80329,80331],{"class":36,"line":33723},[34,80327,80328],{"class":187},"            \u003Cp class=\"price\">${",[34,80330,80276],{"class":59},[34,80332,80323],{"class":187},[34,80334,80335],{"class":36,"line":33733},[34,80336,80337],{"class":187},"          \u003C\u002Fdiv>\n",[34,80339,80340],{"class":36,"line":33738},[34,80341,80342],{"class":187},"        `\n",[34,80344,80345],{"class":36,"line":33744},[34,80346,65276],{"class":59},[34,80348,80349],{"class":36,"line":33760},[34,80350,80351],{"class":40},"      \u002F\u002F 追加给List\n",[34,80353,80354,80356,80358,80360,80363,80365,80367],{"class":36,"line":33805},[34,80355,56232],{"class":59},[34,80357,54860],{"class":2427},[34,80359,617],{"class":59},[34,80361,80362],{"class":187},"'.list'",[34,80364,74710],{"class":59},[34,80366,447],{"class":112},[34,80368,74446],{"class":59},[34,80370,80371],{"class":36,"line":33811},[34,80372,2651],{"class":59},[34,80374,80375],{"class":36,"line":33817},[34,80376,80377],{"class":40},"    \u002F\u002F 页面一打开就需要渲染\n",[34,80379,80380,80383],{"class":36,"line":33823},[34,80381,80382],{"class":2427},"    render",[34,80384,80385],{"class":59},"(goodsList)\n",[34,80387,80388],{"class":36,"line":33834},[34,80389,80390],{"class":40},"    \u002F\u002F 2.过滤筛选\n",[34,80392,80393,80395,80397,80399,80402,80404,80406,80408,80410,80412,80414,80416],{"class":36,"line":33840},[34,80394,52868],{"class":59},[34,80396,54860],{"class":2427},[34,80398,617],{"class":59},[34,80400,80401],{"class":187},"'.filter'",[34,80403,31289],{"class":59},[34,80405,58274],{"class":2427},[34,80407,617],{"class":59},[34,80409,58279],{"class":187},[34,80411,12899],{"class":59},[34,80413,687],{"class":5680},[34,80415,80259],{"class":112},[34,80417,16036],{"class":59},[34,80419,80420],{"class":36,"line":33846},[34,80421,80422],{"class":40},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[34,80424,80425,80427,80429,80432,80434,80436,80438,80440],{"class":36,"line":33852},[34,80426,58689],{"class":112},[34,80428,80268],{"class":59},[34,80430,80431],{"class":63},"tagName",[34,80433,12899],{"class":59},[34,80435,32000],{"class":63},[34,80437,80284],{"class":59},[34,80439,447],{"class":112},[34,80441,80442],{"class":59}," e.target\n",[34,80444,80445],{"class":36,"line":33870},[34,80446,80447],{"class":40},"      \u002F\u002F 判断\n",[34,80449,80450,80452,80454,80456,80458],{"class":36,"line":33884},[34,80451,54941],{"class":112},[34,80453,67495],{"class":59},[34,80455,54947],{"class":112},[34,80457,68717],{"class":187},[34,80459,12906],{"class":59},[34,80461,80462],{"class":36,"line":33893},[34,80463,80464],{"class":40},"        \u002F\u002F console.log(11)\n",[34,80466,80467],{"class":36,"line":33902},[34,80468,80469],{"class":40},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[34,80471,80472],{"class":36,"line":33911},[34,80473,80474],{"class":40},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[34,80476,80477,80479,80481,80483],{"class":36,"line":33920},[34,80478,52291],{"class":112},[34,80480,52294],{"class":59},[34,80482,447],{"class":112},[34,80484,80485],{"class":59}," goodsList\n",[34,80487,80488,80490,80493,80495,80498],{"class":36,"line":33926},[34,80489,2961],{"class":112},[34,80491,80492],{"class":59}," (dataset.index ",[34,80494,54947],{"class":112},[34,80496,80497],{"class":187}," '1'",[34,80499,12906],{"class":59},[34,80501,80502,80505,80507,80510,80513,80515,80517,80519,80522,80524,80526,80529,80531,80533,80535],{"class":36,"line":33932},[34,80503,80504],{"class":59},"          arr ",[34,80506,447],{"class":112},[34,80508,80509],{"class":59}," goodsList.",[34,80511,80512],{"class":2427},"filter",[34,80514,617],{"class":59},[34,80516,80256],{"class":5680},[34,80518,80259],{"class":112},[34,80520,80521],{"class":59}," item.price ",[34,80523,2174],{"class":112},[34,80525,4557],{"class":63},[34,80527,80528],{"class":112}," &&",[34,80530,80521],{"class":59},[34,80532,2059],{"class":112},[34,80534,6218],{"class":63},[34,80536,623],{"class":59},[34,80538,80539,80542,80544,80546,80548,80550,80553],{"class":36,"line":33940},[34,80540,80541],{"class":59},"        } ",[34,80543,2165],{"class":112},[34,80545,2168],{"class":112},[34,80547,80492],{"class":59},[34,80549,54947],{"class":112},[34,80551,80552],{"class":187}," '2'",[34,80554,12906],{"class":59},[34,80556,80557,80559,80561,80563,80565,80567,80569,80571,80573,80575,80577,80579,80581,80583,80586],{"class":36,"line":33945},[34,80558,80504],{"class":59},[34,80560,447],{"class":112},[34,80562,80509],{"class":59},[34,80564,80512],{"class":2427},[34,80566,617],{"class":59},[34,80568,80256],{"class":5680},[34,80570,80259],{"class":112},[34,80572,80521],{"class":59},[34,80574,2174],{"class":112},[34,80576,6218],{"class":63},[34,80578,80528],{"class":112},[34,80580,80521],{"class":59},[34,80582,2059],{"class":112},[34,80584,80585],{"class":63}," 300",[34,80587,623],{"class":59},[34,80589,80590,80592,80594,80596,80598,80600,80603],{"class":36,"line":33951},[34,80591,80541],{"class":59},[34,80593,2165],{"class":112},[34,80595,2168],{"class":112},[34,80597,80492],{"class":59},[34,80599,54947],{"class":112},[34,80601,80602],{"class":187}," '3'",[34,80604,12906],{"class":59},[34,80606,80607,80609,80611,80613,80615,80617,80619,80621,80623,80625,80627],{"class":36,"line":33962},[34,80608,80504],{"class":59},[34,80610,447],{"class":112},[34,80612,80509],{"class":59},[34,80614,80512],{"class":2427},[34,80616,617],{"class":59},[34,80618,80256],{"class":5680},[34,80620,80259],{"class":112},[34,80622,80521],{"class":59},[34,80624,2174],{"class":112},[34,80626,80585],{"class":63},[34,80628,623],{"class":59},[34,80630,80631],{"class":36,"line":33968},[34,80632,2993],{"class":59},[34,80634,80635],{"class":36,"line":33988},[34,80636,80637],{"class":40},"        \u002F\u002F 渲染函数\n",[34,80639,80640,80642],{"class":36,"line":33994},[34,80641,70869],{"class":2427},[34,80643,52873],{"class":59},[34,80645,80646],{"class":36,"line":34000},[34,80647,52859],{"class":59},[34,80649,80650],{"class":36,"line":34006},[34,80651,2864],{"emptyLinePlaceholder":540},[34,80653,80654],{"class":36,"line":34023},[34,80655,33923],{"class":59},[34,80657,80658,80660,80662],{"class":36,"line":34029},[34,80659,52878],{"class":59},[34,80661,52274],{"class":51761},[34,80663,51768],{"class":59},[34,80665,80666,80668,80670],{"class":36,"line":34035},[34,80667,52246],{"class":59},[34,80669,52261],{"class":51761},[34,80671,51768],{"class":59},[34,80673,80674],{"class":36,"line":34041},[34,80675,2864],{"emptyLinePlaceholder":540},[34,80677,80678,80680,80682],{"class":36,"line":34047},[34,80679,52246],{"class":59},[34,80681,51096],{"class":51761},[34,80683,51768],{"class":59},[555,80685,80687],{"id":80686},"_410-深入了解对象","4.10 深入了解对象",[584,80689,80691],{"id":80690},"_4101-创建对象","4.10.1 创建对象",[14,80693,80694],{},[20,80695],{"alt":22,"src":80696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80698,80699],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[584,80701,80703],{"id":80702},"_4102-构造函数","4.10.2 构造函数",[14,80705,80706,80709],{},[760,80707,80708],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80711,80712,80715],{},[760,80713,80714],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[25,80717,80719],{"className":51094,"code":80718,"language":51096,"meta":22,"style":22},"\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",[31,80720,80721,80729,80734,80755,80768,80780,80792,80796,80801,80828,80833,80860],{"__ignoreMap":22},[34,80722,80723,80725,80727],{"class":36,"line":37},[34,80724,1515],{"class":59},[34,80726,52274],{"class":51761},[34,80728,51768],{"class":59},[34,80730,80731],{"class":36,"line":44},[34,80732,80733],{"class":40},"\u002F\u002F例：\n",[34,80735,80736,80738,80741,80743,80745,80747,80749,80751,80753],{"class":36,"line":50},[34,80737,54910],{"class":112},[34,80739,80740],{"class":2427}," Pig",[34,80742,617],{"class":59},[34,80744,80271],{"class":5680},[34,80746,67],{"class":59},[34,80748,70682],{"class":5680},[34,80750,67],{"class":59},[34,80752,70699],{"class":5680},[34,80754,12906],{"class":59},[34,80756,80757,80760,80763,80765],{"class":36,"line":56},[34,80758,80759],{"class":63},"    this",[34,80761,80762],{"class":59},".name",[34,80764,447],{"class":112},[34,80766,80767],{"class":59},"name\n",[34,80769,80770,80772,80775,80777],{"class":36,"line":107},[34,80771,80759],{"class":63},[34,80773,80774],{"class":59},".age",[34,80776,447],{"class":112},[34,80778,80779],{"class":59},"age\n",[34,80781,80782,80784,80787,80789],{"class":36,"line":196},[34,80783,80759],{"class":63},[34,80785,80786],{"class":59},".gender",[34,80788,447],{"class":112},[34,80790,80791],{"class":59},"gender    \n",[34,80793,80794],{"class":36,"line":202},[34,80795,2036],{"class":59},[34,80797,80798],{"class":36,"line":207},[34,80799,80800],{"class":40},"\u002F\u002F创建佩奇对象\n",[34,80802,80803,80805,80808,80810,80812,80814,80817,80819,80821,80823,80826],{"class":36,"line":222},[34,80804,7256],{"class":112},[34,80806,80807],{"class":63}," Peppa",[34,80809,12181],{"class":112},[34,80811,80740],{"class":2427},[34,80813,617],{"class":59},[34,80815,80816],{"class":187},"'佩奇'",[34,80818,67],{"class":59},[34,80820,952],{"class":63},[34,80822,67],{"class":59},[34,80824,80825],{"class":187},"'女'",[34,80827,623],{"class":59},[34,80829,80830],{"class":36,"line":227},[34,80831,80832],{"class":40},"\u002F\u002F创建乔治对象\n",[34,80834,80835,80837,80840,80842,80844,80846,80849,80851,80853,80855,80858],{"class":36,"line":232},[34,80836,7256],{"class":112},[34,80838,80839],{"class":63}," George",[34,80841,12181],{"class":112},[34,80843,80740],{"class":2427},[34,80845,617],{"class":59},[34,80847,80848],{"class":187},"'乔治'",[34,80850,67],{"class":59},[34,80852,309],{"class":63},[34,80854,67],{"class":59},[34,80856,80857],{"class":187},"'男'",[34,80859,623],{"class":59},[34,80861,80862,80864,80866],{"class":36,"line":238},[34,80863,52246],{"class":59},[34,80865,52274],{"class":51761},[34,80867,51768],{"class":59},[14,80869,80870],{},[20,80871],{"alt":22,"src":80872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80874,80875],{},[20,80876],{"alt":22,"src":80877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80879,80880],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80882,80883],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80885,80886],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80888,80889],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80891,80892],{},"这里用等号是因为：对象.属性=值",[14,80894,80895],{},"①利用对象字面量创建对象",[14,80897,80898],{},"const o={",[14,80900,80901],{},"name:'pink'",[14,80903,80904],{},"} ②利用new Object创建对象",[14,80906,80907],{},"const o=new Object({name:'pink'})",[14,80909,80910],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80912,80913],{},"构造函数创建对象的执行过程：",[14,80915,80916],{},[20,80917],{"alt":22,"src":80918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[584,80920,80922],{"id":80921},"_4103-实例成员","4.10.3 实例成员",[14,80924,80925],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[567,80927,80928,80931,80934],{},[570,80929,80930],{},"实例对象的属性和方法即为实例成员",[570,80932,80933],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[570,80935,80936],{},"构造函数创建的实例对象彼此独立互不影响",[584,80938,80940],{"id":80939},"_4104-静态成员","4.10.4 静态成员",[14,80942,80943],{},[20,80944],{"alt":22,"src":80945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80947,80948],{},"静态成员有Date.now() Math.PI Math.random()",[14,80950,80951],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80953,80954],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80956,80957],{},"function Pig(name) n {",[14,80959,80960],{},"this.name=name",[14,80962,1550],{},[14,80964,80965],{},"Pig.eyes=2",[14,80967,80968],{},"Pig.sayHai=function () { console.log(this) }",[14,80970,80971],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80973,80974],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80976,11796],{},[567,80978,80979,80982,80985,80988,80991],{},[570,80980,80981],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[570,80983,80984],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[570,80986,80987],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[570,80989,80990],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[570,80992,80993],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80995,80996],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[584,80998,81000],{"id":80999},"_4105-内置构造函数","4.10.5 内置构造函数",[14,81002,81003],{},"内置构造函数包含：",[14,81005,81006],{},[20,81007],{"alt":22,"src":81008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,81010,81011],{},[20,81012],{"alt":22,"src":81013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,81015,81016],{},"这些基本数据类型，js对他们进行了包装",[52274,81018,81019],{},"\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",[22462,81021,81023],{"id":81022},"_41051-object","4.10.5.1 Object",[14,81025,81026],{},"Object 是内置的构造函数，用于创建普通对象",[14,81028,81029],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[25,81031,81033],{"className":51094,"code":81032,"language":51096,"meta":22,"style":22},"const user=new Object({name:'小明',age:15})\n",[31,81034,81035],{"__ignoreMap":22},[34,81036,81037],{"class":36,"line":37},[34,81038,81032],{"class":59},[14,81040,81041],{},"三个常用的静态方法：",[23374,81043,81045],{"id":81044},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81047,81048],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81050,81051],{},[20,81052],{"alt":22,"src":81053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81055,81056],{},[20,81057],{"alt":22,"src":81058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[25,81060,81062],{"className":53528,"code":81061,"language":53530,"meta":22,"style":22},"\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",[31,81063,81064,81072,81080,81085,81090,81095,81100,81105,81110,81118],{"__ignoreMap":22},[34,81065,81066,81068,81070],{"class":36,"line":37},[34,81067,1515],{"class":59},[34,81069,52261],{"class":51761},[34,81071,51768],{"class":59},[34,81073,81074,81076,81078],{"class":36,"line":44},[34,81075,52605],{"class":59},[34,81077,52274],{"class":51761},[34,81079,51768],{"class":59},[34,81081,81082],{"class":36,"line":50},[34,81083,81084],{"class":59},"    const o = { name: 'pink', age: 6 }\n",[34,81086,81087],{"class":36,"line":56},[34,81088,81089],{"class":59},"    \u002F\u002F 获得所有属性名\n",[34,81091,81092],{"class":36,"line":107},[34,81093,81094],{"class":59},"    const arr = Object.keys(o)\n",[34,81096,81097],{"class":36,"line":196},[34,81098,81099],{"class":59},"    console.log(arr)\n",[34,81101,81102],{"class":36,"line":202},[34,81103,81104],{"class":59},"    \u002F\u002F 获得所有属性值\n",[34,81106,81107],{"class":36,"line":207},[34,81108,81109],{"class":59},"    console.log(Object.values(o))\n",[34,81111,81112,81114,81116],{"class":36,"line":222},[34,81113,52878],{"class":59},[34,81115,52274],{"class":51761},[34,81117,51768],{"class":59},[34,81119,81120,81122,81124],{"class":36,"line":227},[34,81121,52246],{"class":59},[34,81123,52261],{"class":51761},[34,81125,51768],{"class":59},[23374,81127,81129],{"id":81128},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81131,81132],{},"Object.assign(oo,o)",[14,81134,81135],{},"后的东西添加给前 是追加",[14,81137,81138],{},[20,81139],{"alt":22,"src":81140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81142,81143],{},[20,81144],{"alt":22,"src":81145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[25,81147,81149],{"className":53528,"code":81148,"language":53530,"meta":22,"style":22},"\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",[31,81150,81151,81159,81167,81171,81175,81179,81183,81187,81191,81196,81201,81206,81211,81216,81224],{"__ignoreMap":22},[34,81152,81153,81155,81157],{"class":36,"line":37},[34,81154,1515],{"class":59},[34,81156,52261],{"class":51761},[34,81158,51768],{"class":59},[34,81160,81161,81163,81165],{"class":36,"line":44},[34,81162,52605],{"class":59},[34,81164,52274],{"class":51761},[34,81166,51768],{"class":59},[34,81168,81169],{"class":36,"line":50},[34,81170,81084],{"class":59},[34,81172,81173],{"class":36,"line":56},[34,81174,81089],{"class":59},[34,81176,81177],{"class":36,"line":107},[34,81178,81094],{"class":59},[34,81180,81181],{"class":36,"line":196},[34,81182,81099],{"class":59},[34,81184,81185],{"class":36,"line":202},[34,81186,81104],{"class":59},[34,81188,81189],{"class":36,"line":207},[34,81190,81109],{"class":59},[34,81192,81193],{"class":36,"line":222},[34,81194,81195],{"class":59},"    const oo = {}\n",[34,81197,81198],{"class":36,"line":227},[34,81199,81200],{"class":59},"    Object.assign(oo, o)\n",[34,81202,81203],{"class":36,"line":232},[34,81204,81205],{"class":59},"    console.log(oo)\n",[34,81207,81208],{"class":36,"line":238},[34,81209,81210],{"class":59},"    Object.assign(o, { gender: '女' })\n",[34,81212,81213],{"class":36,"line":244},[34,81214,81215],{"class":59},"    console.log(o)\n",[34,81217,81218,81220,81222],{"class":36,"line":250},[34,81219,52878],{"class":59},[34,81221,52274],{"class":51761},[34,81223,51768],{"class":59},[34,81225,81226,81228,81230],{"class":36,"line":256},[34,81227,52246],{"class":59},[34,81229,52261],{"class":51761},[34,81231,51768],{"class":59},[14,81233,81234],{},[20,81235],{"alt":22,"src":81236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22462,81238,81240],{"id":81239},"_41052-array","4.10.5.2 Array",[14,81242,81243],{},"Array 是内置的构造函数，用于创建数组",[14,81245,81246],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[25,81248,81250],{"className":51094,"code":81249,"language":51096,"meta":22,"style":22},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[31,81251,81252,81257],{"__ignoreMap":22},[34,81253,81254],{"class":36,"line":37},[34,81255,81256],{"class":59},"const arr=new Array(3,5)\n",[34,81258,81259],{"class":36,"line":44},[34,81260,81261],{"class":59},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81263,81264],{},"Array的实例方法，这个方法是实例成员",[14,81266,81267],{},[20,81268],{"alt":22,"src":81269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23374,81271,81273],{"id":81272},"_410521-reduce","4.10.5.2.1 reduce",[14,81275,81276],{},[20,81277],{"alt":22,"src":81278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[25,81280,81282],{"className":53528,"code":81281,"language":53530,"meta":22,"style":22},"\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",[31,81283,81284,81292,81300,81305,81310,81315,81320,81324,81329,81334,81339,81343,81348,81353,81357,81362,81367,81372,81380],{"__ignoreMap":22},[34,81285,81286,81288,81290],{"class":36,"line":37},[34,81287,1515],{"class":59},[34,81289,52261],{"class":51761},[34,81291,51768],{"class":59},[34,81293,81294,81296,81298],{"class":36,"line":44},[34,81295,52605],{"class":59},[34,81297,52274],{"class":51761},[34,81299,51768],{"class":59},[34,81301,81302],{"class":36,"line":50},[34,81303,81304],{"class":59},"    const arr = [1, 5, 8]\n",[34,81306,81307],{"class":36,"line":56},[34,81308,81309],{"class":59},"    \u002F\u002F 1.没有初始值\n",[34,81311,81312],{"class":36,"line":107},[34,81313,81314],{"class":59},"    const total = arr.reduce(function (prev, current) {\n",[34,81316,81317],{"class":36,"line":196},[34,81318,81319],{"class":59},"      return prev + current\n",[34,81321,81322],{"class":36,"line":202},[34,81323,33923],{"class":59},[34,81325,81326],{"class":36,"line":207},[34,81327,81328],{"class":59},"    console.log(total)   \u002F\u002F14\n",[34,81330,81331],{"class":36,"line":222},[34,81332,81333],{"class":59},"    \u002F\u002F 2.有初始值\n",[34,81335,81336],{"class":36,"line":227},[34,81337,81338],{"class":59},"    const total1 = arr.reduce(function (prev, current) {\n",[34,81340,81341],{"class":36,"line":232},[34,81342,81319],{"class":59},[34,81344,81345],{"class":36,"line":238},[34,81346,81347],{"class":59},"    }, 10)\n",[34,81349,81350],{"class":36,"line":244},[34,81351,81352],{"class":59},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[34,81354,81355],{"class":36,"line":250},[34,81356,2864],{"emptyLinePlaceholder":540},[34,81358,81359],{"class":36,"line":256},[34,81360,81361],{"class":59},"    \u002F\u002F 3.箭头函数写法\n",[34,81363,81364],{"class":36,"line":261},[34,81365,81366],{"class":59},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[34,81368,81369],{"class":36,"line":267},[34,81370,81371],{"class":59},"    console.log(total2)   \u002F\u002F24\n",[34,81373,81374,81376,81378],{"class":36,"line":2138},[34,81375,52878],{"class":59},[34,81377,52274],{"class":51761},[34,81379,51768],{"class":59},[34,81381,81382,81384,81386],{"class":36,"line":2143},[34,81383,52246],{"class":59},[34,81385,52261],{"class":51761},[34,81387,51768],{"class":59},[14,81389,81390],{},"执行过程：",[567,81392,81393,81396,81399],{},[570,81394,81395],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[570,81397,81398],{},"每一次循环，把返回值给作为下一次循环的上一次值",[570,81400,81401],{},"如果有起始值，则起始值作为上一次值",[25,81403,81405],{"className":53528,"code":81404,"language":53530,"meta":22,"style":22},"\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",[31,81406,81407,81415,81423,81427,81431,81435,81439,81443,81447,81452,81457,81462,81467,81472,81476,81480,81484,81488,81492,81496,81501,81505,81510,81514,81519,81524,81528,81532,81536,81544],{"__ignoreMap":22},[34,81408,81409,81411,81413],{"class":36,"line":37},[34,81410,1515],{"class":59},[34,81412,52261],{"class":51761},[34,81414,51768],{"class":59},[34,81416,81417,81419,81421],{"class":36,"line":44},[34,81418,52605],{"class":59},[34,81420,52274],{"class":51761},[34,81422,51768],{"class":59},[34,81424,81425],{"class":36,"line":50},[34,81426,81304],{"class":59},[34,81428,81429],{"class":36,"line":56},[34,81430,81309],{"class":59},[34,81432,81433],{"class":36,"line":107},[34,81434,81314],{"class":59},[34,81436,81437],{"class":36,"line":196},[34,81438,81319],{"class":59},[34,81440,81441],{"class":36,"line":202},[34,81442,33923],{"class":59},[34,81444,81445],{"class":36,"line":207},[34,81446,81328],{"class":59},[34,81448,81449],{"class":36,"line":222},[34,81450,81451],{"class":59},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[34,81453,81454],{"class":36,"line":227},[34,81455,81456],{"class":59},"    \u002F\u002F     1              5                    6\n",[34,81458,81459],{"class":36,"line":232},[34,81460,81461],{"class":59},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[34,81463,81464],{"class":36,"line":238},[34,81465,81466],{"class":59},"    \u002F\u002F     6              8                    14\n",[34,81468,81469],{"class":36,"line":244},[34,81470,81471],{"class":59},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[34,81473,81474],{"class":36,"line":250},[34,81475,81333],{"class":59},[34,81477,81478],{"class":36,"line":256},[34,81479,81338],{"class":59},[34,81481,81482],{"class":36,"line":261},[34,81483,81319],{"class":59},[34,81485,81486],{"class":36,"line":267},[34,81487,81347],{"class":59},[34,81489,81490],{"class":36,"line":2138},[34,81491,81352],{"class":59},[34,81493,81494],{"class":36,"line":2143},[34,81495,81451],{"class":59},[34,81497,81498],{"class":36,"line":2157},[34,81499,81500],{"class":59},"    \u002F\u002F     10             1                     11\n",[34,81502,81503],{"class":36,"line":2162},[34,81504,81461],{"class":59},[34,81506,81507],{"class":36,"line":2191},[34,81508,81509],{"class":59},"    \u002F\u002F     11             5                    16\n",[34,81511,81512],{"class":36,"line":2196},[34,81513,81461],{"class":59},[34,81515,81516],{"class":36,"line":2213},[34,81517,81518],{"class":59},"    \u002F\u002F     16             8                    24\n",[34,81520,81521],{"class":36,"line":2218},[34,81522,81523],{"class":59},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[34,81525,81526],{"class":36,"line":2223},[34,81527,81361],{"class":59},[34,81529,81530],{"class":36,"line":2228},[34,81531,81366],{"class":59},[34,81533,81534],{"class":36,"line":2242},[34,81535,81371],{"class":59},[34,81537,81538,81540,81542],{"class":36,"line":2247},[34,81539,52878],{"class":59},[34,81541,52274],{"class":51761},[34,81543,51768],{"class":59},[34,81545,81546,81548,81550],{"class":36,"line":3041},[34,81547,52246],{"class":59},[34,81549,52261],{"class":51761},[34,81551,51768],{"class":59},[23374,81553,81555],{"id":81554},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81557,81558],{},[20,81559],{"alt":22,"src":81560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[25,81562,81564],{"className":53528,"code":81563,"language":53530,"meta":22,"style":22},"\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",[31,81565,81566,81574,81582,81587,81592,81597,81602,81606,81611,81616,81621,81626,81631,81636,81640,81645,81649,81654,81662],{"__ignoreMap":22},[34,81567,81568,81570,81572],{"class":36,"line":37},[34,81569,1515],{"class":59},[34,81571,52261],{"class":51761},[34,81573,51768],{"class":59},[34,81575,81576,81578,81580],{"class":36,"line":44},[34,81577,52605],{"class":59},[34,81579,52274],{"class":51761},[34,81581,51768],{"class":59},[34,81583,81584],{"class":36,"line":50},[34,81585,81586],{"class":59},"    const arr = [\n",[34,81588,81589],{"class":36,"line":56},[34,81590,81591],{"class":59},"      { name: '张三', salary: 10000 },\n",[34,81593,81594],{"class":36,"line":107},[34,81595,81596],{"class":59},"      { name: '李四', salary: 10000 },\n",[34,81598,81599],{"class":36,"line":196},[34,81600,81601],{"class":59},"      { name: '王五', salary: 10000 }\n",[34,81603,81604],{"class":36,"line":202},[34,81605,53570],{"class":59},[34,81607,81608],{"class":36,"line":207},[34,81609,81610],{"class":59},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[34,81612,81613],{"class":36,"line":222},[34,81614,81615],{"class":59},"    \u002F\u002F prev是累计值\n",[34,81617,81618],{"class":36,"line":227},[34,81619,81620],{"class":59},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[34,81622,81623],{"class":36,"line":232},[34,81624,81625],{"class":59},"    console.log(total)\n",[34,81627,81628],{"class":36,"line":238},[34,81629,81630],{"class":59},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[34,81632,81633],{"class":36,"line":244},[34,81634,81635],{"class":59},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[34,81637,81638],{"class":36,"line":250},[34,81639,81630],{"class":59},[34,81641,81642],{"class":36,"line":256},[34,81643,81644],{"class":59},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[34,81646,81647],{"class":36,"line":261},[34,81648,81630],{"class":59},[34,81650,81651],{"class":36,"line":267},[34,81652,81653],{"class":59},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[34,81655,81656,81658,81660],{"class":36,"line":2138},[34,81657,52878],{"class":59},[34,81659,52274],{"class":51761},[34,81661,51768],{"class":59},[34,81663,81664,81666,81668],{"class":36,"line":2143},[34,81665,52246],{"class":59},[34,81667,52261],{"class":51761},[34,81669,51768],{"class":59},[23374,81671,81673],{"id":81672},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81675,81676],{},[20,81677],{"alt":22,"src":81678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81680,81681],{},[20,81682],{"alt":22,"src":81683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[567,81685,81686],{},[570,81687,81688],{},"find()",[14,81690,81691],{},"循环查找，找到第一个就ok",[14,81693,81694],{},[847,81695,81698],{"href":81696,"rel":81697},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24329],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[25,81700,81702],{"className":51094,"code":81701,"language":51096,"meta":22,"style":22},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[31,81703,81704,81709,81714],{"__ignoreMap":22},[34,81705,81706],{"class":36,"line":37},[34,81707,81708],{"class":59},"const array1 = [5, 12, 8, 130, 44]\n",[34,81710,81711],{"class":36,"line":44},[34,81712,81713],{"class":59},"const found = array1.find((element) => element > 10)\n",[34,81715,81716],{"class":36,"line":50},[34,81717,81718],{"class":59},"console.log(found)  \u002F\u002F12\n",[14,81720,81721,81723,81724,81729,81730,81733,81734,81736,81737,81742,81743,81745,81746,81748,81749,81751,81752],{},[31,81722,81688],{}," 方法是一个",[847,81725,81728],{"href":81726,"rel":81727},"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",[24329],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[31,81731,81732],{},"callbackFn"," 函数，直到 ",[31,81735,81732],{}," 返回一个",[847,81738,81741],{"href":81739,"rel":81740},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24329],"真值","。然后 ",[31,81744,81688],{}," 返回该元素并停止迭代数组。如果 ",[31,81747,81732],{}," 从未返回真值，则 ",[31,81750,81688],{}," 返回 ",[31,81753,81754],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[25,81756,81758],{"className":53528,"code":81757,"language":53530,"meta":22,"style":22},"\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",[31,81759,81760,81768,81776,81781,81786,81791,81795,81800,81805,81809,81814,81819,81823,81827,81832,81837,81841,81845,81850,81855,81860,81865,81870,81874,81879,81884,81889,81894,81898,81903,81911],{"__ignoreMap":22},[34,81761,81762,81764,81766],{"class":36,"line":37},[34,81763,1515],{"class":59},[34,81765,52261],{"class":51761},[34,81767,51768],{"class":59},[34,81769,81770,81772,81774],{"class":36,"line":44},[34,81771,52605],{"class":59},[34,81773,52274],{"class":51761},[34,81775,51768],{"class":59},[34,81777,81778],{"class":36,"line":50},[34,81779,81780],{"class":59},"    const arr = ['red', 'blue', 'green']\n",[34,81782,81783],{"class":36,"line":56},[34,81784,81785],{"class":59},"    const found = arr.find(item => item === 'pink')\n",[34,81787,81788],{"class":36,"line":107},[34,81789,81790],{"class":59},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[34,81792,81793],{"class":36,"line":196},[34,81794,2864],{"emptyLinePlaceholder":540},[34,81796,81797],{"class":36,"line":202},[34,81798,81799],{"class":59},"    \u002F\u002F 使用场景，用于查找数据\n",[34,81801,81802],{"class":36,"line":207},[34,81803,81804],{"class":59},"    const arr1 = [\n",[34,81806,81807],{"class":36,"line":222},[34,81808,79847],{"class":59},[34,81810,81811],{"class":36,"line":227},[34,81812,81813],{"class":59},"        name: '小米',\n",[34,81815,81816],{"class":36,"line":232},[34,81817,81818],{"class":59},"        price: 1999\n",[34,81820,81821],{"class":36,"line":238},[34,81822,78353],{"class":59},[34,81824,81825],{"class":36,"line":244},[34,81826,79847],{"class":59},[34,81828,81829],{"class":36,"line":250},[34,81830,81831],{"class":59},"        name: '华为',\n",[34,81833,81834],{"class":36,"line":256},[34,81835,81836],{"class":59},"        price: 3999\n",[34,81838,81839],{"class":36,"line":261},[34,81840,52859],{"class":59},[34,81842,81843],{"class":36,"line":267},[34,81844,53570],{"class":59},[34,81846,81847],{"class":36,"line":2138},[34,81848,81849],{"class":59},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[34,81851,81852],{"class":36,"line":2143},[34,81853,81854],{"class":59},"    \u002F\u002F const found1 = arr1.find(item => {\n",[34,81856,81857],{"class":36,"line":2157},[34,81858,81859],{"class":59},"    \u002F\u002F   if (item.name === '小米') {\n",[34,81861,81862],{"class":36,"line":2162},[34,81863,81864],{"class":59},"    \u002F\u002F     return item\n",[34,81866,81867],{"class":36,"line":2191},[34,81868,81869],{"class":59},"    \u002F\u002F   }\n",[34,81871,81872],{"class":36,"line":2196},[34,81873,63751],{"class":59},[34,81875,81876],{"class":36,"line":2213},[34,81877,81878],{"class":59},"    \u002F\u002F 另一种写法\n",[34,81880,81881],{"class":36,"line":2218},[34,81882,81883],{"class":59},"    const found1 = arr1.find(item => {\n",[34,81885,81886],{"class":36,"line":2223},[34,81887,81888],{"class":59},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[34,81890,81891],{"class":36,"line":2228},[34,81892,81893],{"class":59},"      return item.name = '小米'\n",[34,81895,81896],{"class":36,"line":2242},[34,81897,33923],{"class":59},[34,81899,81900],{"class":36,"line":2247},[34,81901,81902],{"class":59},"    console.log(found1)\n",[34,81904,81905,81907,81909],{"class":36,"line":3041},[34,81906,52878],{"class":59},[34,81908,52274],{"class":51761},[34,81910,51768],{"class":59},[34,81912,81913,81915,81917],{"class":36,"line":3055},[34,81914,52246],{"class":59},[34,81916,52261],{"class":51761},[34,81918,51768],{"class":59},[14,81920,81921],{},[20,81922],{"alt":22,"src":81923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81925,81926],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[567,81928,81929],{"start":44},[570,81930,81931],{},"every()返回的是布尔值",[14,81933,81934],{},[847,81935,81938],{"href":81936,"rel":81937},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24329],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81940,81941],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81943,81944],{},"some是只有有一个就没问题",[14,81946,81947],{},"every是必须全是才行",[25,81949,81953],{"className":81950,"code":81951,"language":81952,"meta":22,"style":22},"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",[31,81954,81955,81971,81985,81989,81998],{"__ignoreMap":22},[34,81956,81957,81959,81962,81964,81966,81969],{"class":36,"line":37},[34,81958,54910],{"class":112},[34,81960,81961],{"class":59}," isBigEnough(element, ",[34,81963,74519],{"class":112},[34,81965,12899],{"class":59},[34,81967,81968],{"class":112},"array",[34,81970,12906],{"class":59},[34,81972,81973,81976,81979,81981,81983],{"class":36,"line":44},[34,81974,81975],{"class":112},"  return",[34,81977,81978],{"class":59}," element ",[34,81980,2174],{"class":112},[34,81982,2502],{"class":63},[34,81984,1765],{"class":59},[34,81986,81987],{"class":36,"line":50},[34,81988,2036],{"class":59},[34,81990,81991,81994,81996],{"class":36,"line":56},[34,81992,81993],{"class":59},"[12, 5, 8, 130, 44].every(isBigEnough); ",[34,81995,33791],{"class":112},[34,81997,54977],{"class":59},[34,81999,82000,82003,82005],{"class":36,"line":107},[34,82001,82002],{"class":59},"[12, 54, 18, 130, 44].every(isBigEnough); ",[34,82004,33791],{"class":112},[34,82006,58401],{"class":59},[25,82008,82010],{"className":53528,"code":82009,"language":53530,"meta":22,"style":22},"\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",[31,82011,82012,82020,82028,82033,82037,82042,82047,82055],{"__ignoreMap":22},[34,82013,82014,82016,82018],{"class":36,"line":37},[34,82015,1515],{"class":59},[34,82017,52261],{"class":51761},[34,82019,51768],{"class":59},[34,82021,82022,82024,82026],{"class":36,"line":44},[34,82023,52605],{"class":59},[34,82025,52274],{"class":51761},[34,82027,51768],{"class":59},[34,82029,82030],{"class":36,"line":50},[34,82031,82032],{"class":59},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[34,82034,82035],{"class":36,"line":56},[34,82036,78783],{"class":59},[34,82038,82039],{"class":36,"line":107},[34,82040,82041],{"class":59},"    const flag = arr.every(item => item >= 10)\n",[34,82043,82044],{"class":36,"line":196},[34,82045,82046],{"class":59},"    console.log(flag)    \u002F\u002Ftrue\n",[34,82048,82049,82051,82053],{"class":36,"line":202},[34,82050,52878],{"class":59},[34,82052,52274],{"class":51761},[34,82054,51768],{"class":59},[34,82056,82057,82059,82061],{"class":36,"line":207},[34,82058,52246],{"class":59},[34,82060,52261],{"class":51761},[34,82062,51768],{"class":59},[25,82064,82066],{"className":53528,"code":82065,"language":53530,"meta":22,"style":22},"\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",[31,82067,82068,82076,82084,82088,82093,82098,82103,82111],{"__ignoreMap":22},[34,82069,82070,82072,82074],{"class":36,"line":37},[34,82071,1515],{"class":59},[34,82073,52261],{"class":51761},[34,82075,51768],{"class":59},[34,82077,82078,82080,82082],{"class":36,"line":44},[34,82079,52605],{"class":59},[34,82081,52274],{"class":51761},[34,82083,51768],{"class":59},[34,82085,82086],{"class":36,"line":50},[34,82087,82032],{"class":59},[34,82089,82090],{"class":36,"line":56},[34,82091,82092],{"class":59},"    const arr = [10, 0, 5]\n",[34,82094,82095],{"class":36,"line":107},[34,82096,82097],{"class":59},"    const flag = arr.some(item => item >= 10)\n",[34,82099,82100],{"class":36,"line":196},[34,82101,82102],{"class":59},"    console.log(flag)   \u002F\u002Ftrue\n",[34,82104,82105,82107,82109],{"class":36,"line":202},[34,82106,52878],{"class":59},[34,82108,52274],{"class":51761},[34,82110,51768],{"class":59},[34,82112,82113,82115,82117],{"class":36,"line":207},[34,82114,52246],{"class":59},[34,82116,52261],{"class":51761},[34,82118,51768],{"class":59},[23374,82120,82122],{"id":82121},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82124,82125],{},[20,82126],{"alt":22,"src":82127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[25,82129,82131],{"className":51094,"code":82130,"language":51096,"meta":22,"style":22},"\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",[31,82132,82133,82143,82157,82161,82169,82183,82203,82215,82223,82230,82242,82254,82266,82278,82288,82298,82302,82310,82318,82322,82330,82342,82350,82372,82377,82382,82415,82423,82431,82435],{"__ignoreMap":22},[34,82134,82135,82137,82139,82141],{"class":36,"line":37},[34,82136,51758],{"class":59},[34,82138,51762],{"class":51761},[34,82140,51765],{"class":2427},[34,82142,51768],{"class":59},[34,82144,82145,82147,82149,82151,82153,82155],{"class":36,"line":44},[34,82146,1515],{"class":59},[34,82148,51096],{"class":51761},[34,82150,51777],{"class":2427},[34,82152,447],{"class":59},[34,82154,51782],{"class":187},[34,82156,51768],{"class":59},[34,82158,82159],{"class":36,"line":50},[34,82160,2864],{"emptyLinePlaceholder":540},[34,82162,82163,82165,82167],{"class":36,"line":56},[34,82164,1515],{"class":59},[34,82166,51795],{"class":51761},[34,82168,51768],{"class":59},[34,82170,82171,82173,82175,82177,82179,82181],{"class":36,"line":107},[34,82172,52605],{"class":59},[34,82174,51805],{"class":51761},[34,82176,51808],{"class":2427},[34,82178,447],{"class":59},[34,82180,51813],{"class":187},[34,82182,51768],{"class":59},[34,82184,82185,82187,82189,82191,82193,82195,82197,82199,82201],{"class":36,"line":196},[34,82186,52605],{"class":59},[34,82188,51805],{"class":51761},[34,82190,15384],{"class":2427},[34,82192,447],{"class":59},[34,82194,51852],{"class":187},[34,82196,51832],{"class":2427},[34,82198,447],{"class":59},[34,82200,51859],{"class":187},[34,82202,51768],{"class":59},[34,82204,82205,82207,82209,82211,82213],{"class":36,"line":202},[34,82206,52605],{"class":59},[34,82208,51868],{"class":51761},[34,82210,51871],{"class":59},[34,82212,51868],{"class":51761},[34,82214,51768],{"class":59},[34,82216,82217,82219,82221],{"class":36,"line":207},[34,82218,52605],{"class":59},[34,82220,532],{"class":51761},[34,82222,51768],{"class":59},[34,82224,82225,82228],{"class":36,"line":222},[34,82226,82227],{"class":51761},"    div",[34,82229,16036],{"class":59},[34,82231,82232,82234,82236,82238,82240],{"class":36,"line":227},[34,82233,55232],{"class":63},[34,82235,51898],{"class":59},[34,82237,2186],{"class":63},[34,82239,51953],{"class":112},[34,82241,1765],{"class":59},[34,82243,82244,82246,82248,82250,82252],{"class":36,"line":232},[34,82245,55246],{"class":63},[34,82247,51898],{"class":59},[34,82249,1008],{"class":63},[34,82251,51953],{"class":112},[34,82253,1765],{"class":59},[34,82255,82256,82258,82260,82262,82264],{"class":36,"line":238},[34,82257,57820],{"class":63},[34,82259,51898],{"class":59},[34,82261,1008],{"class":63},[34,82263,51953],{"class":112},[34,82265,1765],{"class":59},[34,82267,82268,82270,82272,82274,82276],{"class":36,"line":244},[34,82269,65594],{"class":63},[34,82271,51898],{"class":59},[34,82273,1105],{"class":63},[34,82275,51953],{"class":112},[34,82277,1765],{"class":59},[34,82279,82280,82282,82284,82286],{"class":36,"line":250},[34,82281,57747],{"class":63},[34,82283,51898],{"class":59},[34,82285,52053],{"class":63},[34,82287,1765],{"class":59},[34,82289,82290,82292,82294,82296],{"class":36,"line":256},[34,82291,55345],{"class":63},[34,82293,51898],{"class":59},[34,82295,52106],{"class":63},[34,82297,1765],{"class":59},[34,82299,82300],{"class":36,"line":261},[34,82301,2651],{"class":59},[34,82303,82304,82306,82308],{"class":36,"line":267},[34,82305,52878],{"class":59},[34,82307,532],{"class":51761},[34,82309,51768],{"class":59},[34,82311,82312,82314,82316],{"class":36,"line":2138},[34,82313,52246],{"class":59},[34,82315,51795],{"class":51761},[34,82317,51768],{"class":59},[34,82319,82320],{"class":36,"line":2143},[34,82321,2864],{"emptyLinePlaceholder":540},[34,82323,82324,82326,82328],{"class":36,"line":2157},[34,82325,1515],{"class":59},[34,82327,52261],{"class":51761},[34,82329,51768],{"class":59},[34,82331,82332,82334,82336,82338,82340],{"class":36,"line":2162},[34,82333,52605],{"class":59},[34,82335,52072],{"class":51761},[34,82337,55775],{"class":59},[34,82339,52072],{"class":51761},[34,82341,51768],{"class":59},[34,82343,82344,82346,82348],{"class":36,"line":2191},[34,82345,52605],{"class":59},[34,82347,52274],{"class":51761},[34,82349,51768],{"class":59},[34,82351,82352,82354,82357,82359,82362,82365,82367,82370],{"class":36,"line":2196},[34,82353,11685],{"class":112},[34,82355,82356],{"class":63}," spec",[34,82358,14028],{"class":112},[34,82360,82361],{"class":59}," { size: ",[34,82363,82364],{"class":187},"'40cm*40cm'",[34,82366,55925],{"class":59},[34,82368,82369],{"class":187},"'黑色'",[34,82371,56065],{"class":59},[34,82373,82374],{"class":36,"line":2213},[34,82375,82376],{"class":40},"    \u002F\u002F const arr = Object.values(spec)\n",[34,82378,82379],{"class":36,"line":2218},[34,82380,82381],{"class":40},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[34,82383,82384,82386,82388,82390,82393,82395,82397,82400,82403,82406,82408,82410,82413],{"class":36,"line":2223},[34,82385,52868],{"class":59},[34,82387,54860],{"class":2427},[34,82389,617],{"class":59},[34,82391,82392],{"class":187},"'div'",[34,82394,74710],{"class":59},[34,82396,447],{"class":112},[34,82398,82399],{"class":59}," Object.",[34,82401,82402],{"class":2427},"values",[34,82404,82405],{"class":59},"(spec).",[34,82407,74684],{"class":2427},[34,82409,617],{"class":59},[34,82411,82412],{"class":187},"'\u002F'",[34,82414,623],{"class":59},[34,82416,82417,82419,82421],{"class":36,"line":2228},[34,82418,52878],{"class":59},[34,82420,52274],{"class":51761},[34,82422,51768],{"class":59},[34,82424,82425,82427,82429],{"class":36,"line":2242},[34,82426,52246],{"class":59},[34,82428,52261],{"class":51761},[34,82430,51768],{"class":59},[34,82432,82433],{"class":36,"line":2247},[34,82434,2864],{"emptyLinePlaceholder":540},[34,82436,82437,82439,82441],{"class":36,"line":3041},[34,82438,52246],{"class":59},[34,82440,51096],{"class":51761},[34,82442,51768],{"class":59},[14,82444,82445],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23374,82447,82449],{"id":82448},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82451,82452],{},"静态方法，将伪数组转换为真数组",[14,82454,82455],{},[20,82456],{"alt":22,"src":82457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[25,82459,82461],{"className":53528,"code":82460,"language":53530,"meta":22,"style":22},"\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",[31,82462,82463,82471,82479,82491,82503,82515,82523,82531,82536,82541,82546,82551,82559],{"__ignoreMap":22},[34,82464,82465,82467,82469],{"class":36,"line":37},[34,82466,1515],{"class":59},[34,82468,52261],{"class":51761},[34,82470,51768],{"class":59},[34,82472,82473,82475,82477],{"class":36,"line":44},[34,82474,52605],{"class":59},[34,82476,1611],{"class":51761},[34,82478,51768],{"class":59},[34,82480,82481,82483,82485,82487,82489],{"class":36,"line":50},[34,82482,51802],{"class":59},[34,82484,570],{"class":51761},[34,82486,55775],{"class":59},[34,82488,570],{"class":51761},[34,82490,51768],{"class":59},[34,82492,82493,82495,82497,82499,82501],{"class":36,"line":56},[34,82494,51802],{"class":59},[34,82496,570],{"class":51761},[34,82498,55775],{"class":59},[34,82500,570],{"class":51761},[34,82502,51768],{"class":59},[34,82504,82505,82507,82509,82511,82513],{"class":36,"line":107},[34,82506,51802],{"class":59},[34,82508,570],{"class":51761},[34,82510,55775],{"class":59},[34,82512,570],{"class":51761},[34,82514,51768],{"class":59},[34,82516,82517,82519,82521],{"class":36,"line":196},[34,82518,52878],{"class":59},[34,82520,1611],{"class":51761},[34,82522,51768],{"class":59},[34,82524,82525,82527,82529],{"class":36,"line":202},[34,82526,52605],{"class":59},[34,82528,52274],{"class":51761},[34,82530,51768],{"class":59},[34,82532,82533],{"class":36,"line":207},[34,82534,82535],{"class":59},"    const lis = document.querySelectorAll('li')\n",[34,82537,82538],{"class":36,"line":222},[34,82539,82540],{"class":59},"    const liss = Array.from(lis)\n",[34,82542,82543],{"class":36,"line":227},[34,82544,82545],{"class":59},"    liss.pop()\n",[34,82547,82548],{"class":36,"line":232},[34,82549,82550],{"class":59},"    console.log(liss)\n",[34,82552,82553,82555,82557],{"class":36,"line":238},[34,82554,52878],{"class":59},[34,82556,52274],{"class":51761},[34,82558,51768],{"class":59},[34,82560,82561,82563,82565],{"class":36,"line":244},[34,82562,52246],{"class":59},[34,82564,52261],{"class":51761},[34,82566,51768],{"class":59},[14,82568,82569],{},[20,82570],{"alt":22,"src":82571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22462,82573,82575],{"id":82574},"_41053-string","4.10.5.3 String",[14,82577,82578],{},[20,82579],{"alt":22,"src":82580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23374,82582,82584],{"id":82583},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[25,82586,82588],{"className":53528,"code":82587,"language":53530,"meta":22,"style":22},"\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",[31,82589,82590,82598,82606,82611,82616,82621,82625,82630,82635,82640,82648],{"__ignoreMap":22},[34,82591,82592,82594,82596],{"class":36,"line":37},[34,82593,1515],{"class":59},[34,82595,52261],{"class":51761},[34,82597,51768],{"class":59},[34,82599,82600,82602,82604],{"class":36,"line":44},[34,82601,52605],{"class":59},[34,82603,52274],{"class":51761},[34,82605,51768],{"class":59},[34,82607,82608],{"class":36,"line":50},[34,82609,82610],{"class":59},"    \u002F\u002F 把字符串转化为数组\n",[34,82612,82613],{"class":36,"line":56},[34,82614,82615],{"class":59},"    const str = 'pink,red'\n",[34,82617,82618],{"class":36,"line":107},[34,82619,82620],{"class":59},"    const arr = str.split(',')\n",[34,82622,82623],{"class":36,"line":196},[34,82624,81099],{"class":59},[34,82626,82627],{"class":36,"line":202},[34,82628,82629],{"class":59},"    const str1 = '2025-8-25'\n",[34,82631,82632],{"class":36,"line":207},[34,82633,82634],{"class":59},"    const arr1 = str1.split('-')\n",[34,82636,82637],{"class":36,"line":222},[34,82638,82639],{"class":59},"    console.log(arr1)\n",[34,82641,82642,82644,82646],{"class":36,"line":227},[34,82643,52878],{"class":59},[34,82645,52274],{"class":51761},[34,82647,51768],{"class":59},[34,82649,82650,82652,82654],{"class":36,"line":232},[34,82651,52246],{"class":59},[34,82653,52261],{"class":51761},[34,82655,51768],{"class":59},[23374,82657,82659],{"id":82658},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82661,5645],{},[14,82663,82664],{},"substring(indexStart)",[14,82666,82667],{},"substring(indexStart, indexEnd)",[1611,82669,82670,82681,82693,82703],{},[570,82671,82672,82673,82676,82677,82680],{},"如果省略了 ",[31,82674,82675],{},"indexEnd","，则 ",[31,82678,82679],{},"substring()"," 提取字符直到字符串的末尾",[570,82682,82683,82684,82687,82688,82676,82690,82692],{},"如果 ",[31,82685,82686],{},"indexStart"," 等于 ",[31,82689,82675],{},[31,82691,82679],{}," 返回一个空字符串",[570,82694,82683,82695,82697,82698,82676,82700,82702],{},[31,82696,82686],{}," 大于 ",[31,82699,82675],{},[31,82701,82679],{}," 的效果就像交换了这两个参数一样",[570,82704,82705],{},"结束的索引号不包含想要截取的部分",[25,82707,82709],{"className":81950,"code":82708,"language":81952,"meta":22,"style":22},"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",[31,82710,82711,82723,82727,82761,82791,82795,82826,82830,82857,82887,82917,82921,82952],{"__ignoreMap":22},[34,82712,82713,82716,82718,82721],{"class":36,"line":37},[34,82714,82715],{"class":59},"const anyString ",[34,82717,447],{"class":112},[34,82719,82720],{"class":187}," \"Mozilla\"",[34,82722,1765],{"class":59},[34,82724,82725],{"class":36,"line":44},[34,82726,2864],{"emptyLinePlaceholder":540},[34,82728,82729,82732,82734,82736,82738,82741,82743,82746,82748,82750,82752,82754,82756,82758],{"class":36,"line":50},[34,82730,82731],{"class":63},"console",[34,82733,1164],{"class":59},[34,82735,58708],{"class":63},[34,82737,617],{"class":59},[34,82739,82740],{"class":63},"anyString",[34,82742,1164],{"class":59},[34,82744,82745],{"class":63},"substring",[34,82747,617],{"class":59},[34,82749,319],{"class":63},[34,82751,12899],{"class":59},[34,82753,64],{"class":63},[34,82755,75714],{"class":59},[34,82757,33791],{"class":112},[34,82759,82760],{"class":187}," 'M'\n",[34,82762,82763,82765,82767,82769,82771,82773,82775,82777,82779,82781,82783,82785,82787,82789],{"class":36,"line":56},[34,82764,82731],{"class":63},[34,82766,1164],{"class":59},[34,82768,58708],{"class":63},[34,82770,617],{"class":59},[34,82772,82740],{"class":63},[34,82774,1164],{"class":59},[34,82776,82745],{"class":63},[34,82778,617],{"class":59},[34,82780,64],{"class":63},[34,82782,12899],{"class":59},[34,82784,319],{"class":63},[34,82786,75714],{"class":59},[34,82788,33791],{"class":112},[34,82790,82760],{"class":187},[34,82792,82793],{"class":36,"line":107},[34,82794,2864],{"emptyLinePlaceholder":540},[34,82796,82797,82799,82801,82803,82805,82807,82809,82811,82813,82815,82817,82819,82821,82823],{"class":36,"line":196},[34,82798,82731],{"class":63},[34,82800,1164],{"class":59},[34,82802,58708],{"class":63},[34,82804,617],{"class":59},[34,82806,82740],{"class":63},[34,82808,1164],{"class":59},[34,82810,82745],{"class":63},[34,82812,617],{"class":59},[34,82814,319],{"class":63},[34,82816,12899],{"class":59},[34,82818,952],{"class":63},[34,82820,75714],{"class":59},[34,82822,33791],{"class":112},[34,82824,82825],{"class":187}," 'Mozill'\n",[34,82827,82828],{"class":36,"line":202},[34,82829,2864],{"emptyLinePlaceholder":540},[34,82831,82832,82834,82836,82838,82840,82842,82844,82846,82848,82850,82852,82854],{"class":36,"line":207},[34,82833,82731],{"class":63},[34,82835,1164],{"class":59},[34,82837,58708],{"class":63},[34,82839,617],{"class":59},[34,82841,82740],{"class":63},[34,82843,1164],{"class":59},[34,82845,82745],{"class":63},[34,82847,617],{"class":59},[34,82849,217],{"class":63},[34,82851,75714],{"class":59},[34,82853,33791],{"class":112},[34,82855,82856],{"class":187}," 'lla'\n",[34,82858,82859,82861,82863,82865,82867,82869,82871,82873,82875,82877,82879,82881,82883,82885],{"class":36,"line":222},[34,82860,82731],{"class":63},[34,82862,1164],{"class":59},[34,82864,58708],{"class":63},[34,82866,617],{"class":59},[34,82868,82740],{"class":63},[34,82870,1164],{"class":59},[34,82872,82745],{"class":63},[34,82874,617],{"class":59},[34,82876,217],{"class":63},[34,82878,12899],{"class":59},[34,82880,977],{"class":63},[34,82882,75770],{"class":59},[34,82884,33791],{"class":112},[34,82886,82856],{"class":187},[34,82888,82889,82891,82893,82895,82897,82899,82901,82903,82905,82907,82909,82911,82913,82915],{"class":36,"line":227},[34,82890,82731],{"class":63},[34,82892,1164],{"class":59},[34,82894,58708],{"class":63},[34,82896,617],{"class":59},[34,82898,82740],{"class":63},[34,82900,1164],{"class":59},[34,82902,82745],{"class":63},[34,82904,617],{"class":59},[34,82906,977],{"class":63},[34,82908,12899],{"class":59},[34,82910,217],{"class":63},[34,82912,75714],{"class":59},[34,82914,33791],{"class":112},[34,82916,82856],{"class":187},[34,82918,82919],{"class":36,"line":232},[34,82920,2864],{"emptyLinePlaceholder":540},[34,82922,82923,82925,82927,82929,82931,82933,82935,82937,82939,82941,82943,82945,82947,82949],{"class":36,"line":238},[34,82924,82731],{"class":63},[34,82926,1164],{"class":59},[34,82928,58708],{"class":63},[34,82930,617],{"class":59},[34,82932,82740],{"class":63},[34,82934,1164],{"class":59},[34,82936,82745],{"class":63},[34,82938,617],{"class":59},[34,82940,319],{"class":63},[34,82942,12899],{"class":59},[34,82944,977],{"class":63},[34,82946,75714],{"class":59},[34,82948,33791],{"class":112},[34,82950,82951],{"class":187}," 'Mozilla'\n",[34,82953,82954,82956,82958,82960,82962,82964,82966,82968,82970,82972,82974,82976,82978,82980],{"class":36,"line":244},[34,82955,82731],{"class":63},[34,82957,1164],{"class":59},[34,82959,58708],{"class":63},[34,82961,617],{"class":59},[34,82963,82740],{"class":63},[34,82965,1164],{"class":59},[34,82967,82745],{"class":63},[34,82969,617],{"class":59},[34,82971,319],{"class":63},[34,82973,12899],{"class":59},[34,82975,1053],{"class":63},[34,82977,75714],{"class":59},[34,82979,33791],{"class":112},[34,82981,82951],{"class":187},[23374,82983,82985],{"id":82984},"_410533-startswith","4.10.5.3.3 startsWith",[14,82987,82988,82991,82992,82997,82998,83000,83001],{},[31,82989,82990],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[760,82993,82994],{},[31,82995,82996],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[31,82999,1834],{}," 或 ",[31,83002,66481],{},[25,83004,83006],{"className":77956,"code":83005,"language":77958,"meta":22,"style":22},"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",[31,83007,83008,83020,83039,83044,83064],{"__ignoreMap":22},[34,83009,83010,83012,83015,83017],{"class":36,"line":37},[34,83011,7256],{"class":112},[34,83013,83014],{"class":59}," str1 ",[34,83016,447],{"class":112},[34,83018,83019],{"class":187}," \"Saturday night plans\"\n",[34,83021,83022,83024,83026,83029,83032,83034,83037],{"class":36,"line":44},[34,83023,77993],{"class":59},[34,83025,58708],{"class":2427},[34,83027,83028],{"class":59},"(str1.",[34,83030,83031],{"class":2427},"startsWith",[34,83033,617],{"class":59},[34,83035,83036],{"class":187},"\"Sat\"",[34,83038,30960],{"class":59},[34,83040,83041],{"class":36,"line":50},[34,83042,83043],{"class":40},"\u002F\u002F Expected output: true\n",[34,83045,83046,83048,83050,83052,83054,83056,83058,83060,83062],{"class":36,"line":56},[34,83047,77993],{"class":59},[34,83049,58708],{"class":2427},[34,83051,83028],{"class":59},[34,83053,83031],{"class":2427},[34,83055,617],{"class":59},[34,83057,83036],{"class":187},[34,83059,12899],{"class":59},[34,83061,309],{"class":63},[34,83063,30960],{"class":59},[34,83065,83066],{"class":36,"line":107},[34,83067,83068],{"class":40},"\u002F\u002F Expected output: false\n",[25,83070,83072],{"className":51094,"code":83071,"language":51096,"meta":22,"style":22},"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",[31,83073,83074,83079,83084,83088,83093,83098],{"__ignoreMap":22},[34,83075,83076],{"class":36,"line":37},[34,83077,83078],{"class":59},"startsWith(searchString)\n",[34,83080,83081],{"class":36,"line":44},[34,83082,83083],{"class":59},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[34,83085,83086],{"class":36,"line":50},[34,83087,2864],{"emptyLinePlaceholder":540},[34,83089,83090],{"class":36,"line":56},[34,83091,83092],{"class":59},"const str3 = 'pink老师上课中'\n",[34,83094,83095],{"class":36,"line":107},[34,83096,83097],{"class":59},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[34,83099,83100],{"class":36,"line":196},[34,83101,83102],{"class":59},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23374,83104,83106],{"id":83105},"_410534-includes","4.10.5.3.4 includes",[14,83108,83109],{},"includes(searchString) includes(searchString, position)",[567,83111,83112],{},[570,83113,83114],{},"searchString:",[14,83116,83117,83118,83120,83121,83126,83127,83132,83133,21964,83136,83139,83140,83143],{},"一个要在 ",[31,83119,1774],{}," 中查找的字符串。",[847,83122,83125],{"href":83123,"rel":83124},"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",[24329],"不能是正则表达式","。所有非正则表达式的值都会被",[847,83128,83131],{"href":83129,"rel":83130},"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",[24329],"强制转换为字符串","，因此如果该参数被省略或传入 ",[31,83134,83135],{},"undefined",[31,83137,83138],{},"includes()"," 方法会在字符串中搜索 ",[31,83141,83142],{},"\"undefined\"","，这通常不是你想要的",[567,83145,83146],{"start":44},[570,83147,83148,214],{},[31,83149,83150],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83152,83153,83154,83157,83158],{},"在字符串中开始搜索 ",[31,83155,83156],{},"searchString"," 的位置。默认值为 ",[31,83159,319],{},[567,83161,83162],{"start":50},[570,83163,83164],{},"返回值：",[14,83166,83167,83168,83170,83171,83175,83176],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[31,83169,83156],{}," 为空字符串的情况），则返回 ",[760,83172,83173],{},[31,83174,1834],{}," ，否则返回 ",[760,83177,83178],{},[31,83179,66481],{},[567,83181,83182],{"start":56},[570,83183,83184],{},"异常：",[14,83186,82683,83187,14259,83189,83193],{},[31,83188,83156],{},[847,83190,83192],{"href":83123,"rel":83191},[24329],"是一个正则表达式","，则会抛出",[14,83195,83196],{},"只要是有就是true，不需要非得以谁开头结尾",[25,83198,83200],{"className":77956,"code":83199,"language":77958,"meta":22,"style":22},"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",[31,83201,83202,83213,83236,83255,83275,83297,83316],{"__ignoreMap":22},[34,83203,83204,83206,83208,83210],{"class":36,"line":37},[34,83205,7256],{"class":112},[34,83207,80236],{"class":59},[34,83209,447],{"class":112},[34,83211,83212],{"class":187}," \"To be, or not to be, that is the question.\"\n",[34,83214,83215,83217,83219,83222,83225,83227,83230,83233],{"class":36,"line":44},[34,83216,77993],{"class":59},[34,83218,58708],{"class":2427},[34,83220,83221],{"class":59},"(str.",[34,83223,83224],{"class":2427},"includes",[34,83226,617],{"class":59},[34,83228,83229],{"class":187},"\"To be\"",[34,83231,83232],{"class":59},"))",[34,83234,83235],{"class":40},"  \u002F\u002F true\n",[34,83237,83238,83240,83242,83244,83246,83248,83251,83253],{"class":36,"line":50},[34,83239,77993],{"class":59},[34,83241,58708],{"class":2427},[34,83243,83221],{"class":59},[34,83245,83224],{"class":2427},[34,83247,617],{"class":59},[34,83249,83250],{"class":187},"\"question\"",[34,83252,83232],{"class":59},[34,83254,83235],{"class":40},[34,83256,83257,83259,83261,83263,83265,83267,83270,83272],{"class":36,"line":56},[34,83258,77993],{"class":59},[34,83260,58708],{"class":2427},[34,83262,83221],{"class":59},[34,83264,83224],{"class":2427},[34,83266,617],{"class":59},[34,83268,83269],{"class":187},"\"nonexistent\"",[34,83271,83232],{"class":59},[34,83273,83274],{"class":40},"  \u002F\u002F false\n",[34,83276,83277,83279,83281,83283,83285,83287,83289,83291,83293,83295],{"class":36,"line":107},[34,83278,77993],{"class":59},[34,83280,58708],{"class":2427},[34,83282,83221],{"class":59},[34,83284,83224],{"class":2427},[34,83286,617],{"class":59},[34,83288,83229],{"class":187},[34,83290,12899],{"class":59},[34,83292,64],{"class":63},[34,83294,83232],{"class":59},[34,83296,83274],{"class":40},[34,83298,83299,83301,83303,83305,83307,83309,83312,83314],{"class":36,"line":196},[34,83300,77993],{"class":59},[34,83302,58708],{"class":2427},[34,83304,83221],{"class":59},[34,83306,83224],{"class":2427},[34,83308,617],{"class":59},[34,83310,83311],{"class":187},"\"TO BE\"",[34,83313,83232],{"class":59},[34,83315,83274],{"class":40},[34,83317,83318,83320,83322,83324,83326,83328,83330,83332],{"class":36,"line":202},[34,83319,77993],{"class":59},[34,83321,58708],{"class":2427},[34,83323,83221],{"class":59},[34,83325,83224],{"class":2427},[34,83327,617],{"class":59},[34,83329,8116],{"class":187},[34,83331,83232],{"class":59},[34,83333,83235],{"class":40},[23374,83335,83337],{"id":83336},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[25,83339,83341],{"className":53528,"code":83340,"language":53530,"meta":22,"style":22},"\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",[31,83342,83343,83351,83359,83364,83369,83374,83379,83384,83392],{"__ignoreMap":22},[34,83344,83345,83347,83349],{"class":36,"line":37},[34,83346,1515],{"class":59},[34,83348,52261],{"class":51761},[34,83350,51768],{"class":59},[34,83352,83353,83355,83357],{"class":36,"line":44},[34,83354,52605],{"class":59},[34,83356,52274],{"class":51761},[34,83358,51768],{"class":59},[34,83360,83361],{"class":36,"line":50},[34,83362,83363],{"class":59},"    const num = 10\n",[34,83365,83366],{"class":36,"line":56},[34,83367,83368],{"class":59},"    \u002F\u002F 强制转换\n",[34,83370,83371],{"class":36,"line":107},[34,83372,83373],{"class":59},"    console.log(String(num))\n",[34,83375,83376],{"class":36,"line":196},[34,83377,83378],{"class":59},"    \u002F\u002F toString()方法转换\n",[34,83380,83381],{"class":36,"line":202},[34,83382,83383],{"class":59},"    console.log(num.toString())\n",[34,83385,83386,83388,83390],{"class":36,"line":207},[34,83387,52878],{"class":59},[34,83389,52274],{"class":51761},[34,83391,51768],{"class":59},[34,83393,83394,83396,83398],{"class":36,"line":222},[34,83395,52246],{"class":59},[34,83397,52261],{"class":51761},[34,83399,51768],{"class":59},[23374,83401,83403],{"id":83402},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83405,83406],{},[20,83407],{"alt":22,"src":83408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[25,83410,83412],{"className":51094,"code":83411,"language":51096,"meta":22,"style":22},"\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",[31,83413,83414,83424,83438,83442,83450,83464,83484,83496,83504,83508,83516,83528,83536,83548,83553,83558,83563,83610,83626,83634,83642,83646],{"__ignoreMap":22},[34,83415,83416,83418,83420,83422],{"class":36,"line":37},[34,83417,51758],{"class":59},[34,83419,51762],{"class":51761},[34,83421,51765],{"class":2427},[34,83423,51768],{"class":59},[34,83425,83426,83428,83430,83432,83434,83436],{"class":36,"line":44},[34,83427,1515],{"class":59},[34,83429,51096],{"class":51761},[34,83431,51777],{"class":2427},[34,83433,447],{"class":59},[34,83435,51782],{"class":187},[34,83437,51768],{"class":59},[34,83439,83440],{"class":36,"line":50},[34,83441,2864],{"emptyLinePlaceholder":540},[34,83443,83444,83446,83448],{"class":36,"line":56},[34,83445,1515],{"class":59},[34,83447,51795],{"class":51761},[34,83449,51768],{"class":59},[34,83451,83452,83454,83456,83458,83460,83462],{"class":36,"line":107},[34,83453,52605],{"class":59},[34,83455,51805],{"class":51761},[34,83457,51808],{"class":2427},[34,83459,447],{"class":59},[34,83461,51813],{"class":187},[34,83463,51768],{"class":59},[34,83465,83466,83468,83470,83472,83474,83476,83478,83480,83482],{"class":36,"line":196},[34,83467,52605],{"class":59},[34,83469,51805],{"class":51761},[34,83471,15384],{"class":2427},[34,83473,447],{"class":59},[34,83475,51852],{"class":187},[34,83477,51832],{"class":2427},[34,83479,447],{"class":59},[34,83481,51859],{"class":187},[34,83483,51768],{"class":59},[34,83485,83486,83488,83490,83492,83494],{"class":36,"line":202},[34,83487,52605],{"class":59},[34,83489,51868],{"class":51761},[34,83491,51871],{"class":59},[34,83493,51868],{"class":51761},[34,83495,51768],{"class":59},[34,83497,83498,83500,83502],{"class":36,"line":207},[34,83499,52246],{"class":59},[34,83501,51795],{"class":51761},[34,83503,51768],{"class":59},[34,83505,83506],{"class":36,"line":222},[34,83507,2864],{"emptyLinePlaceholder":540},[34,83509,83510,83512,83514],{"class":36,"line":227},[34,83511,1515],{"class":59},[34,83513,52261],{"class":51761},[34,83515,51768],{"class":59},[34,83517,83518,83520,83522,83524,83526],{"class":36,"line":232},[34,83519,52605],{"class":59},[34,83521,52072],{"class":51761},[34,83523,55775],{"class":59},[34,83525,52072],{"class":51761},[34,83527,51768],{"class":59},[34,83529,83530,83532,83534],{"class":36,"line":238},[34,83531,52605],{"class":59},[34,83533,52274],{"class":51761},[34,83535,51768],{"class":59},[34,83537,83538,83540,83543,83545],{"class":36,"line":244},[34,83539,11685],{"class":112},[34,83541,83542],{"class":63}," gift",[34,83544,14028],{"class":112},[34,83546,83547],{"class":187}," '50g的茶叶，清洗球'\n",[34,83549,83550],{"class":36,"line":250},[34,83551,83552],{"class":40},"    \u002F\u002F 1.把字符串拆分为数组\n",[34,83554,83555],{"class":36,"line":256},[34,83556,83557],{"class":40},"    \u002F\u002F console.log(gift.split(','))\n",[34,83559,83560],{"class":36,"line":261},[34,83561,83562],{"class":40},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[34,83564,83565,83567,83569,83571,83574,83577,83579,83582,83584,83586,83588,83590,83592,83595,83597,83600,83602,83604,83606,83608],{"class":36,"line":267},[34,83566,11685],{"class":112},[34,83568,74380],{"class":63},[34,83570,14028],{"class":112},[34,83572,83573],{"class":59}," gift.",[34,83575,83576],{"class":2427},"split",[34,83578,617],{"class":59},[34,83580,83581],{"class":187},"'，'",[34,83583,31289],{"class":59},[34,83585,74505],{"class":2427},[34,83587,617],{"class":59},[34,83589,80256],{"class":5680},[34,83591,80259],{"class":112},[34,83593,83594],{"class":187}," `\u003Cspan>【赠品】${",[34,83596,80256],{"class":59},[34,83598,83599],{"class":187},"}\u003C\u002Fspan>\u003Cbr>`",[34,83601,31289],{"class":59},[34,83603,74684],{"class":2427},[34,83605,617],{"class":59},[34,83607,74689],{"class":187},[34,83609,623],{"class":59},[34,83611,83612,83614,83616,83618,83620,83622,83624],{"class":36,"line":2138},[34,83613,52868],{"class":59},[34,83615,54860],{"class":2427},[34,83617,617],{"class":59},[34,83619,82392],{"class":187},[34,83621,74710],{"class":59},[34,83623,447],{"class":112},[34,83625,74446],{"class":59},[34,83627,83628,83630,83632],{"class":36,"line":2143},[34,83629,52878],{"class":59},[34,83631,52274],{"class":51761},[34,83633,51768],{"class":59},[34,83635,83636,83638,83640],{"class":36,"line":2157},[34,83637,52246],{"class":59},[34,83639,52261],{"class":51761},[34,83641,51768],{"class":59},[34,83643,83644],{"class":36,"line":2162},[34,83645,2864],{"emptyLinePlaceholder":540},[34,83647,83648,83650,83652],{"class":36,"line":2191},[34,83649,52246],{"class":59},[34,83651,51096],{"class":51761},[34,83653,51768],{"class":59},[22462,83655,83657],{"id":83656},"_41054-number","4.10.5.4 Number",[14,83659,83660],{},[20,83661],{"alt":22,"src":83662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83664,83665],{},"整数也可以进行toFixed来保留小数",[14,83667,83668],{},"比如：",[14,83670,83671],{},"const price=10",[14,83673,83674],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22462,83676,83678],{"id":83677},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83680,83681],{},[20,83682],{"alt":22,"src":83683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[25,83685,83687],{"className":51094,"code":83686,"language":51096,"meta":22,"style":22},"\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",[31,83688,83689,83699,83713,83717,83725,83739,83759,83771,83779,83785,83795,83805,83815,83819,83823,83829,83841,83855,83859,83863,83869,83881,83897,83907,83923,83927,83931,83937,83947,83957,83961,83965,83973,83985,83997,84009,84013,84017,84025,84037,84041,84045,84056,84066,84078,84090,84100,84104,84108,84116,84125,84137,84147,84157,84161,84165,84173,84182,84189,84199,84211,84215,84219,84228,84238,84249,84261,84273,84277,84281,84290,84300,84311,84315,84319,84325,84337,84349,84359,84369,84387,84399,84403,84407,84416,84428,84438,84448,84460,84464,84472,84480,84484,84492,84506,84514,84528,84556,84564,84572,84582,84586,84594,84602,84611,84619,84628,84638,84642,84646,84654,84662,84671,84679,84687,84700,84704,84708,84716,84724,84733,84741,84749,84764,84768,84772,84780,84788,84797,84805,84813,84827,84835,84839,84843,84848,84874,84879,84916,84921,84944,84949,85003,85008,85044,85048,85054,85059,85068,85082,85091,85110,85119,85129,85134,85139,85152,85157,85211,85237,85245,85253,85257],{"__ignoreMap":22},[34,83690,83691,83693,83695,83697],{"class":36,"line":37},[34,83692,51758],{"class":59},[34,83694,51762],{"class":51761},[34,83696,51765],{"class":2427},[34,83698,51768],{"class":59},[34,83700,83701,83703,83705,83707,83709,83711],{"class":36,"line":44},[34,83702,1515],{"class":59},[34,83704,51096],{"class":51761},[34,83706,51777],{"class":2427},[34,83708,447],{"class":59},[34,83710,51782],{"class":187},[34,83712,51768],{"class":59},[34,83714,83715],{"class":36,"line":50},[34,83716,2864],{"emptyLinePlaceholder":540},[34,83718,83719,83721,83723],{"class":36,"line":56},[34,83720,1515],{"class":59},[34,83722,51795],{"class":51761},[34,83724,51768],{"class":59},[34,83726,83727,83729,83731,83733,83735,83737],{"class":36,"line":107},[34,83728,52605],{"class":59},[34,83730,51805],{"class":51761},[34,83732,51808],{"class":2427},[34,83734,447],{"class":59},[34,83736,51813],{"class":187},[34,83738,51768],{"class":59},[34,83740,83741,83743,83745,83747,83749,83751,83753,83755,83757],{"class":36,"line":196},[34,83742,52605],{"class":59},[34,83744,51805],{"class":51761},[34,83746,15384],{"class":2427},[34,83748,447],{"class":59},[34,83750,51852],{"class":187},[34,83752,51832],{"class":2427},[34,83754,447],{"class":59},[34,83756,51859],{"class":187},[34,83758,51768],{"class":59},[34,83760,83761,83763,83765,83767,83769],{"class":36,"line":202},[34,83762,52605],{"class":59},[34,83764,51868],{"class":51761},[34,83766,51871],{"class":59},[34,83768,51868],{"class":51761},[34,83770,51768],{"class":59},[34,83772,83773,83775,83777],{"class":36,"line":207},[34,83774,52605],{"class":59},[34,83776,532],{"class":51761},[34,83778,51768],{"class":59},[34,83780,83781,83783],{"class":36,"line":222},[34,83782,6867],{"class":51761},[34,83784,16036],{"class":59},[34,83786,83787,83789,83791,83793],{"class":36,"line":227},[34,83788,55156],{"class":63},[34,83790,51898],{"class":59},[34,83792,319],{"class":63},[34,83794,1765],{"class":59},[34,83796,83797,83799,83801,83803],{"class":36,"line":232},[34,83798,55167],{"class":63},[34,83800,51898],{"class":59},[34,83802,319],{"class":63},[34,83804,1765],{"class":59},[34,83806,83807,83809,83811,83813],{"class":36,"line":238},[34,83808,73057],{"class":63},[34,83810,51898],{"class":59},[34,83812,60966],{"class":63},[34,83814,1765],{"class":59},[34,83816,83817],{"class":36,"line":244},[34,83818,2651],{"class":59},[34,83820,83821],{"class":36,"line":250},[34,83822,2864],{"emptyLinePlaceholder":540},[34,83824,83825,83827],{"class":36,"line":256},[34,83826,62584],{"class":2427},[34,83828,16036],{"class":59},[34,83830,83831,83833,83835,83837,83839],{"class":36,"line":261},[34,83832,55232],{"class":63},[34,83834,51898],{"class":59},[34,83836,79035],{"class":63},[34,83838,51953],{"class":112},[34,83840,1765],{"class":59},[34,83842,83843,83845,83847,83849,83851,83853],{"class":36,"line":267},[34,83844,55167],{"class":63},[34,83846,51898],{"class":59},[34,83848,919],{"class":63},[34,83850,51953],{"class":112},[34,83852,52017],{"class":63},[34,83854,1765],{"class":59},[34,83856,83857],{"class":36,"line":2138},[34,83858,2651],{"class":59},[34,83860,83861],{"class":36,"line":2143},[34,83862,2864],{"emptyLinePlaceholder":540},[34,83864,83865,83867],{"class":36,"line":2157},[34,83866,79086],{"class":2427},[34,83868,16036],{"class":59},[34,83870,83871,83873,83875,83877,83879],{"class":36,"line":2162},[34,83872,55156],{"class":63},[34,83874,51898],{"class":59},[34,83876,1181],{"class":63},[34,83878,51953],{"class":112},[34,83880,1765],{"class":59},[34,83882,83883,83885,83887,83889,83891,83893,83895],{"class":36,"line":2191},[34,83884,62321],{"class":63},[34,83886,51898],{"class":59},[34,83888,28586],{"class":63},[34,83890,79141],{"class":63},[34,83892,79144],{"class":63},[34,83894,1301],{"class":112},[34,83896,1765],{"class":59},[34,83898,83899,83901,83903,83905],{"class":36,"line":2196},[34,83900,55470],{"class":63},[34,83902,51898],{"class":59},[34,83904,51938],{"class":63},[34,83906,1765],{"class":59},[34,83908,83909,83911,83913,83915,83917,83919,83921],{"class":36,"line":2213},[34,83910,62438],{"class":63},[34,83912,51898],{"class":59},[34,83914,64],{"class":63},[34,83916,51953],{"class":112},[34,83918,51982],{"class":63},[34,83920,62705],{"class":63},[34,83922,1765],{"class":59},[34,83924,83925],{"class":36,"line":2218},[34,83926,2651],{"class":59},[34,83928,83929],{"class":36,"line":2223},[34,83930,2864],{"emptyLinePlaceholder":540},[34,83932,83933,83935],{"class":36,"line":2228},[34,83934,79204],{"class":2427},[34,83936,16036],{"class":59},[34,83938,83939,83941,83943,83945],{"class":36,"line":2242},[34,83940,62486],{"class":63},[34,83942,51898],{"class":59},[34,83944,62491],{"class":63},[34,83946,1765],{"class":59},[34,83948,83949,83951,83953,83955],{"class":36,"line":2247},[34,83950,55345],{"class":63},[34,83952,51898],{"class":59},[34,83954,62279],{"class":63},[34,83956,1765],{"class":59},[34,83958,83959],{"class":36,"line":3041},[34,83960,2651],{"class":59},[34,83962,83963],{"class":36,"line":3055},[34,83964,2864],{"emptyLinePlaceholder":540},[34,83966,83967,83969,83971],{"class":36,"line":3063},[34,83968,79086],{"class":2427},[34,83970,56076],{"class":51761},[34,83972,16036],{"class":59},[34,83974,83975,83977,83979,83981,83983],{"class":36,"line":3068},[34,83976,55232],{"class":63},[34,83978,51898],{"class":59},[34,83980,1218],{"class":63},[34,83982,51953],{"class":112},[34,83984,1765],{"class":59},[34,83986,83987,83989,83991,83993,83995],{"class":36,"line":3074},[34,83988,55246],{"class":63},[34,83990,51898],{"class":59},[34,83992,1218],{"class":63},[34,83994,51953],{"class":112},[34,83996,1765],{"class":59},[34,83998,83999,84001,84003,84005,84007],{"class":36,"line":3080},[34,84000,62211],{"class":63},[34,84002,51898],{"class":59},[34,84004,927],{"class":63},[34,84006,51953],{"class":112},[34,84008,1765],{"class":59},[34,84010,84011],{"class":36,"line":3085},[34,84012,2651],{"class":59},[34,84014,84015],{"class":36,"line":8412},[34,84016,2864],{"emptyLinePlaceholder":540},[34,84018,84019,84021,84023],{"class":36,"line":8436},[34,84020,79086],{"class":2427},[34,84022,62765],{"class":2427},[34,84024,16036],{"class":59},[34,84026,84027,84029,84031,84033,84035],{"class":36,"line":8441},[34,84028,55232],{"class":63},[34,84030,51898],{"class":59},[34,84032,2186],{"class":63},[34,84034,51953],{"class":112},[34,84036,1765],{"class":59},[34,84038,84039],{"class":36,"line":8447},[34,84040,2651],{"class":59},[34,84042,84043],{"class":36,"line":8474},[34,84044,2864],{"emptyLinePlaceholder":540},[34,84046,84047,84049,84051,84054],{"class":36,"line":8479},[34,84048,79086],{"class":2427},[34,84050,62765],{"class":2427},[34,84052,84053],{"class":2427}," .tag",[34,84055,16036],{"class":59},[34,84057,84058,84060,84062,84064],{"class":36,"line":8485},[34,84059,55470],{"class":63},[34,84061,51898],{"class":59},[34,84063,61330],{"class":63},[34,84065,1765],{"class":59},[34,84067,84068,84070,84072,84074,84076],{"class":36,"line":8497},[34,84069,55156],{"class":63},[34,84071,51898],{"class":59},[34,84073,70],{"class":63},[34,84075,51953],{"class":112},[34,84077,1765],{"class":59},[34,84079,84080,84082,84084,84086,84088],{"class":36,"line":8509},[34,84081,55383],{"class":63},[34,84083,51898],{"class":59},[34,84085,1105],{"class":63},[34,84087,51953],{"class":112},[34,84089,1765],{"class":59},[34,84091,84092,84094,84096,84098],{"class":36,"line":8521},[34,84093,57877],{"class":63},[34,84095,51898],{"class":59},[34,84097,62531],{"class":63},[34,84099,1765],{"class":59},[34,84101,84102],{"class":36,"line":10180},[34,84103,2651],{"class":59},[34,84105,84106],{"class":36,"line":10205},[34,84107,2864],{"emptyLinePlaceholder":540},[34,84109,84110,84112,84114],{"class":36,"line":10228},[34,84111,79086],{"class":2427},[34,84113,79378],{"class":2427},[34,84115,31929],{"class":59},[34,84117,84118,84120,84123],{"class":36,"line":10252},[34,84119,79086],{"class":2427},[34,84121,84122],{"class":2427}," .sub-total",[34,84124,16036],{"class":59},[34,84126,84127,84129,84131,84133,84135],{"class":36,"line":10257},[34,84128,55383],{"class":63},[34,84130,51898],{"class":59},[34,84132,1256],{"class":63},[34,84134,51953],{"class":112},[34,84136,1765],{"class":59},[34,84138,84139,84141,84143,84145],{"class":36,"line":10262},[34,84140,57877],{"class":63},[34,84142,51898],{"class":59},[34,84144,79401],{"class":63},[34,84146,1765],{"class":59},[34,84148,84149,84151,84153,84155],{"class":36,"line":10267},[34,84150,62298],{"class":63},[34,84152,51898],{"class":59},[34,84154,64],{"class":63},[34,84156,1765],{"class":59},[34,84158,84159],{"class":36,"line":10276},[34,84160,2651],{"class":59},[34,84162,84163],{"class":36,"line":10281},[34,84164,2864],{"emptyLinePlaceholder":540},[34,84166,84167,84169,84171],{"class":36,"line":10287},[34,84168,79086],{"class":2427},[34,84170,79418],{"class":2427},[34,84172,31929],{"class":59},[34,84174,84175,84177,84180],{"class":36,"line":10308},[34,84176,79086],{"class":2427},[34,84178,84179],{"class":2427}," .sub-total::before",[34,84181,31929],{"class":59},[34,84183,84184,84187],{"class":36,"line":10314},[34,84185,84186],{"class":2427},"    .amount::before",[34,84188,16036],{"class":59},[34,84190,84191,84193,84195,84197],{"class":36,"line":10328},[34,84192,79425],{"class":63},[34,84194,51898],{"class":59},[34,84196,79430],{"class":187},[34,84198,1765],{"class":59},[34,84200,84201,84203,84205,84207,84209],{"class":36,"line":10334},[34,84202,55383],{"class":63},[34,84204,51898],{"class":59},[34,84206,1105],{"class":63},[34,84208,51953],{"class":112},[34,84210,1765],{"class":59},[34,84212,84213],{"class":36,"line":10361},[34,84214,2651],{"class":59},[34,84216,84217],{"class":36,"line":10370},[34,84218,2864],{"emptyLinePlaceholder":540},[34,84220,84221,84223,84226],{"class":36,"line":10376},[34,84222,79086],{"class":2427},[34,84224,84225],{"class":2427}," .spec",[34,84227,16036],{"class":59},[34,84229,84230,84232,84234,84236],{"class":36,"line":10384},[34,84231,62298],{"class":63},[34,84233,51898],{"class":59},[34,84235,70],{"class":63},[34,84237,1765],{"class":59},[34,84239,84240,84242,84244,84247],{"class":36,"line":10389},[34,84241,57877],{"class":63},[34,84243,51898],{"class":59},[34,84245,84246],{"class":63},"#888",[34,84248,1765],{"class":59},[34,84250,84251,84253,84255,84257,84259],{"class":36,"line":17068},[34,84252,55383],{"class":63},[34,84254,51898],{"class":59},[34,84256,1155],{"class":63},[34,84258,51953],{"class":112},[34,84260,1765],{"class":59},[34,84262,84263,84265,84267,84269,84271],{"class":36,"line":17074},[34,84264,62461],{"class":63},[34,84266,51898],{"class":59},[34,84268,1306],{"class":63},[34,84270,51953],{"class":112},[34,84272,1765],{"class":59},[34,84274,84275],{"class":36,"line":17097},[34,84276,2651],{"class":59},[34,84278,84279],{"class":36,"line":17103},[34,84280,2864],{"emptyLinePlaceholder":540},[34,84282,84283,84285,84288],{"class":36,"line":17126},[34,84284,79086],{"class":2427},[34,84286,84287],{"class":2427}," .count",[34,84289,16036],{"class":59},[34,84291,84292,84294,84296,84298],{"class":36,"line":17140},[34,84293,62298],{"class":63},[34,84295,51898],{"class":59},[34,84297,64],{"class":63},[34,84299,1765],{"class":59},[34,84301,84302,84304,84306,84309],{"class":36,"line":17160},[34,84303,57877],{"class":63},[34,84305,51898],{"class":59},[34,84307,84308],{"class":63},"#aaa",[34,84310,1765],{"class":59},[34,84312,84313],{"class":36,"line":17166},[34,84314,2651],{"class":59},[34,84316,84317],{"class":36,"line":17177},[34,84318,2864],{"emptyLinePlaceholder":540},[34,84320,84321,84323],{"class":36,"line":17200},[34,84322,72936],{"class":2427},[34,84324,16036],{"class":59},[34,84326,84327,84329,84331,84333,84335],{"class":36,"line":17222},[34,84328,55232],{"class":63},[34,84330,51898],{"class":59},[34,84332,79035],{"class":63},[34,84334,51953],{"class":112},[34,84336,1765],{"class":59},[34,84338,84339,84341,84343,84345,84347],{"class":36,"line":17227},[34,84340,55167],{"class":63},[34,84342,51898],{"class":59},[34,84344,319],{"class":63},[34,84346,52017],{"class":63},[34,84348,1765],{"class":59},[34,84350,84351,84353,84355,84357],{"class":36,"line":17233},[34,84352,55470],{"class":63},[34,84354,51898],{"class":59},[34,84356,51938],{"class":63},[34,84358,1765],{"class":59},[34,84360,84361,84363,84365,84367],{"class":36,"line":17247},[34,84362,55481],{"class":63},[34,84364,51898],{"class":59},[34,84366,52041],{"class":63},[34,84368,1765],{"class":59},[34,84370,84371,84374,84376,84378,84380,84382,84385],{"class":36,"line":17260},[34,84372,84373],{"class":63},"      border-top",[34,84375,51898],{"class":59},[34,84377,64],{"class":63},[34,84379,51953],{"class":112},[34,84381,51982],{"class":63},[34,84383,84384],{"class":63}," #4e4e4e",[34,84386,1765],{"class":59},[34,84388,84389,84391,84393,84395,84397],{"class":36,"line":17265},[34,84390,55156],{"class":63},[34,84392,51898],{"class":59},[34,84394,1306],{"class":63},[34,84396,51953],{"class":112},[34,84398,1765],{"class":59},[34,84400,84401],{"class":36,"line":17279},[34,84402,2651],{"class":59},[34,84404,84405],{"class":36,"line":17284},[34,84406,2864],{"emptyLinePlaceholder":540},[34,84408,84409,84411,84414],{"class":36,"line":17290},[34,84410,72936],{"class":2427},[34,84412,84413],{"class":2427}," .amount",[34,84415,16036],{"class":59},[34,84417,84418,84420,84422,84424,84426],{"class":36,"line":17295},[34,84419,55383],{"class":63},[34,84421,51898],{"class":59},[34,84423,1256],{"class":63},[34,84425,51953],{"class":112},[34,84427,1765],{"class":59},[34,84429,84430,84432,84434,84436],{"class":36,"line":17309},[34,84431,57877],{"class":63},[34,84433,51898],{"class":59},[34,84435,79401],{"class":63},[34,84437,1765],{"class":59},[34,84439,84440,84442,84444,84446],{"class":36,"line":17314},[34,84441,62795],{"class":63},[34,84443,51898],{"class":59},[34,84445,51950],{"class":63},[34,84447,1765],{"class":59},[34,84449,84450,84452,84454,84456,84458],{"class":36,"line":17319},[34,84451,62211],{"class":63},[34,84453,51898],{"class":59},[34,84455,1262],{"class":63},[34,84457,51953],{"class":112},[34,84459,1765],{"class":59},[34,84461,84462],{"class":36,"line":17333},[34,84463,2651],{"class":59},[34,84465,84466,84468,84470],{"class":36,"line":17345},[34,84467,52878],{"class":59},[34,84469,532],{"class":51761},[34,84471,51768],{"class":59},[34,84473,84474,84476,84478],{"class":36,"line":17350},[34,84475,52246],{"class":59},[34,84477,51795],{"class":51761},[34,84479,51768],{"class":59},[34,84481,84482],{"class":36,"line":17363},[34,84483,2864],{"emptyLinePlaceholder":540},[34,84485,84486,84488,84490],{"class":36,"line":17368},[34,84487,1515],{"class":59},[34,84489,52261],{"class":51761},[34,84491,51768],{"class":59},[34,84493,84494,84496,84498,84500,84502,84504],{"class":36,"line":17373},[34,84495,52605],{"class":59},[34,84497,52072],{"class":51761},[34,84499,53947],{"class":2427},[34,84501,447],{"class":59},[34,84503,63069],{"class":187},[34,84505,51768],{"class":59},[34,84507,84508,84510,84512],{"class":36,"line":17378},[34,84509,52878],{"class":59},[34,84511,52072],{"class":51761},[34,84513,51768],{"class":59},[34,84515,84516,84518,84520,84522,84524,84526],{"class":36,"line":17391},[34,84517,52605],{"class":59},[34,84519,52072],{"class":51761},[34,84521,53947],{"class":2427},[34,84523,447],{"class":59},[34,84525,63041],{"class":187},[34,84527,51768],{"class":59},[34,84529,84530,84532,84534,84537,84539,84541,84543,84546,84548,84550,84552,84554],{"class":36,"line":17396},[34,84531,51802],{"class":59},[34,84533,52072],{"class":51761},[34,84535,84536],{"class":59},">合计：\u003C",[34,84538,34],{"class":51761},[34,84540,53947],{"class":2427},[34,84542,447],{"class":59},[34,84544,84545],{"class":187},"\"amount\"",[34,84547,55775],{"class":59},[34,84549,34],{"class":51761},[34,84551,55775],{"class":59},[34,84553,52072],{"class":51761},[34,84555,51768],{"class":59},[34,84557,84558,84560,84562],{"class":36,"line":33096},[34,84559,52878],{"class":59},[34,84561,52072],{"class":51761},[34,84563,51768],{"class":59},[34,84565,84566,84568,84570],{"class":36,"line":33102},[34,84567,52605],{"class":59},[34,84569,52274],{"class":51761},[34,84571,51768],{"class":59},[34,84573,84574,84576,84578,84580],{"class":36,"line":33108},[34,84575,11685],{"class":112},[34,84577,79838],{"class":63},[34,84579,14028],{"class":112},[34,84581,55908],{"class":59},[34,84583,84584],{"class":36,"line":33114},[34,84585,79847],{"class":59},[34,84587,84588,84590,84592],{"class":36,"line":33120},[34,84589,79852],{"class":59},[34,84591,79855],{"class":187},[34,84593,31929],{"class":59},[34,84595,84596,84598,84600],{"class":36,"line":33131},[34,84597,79862],{"class":59},[34,84599,79865],{"class":187},[34,84601,31929],{"class":59},[34,84603,84604,84606,84609],{"class":36,"line":33137},[34,84605,79872],{"class":59},[34,84607,84608],{"class":63},"289.9",[34,84610,31929],{"class":59},[34,84612,84613,84615,84617],{"class":36,"line":33157},[34,84614,79882],{"class":59},[34,84616,79885],{"class":187},[34,84618,31929],{"class":59},[34,84620,84621,84624,84626],{"class":36,"line":33163},[34,84622,84623],{"class":59},"        count: ",[34,84625,70],{"class":63},[34,84627,31929],{"class":59},[34,84629,84630,84633,84636],{"class":36,"line":33174},[34,84631,84632],{"class":59},"        spec: { color: ",[34,84634,84635],{"class":187},"'白色'",[34,84637,56065],{"class":59},[34,84639,84640],{"class":36,"line":33180},[34,84641,78353],{"class":59},[34,84643,84644],{"class":36,"line":33186},[34,84645,79847],{"class":59},[34,84647,84648,84650,84652],{"class":36,"line":33192},[34,84649,79852],{"class":59},[34,84651,79946],{"class":187},[34,84653,31929],{"class":59},[34,84655,84656,84658,84660],{"class":36,"line":33198},[34,84657,79862],{"class":59},[34,84659,79955],{"class":187},[34,84661,31929],{"class":59},[34,84663,84664,84666,84669],{"class":36,"line":33204},[34,84665,79872],{"class":59},[34,84667,84668],{"class":63},"109.8",[34,84670,31929],{"class":59},[34,84672,84673,84675,84677],{"class":36,"line":33210},[34,84674,79882],{"class":59},[34,84676,79973],{"class":187},[34,84678,31929],{"class":59},[34,84680,84681,84683,84685],{"class":36,"line":33216},[34,84682,84623],{"class":59},[34,84684,309],{"class":63},[34,84686,31929],{"class":59},[34,84688,84689,84692,84694,84696,84698],{"class":36,"line":33236},[34,84690,84691],{"class":59},"        spec: { size: ",[34,84693,82364],{"class":187},[34,84695,55925],{"class":59},[34,84697,82369],{"class":187},[34,84699,56065],{"class":59},[34,84701,84702],{"class":36,"line":33242},[34,84703,78353],{"class":59},[34,84705,84706],{"class":36,"line":33258},[34,84707,79847],{"class":59},[34,84709,84710,84712,84714],{"class":36,"line":33264},[34,84711,79852],{"class":59},[34,84713,79990],{"class":187},[34,84715,31929],{"class":59},[34,84717,84718,84720,84722],{"class":36,"line":33278},[34,84719,79862],{"class":59},[34,84721,79999],{"class":187},[34,84723,31929],{"class":59},[34,84725,84726,84728,84731],{"class":36,"line":33284},[34,84727,79872],{"class":59},[34,84729,84730],{"class":63},"488",[34,84732,31929],{"class":59},[34,84734,84735,84737,84739],{"class":36,"line":33299},[34,84736,79882],{"class":59},[34,84738,80017],{"class":187},[34,84740,31929],{"class":59},[34,84742,84743,84745,84747],{"class":36,"line":33305},[34,84744,84623],{"class":59},[34,84746,64],{"class":63},[34,84748,31929],{"class":59},[34,84750,84751,84753,84756,84759,84762],{"class":36,"line":33314},[34,84752,84632],{"class":59},[34,84754,84755],{"class":187},"'青色'",[34,84757,84758],{"class":59},", sum: ",[34,84760,84761],{"class":187},"'一大四小'",[34,84763,56065],{"class":59},[34,84765,84766],{"class":36,"line":33320},[34,84767,78353],{"class":59},[34,84769,84770],{"class":36,"line":33329},[34,84771,79847],{"class":59},[34,84773,84774,84776,84778],{"class":36,"line":33335},[34,84775,79852],{"class":59},[34,84777,80034],{"class":187},[34,84779,31929],{"class":59},[34,84781,84782,84784,84786],{"class":36,"line":33341},[34,84783,79862],{"class":59},[34,84785,80043],{"class":187},[34,84787,31929],{"class":59},[34,84789,84790,84792,84795],{"class":36,"line":33350},[34,84791,79872],{"class":59},[34,84793,84794],{"class":63},"139",[34,84796,31929],{"class":59},[34,84798,84799,84801,84803],{"class":36,"line":33356},[34,84800,79882],{"class":59},[34,84802,80061],{"class":187},[34,84804,31929],{"class":59},[34,84806,84807,84809,84811],{"class":36,"line":33367},[34,84808,84623],{"class":59},[34,84810,64],{"class":63},[34,84812,31929],{"class":59},[34,84814,84815,84817,84820,84822,84825],{"class":36,"line":33373},[34,84816,84691],{"class":59},[34,84818,84819],{"class":187},"'小号'",[34,84821,55925],{"class":59},[34,84823,84824],{"class":187},"'紫色'",[34,84826,55931],{"class":59},[34,84828,84829,84832],{"class":36,"line":33392},[34,84830,84831],{"class":59},"        gift: ",[34,84833,84834],{"class":187},"'50g茶叶,清洗球'\n",[34,84836,84837],{"class":36,"line":33398},[34,84838,52859],{"class":59},[34,84840,84841],{"class":36,"line":33409},[34,84842,53570],{"class":59},[34,84844,84845],{"class":36,"line":33415},[34,84846,84847],{"class":40},"    \u002F\u002F  1.根据数据渲染页面\n",[34,84849,84850,84852,84854,84856,84858,84860,84862,84864,84866,84868,84870,84872],{"class":36,"line":33435},[34,84851,52868],{"class":59},[34,84853,54860],{"class":2427},[34,84855,617],{"class":59},[34,84857,80362],{"class":187},[34,84859,74710],{"class":59},[34,84861,447],{"class":112},[34,84863,80509],{"class":59},[34,84865,74505],{"class":2427},[34,84867,617],{"class":59},[34,84869,80256],{"class":5680},[34,84871,80259],{"class":112},[34,84873,16036],{"class":59},[34,84875,84876],{"class":36,"line":33451},[34,84877,84878],{"class":40},"      \u002F\u002F 对象解构\n",[34,84880,84881,84883,84885,84887,84889,84891,84893,84896,84898,84900,84902,84905,84907,84910,84912,84914],{"class":36,"line":33457},[34,84882,58689],{"class":112},[34,84884,80268],{"class":59},[34,84886,80281],{"class":63},[34,84888,12899],{"class":59},[34,84890,80271],{"class":63},[34,84892,12899],{"class":59},[34,84894,84895],{"class":63},"count",[34,84897,12899],{"class":59},[34,84899,80276],{"class":63},[34,84901,12899],{"class":59},[34,84903,84904],{"class":63},"spec",[34,84906,12899],{"class":59},[34,84908,84909],{"class":63},"gift",[34,84911,80284],{"class":59},[34,84913,447],{"class":112},[34,84915,80289],{"class":59},[34,84917,84918],{"class":36,"line":33471},[34,84919,84920],{"class":40},"      \u002F\u002F 规格文字模块处理\n",[34,84922,84923,84925,84928,84930,84932,84934,84936,84938,84940,84942],{"class":36,"line":33477},[34,84924,58689],{"class":112},[34,84926,84927],{"class":63}," text",[34,84929,14028],{"class":112},[34,84931,82399],{"class":59},[34,84933,82402],{"class":2427},[34,84935,82405],{"class":59},[34,84937,74684],{"class":2427},[34,84939,617],{"class":59},[34,84941,82412],{"class":187},[34,84943,623],{"class":59},[34,84945,84946],{"class":36,"line":33483},[34,84947,84948],{"class":40},"      \u002F\u002F 处理赠品模块\n",[34,84950,84951,84953,84955,84957,84960,84962,84964,84966,84968,84971,84973,84975,84977,84979,84981,84984,84986,84989,84991,84993,84995,84997,84999,85001],{"class":36,"line":33494},[34,84952,58689],{"class":112},[34,84954,74380],{"class":63},[34,84956,14028],{"class":112},[34,84958,84959],{"class":59}," gift ",[34,84961,1590],{"class":112},[34,84963,83573],{"class":59},[34,84965,83576],{"class":2427},[34,84967,617],{"class":59},[34,84969,84970],{"class":187},"','",[34,84972,31289],{"class":59},[34,84974,74505],{"class":2427},[34,84976,617],{"class":59},[34,84978,80256],{"class":5680},[34,84980,80259],{"class":112},[34,84982,84983],{"class":187}," `\u003Cspan class=\"tag\">【赠品】${",[34,84985,80256],{"class":59},[34,84987,84988],{"class":187},"}\u003C\u002Fspan>`",[34,84990,31289],{"class":59},[34,84992,74684],{"class":2427},[34,84994,617],{"class":59},[34,84996,74689],{"class":187},[34,84998,14178],{"class":59},[34,85000,214],{"class":112},[34,85002,70565],{"class":187},[34,85004,85005],{"class":36,"line":33500},[34,85006,85007],{"class":40},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[34,85009,85010,85012,85015,85017,85020,85022,85024,85026,85029,85031,85033,85035,85038,85040,85042],{"class":36,"line":33506},[34,85011,58689],{"class":112},[34,85013,85014],{"class":63}," subtotal",[34,85016,14028],{"class":112},[34,85018,85019],{"class":59}," ((price ",[34,85021,1062],{"class":112},[34,85023,6218],{"class":63},[34,85025,6982],{"class":112},[34,85027,85028],{"class":59}," count) ",[34,85030,1190],{"class":112},[34,85032,6218],{"class":63},[34,85034,31289],{"class":59},[34,85036,85037],{"class":2427},"toFixed",[34,85039,617],{"class":59},[34,85041,70],{"class":63},[34,85043,623],{"class":59},[34,85045,85046],{"class":36,"line":33516},[34,85047,2864],{"emptyLinePlaceholder":540},[34,85049,85050,85052],{"class":36,"line":33522},[34,85051,74443],{"class":112},[34,85053,70629],{"class":187},[34,85055,85056],{"class":36,"line":33533},[34,85057,85058],{"class":187},"        \u003Cdiv class=\"item\">\n",[34,85060,85061,85064,85066],{"class":36,"line":33539},[34,85062,85063],{"class":187},"          \u003Cimg src=\"${",[34,85065,80281],{"class":59},[34,85067,80313],{"class":187},[34,85069,85070,85073,85075,85078,85080],{"class":36,"line":33549},[34,85071,85072],{"class":187},"          \u003Cp class=\"name\">${",[34,85074,80271],{"class":59},[34,85076,85077],{"class":187},"}${",[34,85079,1774],{"class":59},[34,85081,80323],{"class":187},[34,85083,85084,85087,85089],{"class":36,"line":33554},[34,85085,85086],{"class":187},"          \u003Cp class=\"spec\">${",[34,85088,5651],{"class":59},[34,85090,80323],{"class":187},[34,85092,85093,85096,85098,85100,85102,85104,85106,85108],{"class":36,"line":33560},[34,85094,85095],{"class":187},"          \u003Cp class=\"price\">${",[34,85097,80276],{"class":59},[34,85099,1164],{"class":187},[34,85101,85037],{"class":2427},[34,85103,617],{"class":187},[34,85105,70],{"class":63},[34,85107,1036],{"class":187},[34,85109,80323],{"class":187},[34,85111,85112,85115,85117],{"class":36,"line":33609},[34,85113,85114],{"class":187},"          \u003Cp class=\"count\">x${",[34,85116,84895],{"class":59},[34,85118,80323],{"class":187},[34,85120,85121,85124,85127],{"class":36,"line":33656},[34,85122,85123],{"class":187},"          \u003Cp class=\"sub-total\">${",[34,85125,85126],{"class":59},"subtotal",[34,85128,80323],{"class":187},[34,85130,85131],{"class":36,"line":33661},[34,85132,85133],{"class":187},"        \u003C\u002Fdiv> \n",[34,85135,85136],{"class":36,"line":33667},[34,85137,85138],{"class":187},"             `\n",[34,85140,85141,85144,85146,85148,85150],{"class":36,"line":33686},[34,85142,85143],{"class":59},"    }).",[34,85145,74684],{"class":2427},[34,85147,617],{"class":59},[34,85149,74689],{"class":187},[34,85151,623],{"class":59},[34,85153,85154],{"class":36,"line":33692},[34,85155,85156],{"class":40},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[34,85158,85159,85161,85163,85165,85167,85170,85172,85175,85177,85179,85181,85184,85187,85189,85192,85194,85196,85198,85201,85203,85205,85207,85209],{"class":36,"line":33711},[34,85160,11685],{"class":112},[34,85162,63246],{"class":63},[34,85164,14028],{"class":112},[34,85166,80509],{"class":59},[34,85168,85169],{"class":2427},"reduce",[34,85171,2840],{"class":59},[34,85173,85174],{"class":5680},"prev",[34,85176,12899],{"class":59},[34,85178,80256],{"class":5680},[34,85180,14178],{"class":59},[34,85182,85183],{"class":112},"=>",[34,85185,85186],{"class":59}," prev ",[34,85188,1088],{"class":112},[34,85190,85191],{"class":59}," (item.price ",[34,85193,1062],{"class":112},[34,85195,6218],{"class":63},[34,85197,6982],{"class":112},[34,85199,85200],{"class":59}," item.count) ",[34,85202,1190],{"class":112},[34,85204,6218],{"class":63},[34,85206,12899],{"class":59},[34,85208,319],{"class":63},[34,85210,623],{"class":59},[34,85212,85213,85215,85217,85219,85222,85224,85226,85229,85231,85233,85235],{"class":36,"line":33717},[34,85214,52868],{"class":59},[34,85216,54860],{"class":2427},[34,85218,617],{"class":59},[34,85220,85221],{"class":187},"'.amount'",[34,85223,74710],{"class":59},[34,85225,447],{"class":112},[34,85227,85228],{"class":59}," total.",[34,85230,85037],{"class":2427},[34,85232,617],{"class":59},[34,85234,70],{"class":63},[34,85236,623],{"class":59},[34,85238,85239,85241,85243],{"class":36,"line":33723},[34,85240,52878],{"class":59},[34,85242,52274],{"class":51761},[34,85244,51768],{"class":59},[34,85246,85247,85249,85251],{"class":36,"line":33733},[34,85248,52246],{"class":59},[34,85250,52261],{"class":51761},[34,85252,51768],{"class":59},[34,85254,85255],{"class":36,"line":33738},[34,85256,2864],{"emptyLinePlaceholder":540},[34,85258,85259,85261,85263],{"class":36,"line":33744},[34,85260,52246],{"class":59},[34,85262,51096],{"class":51761},[34,85264,51768],{"class":59},[555,85266,85268],{"id":85267},"_411-编程思想","4.11 编程思想",[584,85270,85272],{"id":85271},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85274,85275,85278],{},[760,85276,85277],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85280,85281],{},"调用就可以了",[14,85283,85284],{},[20,85285],{"alt":22,"src":85286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[584,85288,85290],{"id":85289},"_4112-面向对象","4.11.2 面向对象",[14,85292,85293],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85295,85296],{},[20,85297],{"alt":22,"src":85298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85300,85301],{},"面向对象的特性：",[1611,85303,85304,85307,85310],{},[570,85305,85306],{},"封装性",[570,85308,85309],{},"继承性",[570,85311,85312],{},"多态性",[584,85314,85316],{"id":85315},"_4113-两者比较","4.11.3 两者比较",[14,85318,85319],{},[20,85320],{"alt":22,"src":85321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[555,85323,85325],{"id":85324},"_412-构造函数回顾","4.12 构造函数回顾",[14,85327,85328],{},[20,85329],{"alt":22,"src":85330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85332,85333],{},[20,85334],{"alt":22,"src":85335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85337,85338],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85340,85341],{},[20,85342],{"alt":22,"src":85343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[555,85345,85347],{"id":85346},"_413-原型","4.13 原型",[584,85349,85351],{"id":85350},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85353,85354],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85356,85357],{},[20,85358],{"alt":22,"src":85359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85361,85362],{},[20,85363],{"alt":22,"src":85364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85366,85367],{},"原型是构造函数的属性，它也是一个对象",[14,85369,85370],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85372,85373],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[25,85375,85377],{"className":53528,"code":85376,"language":53530,"meta":22,"style":22},"\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",[31,85378,85379,85387,85392,85400,85405,85410,85415,85420,85425,85429,85433,85437,85442,85447,85451,85456,85461,85466,85471,85476,85480,85488],{"__ignoreMap":22},[34,85380,85381,85383,85385],{"class":36,"line":37},[34,85382,1515],{"class":59},[34,85384,52261],{"class":51761},[34,85386,51768],{"class":59},[34,85388,85389],{"class":36,"line":44},[34,85390,85391],{"class":40},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[34,85393,85394,85396,85398],{"class":36,"line":50},[34,85395,52605],{"class":59},[34,85397,52274],{"class":51761},[34,85399,51768],{"class":59},[34,85401,85402],{"class":36,"line":56},[34,85403,85404],{"class":59},"    function Star(uname, age) {\n",[34,85406,85407],{"class":36,"line":107},[34,85408,85409],{"class":59},"      this.uname = uname,\n",[34,85411,85412],{"class":36,"line":196},[34,85413,85414],{"class":59},"        this.age = age\n",[34,85416,85417],{"class":36,"line":202},[34,85418,85419],{"class":59},"      \u002F\u002F this.sing = function () {\n",[34,85421,85422],{"class":36,"line":207},[34,85423,85424],{"class":59},"      \u002F\u002F   console.log('唱歌')\n",[34,85426,85427],{"class":36,"line":222},[34,85428,2864],{"emptyLinePlaceholder":540},[34,85430,85431],{"class":36,"line":227},[34,85432,60498],{"class":59},[34,85434,85435],{"class":36,"line":232},[34,85436,2651],{"class":59},[34,85438,85439],{"class":36,"line":238},[34,85440,85441],{"class":59},"    Star.prototype.sing = function () {\n",[34,85443,85444],{"class":36,"line":244},[34,85445,85446],{"class":59},"      console.log('唱歌')\n",[34,85448,85449],{"class":36,"line":250},[34,85450,2651],{"class":59},[34,85452,85453],{"class":36,"line":256},[34,85454,85455],{"class":59},"    \u002F\u002F console.dir(Star.prototype)\n",[34,85457,85458],{"class":36,"line":261},[34,85459,85460],{"class":59},"    const pink = new Star('pink', 18)\n",[34,85462,85463],{"class":36,"line":267},[34,85464,85465],{"class":59},"    const red = new Star('red', 20)\n",[34,85467,85468],{"class":36,"line":2138},[34,85469,85470],{"class":59},"    pink.sing()\n",[34,85472,85473],{"class":36,"line":2143},[34,85474,85475],{"class":59},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[34,85477,85478],{"class":36,"line":2157},[34,85479,2864],{"emptyLinePlaceholder":540},[34,85481,85482,85484,85486],{"class":36,"line":2162},[34,85483,52878],{"class":59},[34,85485,52274],{"class":51761},[34,85487,51768],{"class":59},[34,85489,85490,85492,85494],{"class":36,"line":2191},[34,85491,52246],{"class":59},[34,85493,52261],{"class":51761},[34,85495,51768],{"class":59},[14,85497,85498],{},[20,85499],{"alt":22,"src":85500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[25,85502,85504],{"className":53528,"code":85503,"language":53530,"meta":22,"style":22},"\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",[31,85505,85506,85514,85522,85527,85532,85537,85542,85546,85551,85556,85561,85565,85570,85574,85578,85583,85587,85595],{"__ignoreMap":22},[34,85507,85508,85510,85512],{"class":36,"line":37},[34,85509,1515],{"class":59},[34,85511,52261],{"class":51761},[34,85513,51768],{"class":59},[34,85515,85516,85518,85520],{"class":36,"line":44},[34,85517,52605],{"class":59},[34,85519,52274],{"class":51761},[34,85521,51768],{"class":59},[34,85523,85524],{"class":36,"line":50},[34,85525,85526],{"class":59},"    let that\n",[34,85528,85529],{"class":36,"line":56},[34,85530,85531],{"class":59},"    function Star(uname) {\n",[34,85533,85534],{"class":36,"line":107},[34,85535,85536],{"class":59},"      this.uname = uname\n",[34,85538,85539],{"class":36,"line":196},[34,85540,85541],{"class":59},"      that = this\n",[34,85543,85544],{"class":36,"line":202},[34,85545,2651],{"class":59},[34,85547,85548],{"class":36,"line":207},[34,85549,85550],{"class":59},"    \u002F\u002F 实例对象是 ldh\n",[34,85552,85553],{"class":36,"line":222},[34,85554,85555],{"class":59},"    const ldh = new Star('刘德华')\n",[34,85557,85558],{"class":36,"line":227},[34,85559,85560],{"class":59},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[34,85562,85563],{"class":36,"line":232},[34,85564,2864],{"emptyLinePlaceholder":540},[34,85566,85567],{"class":36,"line":238},[34,85568,85569],{"class":59},"    Star.sing = function () {\n",[34,85571,85572],{"class":36,"line":244},[34,85573,85446],{"class":59},[34,85575,85576],{"class":36,"line":250},[34,85577,2651],{"class":59},[34,85579,85580],{"class":36,"line":256},[34,85581,85582],{"class":59},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[34,85584,85585],{"class":36,"line":261},[34,85586,2864],{"emptyLinePlaceholder":540},[34,85588,85589,85591,85593],{"class":36,"line":267},[34,85590,52878],{"class":59},[34,85592,52274],{"class":51761},[34,85594,51768],{"class":59},[34,85596,85597,85599,85601],{"class":36,"line":2138},[34,85598,52246],{"class":59},[34,85600,52261],{"class":51761},[34,85602,51768],{"class":59},[14,85604,85605],{},"构造函数的this指向的是实例对象；",[14,85607,85608],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[584,85610,85612],{"id":85611},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85614,85615],{},[20,85616],{"alt":22,"src":85617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[25,85619,85621],{"className":53528,"code":85620,"language":53530,"meta":22,"style":22},"\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",[31,85622,85623,85631,85639,85644,85649,85654,85659,85664,85669,85674,85679,85684,85689,85693,85698,85703,85708,85713,85717,85722,85727,85732,85737,85741,85746,85751,85756,85761,85765,85770,85774,85782],{"__ignoreMap":22},[34,85624,85625,85627,85629],{"class":36,"line":37},[34,85626,1515],{"class":59},[34,85628,52261],{"class":51761},[34,85630,51768],{"class":59},[34,85632,85633,85635,85637],{"class":36,"line":44},[34,85634,52605],{"class":59},[34,85636,52274],{"class":51761},[34,85638,51768],{"class":59},[34,85640,85641],{"class":36,"line":50},[34,85642,85643],{"class":59},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[34,85645,85646],{"class":36,"line":56},[34,85647,85648],{"class":59},"    const arr = [1, 2, 3]\n",[34,85650,85651],{"class":36,"line":107},[34,85652,85653],{"class":59},"    \u002F\u002F 自己定义数组的扩展方法\n",[34,85655,85656],{"class":36,"line":196},[34,85657,85658],{"class":59},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[34,85660,85661],{"class":36,"line":202},[34,85662,85663],{"class":59},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[34,85665,85666],{"class":36,"line":207},[34,85667,85668],{"class":59},"    \u002F\u002F ①.最大值\n",[34,85670,85671],{"class":36,"line":222},[34,85672,85673],{"class":59},"    Array.prototype.max = function () {\n",[34,85675,85676],{"class":36,"line":227},[34,85677,85678],{"class":59},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[34,85680,85681],{"class":36,"line":232},[34,85682,85683],{"class":59},"      return Math.max(...this)\n",[34,85685,85686],{"class":36,"line":238},[34,85687,85688],{"class":59},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[34,85690,85691],{"class":36,"line":244},[34,85692,2651],{"class":59},[34,85694,85695],{"class":36,"line":250},[34,85696,85697],{"class":59},"    console.log(arr.max())\n",[34,85699,85700],{"class":36,"line":256},[34,85701,85702],{"class":59},"    \u002F\u002F ②最小值\n",[34,85704,85705],{"class":36,"line":261},[34,85706,85707],{"class":59},"    Array.prototype.min = function () {\n",[34,85709,85710],{"class":36,"line":267},[34,85711,85712],{"class":59},"      return Math.min(...this)\n",[34,85714,85715],{"class":36,"line":2138},[34,85716,2651],{"class":59},[34,85718,85719],{"class":36,"line":2143},[34,85720,85721],{"class":59},"    console.log(arr.min())\n",[34,85723,85724],{"class":36,"line":2157},[34,85725,85726],{"class":59},"    \u002F\u002F③求和\n",[34,85728,85729],{"class":36,"line":2162},[34,85730,85731],{"class":59},"    Array.prototype.sum = function () {\n",[34,85733,85734],{"class":36,"line":2191},[34,85735,85736],{"class":59},"      return this.reduce((prev, current) => prev + current, 0)\n",[34,85738,85739],{"class":36,"line":2196},[34,85740,2651],{"class":59},[34,85742,85743],{"class":36,"line":2213},[34,85744,85745],{"class":59},"    console.log(arr.sum())\n",[34,85747,85748],{"class":36,"line":2218},[34,85749,85750],{"class":59},"    \u002F\u002F ③排序\n",[34,85752,85753],{"class":36,"line":2223},[34,85754,85755],{"class":59},"    Array.prototype.rever = function () {\n",[34,85757,85758],{"class":36,"line":2228},[34,85759,85760],{"class":59},"      return this.reverse()\n",[34,85762,85763],{"class":36,"line":2242},[34,85764,2651],{"class":59},[34,85766,85767],{"class":36,"line":2247},[34,85768,85769],{"class":59},"    console.log(arr.rever())\n",[34,85771,85772],{"class":36,"line":3041},[34,85773,2864],{"emptyLinePlaceholder":540},[34,85775,85776,85778,85780],{"class":36,"line":3055},[34,85777,52878],{"class":59},[34,85779,52274],{"class":51761},[34,85781,51768],{"class":59},[34,85783,85784,85786,85788],{"class":36,"line":3063},[34,85785,52246],{"class":59},[34,85787,52261],{"class":51761},[34,85789,51768],{"class":59},[14,85791,85792],{},[20,85793],{"alt":22,"src":85794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[584,85796,85798],{"id":85797},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85800,85801],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85803,85804],{},[20,85805],{"alt":22,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[25,85808,85810],{"className":53528,"code":85809,"language":53530,"meta":22,"style":22},"\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",[31,85811,85812,85820,85828,85833,85838,85842,85847,85852,85857,85865],{"__ignoreMap":22},[34,85813,85814,85816,85818],{"class":36,"line":37},[34,85815,1515],{"class":59},[34,85817,52261],{"class":51761},[34,85819,51768],{"class":59},[34,85821,85822,85824,85826],{"class":36,"line":44},[34,85823,52605],{"class":59},[34,85825,52274],{"class":51761},[34,85827,51768],{"class":59},[34,85829,85830],{"class":36,"line":50},[34,85831,85832],{"class":59},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[34,85834,85835],{"class":36,"line":56},[34,85836,85837],{"class":59},"    function Star() {\n",[34,85839,85840],{"class":36,"line":107},[34,85841,2651],{"class":59},[34,85843,85844],{"class":36,"line":196},[34,85845,85846],{"class":59},"    const ldh = new Star()\n",[34,85848,85849],{"class":36,"line":202},[34,85850,85851],{"class":59},"    console.log(Star.prototype)\n",[34,85853,85854],{"class":36,"line":207},[34,85855,85856],{"class":59},"    console.log(Star.prototype.constructor === Star)\n",[34,85858,85859,85861,85863],{"class":36,"line":222},[34,85860,52878],{"class":59},[34,85862,52274],{"class":51761},[34,85864,51768],{"class":59},[34,85866,85867,85869,85871],{"class":36,"line":227},[34,85868,52246],{"class":59},[34,85870,52261],{"class":51761},[34,85872,51768],{"class":59},[14,85874,85875],{},[20,85876],{"alt":22,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85879,85880],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[25,85882,85884],{"className":53528,"code":85883,"language":53530,"meta":22,"style":22},"  \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",[31,85885,85886,85894,85898,85902,85906,85911,85916,85921,85925,85930,85935,85940,85945,85950,85955,85959,85963,85968,85973,85978,85982,85987,85992,85996,86000,86004],{"__ignoreMap":22},[34,85887,85888,85890,85892],{"class":36,"line":37},[34,85889,52605],{"class":59},[34,85891,52274],{"class":51761},[34,85893,51768],{"class":59},[34,85895,85896],{"class":36,"line":44},[34,85897,85832],{"class":59},[34,85899,85900],{"class":36,"line":50},[34,85901,85837],{"class":59},[34,85903,85904],{"class":36,"line":56},[34,85905,2651],{"class":59},[34,85907,85908],{"class":36,"line":107},[34,85909,85910],{"class":59},"    \u002F\u002F const ldh = new Star()\n",[34,85912,85913],{"class":36,"line":196},[34,85914,85915],{"class":59},"    \u002F\u002F console.log(Star.prototype)\n",[34,85917,85918],{"class":36,"line":202},[34,85919,85920],{"class":59},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[34,85922,85923],{"class":36,"line":207},[34,85924,2864],{"emptyLinePlaceholder":540},[34,85926,85927],{"class":36,"line":222},[34,85928,85929],{"class":59},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[34,85931,85932],{"class":36,"line":227},[34,85933,85934],{"class":59},"    \u002F\u002F Star.prototype.sing = function () {\n",[34,85936,85937],{"class":36,"line":232},[34,85938,85939],{"class":59},"    \u002F\u002F   console.log('唱歌')\n",[34,85941,85942],{"class":36,"line":238},[34,85943,85944],{"class":59},"    \u002F\u002F }\n",[34,85946,85947],{"class":36,"line":244},[34,85948,85949],{"class":59},"    \u002F\u002F Star.prototype.dance = function () {\n",[34,85951,85952],{"class":36,"line":250},[34,85953,85954],{"class":59},"    \u002F\u002F   console.log('跳舞')\n",[34,85956,85957],{"class":36,"line":256},[34,85958,85944],{"class":59},[34,85960,85961],{"class":36,"line":261},[34,85962,85851],{"class":59},[34,85964,85965],{"class":36,"line":267},[34,85966,85967],{"class":59},"    Star.prototype = {\n",[34,85969,85970],{"class":36,"line":2138},[34,85971,85972],{"class":59},"      sing: function () {\n",[34,85974,85975],{"class":36,"line":2143},[34,85976,85977],{"class":59},"        console.log('唱歌')\n",[34,85979,85980],{"class":36,"line":2157},[34,85981,78353],{"class":59},[34,85983,85984],{"class":36,"line":2162},[34,85985,85986],{"class":59},"      dance: function () {\n",[34,85988,85989],{"class":36,"line":2191},[34,85990,85991],{"class":59},"        console.log('跳舞')\n",[34,85993,85994],{"class":36,"line":2196},[34,85995,52859],{"class":59},[34,85997,85998],{"class":36,"line":2213},[34,85999,2651],{"class":59},[34,86001,86002],{"class":36,"line":2218},[34,86003,85851],{"class":59},[34,86005,86006,86008,86010],{"class":36,"line":2223},[34,86007,52878],{"class":59},[34,86009,52274],{"class":51761},[34,86011,51768],{"class":59},[14,86013,86014],{},"进行输出结果后会发现：",[14,86016,86017],{},[20,86018],{"alt":22,"src":86019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,86021,86022],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,86024,86025],{},"所以，要重新指回创造这个原型对象的构造函数",[25,86027,86029],{"className":71674,"code":86028,"language":71676,"meta":22,"style":22},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[31,86030,86031,86045,86050,86055,86066,86079,86084,86095,86109,86113],{"__ignoreMap":22},[34,86032,86033,86036,86038,86041,86043],{"class":36,"line":37},[34,86034,86035],{"class":63},"Star",[34,86037,1164],{"class":59},[34,86039,86040],{"class":63},"prototype",[34,86042,14028],{"class":112},[34,86044,16036],{"class":59},[34,86046,86047],{"class":36,"line":44},[34,86048,86049],{"class":40},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[34,86051,86052],{"class":36,"line":50},[34,86053,86054],{"class":59},"  constructor: Star,\n",[34,86056,86057,86060,86062,86064],{"class":36,"line":56},[34,86058,86059],{"class":2427},"  sing",[34,86061,51898],{"class":59},[34,86063,54910],{"class":112},[34,86065,54913],{"class":59},[34,86067,86068,86070,86072,86074,86077],{"class":36,"line":107},[34,86069,74214],{"class":59},[34,86071,58708],{"class":2427},[34,86073,617],{"class":59},[34,86075,86076],{"class":187},"'唱歌'",[34,86078,623],{"class":59},[34,86080,86081],{"class":36,"line":196},[34,86082,86083],{"class":59},"   },\n",[34,86085,86086,86089,86091,86093],{"class":36,"line":202},[34,86087,86088],{"class":2427},"   dance",[34,86090,51898],{"class":59},[34,86092,54910],{"class":112},[34,86094,54913],{"class":59},[34,86096,86097,86100,86102,86104,86107],{"class":36,"line":207},[34,86098,86099],{"class":59},"     console.",[34,86101,58708],{"class":2427},[34,86103,617],{"class":59},[34,86105,86106],{"class":187},"'跳舞'",[34,86108,623],{"class":59},[34,86110,86111],{"class":36,"line":222},[34,86112,4773],{"class":59},[34,86114,86115],{"class":36,"line":227},[34,86116,2036],{"class":59},[14,86118,86119],{},[20,86120],{"alt":22,"src":86121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86123,86124],{},"总结1：",[14,86126,86127],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86129,86130],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86132,86133],{},"constructor指的是他的来源",[14,86135,86136],{},[20,86137],{"alt":22,"src":86138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86140,86141],{},[20,86142],{"alt":22,"src":86143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86145,86146],{},"总结2：",[14,86148,86149],{},[20,86150],{"alt":22,"src":86151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86153,86154],{},[20,86155],{"alt":22,"src":86156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86158,86159],{},[20,86160],{"alt":22,"src":86161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[584,86163,86165],{"id":86164},"_4134-对象原型","4.13.4 对象原型",[14,86167,86168],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86170,86171],{},"对象原型就是__proto__这个属性",[14,86173,86174],{},[20,86175],{"alt":22,"src":86176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86178,86179],{},[20,86180],{"alt":22,"src":86181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86183,86184],{},[20,86185],{"alt":22,"src":86186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86188,86189],{},[20,86190],{"alt":22,"src":86191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[25,86193,86195],{"className":53528,"code":86194,"language":53530,"meta":22,"style":22},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,86196,86197,86205,86213,86217,86221,86225,86230,86238],{"__ignoreMap":22},[34,86198,86199,86201,86203],{"class":36,"line":37},[34,86200,1515],{"class":59},[34,86202,52261],{"class":51761},[34,86204,51768],{"class":59},[34,86206,86207,86209,86211],{"class":36,"line":44},[34,86208,52605],{"class":59},[34,86210,52274],{"class":51761},[34,86212,51768],{"class":59},[34,86214,86215],{"class":36,"line":50},[34,86216,85837],{"class":59},[34,86218,86219],{"class":36,"line":56},[34,86220,2651],{"class":59},[34,86222,86223],{"class":36,"line":107},[34,86224,85846],{"class":59},[34,86226,86227],{"class":36,"line":196},[34,86228,86229],{"class":59},"    console.log(ldh)\n",[34,86231,86232,86234,86236],{"class":36,"line":202},[34,86233,52878],{"class":59},[34,86235,52274],{"class":51761},[34,86237,51768],{"class":59},[34,86239,86240,86242,86244],{"class":36,"line":207},[34,86241,52246],{"class":59},[34,86243,52261],{"class":51761},[34,86245,51768],{"class":59},[14,86247,86248],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86250,86251],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86253,86254],{},[20,86255],{"alt":22,"src":86256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86258,86259],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86261,86262],{},"对象原型指向原型对象",[14,86264,86265],{},[20,86266],{"alt":22,"src":86267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86269,86270],{},[20,86271],{"alt":22,"src":86272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86274,86275],{},[20,86276],{"alt":22,"src":86277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[584,86279,86281],{"id":86280},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86283,86284],{},[20,86285],{"alt":22,"src":86286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[567,86288,86289,86292,86295,86298],{},[570,86290,86291],{},"构造函数通过new的形式实例化得到实例对象",[570,86293,86294],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[570,86296,86297],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[570,86299,86300],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86302,86303],{},[20,86304],{"alt":22,"src":86305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86307,86308],{},"题目梳理：",[14,86310,86311],{},[20,86312],{"alt":22,"src":86313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[584,86315,86317],{"id":86316},"_4136-原型继承","4.13.6 原型继承",[14,86319,86320],{},[20,86321],{"alt":22,"src":86322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86324,86325],{},[20,86326],{"alt":22,"src":86327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86329,86330],{},[20,86331],{"alt":22,"src":86332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86334,86335],{},[20,86336],{"alt":22,"src":86337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86339,86340],{},[20,86341],{"alt":22,"src":86342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86344,86345],{},[20,86346],{"alt":22,"src":86347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86349,86350],{},[20,86351],{"alt":22,"src":86352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86354,86355],{},[20,86356],{"alt":22,"src":86357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86359,86360],{},"回顾：构造函数每次new得到对象都是不同的",[584,86362,86364],{"id":86363},"_4137-原型链","4.13.7 原型链",[14,86366,86367],{},[20,86368],{"alt":22,"src":86369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86371,86372],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86374,86375],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86377,86378],{},"大哥是Object",[14,86380,86381],{},[20,86382],{"alt":22,"src":86383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86385,86386],{},[20,86387],{"alt":22,"src":86388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86390,86391],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86393,86394],{},"万物皆对象",[584,86396,86398],{"id":86397},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86400,86401],{},"模态框",[14,86403,86404],{},"以后遇见这个效果直接使用这个就行",[14,86406,86407],{},[20,86408],{"alt":22,"src":86409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86411,86412],{},[20,86413],{"alt":22,"src":86414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86416,86417],{},[20,86418],{"alt":22,"src":86419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86421,86422],{},[20,86423],{"alt":22,"src":86424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86426,86427],{},"补充知识点：",[567,86429,86430],{},[570,86431,86432],{},"append()",[14,86434,86435],{},[20,86436],{"alt":22,"src":86437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[25,86439,86441],{"className":51094,"code":86440,"language":51096,"meta":22,"style":22},"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",[31,86442,86443,86448,86453,86458,86462,86466,86470,86475,86480,86485,86489],{"__ignoreMap":22},[34,86444,86445],{"class":36,"line":37},[34,86446,86447],{"class":59},"append(param1)\n",[34,86449,86450],{"class":36,"line":44},[34,86451,86452],{"class":59},"append(param1, param2)\n",[34,86454,86455],{"class":36,"line":50},[34,86456,86457],{"class":59},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[34,86459,86460],{"class":36,"line":56},[34,86461,2864],{"emptyLinePlaceholder":540},[34,86463,86464],{"class":36,"line":107},[34,86465,2864],{"emptyLinePlaceholder":540},[34,86467,86468],{"class":36,"line":196},[34,86469,2864],{"emptyLinePlaceholder":540},[34,86471,86472],{"class":36,"line":202},[34,86473,86474],{"class":59},"let div = document.createElement(\"div\");\n",[34,86476,86477],{"class":36,"line":207},[34,86478,86479],{"class":59},"let p = document.createElement(\"p\");\n",[34,86481,86482],{"class":36,"line":222},[34,86483,86484],{"class":59},"div.append(p);\n",[34,86486,86487],{"class":36,"line":227},[34,86488,2864],{"emptyLinePlaceholder":540},[34,86490,86491,86494,86496],{"class":36,"line":232},[34,86492,86493],{"class":59},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[34,86495,14],{"class":51761},[34,86497,86498],{"class":59},"> ]\n",[567,86500,86501],{"start":44},[570,86502,86503],{},"remove()",[14,86505,86506],{},"自己删自己",[14,86508,86509],{},[20,86510],{"alt":22,"src":86511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[25,86513,86515],{"className":51094,"code":86514,"language":51096,"meta":22,"style":22},"\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",[31,86516,86517,86527,86541,86545,86553,86567,86587,86599,86607,86614,86626,86639,86674,86686,86697,86709,86721,86733,86760,86770,86774,86778,86787,86799,86813,86823,86835,86839,86843,86853,86864,86874,86884,86897,86910,86920,86924,86928,86937,86947,86959,86963,86967,86976,86986,86996,87008,87012,87016,87026,87042,87053,87063,87073,87085,87097,87109,87113,87117,87130,87141,87145,87153,87161,87165,87173,87193,87213,87221,87226,87252,87257,87262,87281,87286,87298,87303,87314,87324,87334,87339,87344,87348,87353,87358,87363,87383,87388,87408,87413,87427,87432,87437,87442,87458,87462,87467,87496,87501,87506,87511,87522,87526,87530,87534,87539,87564,87569,87594,87599,87608,87612,87617,87642,87646,87671,87675,87684,87688,87693,87711,87721,87725,87733,87741,87745],{"__ignoreMap":22},[34,86518,86519,86521,86523,86525],{"class":36,"line":37},[34,86520,51758],{"class":59},[34,86522,51762],{"class":51761},[34,86524,51765],{"class":2427},[34,86526,51768],{"class":59},[34,86528,86529,86531,86533,86535,86537,86539],{"class":36,"line":44},[34,86530,1515],{"class":59},[34,86532,51096],{"class":51761},[34,86534,51777],{"class":2427},[34,86536,447],{"class":59},[34,86538,51782],{"class":187},[34,86540,51768],{"class":59},[34,86542,86543],{"class":36,"line":50},[34,86544,2864],{"emptyLinePlaceholder":540},[34,86546,86547,86549,86551],{"class":36,"line":56},[34,86548,1515],{"class":59},[34,86550,51795],{"class":51761},[34,86552,51768],{"class":59},[34,86554,86555,86557,86559,86561,86563,86565],{"class":36,"line":107},[34,86556,52605],{"class":59},[34,86558,51805],{"class":51761},[34,86560,51808],{"class":2427},[34,86562,447],{"class":59},[34,86564,51813],{"class":187},[34,86566,51768],{"class":59},[34,86568,86569,86571,86573,86575,86577,86579,86581,86583,86585],{"class":36,"line":196},[34,86570,52605],{"class":59},[34,86572,51805],{"class":51761},[34,86574,15384],{"class":2427},[34,86576,447],{"class":59},[34,86578,51852],{"class":187},[34,86580,51832],{"class":2427},[34,86582,447],{"class":59},[34,86584,51859],{"class":187},[34,86586,51768],{"class":59},[34,86588,86589,86591,86593,86595,86597],{"class":36,"line":202},[34,86590,52605],{"class":59},[34,86592,51868],{"class":51761},[34,86594,51871],{"class":59},[34,86596,51868],{"class":51761},[34,86598,51768],{"class":59},[34,86600,86601,86603,86605],{"class":36,"line":207},[34,86602,52605],{"class":59},[34,86604,532],{"class":51761},[34,86606,51768],{"class":59},[34,86608,86609,86612],{"class":36,"line":222},[34,86610,86611],{"class":2427},"    .modal",[34,86613,16036],{"class":59},[34,86615,86616,86618,86620,86622,86624],{"class":36,"line":227},[34,86617,55232],{"class":63},[34,86619,51898],{"class":59},[34,86621,4437],{"class":63},[34,86623,51953],{"class":112},[34,86625,1765],{"class":59},[34,86627,86628,86631,86633,86635,86637],{"class":36,"line":232},[34,86629,86630],{"class":63},"      min-height",[34,86632,51898],{"class":59},[34,86634,919],{"class":63},[34,86636,51953],{"class":112},[34,86638,1765],{"class":59},[34,86640,86641,86643,86645,86647,86649,86651,86653,86655,86657,86659,86661,86663,86665,86667,86669,86672],{"class":36,"line":238},[34,86642,79211],{"class":63},[34,86644,51898],{"class":59},[34,86646,319],{"class":63},[34,86648,4557],{"class":63},[34,86650,2502],{"class":63},[34,86652,51953],{"class":112},[34,86654,79228],{"class":63},[34,86656,617],{"class":59},[34,86658,319],{"class":63},[34,86660,12899],{"class":59},[34,86662,319],{"class":63},[34,86664,12899],{"class":59},[34,86666,319],{"class":63},[34,86668,12899],{"class":59},[34,86670,86671],{"class":63},"0.1",[34,86673,3183],{"class":59},[34,86675,86676,86678,86680,86682,86684],{"class":36,"line":244},[34,86677,55595],{"class":63},[34,86679,51898],{"class":59},[34,86681,217],{"class":63},[34,86683,51953],{"class":112},[34,86685,1765],{"class":59},[34,86687,86688,86690,86692,86695],{"class":36,"line":250},[34,86689,55220],{"class":63},[34,86691,51898],{"class":59},[34,86693,86694],{"class":63},"fixed",[34,86696,1765],{"class":59},[34,86698,86699,86702,86704,86707],{"class":36,"line":256},[34,86700,86701],{"class":63},"      z-index",[34,86703,51898],{"class":59},[34,86705,86706],{"class":63},"999",[34,86708,1765],{"class":59},[34,86710,86711,86713,86715,86717,86719],{"class":36,"line":261},[34,86712,55299],{"class":63},[34,86714,51898],{"class":59},[34,86716,1262],{"class":63},[34,86718,936],{"class":112},[34,86720,1765],{"class":59},[34,86722,86723,86725,86727,86729,86731],{"class":36,"line":267},[34,86724,55408],{"class":63},[34,86726,51898],{"class":59},[34,86728,1262],{"class":63},[34,86730,936],{"class":112},[34,86732,1765],{"class":59},[34,86734,86735,86737,86739,86741,86743,86746,86748,86750,86752,86754,86756,86758],{"class":36,"line":2138},[34,86736,79252],{"class":63},[34,86738,51898],{"class":59},[34,86740,79257],{"class":63},[34,86742,617],{"class":59},[34,86744,86745],{"class":63},"-50",[34,86747,936],{"class":112},[34,86749,12899],{"class":59},[34,86751,86745],{"class":63},[34,86753,936],{"class":112},[34,86755,12899],{"class":59},[34,86757,319],{"class":63},[34,86759,3183],{"class":59},[34,86761,86762,86764,86766,86768],{"class":36,"line":2143},[34,86763,55345],{"class":63},[34,86765,51898],{"class":59},[34,86767,61303],{"class":63},[34,86769,1765],{"class":59},[34,86771,86772],{"class":36,"line":2157},[34,86773,2651],{"class":59},[34,86775,86776],{"class":36,"line":2162},[34,86777,2864],{"emptyLinePlaceholder":540},[34,86779,86780,86782,86785],{"class":36,"line":2191},[34,86781,86611],{"class":2427},[34,86783,86784],{"class":2427}," .header",[34,86786,16036],{"class":59},[34,86788,86789,86791,86793,86795,86797],{"class":36,"line":2196},[34,86790,57820],{"class":63},[34,86792,51898],{"class":59},[34,86794,1008],{"class":63},[34,86796,51953],{"class":112},[34,86798,1765],{"class":59},[34,86800,86801,86803,86805,86807,86809,86811],{"class":36,"line":2213},[34,86802,55156],{"class":63},[34,86804,51898],{"class":59},[34,86806,319],{"class":63},[34,86808,2502],{"class":63},[34,86810,51953],{"class":112},[34,86812,1765],{"class":59},[34,86814,86815,86817,86819,86821],{"class":36,"line":2218},[34,86816,55220],{"class":63},[34,86818,51898],{"class":59},[34,86820,55225],{"class":63},[34,86822,1765],{"class":59},[34,86824,86825,86827,86829,86831,86833],{"class":36,"line":2223},[34,86826,55383],{"class":63},[34,86828,51898],{"class":59},[34,86830,1306],{"class":63},[34,86832,51953],{"class":112},[34,86834,1765],{"class":59},[34,86836,86837],{"class":36,"line":2228},[34,86838,2651],{"class":59},[34,86840,86841],{"class":36,"line":2242},[34,86842,2864],{"emptyLinePlaceholder":540},[34,86844,86845,86847,86849,86851],{"class":36,"line":2247},[34,86846,86611],{"class":2427},[34,86848,86784],{"class":2427},[34,86850,3496],{"class":51761},[34,86852,16036],{"class":59},[34,86854,86855,86858,86860,86862],{"class":36,"line":3041},[34,86856,86857],{"class":63},"      font-style",[34,86859,51898],{"class":59},[34,86861,64302],{"class":63},[34,86863,1765],{"class":59},[34,86865,86866,86868,86870,86872],{"class":36,"line":3055},[34,86867,57877],{"class":63},[34,86869,51898],{"class":59},[34,86871,62531],{"class":63},[34,86873,1765],{"class":59},[34,86875,86876,86878,86880,86882],{"class":36,"line":3063},[34,86877,55220],{"class":63},[34,86879,51898],{"class":59},[34,86881,55292],{"class":63},[34,86883,1765],{"class":59},[34,86885,86886,86889,86891,86893,86895],{"class":36,"line":3068},[34,86887,86888],{"class":63},"      right",[34,86890,51898],{"class":59},[34,86892,1181],{"class":63},[34,86894,51953],{"class":112},[34,86896,1765],{"class":59},[34,86898,86899,86901,86903,86906,86908],{"class":36,"line":3074},[34,86900,55408],{"class":63},[34,86902,51898],{"class":59},[34,86904,86905],{"class":63},"-2",[34,86907,51953],{"class":112},[34,86909,1765],{"class":59},[34,86911,86912,86914,86916,86918],{"class":36,"line":3080},[34,86913,62486],{"class":63},[34,86915,51898],{"class":59},[34,86917,62491],{"class":63},[34,86919,1765],{"class":59},[34,86921,86922],{"class":36,"line":3085},[34,86923,2651],{"class":59},[34,86925,86926],{"class":36,"line":8412},[34,86927,2864],{"emptyLinePlaceholder":540},[34,86929,86930,86932,86935],{"class":36,"line":8436},[34,86931,86611],{"class":2427},[34,86933,86934],{"class":2427}," .body",[34,86936,16036],{"class":59},[34,86938,86939,86941,86943,86945],{"class":36,"line":8441},[34,86940,57747],{"class":63},[34,86942,51898],{"class":59},[34,86944,52053],{"class":63},[34,86946,1765],{"class":59},[34,86948,86949,86951,86953,86955,86957],{"class":36,"line":8447},[34,86950,55156],{"class":63},[34,86952,51898],{"class":59},[34,86954,1053],{"class":63},[34,86956,51953],{"class":112},[34,86958,1765],{"class":59},[34,86960,86961],{"class":36,"line":8474},[34,86962,2651],{"class":59},[34,86964,86965],{"class":36,"line":8479},[34,86966,2864],{"emptyLinePlaceholder":540},[34,86968,86969,86971,86974],{"class":36,"line":8485},[34,86970,86611],{"class":2427},[34,86972,86973],{"class":2427}," .footer",[34,86975,16036],{"class":59},[34,86977,86978,86980,86982,86984],{"class":36,"line":8497},[34,86979,55470],{"class":63},[34,86981,51898],{"class":59},[34,86983,51938],{"class":63},[34,86985,1765],{"class":59},[34,86987,86988,86990,86992,86994],{"class":36,"line":8509},[34,86989,55481],{"class":63},[34,86991,51898],{"class":59},[34,86993,52041],{"class":63},[34,86995,1765],{"class":59},[34,86997,86998,87000,87002,87004,87006],{"class":36,"line":8521},[34,86999,55156],{"class":63},[34,87001,51898],{"class":59},[34,87003,1053],{"class":63},[34,87005,51953],{"class":112},[34,87007,1765],{"class":59},[34,87009,87010],{"class":36,"line":10180},[34,87011,2651],{"class":59},[34,87013,87014],{"class":36,"line":10205},[34,87015,2864],{"emptyLinePlaceholder":540},[34,87017,87018,87020,87022,87024],{"class":36,"line":10228},[34,87019,86611],{"class":2427},[34,87021,86973],{"class":2427},[34,87023,1870],{"class":51761},[34,87025,16036],{"class":59},[34,87027,87028,87030,87032,87034,87036,87038,87040],{"class":36,"line":10252},[34,87029,55156],{"class":63},[34,87031,51898],{"class":59},[34,87033,309],{"class":63},[34,87035,51953],{"class":112},[34,87037,2547],{"class":63},[34,87039,51953],{"class":112},[34,87041,1765],{"class":59},[34,87043,87044,87046,87048,87051],{"class":36,"line":10257},[34,87045,62182],{"class":63},[34,87047,51898],{"class":59},[34,87049,87050],{"class":63},"#ccc",[34,87052,1765],{"class":59},[34,87054,87055,87057,87059,87061],{"class":36,"line":10262},[34,87056,64431],{"class":63},[34,87058,51898],{"class":59},[34,87060,55198],{"class":63},[34,87062,1765],{"class":59},[34,87064,87065,87067,87069,87071],{"class":36,"line":10267},[34,87066,57877],{"class":63},[34,87068,51898],{"class":59},[34,87070,61303],{"class":63},[34,87072,1765],{"class":59},[34,87074,87075,87077,87079,87081,87083],{"class":36,"line":10276},[34,87076,55595],{"class":63},[34,87078,51898],{"class":59},[34,87080,70],{"class":63},[34,87082,51953],{"class":112},[34,87084,1765],{"class":59},[34,87086,87087,87089,87091,87093,87095],{"class":36,"line":10281},[34,87088,62211],{"class":63},[34,87090,51898],{"class":59},[34,87092,1053],{"class":63},[34,87094,51953],{"class":112},[34,87096,1765],{"class":59},[34,87098,87099,87101,87103,87105,87107],{"class":36,"line":10287},[34,87100,55383],{"class":63},[34,87102,51898],{"class":59},[34,87104,1155],{"class":63},[34,87106,51953],{"class":112},[34,87108,1765],{"class":59},[34,87110,87111],{"class":36,"line":10308},[34,87112,2651],{"class":59},[34,87114,87115],{"class":36,"line":10314},[34,87116,2864],{"emptyLinePlaceholder":540},[34,87118,87119,87121,87123,87125,87128],{"class":36,"line":10328},[34,87120,86611],{"class":2427},[34,87122,86973],{"class":2427},[34,87124,1870],{"class":51761},[34,87126,87127],{"class":2427},".submit",[34,87129,16036],{"class":59},[34,87131,87132,87134,87136,87139],{"class":36,"line":10334},[34,87133,55345],{"class":63},[34,87135,51898],{"class":59},[34,87137,87138],{"class":63},"#369",[34,87140,1765],{"class":59},[34,87142,87143],{"class":36,"line":10361},[34,87144,2651],{"class":59},[34,87146,87147,87149,87151],{"class":36,"line":10370},[34,87148,52878],{"class":59},[34,87150,532],{"class":51761},[34,87152,51768],{"class":59},[34,87154,87155,87157,87159],{"class":36,"line":10376},[34,87156,52246],{"class":59},[34,87158,51795],{"class":51761},[34,87160,51768],{"class":59},[34,87162,87163],{"class":36,"line":10384},[34,87164,2864],{"emptyLinePlaceholder":540},[34,87166,87167,87169,87171],{"class":36,"line":10389},[34,87168,1515],{"class":59},[34,87170,52261],{"class":51761},[34,87172,51768],{"class":59},[34,87174,87175,87177,87179,87181,87183,87186,87189,87191],{"class":36,"line":17068},[34,87176,52605],{"class":59},[34,87178,54348],{"class":51761},[34,87180,15423],{"class":2427},[34,87182,447],{"class":59},[34,87184,87185],{"class":187},"\"delete\"",[34,87187,87188],{"class":59},">删除\u003C\u002F",[34,87190,54348],{"class":51761},[34,87192,51768],{"class":59},[34,87194,87195,87197,87199,87201,87203,87206,87209,87211],{"class":36,"line":17074},[34,87196,52605],{"class":59},[34,87198,54348],{"class":51761},[34,87200,15423],{"class":2427},[34,87202,447],{"class":59},[34,87204,87205],{"class":187},"\"login\"",[34,87207,87208],{"class":59},">登录\u003C\u002F",[34,87210,54348],{"class":51761},[34,87212,51768],{"class":59},[34,87214,87215,87217,87219],{"class":36,"line":17097},[34,87216,52605],{"class":59},[34,87218,52274],{"class":51761},[34,87220,51768],{"class":59},[34,87222,87223],{"class":36,"line":17103},[34,87224,87225],{"class":40},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[34,87227,87228,87230,87233,87235,87237,87239,87241,87243,87246,87248,87250],{"class":36,"line":17126},[34,87229,70545],{"class":112},[34,87231,87232],{"class":2427}," Modal",[34,87234,617],{"class":59},[34,87236,51868],{"class":5680},[34,87238,14028],{"class":112},[34,87240,70391],{"class":187},[34,87242,12899],{"class":59},[34,87244,87245],{"class":5680},"message",[34,87247,14028],{"class":112},[34,87249,70391],{"class":187},[34,87251,12906],{"class":59},[34,87253,87254],{"class":36,"line":17140},[34,87255,87256],{"class":40},"      \u002F\u002F 创建Model 模态框盒子\n",[34,87258,87259],{"class":36,"line":17160},[34,87260,87261],{"class":40},"      \u002F\u002F 1.1 创建div标签\n",[34,87263,87264,87266,87269,87271,87273,87275,87277,87279],{"class":36,"line":17166},[34,87265,70512],{"class":63},[34,87267,87268],{"class":59},".modalBox ",[34,87270,447],{"class":112},[34,87272,54857],{"class":59},[34,87274,70612],{"class":2427},[34,87276,617],{"class":59},[34,87278,82392],{"class":187},[34,87280,623],{"class":59},[34,87282,87283],{"class":36,"line":17177},[34,87284,87285],{"class":40},"      \u002F\u002F 1.2 给div 添加类名为model\n",[34,87287,87288,87290,87293,87295],{"class":36,"line":17200},[34,87289,70512],{"class":63},[34,87291,87292],{"class":59},".modalBox.className ",[34,87294,447],{"class":112},[34,87296,87297],{"class":187}," 'modal'\n",[34,87299,87300],{"class":36,"line":17222},[34,87301,87302],{"class":40},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[34,87304,87305,87307,87310,87312],{"class":36,"line":17227},[34,87306,70512],{"class":63},[34,87308,87309],{"class":59},".modalBox.innerHTML ",[34,87311,447],{"class":112},[34,87313,70629],{"class":187},[34,87315,87316,87319,87321],{"class":36,"line":17233},[34,87317,87318],{"class":187},"        \u003Cdiv class=\"header\">${",[34,87320,51868],{"class":59},[34,87322,87323],{"class":187},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[34,87325,87326,87329,87331],{"class":36,"line":17247},[34,87327,87328],{"class":187},"        \u003Cdiv class=\"body\">${",[34,87330,87245],{"class":59},[34,87332,87333],{"class":187},"}\u003C\u002Fdiv>\n",[34,87335,87336],{"class":36,"line":17260},[34,87337,87338],{"class":187},"      `\n",[34,87340,87341],{"class":36,"line":17265},[34,87342,87343],{"class":40},"      \u002F\u002F console.log(this.modalBox)\n",[34,87345,87346],{"class":36,"line":17279},[34,87347,2651],{"class":59},[34,87349,87350],{"class":36,"line":17284},[34,87351,87352],{"class":40},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[34,87354,87355],{"class":36,"line":17290},[34,87356,87357],{"class":40},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[34,87359,87360],{"class":36,"line":17295},[34,87361,87362],{"class":40},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[34,87364,87365,87368,87370,87372,87374,87377,87379,87381],{"class":36,"line":17309},[34,87366,87367],{"class":63},"    Modal",[34,87369,1164],{"class":59},[34,87371,86040],{"class":63},[34,87373,1164],{"class":59},[34,87375,87376],{"class":2427},"open",[34,87378,14028],{"class":112},[34,87380,59379],{"class":112},[34,87382,54913],{"class":59},[34,87384,87385],{"class":36,"line":17314},[34,87386,87387],{"class":40},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[34,87389,87390,87392,87395,87397,87399,87401,87403,87406],{"class":36,"line":17319},[34,87391,58689],{"class":112},[34,87393,87394],{"class":63}," box",[34,87396,14028],{"class":112},[34,87398,54857],{"class":59},[34,87400,54860],{"class":2427},[34,87402,617],{"class":59},[34,87404,87405],{"class":187},"'.modal'",[34,87407,623],{"class":59},[34,87409,87410],{"class":36,"line":17333},[34,87411,87412],{"class":40},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[34,87414,87415,87418,87420,87423,87425],{"class":36,"line":17345},[34,87416,87417],{"class":59},"      box ",[34,87419,2179],{"class":112},[34,87421,87422],{"class":59}," box.",[34,87424,57467],{"class":2427},[34,87426,2440],{"class":59},[34,87428,87429],{"class":36,"line":17350},[34,87430,87431],{"class":40},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[34,87433,87434],{"class":36,"line":17363},[34,87435,87436],{"class":40},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[34,87438,87439],{"class":36,"line":17368},[34,87440,87441],{"class":40},"      \u002F\u002F append可以增加对象\n",[34,87443,87444,87447,87450,87452,87455],{"class":36,"line":17373},[34,87445,87446],{"class":59},"      document.body.",[34,87448,87449],{"class":2427},"append",[34,87451,617],{"class":59},[34,87453,87454],{"class":63},"this",[34,87456,87457],{"class":59},".modalBox)\n",[34,87459,87460],{"class":36,"line":17378},[34,87461,2864],{"emptyLinePlaceholder":540},[34,87463,87464],{"class":36,"line":17391},[34,87465,87466],{"class":40},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[34,87468,87469,87471,87474,87476,87478,87481,87483,87485,87487,87489,87492,87494],{"class":36,"line":17396},[34,87470,70512],{"class":63},[34,87472,87473],{"class":59},".modalBox.",[34,87475,54860],{"class":2427},[34,87477,617],{"class":59},[34,87479,87480],{"class":187},"'i'",[34,87482,31289],{"class":59},[34,87484,58274],{"class":2427},[34,87486,617],{"class":59},[34,87488,58279],{"class":187},[34,87490,87491],{"class":59},", () ",[34,87493,85183],{"class":112},[34,87495,16036],{"class":59},[34,87497,87498],{"class":36,"line":33096},[34,87499,87500],{"class":40},"        \u002F\u002F 这个地方需要用到箭头函数\n",[34,87502,87503],{"class":36,"line":33102},[34,87504,87505],{"class":40},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[34,87507,87508],{"class":36,"line":33108},[34,87509,87510],{"class":40},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[34,87512,87513,87515,87517,87520],{"class":36,"line":33114},[34,87514,65187],{"class":63},[34,87516,1164],{"class":59},[34,87518,87519],{"class":2427},"close",[34,87521,2440],{"class":59},[34,87523,87524],{"class":36,"line":33120},[34,87525,65276],{"class":59},[34,87527,87528],{"class":36,"line":33131},[34,87529,2651],{"class":59},[34,87531,87532],{"class":36,"line":33137},[34,87533,2864],{"emptyLinePlaceholder":540},[34,87535,87536],{"class":36,"line":33157},[34,87537,87538],{"class":40},"    \u002F\u002F 测试一下 点击 删除按钮\n",[34,87540,87541,87543,87545,87547,87550,87552,87554,87556,87558,87560,87562],{"class":36,"line":33163},[34,87542,52868],{"class":59},[34,87544,54860],{"class":2427},[34,87546,617],{"class":59},[34,87548,87549],{"class":187},"'#delete'",[34,87551,31289],{"class":59},[34,87553,58274],{"class":2427},[34,87555,617],{"class":59},[34,87557,58279],{"class":187},[34,87559,87491],{"class":59},[34,87561,85183],{"class":112},[34,87563,16036],{"class":59},[34,87565,87566],{"class":36,"line":33174},[34,87567,87568],{"class":40},"      \u002F\u002F 先调用Model构造函数\n",[34,87570,87571,87573,87576,87578,87580,87582,87584,87587,87589,87592],{"class":36,"line":33180},[34,87572,58689],{"class":112},[34,87574,87575],{"class":63}," del",[34,87577,14028],{"class":112},[34,87579,12042],{"class":112},[34,87581,87232],{"class":2427},[34,87583,617],{"class":59},[34,87585,87586],{"class":187},"'温馨的提示'",[34,87588,12899],{"class":59},[34,87590,87591],{"class":187},"'您没有删除权限操作'",[34,87593,623],{"class":59},[34,87595,87596],{"class":36,"line":33186},[34,87597,87598],{"class":40},"      \u002F\u002F 实例对象调用open方法\n",[34,87600,87601,87604,87606],{"class":36,"line":33192},[34,87602,87603],{"class":59},"      del.",[34,87605,87376],{"class":2427},[34,87607,2440],{"class":59},[34,87609,87610],{"class":36,"line":33198},[34,87611,33923],{"class":59},[34,87613,87614],{"class":36,"line":33204},[34,87615,87616],{"class":40},"    \u002F\u002F 测试一下 点击 登录按钮\n",[34,87618,87619,87621,87623,87625,87628,87630,87632,87634,87636,87638,87640],{"class":36,"line":33210},[34,87620,52868],{"class":59},[34,87622,54860],{"class":2427},[34,87624,617],{"class":59},[34,87626,87627],{"class":187},"'#login'",[34,87629,31289],{"class":59},[34,87631,58274],{"class":2427},[34,87633,617],{"class":59},[34,87635,58279],{"class":187},[34,87637,87491],{"class":59},[34,87639,85183],{"class":112},[34,87641,16036],{"class":59},[34,87643,87644],{"class":36,"line":33216},[34,87645,87568],{"class":40},[34,87647,87648,87650,87653,87655,87657,87659,87661,87664,87666,87669],{"class":36,"line":33236},[34,87649,58689],{"class":112},[34,87651,87652],{"class":63}," log",[34,87654,14028],{"class":112},[34,87656,12042],{"class":112},[34,87658,87232],{"class":2427},[34,87660,617],{"class":59},[34,87662,87663],{"class":187},"'友情提示'",[34,87665,12899],{"class":59},[34,87667,87668],{"class":187},"'您还没有登录呢'",[34,87670,623],{"class":59},[34,87672,87673],{"class":36,"line":33242},[34,87674,87598],{"class":40},[34,87676,87677,87680,87682],{"class":36,"line":33258},[34,87678,87679],{"class":59},"      log.",[34,87681,87376],{"class":2427},[34,87683,2440],{"class":59},[34,87685,87686],{"class":36,"line":33264},[34,87687,33923],{"class":59},[34,87689,87690],{"class":36,"line":33278},[34,87691,87692],{"class":40},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[34,87694,87695,87697,87699,87701,87703,87705,87707,87709],{"class":36,"line":33284},[34,87696,87367],{"class":63},[34,87698,1164],{"class":59},[34,87700,86040],{"class":63},[34,87702,1164],{"class":59},[34,87704,87519],{"class":2427},[34,87706,14028],{"class":112},[34,87708,59379],{"class":112},[34,87710,54913],{"class":59},[34,87712,87713,87715,87717,87719],{"class":36,"line":33299},[34,87714,70512],{"class":63},[34,87716,87473],{"class":59},[34,87718,57467],{"class":2427},[34,87720,2440],{"class":59},[34,87722,87723],{"class":36,"line":33305},[34,87724,2651],{"class":59},[34,87726,87727,87729,87731],{"class":36,"line":33314},[34,87728,52878],{"class":59},[34,87730,52274],{"class":51761},[34,87732,51768],{"class":59},[34,87734,87735,87737,87739],{"class":36,"line":33320},[34,87736,52246],{"class":59},[34,87738,52261],{"class":51761},[34,87740,51768],{"class":59},[34,87742,87743],{"class":36,"line":33329},[34,87744,2864],{"emptyLinePlaceholder":540},[34,87746,87747,87749,87751],{"class":36,"line":33335},[34,87748,52246],{"class":59},[34,87750,51096],{"class":51761},[34,87752,51768],{"class":59},[14,87754,87755],{},[20,87756],{"alt":22,"src":87757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[555,87759,87761],{"id":87760},"_414-深浅拷贝","4.14 深浅拷贝",[584,87763,87765],{"id":87764},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87767,87768],{},[20,87769],{"alt":22,"src":87770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87772,87773],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87775,87776],{},[20,87777],{"alt":22,"src":87778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87780,87781],{},[20,87782],{"alt":22,"src":87783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87785,87786],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87788,87789],{},[20,87790],{"alt":22,"src":87791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87793,11796],{},[14,87795,87796],{},[20,87797],{"alt":22,"src":87798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[584,87800,87802],{"id":87801},"_4142-深拷贝","4.14.2 深拷贝",[14,87804,87805],{},"深拷贝：拷贝的是对象，不是地址",[14,87807,87808],{},"常用的三种方法：",[567,87810,87811,87814,87817],{},[570,87812,87813],{},"通过递归实现深拷贝",[570,87815,87816],{},"lodash\u002FcloneDeep",[570,87818,87819],{},"通过JSON.stringify()实现",[22462,87821,87823],{"id":87822},"_41421-递归函数","4.14.2.1 递归函数",[14,87825,87826],{},[20,87827],{"alt":22,"src":87828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[567,87830,87831],{},[570,87832,87833],{},"死递归占溢出：",[25,87835,87837],{"className":53528,"code":87836,"language":53530,"meta":22,"style":22},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,87838,87839,87847,87855,87859,87864,87868,87873,87881],{"__ignoreMap":22},[34,87840,87841,87843,87845],{"class":36,"line":37},[34,87842,1515],{"class":59},[34,87844,52261],{"class":51761},[34,87846,51768],{"class":59},[34,87848,87849,87851,87853],{"class":36,"line":44},[34,87850,52605],{"class":59},[34,87852,52274],{"class":51761},[34,87854,51768],{"class":59},[34,87856,87857],{"class":36,"line":50},[34,87858,77604],{"class":59},[34,87860,87861],{"class":36,"line":56},[34,87862,87863],{"class":59},"      fn()\n",[34,87865,87866],{"class":36,"line":107},[34,87867,2651],{"class":59},[34,87869,87870],{"class":36,"line":196},[34,87871,87872],{"class":59},"    fn()\n",[34,87874,87875,87877,87879],{"class":36,"line":202},[34,87876,52878],{"class":59},[34,87878,52274],{"class":51761},[34,87880,51768],{"class":59},[34,87882,87883,87885,87887],{"class":36,"line":207},[34,87884,52246],{"class":59},[34,87886,52261],{"class":51761},[34,87888,51768],{"class":59},[567,87890,87891],{"start":44},[570,87892,87893],{},"递归函数要加判断条件：",[14,87895,87896],{},[20,87897],{"alt":22,"src":87898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[567,87900,87901],{"start":50},[570,87902,87903],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[25,87905,87907],{"className":51094,"code":87906,"language":51096,"meta":22,"style":22},"\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",[31,87908,87909,87919,87933,87937,87945,87959,87979,87991,87999,88003,88011,88023,88031,88039,88064,88076,88080,88087,88095,88103,88107],{"__ignoreMap":22},[34,87910,87911,87913,87915,87917],{"class":36,"line":37},[34,87912,51758],{"class":59},[34,87914,51762],{"class":51761},[34,87916,51765],{"class":2427},[34,87918,51768],{"class":59},[34,87920,87921,87923,87925,87927,87929,87931],{"class":36,"line":44},[34,87922,1515],{"class":59},[34,87924,51096],{"class":51761},[34,87926,51777],{"class":2427},[34,87928,447],{"class":59},[34,87930,51782],{"class":187},[34,87932,51768],{"class":59},[34,87934,87935],{"class":36,"line":50},[34,87936,2864],{"emptyLinePlaceholder":540},[34,87938,87939,87941,87943],{"class":36,"line":56},[34,87940,1515],{"class":59},[34,87942,51795],{"class":51761},[34,87944,51768],{"class":59},[34,87946,87947,87949,87951,87953,87955,87957],{"class":36,"line":107},[34,87948,52605],{"class":59},[34,87950,51805],{"class":51761},[34,87952,51808],{"class":2427},[34,87954,447],{"class":59},[34,87956,51813],{"class":187},[34,87958,51768],{"class":59},[34,87960,87961,87963,87965,87967,87969,87971,87973,87975,87977],{"class":36,"line":196},[34,87962,52605],{"class":59},[34,87964,51805],{"class":51761},[34,87966,15384],{"class":2427},[34,87968,447],{"class":59},[34,87970,51852],{"class":187},[34,87972,51832],{"class":2427},[34,87974,447],{"class":59},[34,87976,51859],{"class":187},[34,87978,51768],{"class":59},[34,87980,87981,87983,87985,87987,87989],{"class":36,"line":202},[34,87982,52605],{"class":59},[34,87984,51868],{"class":51761},[34,87986,51871],{"class":59},[34,87988,51868],{"class":51761},[34,87990,51768],{"class":59},[34,87992,87993,87995,87997],{"class":36,"line":207},[34,87994,52246],{"class":59},[34,87996,51795],{"class":51761},[34,87998,51768],{"class":59},[34,88000,88001],{"class":36,"line":222},[34,88002,2864],{"emptyLinePlaceholder":540},[34,88004,88005,88007,88009],{"class":36,"line":227},[34,88006,1515],{"class":59},[34,88008,52261],{"class":51761},[34,88010,51768],{"class":59},[34,88012,88013,88015,88017,88019,88021],{"class":36,"line":232},[34,88014,52605],{"class":59},[34,88016,52072],{"class":51761},[34,88018,55775],{"class":59},[34,88020,52072],{"class":51761},[34,88022,51768],{"class":59},[34,88024,88025,88027,88029],{"class":36,"line":238},[34,88026,52605],{"class":59},[34,88028,52274],{"class":51761},[34,88030,51768],{"class":59},[34,88032,88033,88035,88037],{"class":36,"line":244},[34,88034,70545],{"class":112},[34,88036,74234],{"class":2427},[34,88038,11317],{"class":59},[34,88040,88041,88043,88045,88047,88049,88051,88053,88055,88057,88059,88062],{"class":36,"line":250},[34,88042,56232],{"class":59},[34,88044,54860],{"class":2427},[34,88046,617],{"class":59},[34,88048,82392],{"class":187},[34,88050,74710],{"class":59},[34,88052,447],{"class":112},[34,88054,12042],{"class":112},[34,88056,74250],{"class":2427},[34,88058,17725],{"class":59},[34,88060,88061],{"class":2427},"toLocaleString",[34,88063,2440],{"class":59},[34,88065,88066,88069,88072,88074],{"class":36,"line":256},[34,88067,88068],{"class":2427},"      setTimeout",[34,88070,88071],{"class":59},"(getTime, ",[34,88073,6874],{"class":63},[34,88075,623],{"class":59},[34,88077,88078],{"class":36,"line":261},[34,88079,2651],{"class":59},[34,88081,88082,88085],{"class":36,"line":267},[34,88083,88084],{"class":2427},"    getTime",[34,88086,2440],{"class":59},[34,88088,88089,88091,88093],{"class":36,"line":2138},[34,88090,52878],{"class":59},[34,88092,52274],{"class":51761},[34,88094,51768],{"class":59},[34,88096,88097,88099,88101],{"class":36,"line":2143},[34,88098,52246],{"class":59},[34,88100,52261],{"class":51761},[34,88102,51768],{"class":59},[34,88104,88105],{"class":36,"line":2157},[34,88106,2864],{"emptyLinePlaceholder":540},[34,88108,88109,88111,88113],{"class":36,"line":2162},[34,88110,52246],{"class":59},[34,88112,51096],{"class":51761},[34,88114,51768],{"class":59},[14,88116,88117],{},[20,88118],{"alt":22,"src":88119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[567,88121,88122],{"start":56},[570,88123,87813],{},[14,88125,88126],{},[20,88127],{"alt":22,"src":88128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88130,88131],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88133,39651],{},[14,88135,88136],{},"这个是简易版的递归函数深拷贝",[14,88138,88139],{},"一定要注意先数组再对象，因为万物皆可对象",[25,88141,88143],{"className":51094,"code":88142,"language":51096,"meta":22,"style":22},"\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",[31,88144,88145,88155,88169,88173,88181,88195,88215,88227,88235,88239,88247,88255,88265,88274,88282,88298,88302,88310,88314,88318,88330,88335,88354,88370,88375,88380,88385,88400,88405,88410,88419,88427,88444,88452,88458,88466,88471,88476,88485,88489,88493,88497,88508,88517,88527,88541,88551,88559,88567,88575,88579],{"__ignoreMap":22},[34,88146,88147,88149,88151,88153],{"class":36,"line":37},[34,88148,51758],{"class":59},[34,88150,51762],{"class":51761},[34,88152,51765],{"class":2427},[34,88154,51768],{"class":59},[34,88156,88157,88159,88161,88163,88165,88167],{"class":36,"line":44},[34,88158,1515],{"class":59},[34,88160,51096],{"class":51761},[34,88162,51777],{"class":2427},[34,88164,447],{"class":59},[34,88166,51782],{"class":187},[34,88168,51768],{"class":59},[34,88170,88171],{"class":36,"line":50},[34,88172,2864],{"emptyLinePlaceholder":540},[34,88174,88175,88177,88179],{"class":36,"line":56},[34,88176,1515],{"class":59},[34,88178,51795],{"class":51761},[34,88180,51768],{"class":59},[34,88182,88183,88185,88187,88189,88191,88193],{"class":36,"line":107},[34,88184,52605],{"class":59},[34,88186,51805],{"class":51761},[34,88188,51808],{"class":2427},[34,88190,447],{"class":59},[34,88192,51813],{"class":187},[34,88194,51768],{"class":59},[34,88196,88197,88199,88201,88203,88205,88207,88209,88211,88213],{"class":36,"line":196},[34,88198,52605],{"class":59},[34,88200,51805],{"class":51761},[34,88202,15384],{"class":2427},[34,88204,447],{"class":59},[34,88206,51852],{"class":187},[34,88208,51832],{"class":2427},[34,88210,447],{"class":59},[34,88212,51859],{"class":187},[34,88214,51768],{"class":59},[34,88216,88217,88219,88221,88223,88225],{"class":36,"line":202},[34,88218,52605],{"class":59},[34,88220,51868],{"class":51761},[34,88222,51871],{"class":59},[34,88224,51868],{"class":51761},[34,88226,51768],{"class":59},[34,88228,88229,88231,88233],{"class":36,"line":207},[34,88230,52246],{"class":59},[34,88232,51795],{"class":51761},[34,88234,51768],{"class":59},[34,88236,88237],{"class":36,"line":222},[34,88238,2864],{"emptyLinePlaceholder":540},[34,88240,88241,88243,88245],{"class":36,"line":227},[34,88242,1515],{"class":59},[34,88244,52261],{"class":51761},[34,88246,51768],{"class":59},[34,88248,88249,88251,88253],{"class":36,"line":232},[34,88250,52605],{"class":59},[34,88252,52274],{"class":51761},[34,88254,51768],{"class":59},[34,88256,88257,88259,88261,88263],{"class":36,"line":238},[34,88258,11685],{"class":112},[34,88260,70432],{"class":63},[34,88262,14028],{"class":112},[34,88264,16036],{"class":59},[34,88266,88267,88269,88272],{"class":36,"line":244},[34,88268,72077],{"class":59},[34,88270,88271],{"class":187},"'pink'",[34,88273,31929],{"class":59},[34,88275,88276,88278,88280],{"class":36,"line":250},[34,88277,72087],{"class":59},[34,88279,1256],{"class":63},[34,88281,31929],{"class":59},[34,88283,88284,88287,88290,88292,88295],{"class":36,"line":256},[34,88285,88286],{"class":59},"      hobby: [",[34,88288,88289],{"class":187},"'乒乓球'",[34,88291,12899],{"class":59},[34,88293,88294],{"class":187},"'足球'",[34,88296,88297],{"class":59},"],\n",[34,88299,88300],{"class":36,"line":261},[34,88301,78333],{"class":59},[34,88303,88304,88307],{"class":36,"line":267},[34,88305,88306],{"class":59},"        baby: ",[34,88308,88309],{"class":187},"'小pink'\n",[34,88311,88312],{"class":36,"line":2138},[34,88313,52859],{"class":59},[34,88315,88316],{"class":36,"line":2143},[34,88317,2651],{"class":59},[34,88319,88320,88322,88325,88327],{"class":36,"line":2157},[34,88321,11685],{"class":112},[34,88323,88324],{"class":63}," o",[34,88326,14028],{"class":112},[34,88328,88329],{"class":59}," {}\n",[34,88331,88332],{"class":36,"line":2162},[34,88333,88334],{"class":40},"    \u002F\u002F 拷贝函数\n",[34,88336,88337,88339,88342,88344,88347,88349,88352],{"class":36,"line":2191},[34,88338,70545],{"class":112},[34,88340,88341],{"class":2427}," deepCopy",[34,88343,617],{"class":59},[34,88345,88346],{"class":5680},"newObj",[34,88348,12899],{"class":59},[34,88350,88351],{"class":5680},"oldObj",[34,88353,12906],{"class":59},[34,88355,88356,88358,88360,88362,88365,88367],{"class":36,"line":2196},[34,88357,52745],{"class":112},[34,88359,2122],{"class":59},[34,88361,52308],{"class":112},[34,88363,88364],{"class":59}," k ",[34,88366,26508],{"class":112},[34,88368,88369],{"class":59}," oldObj) {\n",[34,88371,88372],{"class":36,"line":2213},[34,88373,88374],{"class":40},"        \u002F\u002F 处理数组的问题\n",[34,88376,88377],{"class":36,"line":2218},[34,88378,88379],{"class":40},"        \u002F\u002F 判断是否属于数组\n",[34,88381,88382],{"class":36,"line":2223},[34,88383,88384],{"class":40},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[34,88386,88387,88389,88392,88395,88398],{"class":36,"line":2228},[34,88388,2961],{"class":112},[34,88390,88391],{"class":59}," (oldObj[k] ",[34,88393,88394],{"class":112},"instanceof",[34,88396,88397],{"class":2427}," Array",[34,88399,12906],{"class":59},[34,88401,88402],{"class":36,"line":2242},[34,88403,88404],{"class":40},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[34,88406,88407],{"class":36,"line":2247},[34,88408,88409],{"class":40},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[34,88411,88412,88415,88417],{"class":36,"line":3041},[34,88413,88414],{"class":59},"          newObj[k] ",[34,88416,447],{"class":112},[34,88418,52299],{"class":59},[34,88420,88421,88424],{"class":36,"line":3055},[34,88422,88423],{"class":2427},"          deepCopy",[34,88425,88426],{"class":59},"(newObj[k], oldObj[k])\n",[34,88428,88429,88431,88433,88435,88437,88439,88442],{"class":36,"line":3063},[34,88430,80541],{"class":59},[34,88432,2165],{"class":112},[34,88434,2168],{"class":112},[34,88436,88391],{"class":59},[34,88438,88394],{"class":112},[34,88440,88441],{"class":2427}," Object",[34,88443,12906],{"class":59},[34,88445,88446,88448,88450],{"class":36,"line":3068},[34,88447,88414],{"class":59},[34,88449,447],{"class":112},[34,88451,88329],{"class":59},[34,88453,88454,88456],{"class":36,"line":3074},[34,88455,88423],{"class":2427},[34,88457,88426],{"class":59},[34,88459,88460,88462,88464],{"class":36,"line":3080},[34,88461,80541],{"class":59},[34,88463,2165],{"class":112},[34,88465,16036],{"class":59},[34,88467,88468],{"class":36,"line":3085},[34,88469,88470],{"class":40},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[34,88472,88473],{"class":36,"line":8412},[34,88474,88475],{"class":40},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[34,88477,88478,88480,88482],{"class":36,"line":8436},[34,88479,88414],{"class":59},[34,88481,447],{"class":112},[34,88483,88484],{"class":59}," oldObj[k]\n",[34,88486,88487],{"class":36,"line":8441},[34,88488,2993],{"class":59},[34,88490,88491],{"class":36,"line":8447},[34,88492,52859],{"class":59},[34,88494,88495],{"class":36,"line":8474},[34,88496,2651],{"class":59},[34,88498,88499,88502,88505],{"class":36,"line":8479},[34,88500,88501],{"class":2427},"    deepCopy",[34,88503,88504],{"class":59},"(o, obj) ",[34,88506,88507],{"class":40},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[34,88509,88510,88512,88514],{"class":36,"line":8485},[34,88511,74214],{"class":59},[34,88513,58708],{"class":2427},[34,88515,88516],{"class":59},"(o)\n",[34,88518,88519,88522,88524],{"class":36,"line":8497},[34,88520,88521],{"class":59},"    o.age ",[34,88523,447],{"class":112},[34,88525,88526],{"class":63}," 20\n",[34,88528,88529,88532,88534,88536,88538],{"class":36,"line":8509},[34,88530,88531],{"class":59},"    o.hobby[",[34,88533,319],{"class":63},[34,88535,4907],{"class":59},[34,88537,447],{"class":112},[34,88539,88540],{"class":187}," '篮球'\n",[34,88542,88543,88546,88548],{"class":36,"line":8521},[34,88544,88545],{"class":59},"    o.family ",[34,88547,447],{"class":112},[34,88549,88550],{"class":187}," '老pink'\n",[34,88552,88553,88555,88557],{"class":36,"line":10180},[34,88554,74214],{"class":59},[34,88556,58708],{"class":2427},[34,88558,70497],{"class":59},[34,88560,88561,88563,88565],{"class":36,"line":10205},[34,88562,52878],{"class":59},[34,88564,52274],{"class":51761},[34,88566,51768],{"class":59},[34,88568,88569,88571,88573],{"class":36,"line":10228},[34,88570,52246],{"class":59},[34,88572,52261],{"class":51761},[34,88574,51768],{"class":59},[34,88576,88577],{"class":36,"line":10252},[34,88578,2864],{"emptyLinePlaceholder":540},[34,88580,88581,88583,88585],{"class":36,"line":10257},[34,88582,52246],{"class":59},[34,88584,51096],{"class":51761},[34,88586,51768],{"class":59},[14,88588,88589],{},[20,88590],{"alt":22,"src":88591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22462,88593,88595,88596],{"id":88594},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[760,88597,88598],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88600,88601],{},[847,88602,88603],{"href":88603,"rel":88604},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24329],[14,88606,88607],{},"lodash里边的方法都要加上一个下划线_",[14,88609,88610],{},"_.cloneDeep()",[25,88612,88614],{"className":51094,"code":88613,"language":51096,"meta":22,"style":22},"\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",[31,88615,88616,88626,88640,88644,88652,88666,88686,88698,88706,88710,88718,88723,88742,88750,88760,88768,88776,88788,88792,88798,88802,88806,88822,88830,88839,88847,88855,88863,88867],{"__ignoreMap":22},[34,88617,88618,88620,88622,88624],{"class":36,"line":37},[34,88619,51758],{"class":59},[34,88621,51762],{"class":51761},[34,88623,51765],{"class":2427},[34,88625,51768],{"class":59},[34,88627,88628,88630,88632,88634,88636,88638],{"class":36,"line":44},[34,88629,1515],{"class":59},[34,88631,51096],{"class":51761},[34,88633,51777],{"class":2427},[34,88635,447],{"class":59},[34,88637,51782],{"class":187},[34,88639,51768],{"class":59},[34,88641,88642],{"class":36,"line":50},[34,88643,2864],{"emptyLinePlaceholder":540},[34,88645,88646,88648,88650],{"class":36,"line":56},[34,88647,1515],{"class":59},[34,88649,51795],{"class":51761},[34,88651,51768],{"class":59},[34,88653,88654,88656,88658,88660,88662,88664],{"class":36,"line":107},[34,88655,52605],{"class":59},[34,88657,51805],{"class":51761},[34,88659,51808],{"class":2427},[34,88661,447],{"class":59},[34,88663,51813],{"class":187},[34,88665,51768],{"class":59},[34,88667,88668,88670,88672,88674,88676,88678,88680,88682,88684],{"class":36,"line":196},[34,88669,52605],{"class":59},[34,88671,51805],{"class":51761},[34,88673,15384],{"class":2427},[34,88675,447],{"class":59},[34,88677,51852],{"class":187},[34,88679,51832],{"class":2427},[34,88681,447],{"class":59},[34,88683,51859],{"class":187},[34,88685,51768],{"class":59},[34,88687,88688,88690,88692,88694,88696],{"class":36,"line":202},[34,88689,52605],{"class":59},[34,88691,51868],{"class":51761},[34,88693,51871],{"class":59},[34,88695,51868],{"class":51761},[34,88697,51768],{"class":59},[34,88699,88700,88702,88704],{"class":36,"line":207},[34,88701,52246],{"class":59},[34,88703,51795],{"class":51761},[34,88705,51768],{"class":59},[34,88707,88708],{"class":36,"line":222},[34,88709,2864],{"emptyLinePlaceholder":540},[34,88711,88712,88714,88716],{"class":36,"line":227},[34,88713,1515],{"class":59},[34,88715,52261],{"class":51761},[34,88717,51768],{"class":59},[34,88719,88720],{"class":36,"line":232},[34,88721,88722],{"class":40},"  \u003C!-- 先引用这个库 -->\n",[34,88724,88725,88727,88729,88731,88733,88736,88738,88740],{"class":36,"line":238},[34,88726,52605],{"class":59},[34,88728,52274],{"class":51761},[34,88730,55700],{"class":2427},[34,88732,447],{"class":59},[34,88734,88735],{"class":187},"\"lodash.min.js\"",[34,88737,55775],{"class":59},[34,88739,52274],{"class":51761},[34,88741,51768],{"class":59},[34,88743,88744,88746,88748],{"class":36,"line":244},[34,88745,52605],{"class":59},[34,88747,52274],{"class":51761},[34,88749,51768],{"class":59},[34,88751,88752,88754,88756,88758],{"class":36,"line":250},[34,88753,11685],{"class":112},[34,88755,70432],{"class":63},[34,88757,14028],{"class":112},[34,88759,16036],{"class":59},[34,88761,88762,88764,88766],{"class":36,"line":256},[34,88763,72077],{"class":59},[34,88765,88271],{"class":187},[34,88767,31929],{"class":59},[34,88769,88770,88772,88774],{"class":36,"line":261},[34,88771,72087],{"class":59},[34,88773,1256],{"class":63},[34,88775,31929],{"class":59},[34,88777,88778,88780,88782,88784,88786],{"class":36,"line":267},[34,88779,88286],{"class":59},[34,88781,88289],{"class":187},[34,88783,12899],{"class":59},[34,88785,88294],{"class":187},[34,88787,88297],{"class":59},[34,88789,88790],{"class":36,"line":2138},[34,88791,78333],{"class":59},[34,88793,88794,88796],{"class":36,"line":2143},[34,88795,88306],{"class":59},[34,88797,88309],{"class":187},[34,88799,88800],{"class":36,"line":2157},[34,88801,52859],{"class":59},[34,88803,88804],{"class":36,"line":2162},[34,88805,2651],{"class":59},[34,88807,88808,88810,88812,88814,88817,88820],{"class":36,"line":2191},[34,88809,11685],{"class":112},[34,88811,88324],{"class":63},[34,88813,14028],{"class":112},[34,88815,88816],{"class":59}," _.",[34,88818,88819],{"class":2427},"cloneDeep",[34,88821,70497],{"class":59},[34,88823,88824,88826,88828],{"class":36,"line":2196},[34,88825,74214],{"class":59},[34,88827,58708],{"class":2427},[34,88829,88516],{"class":59},[34,88831,88832,88835,88837],{"class":36,"line":2213},[34,88833,88834],{"class":59},"    o.family.baby ",[34,88836,447],{"class":112},[34,88838,88550],{"class":187},[34,88840,88841,88843,88845],{"class":36,"line":2218},[34,88842,74214],{"class":59},[34,88844,58708],{"class":2427},[34,88846,70497],{"class":59},[34,88848,88849,88851,88853],{"class":36,"line":2223},[34,88850,52878],{"class":59},[34,88852,52274],{"class":51761},[34,88854,51768],{"class":59},[34,88856,88857,88859,88861],{"class":36,"line":2228},[34,88858,52246],{"class":59},[34,88860,52261],{"class":51761},[34,88862,51768],{"class":59},[34,88864,88865],{"class":36,"line":2242},[34,88866,2864],{"emptyLinePlaceholder":540},[34,88868,88869,88871,88873],{"class":36,"line":2247},[34,88870,52246],{"class":59},[34,88872,51096],{"class":51761},[34,88874,51768],{"class":59},[14,88876,88877],{},[20,88878],{"alt":22,"src":88879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22462,88881,88883],{"id":88882},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[25,88885,88887],{"className":51094,"code":88886,"language":51096,"meta":22,"style":22},"\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",[31,88888,88889,88899,88913,88917,88925,88939,88959,88971,88979,88983,88991,88999,89009,89017,89025,89037,89041,89047,89051,89055,89060,89065,89070,89096,89104,89113,89121,89129,89137,89141],{"__ignoreMap":22},[34,88890,88891,88893,88895,88897],{"class":36,"line":37},[34,88892,51758],{"class":59},[34,88894,51762],{"class":51761},[34,88896,51765],{"class":2427},[34,88898,51768],{"class":59},[34,88900,88901,88903,88905,88907,88909,88911],{"class":36,"line":44},[34,88902,1515],{"class":59},[34,88904,51096],{"class":51761},[34,88906,51777],{"class":2427},[34,88908,447],{"class":59},[34,88910,51782],{"class":187},[34,88912,51768],{"class":59},[34,88914,88915],{"class":36,"line":50},[34,88916,2864],{"emptyLinePlaceholder":540},[34,88918,88919,88921,88923],{"class":36,"line":56},[34,88920,1515],{"class":59},[34,88922,51795],{"class":51761},[34,88924,51768],{"class":59},[34,88926,88927,88929,88931,88933,88935,88937],{"class":36,"line":107},[34,88928,52605],{"class":59},[34,88930,51805],{"class":51761},[34,88932,51808],{"class":2427},[34,88934,447],{"class":59},[34,88936,51813],{"class":187},[34,88938,51768],{"class":59},[34,88940,88941,88943,88945,88947,88949,88951,88953,88955,88957],{"class":36,"line":196},[34,88942,52605],{"class":59},[34,88944,51805],{"class":51761},[34,88946,15384],{"class":2427},[34,88948,447],{"class":59},[34,88950,51852],{"class":187},[34,88952,51832],{"class":2427},[34,88954,447],{"class":59},[34,88956,51859],{"class":187},[34,88958,51768],{"class":59},[34,88960,88961,88963,88965,88967,88969],{"class":36,"line":202},[34,88962,52605],{"class":59},[34,88964,51868],{"class":51761},[34,88966,51871],{"class":59},[34,88968,51868],{"class":51761},[34,88970,51768],{"class":59},[34,88972,88973,88975,88977],{"class":36,"line":207},[34,88974,52246],{"class":59},[34,88976,51795],{"class":51761},[34,88978,51768],{"class":59},[34,88980,88981],{"class":36,"line":222},[34,88982,2864],{"emptyLinePlaceholder":540},[34,88984,88985,88987,88989],{"class":36,"line":227},[34,88986,1515],{"class":59},[34,88988,52261],{"class":51761},[34,88990,51768],{"class":59},[34,88992,88993,88995,88997],{"class":36,"line":232},[34,88994,52605],{"class":59},[34,88996,52274],{"class":51761},[34,88998,51768],{"class":59},[34,89000,89001,89003,89005,89007],{"class":36,"line":238},[34,89002,11685],{"class":112},[34,89004,70432],{"class":63},[34,89006,14028],{"class":112},[34,89008,16036],{"class":59},[34,89010,89011,89013,89015],{"class":36,"line":244},[34,89012,72077],{"class":59},[34,89014,88271],{"class":187},[34,89016,31929],{"class":59},[34,89018,89019,89021,89023],{"class":36,"line":250},[34,89020,72087],{"class":59},[34,89022,1256],{"class":63},[34,89024,31929],{"class":59},[34,89026,89027,89029,89031,89033,89035],{"class":36,"line":256},[34,89028,88286],{"class":59},[34,89030,88289],{"class":187},[34,89032,12899],{"class":59},[34,89034,88294],{"class":187},[34,89036,88297],{"class":59},[34,89038,89039],{"class":36,"line":261},[34,89040,78333],{"class":59},[34,89042,89043,89045],{"class":36,"line":267},[34,89044,88306],{"class":59},[34,89046,88309],{"class":187},[34,89048,89049],{"class":36,"line":2138},[34,89050,52859],{"class":59},[34,89052,89053],{"class":36,"line":2143},[34,89054,2651],{"class":59},[34,89056,89057],{"class":36,"line":2157},[34,89058,89059],{"class":40},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[34,89061,89062],{"class":36,"line":2162},[34,89063,89064],{"class":40},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[34,89066,89067],{"class":36,"line":2191},[34,89068,89069],{"class":40},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[34,89071,89072,89074,89076,89078,89081,89083,89086,89088,89090,89092,89094],{"class":36,"line":2196},[34,89073,11685],{"class":112},[34,89075,88324],{"class":63},[34,89077,14028],{"class":112},[34,89079,89080],{"class":63}," JSON",[34,89082,1164],{"class":59},[34,89084,89085],{"class":2427},"parse",[34,89087,617],{"class":59},[34,89089,72125],{"class":63},[34,89091,1164],{"class":59},[34,89093,72130],{"class":2427},[34,89095,72133],{"class":59},[34,89097,89098,89100,89102],{"class":36,"line":2213},[34,89099,74214],{"class":59},[34,89101,58708],{"class":2427},[34,89103,88516],{"class":59},[34,89105,89106,89108,89110],{"class":36,"line":2218},[34,89107,88834],{"class":59},[34,89109,447],{"class":112},[34,89111,89112],{"class":187}," '123'\n",[34,89114,89115,89117,89119],{"class":36,"line":2223},[34,89116,74214],{"class":59},[34,89118,58708],{"class":2427},[34,89120,70497],{"class":59},[34,89122,89123,89125,89127],{"class":36,"line":2228},[34,89124,52878],{"class":59},[34,89126,52274],{"class":51761},[34,89128,51768],{"class":59},[34,89130,89131,89133,89135],{"class":36,"line":2242},[34,89132,52246],{"class":59},[34,89134,52261],{"class":51761},[34,89136,51768],{"class":59},[34,89138,89139],{"class":36,"line":2247},[34,89140,2864],{"emptyLinePlaceholder":540},[34,89142,89143,89145,89147],{"class":36,"line":3041},[34,89144,52246],{"class":59},[34,89146,51096],{"class":51761},[34,89148,51768],{"class":59},[14,89150,89151],{},[20,89152],{"alt":22,"src":89153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[555,89155,89157],{"id":89156},"_415-异常处理","4.15 异常处理",[567,89159,89160],{},[570,89161,89162],{},"throw抛异常",[14,89164,89165],{},[20,89166],{"alt":22,"src":89167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[567,89169,89170],{"start":44},[570,89171,89172],{},"try\u002Fcatch 捕获错误信息",[14,89174,89175],{},[20,89176],{"alt":22,"src":89177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[25,89179,89181],{"className":51094,"code":89180,"language":51096,"meta":22,"style":22},"\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",[31,89182,89183,89193,89207,89211,89219,89233,89253,89265,89273,89277,89285,89297,89305,89314,89321,89326,89345,89354,89365,89370,89380,89385,89390,89395,89412,89416,89421,89428,89440,89444,89456,89460,89464,89469,89474,89481,89489,89497,89501],{"__ignoreMap":22},[34,89184,89185,89187,89189,89191],{"class":36,"line":37},[34,89186,51758],{"class":59},[34,89188,51762],{"class":51761},[34,89190,51765],{"class":2427},[34,89192,51768],{"class":59},[34,89194,89195,89197,89199,89201,89203,89205],{"class":36,"line":44},[34,89196,1515],{"class":59},[34,89198,51096],{"class":51761},[34,89200,51777],{"class":2427},[34,89202,447],{"class":59},[34,89204,51782],{"class":187},[34,89206,51768],{"class":59},[34,89208,89209],{"class":36,"line":50},[34,89210,2864],{"emptyLinePlaceholder":540},[34,89212,89213,89215,89217],{"class":36,"line":56},[34,89214,1515],{"class":59},[34,89216,51795],{"class":51761},[34,89218,51768],{"class":59},[34,89220,89221,89223,89225,89227,89229,89231],{"class":36,"line":107},[34,89222,52605],{"class":59},[34,89224,51805],{"class":51761},[34,89226,51808],{"class":2427},[34,89228,447],{"class":59},[34,89230,51813],{"class":187},[34,89232,51768],{"class":59},[34,89234,89235,89237,89239,89241,89243,89245,89247,89249,89251],{"class":36,"line":196},[34,89236,52605],{"class":59},[34,89238,51805],{"class":51761},[34,89240,15384],{"class":2427},[34,89242,447],{"class":59},[34,89244,51852],{"class":187},[34,89246,51832],{"class":2427},[34,89248,447],{"class":59},[34,89250,51859],{"class":187},[34,89252,51768],{"class":59},[34,89254,89255,89257,89259,89261,89263],{"class":36,"line":202},[34,89256,52605],{"class":59},[34,89258,51868],{"class":51761},[34,89260,51871],{"class":59},[34,89262,51868],{"class":51761},[34,89264,51768],{"class":59},[34,89266,89267,89269,89271],{"class":36,"line":207},[34,89268,52246],{"class":59},[34,89270,51795],{"class":51761},[34,89272,51768],{"class":59},[34,89274,89275],{"class":36,"line":222},[34,89276,2864],{"emptyLinePlaceholder":540},[34,89278,89279,89281,89283],{"class":36,"line":227},[34,89280,1515],{"class":59},[34,89282,52261],{"class":51761},[34,89284,51768],{"class":59},[34,89286,89287,89289,89291,89293,89295],{"class":36,"line":232},[34,89288,52605],{"class":59},[34,89290,14],{"class":51761},[34,89292,53955],{"class":59},[34,89294,14],{"class":51761},[34,89296,51768],{"class":59},[34,89298,89299,89301,89303],{"class":36,"line":238},[34,89300,52605],{"class":59},[34,89302,52274],{"class":51761},[34,89304,51768],{"class":59},[34,89306,89307,89309,89312],{"class":36,"line":244},[34,89308,70545],{"class":112},[34,89310,89311],{"class":2427}," fn",[34,89313,11317],{"class":59},[34,89315,89316,89319],{"class":36,"line":250},[34,89317,89318],{"class":112},"      try",[34,89320,16036],{"class":59},[34,89322,89323],{"class":36,"line":256},[34,89324,89325],{"class":40},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[34,89327,89328,89330,89332,89334,89336,89338,89340,89343],{"class":36,"line":261},[34,89329,61731],{"class":112},[34,89331,7289],{"class":63},[34,89333,14028],{"class":112},[34,89335,54857],{"class":59},[34,89337,54860],{"class":2427},[34,89339,617],{"class":59},[34,89341,89342],{"class":187},"'.p'",[34,89344,623],{"class":59},[34,89346,89347,89350,89352],{"class":36,"line":267},[34,89348,89349],{"class":59},"        p.style.color ",[34,89351,447],{"class":112},[34,89353,67512],{"class":187},[34,89355,89356,89359,89362],{"class":36,"line":2138},[34,89357,89358],{"class":59},"      } ",[34,89360,89361],{"class":112},"catch",[34,89363,89364],{"class":59}," (err) {\n",[34,89366,89367],{"class":36,"line":2143},[34,89368,89369],{"class":40},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[34,89371,89372,89375,89377],{"class":36,"line":2157},[34,89373,89374],{"class":59},"        console.",[34,89376,58708],{"class":2427},[34,89378,89379],{"class":59},"(err.message)\n",[34,89381,89382],{"class":36,"line":2162},[34,89383,89384],{"class":40},"        \u002F\u002F 想要中断程序，需要加return\n",[34,89386,89387],{"class":36,"line":2191},[34,89388,89389],{"class":40},"        \u002F\u002F return\n",[34,89391,89392],{"class":36,"line":2196},[34,89393,89394],{"class":40},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[34,89396,89397,89400,89402,89405,89407,89410],{"class":36,"line":2213},[34,89398,89399],{"class":112},"        throw",[34,89401,12042],{"class":112},[34,89403,89404],{"class":2427}," Error",[34,89406,617],{"class":59},[34,89408,89409],{"class":187},"'你看看，选择器错误了吧'",[34,89411,623],{"class":59},[34,89413,89414],{"class":36,"line":2218},[34,89415,52859],{"class":59},[34,89417,89418],{"class":36,"line":2223},[34,89419,89420],{"class":40},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[34,89422,89423,89426],{"class":36,"line":2228},[34,89424,89425],{"class":112},"      finally",[34,89427,16036],{"class":59},[34,89429,89430,89433,89435,89438],{"class":36,"line":2242},[34,89431,89432],{"class":2427},"        alert",[34,89434,617],{"class":59},[34,89436,89437],{"class":187},"'弹出对话框'",[34,89439,623],{"class":59},[34,89441,89442],{"class":36,"line":2247},[34,89443,52859],{"class":59},[34,89445,89446,89448,89450,89452,89454],{"class":36,"line":3041},[34,89447,58705],{"class":59},[34,89449,58708],{"class":2427},[34,89451,617],{"class":59},[34,89453,1079],{"class":63},[34,89455,623],{"class":59},[34,89457,89458],{"class":36,"line":3055},[34,89459,2864],{"emptyLinePlaceholder":540},[34,89461,89462],{"class":36,"line":3063},[34,89463,2651],{"class":59},[34,89465,89466],{"class":36,"line":3068},[34,89467,89468],{"class":40},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[34,89470,89471],{"class":36,"line":3074},[34,89472,89473],{"class":40},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[34,89475,89476,89479],{"class":36,"line":3080},[34,89477,89478],{"class":2427},"    fn",[34,89480,2440],{"class":59},[34,89482,89483,89485,89487],{"class":36,"line":3085},[34,89484,52878],{"class":59},[34,89486,52274],{"class":51761},[34,89488,51768],{"class":59},[34,89490,89491,89493,89495],{"class":36,"line":8412},[34,89492,52246],{"class":59},[34,89494,52261],{"class":51761},[34,89496,51768],{"class":59},[34,89498,89499],{"class":36,"line":8436},[34,89500,2864],{"emptyLinePlaceholder":540},[34,89502,89503,89505,89507],{"class":36,"line":8441},[34,89504,52246],{"class":59},[34,89506,51096],{"class":51761},[34,89508,51768],{"class":59},[14,89510,89511],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[567,89513,89514],{"start":50},[570,89515,89516],{},"debugger",[14,89518,89519],{},[20,89520],{"alt":22,"src":89521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89523,89524],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[555,89526,89528],{"id":89527},"_416-处理this","4.16 处理this",[584,89530,89532],{"id":89531},"_4161-this的指向","4.16.1 this的指向",[567,89534,89535],{},[570,89536,89537],{},"普通函数的this",[14,89539,89540],{},[20,89541],{"alt":22,"src":89542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[567,89544,89545],{"start":44},[570,89546,89547],{},"箭头函数的this",[14,89549,89550],{},[20,89551],{"alt":22,"src":89552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89554,89555],{},[20,89556],{"alt":22,"src":89557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89559,89560],{},[20,89561],{"alt":22,"src":89562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[584,89564,89566],{"id":89565},"_4162-this的改变","4.16.2 this的改变",[14,89568,89569],{},"call() apply() bind()",[567,89571,89572],{},[570,89573,89574],{},"call()",[14,89576,89577],{},[20,89578],{"alt":22,"src":89579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89581,89582],{},"两个作用：①调用函数；②改变this指向",[25,89584,89586],{"className":53528,"code":89585,"language":53530,"meta":22,"style":22},"\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",[31,89587,89588,89596,89604,89608,89613,89617,89622,89627,89632,89636,89641,89649],{"__ignoreMap":22},[34,89589,89590,89592,89594],{"class":36,"line":37},[34,89591,1515],{"class":59},[34,89593,52261],{"class":51761},[34,89595,51768],{"class":59},[34,89597,89598,89600,89602],{"class":36,"line":44},[34,89599,52605],{"class":59},[34,89601,52274],{"class":51761},[34,89603,51768],{"class":59},[34,89605,89606],{"class":36,"line":50},[34,89607,71984],{"class":59},[34,89609,89610],{"class":36,"line":56},[34,89611,89612],{"class":59},"      uname: 'pink'\n",[34,89614,89615],{"class":36,"line":107},[34,89616,2651],{"class":59},[34,89618,89619],{"class":36,"line":196},[34,89620,89621],{"class":59},"    function fn(x, y) {\n",[34,89623,89624],{"class":36,"line":202},[34,89625,89626],{"class":59},"      console.log(this)  \u002F\u002Fwindow\n",[34,89628,89629],{"class":36,"line":207},[34,89630,89631],{"class":59},"      console.log(x + y)\n",[34,89633,89634],{"class":36,"line":222},[34,89635,2651],{"class":59},[34,89637,89638],{"class":36,"line":227},[34,89639,89640],{"class":59},"    fn.call(obj, 1, 2)\n",[34,89642,89643,89645,89647],{"class":36,"line":232},[34,89644,52878],{"class":59},[34,89646,52274],{"class":51761},[34,89648,51768],{"class":59},[34,89650,89651,89653,89655],{"class":36,"line":238},[34,89652,52246],{"class":59},[34,89654,52261],{"class":51761},[34,89656,51768],{"class":59},[14,89658,89659],{},[20,89660],{"alt":22,"src":89661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[567,89663,89664],{"start":44},[570,89665,89666],{},"apply()",[14,89668,89669],{},[20,89670],{"alt":22,"src":89671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89673,89582],{},[14,89675,89676],{},"call传递的是普通参数，而apply必须传递的是数组",[25,89678,89680],{"className":51094,"code":89679,"language":51096,"meta":22,"style":22},"\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",[31,89681,89682,89692,89706,89710,89718,89732,89752,89764,89772,89776,89784,89792,89802,89809,89813,89818,89834,89846,89860,89864,89869,89888,89893,89897,89902,89907,89915,89920,89942,89947,89963,89979,89991,89995,90000,90019,90027,90035,90039],{"__ignoreMap":22},[34,89683,89684,89686,89688,89690],{"class":36,"line":37},[34,89685,51758],{"class":59},[34,89687,51762],{"class":51761},[34,89689,51765],{"class":2427},[34,89691,51768],{"class":59},[34,89693,89694,89696,89698,89700,89702,89704],{"class":36,"line":44},[34,89695,1515],{"class":59},[34,89697,51096],{"class":51761},[34,89699,51777],{"class":2427},[34,89701,447],{"class":59},[34,89703,51782],{"class":187},[34,89705,51768],{"class":59},[34,89707,89708],{"class":36,"line":50},[34,89709,2864],{"emptyLinePlaceholder":540},[34,89711,89712,89714,89716],{"class":36,"line":56},[34,89713,1515],{"class":59},[34,89715,51795],{"class":51761},[34,89717,51768],{"class":59},[34,89719,89720,89722,89724,89726,89728,89730],{"class":36,"line":107},[34,89721,52605],{"class":59},[34,89723,51805],{"class":51761},[34,89725,51808],{"class":2427},[34,89727,447],{"class":59},[34,89729,51813],{"class":187},[34,89731,51768],{"class":59},[34,89733,89734,89736,89738,89740,89742,89744,89746,89748,89750],{"class":36,"line":196},[34,89735,52605],{"class":59},[34,89737,51805],{"class":51761},[34,89739,15384],{"class":2427},[34,89741,447],{"class":59},[34,89743,51852],{"class":187},[34,89745,51832],{"class":2427},[34,89747,447],{"class":59},[34,89749,51859],{"class":187},[34,89751,51768],{"class":59},[34,89753,89754,89756,89758,89760,89762],{"class":36,"line":202},[34,89755,52605],{"class":59},[34,89757,51868],{"class":51761},[34,89759,51871],{"class":59},[34,89761,51868],{"class":51761},[34,89763,51768],{"class":59},[34,89765,89766,89768,89770],{"class":36,"line":207},[34,89767,52246],{"class":59},[34,89769,51795],{"class":51761},[34,89771,51768],{"class":59},[34,89773,89774],{"class":36,"line":222},[34,89775,2864],{"emptyLinePlaceholder":540},[34,89777,89778,89780,89782],{"class":36,"line":227},[34,89779,1515],{"class":59},[34,89781,52261],{"class":51761},[34,89783,51768],{"class":59},[34,89785,89786,89788,89790],{"class":36,"line":232},[34,89787,52605],{"class":59},[34,89789,52274],{"class":51761},[34,89791,51768],{"class":59},[34,89793,89794,89796,89798,89800],{"class":36,"line":238},[34,89795,11685],{"class":112},[34,89797,70432],{"class":63},[34,89799,14028],{"class":112},[34,89801,16036],{"class":59},[34,89803,89804,89806],{"class":36,"line":244},[34,89805,72087],{"class":59},[34,89807,89808],{"class":63},"18\n",[34,89810,89811],{"class":36,"line":250},[34,89812,2651],{"class":59},[34,89814,89815],{"class":36,"line":256},[34,89816,89817],{"class":40},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[34,89819,89820,89822,89824,89826,89828,89830,89832],{"class":36,"line":261},[34,89821,70545],{"class":112},[34,89823,89311],{"class":2427},[34,89825,617],{"class":59},[34,89827,1426],{"class":5680},[34,89829,12899],{"class":59},[34,89831,1451],{"class":5680},[34,89833,12906],{"class":59},[34,89835,89836,89838,89840,89842,89844],{"class":36,"line":267},[34,89837,58705],{"class":59},[34,89839,58708],{"class":2427},[34,89841,617],{"class":59},[34,89843,87454],{"class":63},[34,89845,623],{"class":59},[34,89847,89848,89850,89852,89855,89857],{"class":36,"line":2138},[34,89849,58705],{"class":59},[34,89851,58708],{"class":2427},[34,89853,89854],{"class":59},"(x ",[34,89856,1088],{"class":112},[34,89858,89859],{"class":59}," y)\n",[34,89861,89862],{"class":36,"line":2143},[34,89863,2651],{"class":59},[34,89865,89866],{"class":36,"line":2157},[34,89867,89868],{"class":40},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[34,89870,89871,89874,89877,89880,89882,89884,89886],{"class":36,"line":2162},[34,89872,89873],{"class":59},"    fn.",[34,89875,89876],{"class":2427},"apply",[34,89878,89879],{"class":59},"(obj, [",[34,89881,64],{"class":63},[34,89883,12899],{"class":59},[34,89885,70],{"class":63},[34,89887,5121],{"class":59},[34,89889,89890],{"class":36,"line":2191},[34,89891,89892],{"class":40},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[34,89894,89895],{"class":36,"line":2196},[34,89896,2864],{"emptyLinePlaceholder":540},[34,89898,89899],{"class":36,"line":2213},[34,89900,89901],{"class":40},"    \u002F\u002F 使用场景：求数组最大值\n",[34,89903,89904],{"class":36,"line":2218},[34,89905,89906],{"class":40},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[34,89908,89909,89912],{"class":36,"line":2223},[34,89910,89911],{"class":40},"    \u002F\u002F console.log(max)",[34,89913,89914],{"class":40},"   \u002F\u002F3\n",[34,89916,89917],{"class":36,"line":2228},[34,89918,89919],{"class":40},"    \u002F\u002F 指向空或者Math都是可以的\n",[34,89921,89922,89924,89926,89928,89930,89932,89934,89936,89938,89940],{"class":36,"line":2242},[34,89923,11685],{"class":112},[34,89925,58156],{"class":63},[34,89927,14028],{"class":112},[34,89929,52687],{"class":59},[34,89931,919],{"class":63},[34,89933,12899],{"class":59},[34,89935,1111],{"class":63},[34,89937,12899],{"class":59},[34,89939,1141],{"class":63},[34,89941,73],{"class":59},[34,89943,89944],{"class":36,"line":2247},[34,89945,89946],{"class":40},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[34,89948,89949,89951,89953,89955,89958,89960],{"class":36,"line":3041},[34,89950,11685],{"class":112},[34,89952,6415],{"class":63},[34,89954,14028],{"class":112},[34,89956,89957],{"class":59}," Math.max.",[34,89959,89876],{"class":2427},[34,89961,89962],{"class":59},"(Math, arr)\n",[34,89964,89965,89967,89970,89972,89975,89977],{"class":36,"line":3055},[34,89966,11685],{"class":112},[34,89968,89969],{"class":63}," min",[34,89971,14028],{"class":112},[34,89973,89974],{"class":59}," Math.min.",[34,89976,89876],{"class":2427},[34,89978,89962],{"class":59},[34,89980,89981,89983,89985,89988],{"class":36,"line":3063},[34,89982,74214],{"class":59},[34,89984,58708],{"class":2427},[34,89986,89987],{"class":59},"(max, min)     ",[34,89989,89990],{"class":40},"\u002F\u002F100,4\n",[34,89992,89993],{"class":36,"line":3068},[34,89994,2864],{"emptyLinePlaceholder":540},[34,89996,89997],{"class":36,"line":3074},[34,89998,89999],{"class":40},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[34,90001,90002,90004,90006,90009,90011,90013,90016],{"class":36,"line":3080},[34,90003,74214],{"class":59},[34,90005,58708],{"class":2427},[34,90007,90008],{"class":59},"(Max.",[34,90010,6479],{"class":2427},[34,90012,617],{"class":59},[34,90014,90015],{"class":112},"...",[34,90017,90018],{"class":59},"arr))\n",[34,90020,90021,90023,90025],{"class":36,"line":3085},[34,90022,52878],{"class":59},[34,90024,52274],{"class":51761},[34,90026,51768],{"class":59},[34,90028,90029,90031,90033],{"class":36,"line":8412},[34,90030,52246],{"class":59},[34,90032,52261],{"class":51761},[34,90034,51768],{"class":59},[34,90036,90037],{"class":36,"line":8436},[34,90038,2864],{"emptyLinePlaceholder":540},[34,90040,90041,90043,90045],{"class":36,"line":8441},[34,90042,52246],{"class":59},[34,90044,51096],{"class":51761},[34,90046,51768],{"class":59},[14,90048,90049],{},[20,90050],{"alt":22,"src":90051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[567,90053,90054],{"start":50},[570,90055,90056],{},"bind()",[14,90058,90059],{},[20,90060],{"alt":22,"src":90061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90063,90064],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90066,90067],{},"bind的语法跟call很相似",[25,90069,90071],{"className":53528,"code":90070,"language":53530,"meta":22,"style":22},"\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",[31,90072,90073,90081,90089,90093,90098,90102,90106,90111,90115,90120,90125,90130,90135,90140,90145,90150,90154,90162],{"__ignoreMap":22},[34,90074,90075,90077,90079],{"class":36,"line":37},[34,90076,1515],{"class":59},[34,90078,52261],{"class":51761},[34,90080,51768],{"class":59},[34,90082,90083,90085,90087],{"class":36,"line":44},[34,90084,52605],{"class":59},[34,90086,52274],{"class":51761},[34,90088,51768],{"class":59},[34,90090,90091],{"class":36,"line":50},[34,90092,71984],{"class":59},[34,90094,90095],{"class":36,"line":56},[34,90096,90097],{"class":59},"      age: 18\n",[34,90099,90100],{"class":36,"line":107},[34,90101,2651],{"class":59},[34,90103,90104],{"class":36,"line":196},[34,90105,77604],{"class":59},[34,90107,90108],{"class":36,"line":202},[34,90109,90110],{"class":59},"      console.log(this)\n",[34,90112,90113],{"class":36,"line":207},[34,90114,2651],{"class":59},[34,90116,90117],{"class":36,"line":222},[34,90118,90119],{"class":59},"    \u002F\u002F 1.bind 不会调用函数\n",[34,90121,90122],{"class":36,"line":227},[34,90123,90124],{"class":59},"    \u002F\u002F 2.bind能改变this的指向\n",[34,90126,90127],{"class":36,"line":232},[34,90128,90129],{"class":59},"    fn.bind()\n",[34,90131,90132],{"class":36,"line":238},[34,90133,90134],{"class":59},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[34,90136,90137],{"class":36,"line":244},[34,90138,90139],{"class":59},"    const fun = fn.bind(obj)\n",[34,90141,90142],{"class":36,"line":250},[34,90143,90144],{"class":59},"    \u002F\u002F console.log(fun)\n",[34,90146,90147],{"class":36,"line":256},[34,90148,90149],{"class":59},"    \u002F\u002F 调用,查看this的指向\n",[34,90151,90152],{"class":36,"line":261},[34,90153,53112],{"class":59},[34,90155,90156,90158,90160],{"class":36,"line":267},[34,90157,52878],{"class":59},[34,90159,52274],{"class":51761},[34,90161,51768],{"class":59},[34,90163,90164,90166,90168],{"class":36,"line":2138},[34,90165,52246],{"class":59},[34,90167,52261],{"class":51761},[34,90169,51768],{"class":59},[14,90171,90172],{},[20,90173],{"alt":22,"src":90174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[567,90176,90177],{"start":56},[570,90178,90179],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[25,90181,90183],{"className":53528,"code":90182,"language":53530,"meta":22,"style":22},"\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",[31,90184,90185,90193,90206,90214,90219,90223,90228,90233,90238,90243,90248,90253,90258,90263,90267,90275],{"__ignoreMap":22},[34,90186,90187,90189,90191],{"class":36,"line":37},[34,90188,1515],{"class":59},[34,90190,52261],{"class":51761},[34,90192,51768],{"class":59},[34,90194,90195,90197,90199,90202,90204],{"class":36,"line":44},[34,90196,52605],{"class":59},[34,90198,54348],{"class":51761},[34,90200,90201],{"class":59},">禁用\u003C\u002F",[34,90203,54348],{"class":51761},[34,90205,51768],{"class":59},[34,90207,90208,90210,90212],{"class":36,"line":50},[34,90209,52605],{"class":59},[34,90211,52274],{"class":51761},[34,90213,51768],{"class":59},[34,90215,90216],{"class":36,"line":56},[34,90217,90218],{"class":59},"    const btn = document.querySelector('button')\n",[34,90220,90221],{"class":36,"line":107},[34,90222,59477],{"class":59},[34,90224,90225],{"class":36,"line":196},[34,90226,90227],{"class":59},"      this.disabled = true\n",[34,90229,90230],{"class":36,"line":202},[34,90231,90232],{"class":59},"      \u002F\u002F 定时器是window进行调用的\n",[34,90234,90235],{"class":36,"line":207},[34,90236,90237],{"class":59},"      setTimeout(function () {\n",[34,90239,90240],{"class":36,"line":222},[34,90241,90242],{"class":59},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[34,90244,90245],{"class":36,"line":227},[34,90246,90247],{"class":59},"        this.disabled = false\n",[34,90249,90250],{"class":36,"line":232},[34,90251,90252],{"class":59},"      }.bind(this), 2000)\n",[34,90254,90255],{"class":36,"line":238},[34,90256,90257],{"class":59},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[34,90259,90260],{"class":36,"line":244},[34,90261,90262],{"class":59},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[34,90264,90265],{"class":36,"line":250},[34,90266,33923],{"class":59},[34,90268,90269,90271,90273],{"class":36,"line":256},[34,90270,52878],{"class":59},[34,90272,52274],{"class":51761},[34,90274,51768],{"class":59},[34,90276,90277,90279,90281],{"class":36,"line":261},[34,90278,52246],{"class":59},[34,90280,52261],{"class":51761},[34,90282,51768],{"class":59},[567,90284,90285],{"start":107},[570,90286,22417],{},[14,90288,90289],{},[20,90290],{"alt":22,"src":90291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[555,90293,90295],{"id":90294},"_417-性能优化","4.17 性能优化",[584,90297,90299],{"id":90298},"_4171-防抖","4.17.1 防抖",[14,90301,90302],{},[20,90303],{"alt":22,"src":90304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90306,90307],{},[760,90308,90309],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90311,90312],{},"防抖实现方式：",[1611,90314,90315],{},[570,90316,90317],{},"lodash 提供了防抖处理",[14,90319,90320],{},"_.debounce(func,[wait=0],[options={}])",[14,90322,90323],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[25,90325,90327],{"className":51094,"code":90326,"language":51096,"meta":22,"style":22},"\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",[31,90328,90329,90339,90353,90357,90365,90379,90399,90411,90419,90425,90435,90447,90459,90470,90482,90492,90502,90515,90519,90527,90535,90539,90547,90565,90583,90591,90610,90620,90629,90640,90645,90649,90654,90659,90664,90689,90697,90705,90709],{"__ignoreMap":22},[34,90330,90331,90333,90335,90337],{"class":36,"line":37},[34,90332,51758],{"class":59},[34,90334,51762],{"class":51761},[34,90336,51765],{"class":2427},[34,90338,51768],{"class":59},[34,90340,90341,90343,90345,90347,90349,90351],{"class":36,"line":44},[34,90342,1515],{"class":59},[34,90344,51096],{"class":51761},[34,90346,51777],{"class":2427},[34,90348,447],{"class":59},[34,90350,51782],{"class":187},[34,90352,51768],{"class":59},[34,90354,90355],{"class":36,"line":50},[34,90356,2864],{"emptyLinePlaceholder":540},[34,90358,90359,90361,90363],{"class":36,"line":56},[34,90360,1515],{"class":59},[34,90362,51795],{"class":51761},[34,90364,51768],{"class":59},[34,90366,90367,90369,90371,90373,90375,90377],{"class":36,"line":107},[34,90368,52605],{"class":59},[34,90370,51805],{"class":51761},[34,90372,51808],{"class":2427},[34,90374,447],{"class":59},[34,90376,51813],{"class":187},[34,90378,51768],{"class":59},[34,90380,90381,90383,90385,90387,90389,90391,90393,90395,90397],{"class":36,"line":196},[34,90382,52605],{"class":59},[34,90384,51805],{"class":51761},[34,90386,15384],{"class":2427},[34,90388,447],{"class":59},[34,90390,51852],{"class":187},[34,90392,51832],{"class":2427},[34,90394,447],{"class":59},[34,90396,51859],{"class":187},[34,90398,51768],{"class":59},[34,90400,90401,90403,90405,90407,90409],{"class":36,"line":202},[34,90402,52605],{"class":59},[34,90404,51868],{"class":51761},[34,90406,51871],{"class":59},[34,90408,51868],{"class":51761},[34,90410,51768],{"class":59},[34,90412,90413,90415,90417],{"class":36,"line":207},[34,90414,52605],{"class":59},[34,90416,532],{"class":51761},[34,90418,51768],{"class":59},[34,90420,90421,90423],{"class":36,"line":222},[34,90422,55213],{"class":2427},[34,90424,16036],{"class":59},[34,90426,90427,90429,90431,90433],{"class":36,"line":227},[34,90428,73057],{"class":63},[34,90430,51898],{"class":59},[34,90432,60966],{"class":63},[34,90434,1765],{"class":59},[34,90436,90437,90439,90441,90443,90445],{"class":36,"line":232},[34,90438,55232],{"class":63},[34,90440,51898],{"class":59},[34,90442,2186],{"class":63},[34,90444,51953],{"class":112},[34,90446,1765],{"class":59},[34,90448,90449,90451,90453,90455,90457],{"class":36,"line":238},[34,90450,55246],{"class":63},[34,90452,51898],{"class":59},[34,90454,2186],{"class":63},[34,90456,51953],{"class":112},[34,90458,1765],{"class":59},[34,90460,90461,90463,90465,90468],{"class":36,"line":244},[34,90462,55345],{"class":63},[34,90464,51898],{"class":59},[34,90466,90467],{"class":63},"gray",[34,90469,1765],{"class":59},[34,90471,90472,90474,90476,90478,90480],{"class":36,"line":250},[34,90473,55383],{"class":63},[34,90475,51898],{"class":59},[34,90477,1431],{"class":63},[34,90479,51953],{"class":112},[34,90481,1765],{"class":59},[34,90483,90484,90486,90488,90490],{"class":36,"line":256},[34,90485,57877],{"class":63},[34,90487,51898],{"class":59},[34,90489,61303],{"class":63},[34,90491,1765],{"class":59},[34,90493,90494,90496,90498,90500],{"class":36,"line":261},[34,90495,57747],{"class":63},[34,90497,51898],{"class":59},[34,90499,52053],{"class":63},[34,90501,1765],{"class":59},[34,90503,90504,90507,90509,90511,90513],{"class":36,"line":267},[34,90505,90506],{"class":63},"      padding-top",[34,90508,51898],{"class":59},[34,90510,927],{"class":63},[34,90512,51953],{"class":112},[34,90514,1765],{"class":59},[34,90516,90517],{"class":36,"line":2138},[34,90518,2651],{"class":59},[34,90520,90521,90523,90525],{"class":36,"line":2143},[34,90522,52878],{"class":59},[34,90524,532],{"class":51761},[34,90526,51768],{"class":59},[34,90528,90529,90531,90533],{"class":36,"line":2157},[34,90530,52246],{"class":59},[34,90532,51795],{"class":51761},[34,90534,51768],{"class":59},[34,90536,90537],{"class":36,"line":2162},[34,90538,2864],{"emptyLinePlaceholder":540},[34,90540,90541,90543,90545],{"class":36,"line":2191},[34,90542,1515],{"class":59},[34,90544,52261],{"class":51761},[34,90546,51768],{"class":59},[34,90548,90549,90551,90553,90555,90557,90559,90561,90563],{"class":36,"line":2196},[34,90550,52605],{"class":59},[34,90552,52072],{"class":51761},[34,90554,53947],{"class":2427},[34,90556,447],{"class":59},[34,90558,53952],{"class":187},[34,90560,55775],{"class":59},[34,90562,52072],{"class":51761},[34,90564,51768],{"class":59},[34,90566,90567,90569,90571,90573,90575,90577,90579,90581],{"class":36,"line":2213},[34,90568,52605],{"class":59},[34,90570,52274],{"class":51761},[34,90572,55700],{"class":2427},[34,90574,447],{"class":59},[34,90576,88735],{"class":187},[34,90578,55775],{"class":59},[34,90580,52274],{"class":51761},[34,90582,51768],{"class":59},[34,90584,90585,90587,90589],{"class":36,"line":2218},[34,90586,52605],{"class":59},[34,90588,52274],{"class":51761},[34,90590,51768],{"class":59},[34,90592,90593,90595,90597,90599,90601,90603,90605,90608],{"class":36,"line":2223},[34,90594,11685],{"class":112},[34,90596,87394],{"class":63},[34,90598,14028],{"class":112},[34,90600,54857],{"class":59},[34,90602,54860],{"class":2427},[34,90604,617],{"class":59},[34,90606,90607],{"class":187},"'.box'",[34,90609,623],{"class":59},[34,90611,90612,90614,90616,90618],{"class":36,"line":2228},[34,90613,52680],{"class":112},[34,90615,9902],{"class":59},[34,90617,447],{"class":112},[34,90619,47794],{"class":63},[34,90621,90622,90624,90627],{"class":36,"line":2242},[34,90623,70545],{"class":112},[34,90625,90626],{"class":2427}," mouseMove",[34,90628,11317],{"class":59},[34,90630,90631,90634,90636,90638],{"class":36,"line":2247},[34,90632,90633],{"class":59},"      box.innerHTML ",[34,90635,447],{"class":112},[34,90637,3496],{"class":59},[34,90639,3166],{"class":112},[34,90641,90642],{"class":36,"line":3041},[34,90643,90644],{"class":40},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[34,90646,90647],{"class":36,"line":3055},[34,90648,2651],{"class":59},[34,90650,90651],{"class":36,"line":3063},[34,90652,90653],{"class":40},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[34,90655,90656],{"class":36,"line":3068},[34,90657,90658],{"class":40},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[34,90660,90661],{"class":36,"line":3074},[34,90662,90663],{"class":40},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[34,90665,90666,90669,90671,90673,90676,90679,90682,90685,90687],{"class":36,"line":3080},[34,90667,90668],{"class":59},"    box.",[34,90670,58274],{"class":2427},[34,90672,617],{"class":59},[34,90674,90675],{"class":187},"'mousemove'",[34,90677,90678],{"class":59},", _.",[34,90680,90681],{"class":2427},"debounce",[34,90683,90684],{"class":59},"(mouseMove, ",[34,90686,65535],{"class":63},[34,90688,30960],{"class":59},[34,90690,90691,90693,90695],{"class":36,"line":3085},[34,90692,52878],{"class":59},[34,90694,52274],{"class":51761},[34,90696,51768],{"class":59},[34,90698,90699,90701,90703],{"class":36,"line":8412},[34,90700,52246],{"class":59},[34,90702,52261],{"class":51761},[34,90704,51768],{"class":59},[34,90706,90707],{"class":36,"line":8436},[34,90708,2864],{"emptyLinePlaceholder":540},[34,90710,90711,90713,90715],{"class":36,"line":8441},[34,90712,52246],{"class":59},[34,90714,51096],{"class":51761},[34,90716,51768],{"class":59},[1611,90718,90719],{},[570,90720,90721],{},"手写一个防抖函数来处理",[14,90723,90724],{},"防抖的核心就是利用定时器来实现的：",[14,90726,90727],{},"①声明一个定时器变量",[14,90729,90730],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90732,90733],{},"③如果没有定时器则开启定时器，记得存到变量里面",[25,90735,90737],{"className":51094,"code":90736,"language":51096,"meta":22,"style":22},"\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",[31,90738,90739,90749,90763,90767,90775,90789,90809,90821,90829,90835,90845,90857,90869,90879,90891,90901,90911,90923,90927,90935,90943,90947,90955,90973,90991,90999,91017,91027,91035,91045,91049,91053,91057,91062,91067,91072,91077,91082,91087,91105,91112,91117,91125,91130,91143,91159,91169,91174,91178,91182,91202,91206,91211,91216,91221,91226,91234,91242,91246],{"__ignoreMap":22},[34,90740,90741,90743,90745,90747],{"class":36,"line":37},[34,90742,51758],{"class":59},[34,90744,51762],{"class":51761},[34,90746,51765],{"class":2427},[34,90748,51768],{"class":59},[34,90750,90751,90753,90755,90757,90759,90761],{"class":36,"line":44},[34,90752,1515],{"class":59},[34,90754,51096],{"class":51761},[34,90756,51777],{"class":2427},[34,90758,447],{"class":59},[34,90760,51782],{"class":187},[34,90762,51768],{"class":59},[34,90764,90765],{"class":36,"line":50},[34,90766,2864],{"emptyLinePlaceholder":540},[34,90768,90769,90771,90773],{"class":36,"line":56},[34,90770,1515],{"class":59},[34,90772,51795],{"class":51761},[34,90774,51768],{"class":59},[34,90776,90777,90779,90781,90783,90785,90787],{"class":36,"line":107},[34,90778,52605],{"class":59},[34,90780,51805],{"class":51761},[34,90782,51808],{"class":2427},[34,90784,447],{"class":59},[34,90786,51813],{"class":187},[34,90788,51768],{"class":59},[34,90790,90791,90793,90795,90797,90799,90801,90803,90805,90807],{"class":36,"line":196},[34,90792,52605],{"class":59},[34,90794,51805],{"class":51761},[34,90796,15384],{"class":2427},[34,90798,447],{"class":59},[34,90800,51852],{"class":187},[34,90802,51832],{"class":2427},[34,90804,447],{"class":59},[34,90806,51859],{"class":187},[34,90808,51768],{"class":59},[34,90810,90811,90813,90815,90817,90819],{"class":36,"line":202},[34,90812,52605],{"class":59},[34,90814,51868],{"class":51761},[34,90816,51871],{"class":59},[34,90818,51868],{"class":51761},[34,90820,51768],{"class":59},[34,90822,90823,90825,90827],{"class":36,"line":207},[34,90824,52605],{"class":59},[34,90826,532],{"class":51761},[34,90828,51768],{"class":59},[34,90830,90831,90833],{"class":36,"line":222},[34,90832,55213],{"class":2427},[34,90834,16036],{"class":59},[34,90836,90837,90839,90841,90843],{"class":36,"line":227},[34,90838,73057],{"class":63},[34,90840,51898],{"class":59},[34,90842,60966],{"class":63},[34,90844,1765],{"class":59},[34,90846,90847,90849,90851,90853,90855],{"class":36,"line":232},[34,90848,55232],{"class":63},[34,90850,51898],{"class":59},[34,90852,2186],{"class":63},[34,90854,51953],{"class":112},[34,90856,1765],{"class":59},[34,90858,90859,90861,90863,90865,90867],{"class":36,"line":238},[34,90860,55246],{"class":63},[34,90862,51898],{"class":59},[34,90864,2186],{"class":63},[34,90866,51953],{"class":112},[34,90868,1765],{"class":59},[34,90870,90871,90873,90875,90877],{"class":36,"line":244},[34,90872,55345],{"class":63},[34,90874,51898],{"class":59},[34,90876,90467],{"class":63},[34,90878,1765],{"class":59},[34,90880,90881,90883,90885,90887,90889],{"class":36,"line":250},[34,90882,55383],{"class":63},[34,90884,51898],{"class":59},[34,90886,1431],{"class":63},[34,90888,51953],{"class":112},[34,90890,1765],{"class":59},[34,90892,90893,90895,90897,90899],{"class":36,"line":256},[34,90894,57877],{"class":63},[34,90896,51898],{"class":59},[34,90898,61303],{"class":63},[34,90900,1765],{"class":59},[34,90902,90903,90905,90907,90909],{"class":36,"line":261},[34,90904,57747],{"class":63},[34,90906,51898],{"class":59},[34,90908,52053],{"class":63},[34,90910,1765],{"class":59},[34,90912,90913,90915,90917,90919,90921],{"class":36,"line":267},[34,90914,90506],{"class":63},[34,90916,51898],{"class":59},[34,90918,927],{"class":63},[34,90920,51953],{"class":112},[34,90922,1765],{"class":59},[34,90924,90925],{"class":36,"line":2138},[34,90926,2651],{"class":59},[34,90928,90929,90931,90933],{"class":36,"line":2143},[34,90930,52878],{"class":59},[34,90932,532],{"class":51761},[34,90934,51768],{"class":59},[34,90936,90937,90939,90941],{"class":36,"line":2157},[34,90938,52246],{"class":59},[34,90940,51795],{"class":51761},[34,90942,51768],{"class":59},[34,90944,90945],{"class":36,"line":2162},[34,90946,2864],{"emptyLinePlaceholder":540},[34,90948,90949,90951,90953],{"class":36,"line":2191},[34,90950,1515],{"class":59},[34,90952,52261],{"class":51761},[34,90954,51768],{"class":59},[34,90956,90957,90959,90961,90963,90965,90967,90969,90971],{"class":36,"line":2196},[34,90958,52605],{"class":59},[34,90960,52072],{"class":51761},[34,90962,53947],{"class":2427},[34,90964,447],{"class":59},[34,90966,53952],{"class":187},[34,90968,55775],{"class":59},[34,90970,52072],{"class":51761},[34,90972,51768],{"class":59},[34,90974,90975,90977,90979,90981,90983,90985,90987,90989],{"class":36,"line":2213},[34,90976,52605],{"class":59},[34,90978,52274],{"class":51761},[34,90980,55700],{"class":2427},[34,90982,447],{"class":59},[34,90984,88735],{"class":187},[34,90986,55775],{"class":59},[34,90988,52274],{"class":51761},[34,90990,51768],{"class":59},[34,90992,90993,90995,90997],{"class":36,"line":2218},[34,90994,52605],{"class":59},[34,90996,52274],{"class":51761},[34,90998,51768],{"class":59},[34,91000,91001,91003,91005,91007,91009,91011,91013,91015],{"class":36,"line":2223},[34,91002,11685],{"class":112},[34,91004,87394],{"class":63},[34,91006,14028],{"class":112},[34,91008,54857],{"class":59},[34,91010,54860],{"class":2427},[34,91012,617],{"class":59},[34,91014,90607],{"class":187},[34,91016,623],{"class":59},[34,91018,91019,91021,91023,91025],{"class":36,"line":2228},[34,91020,52680],{"class":112},[34,91022,9902],{"class":59},[34,91024,447],{"class":112},[34,91026,47794],{"class":63},[34,91028,91029,91031,91033],{"class":36,"line":2242},[34,91030,70545],{"class":112},[34,91032,90626],{"class":2427},[34,91034,11317],{"class":59},[34,91036,91037,91039,91041,91043],{"class":36,"line":2247},[34,91038,90633],{"class":59},[34,91040,447],{"class":112},[34,91042,3496],{"class":59},[34,91044,3166],{"class":112},[34,91046,91047],{"class":36,"line":3041},[34,91048,90644],{"class":40},[34,91050,91051],{"class":36,"line":3055},[34,91052,2651],{"class":59},[34,91054,91055],{"class":36,"line":3063},[34,91056,90653],{"class":40},[34,91058,91059],{"class":36,"line":3068},[34,91060,91061],{"class":40},"    \u002F\u002F 手写防抖函数\n",[34,91063,91064],{"class":36,"line":3074},[34,91065,91066],{"class":40},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[34,91068,91069],{"class":36,"line":3080},[34,91070,91071],{"class":40},"    \u002F\u002F 1.声明定时器变量\n",[34,91073,91074],{"class":36,"line":3085},[34,91075,91076],{"class":40},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[34,91078,91079],{"class":36,"line":8412},[34,91080,91081],{"class":40},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[34,91083,91084],{"class":36,"line":8436},[34,91085,91086],{"class":40},"    \u002F\u002F 4.定时器里面写函数调用\n",[34,91088,91089,91091,91094,91096,91099,91101,91103],{"class":36,"line":8441},[34,91090,70545],{"class":112},[34,91092,91093],{"class":2427}," debounce",[34,91095,617],{"class":59},[34,91097,91098],{"class":5680},"fn",[34,91100,12899],{"class":59},[34,91102,1326],{"class":5680},[34,91104,12906],{"class":59},[34,91106,91107,91109],{"class":36,"line":8447},[34,91108,80233],{"class":112},[34,91110,91111],{"class":59}," timer\n",[34,91113,91114],{"class":36,"line":8474},[34,91115,91116],{"class":40},"      \u002F\u002F return 返回一个匿名函数\n",[34,91118,91119,91121,91123],{"class":36,"line":8479},[34,91120,74443],{"class":112},[34,91122,59379],{"class":112},[34,91124,54913],{"class":59},[34,91126,91127],{"class":36,"line":8485},[34,91128,91129],{"class":40},"        \u002F\u002F 这里边写第二三四步\n",[34,91131,91132,91134,91137,91140],{"class":36,"line":8497},[34,91133,2961],{"class":112},[34,91135,91136],{"class":59}," (timer) ",[34,91138,91139],{"class":2427},"clearTimeout",[34,91141,91142],{"class":59},"(timer)\n",[34,91144,91145,91148,91150,91153,91155,91157],{"class":36,"line":8509},[34,91146,91147],{"class":59},"        timer ",[34,91149,447],{"class":112},[34,91151,91152],{"class":2427}," setTimeout",[34,91154,617],{"class":59},[34,91156,54910],{"class":112},[34,91158,54913],{"class":59},[34,91160,91161,91164,91166],{"class":36,"line":8521},[34,91162,91163],{"class":2427},"          fn",[34,91165,13514],{"class":59},[34,91167,91168],{"class":40},"\u002F\u002F加小括号调用fn }, t)\n",[34,91170,91171],{"class":36,"line":10180},[34,91172,91173],{"class":59},"        }, t)\n",[34,91175,91176],{"class":36,"line":10205},[34,91177,52859],{"class":59},[34,91179,91180],{"class":36,"line":10228},[34,91181,2651],{"class":59},[34,91183,91184,91186,91188,91190,91192,91194,91196,91198,91200],{"class":36,"line":10252},[34,91185,90668],{"class":59},[34,91187,58274],{"class":2427},[34,91189,617],{"class":59},[34,91191,90675],{"class":187},[34,91193,12899],{"class":59},[34,91195,90681],{"class":2427},[34,91197,90684],{"class":59},[34,91199,65535],{"class":63},[34,91201,30960],{"class":59},[34,91203,91204],{"class":36,"line":10257},[34,91205,2864],{"emptyLinePlaceholder":540},[34,91207,91208],{"class":36,"line":10262},[34,91209,91210],{"class":40},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[34,91212,91213],{"class":36,"line":10267},[34,91214,91215],{"class":40},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[34,91217,91218],{"class":36,"line":10276},[34,91219,91220],{"class":40},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[34,91222,91223],{"class":36,"line":10281},[34,91224,91225],{"class":40},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[34,91227,91228,91230,91232],{"class":36,"line":10287},[34,91229,52878],{"class":59},[34,91231,52274],{"class":51761},[34,91233,51768],{"class":59},[34,91235,91236,91238,91240],{"class":36,"line":10308},[34,91237,52246],{"class":59},[34,91239,52261],{"class":51761},[34,91241,51768],{"class":59},[34,91243,91244],{"class":36,"line":10314},[34,91245,2864],{"emptyLinePlaceholder":540},[34,91247,91248,91250,91252],{"class":36,"line":10328},[34,91249,52246],{"class":59},[34,91251,51096],{"class":51761},[34,91253,51768],{"class":59},[584,91255,91257],{"id":91256},"_4172-节流","4.17.2 节流",[14,91259,91260],{},[20,91261],{"alt":22,"src":91262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91264,91265],{},[20,91266],{"alt":22,"src":91267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91269,91270],{},[760,91271,91272],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91274,91275],{},"实现方式：",[1611,91277,91278],{},[570,91279,91280],{},"lodash 提供的节流函数来处理",[14,91282,91283],{},"_.throttle(func,[wait=0],[options=])",[14,91285,91286],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[25,91288,91290],{"className":51094,"code":91289,"language":51096,"meta":22,"style":22},"\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",[31,91291,91292,91302,91316,91320,91328,91342,91362,91374,91382,91388,91398,91410,91422,91432,91444,91454,91464,91476,91480,91488,91496,91500,91508,91526,91544,91552,91570,91580,91588,91598,91602,91606,91610,91615,91620,91641,91649,91657,91661],{"__ignoreMap":22},[34,91293,91294,91296,91298,91300],{"class":36,"line":37},[34,91295,51758],{"class":59},[34,91297,51762],{"class":51761},[34,91299,51765],{"class":2427},[34,91301,51768],{"class":59},[34,91303,91304,91306,91308,91310,91312,91314],{"class":36,"line":44},[34,91305,1515],{"class":59},[34,91307,51096],{"class":51761},[34,91309,51777],{"class":2427},[34,91311,447],{"class":59},[34,91313,51782],{"class":187},[34,91315,51768],{"class":59},[34,91317,91318],{"class":36,"line":50},[34,91319,2864],{"emptyLinePlaceholder":540},[34,91321,91322,91324,91326],{"class":36,"line":56},[34,91323,1515],{"class":59},[34,91325,51795],{"class":51761},[34,91327,51768],{"class":59},[34,91329,91330,91332,91334,91336,91338,91340],{"class":36,"line":107},[34,91331,52605],{"class":59},[34,91333,51805],{"class":51761},[34,91335,51808],{"class":2427},[34,91337,447],{"class":59},[34,91339,51813],{"class":187},[34,91341,51768],{"class":59},[34,91343,91344,91346,91348,91350,91352,91354,91356,91358,91360],{"class":36,"line":196},[34,91345,52605],{"class":59},[34,91347,51805],{"class":51761},[34,91349,15384],{"class":2427},[34,91351,447],{"class":59},[34,91353,51852],{"class":187},[34,91355,51832],{"class":2427},[34,91357,447],{"class":59},[34,91359,51859],{"class":187},[34,91361,51768],{"class":59},[34,91363,91364,91366,91368,91370,91372],{"class":36,"line":202},[34,91365,52605],{"class":59},[34,91367,51868],{"class":51761},[34,91369,51871],{"class":59},[34,91371,51868],{"class":51761},[34,91373,51768],{"class":59},[34,91375,91376,91378,91380],{"class":36,"line":207},[34,91377,52605],{"class":59},[34,91379,532],{"class":51761},[34,91381,51768],{"class":59},[34,91383,91384,91386],{"class":36,"line":222},[34,91385,55213],{"class":2427},[34,91387,16036],{"class":59},[34,91389,91390,91392,91394,91396],{"class":36,"line":227},[34,91391,73057],{"class":63},[34,91393,51898],{"class":59},[34,91395,60966],{"class":63},[34,91397,1765],{"class":59},[34,91399,91400,91402,91404,91406,91408],{"class":36,"line":232},[34,91401,55232],{"class":63},[34,91403,51898],{"class":59},[34,91405,2186],{"class":63},[34,91407,51953],{"class":112},[34,91409,1765],{"class":59},[34,91411,91412,91414,91416,91418,91420],{"class":36,"line":238},[34,91413,55246],{"class":63},[34,91415,51898],{"class":59},[34,91417,2186],{"class":63},[34,91419,51953],{"class":112},[34,91421,1765],{"class":59},[34,91423,91424,91426,91428,91430],{"class":36,"line":244},[34,91425,55345],{"class":63},[34,91427,51898],{"class":59},[34,91429,90467],{"class":63},[34,91431,1765],{"class":59},[34,91433,91434,91436,91438,91440,91442],{"class":36,"line":250},[34,91435,55383],{"class":63},[34,91437,51898],{"class":59},[34,91439,1431],{"class":63},[34,91441,51953],{"class":112},[34,91443,1765],{"class":59},[34,91445,91446,91448,91450,91452],{"class":36,"line":256},[34,91447,57877],{"class":63},[34,91449,51898],{"class":59},[34,91451,61303],{"class":63},[34,91453,1765],{"class":59},[34,91455,91456,91458,91460,91462],{"class":36,"line":261},[34,91457,57747],{"class":63},[34,91459,51898],{"class":59},[34,91461,52053],{"class":63},[34,91463,1765],{"class":59},[34,91465,91466,91468,91470,91472,91474],{"class":36,"line":267},[34,91467,90506],{"class":63},[34,91469,51898],{"class":59},[34,91471,927],{"class":63},[34,91473,51953],{"class":112},[34,91475,1765],{"class":59},[34,91477,91478],{"class":36,"line":2138},[34,91479,2651],{"class":59},[34,91481,91482,91484,91486],{"class":36,"line":2143},[34,91483,52878],{"class":59},[34,91485,532],{"class":51761},[34,91487,51768],{"class":59},[34,91489,91490,91492,91494],{"class":36,"line":2157},[34,91491,52246],{"class":59},[34,91493,51795],{"class":51761},[34,91495,51768],{"class":59},[34,91497,91498],{"class":36,"line":2162},[34,91499,2864],{"emptyLinePlaceholder":540},[34,91501,91502,91504,91506],{"class":36,"line":2191},[34,91503,1515],{"class":59},[34,91505,52261],{"class":51761},[34,91507,51768],{"class":59},[34,91509,91510,91512,91514,91516,91518,91520,91522,91524],{"class":36,"line":2196},[34,91511,52605],{"class":59},[34,91513,52072],{"class":51761},[34,91515,53947],{"class":2427},[34,91517,447],{"class":59},[34,91519,53952],{"class":187},[34,91521,55775],{"class":59},[34,91523,52072],{"class":51761},[34,91525,51768],{"class":59},[34,91527,91528,91530,91532,91534,91536,91538,91540,91542],{"class":36,"line":2213},[34,91529,52605],{"class":59},[34,91531,52274],{"class":51761},[34,91533,55700],{"class":2427},[34,91535,447],{"class":59},[34,91537,88735],{"class":187},[34,91539,55775],{"class":59},[34,91541,52274],{"class":51761},[34,91543,51768],{"class":59},[34,91545,91546,91548,91550],{"class":36,"line":2218},[34,91547,52605],{"class":59},[34,91549,52274],{"class":51761},[34,91551,51768],{"class":59},[34,91553,91554,91556,91558,91560,91562,91564,91566,91568],{"class":36,"line":2223},[34,91555,11685],{"class":112},[34,91557,87394],{"class":63},[34,91559,14028],{"class":112},[34,91561,54857],{"class":59},[34,91563,54860],{"class":2427},[34,91565,617],{"class":59},[34,91567,90607],{"class":187},[34,91569,623],{"class":59},[34,91571,91572,91574,91576,91578],{"class":36,"line":2228},[34,91573,52680],{"class":112},[34,91575,9902],{"class":59},[34,91577,447],{"class":112},[34,91579,47794],{"class":63},[34,91581,91582,91584,91586],{"class":36,"line":2242},[34,91583,70545],{"class":112},[34,91585,90626],{"class":2427},[34,91587,11317],{"class":59},[34,91589,91590,91592,91594,91596],{"class":36,"line":2247},[34,91591,90633],{"class":59},[34,91593,447],{"class":112},[34,91595,3496],{"class":59},[34,91597,3166],{"class":112},[34,91599,91600],{"class":36,"line":3041},[34,91601,90644],{"class":40},[34,91603,91604],{"class":36,"line":3055},[34,91605,2651],{"class":59},[34,91607,91608],{"class":36,"line":3063},[34,91609,90653],{"class":40},[34,91611,91612],{"class":36,"line":3068},[34,91613,91614],{"class":40},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[34,91616,91617],{"class":36,"line":3074},[34,91618,91619],{"class":40},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[34,91621,91622,91624,91626,91628,91630,91632,91635,91637,91639],{"class":36,"line":3080},[34,91623,90668],{"class":59},[34,91625,58274],{"class":2427},[34,91627,617],{"class":59},[34,91629,90675],{"class":187},[34,91631,90678],{"class":59},[34,91633,91634],{"class":2427},"throttle",[34,91636,90684],{"class":59},[34,91638,65535],{"class":63},[34,91640,30960],{"class":59},[34,91642,91643,91645,91647],{"class":36,"line":3085},[34,91644,52878],{"class":59},[34,91646,52274],{"class":51761},[34,91648,51768],{"class":59},[34,91650,91651,91653,91655],{"class":36,"line":8412},[34,91652,52246],{"class":59},[34,91654,52261],{"class":51761},[34,91656,51768],{"class":59},[34,91658,91659],{"class":36,"line":8436},[34,91660,2864],{"emptyLinePlaceholder":540},[34,91662,91663,91665,91667],{"class":36,"line":8441},[34,91664,52246],{"class":59},[34,91666,51096],{"class":51761},[34,91668,51768],{"class":59},[1611,91670,91671],{},[570,91672,91673],{},"手写一个节流函数来处理",[14,91675,71413],{},[14,91677,90727],{},[14,91679,91680],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91682,91683],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[25,91685,91687],{"className":51094,"code":91686,"language":51096,"meta":22,"style":22},"\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",[31,91688,91689,91699,91713,91717,91725,91739,91759,91771,91779,91785,91795,91807,91819,91829,91841,91851,91861,91873,91877,91885,91893,91897,91905,91923,91941,91949,91967,91977,91985,91995,91999,92003,92007,92012,92017,92022,92027,92032,92037,92054,92060,92068,92079,92094,92101,92106,92111,92121,92126,92131,92136,92140,92144,92148,92168,92176,92184,92188],{"__ignoreMap":22},[34,91690,91691,91693,91695,91697],{"class":36,"line":37},[34,91692,51758],{"class":59},[34,91694,51762],{"class":51761},[34,91696,51765],{"class":2427},[34,91698,51768],{"class":59},[34,91700,91701,91703,91705,91707,91709,91711],{"class":36,"line":44},[34,91702,1515],{"class":59},[34,91704,51096],{"class":51761},[34,91706,51777],{"class":2427},[34,91708,447],{"class":59},[34,91710,51782],{"class":187},[34,91712,51768],{"class":59},[34,91714,91715],{"class":36,"line":50},[34,91716,2864],{"emptyLinePlaceholder":540},[34,91718,91719,91721,91723],{"class":36,"line":56},[34,91720,1515],{"class":59},[34,91722,51795],{"class":51761},[34,91724,51768],{"class":59},[34,91726,91727,91729,91731,91733,91735,91737],{"class":36,"line":107},[34,91728,52605],{"class":59},[34,91730,51805],{"class":51761},[34,91732,51808],{"class":2427},[34,91734,447],{"class":59},[34,91736,51813],{"class":187},[34,91738,51768],{"class":59},[34,91740,91741,91743,91745,91747,91749,91751,91753,91755,91757],{"class":36,"line":196},[34,91742,52605],{"class":59},[34,91744,51805],{"class":51761},[34,91746,15384],{"class":2427},[34,91748,447],{"class":59},[34,91750,51852],{"class":187},[34,91752,51832],{"class":2427},[34,91754,447],{"class":59},[34,91756,51859],{"class":187},[34,91758,51768],{"class":59},[34,91760,91761,91763,91765,91767,91769],{"class":36,"line":202},[34,91762,52605],{"class":59},[34,91764,51868],{"class":51761},[34,91766,51871],{"class":59},[34,91768,51868],{"class":51761},[34,91770,51768],{"class":59},[34,91772,91773,91775,91777],{"class":36,"line":207},[34,91774,52605],{"class":59},[34,91776,532],{"class":51761},[34,91778,51768],{"class":59},[34,91780,91781,91783],{"class":36,"line":222},[34,91782,55213],{"class":2427},[34,91784,16036],{"class":59},[34,91786,91787,91789,91791,91793],{"class":36,"line":227},[34,91788,73057],{"class":63},[34,91790,51898],{"class":59},[34,91792,60966],{"class":63},[34,91794,1765],{"class":59},[34,91796,91797,91799,91801,91803,91805],{"class":36,"line":232},[34,91798,55232],{"class":63},[34,91800,51898],{"class":59},[34,91802,2186],{"class":63},[34,91804,51953],{"class":112},[34,91806,1765],{"class":59},[34,91808,91809,91811,91813,91815,91817],{"class":36,"line":238},[34,91810,55246],{"class":63},[34,91812,51898],{"class":59},[34,91814,2186],{"class":63},[34,91816,51953],{"class":112},[34,91818,1765],{"class":59},[34,91820,91821,91823,91825,91827],{"class":36,"line":244},[34,91822,55345],{"class":63},[34,91824,51898],{"class":59},[34,91826,90467],{"class":63},[34,91828,1765],{"class":59},[34,91830,91831,91833,91835,91837,91839],{"class":36,"line":250},[34,91832,55383],{"class":63},[34,91834,51898],{"class":59},[34,91836,1431],{"class":63},[34,91838,51953],{"class":112},[34,91840,1765],{"class":59},[34,91842,91843,91845,91847,91849],{"class":36,"line":256},[34,91844,57877],{"class":63},[34,91846,51898],{"class":59},[34,91848,61303],{"class":63},[34,91850,1765],{"class":59},[34,91852,91853,91855,91857,91859],{"class":36,"line":261},[34,91854,57747],{"class":63},[34,91856,51898],{"class":59},[34,91858,52053],{"class":63},[34,91860,1765],{"class":59},[34,91862,91863,91865,91867,91869,91871],{"class":36,"line":267},[34,91864,90506],{"class":63},[34,91866,51898],{"class":59},[34,91868,927],{"class":63},[34,91870,51953],{"class":112},[34,91872,1765],{"class":59},[34,91874,91875],{"class":36,"line":2138},[34,91876,2651],{"class":59},[34,91878,91879,91881,91883],{"class":36,"line":2143},[34,91880,52878],{"class":59},[34,91882,532],{"class":51761},[34,91884,51768],{"class":59},[34,91886,91887,91889,91891],{"class":36,"line":2157},[34,91888,52246],{"class":59},[34,91890,51795],{"class":51761},[34,91892,51768],{"class":59},[34,91894,91895],{"class":36,"line":2162},[34,91896,2864],{"emptyLinePlaceholder":540},[34,91898,91899,91901,91903],{"class":36,"line":2191},[34,91900,1515],{"class":59},[34,91902,52261],{"class":51761},[34,91904,51768],{"class":59},[34,91906,91907,91909,91911,91913,91915,91917,91919,91921],{"class":36,"line":2196},[34,91908,52605],{"class":59},[34,91910,52072],{"class":51761},[34,91912,53947],{"class":2427},[34,91914,447],{"class":59},[34,91916,53952],{"class":187},[34,91918,55775],{"class":59},[34,91920,52072],{"class":51761},[34,91922,51768],{"class":59},[34,91924,91925,91927,91929,91931,91933,91935,91937,91939],{"class":36,"line":2213},[34,91926,52605],{"class":59},[34,91928,52274],{"class":51761},[34,91930,55700],{"class":2427},[34,91932,447],{"class":59},[34,91934,88735],{"class":187},[34,91936,55775],{"class":59},[34,91938,52274],{"class":51761},[34,91940,51768],{"class":59},[34,91942,91943,91945,91947],{"class":36,"line":2218},[34,91944,52605],{"class":59},[34,91946,52274],{"class":51761},[34,91948,51768],{"class":59},[34,91950,91951,91953,91955,91957,91959,91961,91963,91965],{"class":36,"line":2223},[34,91952,11685],{"class":112},[34,91954,87394],{"class":63},[34,91956,14028],{"class":112},[34,91958,54857],{"class":59},[34,91960,54860],{"class":2427},[34,91962,617],{"class":59},[34,91964,90607],{"class":187},[34,91966,623],{"class":59},[34,91968,91969,91971,91973,91975],{"class":36,"line":2228},[34,91970,52680],{"class":112},[34,91972,9902],{"class":59},[34,91974,447],{"class":112},[34,91976,47794],{"class":63},[34,91978,91979,91981,91983],{"class":36,"line":2242},[34,91980,70545],{"class":112},[34,91982,90626],{"class":2427},[34,91984,11317],{"class":59},[34,91986,91987,91989,91991,91993],{"class":36,"line":2247},[34,91988,90633],{"class":59},[34,91990,447],{"class":112},[34,91992,3496],{"class":59},[34,91994,3166],{"class":112},[34,91996,91997],{"class":36,"line":3041},[34,91998,90644],{"class":40},[34,92000,92001],{"class":36,"line":3055},[34,92002,2651],{"class":59},[34,92004,92005],{"class":36,"line":3063},[34,92006,90653],{"class":40},[34,92008,92009],{"class":36,"line":3068},[34,92010,92011],{"class":40},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[34,92013,92014],{"class":36,"line":3074},[34,92015,92016],{"class":40},"    \u002F\u002F 1.声明一个定时器变量\n",[34,92018,92019],{"class":36,"line":3080},[34,92020,92021],{"class":40},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[34,92023,92024],{"class":36,"line":3085},[34,92025,92026],{"class":40},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[34,92028,92029],{"class":36,"line":8412},[34,92030,92031],{"class":40},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[34,92033,92034],{"class":36,"line":8436},[34,92035,92036],{"class":40},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[34,92038,92039,92041,92044,92046,92048,92050,92052],{"class":36,"line":8441},[34,92040,70545],{"class":112},[34,92042,92043],{"class":2427}," throttle",[34,92045,617],{"class":59},[34,92047,91098],{"class":5680},[34,92049,12899],{"class":59},[34,92051,1326],{"class":5680},[34,92053,12906],{"class":59},[34,92055,92056,92058],{"class":36,"line":8447},[34,92057,80233],{"class":112},[34,92059,91111],{"class":59},[34,92061,92062,92064,92066],{"class":36,"line":8474},[34,92063,74443],{"class":112},[34,92065,59379],{"class":112},[34,92067,54913],{"class":59},[34,92069,92070,92072,92074,92076],{"class":36,"line":8479},[34,92071,2961],{"class":112},[34,92073,2122],{"class":59},[34,92075,835],{"class":112},[34,92077,92078],{"class":59},"timer) {\n",[34,92080,92081,92084,92086,92088,92090,92092],{"class":36,"line":8485},[34,92082,92083],{"class":59},"          timer ",[34,92085,447],{"class":112},[34,92087,91152],{"class":2427},[34,92089,617],{"class":59},[34,92091,54910],{"class":112},[34,92093,54913],{"class":59},[34,92095,92096,92099],{"class":36,"line":8497},[34,92097,92098],{"class":2427},"            fn",[34,92100,2440],{"class":59},[34,92102,92103],{"class":36,"line":8509},[34,92104,92105],{"class":40},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[34,92107,92108],{"class":36,"line":8521},[34,92109,92110],{"class":40},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[34,92112,92113,92116,92118],{"class":36,"line":10180},[34,92114,92115],{"class":59},"            timer ",[34,92117,447],{"class":112},[34,92119,92120],{"class":63}," null\n",[34,92122,92123],{"class":36,"line":10205},[34,92124,92125],{"class":40},"            \u002F\u002F 不能用clearTimeout(timer)\n",[34,92127,92128],{"class":36,"line":10228},[34,92129,92130],{"class":40},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[34,92132,92133],{"class":36,"line":10252},[34,92134,92135],{"class":59},"          }, t)\n",[34,92137,92138],{"class":36,"line":10257},[34,92139,2993],{"class":59},[34,92141,92142],{"class":36,"line":10262},[34,92143,52859],{"class":59},[34,92145,92146],{"class":36,"line":10267},[34,92147,2651],{"class":59},[34,92149,92150,92152,92154,92156,92158,92160,92162,92164,92166],{"class":36,"line":10276},[34,92151,90668],{"class":59},[34,92153,58274],{"class":2427},[34,92155,617],{"class":59},[34,92157,90675],{"class":187},[34,92159,12899],{"class":59},[34,92161,91634],{"class":2427},[34,92163,90684],{"class":59},[34,92165,65535],{"class":63},[34,92167,30960],{"class":59},[34,92169,92170,92172,92174],{"class":36,"line":10281},[34,92171,52878],{"class":59},[34,92173,52274],{"class":51761},[34,92175,51768],{"class":59},[34,92177,92178,92180,92182],{"class":36,"line":10287},[34,92179,52246],{"class":59},[34,92181,52261],{"class":51761},[34,92183,51768],{"class":59},[34,92185,92186],{"class":36,"line":10308},[34,92187,2864],{"emptyLinePlaceholder":540},[34,92189,92190,92192,92194],{"class":36,"line":10314},[34,92191,52246],{"class":59},[34,92193,51096],{"class":51761},[34,92195,51768],{"class":59},[584,92197,92199],{"id":92198},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[25,92201,92203],{"className":53528,"code":92202,"language":53530,"meta":22,"style":22},"\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",[31,92204,92205,92213,92221,92226,92231,92236,92241,92245,92253],{"__ignoreMap":22},[34,92206,92207,92209,92211],{"class":36,"line":37},[34,92208,1515],{"class":59},[34,92210,52261],{"class":51761},[34,92212,51768],{"class":59},[34,92214,92215,92217,92219],{"class":36,"line":44},[34,92216,52605],{"class":59},[34,92218,52274],{"class":51761},[34,92220,51768],{"class":59},[34,92222,92223],{"class":36,"line":50},[34,92224,92225],{"class":59},"    let timer = null\n",[34,92227,92228],{"class":36,"line":56},[34,92229,92230],{"class":59},"    timer = setTimeout(() => {\n",[34,92232,92233],{"class":36,"line":107},[34,92234,92235],{"class":59},"      clearTimeout(timer)\n",[34,92237,92238],{"class":36,"line":196},[34,92239,92240],{"class":59},"      console.log(timer)\n",[34,92242,92243],{"class":36,"line":202},[34,92244,60686],{"class":59},[34,92246,92247,92249,92251],{"class":36,"line":207},[34,92248,52878],{"class":59},[34,92250,52274],{"class":51761},[34,92252,51768],{"class":59},[34,92254,92255,92257,92259],{"class":36,"line":222},[34,92256,52246],{"class":59},[34,92258,52261],{"class":51761},[34,92260,51768],{"class":59},[14,92262,92263],{},"输出为1",[14,92265,92266],{},"在开启的定时器里边写清除定时器",[14,92268,92269],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[584,92271,92273],{"id":92272},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92275,92276],{},"页面打开，可以记录上一次的视频播放位置",[14,92278,92279],{},[20,92280],{"alt":22,"src":92281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92283,92284],{},[20,92285],{"alt":22,"src":92286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[25,92288,92290],{"className":51094,"code":92289,"language":51096,"meta":22,"style":22},"\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",[31,92291,92292,92302,92316,92320,92328,92342,92362,92382,92404,92417,92425,92431,92441,92451,92461,92465,92469,92476,92489,92501,92505,92509,92519,92531,92545,92549,92553,92560,92570,92583,92595,92605,92615,92631,92643,92647,92651,92659,92669,92681,92691,92701,92711,92715,92719,92729,92740,92744,92752,92760,92764,92772,92787,92802,92817,92838,92846,92854,92869,92891,92899,92914,92940,92966,92992,93000,93008,93027,93035,93040,93059,93064,93082,93087,93092,93100,93105,93119,93127,93132,93149,93153,93158,93180,93184,93192,93200,93204],{"__ignoreMap":22},[34,92293,92294,92296,92298,92300],{"class":36,"line":37},[34,92295,51758],{"class":59},[34,92297,51762],{"class":51761},[34,92299,51765],{"class":2427},[34,92301,51768],{"class":59},[34,92303,92304,92306,92308,92310,92312,92314],{"class":36,"line":44},[34,92305,1515],{"class":59},[34,92307,51096],{"class":51761},[34,92309,51777],{"class":2427},[34,92311,447],{"class":59},[34,92313,51782],{"class":187},[34,92315,51768],{"class":59},[34,92317,92318],{"class":36,"line":50},[34,92319,2864],{"emptyLinePlaceholder":540},[34,92321,92322,92324,92326],{"class":36,"line":56},[34,92323,1515],{"class":59},[34,92325,51795],{"class":51761},[34,92327,51768],{"class":59},[34,92329,92330,92332,92334,92336,92338,92340],{"class":36,"line":107},[34,92331,52605],{"class":59},[34,92333,51805],{"class":51761},[34,92335,51808],{"class":2427},[34,92337,447],{"class":59},[34,92339,51813],{"class":187},[34,92341,59588],{"class":59},[34,92343,92344,92346,92348,92350,92352,92354,92356,92358,92360],{"class":36,"line":196},[34,92345,52605],{"class":59},[34,92347,51805],{"class":51761},[34,92349,51824],{"class":2427},[34,92351,447],{"class":59},[34,92353,51829],{"class":187},[34,92355,51832],{"class":2427},[34,92357,447],{"class":59},[34,92359,51837],{"class":187},[34,92361,59588],{"class":59},[34,92363,92364,92366,92368,92370,92372,92374,92376,92378,92380],{"class":36,"line":202},[34,92365,52605],{"class":59},[34,92367,51805],{"class":51761},[34,92369,15384],{"class":2427},[34,92371,447],{"class":59},[34,92373,51852],{"class":187},[34,92375,51832],{"class":2427},[34,92377,447],{"class":59},[34,92379,51859],{"class":187},[34,92381,59588],{"class":59},[34,92383,92384,92386,92388,92390,92392,92395,92397,92399,92402],{"class":36,"line":207},[34,92385,52605],{"class":59},[34,92387,51805],{"class":51761},[34,92389,15384],{"class":2427},[34,92391,447],{"class":59},[34,92393,92394],{"class":187},"\"referrer\"",[34,92396,51832],{"class":2427},[34,92398,447],{"class":59},[34,92400,92401],{"class":187},"\"never\"",[34,92403,59588],{"class":59},[34,92405,92406,92408,92410,92413,92415],{"class":36,"line":222},[34,92407,52605],{"class":59},[34,92409,51868],{"class":51761},[34,92411,92412],{"class":59},">综合案例\u003C\u002F",[34,92414,51868],{"class":51761},[34,92416,51768],{"class":59},[34,92418,92419,92421,92423],{"class":36,"line":227},[34,92420,52605],{"class":59},[34,92422,532],{"class":51761},[34,92424,51768],{"class":59},[34,92426,92427,92429],{"class":36,"line":232},[34,92428,6867],{"class":51761},[34,92430,16036],{"class":59},[34,92432,92433,92435,92437,92439],{"class":36,"line":238},[34,92434,55156],{"class":63},[34,92436,51898],{"class":59},[34,92438,319],{"class":63},[34,92440,1765],{"class":59},[34,92442,92443,92445,92447,92449],{"class":36,"line":244},[34,92444,55167],{"class":63},[34,92446,51898],{"class":59},[34,92448,319],{"class":63},[34,92450,1765],{"class":59},[34,92452,92453,92455,92457,92459],{"class":36,"line":250},[34,92454,73057],{"class":63},[34,92456,51898],{"class":59},[34,92458,60966],{"class":63},[34,92460,1765],{"class":59},[34,92462,92463],{"class":36,"line":256},[34,92464,2651],{"class":59},[34,92466,92467],{"class":36,"line":261},[34,92468,2864],{"emptyLinePlaceholder":540},[34,92470,92471,92474],{"class":36,"line":267},[34,92472,92473],{"class":2427},"    .container",[34,92475,16036],{"class":59},[34,92477,92478,92480,92482,92485,92487],{"class":36,"line":2138},[34,92479,55232],{"class":63},[34,92481,51898],{"class":59},[34,92483,92484],{"class":63},"1200",[34,92486,51953],{"class":112},[34,92488,1765],{"class":59},[34,92490,92491,92493,92495,92497,92499],{"class":36,"line":2143},[34,92492,55167],{"class":63},[34,92494,51898],{"class":59},[34,92496,319],{"class":63},[34,92498,52017],{"class":63},[34,92500,1765],{"class":59},[34,92502,92503],{"class":36,"line":2157},[34,92504,2651],{"class":59},[34,92506,92507],{"class":36,"line":2162},[34,92508,2864],{"emptyLinePlaceholder":540},[34,92510,92511,92514,92517],{"class":36,"line":2191},[34,92512,92513],{"class":2427},"    .video",[34,92515,92516],{"class":51761}," video",[34,92518,16036],{"class":59},[34,92520,92521,92523,92525,92527,92529],{"class":36,"line":2196},[34,92522,55232],{"class":63},[34,92524,51898],{"class":59},[34,92526,919],{"class":63},[34,92528,936],{"class":112},[34,92530,1765],{"class":59},[34,92532,92533,92535,92537,92539,92541,92543],{"class":36,"line":2213},[34,92534,55156],{"class":63},[34,92536,51898],{"class":59},[34,92538,1306],{"class":63},[34,92540,51953],{"class":112},[34,92542,4557],{"class":63},[34,92544,1765],{"class":59},[34,92546,92547],{"class":36,"line":2218},[34,92548,2651],{"class":59},[34,92550,92551],{"class":36,"line":2223},[34,92552,2864],{"emptyLinePlaceholder":540},[34,92554,92555,92558],{"class":36,"line":2228},[34,92556,92557],{"class":2427},"    .elevator",[34,92559,16036],{"class":59},[34,92561,92562,92564,92566,92568],{"class":36,"line":2242},[34,92563,55220],{"class":63},[34,92565,51898],{"class":59},[34,92567,86694],{"class":63},[34,92569,1765],{"class":59},[34,92571,92572,92574,92576,92579,92581],{"class":36,"line":2247},[34,92573,55408],{"class":63},[34,92575,51898],{"class":59},[34,92577,92578],{"class":63},"280",[34,92580,51953],{"class":112},[34,92582,1765],{"class":59},[34,92584,92585,92587,92589,92591,92593],{"class":36,"line":3041},[34,92586,86888],{"class":63},[34,92588,51898],{"class":59},[34,92590,1306],{"class":63},[34,92592,51953],{"class":112},[34,92594,1765],{"class":59},[34,92596,92597,92599,92601,92603],{"class":36,"line":3055},[34,92598,86701],{"class":63},[34,92600,51898],{"class":59},[34,92602,86706],{"class":63},[34,92604,1765],{"class":59},[34,92606,92607,92609,92611,92613],{"class":36,"line":3063},[34,92608,62182],{"class":63},[34,92610,51898],{"class":59},[34,92612,61303],{"class":63},[34,92614,1765],{"class":59},[34,92616,92617,92619,92621,92623,92625,92627,92629],{"class":36,"line":3068},[34,92618,62438],{"class":63},[34,92620,51898],{"class":59},[34,92622,64],{"class":63},[34,92624,51953],{"class":112},[34,92626,51982],{"class":63},[34,92628,62705],{"class":63},[34,92630,1765],{"class":59},[34,92632,92633,92635,92637,92639,92641],{"class":36,"line":3074},[34,92634,55232],{"class":63},[34,92636,51898],{"class":59},[34,92638,1512],{"class":63},[34,92640,51953],{"class":112},[34,92642,1765],{"class":59},[34,92644,92645],{"class":36,"line":3080},[34,92646,2651],{"class":59},[34,92648,92649],{"class":36,"line":3085},[34,92650,2864],{"emptyLinePlaceholder":540},[34,92652,92653,92655,92657],{"class":36,"line":8412},[34,92654,92557],{"class":2427},[34,92656,1870],{"class":51761},[34,92658,16036],{"class":59},[34,92660,92661,92663,92665,92667],{"class":36,"line":8436},[34,92662,55470],{"class":63},[34,92664,51898],{"class":59},[34,92666,61330],{"class":63},[34,92668,1765],{"class":59},[34,92670,92671,92673,92675,92677,92679],{"class":36,"line":8441},[34,92672,55156],{"class":63},[34,92674,51898],{"class":59},[34,92676,1053],{"class":63},[34,92678,51953],{"class":112},[34,92680,1765],{"class":59},[34,92682,92683,92685,92687,92689],{"class":36,"line":8447},[34,92684,64431],{"class":63},[34,92686,51898],{"class":59},[34,92688,55198],{"class":63},[34,92690,1765],{"class":59},[34,92692,92693,92695,92697,92699],{"class":36,"line":8474},[34,92694,57747],{"class":63},[34,92696,51898],{"class":59},[34,92698,52053],{"class":63},[34,92700,1765],{"class":59},[34,92702,92703,92705,92707,92709],{"class":36,"line":8479},[34,92704,57877],{"class":63},[34,92706,51898],{"class":59},[34,92708,62531],{"class":63},[34,92710,1765],{"class":59},[34,92712,92713],{"class":36,"line":8485},[34,92714,2651],{"class":59},[34,92716,92717],{"class":36,"line":8497},[34,92718,2864],{"emptyLinePlaceholder":540},[34,92720,92721,92723,92725,92727],{"class":36,"line":8509},[34,92722,92557],{"class":2427},[34,92724,1870],{"class":51761},[34,92726,64485],{"class":2427},[34,92728,16036],{"class":59},[34,92730,92731,92733,92735,92738],{"class":36,"line":8521},[34,92732,57877],{"class":63},[34,92734,51898],{"class":59},[34,92736,92737],{"class":63},"#1286ff",[34,92739,1765],{"class":59},[34,92741,92742],{"class":36,"line":10180},[34,92743,2651],{"class":59},[34,92745,92746,92748,92750],{"class":36,"line":10205},[34,92747,52878],{"class":59},[34,92749,532],{"class":51761},[34,92751,51768],{"class":59},[34,92753,92754,92756,92758],{"class":36,"line":10228},[34,92755,52246],{"class":59},[34,92757,51795],{"class":51761},[34,92759,51768],{"class":59},[34,92761,92762],{"class":36,"line":10252},[34,92763,2864],{"emptyLinePlaceholder":540},[34,92765,92766,92768,92770],{"class":36,"line":10257},[34,92767,1515],{"class":59},[34,92769,52261],{"class":51761},[34,92771,51768],{"class":59},[34,92773,92774,92776,92778,92780,92782,92785],{"class":36,"line":10262},[34,92775,52605],{"class":59},[34,92777,52072],{"class":51761},[34,92779,53947],{"class":2427},[34,92781,447],{"class":59},[34,92783,92784],{"class":187},"\"container\"",[34,92786,51768],{"class":59},[34,92788,92789,92791,92793,92795,92797,92800],{"class":36,"line":10267},[34,92790,51802],{"class":59},[34,92792,52072],{"class":51761},[34,92794,53947],{"class":2427},[34,92796,447],{"class":59},[34,92798,92799],{"class":187},"\"header\"",[34,92801,51768],{"class":59},[34,92803,92804,92806,92808,92810,92812,92815],{"class":36,"line":10276},[34,92805,55695],{"class":59},[34,92807,847],{"class":51761},[34,92809,61518],{"class":2427},[34,92811,447],{"class":59},[34,92813,92814],{"class":187},"\"http:\u002F\u002Fpip.itcast.cn\"",[34,92816,51768],{"class":59},[34,92818,92819,92821,92823,92825,92827,92830,92832,92834,92836],{"class":36,"line":10281},[34,92820,55763],{"class":59},[34,92822,20],{"class":51761},[34,92824,55700],{"class":2427},[34,92826,447],{"class":59},[34,92828,92829],{"class":187},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[34,92831,55708],{"class":2427},[34,92833,447],{"class":59},[34,92835,8116],{"class":187},[34,92837,59588],{"class":59},[34,92839,92840,92842,92844],{"class":36,"line":10287},[34,92841,55868],{"class":59},[34,92843,847],{"class":51761},[34,92845,51768],{"class":59},[34,92847,92848,92850,92852],{"class":36,"line":10308},[34,92849,52237],{"class":59},[34,92851,52072],{"class":51761},[34,92853,51768],{"class":59},[34,92855,92856,92858,92860,92862,92864,92867],{"class":36,"line":10314},[34,92857,51802],{"class":59},[34,92859,52072],{"class":51761},[34,92861,53947],{"class":2427},[34,92863,447],{"class":59},[34,92865,92866],{"class":187},"\"video\"",[34,92868,51768],{"class":59},[34,92870,92871,92873,92875,92877,92879,92882,92885,92887,92889],{"class":36,"line":10328},[34,92872,55695],{"class":59},[34,92874,28648],{"class":51761},[34,92876,55700],{"class":2427},[34,92878,447],{"class":59},[34,92880,92881],{"class":187},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[34,92883,92884],{"class":2427}," controls",[34,92886,55775],{"class":59},[34,92888,28648],{"class":51761},[34,92890,51768],{"class":59},[34,92892,92893,92895,92897],{"class":36,"line":10334},[34,92894,52237],{"class":59},[34,92896,52072],{"class":51761},[34,92898,51768],{"class":59},[34,92900,92901,92903,92905,92907,92909,92912],{"class":36,"line":10361},[34,92902,51802],{"class":59},[34,92904,52072],{"class":51761},[34,92906,53947],{"class":2427},[34,92908,447],{"class":59},[34,92910,92911],{"class":187},"\"elevator\"",[34,92913,51768],{"class":59},[34,92915,92916,92918,92920,92922,92924,92926,92929,92931,92933,92936,92938],{"class":36,"line":10370},[34,92917,55695],{"class":59},[34,92919,847],{"class":51761},[34,92921,61518],{"class":2427},[34,92923,447],{"class":59},[34,92925,64697],{"class":187},[34,92927,92928],{"class":2427}," data-ref",[34,92930,447],{"class":59},[34,92932,92866],{"class":187},[34,92934,92935],{"class":59},">视频介绍\u003C\u002F",[34,92937,847],{"class":51761},[34,92939,51768],{"class":59},[34,92941,92942,92944,92946,92948,92950,92952,92954,92956,92959,92962,92964],{"class":36,"line":10376},[34,92943,55695],{"class":59},[34,92945,847],{"class":51761},[34,92947,61518],{"class":2427},[34,92949,447],{"class":59},[34,92951,64697],{"class":187},[34,92953,92928],{"class":2427},[34,92955,447],{"class":59},[34,92957,92958],{"class":187},"\"intro\"",[34,92960,92961],{"class":59},">课程简介\u003C\u002F",[34,92963,847],{"class":51761},[34,92965,51768],{"class":59},[34,92967,92968,92970,92972,92974,92976,92978,92980,92982,92985,92988,92990],{"class":36,"line":10384},[34,92969,55695],{"class":59},[34,92971,847],{"class":51761},[34,92973,61518],{"class":2427},[34,92975,447],{"class":59},[34,92977,64697],{"class":187},[34,92979,92928],{"class":2427},[34,92981,447],{"class":59},[34,92983,92984],{"class":187},"\"outline\"",[34,92986,92987],{"class":59},">评论列表\u003C\u002F",[34,92989,847],{"class":51761},[34,92991,51768],{"class":59},[34,92993,92994,92996,92998],{"class":36,"line":10389},[34,92995,52237],{"class":59},[34,92997,52072],{"class":51761},[34,92999,51768],{"class":59},[34,93001,93002,93004,93006],{"class":36,"line":17068},[34,93003,52878],{"class":59},[34,93005,52072],{"class":51761},[34,93007,51768],{"class":59},[34,93009,93010,93012,93014,93016,93018,93021,93023,93025],{"class":36,"line":17074},[34,93011,52605],{"class":59},[34,93013,52274],{"class":51761},[34,93015,55700],{"class":2427},[34,93017,447],{"class":59},[34,93019,93020],{"class":187},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[34,93022,55775],{"class":59},[34,93024,52274],{"class":51761},[34,93026,51768],{"class":59},[34,93028,93029,93031,93033],{"class":36,"line":17097},[34,93030,52605],{"class":59},[34,93032,52274],{"class":51761},[34,93034,51768],{"class":59},[34,93036,93037],{"class":36,"line":17103},[34,93038,93039],{"class":40},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[34,93041,93042,93044,93046,93048,93050,93052,93054,93057],{"class":36,"line":17126},[34,93043,11685],{"class":112},[34,93045,92516],{"class":63},[34,93047,14028],{"class":112},[34,93049,54857],{"class":59},[34,93051,54860],{"class":2427},[34,93053,617],{"class":59},[34,93055,93056],{"class":187},"'video'",[34,93058,623],{"class":59},[34,93060,93061],{"class":36,"line":17140},[34,93062,93063],{"class":40},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[34,93065,93066,93069,93071,93073,93075,93078,93080],{"class":36,"line":17160},[34,93067,93068],{"class":59},"    video.ontimeupdate ",[34,93070,447],{"class":112},[34,93072,88816],{"class":59},[34,93074,91634],{"class":2427},[34,93076,93077],{"class":59},"(() ",[34,93079,85183],{"class":112},[34,93081,16036],{"class":59},[34,93083,93084],{"class":36,"line":17166},[34,93085,93086],{"class":40},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[34,93088,93089],{"class":36,"line":17177},[34,93090,93091],{"class":40},"      \u002F\u002F 控制台输出当前的时间\n",[34,93093,93094,93097],{"class":36,"line":17200},[34,93095,93096],{"class":40},"      \u002F\u002F console.log(video.currentTime)",[34,93098,93099],{"class":40},"  \u002F\u002F获得当前的视频时间\n",[34,93101,93102],{"class":36,"line":17222},[34,93103,93104],{"class":40},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[34,93106,93107,93109,93111,93113,93116],{"class":36,"line":17227},[34,93108,75144],{"class":59},[34,93110,72115],{"class":2427},[34,93112,617],{"class":59},[34,93114,93115],{"class":187},"'currentTime'",[34,93117,93118],{"class":59},", video.currentTime)\n",[34,93120,93121,93123,93125],{"class":36,"line":17233},[34,93122,54996],{"class":59},[34,93124,6874],{"class":63},[34,93126,623],{"class":59},[34,93128,93129],{"class":36,"line":17247},[34,93130,93131],{"class":40},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[34,93133,93134,93137,93140,93142,93145,93147],{"class":36,"line":17260},[34,93135,93136],{"class":59},"    video.",[34,93138,93139],{"class":2427},"onloadeddata",[34,93141,14028],{"class":112},[34,93143,93144],{"class":59}," () ",[34,93146,85183],{"class":112},[34,93148,16036],{"class":59},[34,93150,93151],{"class":36,"line":17265},[34,93152,60473],{"class":40},[34,93154,93155],{"class":36,"line":17279},[34,93156,93157],{"class":40},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[34,93159,93160,93163,93165,93168,93170,93172,93174,93176,93178],{"class":36,"line":17284},[34,93161,93162],{"class":59},"      video.currentTime ",[34,93164,447],{"class":112},[34,93166,93167],{"class":59}," localStorage.",[34,93169,72146],{"class":2427},[34,93171,617],{"class":59},[34,93173,93115],{"class":187},[34,93175,14178],{"class":59},[34,93177,71818],{"class":112},[34,93179,47794],{"class":63},[34,93181,93182],{"class":36,"line":17290},[34,93183,2651],{"class":59},[34,93185,93186,93188,93190],{"class":36,"line":17295},[34,93187,52878],{"class":59},[34,93189,52274],{"class":51761},[34,93191,51768],{"class":59},[34,93193,93194,93196,93198],{"class":36,"line":17309},[34,93195,52246],{"class":59},[34,93197,52261],{"class":51761},[34,93199,51768],{"class":59},[34,93201,93202],{"class":36,"line":17314},[34,93203,2864],{"emptyLinePlaceholder":540},[34,93205,93206,93208,93210],{"class":36,"line":17319},[34,93207,52246],{"class":59},[34,93209,51096],{"class":51761},[34,93211,51768],{"class":59},[532,93213,93214],{},"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":22,"searchDepth":44,"depth":44,"links":93216},[93217,93222,93226,93227,93228,93233,93238,93239,93240,93241,93248,93253,93254,93264,93268,93269,93273],{"id":77152,"depth":44,"text":77153,"children":93218},[93219,93220,93221],{"id":77156,"depth":50,"text":77157},{"id":77181,"depth":50,"text":77182},{"id":77193,"depth":50,"text":77194},{"id":77205,"depth":44,"text":77206,"children":93223},[93224,93225],{"id":77209,"depth":50,"text":77210},{"id":77224,"depth":50,"text":77225},{"id":77276,"depth":44,"text":77277},{"id":77320,"depth":44,"text":77321},{"id":77337,"depth":44,"text":77338,"children":93229},[93230,93231,93232],{"id":77341,"depth":50,"text":77342},{"id":77354,"depth":50,"text":77355},{"id":77459,"depth":50,"text":77460},{"id":77748,"depth":44,"text":77749,"children":93234},[93235,93236,93237],{"id":77752,"depth":50,"text":77753},{"id":78195,"depth":50,"text":78196},{"id":78606,"depth":50,"text":78607},{"id":78669,"depth":44,"text":78670},{"id":78748,"depth":44,"text":78749},{"id":78841,"depth":44,"text":78842},{"id":80686,"depth":44,"text":80687,"children":93242},[93243,93244,93245,93246,93247],{"id":80690,"depth":50,"text":80691},{"id":80702,"depth":50,"text":80703},{"id":80921,"depth":50,"text":80922},{"id":80939,"depth":50,"text":80940},{"id":80999,"depth":50,"text":81000},{"id":85267,"depth":44,"text":85268,"children":93249},[93250,93251,93252],{"id":85271,"depth":50,"text":85272},{"id":85289,"depth":50,"text":85290},{"id":85315,"depth":50,"text":85316},{"id":85324,"depth":44,"text":85325},{"id":85346,"depth":44,"text":85347,"children":93255},[93256,93257,93258,93259,93260,93261,93262,93263],{"id":85350,"depth":50,"text":85351},{"id":85611,"depth":50,"text":85612},{"id":85797,"depth":50,"text":85798},{"id":86164,"depth":50,"text":86165},{"id":86280,"depth":50,"text":86281},{"id":86316,"depth":50,"text":86317},{"id":86363,"depth":50,"text":86364},{"id":86397,"depth":50,"text":86398},{"id":87760,"depth":44,"text":87761,"children":93265},[93266,93267],{"id":87764,"depth":50,"text":87765},{"id":87801,"depth":50,"text":87802},{"id":89156,"depth":44,"text":89157},{"id":89527,"depth":44,"text":89528,"children":93270},[93271,93272],{"id":89531,"depth":50,"text":89532},{"id":89565,"depth":50,"text":89566},{"id":90294,"depth":44,"text":90295,"children":93274},[93275,93276,93277,93278],{"id":90298,"depth":50,"text":90299},{"id":91256,"depth":50,"text":91257},{"id":92198,"depth":50,"text":92199},{"id":92272,"depth":50,"text":92273},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77141,"description":537},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93285,"title":93286,"body":93287,"description":93298,"extension":538,"meta":93299,"navigation":540,"path":93301,"seo":93302,"stem":93303,"__hash__":93304},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93288,"toc":93296},[93289],[14,93290,93291,93292],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[847,93293,93294],{"href":93294,"rel":93295},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24329],{"title":22,"searchDepth":44,"depth":44,"links":93297},[],"三件套第三套学习",{"category":93300},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93286,"description":93298},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93306,"title":93307,"body":93308,"description":537,"extension":538,"meta":93413,"navigation":540,"path":93414,"seo":93415,"stem":93416,"__hash__":93417},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93309,"toc":93408},[93310,93317,93320,93323,93326,93330,93339,93342,93345,93349,93358,93361,93365,93368,93388,93391,93405],[14,93311,93312],{},[847,93313,93316],{"href":93314,"rel":93315},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24329],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93318,93307],{"id":93319},"_1安装",[14,93321,93322],{},"numpy是科学计算基础库,底层是C语言",[14,93324,93325],{},"三种方式：",[555,93327,93329],{"id":93328},"_11-通过pip安装","1.1 通过pip安装",[25,93331,93333],{"className":27,"code":93332,"language":29,"meta":22,"style":22},"pip install numpy\n",[31,93334,93335],{"__ignoreMap":22},[34,93336,93337],{"class":36,"line":37},[34,93338,93332],{"class":59},[14,93340,93341],{},"首选方式，自动处理依赖项",[14,93343,93344],{},"在提示系统命令符中使用cmd",[555,93346,93348],{"id":93347},"_12-通过anaconda安装","1.2 通过Anaconda安装",[25,93350,93352],{"className":27,"code":93351,"language":29,"meta":22,"style":22},"conda install numpy\n",[31,93353,93354],{"__ignoreMap":22},[34,93355,93356],{"class":36,"line":37},[34,93357,93351],{"class":59},[14,93359,93360],{},"自动解决环境依赖",[555,93362,93364],{"id":93363},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93366,93367],{},"对于Debian\u002FUbuntu",[25,93369,93371],{"className":27,"code":93370,"language":29,"meta":22,"style":22},"sudo apt-get install python3-numpy\n",[31,93372,93373],{"__ignoreMap":22},[34,93374,93375,93378,93380,93383,93385],{"class":36,"line":37},[34,93376,93377],{"class":59},"sudo apt",[34,93379,113],{"class":112},[34,93381,93382],{"class":59},"get install python3",[34,93384,113],{"class":112},[34,93386,93387],{"class":59},"numpy\n",[14,93389,93390],{},"对于Fedora:",[25,93392,93394],{"className":27,"code":93393,"language":29,"meta":22,"style":22},"sudo dnf install python3-numpy\n",[31,93395,93396],{"__ignoreMap":22},[34,93397,93398,93401,93403],{"class":36,"line":37},[34,93399,93400],{"class":59},"sudo dnf install python3",[34,93402,113],{"class":112},[34,93404,93387],{"class":59},[532,93406,93407],{},"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":22,"searchDepth":44,"depth":44,"links":93409},[93410,93411,93412],{"id":93328,"depth":44,"text":93329},{"id":93347,"depth":44,"text":93348},{"id":93363,"depth":44,"text":93364},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93307,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93419,"title":93420,"body":93421,"description":537,"extension":538,"meta":93534,"navigation":540,"path":93535,"seo":93536,"stem":93537,"__hash__":93538},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93422,"toc":93532},[93423,93426,93429,93432,93435,93438,93441,93444,93447,93450,93526,93529],[10,93424,93420],{"id":93425},"_10算数函数",[14,93427,93428],{},"加减乘除运算跟python基础语法没区别",[14,93430,93431],{},"除了python那种方法外还可以使用函数",[14,93433,93434],{},"加：np.add(a,b)",[14,93436,93437],{},"减：np.subtract(a,b)",[14,93439,93440],{},"乘：np.multiply(a,b)",[14,93442,93443],{},"除：np.divide(a,b) == a\u002Fb",[14,93445,93446],{},"取余：np.mod(a,b) == a%b",[14,93448,93449],{},"必须会的用法：",[25,93451,93453],{"className":27,"code":93452,"language":29,"meta":22,"style":22},"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",[31,93454,93455,93477,93498,93508,93521],{"__ignoreMap":22},[34,93456,93457,93459,93461,93464,93466,93469,93471,93473,93475],{"class":36,"line":37},[34,93458,847],{"class":59},[34,93460,447],{"class":112},[34,93462,93463],{"class":59},"np.arange(",[34,93465,1027],{"class":63},[34,93467,93468],{"class":59},").reshape(",[34,93470,309],{"class":63},[34,93472,67],{"class":59},[34,93474,309],{"class":63},[34,93476,623],{"class":59},[34,93478,93479,93481,93483,93486,93488,93490,93492,93494,93496],{"class":36,"line":44},[34,93480,872],{"class":59},[34,93482,447],{"class":112},[34,93484,93485],{"class":59},"np.array([",[34,93487,1053],{"class":63},[34,93489,67],{"class":59},[34,93491,1053],{"class":63},[34,93493,67],{"class":59},[34,93495,1053],{"class":63},[34,93497,5121],{"class":59},[34,93499,93500,93503,93505],{"class":36,"line":50},[34,93501,93502],{"class":59},"result",[34,93504,447],{"class":112},[34,93506,93507],{"class":59},"np.empty_like(a)\n",[34,93509,93510,93513,93516,93518],{"class":36,"line":56},[34,93511,93512],{"class":59},"np.add(a,b,",[34,93514,93515],{"class":5680},"out",[34,93517,447],{"class":112},[34,93519,93520],{"class":59},"result)\n",[34,93522,93523],{"class":36,"line":107},[34,93524,93525],{"class":59},"result\n",[14,93527,93528],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[532,93530,93531],{},"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":22,"searchDepth":44,"depth":44,"links":93533},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93420,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93540,"title":93541,"body":93542,"description":537,"extension":538,"meta":94303,"navigation":540,"path":94304,"seo":94305,"stem":94306,"__hash__":94307},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93543,"toc":94290},[93544,93547,93550,93553,93557,93596,93600,93644,93704,93708,93711,93750,93753,93798,93802,93838,93842,93911,93915,93979,93983,93986,93989,93992,93995,94030,94034,94074,94078,94150,94153,94157,94220,94224,94287],[10,93545,93541],{"id":93546},"_11统计函数",[14,93548,93549],{},"sum max min mean",[14,93551,93552],{},"这些有axis参数，可以指定方向",[555,93554,93556],{"id":93555},"_111-sum求和函数","11.1 sum()求和函数",[25,93558,93560],{"className":27,"code":93559,"language":29,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[31,93561,93562,93567,93588],{"__ignoreMap":22},[34,93563,93564],{"class":36,"line":37},[34,93565,93566],{"class":40},"#创建一维数组\n",[34,93568,93569,93571,93573,93576,93578,93580,93582,93584,93586],{"class":36,"line":44},[34,93570,847],{"class":59},[34,93572,447],{"class":112},[34,93574,93575],{"class":59},"np.random.randint(",[34,93577,64],{"class":63},[34,93579,67],{"class":59},[34,93581,919],{"class":63},[34,93583,67],{"class":59},[34,93585,1306],{"class":63},[34,93587,623],{"class":59},[34,93589,93590,93593],{"class":36,"line":50},[34,93591,93592],{"class":59},"np.sum(a)",[34,93594,93595],{"class":40},"#求和\n",[555,93597,93599],{"id":93598},"_112-max求最大值函数","11.2 max()求最大值函数",[25,93601,93603],{"className":27,"code":93602,"language":29,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[31,93604,93605,93609,93629,93634,93639],{"__ignoreMap":22},[34,93606,93607],{"class":36,"line":37},[34,93608,93566],{"class":40},[34,93610,93611,93613,93615,93617,93619,93621,93623,93625,93627],{"class":36,"line":44},[34,93612,847],{"class":59},[34,93614,447],{"class":112},[34,93616,93575],{"class":59},[34,93618,64],{"class":63},[34,93620,67],{"class":59},[34,93622,919],{"class":63},[34,93624,67],{"class":59},[34,93626,1306],{"class":63},[34,93628,623],{"class":59},[34,93630,93631],{"class":36,"line":50},[34,93632,93633],{"class":59},"np.max(a)\n",[34,93635,93636],{"class":36,"line":56},[34,93637,93638],{"class":40},"#最大索引(求最大元素的索引)arg\n",[34,93640,93641],{"class":36,"line":107},[34,93642,93643],{"class":59},"np.argmax(a)\n",[25,93645,93647],{"className":27,"code":93646,"language":29,"meta":22,"style":22},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[31,93648,93649,93670,93690,93694],{"__ignoreMap":22},[34,93650,93651,93653,93655,93658,93660,93662,93664,93666,93668],{"class":36,"line":37},[34,93652,11383],{"class":59},[34,93654,447],{"class":112},[34,93656,93657],{"class":59}," np.array([",[34,93659,64],{"class":63},[34,93661,12899],{"class":59},[34,93663,927],{"class":63},[34,93665,12899],{"class":59},[34,93667,309],{"class":63},[34,93669,5121],{"class":59},[34,93671,93672,93674,93676,93678,93680,93682,93684,93686,93688],{"class":36,"line":44},[34,93673,11409],{"class":59},[34,93675,447],{"class":112},[34,93677,93657],{"class":59},[34,93679,309],{"class":63},[34,93681,12899],{"class":59},[34,93683,70],{"class":63},[34,93685,12899],{"class":59},[34,93687,217],{"class":63},[34,93689,5121],{"class":59},[34,93691,93692],{"class":36,"line":50},[34,93693,2864],{"emptyLinePlaceholder":540},[34,93695,93696,93698,93701],{"class":36,"line":56},[34,93697,30878],{"class":63},[34,93699,93700],{"class":59},"(np.maximum(a, b))   ",[34,93702,93703],{"class":40},"# [3 5 4]，每个位置上取较大值\n",[555,93705,93707],{"id":93706},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93709,93710],{},"①一维数组：",[25,93712,93714],{"className":27,"code":93713,"language":29,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[31,93715,93716,93720,93740,93745],{"__ignoreMap":22},[34,93717,93718],{"class":36,"line":37},[34,93719,93566],{"class":40},[34,93721,93722,93724,93726,93728,93730,93732,93734,93736,93738],{"class":36,"line":44},[34,93723,847],{"class":59},[34,93725,447],{"class":112},[34,93727,93575],{"class":59},[34,93729,64],{"class":63},[34,93731,67],{"class":59},[34,93733,919],{"class":63},[34,93735,67],{"class":59},[34,93737,1306],{"class":63},[34,93739,623],{"class":59},[34,93741,93742],{"class":36,"line":50},[34,93743,93744],{"class":40},"#求平均值\n",[34,93746,93747],{"class":36,"line":56},[34,93748,93749],{"class":59},"np.mean(a)\n",[14,93751,93752],{},"②二维数组",[25,93754,93756],{"className":27,"code":93755,"language":29,"meta":22,"style":22},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[31,93757,93758,93763,93788,93793],{"__ignoreMap":22},[34,93759,93760],{"class":36,"line":37},[34,93761,93762],{"class":40},"#二维数组\n",[34,93764,93765,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786],{"class":36,"line":44},[34,93766,93767],{"class":59},"aa",[34,93769,447],{"class":112},[34,93771,93463],{"class":59},[34,93773,64],{"class":63},[34,93775,67],{"class":59},[34,93777,1130],{"class":63},[34,93779,93468],{"class":59},[34,93781,309],{"class":63},[34,93783,67],{"class":59},[34,93785,217],{"class":63},[34,93787,623],{"class":59},[34,93789,93790],{"class":36,"line":50},[34,93791,93792],{"class":40},"#对数组中的所有数求平均\n",[34,93794,93795],{"class":36,"line":56},[34,93796,93797],{"class":59},"np.mean(aa)\n",[555,93799,93801],{"id":93800},"_114-median求中位数函数","11.4 median()求中位数函数",[25,93803,93805],{"className":27,"code":93804,"language":29,"meta":22,"style":22},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[31,93806,93807,93812,93828,93833],{"__ignoreMap":22},[34,93808,93809],{"class":36,"line":37},[34,93810,93811],{"class":40},"#求中位数\n",[34,93813,93814,93816,93818,93820,93822,93824,93826],{"class":36,"line":44},[34,93815,872],{"class":59},[34,93817,447],{"class":112},[34,93819,93463],{"class":59},[34,93821,64],{"class":63},[34,93823,67],{"class":59},[34,93825,1053],{"class":63},[34,93827,623],{"class":59},[34,93829,93830],{"class":36,"line":50},[34,93831,93832],{"class":59},"np.median(b)\n",[34,93834,93835],{"class":36,"line":56},[34,93836,93837],{"class":40},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[555,93839,93841],{"id":93840},"_115-power求幂运算函数","11.5 power()求幂运算函数",[25,93843,93845],{"className":27,"code":93844,"language":29,"meta":22,"style":22},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[31,93846,93847,93863,93868,93873,93882,93887,93896],{"__ignoreMap":22},[34,93848,93849,93851,93853,93855,93857,93859,93861],{"class":36,"line":37},[34,93850,872],{"class":59},[34,93852,447],{"class":112},[34,93854,93463],{"class":59},[34,93856,64],{"class":63},[34,93858,67],{"class":59},[34,93860,1053],{"class":63},[34,93862,623],{"class":59},[34,93864,93865],{"class":36,"line":44},[34,93866,93867],{"class":40},"#幂运算\n",[34,93869,93870],{"class":36,"line":50},[34,93871,93872],{"class":40},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[34,93874,93875,93878,93880],{"class":36,"line":56},[34,93876,93877],{"class":59},"np.power(b,",[34,93879,70],{"class":63},[34,93881,623],{"class":59},[34,93883,93884],{"class":36,"line":107},[34,93885,93886],{"class":40},"#或者以下代码，将数据存储起来\n",[34,93888,93889,93891,93893],{"class":36,"line":196},[34,93890,1451],{"class":59},[34,93892,447],{"class":112},[34,93894,93895],{"class":59},"np.empty_like(b)\n",[34,93897,93898,93900,93902,93904,93906,93908],{"class":36,"line":202},[34,93899,93877],{"class":59},[34,93901,70],{"class":63},[34,93903,67],{"class":59},[34,93905,93515],{"class":5680},[34,93907,447],{"class":112},[34,93909,93910],{"class":59},"y)\n",[555,93912,93914],{"id":93913},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[25,93916,93918],{"className":27,"code":93917,"language":29,"meta":22,"style":22},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[31,93919,93920,93936,93941,93946,93950,93968],{"__ignoreMap":22},[34,93921,93922,93924,93926,93928,93930,93932,93934],{"class":36,"line":37},[34,93923,872],{"class":59},[34,93925,447],{"class":112},[34,93927,93463],{"class":59},[34,93929,64],{"class":63},[34,93931,67],{"class":59},[34,93933,1053],{"class":63},[34,93935,623],{"class":59},[34,93937,93938],{"class":36,"line":44},[34,93939,93940],{"class":40},"#开方\n",[34,93942,93943],{"class":36,"line":50},[34,93944,93945],{"class":59},"np.sqrt(b)\n",[34,93947,93948],{"class":36,"line":56},[34,93949,93886],{"class":40},[34,93951,93952,93954,93956,93959,93962,93964,93966],{"class":36,"line":107},[34,93953,1451],{"class":59},[34,93955,447],{"class":112},[34,93957,93958],{"class":59},"np.empty_like(b,",[34,93960,93961],{"class":5680},"dtype",[34,93963,447],{"class":112},[34,93965,656],{"class":63},[34,93967,623],{"class":59},[34,93969,93970,93973,93975,93977],{"class":36,"line":196},[34,93971,93972],{"class":59},"np.sqrt(b,",[34,93974,93515],{"class":5680},[34,93976,447],{"class":112},[34,93978,93910],{"class":59},[555,93980,93982],{"id":93981},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93984,93985],{},"对数组中的元素累计求和，可指定轴",[14,93987,93988],{},"#累计求和的意思是：",[14,93990,93991],{},"a = np.array([1, 2, 3, 4])",[14,93993,93994],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[25,93996,93998],{"className":27,"code":93997,"language":29,"meta":22,"style":22},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[31,93999,94000,94016,94021,94025],{"__ignoreMap":22},[34,94001,94002,94004,94006,94008,94010,94012,94014],{"class":36,"line":37},[34,94003,872],{"class":59},[34,94005,447],{"class":112},[34,94007,93463],{"class":59},[34,94009,64],{"class":63},[34,94011,67],{"class":59},[34,94013,1053],{"class":63},[34,94015,623],{"class":59},[34,94017,94018],{"class":36,"line":44},[34,94019,94020],{"class":59},"np.cumsum(b)\n",[34,94022,94023],{"class":36,"line":50},[34,94024,182],{"class":40},[34,94026,94027],{"class":36,"line":56},[34,94028,94029],{"class":40},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[555,94031,94033],{"id":94032},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[25,94035,94037],{"className":27,"code":94036,"language":29,"meta":22,"style":22},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[31,94038,94039,94055,94060,94065,94069],{"__ignoreMap":22},[34,94040,94041,94043,94045,94047,94049,94051,94053],{"class":36,"line":37},[34,94042,872],{"class":59},[34,94044,447],{"class":112},[34,94046,93463],{"class":59},[34,94048,64],{"class":63},[34,94050,67],{"class":59},[34,94052,1053],{"class":63},[34,94054,623],{"class":59},[34,94056,94057],{"class":36,"line":44},[34,94058,94059],{"class":40},"#对数组中的元素累计求积，可指定轴\n",[34,94061,94062],{"class":36,"line":50},[34,94063,94064],{"class":59},"np.cumprod(b)\n",[34,94066,94067],{"class":36,"line":56},[34,94068,182],{"class":40},[34,94070,94071],{"class":36,"line":107},[34,94072,94073],{"class":40},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[555,94075,94077],{"id":94076},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[25,94079,94081],{"className":27,"code":94080,"language":29,"meta":22,"style":22},"#删除数组中的重复数据，并对数据进行排序\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",[31,94082,94083,94088,94136,94141,94145],{"__ignoreMap":22},[34,94084,94085],{"class":36,"line":37},[34,94086,94087],{"class":40},"#删除数组中的重复数据，并对数据进行排序\n",[34,94089,94090,94092,94094,94096,94098,94100,94102,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126,94128,94130,94132,94134],{"class":36,"line":44},[34,94091,847],{"class":59},[34,94093,447],{"class":112},[34,94095,93485],{"class":59},[34,94097,64],{"class":63},[34,94099,67],{"class":59},[34,94101,70],{"class":63},[34,94103,67],{"class":59},[34,94105,309],{"class":63},[34,94107,67],{"class":59},[34,94109,1105],{"class":63},[34,94111,67],{"class":59},[34,94113,309],{"class":63},[34,94115,67],{"class":59},[34,94117,1053],{"class":63},[34,94119,67],{"class":59},[34,94121,807],{"class":63},[34,94123,67],{"class":59},[34,94125,319],{"class":63},[34,94127,67],{"class":59},[34,94129,1381],{"class":63},[34,94131,67],{"class":59},[34,94133,217],{"class":63},[34,94135,5121],{"class":59},[34,94137,94138],{"class":36,"line":50},[34,94139,94140],{"class":59},"np.unique(a)\n",[34,94142,94143],{"class":36,"line":56},[34,94144,182],{"class":40},[34,94146,94147],{"class":36,"line":107},[34,94148,94149],{"class":40},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94151,94152],{},"升序形式排序",[555,94154,94156],{"id":94155},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[25,94158,94160],{"className":27,"code":94159,"language":29,"meta":22,"style":22},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[31,94161,94162,94210,94215],{"__ignoreMap":22},[34,94163,94164,94166,94168,94170,94172,94174,94176,94178,94180,94182,94184,94186,94188,94190,94192,94194,94196,94198,94200,94202,94204,94206,94208],{"class":36,"line":37},[34,94165,847],{"class":59},[34,94167,447],{"class":112},[34,94169,93485],{"class":59},[34,94171,64],{"class":63},[34,94173,67],{"class":59},[34,94175,70],{"class":63},[34,94177,67],{"class":59},[34,94179,309],{"class":63},[34,94181,67],{"class":59},[34,94183,1105],{"class":63},[34,94185,67],{"class":59},[34,94187,309],{"class":63},[34,94189,67],{"class":59},[34,94191,1053],{"class":63},[34,94193,67],{"class":59},[34,94195,807],{"class":63},[34,94197,67],{"class":59},[34,94199,319],{"class":63},[34,94201,67],{"class":59},[34,94203,1381],{"class":63},[34,94205,67],{"class":59},[34,94207,217],{"class":63},[34,94209,5121],{"class":59},[34,94211,94212],{"class":36,"line":44},[34,94213,94214],{"class":40},"#返回数组中非零元素的索引\n",[34,94216,94217],{"class":36,"line":50},[34,94218,94219],{"class":59},"np.nonzero(a)\n",[555,94221,94223],{"id":94222},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[25,94225,94227],{"className":27,"code":94226,"language":29,"meta":22,"style":22},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[31,94228,94229,94277,94282],{"__ignoreMap":22},[34,94230,94231,94233,94235,94237,94239,94241,94243,94245,94247,94249,94251,94253,94255,94257,94259,94261,94263,94265,94267,94269,94271,94273,94275],{"class":36,"line":37},[34,94232,847],{"class":59},[34,94234,447],{"class":112},[34,94236,93485],{"class":59},[34,94238,64],{"class":63},[34,94240,67],{"class":59},[34,94242,70],{"class":63},[34,94244,67],{"class":59},[34,94246,309],{"class":63},[34,94248,67],{"class":59},[34,94250,1105],{"class":63},[34,94252,67],{"class":59},[34,94254,309],{"class":63},[34,94256,67],{"class":59},[34,94258,1053],{"class":63},[34,94260,67],{"class":59},[34,94262,807],{"class":63},[34,94264,67],{"class":59},[34,94266,319],{"class":63},[34,94268,67],{"class":59},[34,94270,1381],{"class":63},[34,94272,67],{"class":59},[34,94274,217],{"class":63},[34,94276,5121],{"class":59},[34,94278,94279],{"class":36,"line":44},[34,94280,94281],{"class":40},"#计算一组数中最大值与最小值的差，可指定轴\n",[34,94283,94284],{"class":36,"line":50},[34,94285,94286],{"class":59},"np.ptp(a)\n",[532,94288,94289],{},"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":22,"searchDepth":44,"depth":44,"links":94291},[94292,94293,94294,94295,94296,94297,94298,94299,94300,94301,94302],{"id":93555,"depth":44,"text":93556},{"id":93598,"depth":44,"text":93599},{"id":93706,"depth":44,"text":93707},{"id":93800,"depth":44,"text":93801},{"id":93840,"depth":44,"text":93841},{"id":93913,"depth":44,"text":93914},{"id":93981,"depth":44,"text":93982},{"id":94032,"depth":44,"text":94033},{"id":94076,"depth":44,"text":94077},{"id":94155,"depth":44,"text":94156},{"id":94222,"depth":44,"text":94223},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93541,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94309,"title":94310,"body":94311,"description":537,"extension":538,"meta":94965,"navigation":540,"path":94966,"seo":94967,"stem":94968,"__hash__":94969},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94312,"toc":94953},[94313,94316,94320,94323,94538,94542,94545,94754,94758,94824,94829,94833,94836,94839,94877,94881,94884,94889,94893,94896,94899,94904,94908,94911,94915,94918,94921,94926,94930,94933,94936,94941,94945,94950],[10,94314,94310],{"id":94315},"_12其他常用函数",[555,94317,94319],{"id":94318},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94321,94322],{},"将数组的数据按照行列复制扩展",[25,94324,94326],{"className":27,"code":94325,"language":29,"meta":22,"style":22},"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",[31,94327,94328,94344,94353,94357,94362,94367,94380,94384,94388,94393,94398,94402,94407,94431,94443,94447,94451,94456,94461,94466,94471,94475,94488,94492,94496,94501,94506,94511,94516,94521,94525,94529,94534],{"__ignoreMap":22},[34,94329,94330,94332,94334,94336,94338,94340,94342],{"class":36,"line":37},[34,94331,847],{"class":59},[34,94333,447],{"class":112},[34,94335,93463],{"class":59},[34,94337,64],{"class":63},[34,94339,67],{"class":59},[34,94341,927],{"class":63},[34,94343,623],{"class":59},[34,94345,94346,94349,94351],{"class":36,"line":44},[34,94347,94348],{"class":59},"np.tile(a,",[34,94350,70],{"class":63},[34,94352,623],{"class":59},[34,94354,94355],{"class":36,"line":50},[34,94356,182],{"class":40},[34,94358,94359],{"class":36,"line":56},[34,94360,94361],{"class":40},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[34,94363,94364],{"class":36,"line":107},[34,94365,94366],{"class":40},"#行复制两次，列复制三次\n",[34,94368,94369,94372,94374,94376,94378],{"class":36,"line":196},[34,94370,94371],{"class":59},"np.tile(a,(",[34,94373,70],{"class":63},[34,94375,67],{"class":59},[34,94377,309],{"class":63},[34,94379,30960],{"class":59},[34,94381,94382],{"class":36,"line":202},[34,94383,182],{"class":40},[34,94385,94386],{"class":36,"line":207},[34,94387,188],{"class":187},[34,94389,94390],{"class":36,"line":222},[34,94391,94392],{"class":187},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[34,94394,94395],{"class":36,"line":227},[34,94396,94397],{"class":187},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[34,94399,94400],{"class":36,"line":232},[34,94401,188],{"class":187},[34,94403,94404],{"class":36,"line":238},[34,94405,94406],{"class":40},"#创建二维数组\n",[34,94408,94409,94411,94413,94415,94417,94419,94421,94423,94425,94427,94429],{"class":36,"line":244},[34,94410,93767],{"class":59},[34,94412,447],{"class":112},[34,94414,93463],{"class":59},[34,94416,64],{"class":63},[34,94418,67],{"class":59},[34,94420,1130],{"class":63},[34,94422,93468],{"class":59},[34,94424,217],{"class":63},[34,94426,67],{"class":59},[34,94428,309],{"class":63},[34,94430,623],{"class":59},[34,94432,94433,94436,94438,94440],{"class":36,"line":250},[34,94434,94435],{"class":59},"np.tile(aa,",[34,94437,70],{"class":63},[34,94439,1036],{"class":59},[34,94441,94442],{"class":40},"#一个数的时候就是行\n",[34,94444,94445],{"class":36,"line":256},[34,94446,182],{"class":40},[34,94448,94449],{"class":36,"line":261},[34,94450,188],{"class":187},[34,94452,94453],{"class":36,"line":267},[34,94454,94455],{"class":187},"array([[ 1,  2,  3,  1,  2,  3],\n",[34,94457,94458],{"class":36,"line":2138},[34,94459,94460],{"class":187},"       [ 4,  5,  6,  4,  5,  6],\n",[34,94462,94463],{"class":36,"line":2143},[34,94464,94465],{"class":187},"       [ 7,  8,  9,  7,  8,  9],\n",[34,94467,94468],{"class":36,"line":2157},[34,94469,94470],{"class":187},"       [10, 11, 12, 10, 11, 12]])\n",[34,94472,94473],{"class":36,"line":2162},[34,94474,188],{"class":187},[34,94476,94477,94480,94482,94484,94486],{"class":36,"line":2191},[34,94478,94479],{"class":59},"np.tile(aa,(",[34,94481,70],{"class":63},[34,94483,67],{"class":59},[34,94485,309],{"class":63},[34,94487,30960],{"class":59},[34,94489,94490],{"class":36,"line":2196},[34,94491,182],{"class":40},[34,94493,94494],{"class":36,"line":2213},[34,94495,188],{"class":187},[34,94497,94498],{"class":36,"line":2218},[34,94499,94500],{"class":187},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[34,94502,94503],{"class":36,"line":2223},[34,94504,94505],{"class":187},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[34,94507,94508],{"class":36,"line":2228},[34,94509,94510],{"class":187},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[34,94512,94513],{"class":36,"line":2242},[34,94514,94515],{"class":187},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[34,94517,94518],{"class":36,"line":2247},[34,94519,94520],{"class":187},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[34,94522,94523],{"class":36,"line":3041},[34,94524,94505],{"class":187},[34,94526,94527],{"class":36,"line":3055},[34,94528,94510],{"class":187},[34,94530,94531],{"class":36,"line":3063},[34,94532,94533],{"class":187},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[34,94535,94536],{"class":36,"line":3068},[34,94537,188],{"class":187},[555,94539,94541],{"id":94540},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94543,94544],{},"repeat()将数组中的每个元素重复若干次",[25,94546,94548],{"className":27,"code":94547,"language":29,"meta":22,"style":22},"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",[31,94549,94550,94566,94575,94579,94584,94608,94613,94622,94626,94631,94635,94640,94656,94660,94664,94669,94674,94679,94683,94688,94692,94697,94702,94706,94722,94726,94730,94735,94740,94745,94750],{"__ignoreMap":22},[34,94551,94552,94554,94556,94558,94560,94562,94564],{"class":36,"line":37},[34,94553,847],{"class":59},[34,94555,447],{"class":112},[34,94557,93463],{"class":59},[34,94559,64],{"class":63},[34,94561,67],{"class":59},[34,94563,927],{"class":63},[34,94565,623],{"class":59},[34,94567,94568,94571,94573],{"class":36,"line":44},[34,94569,94570],{"class":59},"np.repeat(a,",[34,94572,309],{"class":63},[34,94574,623],{"class":59},[34,94576,94577],{"class":36,"line":50},[34,94578,182],{"class":40},[34,94580,94581],{"class":36,"line":56},[34,94582,94583],{"class":40},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[34,94585,94586,94588,94590,94592,94594,94596,94598,94600,94602,94604,94606],{"class":36,"line":107},[34,94587,93767],{"class":59},[34,94589,447],{"class":112},[34,94591,93463],{"class":59},[34,94593,64],{"class":63},[34,94595,67],{"class":59},[34,94597,1130],{"class":63},[34,94599,93468],{"class":59},[34,94601,217],{"class":63},[34,94603,67],{"class":59},[34,94605,309],{"class":63},[34,94607,623],{"class":59},[34,94609,94610],{"class":36,"line":196},[34,94611,94612],{"class":40},"#这个重复之后二维变成一维\n",[34,94614,94615,94618,94620],{"class":36,"line":202},[34,94616,94617],{"class":59},"np.repeat(aa,",[34,94619,70],{"class":63},[34,94621,623],{"class":59},[34,94623,94624],{"class":36,"line":207},[34,94625,188],{"class":187},[34,94627,94628],{"class":36,"line":222},[34,94629,94630],{"class":187},"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",[34,94632,94633],{"class":36,"line":227},[34,94634,188],{"class":187},[34,94636,94637],{"class":36,"line":232},[34,94638,94639],{"class":40},"#指定axis\n",[34,94641,94642,94644,94646,94648,94650,94652,94654],{"class":36,"line":238},[34,94643,94617],{"class":59},[34,94645,70],{"class":63},[34,94647,67],{"class":59},[34,94649,47975],{"class":5680},[34,94651,447],{"class":112},[34,94653,319],{"class":63},[34,94655,623],{"class":59},[34,94657,94658],{"class":36,"line":244},[34,94659,182],{"class":40},[34,94661,94662],{"class":36,"line":250},[34,94663,188],{"class":187},[34,94665,94666],{"class":36,"line":256},[34,94667,94668],{"class":187},"array([[ 1,  2,  3],\n",[34,94670,94671],{"class":36,"line":261},[34,94672,94673],{"class":187},"       [ 1,  2,  3],\n",[34,94675,94676],{"class":36,"line":267},[34,94677,94678],{"class":187},"       [ 4,  5,  6],\n",[34,94680,94681],{"class":36,"line":2138},[34,94682,94678],{"class":187},[34,94684,94685],{"class":36,"line":2143},[34,94686,94687],{"class":187},"       [ 7,  8,  9],\n",[34,94689,94690],{"class":36,"line":2157},[34,94691,94687],{"class":187},[34,94693,94694],{"class":36,"line":2162},[34,94695,94696],{"class":187},"       [10, 11, 12],\n",[34,94698,94699],{"class":36,"line":2191},[34,94700,94701],{"class":187},"       [10, 11, 12]])\n",[34,94703,94704],{"class":36,"line":2196},[34,94705,188],{"class":187},[34,94707,94708,94710,94712,94714,94716,94718,94720],{"class":36,"line":2213},[34,94709,94617],{"class":59},[34,94711,70],{"class":63},[34,94713,67],{"class":59},[34,94715,47975],{"class":5680},[34,94717,447],{"class":112},[34,94719,64],{"class":63},[34,94721,623],{"class":59},[34,94723,94724],{"class":36,"line":2218},[34,94725,182],{"class":40},[34,94727,94728],{"class":36,"line":2223},[34,94729,188],{"class":187},[34,94731,94732],{"class":36,"line":2228},[34,94733,94734],{"class":187},"array([[ 1,  1,  2,  2,  3,  3],\n",[34,94736,94737],{"class":36,"line":2242},[34,94738,94739],{"class":187},"       [ 4,  4,  5,  5,  6,  6],\n",[34,94741,94742],{"class":36,"line":2247},[34,94743,94744],{"class":187},"       [ 7,  7,  8,  8,  9,  9],\n",[34,94746,94747],{"class":36,"line":3041},[34,94748,94749],{"class":187},"       [10, 10, 11, 11, 12, 12]])\n",[34,94751,94752],{"class":36,"line":3055},[34,94753,188],{"class":187},[555,94755,94757],{"id":94756},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[25,94759,94761],{"className":27,"code":94760,"language":29,"meta":22,"style":22},"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",[31,94762,94763,94779,94784,94796,94800,94805,94815,94819],{"__ignoreMap":22},[34,94764,94765,94767,94769,94771,94773,94775,94777],{"class":36,"line":37},[34,94766,847],{"class":59},[34,94768,447],{"class":112},[34,94770,93463],{"class":59},[34,94772,64],{"class":63},[34,94774,67],{"class":59},[34,94776,927],{"class":63},[34,94778,623],{"class":59},[34,94780,94781],{"class":36,"line":44},[34,94782,94783],{"class":40},"#array([，2，3，4])\n",[34,94785,94786,94789,94791,94793],{"class":36,"line":50},[34,94787,94788],{"class":59},"np.roll(a,",[34,94790,70],{"class":63},[34,94792,1036],{"class":59},[34,94794,94795],{"class":40},"#传正数向后调多少位，传负数向前调多少位\n",[34,94797,94798],{"class":36,"line":56},[34,94799,182],{"class":40},[34,94801,94802],{"class":36,"line":107},[34,94803,94804],{"class":40},"#array([3, 4, 1, 2])\n",[34,94806,94807,94809,94811,94813],{"class":36,"line":196},[34,94808,94788],{"class":59},[34,94810,113],{"class":112},[34,94812,64],{"class":63},[34,94814,623],{"class":59},[34,94816,94817],{"class":36,"line":202},[34,94818,182],{"class":40},[34,94820,94821],{"class":36,"line":207},[34,94822,94823],{"class":40},"#array([2, 3, 4, 1])\n",[14,94825,94826],{},[20,94827],{"alt":22,"src":94828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[555,94830,94832],{"id":94831},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94834,94835],{},"resize()重新调整数组的大小",[14,94837,94838],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[25,94840,94842],{"className":27,"code":94841,"language":29,"meta":22,"style":22},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[31,94843,94844,94849,94862],{"__ignoreMap":22},[34,94845,94846],{"class":36,"line":37},[34,94847,94848],{"class":40},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[34,94850,94851,94854,94856,94858,94860],{"class":36,"line":44},[34,94852,94853],{"class":59},"np.resize(aa,(",[34,94855,70],{"class":63},[34,94857,67],{"class":59},[34,94859,952],{"class":63},[34,94861,30960],{"class":59},[34,94863,94864,94866,94868,94870,94872,94874],{"class":36,"line":50},[34,94865,94853],{"class":59},[34,94867,70],{"class":63},[34,94869,67],{"class":59},[34,94871,1027],{"class":63},[34,94873,83232],{"class":59},[34,94875,94876],{"class":40},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[555,94878,94880],{"id":94879},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94882,94883],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94885,94886],{},[20,94887],{"alt":22,"src":94888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[555,94890,94892],{"id":94891},"_126-保存加载文件","12.6 保存加载文件",[14,94894,94895],{},"savetxt():将数据保存到txt文件中",[14,94897,94898],{},"loadtxt():从文件加载数据",[14,94900,94901],{},[20,94902],{"alt":22,"src":94903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[555,94905,94907],{"id":94906},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94909,94910],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[555,94912,94914],{"id":94913},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94916,94917],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94919,94920],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94922,94923],{},[20,94924],{"alt":22,"src":94925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[555,94927,94929],{"id":94928},"_129-where语句","12.9 where语句",[14,94931,94932],{},"np.where(条件,x,y)",[14,94934,94935],{},"如果条件为True,对应值为x,否则对应值为y",[14,94937,94938],{},[20,94939],{"alt":22,"src":94940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[555,94942,94944],{"id":94943},"_1210-dot矩阵","12.10 dot()矩阵",[14,94946,94947],{},[20,94948],{"alt":22,"src":94949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[532,94951,94952],{},"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":22,"searchDepth":44,"depth":44,"links":94954},[94955,94956,94957,94958,94959,94960,94961,94962,94963,94964],{"id":94318,"depth":44,"text":94319},{"id":94540,"depth":44,"text":94541},{"id":94756,"depth":44,"text":94757},{"id":94831,"depth":44,"text":94832},{"id":94879,"depth":44,"text":94880},{"id":94891,"depth":44,"text":94892},{"id":94906,"depth":44,"text":94907},{"id":94913,"depth":44,"text":94914},{"id":94928,"depth":44,"text":94929},{"id":94943,"depth":44,"text":94944},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94310,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94971,"title":94972,"body":94973,"description":537,"extension":538,"meta":95326,"navigation":540,"path":95327,"seo":95328,"stem":95329,"__hash__":95330},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94974,"toc":95324},[94975,94978,94981,94984,94987,94990,95055,95057,95321],[10,94976,94972],{"id":94977},"_13数组排序",[14,94979,94980],{},"排序主要用到的方法是np.sort和np.argsort",[14,94982,94983],{},"其中np.sort()对数组直接排序",[14,94985,94986],{},"而np.argsort()是返回排序后的原始索引",[14,94988,94989],{},"①一维数组",[25,94991,94993],{"className":27,"code":94992,"language":29,"meta":22,"style":22},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[31,94994,94995,94999,95039,95047],{"__ignoreMap":22},[34,94996,94997],{"class":36,"line":37},[34,94998,93566],{"class":40},[34,95000,95001,95003,95005,95007,95009,95011,95013,95015,95017,95019,95021,95023,95025,95027,95029,95031,95033,95035,95037],{"class":36,"line":44},[34,95002,847],{"class":59},[34,95004,447],{"class":112},[34,95006,93485],{"class":59},[34,95008,309],{"class":63},[34,95010,67],{"class":59},[34,95012,1105],{"class":63},[34,95014,67],{"class":59},[34,95016,1002],{"class":63},[34,95018,67],{"class":59},[34,95020,1381],{"class":63},[34,95022,67],{"class":59},[34,95024,888],{"class":63},[34,95026,67],{"class":59},[34,95028,1498],{"class":63},[34,95030,67],{"class":59},[34,95032,952],{"class":63},[34,95034,67],{"class":59},[34,95036,1053],{"class":63},[34,95038,5121],{"class":59},[34,95040,95041,95044],{"class":36,"line":50},[34,95042,95043],{"class":59},"np.sort(a)",[34,95045,95046],{"class":40},"#升序排序\n",[34,95048,95049,95052],{"class":36,"line":56},[34,95050,95051],{"class":59},"np.argsort(a)",[34,95053,95054],{"class":40},"#按照元素大小来索引排序\n",[14,95056,93752],{},[25,95058,95060],{"className":27,"code":95059,"language":29,"meta":22,"style":22},"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",[31,95061,95062,95074,95100,95105,95109,95114,95119,95124,95129,95133,95141,95145,95150,95155,95160,95165,95169,95174,95187,95191,95196,95201,95206,95211,95215,95220,95232,95236,95240,95244,95248,95252,95256,95261,95276,95281,95290,95295,95299,95303,95308,95312,95317],{"__ignoreMap":22},[34,95063,95064,95067,95069,95071],{"class":36,"line":37},[34,95065,95066],{"class":59},"np.random.seed(",[34,95068,319],{"class":63},[34,95070,1036],{"class":59},[34,95072,95073],{"class":40},"#保证每次值一样\n",[34,95075,95076,95078,95080,95082,95084,95086,95088,95090,95092,95094,95096,95098],{"class":36,"line":44},[34,95077,93767],{"class":59},[34,95079,447],{"class":112},[34,95081,93575],{"class":59},[34,95083,919],{"class":63},[34,95085,67],{"class":59},[34,95087,31959],{"class":5680},[34,95089,447],{"class":112},[34,95091,617],{"class":59},[34,95093,217],{"class":63},[34,95095,67],{"class":59},[34,95097,952],{"class":63},[34,95099,30960],{"class":59},[34,95101,95102],{"class":36,"line":50},[34,95103,95104],{"class":40},"#原数组：\n",[34,95106,95107],{"class":36,"line":56},[34,95108,188],{"class":187},[34,95110,95111],{"class":36,"line":107},[34,95112,95113],{"class":187},"array([[44, 47, 64, 67, 67,  9],\n",[34,95115,95116],{"class":36,"line":196},[34,95117,95118],{"class":187},"       [83, 21, 36, 87, 70, 88],\n",[34,95120,95121],{"class":36,"line":202},[34,95122,95123],{"class":187},"       [88, 12, 58, 65, 39, 87],\n",[34,95125,95126],{"class":36,"line":207},[34,95127,95128],{"class":187},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[34,95130,95131],{"class":36,"line":222},[34,95132,188],{"class":187},[34,95134,95135,95138],{"class":36,"line":227},[34,95136,95137],{"class":59},"np.sort(aa)",[34,95139,95140],{"class":40},"#每行进行了排序\n",[34,95142,95143],{"class":36,"line":232},[34,95144,188],{"class":187},[34,95146,95147],{"class":36,"line":238},[34,95148,95149],{"class":187},"array([[ 9, 44, 47, 64, 67, 67],\n",[34,95151,95152],{"class":36,"line":244},[34,95153,95154],{"class":187},"       [21, 36, 70, 83, 87, 88],\n",[34,95156,95157],{"class":36,"line":250},[34,95158,95159],{"class":187},"       [12, 39, 58, 65, 87, 88],\n",[34,95161,95162],{"class":36,"line":256},[34,95163,95164],{"class":187},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[34,95166,95167],{"class":36,"line":261},[34,95168,188],{"class":187},[34,95170,95171],{"class":36,"line":267},[34,95172,95173],{"class":40},"#axis=0时\n",[34,95175,95176,95179,95181,95183,95185],{"class":36,"line":2138},[34,95177,95178],{"class":59},"np.sort(aa,",[34,95180,47975],{"class":5680},[34,95182,447],{"class":112},[34,95184,319],{"class":63},[34,95186,623],{"class":59},[34,95188,95189],{"class":36,"line":2143},[34,95190,188],{"class":187},[34,95192,95193],{"class":36,"line":2157},[34,95194,95195],{"class":187},"array([[44, 12, 36, 37, 25,  9],\n",[34,95197,95198],{"class":36,"line":2162},[34,95199,95200],{"class":187},"       [46, 21, 58, 65, 39, 77],\n",[34,95202,95203],{"class":36,"line":2191},[34,95204,95205],{"class":187},"       [83, 47, 64, 67, 67, 87],\n",[34,95207,95208],{"class":36,"line":2196},[34,95209,95210],{"class":187},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[34,95212,95213],{"class":36,"line":2213},[34,95214,188],{"class":187},[34,95216,95217],{"class":36,"line":2218},[34,95218,95219],{"class":40},"#axis=1时,为默认值\n",[34,95221,95222,95224,95226,95228,95230],{"class":36,"line":2223},[34,95223,95178],{"class":59},[34,95225,47975],{"class":5680},[34,95227,447],{"class":112},[34,95229,64],{"class":63},[34,95231,623],{"class":59},[34,95233,95234],{"class":36,"line":2228},[34,95235,188],{"class":187},[34,95237,95238],{"class":36,"line":2242},[34,95239,95149],{"class":187},[34,95241,95242],{"class":36,"line":2247},[34,95243,95154],{"class":187},[34,95245,95246],{"class":36,"line":3041},[34,95247,95159],{"class":187},[34,95249,95250],{"class":36,"line":3055},[34,95251,95164],{"class":187},[34,95253,95254],{"class":36,"line":3063},[34,95255,188],{"class":187},[34,95257,95258],{"class":36,"line":3068},[34,95259,95260],{"class":40},"#按最后一列排序\n",[34,95262,95263,95265,95267,95270,95272,95274],{"class":36,"line":3074},[34,95264,872],{"class":59},[34,95266,447],{"class":112},[34,95268,95269],{"class":59},"aa[:,",[34,95271,113],{"class":112},[34,95273,64],{"class":63},[34,95275,73],{"class":59},[34,95277,95278],{"class":36,"line":3080},[34,95279,95280],{"class":40},"#获取最后一列排好序的索引\n",[34,95282,95283,95285,95287],{"class":36,"line":3085},[34,95284,74519],{"class":59},[34,95286,447],{"class":112},[34,95288,95289],{"class":59},"np.argsort(b)\n",[34,95291,95292],{"class":36,"line":8412},[34,95293,95294],{"class":59},"aa[index]\n",[34,95296,95297],{"class":36,"line":8436},[34,95298,188],{"class":187},[34,95300,95301],{"class":36,"line":8441},[34,95302,95113],{"class":187},[34,95304,95305],{"class":36,"line":8447},[34,95306,95307],{"class":187},"       [46, 88, 81, 37, 25, 77],\n",[34,95309,95310],{"class":36,"line":8474},[34,95311,95123],{"class":187},[34,95313,95314],{"class":36,"line":8479},[34,95315,95316],{"class":187},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[34,95318,95319],{"class":36,"line":8485},[34,95320,188],{"class":187},[532,95322,95323],{},"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":22,"searchDepth":44,"depth":44,"links":95325},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94972,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95332,"title":95333,"body":95334,"description":537,"extension":538,"meta":95364,"navigation":540,"path":95365,"seo":95366,"stem":95367,"__hash__":95368},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95335,"toc":95362},[95336,95339,95342,95345,95348,95351,95354,95357],[10,95337,95333],{"id":95338},"_14广播机制",[14,95340,95341],{},"广播的规则：",[14,95343,95344],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95346,95347],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95349,95350],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95352,95353],{},"3.如果没有维度形状为1，则会引发异常",[14,95355,95356],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95358,95359],{},[20,95360],{"alt":22,"src":95361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":22,"searchDepth":44,"depth":44,"links":95363},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95333,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95370,"title":95371,"body":95372,"description":537,"extension":538,"meta":95470,"navigation":540,"path":95471,"seo":95472,"stem":95473,"__hash__":95474},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95373,"toc":95468},[95374,95377,95380,95465],[10,95375,95371],{"id":95376},"_15比较掩码",[14,95378,95379],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[25,95381,95383],{"className":27,"code":95382,"language":29,"meta":22,"style":22},"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",[31,95384,95385,95431,95442,95456,95460],{"__ignoreMap":22},[34,95386,95387,95389,95391,95394,95396,95398,95400,95402,95404,95406,95408,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428],{"class":36,"line":37},[34,95388,847],{"class":59},[34,95390,447],{"class":112},[34,95392,95393],{"class":59},"np.array([[",[34,95395,64],{"class":63},[34,95397,67],{"class":59},[34,95399,70],{"class":63},[34,95401,67],{"class":59},[34,95403,309],{"class":63},[34,95405,48491],{"class":59},[34,95407,1079],{"class":63},[34,95409,67],{"class":59},[34,95411,1105],{"class":63},[34,95413,67],{"class":59},[34,95415,1130],{"class":63},[34,95417,48491],{"class":59},[34,95419,1331],{"class":63},[34,95421,67],{"class":59},[34,95423,1356],{"class":63},[34,95425,67],{"class":59},[34,95427,1381],{"class":63},[34,95429,95430],{"class":59},"]])\n",[34,95432,95433,95435,95437,95439],{"class":36,"line":44},[34,95434,847],{"class":59},[34,95436,1515],{"class":112},[34,95438,1306],{"class":63},[34,95440,95441],{"class":40},"#结果是一个由True,False组成的数组\n",[34,95443,95444,95447,95449,95451,95453],{"class":36,"line":50},[34,95445,95446],{"class":59},"a[a",[34,95448,1515],{"class":112},[34,95450,1306],{"class":63},[34,95452,477],{"class":59},[34,95454,95455],{"class":40},"#小于20的元素会存到这个数组中\n",[34,95457,95458],{"class":36,"line":56},[34,95459,182],{"class":40},[34,95461,95462],{"class":36,"line":107},[34,95463,95464],{"class":40},"#array([ 1,  2,  3, 11, 12, 13])\n",[532,95466,95467],{},"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":22,"searchDepth":44,"depth":44,"links":95469},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95371,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95476,"title":95477,"body":95478,"description":537,"extension":538,"meta":95570,"navigation":540,"path":95571,"seo":95572,"stem":95573,"__hash__":95574},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95479,"toc":95568},[95480,95483,95486,95489,95492,95495,95560,95565],[10,95481,95477],{"id":95482},"_16魔法命令time",[14,95484,95485],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95487,95488],{},"%:行模式",[14,95490,95491],{},"%%:单元格模式",[14,95493,95494],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[25,95496,95498],{"className":27,"code":95497,"language":29,"meta":22,"style":22},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[31,95499,95500,95505,95512,95517,95526,95539,95543,95551],{"__ignoreMap":22},[34,95501,95502],{"class":36,"line":37},[34,95503,95504],{"class":40},"#程序执行时间\n",[34,95506,95507,95509],{"class":36,"line":44},[34,95508,30855],{"class":112},[34,95510,95511],{"class":59}," time \n",[34,95513,95514],{"class":36,"line":50},[34,95515,95516],{"class":40},"#获取时间\n",[34,95518,95519,95522,95524],{"class":36,"line":56},[34,95520,95521],{"class":59},"start",[34,95523,447],{"class":112},[34,95525,32881],{"class":59},[34,95527,95528,95531,95534,95536],{"class":36,"line":107},[34,95529,95530],{"class":59},"time.sleep(",[34,95532,95533],{"class":63},"0.4",[34,95535,1036],{"class":59},[34,95537,95538],{"class":40},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[34,95540,95541],{"class":36,"line":196},[34,95542,95516],{"class":40},[34,95544,95545,95547,95549],{"class":36,"line":202},[34,95546,46262],{"class":59},[34,95548,447],{"class":112},[34,95550,32881],{"class":59},[34,95552,95553,95555,95557],{"class":36,"line":207},[34,95554,46262],{"class":59},[34,95556,113],{"class":112},[34,95558,95559],{"class":59},"start\n",[14,95561,95562],{},[20,95563],{"alt":22,"src":95564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[532,95566,95567],{},"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":22,"searchDepth":44,"depth":44,"links":95569},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95477,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95576,"title":95577,"body":95578,"description":537,"extension":538,"meta":95613,"navigation":540,"path":95614,"seo":95615,"stem":95616,"__hash__":95617},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95579,"toc":95611},[95580,95583,95586,95589,95592,95595,95598,95601,95606],[10,95581,95577],{"id":95582},"_17魔法命令timeit",[14,95584,95585],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95587,95588],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95590,95591],{},"单元格模式：",[14,95593,95594],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95596,95597],{},"初始化语句执行次数由轮数来决定",[14,95599,95600],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95602,95603],{},[20,95604],{"alt":22,"src":95605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95607,95608],{},[20,95609],{"alt":22,"src":95610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":22,"searchDepth":44,"depth":44,"links":95612},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95577,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95619,"title":95620,"body":95621,"description":537,"extension":538,"meta":95639,"navigation":540,"path":95640,"seo":95641,"stem":95642,"__hash__":95643},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95622,"toc":95637},[95623,95626,95629,95632],[10,95624,95620],{"id":95625},"_18魔法命令writefile和run",[14,95627,95628],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95630,95631],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95633,95634],{},[20,95635],{"alt":22,"src":95636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":22,"searchDepth":44,"depth":44,"links":95638},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95620,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95645,"title":95646,"body":95647,"description":537,"extension":538,"meta":95700,"navigation":540,"path":95701,"seo":95702,"stem":95703,"__hash__":95704},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95648,"toc":95698},[95649,95652,95655,95657,95660,95663,95668,95671,95674,95677,95680,95683,95686,95689,95692,95695],[10,95650,95646],{"id":95651},"_19魔法命令memit",[14,95653,95654],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95656,25064],{},[14,95658,95659],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95661,95662],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95664,95665],{},[20,95666],{"alt":22,"src":95667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95669,95670],{},"补充：",[14,95672,95673],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95675,95676],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95678,95679],{},"解决方法：",[14,95681,95682],{},"1.cmd",[14,95684,95685],{},"2.依次输入以下代码：",[14,95687,95688],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95690,95691],{},"pip install --upgrade ipython",[14,95693,95694],{},"#升级 memory_profiler 和 setuptools",[14,95696,95697],{},"pip install --upgrade memory_profiler setuptools",{"title":22,"searchDepth":44,"depth":44,"links":95699},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95646,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95706,"title":95707,"body":95708,"description":537,"extension":538,"meta":97354,"navigation":540,"path":97355,"seo":97356,"stem":97357,"__hash__":97358},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95709,"toc":97324},[95710,95713,95717,95721,95782,95785,95790,95794,95799,95804,95809,95814,95817,95822,95826,95830,95863,95866,95869,95872,95924,95927,95963,95966,96008,96012,96033,96035,96072,96074,96079,96081,96086,96090,96093,96121,96125,96129,96182,96186,96278,96282,96286,96289,96294,96298,96323,96328,96332,96335,96338,96341,96344,96347,96350,96353,96365,96369,96373,96376,96408,96411,96434,96437,96463,96466,96492,96495,96529,96532,96594,96598,96601,96605,96608,96634,96637,96640,96645,96648,96717,96719,96724,96785,96788,96799,96805,96810,96814,96817,96830,96834,96849,96851,96874,96876,96902,96905,96908,96911,96959,96961,96966,96970,96974,97001,97005,97032,97035,97040,97045,97135,97139,97197,97202,97205,97208,97250,97254,97310,97315,97318,97321],[10,95711,95707],{"id":95712},"_2创建数组",[555,95714,95716],{"id":95715},"_21-array函数创建数组","2.1 array()函数创建数组",[584,95718,95720],{"id":95719},"_221-函数语句","2.2.1 函数语句",[25,95722,95724],{"className":27,"code":95723,"language":29,"meta":22,"style":22},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[31,95725,95726],{"__ignoreMap":22},[34,95727,95728,95731,95734,95736,95738,95740,95742,95744,95747,95749,95752,95754,95757,95759,95761,95763,95766,95768,95771,95773,95776,95778,95780],{"class":36,"line":37},[34,95729,95730],{"class":59},"numpy.array(",[34,95732,95733],{"class":63},"object",[34,95735,12899],{"class":59},[34,95737,93961],{"class":5680},[34,95739,14028],{"class":112},[34,95741,39395],{"class":63},[34,95743,12899],{"class":59},[34,95745,95746],{"class":5680},"copy",[34,95748,14028],{"class":112},[34,95750,95751],{"class":63}," True",[34,95753,12899],{"class":59},[34,95755,95756],{"class":5680},"order",[34,95758,14028],{"class":112},[34,95760,39395],{"class":63},[34,95762,12899],{"class":59},[34,95764,95765],{"class":5680},"subok",[34,95767,14028],{"class":112},[34,95769,95770],{"class":63}," False",[34,95772,12899],{"class":59},[34,95774,95775],{"class":5680},"ndmin",[34,95777,14028],{"class":112},[34,95779,4557],{"class":63},[34,95781,623],{"class":59},[14,95783,95784],{},"参数：",[14,95786,95787],{},[20,95788],{"alt":22,"src":95789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[584,95791,95793],{"id":95792},"_222-实例","2.2.2 实例",[14,95795,95796],{},[20,95797],{"alt":22,"src":95798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95800,95801],{},[20,95802],{"alt":22,"src":95803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95805,95806],{},[20,95807],{"alt":22,"src":95808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95810,95811],{},[20,95812],{"alt":22,"src":95813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95815,95816],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95818,95819],{},[20,95820],{"alt":22,"src":95821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[555,95823,95825],{"id":95824},"_22-随机数创建数组","2.2 随机数创建数组",[584,95827,95829],{"id":95828},"_221-random语句","2.2.1 random语句",[25,95831,95833],{"className":27,"code":95832,"language":29,"meta":22,"style":22},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[31,95834,95835,95840,95845,95853,95858],{"__ignoreMap":22},[34,95836,95837],{"class":36,"line":37},[34,95838,95839],{"class":40},"#random.random()\n",[34,95841,95842],{"class":36,"line":44},[34,95843,95844],{"class":40},"#确定随机种子,就是每次运行结果是相同的\n",[34,95846,95847,95849,95851],{"class":36,"line":50},[34,95848,95066],{"class":59},[34,95850,319],{"class":63},[34,95852,623],{"class":59},[34,95854,95855],{"class":36,"line":56},[34,95856,95857],{"class":59},"np.random.random()\n",[34,95859,95860],{"class":36,"line":107},[34,95861,95862],{"class":40},"#生成一个随机的数目\n",[14,95864,95865],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95867,95868],{},"可以指定数组形状 size",[14,95870,95871],{},"①生成一维数组",[25,95873,95875],{"className":27,"code":95874,"language":29,"meta":22,"style":22},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[31,95876,95877,95882,95895,95900,95916],{"__ignoreMap":22},[34,95878,95879],{"class":36,"line":37},[34,95880,95881],{"class":40},"#random.random(size())\n",[34,95883,95884,95887,95889,95891,95893],{"class":36,"line":44},[34,95885,95886],{"class":59},"np.random.random(",[34,95888,31959],{"class":5680},[34,95890,447],{"class":112},[34,95892,927],{"class":63},[34,95894,623],{"class":59},[34,95896,95897],{"class":36,"line":50},[34,95898,95899],{"class":40},"#生成一位的五个元素\n",[34,95901,95902,95904,95906,95908,95910,95912,95914],{"class":36,"line":56},[34,95903,847],{"class":59},[34,95905,447],{"class":112},[34,95907,95886],{"class":59},[34,95909,31959],{"class":5680},[34,95911,447],{"class":112},[34,95913,217],{"class":63},[34,95915,623],{"class":59},[34,95917,95918,95921],{"class":36,"line":107},[34,95919,95920],{"class":59},"a.shape ",[34,95922,95923],{"class":40},"#输出数组形状\n",[14,95925,95926],{},"②生成二维数组",[25,95928,95930],{"className":27,"code":95929,"language":29,"meta":22,"style":22},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[31,95931,95932,95936,95958],{"__ignoreMap":22},[34,95933,95934],{"class":36,"line":37},[34,95935,93762],{"class":40},[34,95937,95938,95940,95942,95944,95946,95948,95950,95952,95954,95956],{"class":36,"line":44},[34,95939,93767],{"class":59},[34,95941,447],{"class":112},[34,95943,95886],{"class":59},[34,95945,31959],{"class":5680},[34,95947,447],{"class":112},[34,95949,617],{"class":59},[34,95951,217],{"class":63},[34,95953,67],{"class":59},[34,95955,927],{"class":63},[34,95957,30960],{"class":59},[34,95959,95960],{"class":36,"line":50},[34,95961,95962],{"class":40},"#生成四行五列的数组\n",[14,95964,95965],{},"③生成三维数组",[25,95967,95969],{"className":27,"code":95968,"language":29,"meta":22,"style":22},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[31,95970,95971,95976,96003],{"__ignoreMap":22},[34,95972,95973],{"class":36,"line":37},[34,95974,95975],{"class":40},"#三维数组\n",[34,95977,95978,95981,95983,95985,95987,95989,95991,95993,95995,95997,95999,96001],{"class":36,"line":44},[34,95979,95980],{"class":59},"aaa",[34,95982,447],{"class":112},[34,95984,95886],{"class":59},[34,95986,31959],{"class":5680},[34,95988,447],{"class":112},[34,95990,617],{"class":59},[34,95992,70],{"class":63},[34,95994,67],{"class":59},[34,95996,309],{"class":63},[34,95998,67],{"class":59},[34,96000,217],{"class":63},[34,96002,30960],{"class":59},[34,96004,96005],{"class":36,"line":50},[34,96006,96007],{"class":59},"aaa.shape\n",[584,96009,96011],{"id":96010},"_222-randint语句","2.2.2 randint语句",[25,96013,96015],{"className":27,"code":96014,"language":29,"meta":22,"style":22},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[31,96016,96017,96022],{"__ignoreMap":22},[34,96018,96019],{"class":36,"line":37},[34,96020,96021],{"class":40},"#生成随机的整数 random.randint(low,high,size)\n",[34,96023,96024,96026,96028,96030],{"class":36,"line":44},[34,96025,93575],{"class":59},[34,96027,927],{"class":63},[34,96029,14178],{"class":59},[34,96031,96032],{"class":40},"#0~5中的随机一个数\n",[14,96034,95871],{},[25,96036,96038],{"className":27,"code":96037,"language":29,"meta":22,"style":22},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[31,96039,96040,96045,96067],{"__ignoreMap":22},[34,96041,96042],{"class":36,"line":37},[34,96043,96044],{"class":40},"#一维\n",[34,96046,96047,96049,96051,96053,96055,96057,96059,96061,96063,96065],{"class":36,"line":44},[34,96048,93575],{"class":59},[34,96050,64],{"class":63},[34,96052,67],{"class":59},[34,96054,1079],{"class":63},[34,96056,67],{"class":59},[34,96058,31959],{"class":5680},[34,96060,447],{"class":112},[34,96062,617],{"class":59},[34,96064,1053],{"class":63},[34,96066,30960],{"class":59},[34,96068,96069],{"class":36,"line":50},[34,96070,96071],{"class":40},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96073,95926],{},[14,96075,96076],{},[20,96077],{"alt":22,"src":96078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96080,95965],{},[14,96082,96083],{},[20,96084],{"alt":22,"src":96085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[584,96087,96089],{"id":96088},"_222-rand语句","2.2.2 rand语句",[14,96091,96092],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[25,96094,96096],{"className":27,"code":96095,"language":29,"meta":22,"style":22},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[31,96097,96098,96111,96116],{"__ignoreMap":22},[34,96099,96100,96103,96105,96107,96109],{"class":36,"line":37},[34,96101,96102],{"class":59},"np.random.rand(",[34,96104,919],{"class":63},[34,96106,67],{"class":59},[34,96108,1053],{"class":63},[34,96110,623],{"class":59},[34,96112,96113],{"class":36,"line":44},[34,96114,96115],{"class":40},"#第一个参数100：行数，表示有100个样本\n",[34,96117,96118],{"class":36,"line":50},[34,96119,96120],{"class":40},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[555,96122,96124],{"id":96123},"_23-arange创建数组","2.3 arange()创建数组",[584,96126,96128],{"id":96127},"_231-函数语句","2.3.1 函数语句",[25,96130,96132],{"className":27,"code":96131,"language":29,"meta":22,"style":22},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[31,96133,96134,96148,96153,96158,96163,96168,96173,96178],{"__ignoreMap":22},[34,96135,96136,96139,96141,96143,96146],{"class":36,"line":37},[34,96137,96138],{"class":59},"numpy.arange([start,] stop[, step], ",[34,96140,93961],{"class":5680},[34,96142,447],{"class":112},[34,96144,96145],{"class":63},"None",[34,96147,623],{"class":59},[34,96149,96150],{"class":36,"line":44},[34,96151,96152],{"class":40},"#参数\n",[34,96154,96155],{"class":36,"line":50},[34,96156,96157],{"class":187},"\"\"\"\n",[34,96159,96160],{"class":36,"line":56},[34,96161,96162],{"class":187},"start:起始值，可选，默认从 0 开始。\n",[34,96164,96165],{"class":36,"line":107},[34,96166,96167],{"class":187},"stop:结束值（不包含该值）。\n",[34,96169,96170],{"class":36,"line":196},[34,96171,96172],{"class":187},"step:步长，可选，默认是 1。可以为浮点数。\n",[34,96174,96175],{"class":36,"line":202},[34,96176,96177],{"class":187},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[34,96179,96180],{"class":36,"line":207},[34,96181,96157],{"class":187},[584,96183,96185],{"id":96184},"_232-实例","2.3.2 实例",[25,96187,96189],{"className":27,"code":96188,"language":29,"meta":22,"style":22},"#创建一维数组\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",[31,96190,96191,96195,96219,96224,96229,96233,96256,96260,96264,96269,96274],{"__ignoreMap":22},[34,96192,96193],{"class":36,"line":37},[34,96194,93566],{"class":40},[34,96196,96197,96199,96201,96203,96205,96207,96209,96211,96213,96215,96217],{"class":36,"line":44},[34,96198,93463],{"class":59},[34,96200,64],{"class":63},[34,96202,67],{"class":59},[34,96204,1331],{"class":63},[34,96206,67],{"class":59},[34,96208,64],{"class":63},[34,96210,67],{"class":59},[34,96212,93961],{"class":5680},[34,96214,447],{"class":112},[34,96216,620],{"class":63},[34,96218,623],{"class":59},[34,96220,96221],{"class":36,"line":50},[34,96222,96223],{"class":40},"#输出结果：\n",[34,96225,96226],{"class":36,"line":56},[34,96227,96228],{"class":40},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[34,96230,96231],{"class":36,"line":107},[34,96232,94406],{"class":40},[34,96234,96235,96238,96240,96242,96244,96247,96249,96251,96253],{"class":36,"line":196},[34,96236,96237],{"class":59},"np.array([np.arange(",[34,96239,64],{"class":63},[34,96241,67],{"class":59},[34,96243,217],{"class":63},[34,96245,96246],{"class":59},"),np.arange(",[34,96248,217],{"class":63},[34,96250,67],{"class":59},[34,96252,977],{"class":63},[34,96254,96255],{"class":59},")])\n",[34,96257,96258],{"class":36,"line":202},[34,96259,182],{"class":40},[34,96261,96262],{"class":36,"line":207},[34,96263,96157],{"class":187},[34,96265,96266],{"class":36,"line":222},[34,96267,96268],{"class":187},"array([[1, 2, 3],\n",[34,96270,96271],{"class":36,"line":227},[34,96272,96273],{"class":187},"       [4, 5, 6]])\n",[34,96275,96276],{"class":36,"line":232},[34,96277,96157],{"class":187},[555,96279,96281],{"id":96280},"_24-生态分布","2.4 生态分布",[584,96283,96285],{"id":96284},"_241-标准正态分布","2.4.1 标准正态分布",[14,96287,96288],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96290,96291],{},[20,96292],{"alt":22,"src":96293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[584,96295,96297],{"id":96296},"_242-常规正态分布","2.4.2 常规正态分布",[25,96299,96301],{"className":27,"code":96300,"language":29,"meta":22,"style":22},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[31,96302,96303,96308,96313,96318],{"__ignoreMap":22},[34,96304,96305],{"class":36,"line":37},[34,96306,96307],{"class":59},"random.normal(loc,scale,size)也可以生成正态分布\n",[34,96309,96310],{"class":36,"line":44},[34,96311,96312],{"class":40},"#loc:期望\n",[34,96314,96315],{"class":36,"line":50},[34,96316,96317],{"class":40},"#scale:方差\n",[34,96319,96320],{"class":36,"line":56},[34,96321,96322],{"class":40},"#size:用于确定是几维的数列\n",[14,96324,96325],{},[20,96326],{"alt":22,"src":96327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[555,96329,96331],{"id":96330},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96333,96334],{},"ndim:秩，维度个数",[14,96336,96337],{},"size:数组元素的个数",[14,96339,96340],{},"shape:数组的形状",[14,96342,96343],{},"dtype:数组元素的类型",[14,96345,96346],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96348,96349],{},"他们都是属性，通过数组.属性的形式来确定",[14,96351,96352],{},"如果需要输出多个可以通过以下方式：",[25,96354,96356],{"className":27,"code":96355,"language":29,"meta":22,"style":22},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[31,96357,96358],{"__ignoreMap":22},[34,96359,96360,96362],{"class":36,"line":37},[34,96361,30878],{"class":63},[34,96363,96364],{"class":59},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[555,96366,96368],{"id":96367},"_26-其他方式创建数组","2.6 其他方式创建数组",[584,96370,96372],{"id":96371},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96374,96375],{},"①创建一维数组",[25,96377,96379],{"className":27,"code":96378,"language":29,"meta":22,"style":22},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[31,96380,96381,96390,96394,96399,96404],{"__ignoreMap":22},[34,96382,96383,96386,96388],{"class":36,"line":37},[34,96384,96385],{"class":59},"np.zeros(",[34,96387,1053],{"class":63},[34,96389,623],{"class":59},[34,96391,96392],{"class":36,"line":44},[34,96393,96157],{"class":187},[34,96395,96396],{"class":36,"line":50},[34,96397,96398],{"class":187},"输出结果：\n",[34,96400,96401],{"class":36,"line":56},[34,96402,96403],{"class":187},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[34,96405,96406],{"class":36,"line":107},[34,96407,96157],{"class":187},[14,96409,96410],{},"上方代码等价于：",[25,96412,96414],{"className":27,"code":96413,"language":29,"meta":22,"style":22},"np.zeros(shape=(10))#创建10个元素的0数组\n",[31,96415,96416],{"__ignoreMap":22},[34,96417,96418,96420,96423,96425,96427,96429,96431],{"class":36,"line":37},[34,96419,96385],{"class":59},[34,96421,96422],{"class":5680},"shape",[34,96424,447],{"class":112},[34,96426,617],{"class":59},[34,96428,1053],{"class":63},[34,96430,83232],{"class":59},[34,96432,96433],{"class":40},"#创建10个元素的0数组\n",[14,96435,96436],{},"也可以指定类型",[25,96438,96440],{"className":27,"code":96439,"language":29,"meta":22,"style":22},"#指定类型\nnp.zeros(5,dtype=int)\n",[31,96441,96442,96447],{"__ignoreMap":22},[34,96443,96444],{"class":36,"line":37},[34,96445,96446],{"class":40},"#指定类型\n",[34,96448,96449,96451,96453,96455,96457,96459,96461],{"class":36,"line":44},[34,96450,96385],{"class":59},[34,96452,927],{"class":63},[34,96454,67],{"class":59},[34,96456,93961],{"class":5680},[34,96458,447],{"class":112},[34,96460,620],{"class":63},[34,96462,623],{"class":59},[14,96464,96465],{},"②创建二维数组",[25,96467,96469],{"className":27,"code":96468,"language":29,"meta":22,"style":22},"np.zeros((3,4),dtype=int)\n",[31,96470,96471],{"__ignoreMap":22},[34,96472,96473,96476,96478,96480,96482,96484,96486,96488,96490],{"class":36,"line":37},[34,96474,96475],{"class":59},"np.zeros((",[34,96477,309],{"class":63},[34,96479,67],{"class":59},[34,96481,217],{"class":63},[34,96483,42717],{"class":59},[34,96485,93961],{"class":5680},[34,96487,447],{"class":112},[34,96489,620],{"class":63},[34,96491,623],{"class":59},[14,96493,96494],{},"③创建三维数组",[25,96496,96498],{"className":27,"code":96497,"language":29,"meta":22,"style":22},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[31,96499,96500,96505],{"__ignoreMap":22},[34,96501,96502],{"class":36,"line":37},[34,96503,96504],{"class":40},"#创建三维数组\n",[34,96506,96507,96509,96511,96513,96515,96517,96519,96521,96523,96525,96527],{"class":36,"line":44},[34,96508,96475],{"class":59},[34,96510,309],{"class":63},[34,96512,67],{"class":59},[34,96514,217],{"class":63},[34,96516,67],{"class":59},[34,96518,927],{"class":63},[34,96520,42717],{"class":59},[34,96522,93961],{"class":5680},[34,96524,447],{"class":112},[34,96526,620],{"class":63},[34,96528,623],{"class":59},[14,96530,96531],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[25,96533,96535],{"className":27,"code":96534,"language":29,"meta":22,"style":22},"#使用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",[31,96536,96537,96542,96557,96562,96567,96589],{"__ignoreMap":22},[34,96538,96539],{"class":36,"line":37},[34,96540,96541],{"class":40},"#使用zeros_like将创建的一维数组变成全0的数组\n",[34,96543,96544,96546,96548,96550,96552,96554],{"class":36,"line":44},[34,96545,847],{"class":59},[34,96547,447],{"class":112},[34,96549,93463],{"class":59},[34,96551,217],{"class":63},[34,96553,1036],{"class":59},[34,96555,96556],{"class":40},"#这个得到的结果：一维数组0，1，2，3\n",[34,96558,96559],{"class":36,"line":50},[34,96560,96561],{"class":59},"np.zeros_like(a)\n",[34,96563,96564],{"class":36,"line":56},[34,96565,96566],{"class":40},"#使用zeros_like将创建的二维数组变成全0的数组\n",[34,96568,96569,96571,96573,96575,96577,96579,96581,96583,96585,96587],{"class":36,"line":107},[34,96570,93767],{"class":59},[34,96572,447],{"class":112},[34,96574,95886],{"class":59},[34,96576,31959],{"class":5680},[34,96578,447],{"class":112},[34,96580,617],{"class":59},[34,96582,217],{"class":63},[34,96584,67],{"class":59},[34,96586,927],{"class":63},[34,96588,30960],{"class":59},[34,96590,96591],{"class":36,"line":196},[34,96592,96593],{"class":59},"np.zeros_like(aa)\n",[584,96595,96597],{"id":96596},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96599,96600],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[584,96602,96604],{"id":96603},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96606,96607],{},"①empty()用法",[25,96609,96611],{"className":27,"code":96610,"language":29,"meta":22,"style":22},"numpy.empty(shape,dtype=float,order='c')\n",[31,96612,96613],{"__ignoreMap":22},[34,96614,96615,96618,96620,96622,96624,96626,96628,96630,96632],{"class":36,"line":37},[34,96616,96617],{"class":59},"numpy.empty(shape,",[34,96619,93961],{"class":5680},[34,96621,447],{"class":112},[34,96623,656],{"class":63},[34,96625,67],{"class":59},[34,96627,95756],{"class":5680},[34,96629,447],{"class":112},[34,96631,76489],{"class":187},[34,96633,623],{"class":59},[14,96635,96636],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96638,96639],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96641,96642],{},[20,96643],{"alt":22,"src":96644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96646,96647],{},"②empty()用法",[25,96649,96651],{"className":27,"code":96650,"language":29,"meta":22,"style":22},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[31,96652,96653,96674,96686,96707,96712],{"__ignoreMap":22},[34,96654,96655,96657,96659,96662,96664,96666,96668,96670,96672],{"class":36,"line":37},[34,96656,1451],{"class":59},[34,96658,447],{"class":112},[34,96660,96661],{"class":59},"np.empty(",[34,96663,1053],{"class":63},[34,96665,67],{"class":59},[34,96667,93961],{"class":5680},[34,96669,447],{"class":112},[34,96671,620],{"class":63},[34,96673,623],{"class":59},[34,96675,96676,96678,96680,96682,96684],{"class":36,"line":44},[34,96677,1426],{"class":59},[34,96679,447],{"class":112},[34,96681,93463],{"class":59},[34,96683,927],{"class":63},[34,96685,623],{"class":59},[34,96687,96688,96691,96693,96696,96698,96700,96703,96705],{"class":36,"line":50},[34,96689,96690],{"class":59},"np.add(",[34,96692,70],{"class":63},[34,96694,96695],{"class":59},",x,",[34,96697,93515],{"class":5680},[34,96699,447],{"class":112},[34,96701,96702],{"class":59},"y[:",[34,96704,927],{"class":63},[34,96706,5121],{"class":59},[34,96708,96709],{"class":36,"line":56},[34,96710,96711],{"class":40},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[34,96713,96714],{"class":36,"line":107},[34,96715,96716],{"class":59},"y\n",[14,96718,11978],{},[14,96720,96721],{},[20,96722],{"alt":22,"src":96723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[25,96725,96727],{"className":27,"code":96726,"language":29,"meta":22,"style":22},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[31,96728,96729,96745,96765,96780],{"__ignoreMap":22},[34,96730,96731,96733,96735,96737,96739,96741,96743],{"class":36,"line":37},[34,96732,1426],{"class":59},[34,96734,447],{"class":112},[34,96736,93463],{"class":59},[34,96738,64],{"class":63},[34,96740,67],{"class":59},[34,96742,952],{"class":63},[34,96744,623],{"class":59},[34,96746,96747,96749,96751,96753,96755,96757,96759,96761,96763],{"class":36,"line":44},[34,96748,1451],{"class":59},[34,96750,447],{"class":112},[34,96752,96661],{"class":59},[34,96754,927],{"class":63},[34,96756,67],{"class":59},[34,96758,93961],{"class":5680},[34,96760,447],{"class":112},[34,96762,620],{"class":63},[34,96764,623],{"class":59},[34,96766,96767,96770,96772,96774,96776,96778],{"class":36,"line":50},[34,96768,96769],{"class":59},"np.add(x,",[34,96771,70],{"class":63},[34,96773,67],{"class":59},[34,96775,93515],{"class":5680},[34,96777,447],{"class":112},[34,96779,93910],{"class":59},[34,96781,96782],{"class":36,"line":56},[34,96783,96784],{"class":40},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96786,96787],{},"③empty_like()",[14,96789,96790],{},[760,96791,96792,96793,96798],{},"创建一个",[760,96794,96795],{},[760,96796,96797],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96800,96801,96804],{},[31,96802,96803],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96806,96807],{},[20,96808],{"alt":22,"src":96809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[584,96811,96813],{"id":96812},"_264-用法","2.6.4 ？？用法",[14,96815,96816],{},"当想查看一个函数的参数时，可以通过？？来实现",[25,96818,96820],{"className":27,"code":96819,"language":29,"meta":22,"style":22},"np.full??\n",[31,96821,96822],{"__ignoreMap":22},[34,96823,96824,96827],{"class":36,"line":37},[34,96825,96826],{"class":59},"np.full",[34,96828,96829],{"class":77864},"??\n",[584,96831,96833],{"id":96832},"_265-full创建数组","2.6.5 full()创建数组",[25,96835,96837],{"className":27,"code":96836,"language":29,"meta":22,"style":22},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[31,96838,96839,96844],{"__ignoreMap":22},[34,96840,96841],{"class":36,"line":37},[34,96842,96843],{"class":59},"full(shape,fill_value)\n",[34,96845,96846],{"class":36,"line":44},[34,96847,96848],{"class":59},"创建全为某个指定值的数组\n",[14,96850,94989],{},[25,96852,96854],{"className":27,"code":96853,"language":29,"meta":22,"style":22},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[31,96855,96856,96861],{"__ignoreMap":22},[34,96857,96858],{"class":36,"line":37},[34,96859,96860],{"class":40},"#创建一个一维数组,以20进行填充\n",[34,96862,96863,96866,96868,96870,96872],{"class":36,"line":44},[34,96864,96865],{"class":59},"np.full(",[34,96867,1053],{"class":63},[34,96869,67],{"class":59},[34,96871,1306],{"class":63},[34,96873,623],{"class":59},[14,96875,93752],{},[25,96877,96879],{"className":27,"code":96878,"language":29,"meta":22,"style":22},"#创建二维数组\nnp.full((3,5),11)\n",[31,96880,96881,96885],{"__ignoreMap":22},[34,96882,96883],{"class":36,"line":37},[34,96884,94406],{"class":40},[34,96886,96887,96890,96892,96894,96896,96898,96900],{"class":36,"line":44},[34,96888,96889],{"class":59},"np.full((",[34,96891,309],{"class":63},[34,96893,67],{"class":59},[34,96895,927],{"class":63},[34,96897,42717],{"class":59},[34,96899,1079],{"class":63},[34,96901,623],{"class":59},[14,96903,96904],{},"③full_like用法",[14,96906,96907],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96909,96910],{},"这里是指定填充而已",[25,96912,96914],{"className":27,"code":96913,"language":29,"meta":22,"style":22},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[31,96915,96916,96921,96945,96950],{"__ignoreMap":22},[34,96917,96918],{"class":36,"line":37},[34,96919,96920],{"class":40},"#创建一个指定形状数组\n",[34,96922,96923,96925,96927,96929,96931,96933,96935,96937,96939,96941,96943],{"class":36,"line":44},[34,96924,847],{"class":59},[34,96926,447],{"class":112},[34,96928,93463],{"class":59},[34,96930,64],{"class":63},[34,96932,67],{"class":59},[34,96934,933],{"class":63},[34,96936,93468],{"class":59},[34,96938,217],{"class":63},[34,96940,67],{"class":59},[34,96942,1027],{"class":63},[34,96944,623],{"class":59},[34,96946,96947],{"class":36,"line":50},[34,96948,96949],{"class":40},"#进行指定填充\n",[34,96951,96952,96955,96957],{"class":36,"line":56},[34,96953,96954],{"class":59},"np.full_like(a,",[34,96956,1053],{"class":63},[34,96958,623],{"class":59},[14,96960,11978],{},[14,96962,96963],{},[20,96964],{"alt":22,"src":96965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[584,96967,96969],{"id":96968},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22462,96971,96973],{"id":96972},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[25,96975,96977],{"className":27,"code":96976,"language":29,"meta":22,"style":22},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[31,96978,96979,96996],{"__ignoreMap":22},[34,96980,96981,96984,96986,96988,96990,96992,96994],{"class":36,"line":37},[34,96982,96983],{"class":59},"np.eye(",[34,96985,217],{"class":63},[34,96987,67],{"class":59},[34,96989,93961],{"class":5680},[34,96991,447],{"class":112},[34,96993,620],{"class":63},[34,96995,623],{"class":59},[34,96997,96998],{"class":36,"line":44},[34,96999,97000],{"class":40},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22462,97002,97004],{"id":97003},"_2662-法2identity","2.6.6.2 法2：identity()",[25,97006,97008],{"className":27,"code":97007,"language":29,"meta":22,"style":22},"#identity()\nnp.identity(5,dtype=int)\n",[31,97009,97010,97015],{"__ignoreMap":22},[34,97011,97012],{"class":36,"line":37},[34,97013,97014],{"class":40},"#identity()\n",[34,97016,97017,97020,97022,97024,97026,97028,97030],{"class":36,"line":44},[34,97018,97019],{"class":59},"np.identity(",[34,97021,927],{"class":63},[34,97023,67],{"class":59},[34,97025,93961],{"class":5680},[34,97027,447],{"class":112},[34,97029,620],{"class":63},[34,97031,623],{"class":59},[14,97033,97034],{},"两个函数是有区别的",[14,97036,97037],{},[20,97038],{"alt":22,"src":97039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97041,97042],{},[20,97043],{"alt":22,"src":97044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[25,97046,97048],{"className":27,"code":97047,"language":29,"meta":22,"style":22},"# 创建一个 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",[31,97049,97050,97055,97067,97072,97077,97082,97087,97091,97096,97116,97120,97125,97130],{"__ignoreMap":22},[34,97051,97052],{"class":36,"line":37},[34,97053,97054],{"class":40},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[34,97056,97057,97059,97061,97063,97065],{"class":36,"line":44},[34,97058,96983],{"class":59},[34,97060,309],{"class":63},[34,97062,12899],{"class":59},[34,97064,217],{"class":63},[34,97066,623],{"class":59},[34,97068,97069],{"class":36,"line":50},[34,97070,97071],{"class":40},"# 输出:\n",[34,97073,97074],{"class":36,"line":56},[34,97075,97076],{"class":40},"# [[1. 0. 0. 0.]\n",[34,97078,97079],{"class":36,"line":107},[34,97080,97081],{"class":40},"#  [0. 1. 0. 0.]\n",[34,97083,97084],{"class":36,"line":196},[34,97085,97086],{"class":40},"#  [0. 0. 1. 0.]]\n",[34,97088,97089],{"class":36,"line":202},[34,97090,2864],{"emptyLinePlaceholder":540},[34,97092,97093],{"class":36,"line":207},[34,97094,97095],{"class":40},"# 对角线向上偏移1\n",[34,97097,97098,97100,97102,97104,97106,97108,97110,97112,97114],{"class":36,"line":222},[34,97099,96983],{"class":59},[34,97101,309],{"class":63},[34,97103,12899],{"class":59},[34,97105,217],{"class":63},[34,97107,12899],{"class":59},[34,97109,1100],{"class":5680},[34,97111,447],{"class":112},[34,97113,64],{"class":63},[34,97115,623],{"class":59},[34,97117,97118],{"class":36,"line":227},[34,97119,97071],{"class":40},[34,97121,97122],{"class":36,"line":232},[34,97123,97124],{"class":40},"# [[0. 1. 0. 0.]\n",[34,97126,97127],{"class":36,"line":238},[34,97128,97129],{"class":40},"#  [0. 0. 1. 0.]\n",[34,97131,97132],{"class":36,"line":244},[34,97133,97134],{"class":40},"#  [0. 0. 0. 1.]]\n",[584,97136,97138],{"id":97137},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[25,97140,97142],{"className":27,"code":97141,"language":29,"meta":22,"style":22},"#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",[31,97143,97144,97149,97153,97158,97163,97168,97173,97178,97183,97188,97193],{"__ignoreMap":22},[34,97145,97146],{"class":36,"line":37},[34,97147,97148],{"class":40},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[34,97150,97151],{"class":36,"line":44},[34,97152,96157],{"class":187},[34,97154,97155],{"class":36,"line":50},[34,97156,97157],{"class":187},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[34,97159,97160],{"class":36,"line":56},[34,97161,97162],{"class":187},"参数介绍：\n",[34,97164,97165],{"class":36,"line":107},[34,97166,97167],{"class":187},"start：序列的起始值\n",[34,97169,97170],{"class":36,"line":196},[34,97171,97172],{"class":187},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[34,97174,97175],{"class":36,"line":202},[34,97176,97177],{"class":187},"num：要生长的等步长的样本数量，默认为50\n",[34,97179,97180],{"class":36,"line":207},[34,97181,97182],{"class":187},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[34,97184,97185],{"class":36,"line":222},[34,97186,97187],{"class":187},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[34,97189,97190],{"class":36,"line":227},[34,97191,97192],{"class":187},"dtype：ndarry的数据类型\n",[34,97194,97195],{"class":36,"line":232},[34,97196,96157],{"class":187},[14,97198,97199],{},[20,97200],{"alt":22,"src":97201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97203,97204],{},"这里num=是可以省略的",[14,97206,97207],{},"也就是下方两行代码结果是一模一样的",[25,97209,97211],{"className":27,"code":97210,"language":29,"meta":22,"style":22},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[31,97212,97213,97230],{"__ignoreMap":22},[34,97214,97215,97218,97220,97222,97224,97226,97228],{"class":36,"line":37},[34,97216,97217],{"class":59},"np.linspace(",[34,97219,64],{"class":63},[34,97221,67],{"class":59},[34,97223,927],{"class":63},[34,97225,67],{"class":59},[34,97227,927],{"class":63},[34,97229,623],{"class":59},[34,97231,97232,97234,97236,97238,97240,97242,97244,97246,97248],{"class":36,"line":44},[34,97233,97217],{"class":59},[34,97235,64],{"class":63},[34,97237,67],{"class":59},[34,97239,927],{"class":63},[34,97241,67],{"class":59},[34,97243,2129],{"class":5680},[34,97245,447],{"class":112},[34,97247,927],{"class":63},[34,97249,623],{"class":59},[584,97251,97253],{"id":97252},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[25,97255,97257],{"className":27,"code":97256,"language":29,"meta":22,"style":22},"#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",[31,97258,97259,97264,97268,97273,97278,97283,97288,97292,97297,97302,97306],{"__ignoreMap":22},[34,97260,97261],{"class":36,"line":37},[34,97262,97263],{"class":40},"#logspace函数用于创建一个等比数列，格式如下：\n",[34,97265,97266],{"class":36,"line":44},[34,97267,96157],{"class":187},[34,97269,97270],{"class":36,"line":50},[34,97271,97272],{"class":187},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[34,97274,97275],{"class":36,"line":56},[34,97276,97277],{"class":187},"参数为：\n",[34,97279,97280],{"class":36,"line":107},[34,97281,97282],{"class":187},"start:序列的起始位置为：base**start\n",[34,97284,97285],{"class":36,"line":196},[34,97286,97287],{"class":187},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[34,97289,97290],{"class":36,"line":202},[34,97291,97177],{"class":187},[34,97293,97294],{"class":36,"line":207},[34,97295,97296],{"class":187},"endpoint：是否包含 stop 这个值，默认是 True\n",[34,97298,97299],{"class":36,"line":222},[34,97300,97301],{"class":187},"base：对数的底数，默认是 10（常见对数）\n",[34,97303,97304],{"class":36,"line":227},[34,97305,97192],{"class":187},[34,97307,97308],{"class":36,"line":232},[34,97309,96157],{"class":187},[14,97311,97312],{},[20,97313],{"alt":22,"src":97314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97316,97317],{},"logspace()函数中的num参数也是可以不写num=的",[14,97319,97320],{},"endpoint是不可以省略的",[532,97322,97323],{},"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":22,"searchDepth":44,"depth":44,"links":97325},[97326,97330,97335,97339,97343,97344],{"id":95715,"depth":44,"text":95716,"children":97327},[97328,97329],{"id":95719,"depth":50,"text":95720},{"id":95792,"depth":50,"text":95793},{"id":95824,"depth":44,"text":95825,"children":97331},[97332,97333,97334],{"id":95828,"depth":50,"text":95829},{"id":96010,"depth":50,"text":96011},{"id":96088,"depth":50,"text":96089},{"id":96123,"depth":44,"text":96124,"children":97336},[97337,97338],{"id":96127,"depth":50,"text":96128},{"id":96184,"depth":50,"text":96185},{"id":96280,"depth":44,"text":96281,"children":97340},[97341,97342],{"id":96284,"depth":50,"text":96285},{"id":96296,"depth":50,"text":96297},{"id":96330,"depth":44,"text":96331},{"id":96367,"depth":44,"text":96368,"children":97345},[97346,97347,97348,97349,97350,97351,97352,97353],{"id":96371,"depth":50,"text":96372},{"id":96596,"depth":50,"text":96597},{"id":96603,"depth":50,"text":96604},{"id":96812,"depth":50,"text":96813},{"id":96832,"depth":50,"text":96833},{"id":96968,"depth":50,"text":96969},{"id":97137,"depth":50,"text":97138},{"id":97252,"depth":50,"text":97253},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95707,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97360,"title":97361,"body":97362,"description":537,"extension":538,"meta":97455,"navigation":540,"path":97456,"seo":97457,"stem":97458,"__hash__":97459},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97363,"toc":97453},[97364,97367,97370,97373,97376,97379,97382,97385,97388,97391,97394,97397,97399,97402,97405,97410,97413,97416,97450],[10,97365,97361],{"id":97366},"_20魔法命令mprun",[14,97368,97369],{},"逐行分析数据内存的使用情况",[14,97371,97372],{},"语法格式：",[14,97374,97375],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97377,97378],{},"分析结果列如下：",[14,97380,97381],{},"Line行号",[14,97383,97384],{},"Mem usage内存使用大小",[14,97386,97387],{},"increment内存增量",[14,97389,97390],{},"Line content代码内容",[14,97392,97393],{},"补充说明：",[14,97395,97396],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97398,95662],{},[14,97400,97401],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97403,97404],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97406,97407],{},[20,97408],{"alt":22,"src":97409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97411,97412],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97414,97415],{},"这时候需要重新加载模块",[25,97417,97419],{"className":27,"code":97418,"language":29,"meta":22,"style":22},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[31,97420,97421,97426,97433,97438],{"__ignoreMap":22},[34,97422,97423],{"class":36,"line":37},[34,97424,97425],{"class":40},"#重新加载模块\n",[34,97427,97428,97430],{"class":36,"line":44},[34,97429,30855],{"class":112},[34,97431,97432],{"class":59}," importlib\n",[34,97434,97435],{"class":36,"line":50},[34,97436,97437],{"class":59},"importlib.reload(mprun_test)\n",[34,97439,97440,97442,97445,97447],{"class":36,"line":56},[34,97441,936],{"class":112},[34,97443,97444],{"class":59},"mprun ",[34,97446,113],{"class":112},[34,97448,97449],{"class":59},"f mprun_test.fun_test mprun_test.fun_test()\n",[532,97451,97452],{},"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":22,"searchDepth":44,"depth":44,"links":97454},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97361,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97461,"title":97462,"body":97463,"description":537,"extension":538,"meta":97480,"navigation":540,"path":97481,"seo":97482,"stem":97483,"__hash__":97484},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97464,"toc":97478},[97465,97468,97473],[10,97466,97462],{"id":97467},"_3一维数组的索引和切片",[14,97469,97470],{},[20,97471],{"alt":22,"src":97472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97474,97475],{},[20,97476],{"alt":22,"src":97477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":22,"searchDepth":44,"depth":44,"links":97479},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97462,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":4,"title":5,"body":97486,"description":537,"extension":538,"meta":97902,"navigation":540,"path":541,"seo":97903,"stem":543,"__hash__":544},{"type":7,"value":97487,"toc":97900},[97488,97490,97492,97496,97524,97526,97560,97562,97592,97594,97686,97688,97720,97722,97812,97814,97858,97860,97896,97898],[10,97489,5],{"id":12},[14,97491,16],{},[14,97493,97494],{},[20,97495],{"alt":22,"src":23},[25,97497,97498],{"className":27,"code":28,"language":29,"meta":22,"style":22},[31,97499,97500,97504,97508,97512],{"__ignoreMap":22},[34,97501,97502],{"class":36,"line":37},[34,97503,41],{"class":40},[34,97505,97506],{"class":36,"line":44},[34,97507,47],{"class":40},[34,97509,97510],{"class":36,"line":50},[34,97511,53],{"class":40},[34,97513,97514,97516,97518,97520,97522],{"class":36,"line":56},[34,97515,60],{"class":59},[34,97517,64],{"class":63},[34,97519,67],{"class":59},[34,97521,70],{"class":63},[34,97523,73],{"class":59},[14,97525,76],{},[25,97527,97528],{"className":27,"code":79,"language":29,"meta":22,"style":22},[31,97529,97530,97534,97538,97546,97550],{"__ignoreMap":22},[34,97531,97532],{"class":36,"line":37},[34,97533,86],{"class":40},[34,97535,97536],{"class":36,"line":44},[34,97537,91],{"class":40},[34,97539,97540,97542,97544],{"class":36,"line":50},[34,97541,60],{"class":59},[34,97543,70],{"class":63},[34,97545,73],{"class":59},[34,97547,97548],{"class":36,"line":56},[34,97549,104],{"class":40},[34,97551,97552,97554,97556,97558],{"class":36,"line":107},[34,97553,60],{"class":59},[34,97555,113],{"class":112},[34,97557,64],{"class":63},[34,97559,73],{"class":59},[14,97561,120],{},[25,97563,97564],{"className":27,"code":123,"language":29,"meta":22,"style":22},[31,97565,97566,97570,97578,97582],{"__ignoreMap":22},[34,97567,97568],{"class":36,"line":37},[34,97569,130],{"class":40},[34,97571,97572,97574,97576],{"class":36,"line":44},[34,97573,135],{"class":59},[34,97575,70],{"class":63},[34,97577,73],{"class":59},[34,97579,97580],{"class":36,"line":50},[34,97581,144],{"class":40},[34,97583,97584,97586,97588,97590],{"class":36,"line":56},[34,97585,135],{"class":59},[34,97587,113],{"class":112},[34,97589,64],{"class":63},[34,97591,73],{"class":59},[14,97593,157],{},[25,97595,97596],{"className":27,"code":160,"language":29,"meta":22,"style":22},[31,97597,97598,97602,97610,97614,97618,97622,97626,97630,97642,97646,97650,97654,97658,97662,97666,97670,97674],{"__ignoreMap":22},[34,97599,97600],{"class":36,"line":37},[34,97601,167],{"class":40},[34,97603,97604,97606,97608],{"class":36,"line":44},[34,97605,172],{"class":59},[34,97607,70],{"class":63},[34,97609,177],{"class":59},[34,97611,97612],{"class":36,"line":50},[34,97613,182],{"class":40},[34,97615,97616],{"class":36,"line":56},[34,97617,188],{"class":187},[34,97619,97620],{"class":36,"line":107},[34,97621,193],{"class":187},[34,97623,97624],{"class":36,"line":196},[34,97625,199],{"class":187},[34,97627,97628],{"class":36,"line":202},[34,97629,188],{"class":187},[34,97631,97632,97634,97636,97638,97640],{"class":36,"line":207},[34,97633,135],{"class":59},[34,97635,64],{"class":63},[34,97637,214],{"class":59},[34,97639,217],{"class":63},[34,97641,73],{"class":59},[34,97643,97644],{"class":36,"line":222},[34,97645,182],{"class":40},[34,97647,97648],{"class":36,"line":227},[34,97649,188],{"class":187},[34,97651,97652],{"class":36,"line":232},[34,97653,235],{"class":187},[34,97655,97656],{"class":36,"line":238},[34,97657,241],{"class":187},[34,97659,97660],{"class":36,"line":244},[34,97661,247],{"class":187},[34,97663,97664],{"class":36,"line":250},[34,97665,253],{"class":187},[34,97667,97668],{"class":36,"line":256},[34,97669,188],{"class":187},[34,97671,97672],{"class":36,"line":261},[34,97673,264],{"class":40},[34,97675,97676,97678,97680,97682,97684],{"class":36,"line":267},[34,97677,270],{"class":59},[34,97679,70],{"class":63},[34,97681,275],{"class":59},[34,97683,70],{"class":63},[34,97685,73],{"class":59},[14,97687,282],{},[25,97689,97690],{"className":27,"code":285,"language":29,"meta":22,"style":22},[31,97691,97692,97696,97700],{"__ignoreMap":22},[34,97693,97694],{"class":36,"line":37},[34,97695,292],{"class":40},[34,97697,97698],{"class":36,"line":44},[34,97699,297],{"class":40},[34,97701,97702,97704,97706,97708,97710,97712,97714,97716,97718],{"class":36,"line":50},[34,97703,302],{"class":59},[34,97705,70],{"class":63},[34,97707,67],{"class":59},[34,97709,309],{"class":63},[34,97711,312],{"class":59},[34,97713,64],{"class":63},[34,97715,67],{"class":59},[34,97717,319],{"class":63},[34,97719,322],{"class":59},[14,97721,325],{},[25,97723,97724],{"className":27,"code":328,"language":29,"meta":22,"style":22},[31,97725,97726,97730,97740,97744,97748,97752,97756,97760,97764,97768,97772,97788,97792,97796,97800,97804,97808],{"__ignoreMap":22},[34,97727,97728],{"class":36,"line":37},[34,97729,335],{"class":40},[34,97731,97732,97734,97736,97738],{"class":36,"line":44},[34,97733,270],{"class":59},[34,97735,113],{"class":112},[34,97737,64],{"class":63},[34,97739,73],{"class":59},[34,97741,97742],{"class":36,"line":50},[34,97743,182],{"class":40},[34,97745,97746],{"class":36,"line":56},[34,97747,188],{"class":187},[34,97749,97750],{"class":36,"line":107},[34,97751,358],{"class":187},[34,97753,97754],{"class":36,"line":196},[34,97755,363],{"class":187},[34,97757,97758],{"class":36,"line":202},[34,97759,368],{"class":187},[34,97761,97762],{"class":36,"line":207},[34,97763,373],{"class":187},[34,97765,97766],{"class":36,"line":222},[34,97767,188],{"class":187},[34,97769,97770],{"class":36,"line":227},[34,97771,382],{"class":40},[34,97773,97774,97776,97778,97780,97782,97784,97786],{"class":36,"line":232},[34,97775,270],{"class":59},[34,97777,113],{"class":112},[34,97779,64],{"class":63},[34,97781,275],{"class":59},[34,97783,113],{"class":112},[34,97785,64],{"class":63},[34,97787,73],{"class":59},[34,97789,97790],{"class":36,"line":238},[34,97791,188],{"class":187},[34,97793,97794],{"class":36,"line":244},[34,97795,407],{"class":187},[34,97797,97798],{"class":36,"line":250},[34,97799,412],{"class":187},[34,97801,97802],{"class":36,"line":256},[34,97803,417],{"class":187},[34,97805,97806],{"class":36,"line":261},[34,97807,422],{"class":187},[34,97809,97810],{"class":36,"line":267},[34,97811,188],{"class":187},[14,97813,429],{},[25,97815,97816],{"className":27,"code":432,"language":29,"meta":22,"style":22},[31,97817,97818,97822,97838,97842],{"__ignoreMap":22},[34,97819,97820],{"class":36,"line":37},[34,97821,439],{"class":40},[34,97823,97824,97826,97828,97830,97832,97834,97836],{"class":36,"line":44},[34,97825,444],{"class":59},[34,97827,447],{"class":112},[34,97829,172],{"class":59},[34,97831,70],{"class":63},[34,97833,454],{"class":59},[34,97835,70],{"class":63},[34,97837,73],{"class":59},[34,97839,97840],{"class":36,"line":50},[34,97841,463],{"class":40},[34,97843,97844,97846,97848,97850,97852,97854,97856],{"class":36,"line":56},[34,97845,468],{"class":59},[34,97847,319],{"class":63},[34,97849,67],{"class":59},[34,97851,319],{"class":63},[34,97853,477],{"class":59},[34,97855,447],{"class":112},[34,97857,482],{"class":63},[14,97859,485],{},[25,97861,97862],{"className":27,"code":488,"language":29,"meta":22,"style":22},[31,97863,97864,97868,97876,97880],{"__ignoreMap":22},[34,97865,97866],{"class":36,"line":37},[34,97867,495],{"class":40},[34,97869,97870,97872,97874],{"class":36,"line":44},[34,97871,500],{"class":59},[34,97873,447],{"class":112},[34,97875,505],{"class":59},[34,97877,97878],{"class":36,"line":50},[34,97879,510],{"class":40},[34,97881,97882,97884,97886,97888,97890,97892,97894],{"class":36,"line":56},[34,97883,515],{"class":59},[34,97885,319],{"class":63},[34,97887,67],{"class":59},[34,97889,319],{"class":63},[34,97891,477],{"class":59},[34,97893,447],{"class":112},[34,97895,482],{"class":63},[14,97897,530],{},[532,97899,534],{},{"title":22,"searchDepth":44,"depth":44,"links":97901},[],{},{"title":5,"description":537},{"id":97905,"title":97906,"body":97907,"description":537,"extension":538,"meta":98399,"navigation":540,"path":98400,"seo":98401,"stem":98402,"__hash__":98403},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97908,"toc":98391},[97909,97912,97916,97919,97922,97975,97978,98003,98006,98025,98045,98048,98064,98068,98114,98118,98160,98164,98167,98170,98173,98176,98179,98241,98301,98305,98308,98365,98369,98374,98383,98388],[10,97910,97906],{"id":97911},"_5改变数组的维度",[555,97913,97915],{"id":97914},"_51-使用reshape","5.1 使用reshape()",[14,97917,97918],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97920,97921],{},"①一维数组转换为二维数组",[25,97923,97925],{"className":27,"code":97924,"language":29,"meta":22,"style":22},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[31,97926,97927,97943,97948,97953,97958],{"__ignoreMap":22},[34,97928,97929,97931,97933,97935,97937,97939,97941],{"class":36,"line":37},[34,97930,847],{"class":59},[34,97932,447],{"class":112},[34,97934,93463],{"class":59},[34,97936,64],{"class":63},[34,97938,67],{"class":59},[34,97940,1130],{"class":63},[34,97942,623],{"class":59},[34,97944,97945],{"class":36,"line":44},[34,97946,97947],{"class":40},"#将一维数组进行转换\n",[34,97949,97950],{"class":36,"line":50},[34,97951,97952],{"class":40},"#注意点：元素个数不可以变\n",[34,97954,97955],{"class":36,"line":56},[34,97956,97957],{"class":40},"#转换维度要保持一致，不一致就异常！！！\n",[34,97959,97960,97962,97964,97967,97969,97971,97973],{"class":36,"line":107},[34,97961,93767],{"class":59},[34,97963,447],{"class":112},[34,97965,97966],{"class":59},"a.reshape(",[34,97968,70],{"class":63},[34,97970,67],{"class":59},[34,97972,952],{"class":63},[34,97974,623],{"class":59},[14,97976,97977],{},"②一维数组转换为三维数组",[25,97979,97981],{"className":27,"code":97980,"language":29,"meta":22,"style":22},"aaa=a.reshape(2,3,2)\n",[31,97982,97983],{"__ignoreMap":22},[34,97984,97985,97987,97989,97991,97993,97995,97997,97999,98001],{"class":36,"line":37},[34,97986,95980],{"class":59},[34,97988,447],{"class":112},[34,97990,97966],{"class":59},[34,97992,70],{"class":63},[34,97994,67],{"class":59},[34,97996,309],{"class":63},[34,97998,67],{"class":59},[34,98000,70],{"class":63},[34,98002,623],{"class":59},[14,98004,98005],{},"③二维数组转化为一维数组",[25,98007,98009],{"className":27,"code":98008,"language":29,"meta":22,"style":22},"#知道元素个数：\naa.reshape(12)\n",[31,98010,98011,98016],{"__ignoreMap":22},[34,98012,98013],{"class":36,"line":37},[34,98014,98015],{"class":40},"#知道元素个数：\n",[34,98017,98018,98021,98023],{"class":36,"line":44},[34,98019,98020],{"class":59},"aa.reshape(",[34,98022,1105],{"class":63},[34,98024,623],{"class":59},[25,98026,98028],{"className":27,"code":98027,"language":29,"meta":22,"style":22},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[31,98029,98030,98035],{"__ignoreMap":22},[34,98031,98032],{"class":36,"line":37},[34,98033,98034],{"class":40},"#不知道元素个数，参数传递-1\n",[34,98036,98037,98039,98041,98043],{"class":36,"line":44},[34,98038,98020],{"class":59},[34,98040,113],{"class":112},[34,98042,64],{"class":63},[34,98044,623],{"class":59},[14,98046,98047],{},"④三维数组转换为一维数组",[25,98049,98051],{"className":27,"code":98050,"language":29,"meta":22,"style":22},"aaa.reshape(-1)\n",[31,98052,98053],{"__ignoreMap":22},[34,98054,98055,98058,98060,98062],{"class":36,"line":37},[34,98056,98057],{"class":59},"aaa.reshape(",[34,98059,113],{"class":112},[34,98061,64],{"class":63},[34,98063,623],{"class":59},[555,98065,98067],{"id":98066},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[25,98069,98071],{"className":27,"code":98070,"language":29,"meta":22,"style":22},"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",[31,98072,98073,98100,98105,98109],{"__ignoreMap":22},[34,98074,98075,98077,98079,98081,98083,98085,98087,98089,98091,98093,98095,98097],{"class":36,"line":37},[34,98076,93767],{"class":59},[34,98078,447],{"class":112},[34,98080,93463],{"class":59},[34,98082,64],{"class":63},[34,98084,67],{"class":59},[34,98086,1130],{"class":63},[34,98088,93468],{"class":59},[34,98090,70],{"class":63},[34,98092,67],{"class":59},[34,98094,952],{"class":63},[34,98096,1036],{"class":59},[34,98098,98099],{"class":40},"#转换为2行6列的数组\n",[34,98101,98102],{"class":36,"line":44},[34,98103,98104],{"class":59},"aa.revel()\n",[34,98106,98107],{"class":36,"line":50},[34,98108,182],{"class":40},[34,98110,98111],{"class":36,"line":56},[34,98112,98113],{"class":40},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[555,98115,98117],{"id":98116},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[25,98119,98121],{"className":27,"code":98120,"language":29,"meta":22,"style":22},"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",[31,98122,98123,98147,98152,98156],{"__ignoreMap":22},[34,98124,98125,98127,98129,98131,98133,98135,98137,98139,98141,98143,98145],{"class":36,"line":37},[34,98126,93767],{"class":59},[34,98128,447],{"class":112},[34,98130,93463],{"class":59},[34,98132,64],{"class":63},[34,98134,67],{"class":59},[34,98136,1130],{"class":63},[34,98138,93468],{"class":59},[34,98140,70],{"class":63},[34,98142,67],{"class":59},[34,98144,952],{"class":63},[34,98146,623],{"class":59},[34,98148,98149],{"class":36,"line":44},[34,98150,98151],{"class":59},"aa.flatten()\n",[34,98153,98154],{"class":36,"line":50},[34,98155,182],{"class":40},[34,98157,98158],{"class":36,"line":56},[34,98159,98113],{"class":40},[555,98161,98163],{"id":98162},"_54-使用resize","5.4 使用resize()",[14,98165,98166],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98168,98169],{},"通过resize方法可以改变数组的维度",[14,98171,98172],{},"#resize修改数组维度",[14,98174,98175],{},"#以元组的形式指定形状",[14,98177,98178],{},"#改变的是原数组",[25,98180,98182],{"className":27,"code":98181,"language":29,"meta":22,"style":22},"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",[31,98183,98184,98200,98220,98233,98237],{"__ignoreMap":22},[34,98185,98186,98188,98190,98192,98194,98196,98198],{"class":36,"line":37},[34,98187,847],{"class":59},[34,98189,447],{"class":112},[34,98191,93463],{"class":59},[34,98193,64],{"class":63},[34,98195,67],{"class":59},[34,98197,1130],{"class":63},[34,98199,623],{"class":59},[34,98201,98202,98205,98207,98209,98211,98213,98215,98217],{"class":36,"line":44},[34,98203,98204],{"class":59},"a.shape",[34,98206,447],{"class":112},[34,98208,617],{"class":59},[34,98210,70],{"class":63},[34,98212,67],{"class":59},[34,98214,952],{"class":63},[34,98216,1036],{"class":59},[34,98218,98219],{"class":40},"#改变了原数组\n",[34,98221,98222,98224,98226,98229,98231],{"class":36,"line":50},[34,98223,847],{"class":59},[34,98225,447],{"class":112},[34,98227,98228],{"class":59},"resize((",[34,98230,1105],{"class":63},[34,98232,30960],{"class":59},[34,98234,98235],{"class":36,"line":56},[34,98236,182],{"class":40},[34,98238,98239],{"class":36,"line":107},[34,98240,98113],{"class":40},[25,98242,98244],{"className":27,"code":98243,"language":29,"meta":22,"style":22},"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",[31,98245,98246,98259,98263,98267,98272,98277,98282,98287,98292,98297],{"__ignoreMap":22},[34,98247,98248,98251,98253,98255,98257],{"class":36,"line":37},[34,98249,98250],{"class":59},"a.resize((",[34,98252,952],{"class":63},[34,98254,67],{"class":59},[34,98256,70],{"class":63},[34,98258,30960],{"class":59},[34,98260,98261],{"class":36,"line":44},[34,98262,182],{"class":40},[34,98264,98265],{"class":36,"line":50},[34,98266,188],{"class":187},[34,98268,98269],{"class":36,"line":56},[34,98270,98271],{"class":187},"array([[ 1,  2],\n",[34,98273,98274],{"class":36,"line":107},[34,98275,98276],{"class":187},"       [ 3,  4],\n",[34,98278,98279],{"class":36,"line":196},[34,98280,98281],{"class":187},"       [ 5,  6],\n",[34,98283,98284],{"class":36,"line":202},[34,98285,98286],{"class":187},"       [ 7,  8],\n",[34,98288,98289],{"class":36,"line":207},[34,98290,98291],{"class":187},"       [ 9, 10],\n",[34,98293,98294],{"class":36,"line":222},[34,98295,98296],{"class":187},"       [11, 12]])\n",[34,98298,98299],{"class":36,"line":227},[34,98300,188],{"class":187},[555,98302,98304],{"id":98303},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98306,98307],{},"改变了原数组",[25,98309,98311],{"className":27,"code":98310,"language":29,"meta":22,"style":22},"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",[31,98312,98313,98329,98345,98349,98353,98357,98361],{"__ignoreMap":22},[34,98314,98315,98317,98319,98321,98323,98325,98327],{"class":36,"line":37},[34,98316,847],{"class":59},[34,98318,447],{"class":112},[34,98320,93463],{"class":59},[34,98322,64],{"class":63},[34,98324,67],{"class":59},[34,98326,1130],{"class":63},[34,98328,623],{"class":59},[34,98330,98331,98333,98335,98337,98339,98341,98343],{"class":36,"line":44},[34,98332,98204],{"class":59},[34,98334,447],{"class":112},[34,98336,617],{"class":59},[34,98338,70],{"class":63},[34,98340,67],{"class":59},[34,98342,952],{"class":63},[34,98344,623],{"class":59},[34,98346,98347],{"class":36,"line":50},[34,98348,182],{"class":40},[34,98350,98351],{"class":36,"line":56},[34,98352,188],{"class":187},[34,98354,98355],{"class":36,"line":107},[34,98356,193],{"class":187},[34,98358,98359],{"class":36,"line":196},[34,98360,199],{"class":187},[34,98362,98363],{"class":36,"line":202},[34,98364,188],{"class":187},[555,98366,98368],{"id":98367},"_56-重要比较","5.6 重要比较：",[14,98370,98371],{},[20,98372],{"alt":22,"src":98373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98375,98376,98377,98379,98380,98382],{},"口诀：NumPy 函数要么用 ",[31,98378,96422],{},"，要么用 ",[31,98381,31959],{},"，创建结构用 shape，造数据用 size",[14,98384,98385],{},[20,98386],{"alt":22,"src":98387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[532,98389,98390],{},"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":22,"searchDepth":44,"depth":44,"links":98392},[98393,98394,98395,98396,98397,98398],{"id":97914,"depth":44,"text":97915},{"id":98066,"depth":44,"text":98067},{"id":98116,"depth":44,"text":98117},{"id":98162,"depth":44,"text":98163},{"id":98303,"depth":44,"text":98304},{"id":98367,"depth":44,"text":98368},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97906,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98405,"title":98406,"body":98407,"description":537,"extension":538,"meta":99479,"navigation":540,"path":99480,"seo":99481,"stem":99482,"__hash__":99483},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98408,"toc":99473},[98409,98412,98416,98419,98422,98425,98490,98493,98533,98536,98618,98621,98626,98648,98650,98655,98660,98663,98666,98821,98824,99026,99030,99033,99036,99104,99106,99111,99114,99117,99197,99201,99204,99206,99279,99281,99286,99288,99368,99372,99375,99378,99381,99384,99387,99390,99470],[10,98410,98406],{"id":98411},"_6数组的拼接",[555,98413,98415],{"id":98414},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98417,98418],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98420,98421],{},"函数内部传两个数列构成的数列或者元组",[14,98423,98424],{},"①一维数组的拼接",[25,98426,98428],{"className":27,"code":98427,"language":29,"meta":22,"style":22},"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",[31,98429,98430,98450,98470,98475,98480,98485],{"__ignoreMap":22},[34,98431,98432,98434,98436,98438,98440,98442,98444,98446,98448],{"class":36,"line":37},[34,98433,847],{"class":59},[34,98435,447],{"class":112},[34,98437,93485],{"class":59},[34,98439,64],{"class":63},[34,98441,67],{"class":59},[34,98443,70],{"class":63},[34,98445,67],{"class":59},[34,98447,309],{"class":63},[34,98449,5121],{"class":59},[34,98451,98452,98454,98456,98458,98460,98462,98464,98466,98468],{"class":36,"line":44},[34,98453,872],{"class":59},[34,98455,447],{"class":112},[34,98457,93485],{"class":59},[34,98459,217],{"class":63},[34,98461,67],{"class":59},[34,98463,927],{"class":63},[34,98465,67],{"class":59},[34,98467,952],{"class":63},[34,98469,5121],{"class":59},[34,98471,98472],{"class":36,"line":50},[34,98473,98474],{"class":40},"#调用concatenate进行数组拼接\n",[34,98476,98477],{"class":36,"line":56},[34,98478,98479],{"class":59},"np.concatenate((a,b))\n",[34,98481,98482],{"class":36,"line":107},[34,98483,98484],{"class":40},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[34,98486,98487],{"class":36,"line":196},[34,98488,98489],{"class":40},"#np.concatenate([a,b])\n",[14,98491,98492],{},"②一维多个数组拼接",[25,98494,98496],{"className":27,"code":98495,"language":29,"meta":22,"style":22},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[31,98497,98498,98503,98523,98528],{"__ignoreMap":22},[34,98499,98500],{"class":36,"line":37},[34,98501,98502],{"class":40},"#也可以多个数组进行拼接\n",[34,98504,98505,98507,98509,98511,98513,98515,98517,98519,98521],{"class":36,"line":44},[34,98506,897],{"class":59},[34,98508,447],{"class":112},[34,98510,93485],{"class":59},[34,98512,1053],{"class":63},[34,98514,67],{"class":59},[34,98516,1079],{"class":63},[34,98518,67],{"class":59},[34,98520,1130],{"class":63},[34,98522,5121],{"class":59},[34,98524,98525],{"class":36,"line":50},[34,98526,98527],{"class":59},"c\n",[34,98529,98530],{"class":36,"line":56},[34,98531,98532],{"class":59},"np.concatenate((a,b,c))\n",[14,98534,98535],{},"③二维数组拼接",[25,98537,98539],{"className":27,"code":98538,"language":29,"meta":22,"style":22},"#二维数组使用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",[31,98540,98541,98546,98570,98595,98600,98605],{"__ignoreMap":22},[34,98542,98543],{"class":36,"line":37},[34,98544,98545],{"class":40},"#二维数组使用concatenate进行拼接\n",[34,98547,98548,98550,98552,98554,98556,98558,98560,98562,98564,98566,98568],{"class":36,"line":44},[34,98549,93767],{"class":59},[34,98551,447],{"class":112},[34,98553,93463],{"class":59},[34,98555,64],{"class":63},[34,98557,67],{"class":59},[34,98559,1130],{"class":63},[34,98561,93468],{"class":59},[34,98563,309],{"class":63},[34,98565,67],{"class":59},[34,98567,217],{"class":63},[34,98569,623],{"class":59},[34,98571,98572,98575,98577,98579,98581,98583,98585,98587,98589,98591,98593],{"class":36,"line":50},[34,98573,98574],{"class":59},"bb",[34,98576,447],{"class":112},[34,98578,93463],{"class":59},[34,98580,945],{"class":63},[34,98582,67],{"class":59},[34,98584,1248],{"class":63},[34,98586,93468],{"class":59},[34,98588,309],{"class":63},[34,98590,67],{"class":59},[34,98592,217],{"class":63},[34,98594,623],{"class":59},[34,98596,98597],{"class":36,"line":56},[34,98598,98599],{"class":40},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[34,98601,98602],{"class":36,"line":107},[34,98603,98604],{"class":40},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[34,98606,98607,98610,98612,98614,98616],{"class":36,"line":196},[34,98608,98609],{"class":59},"np.concatenate((aa,bb),",[34,98611,47975],{"class":5680},[34,98613,447],{"class":112},[34,98615,319],{"class":63},[34,98617,623],{"class":59},[14,98619,98620],{},"结果：",[14,98622,98623],{},[20,98624],{"alt":22,"src":98625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[25,98627,98629],{"className":27,"code":98628,"language":29,"meta":22,"style":22},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[31,98630,98631,98636],{"__ignoreMap":22},[34,98632,98633],{"class":36,"line":37},[34,98634,98635],{"class":40},"#指定axis为1进行拼接\n",[34,98637,98638,98640,98642,98644,98646],{"class":36,"line":44},[34,98639,98609],{"class":59},[34,98641,47975],{"class":5680},[34,98643,447],{"class":112},[34,98645,64],{"class":63},[34,98647,623],{"class":59},[14,98649,98620],{},[14,98651,98652],{},[20,98653],{"alt":22,"src":98654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98656,98657],{},[760,98658,98659],{},"二维数组总结：0竖着方向，1横着方向",[14,98661,98662],{},"④三维数组拼接",[14,98664,98665],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[25,98667,98669],{"className":27,"code":98668,"language":29,"meta":22,"style":22},"#两个三行六列\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",[31,98670,98671,98676,98704,98734,98739,98756,98761,98766,98771,98788,98793,98798,98803,98816],{"__ignoreMap":22},[34,98672,98673],{"class":36,"line":37},[34,98674,98675],{"class":40},"#两个三行六列\n",[34,98677,98678,98680,98682,98684,98686,98688,98690,98692,98694,98696,98698,98700,98702],{"class":36,"line":44},[34,98679,95980],{"class":59},[34,98681,447],{"class":112},[34,98683,93463],{"class":59},[34,98685,64],{"class":63},[34,98687,67],{"class":59},[34,98689,933],{"class":63},[34,98691,93468],{"class":59},[34,98693,70],{"class":63},[34,98695,67],{"class":59},[34,98697,309],{"class":63},[34,98699,67],{"class":59},[34,98701,952],{"class":63},[34,98703,623],{"class":59},[34,98705,98706,98709,98711,98713,98715,98717,98720,98722,98724,98726,98728,98730,98732],{"class":36,"line":50},[34,98707,98708],{"class":59},"bbb",[34,98710,447],{"class":112},[34,98712,93463],{"class":59},[34,98714,945],{"class":63},[34,98716,67],{"class":59},[34,98718,98719],{"class":63},"137",[34,98721,93468],{"class":59},[34,98723,70],{"class":63},[34,98725,67],{"class":59},[34,98727,309],{"class":63},[34,98729,67],{"class":59},[34,98731,952],{"class":63},[34,98733,623],{"class":59},[34,98735,98736],{"class":36,"line":56},[34,98737,98738],{"class":40},"#axis=0\n",[34,98740,98741,98743,98745,98748,98750,98752,98754],{"class":36,"line":107},[34,98742,1301],{"class":59},[34,98744,447],{"class":112},[34,98746,98747],{"class":59},"np.concatenate((aaa,bbb),",[34,98749,47975],{"class":5680},[34,98751,447],{"class":112},[34,98753,319],{"class":63},[34,98755,623],{"class":59},[34,98757,98758],{"class":36,"line":196},[34,98759,98760],{"class":59},"s.shape\n",[34,98762,98763],{"class":36,"line":202},[34,98764,98765],{"class":40},"#输出：(4,3,6)\n",[34,98767,98768],{"class":36,"line":207},[34,98769,98770],{"class":40},"#axis=1\n",[34,98772,98773,98776,98778,98780,98782,98784,98786],{"class":36,"line":222},[34,98774,98775],{"class":59},"ss",[34,98777,447],{"class":112},[34,98779,98747],{"class":59},[34,98781,47975],{"class":5680},[34,98783,447],{"class":112},[34,98785,64],{"class":63},[34,98787,623],{"class":59},[34,98789,98790],{"class":36,"line":227},[34,98791,98792],{"class":59},"ss.shape\n",[34,98794,98795],{"class":36,"line":232},[34,98796,98797],{"class":40},"#输出：(2,6,6)\n",[34,98799,98800],{"class":36,"line":238},[34,98801,98802],{"class":40},"#axis=2\n",[34,98804,98805,98807,98809,98811,98813],{"class":36,"line":244},[34,98806,98747],{"class":59},[34,98808,47975],{"class":5680},[34,98810,447],{"class":112},[34,98812,70],{"class":63},[34,98814,98815],{"class":59},").shape\n",[34,98817,98818],{"class":36,"line":250},[34,98819,98820],{"class":40},"#输出：（2，3，12）\n",[14,98822,98823],{},"⑤四维数组拼接",[25,98825,98827],{"className":27,"code":98826,"language":29,"meta":22,"style":22},"#两个三行六列\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",[31,98828,98829,98833,98861,98889,98914,98940,98944,98957,98962,98966,98978,98983,98987,98999,99004,99009,99021],{"__ignoreMap":22},[34,98830,98831],{"class":36,"line":37},[34,98832,98675],{"class":40},[34,98834,98835,98837,98839,98841,98843,98845,98847,98849,98851,98853,98855,98857,98859],{"class":36,"line":44},[34,98836,95980],{"class":59},[34,98838,447],{"class":112},[34,98840,93463],{"class":59},[34,98842,64],{"class":63},[34,98844,67],{"class":59},[34,98846,933],{"class":63},[34,98848,93468],{"class":59},[34,98850,70],{"class":63},[34,98852,67],{"class":59},[34,98854,309],{"class":63},[34,98856,67],{"class":59},[34,98858,952],{"class":63},[34,98860,623],{"class":59},[34,98862,98863,98865,98867,98869,98871,98873,98875,98877,98879,98881,98883,98885,98887],{"class":36,"line":50},[34,98864,98708],{"class":59},[34,98866,447],{"class":112},[34,98868,93463],{"class":59},[34,98870,945],{"class":63},[34,98872,67],{"class":59},[34,98874,98719],{"class":63},[34,98876,93468],{"class":59},[34,98878,70],{"class":63},[34,98880,67],{"class":59},[34,98882,309],{"class":63},[34,98884,67],{"class":59},[34,98886,952],{"class":63},[34,98888,623],{"class":59},[34,98890,98891,98894,98896,98898,98900,98902,98904,98906,98908,98910,98912],{"class":36,"line":56},[34,98892,98893],{"class":59},"aaaa",[34,98895,447],{"class":112},[34,98897,98057],{"class":59},[34,98899,70],{"class":63},[34,98901,67],{"class":59},[34,98903,309],{"class":63},[34,98905,67],{"class":59},[34,98907,309],{"class":63},[34,98909,67],{"class":59},[34,98911,70],{"class":63},[34,98913,623],{"class":59},[34,98915,98916,98919,98921,98924,98926,98928,98930,98932,98934,98936,98938],{"class":36,"line":107},[34,98917,98918],{"class":59},"bbbb",[34,98920,447],{"class":112},[34,98922,98923],{"class":59},"bbb.reshape(",[34,98925,70],{"class":63},[34,98927,67],{"class":59},[34,98929,309],{"class":63},[34,98931,67],{"class":59},[34,98933,309],{"class":63},[34,98935,67],{"class":59},[34,98937,70],{"class":63},[34,98939,623],{"class":59},[34,98941,98942],{"class":36,"line":196},[34,98943,98738],{"class":40},[34,98945,98946,98949,98951,98953,98955],{"class":36,"line":202},[34,98947,98948],{"class":59},"np.concatenate((aaaa,bbbb),",[34,98950,47975],{"class":5680},[34,98952,447],{"class":112},[34,98954,319],{"class":63},[34,98956,98815],{"class":59},[34,98958,98959],{"class":36,"line":207},[34,98960,98961],{"class":40},"#结果：（4，3，3，2）\n",[34,98963,98964],{"class":36,"line":222},[34,98965,98770],{"class":40},[34,98967,98968,98970,98972,98974,98976],{"class":36,"line":227},[34,98969,98948],{"class":59},[34,98971,47975],{"class":5680},[34,98973,447],{"class":112},[34,98975,64],{"class":63},[34,98977,98815],{"class":59},[34,98979,98980],{"class":36,"line":232},[34,98981,98982],{"class":40},"#结果：（2，6，3，2）\n",[34,98984,98985],{"class":36,"line":238},[34,98986,98802],{"class":40},[34,98988,98989,98991,98993,98995,98997],{"class":36,"line":244},[34,98990,98948],{"class":59},[34,98992,47975],{"class":5680},[34,98994,447],{"class":112},[34,98996,70],{"class":63},[34,98998,98815],{"class":59},[34,99000,99001],{"class":36,"line":250},[34,99002,99003],{"class":40},"#结果：（2，3，6，2）\n",[34,99005,99006],{"class":36,"line":256},[34,99007,99008],{"class":40},"#axis=3\n",[34,99010,99011,99013,99015,99017,99019],{"class":36,"line":261},[34,99012,98948],{"class":59},[34,99014,47975],{"class":5680},[34,99016,447],{"class":112},[34,99018,309],{"class":63},[34,99020,98815],{"class":59},[34,99022,99023],{"class":36,"line":267},[34,99024,99025],{"class":40},"#结果：（2，3，3，4）\n",[555,99027,99029],{"id":99028},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99031,99032],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99034,99035],{},"①二维数组",[25,99037,99039],{"className":27,"code":99038,"language":29,"meta":22,"style":22},"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",[31,99040,99041,99065,99089,99094,99099],{"__ignoreMap":22},[34,99042,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063],{"class":36,"line":37},[34,99044,93767],{"class":59},[34,99046,447],{"class":112},[34,99048,93463],{"class":59},[34,99050,64],{"class":63},[34,99052,67],{"class":59},[34,99054,1130],{"class":63},[34,99056,93468],{"class":59},[34,99058,309],{"class":63},[34,99060,67],{"class":59},[34,99062,217],{"class":63},[34,99064,623],{"class":59},[34,99066,99067,99069,99071,99073,99075,99077,99079,99081,99083,99085,99087],{"class":36,"line":44},[34,99068,98574],{"class":59},[34,99070,447],{"class":112},[34,99072,93463],{"class":59},[34,99074,945],{"class":63},[34,99076,67],{"class":59},[34,99078,1248],{"class":63},[34,99080,93468],{"class":59},[34,99082,309],{"class":63},[34,99084,67],{"class":59},[34,99086,217],{"class":63},[34,99088,623],{"class":59},[34,99090,99091],{"class":36,"line":50},[34,99092,99093],{"class":59},"np.hstack((aa,bb))\n",[34,99095,99096],{"class":36,"line":56},[34,99097,99098],{"class":40},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[34,99100,99101],{"class":36,"line":107},[34,99102,99103],{"class":40},"#np.hstack([aa,bb])\n",[14,99105,98620],{},[14,99107,99108],{},[20,99109],{"alt":22,"src":99110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99112,99113],{},"等效于concatenate()函数中axis=1时的情况",[14,99115,99116],{},"②三维数组",[25,99118,99120],{"className":27,"code":99119,"language":29,"meta":22,"style":22},"#两个三行六列\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",[31,99121,99122,99126,99154,99182,99187,99192],{"__ignoreMap":22},[34,99123,99124],{"class":36,"line":37},[34,99125,98675],{"class":40},[34,99127,99128,99130,99132,99134,99136,99138,99140,99142,99144,99146,99148,99150,99152],{"class":36,"line":44},[34,99129,95980],{"class":59},[34,99131,447],{"class":112},[34,99133,93463],{"class":59},[34,99135,64],{"class":63},[34,99137,67],{"class":59},[34,99139,933],{"class":63},[34,99141,93468],{"class":59},[34,99143,70],{"class":63},[34,99145,67],{"class":59},[34,99147,309],{"class":63},[34,99149,67],{"class":59},[34,99151,952],{"class":63},[34,99153,623],{"class":59},[34,99155,99156,99158,99160,99162,99164,99166,99168,99170,99172,99174,99176,99178,99180],{"class":36,"line":50},[34,99157,98708],{"class":59},[34,99159,447],{"class":112},[34,99161,93463],{"class":59},[34,99163,945],{"class":63},[34,99165,67],{"class":59},[34,99167,98719],{"class":63},[34,99169,93468],{"class":59},[34,99171,70],{"class":63},[34,99173,67],{"class":59},[34,99175,309],{"class":63},[34,99177,67],{"class":59},[34,99179,952],{"class":63},[34,99181,623],{"class":59},[34,99183,99184],{"class":36,"line":56},[34,99185,99186],{"class":40},"#使用hstack\n",[34,99188,99189],{"class":36,"line":107},[34,99190,99191],{"class":59},"np.hstack((aaa,bbb)).shape\n",[34,99193,99194],{"class":36,"line":196},[34,99195,99196],{"class":40},"#输出：（2，6，6）\n",[555,99198,99200],{"id":99199},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99202,99203],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99205,99035],{},[25,99207,99209],{"className":27,"code":99208,"language":29,"meta":22,"style":22},"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",[31,99210,99211,99235,99259,99264,99269,99274],{"__ignoreMap":22},[34,99212,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233],{"class":36,"line":37},[34,99214,93767],{"class":59},[34,99216,447],{"class":112},[34,99218,93463],{"class":59},[34,99220,64],{"class":63},[34,99222,67],{"class":59},[34,99224,1130],{"class":63},[34,99226,93468],{"class":59},[34,99228,309],{"class":63},[34,99230,67],{"class":59},[34,99232,217],{"class":63},[34,99234,623],{"class":59},[34,99236,99237,99239,99241,99243,99245,99247,99249,99251,99253,99255,99257],{"class":36,"line":44},[34,99238,98574],{"class":59},[34,99240,447],{"class":112},[34,99242,93463],{"class":59},[34,99244,945],{"class":63},[34,99246,67],{"class":59},[34,99248,1248],{"class":63},[34,99250,93468],{"class":59},[34,99252,309],{"class":63},[34,99254,67],{"class":59},[34,99256,217],{"class":63},[34,99258,623],{"class":59},[34,99260,99261],{"class":36,"line":50},[34,99262,99263],{"class":40},"#vstack 垂直方向进行堆叠\n",[34,99265,99266],{"class":36,"line":56},[34,99267,99268],{"class":59},"np.vstack((aa,bb))\n",[34,99270,99271],{"class":36,"line":107},[34,99272,99273],{"class":40},"#与hstack传的参数类似，等价于：\n",[34,99275,99276],{"class":36,"line":196},[34,99277,99278],{"class":59},"np.vstack([aa,bb])\n",[14,99280,98620],{},[14,99282,99283],{},[20,99284],{"alt":22,"src":99285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99287,99116],{},[25,99289,99291],{"className":27,"code":99290,"language":29,"meta":22,"style":22},"#两个三行六列\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",[31,99292,99293,99297,99325,99353,99358,99363],{"__ignoreMap":22},[34,99294,99295],{"class":36,"line":37},[34,99296,98675],{"class":40},[34,99298,99299,99301,99303,99305,99307,99309,99311,99313,99315,99317,99319,99321,99323],{"class":36,"line":44},[34,99300,95980],{"class":59},[34,99302,447],{"class":112},[34,99304,93463],{"class":59},[34,99306,64],{"class":63},[34,99308,67],{"class":59},[34,99310,933],{"class":63},[34,99312,93468],{"class":59},[34,99314,70],{"class":63},[34,99316,67],{"class":59},[34,99318,309],{"class":63},[34,99320,67],{"class":59},[34,99322,952],{"class":63},[34,99324,623],{"class":59},[34,99326,99327,99329,99331,99333,99335,99337,99339,99341,99343,99345,99347,99349,99351],{"class":36,"line":50},[34,99328,98708],{"class":59},[34,99330,447],{"class":112},[34,99332,93463],{"class":59},[34,99334,945],{"class":63},[34,99336,67],{"class":59},[34,99338,98719],{"class":63},[34,99340,93468],{"class":59},[34,99342,70],{"class":63},[34,99344,67],{"class":59},[34,99346,309],{"class":63},[34,99348,67],{"class":59},[34,99350,952],{"class":63},[34,99352,623],{"class":59},[34,99354,99355],{"class":36,"line":56},[34,99356,99357],{"class":40},"#使用vstack\n",[34,99359,99360],{"class":36,"line":107},[34,99361,99362],{"class":59},"np.vstack((aaa,bbb)).shape\n",[34,99364,99365],{"class":36,"line":196},[34,99366,99367],{"class":40},"#输出：（4，3，6）\n",[555,99369,99371],{"id":99370},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99373,99374],{},"该方法是三维数组特有的方法",[14,99376,99377],{},"也就是说",[14,99379,99380],{},"一维数组拼接方法用：concatenate()",[14,99382,99383],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99385,99386],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99388,99389],{},"四维数组及多维数组只能用concatenate进行拼接",[25,99391,99393],{"className":27,"code":99392,"language":29,"meta":22,"style":22},"#两个三行六列\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",[31,99394,99395,99399,99427,99455,99460,99465],{"__ignoreMap":22},[34,99396,99397],{"class":36,"line":37},[34,99398,98675],{"class":40},[34,99400,99401,99403,99405,99407,99409,99411,99413,99415,99417,99419,99421,99423,99425],{"class":36,"line":44},[34,99402,95980],{"class":59},[34,99404,447],{"class":112},[34,99406,93463],{"class":59},[34,99408,64],{"class":63},[34,99410,67],{"class":59},[34,99412,933],{"class":63},[34,99414,93468],{"class":59},[34,99416,70],{"class":63},[34,99418,67],{"class":59},[34,99420,309],{"class":63},[34,99422,67],{"class":59},[34,99424,952],{"class":63},[34,99426,623],{"class":59},[34,99428,99429,99431,99433,99435,99437,99439,99441,99443,99445,99447,99449,99451,99453],{"class":36,"line":50},[34,99430,98708],{"class":59},[34,99432,447],{"class":112},[34,99434,93463],{"class":59},[34,99436,945],{"class":63},[34,99438,67],{"class":59},[34,99440,98719],{"class":63},[34,99442,93468],{"class":59},[34,99444,70],{"class":63},[34,99446,67],{"class":59},[34,99448,309],{"class":63},[34,99450,67],{"class":59},[34,99452,952],{"class":63},[34,99454,623],{"class":59},[34,99456,99457],{"class":36,"line":56},[34,99458,99459],{"class":40},"#使用dstack\n",[34,99461,99462],{"class":36,"line":107},[34,99463,99464],{"class":59},"np.dstack((aaa,bbb)).shape\n",[34,99466,99467],{"class":36,"line":196},[34,99468,99469],{"class":40},"#结果：（2，3，12）\n",[532,99471,99472],{},"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":22,"searchDepth":44,"depth":44,"links":99474},[99475,99476,99477,99478],{"id":98414,"depth":44,"text":98415},{"id":99028,"depth":44,"text":99029},{"id":99199,"depth":44,"text":99200},{"id":99370,"depth":44,"text":99371},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98406,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99485,"title":99486,"body":99487,"description":537,"extension":538,"meta":99762,"navigation":540,"path":99763,"seo":99764,"stem":99765,"__hash__":99766},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99488,"toc":99760},[99489,99492,99495,99589,99592,99595,99598,99601,99604,99607,99610,99613,99757],[10,99490,99486],{"id":99491},"_7数组转置",[14,99493,99494],{},"使用transpose()函数",[25,99496,99498],{"className":27,"code":99497,"language":29,"meta":22,"style":22},"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",[31,99499,99500,99510,99534,99539,99544,99549,99554,99562,99566,99570,99575,99580,99585],{"__ignoreMap":22},[34,99501,99502,99504,99506,99508],{"class":36,"line":37},[34,99503,30855],{"class":112},[34,99505,31843],{"class":59},[34,99507,31846],{"class":112},[34,99509,31849],{"class":59},[34,99511,99512,99514,99516,99518,99520,99522,99524,99526,99528,99530,99532],{"class":36,"line":44},[34,99513,847],{"class":59},[34,99515,447],{"class":112},[34,99517,32180],{"class":59},[34,99519,64],{"class":63},[34,99521,67],{"class":59},[34,99523,1130],{"class":63},[34,99525,93468],{"class":59},[34,99527,217],{"class":63},[34,99529,67],{"class":59},[34,99531,309],{"class":63},[34,99533,623],{"class":59},[34,99535,99536],{"class":36,"line":50},[34,99537,99538],{"class":40},"#二维数组转置\n",[34,99540,99541],{"class":36,"line":56},[34,99542,99543],{"class":40},"#调用transpose()函数\n",[34,99545,99546],{"class":36,"line":107},[34,99547,99548],{"class":59},"a.transpose()\n",[34,99550,99551],{"class":36,"line":196},[34,99552,99553],{"class":40},"#对于二维数组也可以采用.T来实现\n",[34,99555,99556,99559],{"class":36,"line":202},[34,99557,99558],{"class":59},"a.T",[34,99560,99561],{"class":40},"#与上述代码一样\n",[34,99563,99564],{"class":36,"line":207},[34,99565,182],{"class":40},[34,99567,99568],{"class":36,"line":222},[34,99569,188],{"class":187},[34,99571,99572],{"class":36,"line":227},[34,99573,99574],{"class":187},"array([[ 1,  4,  7, 10],\n",[34,99576,99577],{"class":36,"line":232},[34,99578,99579],{"class":187},"       [ 2,  5,  8, 11],\n",[34,99581,99582],{"class":36,"line":238},[34,99583,99584],{"class":187},"       [ 3,  6,  9, 12]])\n",[34,99586,99587],{"class":36,"line":244},[34,99588,188],{"class":187},[14,99590,99591],{},"也可以使用np.transpose()的形式",[14,99593,99594],{},"#多维数组进行转置 np.transpose()",[14,99596,99597],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99599,99600],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99602,99603],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99605,99606],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99608,99609],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99611,99612],{},"四维及以上的数组也是一样的道理",[25,99614,99616],{"className":27,"code":99615,"language":29,"meta":22,"style":22},"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",[31,99617,99618,99646,99651,99656,99661,99679,99684,99716,99721,99726,99731,99752],{"__ignoreMap":22},[34,99619,99620,99622,99624,99626,99628,99630,99632,99634,99636,99638,99640,99642,99644],{"class":36,"line":37},[34,99621,1426],{"class":59},[34,99623,447],{"class":112},[34,99625,93463],{"class":59},[34,99627,64],{"class":63},[34,99629,67],{"class":59},[34,99631,933],{"class":63},[34,99633,93468],{"class":59},[34,99635,309],{"class":63},[34,99637,67],{"class":59},[34,99639,952],{"class":63},[34,99641,67],{"class":59},[34,99643,70],{"class":63},[34,99645,623],{"class":59},[34,99647,99648],{"class":36,"line":44},[34,99649,99650],{"class":59},"x.shape\n",[34,99652,99653],{"class":36,"line":50},[34,99654,99655],{"class":40},"#结果：（3,6,2）\n",[34,99657,99658],{"class":36,"line":56},[34,99659,99660],{"class":40},"#使用np.transpose()进行转置 变为(2,6,3)\n",[34,99662,99663,99666,99668,99670,99672,99674,99676],{"class":36,"line":107},[34,99664,99665],{"class":59},"np.transpose(x,(",[34,99667,70],{"class":63},[34,99669,67],{"class":59},[34,99671,64],{"class":63},[34,99673,67],{"class":59},[34,99675,319],{"class":63},[34,99677,99678],{"class":59},")).shape\n",[34,99680,99681],{"class":36,"line":196},[34,99682,99683],{"class":40},"#结果：(2,6,3)\n",[34,99685,99686,99688,99690,99692,99694,99696,99698,99700,99702,99704,99706,99708,99710,99712,99714],{"class":36,"line":202},[34,99687,98893],{"class":59},[34,99689,447],{"class":112},[34,99691,93463],{"class":59},[34,99693,64],{"class":63},[34,99695,67],{"class":59},[34,99697,933],{"class":63},[34,99699,93468],{"class":59},[34,99701,309],{"class":63},[34,99703,67],{"class":59},[34,99705,70],{"class":63},[34,99707,67],{"class":59},[34,99709,64],{"class":63},[34,99711,67],{"class":59},[34,99713,952],{"class":63},[34,99715,623],{"class":59},[34,99717,99718],{"class":36,"line":207},[34,99719,99720],{"class":59},"aaaa.shape\n",[34,99722,99723],{"class":36,"line":222},[34,99724,99725],{"class":40},"#结果：（3，2，1，6）\n",[34,99727,99728],{"class":36,"line":227},[34,99729,99730],{"class":40},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[34,99732,99733,99736,99738,99740,99742,99744,99746,99748,99750],{"class":36,"line":232},[34,99734,99735],{"class":59},"np.transpose(aaaa,(",[34,99737,64],{"class":63},[34,99739,67],{"class":59},[34,99741,70],{"class":63},[34,99743,67],{"class":59},[34,99745,319],{"class":63},[34,99747,67],{"class":59},[34,99749,309],{"class":63},[34,99751,99678],{"class":59},[34,99753,99754],{"class":36,"line":238},[34,99755,99756],{"class":40},"#结果：(2,1,3,6)\n",[532,99758,99759],{},"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":22,"searchDepth":44,"depth":44,"links":99761},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99486,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99768,"title":99769,"body":99770,"description":537,"extension":538,"meta":100504,"navigation":540,"path":100505,"seo":100506,"stem":100507,"__hash__":100508},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99771,"toc":100502},[99772,99775,99778,99781,99784,99787,99790,99793,99796,99905,99908,99911,100499],[10,99773,99769],{"id":99774},"_8数组分割",[14,99776,99777],{},"split分割",[14,99779,99780],{},"numpy.split(ary,indics_or_sections,axis)",[14,99782,99783],{},"解释：",[14,99785,99786],{},"ary:被分割的数组",[14,99788,99789],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99791,99792],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99794,99795],{},"①一维数组的分割",[25,99797,99799],{"className":27,"code":99798,"language":29,"meta":22,"style":22},"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",[31,99800,99801,99817,99822,99831,99835,99840,99848,99852,99857,99862,99875,99879,99884,99896,99900],{"__ignoreMap":22},[34,99802,99803,99805,99807,99809,99811,99813,99815],{"class":36,"line":37},[34,99804,847],{"class":59},[34,99806,447],{"class":112},[34,99808,93463],{"class":59},[34,99810,64],{"class":63},[34,99812,67],{"class":59},[34,99814,1027],{"class":63},[34,99816,623],{"class":59},[34,99818,99819],{"class":36,"line":44},[34,99820,99821],{"class":40},"#如果传入整数，必须能够平分，否则会报错\n",[34,99823,99824,99827,99829],{"class":36,"line":50},[34,99825,99826],{"class":59},"np.split(a,",[34,99828,70],{"class":63},[34,99830,623],{"class":59},[34,99832,99833],{"class":36,"line":56},[34,99834,182],{"class":40},[34,99836,99837],{"class":36,"line":107},[34,99838,99839],{"class":40},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[34,99841,99842,99844,99846],{"class":36,"line":196},[34,99843,99826],{"class":59},[34,99845,217],{"class":63},[34,99847,623],{"class":59},[34,99849,99850],{"class":36,"line":202},[34,99851,182],{"class":40},[34,99853,99854],{"class":36,"line":207},[34,99855,99856],{"class":40},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[34,99858,99859],{"class":36,"line":222},[34,99860,99861],{"class":40},"#传入数组\n",[34,99863,99864,99867,99869,99871,99873],{"class":36,"line":227},[34,99865,99866],{"class":59},"np.split(a,[",[34,99868,309],{"class":63},[34,99870,67],{"class":59},[34,99872,927],{"class":63},[34,99874,5121],{"class":59},[34,99876,99877],{"class":36,"line":232},[34,99878,182],{"class":40},[34,99880,99881],{"class":36,"line":238},[34,99882,99883],{"class":40},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[34,99885,99886,99888,99890,99892,99894],{"class":36,"line":244},[34,99887,99866],{"class":59},[34,99889,927],{"class":63},[34,99891,67],{"class":59},[34,99893,977],{"class":63},[34,99895,5121],{"class":59},[34,99897,99898],{"class":36,"line":250},[34,99899,182],{"class":40},[34,99901,99902],{"class":36,"line":256},[34,99903,99904],{"class":40},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99906,99907],{},"②二维数组的分割",[14,99909,99910],{},"使用split()",[25,99912,99914],{"className":27,"code":99913,"language":29,"meta":22,"style":22},"#二维数组分割\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",[31,99915,99916,99921,99945,99950,99959,99963,99967,99972,99977,99982,99987,99992,99997,100002,100006,100019,100023,100027,100031,100035,100039,100044,100049,100054,100058,100063,100079,100083,100087,100092,100097,100102,100107,100112,100117,100122,100127,100132,100137,100142,100147,100152,100157,100162,100167,100172,100177,100181,100185,100205,100209,100213,100218,100223,100228,100233,100238,100243,100248,100253,100258,100263,100268,100273,100278,100283,100288,100293,100298,100303,100307,100312,100321,100325,100329,100333,100337,100341,100345,100349,100353,100357,100366,100370,100374,100378,100382,100386,100390,100394,100398,100402,100406,100410,100414,100418,100422,100426,100430,100434,100438,100442,100446,100450,100463,100467,100471,100475,100479,100483,100487,100491,100495],{"__ignoreMap":22},[34,99917,99918],{"class":36,"line":37},[34,99919,99920],{"class":40},"#二维数组分割\n",[34,99922,99923,99925,99927,99929,99931,99933,99935,99937,99939,99941,99943],{"class":36,"line":44},[34,99924,93767],{"class":59},[34,99926,447],{"class":112},[34,99928,93463],{"class":59},[34,99930,64],{"class":63},[34,99932,67],{"class":59},[34,99934,933],{"class":63},[34,99936,93468],{"class":59},[34,99938,952],{"class":63},[34,99940,67],{"class":59},[34,99942,952],{"class":63},[34,99944,623],{"class":59},[34,99946,99947],{"class":36,"line":50},[34,99948,99949],{"class":40},"#默认axis=0  传入整数平均分,按行来的\n",[34,99951,99952,99955,99957],{"class":36,"line":56},[34,99953,99954],{"class":59},"np.split(aa,",[34,99956,309],{"class":63},[34,99958,623],{"class":59},[34,99960,99961],{"class":36,"line":107},[34,99962,96223],{"class":40},[34,99964,99965],{"class":36,"line":196},[34,99966,188],{"class":187},[34,99968,99969],{"class":36,"line":202},[34,99970,99971],{"class":187},"[array([[ 1,  2,  3,  4,  5,  6],\n",[34,99973,99974],{"class":36,"line":207},[34,99975,99976],{"class":187},"        [ 7,  8,  9, 10, 11, 12]]),\n",[34,99978,99979],{"class":36,"line":222},[34,99980,99981],{"class":187}," array([[13, 14, 15, 16, 17, 18],\n",[34,99983,99984],{"class":36,"line":227},[34,99985,99986],{"class":187},"        [19, 20, 21, 22, 23, 24]]),\n",[34,99988,99989],{"class":36,"line":232},[34,99990,99991],{"class":187}," array([[25, 26, 27, 28, 29, 30],\n",[34,99993,99994],{"class":36,"line":238},[34,99995,99996],{"class":187},"        [31, 32, 33, 34, 35, 36]])]\n",[34,99998,99999],{"class":36,"line":244},[34,100000,100001],{"class":187}," '''\n",[34,100003,100004],{"class":36,"line":250},[34,100005,99861],{"class":40},[34,100007,100008,100011,100013,100015,100017],{"class":36,"line":256},[34,100009,100010],{"class":59},"np.split(aa,[",[34,100012,70],{"class":63},[34,100014,67],{"class":59},[34,100016,927],{"class":63},[34,100018,5121],{"class":59},[34,100020,100021],{"class":36,"line":261},[34,100022,96223],{"class":40},[34,100024,100025],{"class":36,"line":267},[34,100026,188],{"class":187},[34,100028,100029],{"class":36,"line":2138},[34,100030,99971],{"class":187},[34,100032,100033],{"class":36,"line":2143},[34,100034,99976],{"class":187},[34,100036,100037],{"class":36,"line":2157},[34,100038,99981],{"class":187},[34,100040,100041],{"class":36,"line":2162},[34,100042,100043],{"class":187},"        [19, 20, 21, 22, 23, 24],\n",[34,100045,100046],{"class":36,"line":2191},[34,100047,100048],{"class":187},"        [25, 26, 27, 28, 29, 30]]),\n",[34,100050,100051],{"class":36,"line":2196},[34,100052,100053],{"class":187}," array([[31, 32, 33, 34, 35, 36]])]\n",[34,100055,100056],{"class":36,"line":2213},[34,100057,188],{"class":187},[34,100059,100060],{"class":36,"line":2218},[34,100061,100062],{"class":40},"#axis=1 按照列来分\n",[34,100064,100065,100067,100069,100071,100073,100075,100077],{"class":36,"line":2223},[34,100066,99954],{"class":59},[34,100068,309],{"class":63},[34,100070,67],{"class":59},[34,100072,47975],{"class":5680},[34,100074,447],{"class":112},[34,100076,64],{"class":63},[34,100078,623],{"class":59},[34,100080,100081],{"class":36,"line":2228},[34,100082,96223],{"class":40},[34,100084,100085],{"class":36,"line":2242},[34,100086,188],{"class":187},[34,100088,100089],{"class":36,"line":2247},[34,100090,100091],{"class":187},"[array([[ 1,  2],\n",[34,100093,100094],{"class":36,"line":3041},[34,100095,100096],{"class":187},"        [ 7,  8],\n",[34,100098,100099],{"class":36,"line":3055},[34,100100,100101],{"class":187},"        [13, 14],\n",[34,100103,100104],{"class":36,"line":3063},[34,100105,100106],{"class":187},"        [19, 20],\n",[34,100108,100109],{"class":36,"line":3068},[34,100110,100111],{"class":187},"        [25, 26],\n",[34,100113,100114],{"class":36,"line":3074},[34,100115,100116],{"class":187},"        [31, 32]]),\n",[34,100118,100119],{"class":36,"line":3080},[34,100120,100121],{"class":187}," array([[ 3,  4],\n",[34,100123,100124],{"class":36,"line":3085},[34,100125,100126],{"class":187},"        [ 9, 10],\n",[34,100128,100129],{"class":36,"line":8412},[34,100130,100131],{"class":187},"        [15, 16],\n",[34,100133,100134],{"class":36,"line":8436},[34,100135,100136],{"class":187},"        [21, 22],\n",[34,100138,100139],{"class":36,"line":8441},[34,100140,100141],{"class":187},"        [27, 28],\n",[34,100143,100144],{"class":36,"line":8447},[34,100145,100146],{"class":187},"        [33, 34]]),\n",[34,100148,100149],{"class":36,"line":8474},[34,100150,100151],{"class":187}," array([[ 5,  6],\n",[34,100153,100154],{"class":36,"line":8479},[34,100155,100156],{"class":187},"        [11, 12],\n",[34,100158,100159],{"class":36,"line":8485},[34,100160,100161],{"class":187},"        [17, 18],\n",[34,100163,100164],{"class":36,"line":8497},[34,100165,100166],{"class":187},"        [23, 24],\n",[34,100168,100169],{"class":36,"line":8509},[34,100170,100171],{"class":187},"        [29, 30],\n",[34,100173,100174],{"class":36,"line":8521},[34,100175,100176],{"class":187},"        [35, 36]])]\n",[34,100178,100179],{"class":36,"line":10180},[34,100180,100001],{"class":187},[34,100182,100183],{"class":36,"line":10205},[34,100184,99861],{"class":40},[34,100186,100187,100189,100191,100193,100195,100197,100199,100201,100203],{"class":36,"line":10228},[34,100188,100010],{"class":59},[34,100190,64],{"class":63},[34,100192,67],{"class":59},[34,100194,70],{"class":63},[34,100196,42071],{"class":59},[34,100198,47975],{"class":5680},[34,100200,447],{"class":112},[34,100202,64],{"class":63},[34,100204,623],{"class":59},[34,100206,100207],{"class":36,"line":10252},[34,100208,182],{"class":40},[34,100210,100211],{"class":36,"line":10257},[34,100212,188],{"class":187},[34,100214,100215],{"class":36,"line":10262},[34,100216,100217],{"class":187},"[array([[ 1],\n",[34,100219,100220],{"class":36,"line":10267},[34,100221,100222],{"class":187},"        [ 7],\n",[34,100224,100225],{"class":36,"line":10276},[34,100226,100227],{"class":187},"        [13],\n",[34,100229,100230],{"class":36,"line":10281},[34,100231,100232],{"class":187},"        [19],\n",[34,100234,100235],{"class":36,"line":10287},[34,100236,100237],{"class":187},"        [25],\n",[34,100239,100240],{"class":36,"line":10308},[34,100241,100242],{"class":187},"        [31]]),\n",[34,100244,100245],{"class":36,"line":10314},[34,100246,100247],{"class":187}," array([[ 2],\n",[34,100249,100250],{"class":36,"line":10328},[34,100251,100252],{"class":187},"        [ 8],\n",[34,100254,100255],{"class":36,"line":10334},[34,100256,100257],{"class":187},"        [14],\n",[34,100259,100260],{"class":36,"line":10361},[34,100261,100262],{"class":187},"        [20],\n",[34,100264,100265],{"class":36,"line":10370},[34,100266,100267],{"class":187},"        [26],\n",[34,100269,100270],{"class":36,"line":10376},[34,100271,100272],{"class":187},"        [32]]),\n",[34,100274,100275],{"class":36,"line":10384},[34,100276,100277],{"class":187}," array([[ 3,  4,  5,  6],\n",[34,100279,100280],{"class":36,"line":10389},[34,100281,100282],{"class":187},"        [ 9, 10, 11, 12],\n",[34,100284,100285],{"class":36,"line":17068},[34,100286,100287],{"class":187},"        [15, 16, 17, 18],\n",[34,100289,100290],{"class":36,"line":17074},[34,100291,100292],{"class":187},"        [21, 22, 23, 24],\n",[34,100294,100295],{"class":36,"line":17097},[34,100296,100297],{"class":187},"        [27, 28, 29, 30],\n",[34,100299,100300],{"class":36,"line":17103},[34,100301,100302],{"class":187},"        [33, 34, 35, 36]])]\n",[34,100304,100305],{"class":36,"line":17126},[34,100306,188],{"class":187},[34,100308,100309],{"class":36,"line":17140},[34,100310,100311],{"class":40},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[34,100313,100314,100317,100319],{"class":36,"line":17160},[34,100315,100316],{"class":59},"np.vsplit(aa,",[34,100318,309],{"class":63},[34,100320,623],{"class":59},[34,100322,100323],{"class":36,"line":17166},[34,100324,182],{"class":40},[34,100326,100327],{"class":36,"line":17177},[34,100328,188],{"class":187},[34,100330,100331],{"class":36,"line":17200},[34,100332,99971],{"class":187},[34,100334,100335],{"class":36,"line":17222},[34,100336,99976],{"class":187},[34,100338,100339],{"class":36,"line":17227},[34,100340,99981],{"class":187},[34,100342,100343],{"class":36,"line":17233},[34,100344,99986],{"class":187},[34,100346,100347],{"class":36,"line":17247},[34,100348,99991],{"class":187},[34,100350,100351],{"class":36,"line":17260},[34,100352,99996],{"class":187},[34,100354,100355],{"class":36,"line":17265},[34,100356,188],{"class":187},[34,100358,100359,100362,100364],{"class":36,"line":17279},[34,100360,100361],{"class":59},"np.hsplit(aa,",[34,100363,309],{"class":63},[34,100365,623],{"class":59},[34,100367,100368],{"class":36,"line":17284},[34,100369,182],{"class":40},[34,100371,100372],{"class":36,"line":17290},[34,100373,188],{"class":187},[34,100375,100376],{"class":36,"line":17295},[34,100377,100091],{"class":187},[34,100379,100380],{"class":36,"line":17309},[34,100381,100096],{"class":187},[34,100383,100384],{"class":36,"line":17314},[34,100385,100101],{"class":187},[34,100387,100388],{"class":36,"line":17319},[34,100389,100106],{"class":187},[34,100391,100392],{"class":36,"line":17333},[34,100393,100111],{"class":187},[34,100395,100396],{"class":36,"line":17345},[34,100397,100116],{"class":187},[34,100399,100400],{"class":36,"line":17350},[34,100401,100121],{"class":187},[34,100403,100404],{"class":36,"line":17363},[34,100405,100126],{"class":187},[34,100407,100408],{"class":36,"line":17368},[34,100409,100131],{"class":187},[34,100411,100412],{"class":36,"line":17373},[34,100413,100136],{"class":187},[34,100415,100416],{"class":36,"line":17378},[34,100417,100141],{"class":187},[34,100419,100420],{"class":36,"line":17391},[34,100421,100146],{"class":187},[34,100423,100424],{"class":36,"line":17396},[34,100425,100151],{"class":187},[34,100427,100428],{"class":36,"line":33096},[34,100429,100156],{"class":187},[34,100431,100432],{"class":36,"line":33102},[34,100433,100161],{"class":187},[34,100435,100436],{"class":36,"line":33108},[34,100437,100166],{"class":187},[34,100439,100440],{"class":36,"line":33114},[34,100441,100171],{"class":187},[34,100443,100444],{"class":36,"line":33120},[34,100445,100176],{"class":187},[34,100447,100448],{"class":36,"line":33131},[34,100449,188],{"class":187},[34,100451,100452,100455,100457,100459,100461],{"class":36,"line":33137},[34,100453,100454],{"class":59},"np.vsplit(aa,[",[34,100456,70],{"class":63},[34,100458,67],{"class":59},[34,100460,927],{"class":63},[34,100462,5121],{"class":59},[34,100464,100465],{"class":36,"line":33157},[34,100466,182],{"class":40},[34,100468,100469],{"class":36,"line":33163},[34,100470,188],{"class":187},[34,100472,100473],{"class":36,"line":33174},[34,100474,99971],{"class":187},[34,100476,100477],{"class":36,"line":33180},[34,100478,99976],{"class":187},[34,100480,100481],{"class":36,"line":33186},[34,100482,99981],{"class":187},[34,100484,100485],{"class":36,"line":33192},[34,100486,100043],{"class":187},[34,100488,100489],{"class":36,"line":33198},[34,100490,100048],{"class":187},[34,100492,100493],{"class":36,"line":33204},[34,100494,100053],{"class":187},[34,100496,100497],{"class":36,"line":33210},[34,100498,100001],{"class":187},[532,100500,100501],{},"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":22,"searchDepth":44,"depth":44,"links":100503},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99769,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100510,"title":100511,"body":100512,"description":537,"extension":538,"meta":101006,"navigation":540,"path":101007,"seo":101008,"stem":101009,"__hash__":101010},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100513,"toc":100997},[100514,100517,100520,100545,100549,100608,100660,100664,100666,100702,100756,100758,100796,100867,100871,100876,100880,100883,100916,100919,100923,100926,100929,100932,100935,100940,100944,100947,100950,100953,100956,100961,100965,100970,100973,100994],[10,100515,100511],{"id":100516},"_9数学函数",[14,100518,100519],{},"补充回顾：python的列表推导式",[25,100521,100523],{"className":27,"code":100522,"language":29,"meta":22,"style":22},"[1\u002Fi for i in a]\n",[31,100524,100525],{"__ignoreMap":22},[34,100526,100527,100529,100531,100533,100536,100538,100540,100542],{"class":36,"line":37},[34,100528,1495],{"class":59},[34,100530,64],{"class":63},[34,100532,1190],{"class":112},[34,100534,100535],{"class":59},"i ",[34,100537,3489],{"class":112},[34,100539,9902],{"class":59},[34,100541,26508],{"class":112},[34,100543,100544],{"class":59}," a]\n",[555,100546,100548],{"id":100547},"_91-求倒数","9.1 求倒数",[25,100550,100552],{"className":27,"code":100551,"language":29,"meta":22,"style":22},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[31,100553,100554,100559,100587,100599],{"__ignoreMap":22},[34,100555,100556],{"class":36,"line":37},[34,100557,100558],{"class":40},"#数组求倒数\n",[34,100560,100561,100563,100565,100567,100569,100571,100573,100575,100577,100579,100581,100583,100585],{"class":36,"line":44},[34,100562,847],{"class":59},[34,100564,447],{"class":112},[34,100566,1495],{"class":59},[34,100568,64],{"class":63},[34,100570,67],{"class":59},[34,100572,70],{"class":63},[34,100574,67],{"class":59},[34,100576,309],{"class":63},[34,100578,67],{"class":59},[34,100580,217],{"class":63},[34,100582,67],{"class":59},[34,100584,927],{"class":63},[34,100586,73],{"class":59},[34,100588,100589,100591,100593,100596],{"class":36,"line":50},[34,100590,872],{"class":59},[34,100592,447],{"class":112},[34,100594,100595],{"class":59},"np.array(a)",[34,100597,100598],{"class":40},"#将列表转换为数组\n",[34,100600,100601,100603,100605],{"class":36,"line":56},[34,100602,64],{"class":63},[34,100604,1190],{"class":112},[34,100606,100607],{"class":59},"b\n",[25,100609,100611],{"className":27,"code":100610,"language":29,"meta":22,"style":22},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[31,100612,100613,100641,100650,100655],{"__ignoreMap":22},[34,100614,100615,100617,100619,100621,100623,100625,100627,100629,100631,100633,100635,100637,100639],{"class":36,"line":37},[34,100616,847],{"class":59},[34,100618,447],{"class":112},[34,100620,1495],{"class":59},[34,100622,64],{"class":63},[34,100624,67],{"class":59},[34,100626,70],{"class":63},[34,100628,67],{"class":59},[34,100630,309],{"class":63},[34,100632,67],{"class":59},[34,100634,217],{"class":63},[34,100636,67],{"class":59},[34,100638,927],{"class":63},[34,100640,73],{"class":59},[34,100642,100643,100645,100647],{"class":36,"line":44},[34,100644,872],{"class":59},[34,100646,447],{"class":112},[34,100648,100649],{"class":59},"np.array(a)\n",[34,100651,100652],{"class":36,"line":50},[34,100653,100654],{"class":40},"#调用numpy中的函数reciprocal()\n",[34,100656,100657],{"class":36,"line":56},[34,100658,100659],{"class":59},"np.reciprocal(b)\n",[555,100661,100663],{"id":100662},"_92-求平方","9.2 求平方",[14,100665,94989],{},[25,100667,100669],{"className":27,"code":100668,"language":29,"meta":22,"style":22},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[31,100670,100671,100676,100681,100697],{"__ignoreMap":22},[34,100672,100673],{"class":36,"line":37},[34,100674,100675],{"class":40},"#square()，求平方\n",[34,100677,100678],{"class":36,"line":44},[34,100679,100680],{"class":40},"#一维数组\n",[34,100682,100683,100685,100687,100689,100691,100693,100695],{"class":36,"line":50},[34,100684,847],{"class":59},[34,100686,447],{"class":112},[34,100688,93463],{"class":59},[34,100690,64],{"class":63},[34,100692,67],{"class":59},[34,100694,1053],{"class":63},[34,100696,623],{"class":59},[34,100698,100699],{"class":36,"line":56},[34,100700,100701],{"class":59},"np.square(a)\n",[25,100703,100705],{"className":27,"code":100704,"language":29,"meta":22,"style":22},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[31,100706,100707,100712,100717,100738],{"__ignoreMap":22},[34,100708,100709],{"class":36,"line":37},[34,100710,100711],{"class":40},"#或者通过循环遍历的形式来计算\n",[34,100713,100714],{"class":36,"line":44},[34,100715,100716],{"class":40},"#这是一个列表\n",[34,100718,100719,100722,100724,100726,100728,100730,100732,100735],{"class":36,"line":50},[34,100720,100721],{"class":59},"[i",[34,100723,1062],{"class":112},[34,100725,100535],{"class":59},[34,100727,3489],{"class":112},[34,100729,9902],{"class":59},[34,100731,26508],{"class":112},[34,100733,100734],{"class":59}," a]",[34,100736,100737],{"class":40},"#这个求完之后在数列当中\n",[34,100739,100740,100743,100745,100747,100749,100751,100753],{"class":36,"line":56},[34,100741,100742],{"class":59},"np.array([i",[34,100744,1062],{"class":112},[34,100746,100535],{"class":59},[34,100748,3489],{"class":112},[34,100750,9902],{"class":59},[34,100752,26508],{"class":112},[34,100754,100755],{"class":59}," a])\n",[14,100757,93752],{},[25,100759,100761],{"className":27,"code":100760,"language":29,"meta":22,"style":22},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[31,100762,100763,100767,100791],{"__ignoreMap":22},[34,100764,100765],{"class":36,"line":37},[34,100766,93762],{"class":40},[34,100768,100769,100771,100773,100775,100777,100779,100781,100783,100785,100787,100789],{"class":36,"line":44},[34,100770,93767],{"class":59},[34,100772,447],{"class":112},[34,100774,93463],{"class":59},[34,100776,64],{"class":63},[34,100778,67],{"class":59},[34,100780,1130],{"class":63},[34,100782,93468],{"class":59},[34,100784,217],{"class":63},[34,100786,67],{"class":59},[34,100788,309],{"class":63},[34,100790,623],{"class":59},[34,100792,100793],{"class":36,"line":50},[34,100794,100795],{"class":59},"np.square(aa)\n",[25,100797,100799],{"className":27,"code":100798,"language":29,"meta":22,"style":22},"#传统的方式\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",[31,100800,100801,100806,100815,100831,100847,100862],{"__ignoreMap":22},[34,100802,100803],{"class":36,"line":37},[34,100804,100805],{"class":40},"#传统的方式\n",[34,100807,100808,100810,100812],{"class":36,"line":44},[34,100809,98574],{"class":59},[34,100811,447],{"class":112},[34,100813,100814],{"class":59},"np.empty_like(aa)\n",[34,100816,100817,100819,100821,100823,100825,100827,100829],{"class":36,"line":50},[34,100818,3489],{"class":112},[34,100820,9902],{"class":59},[34,100822,26508],{"class":112},[34,100824,32906],{"class":63},[34,100826,617],{"class":59},[34,100828,217],{"class":63},[34,100830,31249],{"class":59},[34,100832,100833,100835,100837,100839,100841,100843,100845],{"class":36,"line":56},[34,100834,3665],{"class":112},[34,100836,9964],{"class":59},[34,100838,26508],{"class":112},[34,100840,32906],{"class":63},[34,100842,617],{"class":59},[34,100844,309],{"class":63},[34,100846,31249],{"class":59},[34,100848,100849,100852,100854,100857,100859],{"class":36,"line":107},[34,100850,100851],{"class":59},"        bb[i,j]",[34,100853,447],{"class":112},[34,100855,100856],{"class":59},"aa[i,j]",[34,100858,1062],{"class":112},[34,100860,100861],{"class":59},"aa[i,j]\n",[34,100863,100864],{"class":36,"line":196},[34,100865,100866],{"class":59},"bb\n",[555,100868,100870],{"id":100869},"_93-求各元素的符号","9.3 求各元素的符号",[14,100872,100873],{},[20,100874],{"alt":22,"src":100875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[555,100877,100879],{"id":100878},"_94-modf函数","9.4 modf函数",[14,100881,100882],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[25,100884,100886],{"className":27,"code":100885,"language":29,"meta":22,"style":22},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[31,100887,100888,100911],{"__ignoreMap":22},[34,100889,100890,100892,100894,100896,100898,100900,100902,100904,100906,100909],{"class":36,"line":37},[34,100891,847],{"class":59},[34,100893,447],{"class":112},[34,100895,93463],{"class":59},[34,100897,113],{"class":112},[34,100899,1053],{"class":63},[34,100901,67],{"class":59},[34,100903,1053],{"class":63},[34,100905,67],{"class":59},[34,100907,100908],{"class":63},"0.3",[34,100910,623],{"class":59},[34,100912,100913],{"class":36,"line":44},[34,100914,100915],{"class":59},"np.modf(a)\n",[14,100917,100918],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[555,100920,100922],{"id":100921},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100924,100925],{},"np.cell()",[14,100927,100928],{},"np.floor()",[14,100930,100931],{},"np.rint()",[14,100933,100934],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100936,100937],{},[20,100938],{"alt":22,"src":100939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[555,100941,100943],{"id":100942},"_96-around函数","9.6 around()函数",[14,100945,100946],{},"around()函数也可以实现对数的小数位数进行操作",[14,100948,100949],{},"其中的参数：",[14,100951,100952],{},"1.要传的数组",[14,100954,100955],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100957,100958],{},[20,100959],{"alt":22,"src":100960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[555,100962,100964],{"id":100963},"_97-三角函数","9.7 三角函数",[14,100966,100967],{},[20,100968],{"alt":22,"src":100969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100971,100972],{},"引入图像模块非常重要",[25,100974,100976],{"className":27,"code":100975,"language":29,"meta":22,"style":22},"from matplotlib import pyplot as plt\n",[31,100977,100978],{"__ignoreMap":22},[34,100979,100980,100982,100985,100987,100990,100992],{"class":36,"line":37},[34,100981,31200],{"class":112},[34,100983,100984],{"class":59}," matplotlib ",[34,100986,30855],{"class":112},[34,100988,100989],{"class":59}," pyplot ",[34,100991,31846],{"class":112},[34,100993,31900],{"class":59},[532,100995,100996],{},"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":22,"searchDepth":44,"depth":44,"links":100998},[100999,101000,101001,101002,101003,101004,101005],{"id":100547,"depth":44,"text":100548},{"id":100662,"depth":44,"text":100663},{"id":100869,"depth":44,"text":100870},{"id":100878,"depth":44,"text":100879},{"id":100921,"depth":44,"text":100922},{"id":100942,"depth":44,"text":100943},{"id":100963,"depth":44,"text":100964},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100511,"description":537},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101012,"title":101013,"body":101014,"description":537,"extension":538,"meta":101018,"navigation":540,"path":101019,"seo":101020,"stem":101021,"__hash__":101022},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101015,"toc":101016},[],{"title":22,"searchDepth":44,"depth":44,"links":101017},[],{"category":50881},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101013,"description":537},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101024,"title":101025,"body":101026,"description":22,"extension":538,"meta":103034,"navigation":540,"path":103035,"seo":103036,"stem":103037,"__hash__":103038},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101027,"toc":103010},[101028,101031,101035,101038,101041,101047,101050,101073,101076,101110,101113,101154,101158,101161,101254,101257,101301,101304,101321,101324,101338,101341,101344,101389,101392,101429,101433,101436,101442,101447,101467,101471,101474,101540,101543,101561,101565,101568,101597,101607,101613,101617,101620,101626,101637,101641,101644,101674,101677,101957,101960,101963,101974,101977,101980,102002,102009,102012,102030,102033,102036,102050,102058,102061,102087,102093,102096,102099,102109,102121,102141,102150,102170,102180,102204,102217,102231,102236,102277,102294,102319,102331,102351,102357,102402,102421,102438,102451,102467,102474,102486,102495,102530,102551,102576,102589,102613,102628,102653,102656,102677,102686,102689,102700,102704,102707,102713,102725,102732,102736,102739,102751,102754,102768,102771,102781,102791,102794,102834,102837,102841,102847,102850,102864,102868,102871,102904,102908,102911,102934,102942,102945,102951,102957,102960,102963,102991,102995,102998,103004,103007],[10,101029,101025],{"id":101030},"_1环境安装与第一个-mujoco-程序",[555,101032,101034],{"id":101033},"_1目标说明","1.目标说明",[14,101036,101037],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101039,101040],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[25,101042,101045],{"className":101043,"code":101044,"language":5651,"meta":22},[5649],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[31,101046,101044],{"__ignoreMap":22},[14,101048,101049],{},"需要掌握:",[567,101051,101052,101055,101058,101063,101068],{},[570,101053,101054],{},"Fedora 44 下 MuJoCo 的系统依赖",[570,101056,101057],{},"Python 虚拟环境创建",[570,101059,101060],{},[31,101061,101062],{},"mujoco.MjModel",[570,101064,101065],{},[31,101066,101067],{},"mujoco.MjData",[570,101069,101070],{},[31,101071,101072],{},"mujoco.mj_step(model, data)",[14,101074,101075],{},"MuJoCo 中最重要的两个对象:",[748,101077,101078,101088],{},[751,101079,101080],{},[754,101081,101082,101085],{},[757,101083,101084],{"align":24200},"对象",[757,101086,101087],{"align":24200},"含义",[795,101089,101090,101100],{},[754,101091,101092,101097],{},[800,101093,101094],{"align":24200},[31,101095,101096],{},"MjModel",[800,101098,101099],{"align":24200},"模型结构，来自 XML，基本不随时间变化",[754,101101,101102,101107],{},[800,101103,101104],{"align":24200},[31,101105,101106],{},"MjData",[800,101108,101109],{"align":24200},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101111,101112],{},"可以先用一个类比理解：",[748,101114,101115,101125],{},[751,101116,101117],{},[754,101118,101119,101122],{},[757,101120,101121],{"align":24200},"类比",[757,101123,101124],{"align":24200},"MuJoCo 对象",[795,101126,101127,101136,101145],{},[754,101128,101129,101132],{},[800,101130,101131],{"align":24200},"游戏地图和角色配置",[800,101133,101134],{"align":24200},[31,101135,101096],{},[754,101137,101138,101141],{},[800,101139,101140],{"align":24200},"游戏运行到当前帧的状态",[800,101142,101143],{"align":24200},[31,101144,101106],{},[754,101146,101147,101150],{},[800,101148,101149],{"align":24200},"前进一帧",[800,101151,101152],{"align":24200},[31,101153,101072],{},[555,101155,101157],{"id":101156},"_2环境与依赖安装","2.环境与依赖安装",[14,101159,101160],{},"Fedora 44 系统依赖:",[25,101162,101164],{"className":24286,"code":101163,"language":24288,"meta":22,"style":22},"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",[31,101165,101166,101178,101191,101204,101214,101224,101243],{"__ignoreMap":22},[34,101167,101168,101170,101172,101174,101176],{"class":36,"line":37},[34,101169,25041],{"class":2427},[34,101171,26780],{"class":187},[34,101173,24298],{"class":187},[34,101175,26865],{"class":63},[34,101177,25143],{"class":63},[34,101179,101180,101183,101186,101189],{"class":36,"line":44},[34,101181,101182],{"class":187},"  python3",[34,101184,101185],{"class":187}," python3-pip",[34,101187,101188],{"class":187}," python3-virtualenv",[34,101190,25143],{"class":63},[34,101192,101193,101196,101199,101202],{"class":36,"line":50},[34,101194,101195],{"class":187},"  mesa-libGL",[34,101197,101198],{"class":187}," mesa-libGLU",[34,101200,101201],{"class":187}," mesa-dri-drivers",[34,101203,25143],{"class":63},[34,101205,101206,101209,101212],{"class":36,"line":56},[34,101207,101208],{"class":187},"  libglvnd-glx",[34,101210,101211],{"class":187}," libglvnd-opengl",[34,101213,25143],{"class":63},[34,101215,101216,101219,101222],{"class":36,"line":107},[34,101217,101218],{"class":187},"  glfw",[34,101220,101221],{"class":187}," glfw-devel",[34,101223,25143],{"class":63},[34,101225,101226,101229,101232,101235,101238,101241],{"class":36,"line":196},[34,101227,101228],{"class":187},"  libX11",[34,101230,101231],{"class":187}," libXcursor",[34,101233,101234],{"class":187}," libXi",[34,101236,101237],{"class":187}," libXinerama",[34,101239,101240],{"class":187}," libXrandr",[34,101242,25143],{"class":63},[34,101244,101245,101248,101251],{"class":36,"line":202},[34,101246,101247],{"class":187},"  gcc",[34,101249,101250],{"class":187}," gcc-c++",[34,101252,101253],{"class":187}," make\n",[14,101255,101256],{},"创建 Python 环境:",[25,101258,101260],{"className":24286,"code":101259,"language":24288,"meta":22,"style":22},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[31,101261,101262,101276,101284],{"__ignoreMap":22},[34,101263,101264,101267,101270,101273],{"class":36,"line":37},[34,101265,101266],{"class":2427},"python3",[34,101268,101269],{"class":63}," -m",[34,101271,101272],{"class":187}," venv",[34,101274,101275],{"class":187}," .venv\n",[34,101277,101278,101281],{"class":36,"line":44},[34,101279,101280],{"class":63},"source",[34,101282,101283],{"class":187}," .venv\u002Fbin\u002Factivate\n",[34,101285,101286,101288,101290,101293,101295,101298],{"class":36,"line":50},[34,101287,29],{"class":2427},[34,101289,101269],{"class":63},[34,101291,101292],{"class":187}," pip",[34,101294,24298],{"class":187},[34,101296,101297],{"class":63}," --upgrade",[34,101299,101300],{"class":187}," pip\n",[14,101302,101303],{},"pip 安装:",[25,101305,101307],{"className":24286,"code":101306,"language":24288,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy\n",[31,101308,101309],{"__ignoreMap":22},[34,101310,101311,101313,101315,101318],{"class":36,"line":37},[34,101312,24295],{"class":2427},[34,101314,24298],{"class":187},[34,101316,101317],{"class":187}," \"mujoco>=2.3\"",[34,101319,101320],{"class":187}," numpy\n",[14,101322,101323],{},"安装完成后，先做最小检查：",[25,101325,101327],{"className":24286,"code":101326,"language":24288,"meta":22,"style":22},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[31,101328,101329],{"__ignoreMap":22},[34,101330,101331,101333,101335],{"class":36,"line":37},[34,101332,29],{"class":2427},[34,101334,30823],{"class":63},[34,101336,101337],{"class":187}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101339,101340],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101342,101343],{},"conda 安装:",[25,101345,101347],{"className":24286,"code":101346,"language":24288,"meta":22,"style":22},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[31,101348,101349,101369,101379],{"__ignoreMap":22},[34,101350,101351,101353,101355,101357,101360,101363,101366],{"class":36,"line":37},[34,101352,30795],{"class":2427},[34,101354,29641],{"class":187},[34,101356,25580],{"class":63},[34,101358,101359],{"class":187}," mujoco-study",[34,101361,101362],{"class":187}," python=",[34,101364,101365],{"class":63},"3.10",[34,101367,101368],{"class":63}," -y\n",[34,101370,101371,101373,101376],{"class":36,"line":44},[34,101372,30795],{"class":2427},[34,101374,101375],{"class":187}," activate",[34,101377,101378],{"class":187}," mujoco-study\n",[34,101380,101381,101383,101385,101387],{"class":36,"line":50},[34,101382,24295],{"class":2427},[34,101384,24298],{"class":187},[34,101386,101317],{"class":187},[34,101388,101320],{"class":187},[14,101390,101391],{},"版本冲突说明:",[567,101393,101394,101400,101410,101419],{},[570,101395,101396,101397,28850],{},"不要安装 ",[31,101398,101399],{},"mujoco-py",[570,101401,101402,101403,101405,101406,101409],{},"如果旧项目里同时安装了 ",[31,101404,101399],{}," 和 ",[31,101407,101408],{},"mujoco","，建议新建干净虚拟环境。",[570,101411,101412,101415,101416,28850],{},[31,101413,101414],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[31,101417,101418],{},"~\u002F.mujoco\u002Fmujoco210",[570,101420,101421,101422,83000,101425,101428],{},"离屏渲染可能涉及 OpenGL 后端，",[31,101423,101424],{},"MUJOCO_GL=egl",[31,101426,101427],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[555,101430,101432],{"id":101431},"_3核心概念解释","3.核心概念解释",[14,101434,101435],{},"MuJoCo 的基本执行流程:",[25,101437,101440],{"className":101438,"code":101439,"language":5651,"meta":22},[5649],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[31,101441,101439],{"__ignoreMap":22},[14,101443,101444,101446],{},[31,101445,101096],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101448,101449,101451,101452,822,101455,822,101458,822,101461,822,101464,28850],{},[31,101450,101106],{}," 存放仿真运行时状态，例如 ",[31,101453,101454],{},"data.time",[31,101456,101457],{},"data.qpos",[31,101459,101460],{},"data.qvel",[31,101462,101463],{},"data.ctrl",[31,101465,101466],{},"data.xpos",[584,101468,101470],{"id":101469},"xml-是什么","XML 是什么",[14,101472,101473],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[25,101475,101477],{"className":53528,"code":101476,"language":53530,"meta":22,"style":22},"\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",[31,101478,101479,101501,101532],{"__ignoreMap":22},[34,101480,101481,101483,101485,101487,101489,101491,101494,101496,101499],{"class":36,"line":37},[34,101482,1515],{"class":59},[34,101484,52261],{"class":51761},[34,101486,15384],{"class":2427},[34,101488,447],{"class":59},[34,101490,53952],{"class":187},[34,101492,101493],{"class":2427}," pos",[34,101495,447],{"class":59},[34,101497,101498],{"class":187},"\"0 0 1\"",[34,101500,51768],{"class":59},[34,101502,101503,101505,101508,101510,101512,101515,101517,101519,101521,101524,101526,101529],{"class":36,"line":44},[34,101504,52605],{"class":59},[34,101506,101507],{"class":51761},"geom",[34,101509,15384],{"class":2427},[34,101511,447],{"class":59},[34,101513,101514],{"class":187},"\"box_geom\"",[34,101516,54285],{"class":2427},[34,101518,447],{"class":59},[34,101520,53952],{"class":187},[34,101522,101523],{"class":2427}," size",[34,101525,447],{"class":59},[34,101527,101528],{"class":187},"\"0.1 0.1 0.1\"",[34,101530,101531],{"class":59},"\u002F>\n",[34,101533,101534,101536,101538],{"class":36,"line":50},[34,101535,52246],{"class":59},[34,101537,52261],{"class":51761},[34,101539,51768],{"class":59},[14,101541,101542],{},"这段意思是：",[567,101544,101545,101551,101558],{},[570,101546,101547,101548,101550],{},"创建一个叫 ",[31,101549,54175],{}," 的刚体。",[570,101552,101553,101554,101557],{},"它初始放在 ",[31,101555,101556],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[570,101559,101560],{},"它里面有一个盒子形状的几何体。",[584,101562,101564],{"id":101563},"timestep-是什么","timestep 是什么",[14,101566,101567],{},"XML 里的：",[25,101569,101571],{"className":53528,"code":101570,"language":53530,"meta":22,"style":22},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[31,101572,101573],{"__ignoreMap":22},[34,101574,101575,101577,101579,101582,101584,101587,101590,101592,101595],{"class":36,"line":37},[34,101576,1515],{"class":59},[34,101578,69627],{"class":51761},[34,101580,101581],{"class":2427}," timestep",[34,101583,447],{"class":59},[34,101585,101586],{"class":187},"\"0.01\"",[34,101588,101589],{"class":2427}," gravity",[34,101591,447],{"class":59},[34,101593,101594],{"class":187},"\"0 0 -9.81\"",[34,101596,101531],{"class":59},[14,101598,101599,101600,101603,101604,101606],{},"表示每调用一次 ",[31,101601,101602],{},"mj_step","，仿真时间前进 ",[31,101605,39448],{}," 秒。循环 100 次，大约就是 1 秒：",[25,101608,101611],{"className":101609,"code":101610,"language":5651,"meta":22},[5649],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[31,101612,101610],{"__ignoreMap":22},[584,101614,101616],{"id":101615},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101618,101619],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[25,101621,101624],{"className":101622,"code":101623,"language":5651,"meta":22},[5649],"x y z qw qx qy qz\n",[31,101625,101623],{"__ignoreMap":22},[14,101627,101628,101629,101632,101633,101636],{},"表示一个自由刚体的位置和姿态。其中 ",[31,101630,101631],{},"x y z"," 是位置，",[31,101634,101635],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[555,101638,101640],{"id":101639},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101642,101643],{},"新建文件:",[25,101645,101647],{"className":24286,"code":101646,"language":24288,"meta":22,"style":22},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[31,101648,101649,101659,101666],{"__ignoreMap":22},[34,101650,101651,101654,101656],{"class":36,"line":37},[34,101652,101653],{"class":2427},"mkdir",[34,101655,29681],{"class":63},[34,101657,101658],{"class":187}," mujoco_tutorial\n",[34,101660,101661,101664],{"class":36,"line":44},[34,101662,101663],{"class":63},"cd",[34,101665,101658],{"class":187},[34,101667,101668,101671],{"class":36,"line":50},[34,101669,101670],{"class":2427},"touch",[34,101672,101673],{"class":187}," ch1_first_sim.py\n",[14,101675,101676],{},"写入:",[25,101678,101680],{"className":27,"code":101679,"language":29,"meta":22,"style":22},"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",[31,101681,101682,101689,101693,101697,101707,101712,101717,101721,101726,101731,101735,101740,101745,101750,101755,101760,101765,101769,101773,101777,101790,101804,101814,101818,101830,101842,101854,101866,101878,101882,101899,101904,101908,101919,101930,101934,101938,101952],{"__ignoreMap":22},[34,101683,101684,101686],{"class":36,"line":37},[34,101685,30855],{"class":112},[34,101687,101688],{"class":59}," mujoco\n",[34,101690,101691],{"class":36,"line":44},[34,101692,2864],{"emptyLinePlaceholder":540},[34,101694,101695],{"class":36,"line":50},[34,101696,2864],{"emptyLinePlaceholder":540},[34,101698,101699,101702,101704],{"class":36,"line":56},[34,101700,101701],{"class":63},"XML",[34,101703,14028],{"class":112},[34,101705,101706],{"class":187}," \"\"\"\n",[34,101708,101709],{"class":36,"line":107},[34,101710,101711],{"class":187},"\u003Cmujoco model=\"first_sim\">\n",[34,101713,101714],{"class":36,"line":196},[34,101715,101716],{"class":187},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,101718,101719],{"class":36,"line":202},[34,101720,2864],{"emptyLinePlaceholder":540},[34,101722,101723],{"class":36,"line":207},[34,101724,101725],{"class":187},"  \u003Cworldbody>\n",[34,101727,101728],{"class":36,"line":222},[34,101729,101730],{"class":187},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,101732,101733],{"class":36,"line":227},[34,101734,2864],{"emptyLinePlaceholder":540},[34,101736,101737],{"class":36,"line":232},[34,101738,101739],{"class":187},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,101741,101742],{"class":36,"line":238},[34,101743,101744],{"class":187},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[34,101746,101747],{"class":36,"line":244},[34,101748,101749],{"class":187},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,101751,101752],{"class":36,"line":250},[34,101753,101754],{"class":187},"    \u003C\u002Fbody>\n",[34,101756,101757],{"class":36,"line":256},[34,101758,101759],{"class":187},"  \u003C\u002Fworldbody>\n",[34,101761,101762],{"class":36,"line":261},[34,101763,101764],{"class":187},"\u003C\u002Fmujoco>\n",[34,101766,101767],{"class":36,"line":267},[34,101768,96157],{"class":187},[34,101770,101771],{"class":36,"line":2138},[34,101772,2864],{"emptyLinePlaceholder":540},[34,101774,101775],{"class":36,"line":2143},[34,101776,2864],{"emptyLinePlaceholder":540},[34,101778,101779,101781,101783,101786,101788],{"class":36,"line":2157},[34,101780,32410],{"class":112},[34,101782,2437],{"class":2427},[34,101784,101785],{"class":59},"() -> ",[34,101787,96145],{"class":63},[34,101789,4203],{"class":59},[34,101791,101792,101795,101797,101800,101802],{"class":36,"line":2162},[34,101793,101794],{"class":59},"    model ",[34,101796,447],{"class":112},[34,101798,101799],{"class":59}," mujoco.MjModel.from_xml_string(",[34,101801,101701],{"class":63},[34,101803,623],{"class":59},[34,101805,101806,101809,101811],{"class":36,"line":2191},[34,101807,101808],{"class":59},"    data ",[34,101810,447],{"class":112},[34,101812,101813],{"class":59}," mujoco.MjData(model)\n",[34,101815,101816],{"class":36,"line":2196},[34,101817,2864],{"emptyLinePlaceholder":540},[34,101819,101820,101822,101824,101827],{"class":36,"line":2213},[34,101821,31762],{"class":63},[34,101823,617],{"class":59},[34,101825,101826],{"class":187},"\"nq:\"",[34,101828,101829],{"class":59},", model.nq)\n",[34,101831,101832,101834,101836,101839],{"class":36,"line":2218},[34,101833,31762],{"class":63},[34,101835,617],{"class":59},[34,101837,101838],{"class":187},"\"nv:\"",[34,101840,101841],{"class":59},", model.nv)\n",[34,101843,101844,101846,101848,101851],{"class":36,"line":2223},[34,101845,31762],{"class":63},[34,101847,617],{"class":59},[34,101849,101850],{"class":187},"\"nu:\"",[34,101852,101853],{"class":59},", model.nu)\n",[34,101855,101856,101858,101860,101863],{"class":36,"line":2228},[34,101857,31762],{"class":63},[34,101859,617],{"class":59},[34,101861,101862],{"class":187},"\"initial time:\"",[34,101864,101865],{"class":59},", data.time)\n",[34,101867,101868,101870,101872,101875],{"class":36,"line":2242},[34,101869,31762],{"class":63},[34,101871,617],{"class":59},[34,101873,101874],{"class":187},"\"initial qpos:\"",[34,101876,101877],{"class":59},", data.qpos.copy())\n",[34,101879,101880],{"class":36,"line":2247},[34,101881,2864],{"emptyLinePlaceholder":540},[34,101883,101884,101886,101889,101891,101893,101895,101897],{"class":36,"line":3041},[34,101885,3665],{"class":112},[34,101887,101888],{"class":59}," _ ",[34,101890,26508],{"class":112},[34,101892,32906],{"class":63},[34,101894,617],{"class":59},[34,101896,919],{"class":63},[34,101898,31249],{"class":59},[34,101900,101901],{"class":36,"line":3055},[34,101902,101903],{"class":59},"        mujoco.mj_step(model, data)\n",[34,101905,101906],{"class":36,"line":3063},[34,101907,2864],{"emptyLinePlaceholder":540},[34,101909,101910,101912,101914,101917],{"class":36,"line":3068},[34,101911,31762],{"class":63},[34,101913,617],{"class":59},[34,101915,101916],{"class":187},"\"final time:\"",[34,101918,101865],{"class":59},[34,101920,101921,101923,101925,101928],{"class":36,"line":3074},[34,101922,31762],{"class":63},[34,101924,617],{"class":59},[34,101926,101927],{"class":187},"\"final qpos:\"",[34,101929,101877],{"class":59},[34,101931,101932],{"class":36,"line":3080},[34,101933,2864],{"emptyLinePlaceholder":540},[34,101935,101936],{"class":36,"line":3085},[34,101937,2864],{"emptyLinePlaceholder":540},[34,101939,101940,101942,101944,101947,101950],{"class":36,"line":8412},[34,101941,2002],{"class":112},[34,101943,31683],{"class":63},[34,101945,101946],{"class":112}," ==",[34,101948,101949],{"class":187}," \"__main__\"",[34,101951,4203],{"class":59},[34,101953,101954],{"class":36,"line":8436},[34,101955,101956],{"class":59},"    main()\n",[584,101958,101959],{"id":101959},"代码逐段解释",[14,101961,101962],{},"导入库：",[25,101964,101966],{"className":27,"code":101965,"language":29,"meta":22,"style":22},"import mujoco\n",[31,101967,101968],{"__ignoreMap":22},[34,101969,101970,101972],{"class":36,"line":37},[34,101971,30855],{"class":112},[34,101973,101688],{"class":59},[14,101975,101976],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101978,101979],{},"定义 XML：",[25,101981,101983],{"className":27,"code":101982,"language":29,"meta":22,"style":22},"XML = \"\"\"\n...\n\"\"\"\n",[31,101984,101985,101993,101998],{"__ignoreMap":22},[34,101986,101987,101989,101991],{"class":36,"line":37},[34,101988,101701],{"class":63},[34,101990,14028],{"class":112},[34,101992,101706],{"class":187},[34,101994,101995],{"class":36,"line":44},[34,101996,101997],{"class":187},"...\n",[34,101999,102000],{"class":36,"line":50},[34,102001,96157],{"class":187},[14,102003,102004,102005,102008],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[31,102006,102007],{},"freejoint"," 的方块。",[14,102010,102011],{},"编译模型：",[25,102013,102015],{"className":27,"code":102014,"language":29,"meta":22,"style":22},"model = mujoco.MjModel.from_xml_string(XML)\n",[31,102016,102017],{"__ignoreMap":22},[34,102018,102019,102022,102024,102026,102028],{"class":36,"line":37},[34,102020,102021],{"class":59},"model ",[34,102023,447],{"class":112},[34,102025,101799],{"class":59},[34,102027,101701],{"class":63},[34,102029,623],{"class":59},[14,102031,102032],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102034,102035],{},"创建数据：",[25,102037,102039],{"className":27,"code":102038,"language":29,"meta":22,"style":22},"data = mujoco.MjData(model)\n",[31,102040,102041],{"__ignoreMap":22},[34,102042,102043,102046,102048],{"class":36,"line":37},[34,102044,102045],{"class":59},"data ",[34,102047,447],{"class":112},[34,102049,101813],{"class":59},[14,102051,102052,102054,102055,102057],{},[31,102053,33863],{}," 会保存仿真当前状态。刚创建时，时间是 ",[31,102056,319],{},"，方块还在初始位置。",[14,102059,102060],{},"推进仿真：",[25,102062,102064],{"className":27,"code":102063,"language":29,"meta":22,"style":22},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[31,102065,102066,102082],{"__ignoreMap":22},[34,102067,102068,102070,102072,102074,102076,102078,102080],{"class":36,"line":37},[34,102069,3489],{"class":112},[34,102071,101888],{"class":59},[34,102073,26508],{"class":112},[34,102075,32906],{"class":63},[34,102077,617],{"class":59},[34,102079,919],{"class":63},[34,102081,31249],{"class":59},[34,102083,102084],{"class":36,"line":44},[34,102085,102086],{"class":59},"    mujoco.mj_step(model, data)\n",[14,102088,102089,102090,102092],{},"每次 ",[31,102091,101602],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[584,102094,102095],{"id":102095},"代码逐行细讲",[14,102097,102098],{},"下面把完整代码按新手视角拆开讲。",[25,102100,102101],{"className":27,"code":101965,"language":29,"meta":22,"style":22},[31,102102,102103],{"__ignoreMap":22},[34,102104,102105,102107],{"class":36,"line":37},[34,102106,30855],{"class":112},[34,102108,101688],{"class":59},[14,102110,102111,102113,102114,822,102116,822,102118,28850],{},[31,102112,30855],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[31,102115,101062],{},[31,102117,101067],{},[31,102119,102120],{},"mujoco.mj_step",[25,102122,102123],{"className":27,"code":101982,"language":29,"meta":22,"style":22},[31,102124,102125,102133,102137],{"__ignoreMap":22},[34,102126,102127,102129,102131],{"class":36,"line":37},[34,102128,101701],{"class":63},[34,102130,14028],{"class":112},[34,102132,101706],{"class":187},[34,102134,102135],{"class":36,"line":44},[34,102136,101997],{"class":187},[34,102138,102139],{"class":36,"line":50},[34,102140,96157],{"class":187},[14,102142,102143,102145,102146,102149],{},[31,102144,101701],{}," 是一个变量名。右边的三引号 ",[31,102147,102148],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[25,102151,102152],{"className":53528,"code":101711,"language":53530,"meta":22,"style":22},[31,102153,102154],{"__ignoreMap":22},[34,102155,102156,102158,102160,102163,102165,102168],{"class":36,"line":37},[34,102157,1515],{"class":59},[34,102159,101408],{"class":51761},[34,102161,102162],{"class":2427}," model",[34,102164,447],{"class":59},[34,102166,102167],{"class":187},"\"first_sim\"",[34,102169,51768],{"class":59},[14,102171,102172,102173,102176,102177,28850],{},"这是 XML 的根标签。",[31,102174,102175],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[31,102178,102179],{},"first_sim",[25,102181,102182],{"className":53528,"code":101570,"language":53530,"meta":22,"style":22},[31,102183,102184],{"__ignoreMap":22},[34,102185,102186,102188,102190,102192,102194,102196,102198,102200,102202],{"class":36,"line":37},[34,102187,1515],{"class":59},[34,102189,69627],{"class":51761},[34,102191,101581],{"class":2427},[34,102193,447],{"class":59},[34,102195,101586],{"class":187},[34,102197,101589],{"class":2427},[34,102199,447],{"class":59},[34,102201,101594],{"class":187},[34,102203,101531],{"class":59},[14,102205,102206,102208,102209,102212,102213,102216],{},[31,102207,69627],{}," 用来设置仿真参数。",[31,102210,102211],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[31,102214,102215],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[25,102218,102220],{"className":53528,"code":102219,"language":53530,"meta":22,"style":22},"\u003Cworldbody>\n",[31,102221,102222],{"__ignoreMap":22},[34,102223,102224,102226,102229],{"class":36,"line":37},[34,102225,1515],{"class":59},[34,102227,102228],{"class":51761},"worldbody",[34,102230,51768],{"class":59},[14,102232,102233,102235],{},[31,102234,102228],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[25,102237,102239],{"className":53528,"code":102238,"language":53530,"meta":22,"style":22},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[31,102240,102241],{"__ignoreMap":22},[34,102242,102243,102245,102247,102249,102251,102254,102256,102258,102261,102263,102265,102268,102270,102272,102275],{"class":36,"line":37},[34,102244,1515],{"class":59},[34,102246,101507],{"class":51761},[34,102248,15384],{"class":2427},[34,102250,447],{"class":59},[34,102252,102253],{"class":187},"\"floor\"",[34,102255,54285],{"class":2427},[34,102257,447],{"class":59},[34,102259,102260],{"class":187},"\"plane\"",[34,102262,101523],{"class":2427},[34,102264,447],{"class":59},[34,102266,102267],{"class":187},"\"2 2 0.1\"",[34,102269,79228],{"class":2427},[34,102271,447],{"class":59},[34,102273,102274],{"class":187},"\"0.8 0.8 0.8 1\"",[34,102276,101531],{"class":59},[14,102278,102279,102280,102282,102283,102286,102287,102290,102291,102293],{},"这行创建地面。",[31,102281,101507],{}," 是几何体。",[31,102284,102285],{},"name=\"floor\""," 是名字。",[31,102288,102289],{},"type=\"plane\""," 表示平面。",[31,102292,55571],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[25,102295,102297],{"className":53528,"code":102296,"language":53530,"meta":22,"style":22},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[31,102298,102299],{"__ignoreMap":22},[34,102300,102301,102303,102305,102307,102309,102311,102313,102315,102317],{"class":36,"line":37},[34,102302,1515],{"class":59},[34,102304,52261],{"class":51761},[34,102306,15384],{"class":2427},[34,102308,447],{"class":59},[34,102310,53952],{"class":187},[34,102312,101493],{"class":2427},[34,102314,447],{"class":59},[34,102316,101498],{"class":187},[34,102318,51768],{"class":59},[14,102320,102321,102322,28850,102324,102327,102328,102330],{},"这行创建一个刚体，名字叫 ",[31,102323,54175],{},[31,102325,102326],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[31,102329,101556],{},"，也就是离地面 1 米高。",[25,102332,102334],{"className":53528,"code":102333,"language":53530,"meta":22,"style":22},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[31,102335,102336],{"__ignoreMap":22},[34,102337,102338,102340,102342,102344,102346,102349],{"class":36,"line":37},[34,102339,1515],{"class":59},[34,102341,102007],{"class":51761},[34,102343,15384],{"class":2427},[34,102345,447],{"class":59},[34,102347,102348],{"class":187},"\"box_free\"",[34,102350,101531],{"class":59},[14,102352,102353,102354,102356],{},"这行很重要。",[31,102355,102007],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[25,102358,102360],{"className":53528,"code":102359,"language":53530,"meta":22,"style":22},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[31,102361,102362],{"__ignoreMap":22},[34,102363,102364,102366,102368,102370,102372,102374,102376,102378,102380,102382,102384,102386,102389,102391,102393,102395,102397,102400],{"class":36,"line":37},[34,102365,1515],{"class":59},[34,102367,101507],{"class":51761},[34,102369,15384],{"class":2427},[34,102371,447],{"class":59},[34,102373,101514],{"class":187},[34,102375,54285],{"class":2427},[34,102377,447],{"class":59},[34,102379,53952],{"class":187},[34,102381,101523],{"class":2427},[34,102383,447],{"class":59},[34,102385,101528],{"class":187},[34,102387,102388],{"class":2427}," mass",[34,102390,447],{"class":59},[34,102392,4142],{"class":187},[34,102394,79228],{"class":2427},[34,102396,447],{"class":59},[34,102398,102399],{"class":187},"\"1 0 0 1\"",[34,102401,101531],{"class":59},[14,102403,102404,102405,102408,102409,102412,102413,102416,102417,102420],{},"这行给 box body 添加一个盒子形状。",[31,102406,102407],{},"type=\"box\""," 表示形状是盒子。",[31,102410,102411],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[31,102414,102415],{},"mass=\"1\""," 表示质量是 1。",[31,102418,102419],{},"rgba=\"1 0 0 1\""," 表示红色。",[25,102422,102424],{"className":27,"code":102423,"language":29,"meta":22,"style":22},"def main() -> None:\n",[31,102425,102426],{"__ignoreMap":22},[34,102427,102428,102430,102432,102434,102436],{"class":36,"line":37},[34,102429,32410],{"class":112},[34,102431,2437],{"class":2427},[34,102433,101785],{"class":59},[34,102435,96145],{"class":63},[34,102437,4203],{"class":59},[14,102439,102440,102442,102443,102446,102447,102450],{},[31,102441,32410],{}," 用来定义函数。这里定义了一个叫 ",[31,102444,102445],{},"main"," 的函数。",[31,102448,102449],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[25,102452,102453],{"className":27,"code":102014,"language":29,"meta":22,"style":22},[31,102454,102455],{"__ignoreMap":22},[34,102456,102457,102459,102461,102463,102465],{"class":36,"line":37},[34,102458,102021],{"class":59},[34,102460,447],{"class":112},[34,102462,101799],{"class":59},[34,102464,101701],{"class":63},[34,102466,623],{"class":59},[14,102468,102469,102470,102473],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[31,102471,102472],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[25,102475,102476],{"className":27,"code":102038,"language":29,"meta":22,"style":22},[31,102477,102478],{"__ignoreMap":22},[34,102479,102480,102482,102484],{"class":36,"line":37},[34,102481,102045],{"class":59},[34,102483,447],{"class":112},[34,102485,101813],{"class":59},[14,102487,102488,102489,102491,102492,102494],{},"这行创建仿真数据。",[31,102490,33863],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[31,102493,33863],{}," 都会变化。",[25,102496,102498],{"className":27,"code":102497,"language":29,"meta":22,"style":22},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[31,102499,102500,102510,102520],{"__ignoreMap":22},[34,102501,102502,102504,102506,102508],{"class":36,"line":37},[34,102503,30878],{"class":63},[34,102505,617],{"class":59},[34,102507,101826],{"class":187},[34,102509,101829],{"class":59},[34,102511,102512,102514,102516,102518],{"class":36,"line":44},[34,102513,30878],{"class":63},[34,102515,617],{"class":59},[34,102517,101838],{"class":187},[34,102519,101841],{"class":59},[34,102521,102522,102524,102526,102528],{"class":36,"line":50},[34,102523,30878],{"class":63},[34,102525,617],{"class":59},[34,102527,101850],{"class":187},[34,102529,101853],{"class":59},[14,102531,102532,102534,102535,102538,102539,102542,102543,102546,102547,102550],{},[31,102533,30878],{}," 用来输出信息。",[31,102536,102537],{},"model.nq"," 是位置变量数量，",[31,102540,102541],{},"model.nv"," 是速度变量数量，",[31,102544,102545],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[31,102548,102549],{},"nu"," 是 0。",[25,102552,102554],{"className":27,"code":102553,"language":29,"meta":22,"style":22},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[31,102555,102556,102566],{"__ignoreMap":22},[34,102557,102558,102560,102562,102564],{"class":36,"line":37},[34,102559,30878],{"class":63},[34,102561,617],{"class":59},[34,102563,101862],{"class":187},[34,102565,101865],{"class":59},[34,102567,102568,102570,102572,102574],{"class":36,"line":44},[34,102569,30878],{"class":63},[34,102571,617],{"class":59},[34,102573,101874],{"class":187},[34,102575,101877],{"class":59},[14,102577,102578,102579,102581,102582,102584,102585,102588],{},"这里打印初始时间和初始位置。",[31,102580,101454],{}," 一开始是 0。",[31,102583,101457],{}," 是位置数组。",[31,102586,102587],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[25,102590,102591],{"className":27,"code":102063,"language":29,"meta":22,"style":22},[31,102592,102593,102609],{"__ignoreMap":22},[34,102594,102595,102597,102599,102601,102603,102605,102607],{"class":36,"line":37},[34,102596,3489],{"class":112},[34,102598,101888],{"class":59},[34,102600,26508],{"class":112},[34,102602,32906],{"class":63},[34,102604,617],{"class":59},[34,102606,919],{"class":63},[34,102608,31249],{"class":59},[34,102610,102611],{"class":36,"line":44},[34,102612,102086],{"class":59},[14,102614,102615,102617,102618,102621,102622,102624,102625,102627],{},[31,102616,3489],{}," 是循环。",[31,102619,102620],{},"range(100)"," 表示循环 100 次。",[31,102623,1596],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[31,102626,101602],{},"，仿真就前进一步。",[25,102629,102631],{"className":27,"code":102630,"language":29,"meta":22,"style":22},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[31,102632,102633,102643],{"__ignoreMap":22},[34,102634,102635,102637,102639,102641],{"class":36,"line":37},[34,102636,30878],{"class":63},[34,102638,617],{"class":59},[34,102640,101916],{"class":187},[34,102642,101865],{"class":59},[34,102644,102645,102647,102649,102651],{"class":36,"line":44},[34,102646,30878],{"class":63},[34,102648,617],{"class":59},[34,102650,101927],{"class":187},[34,102652,101877],{"class":59},[14,102654,102655],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[25,102657,102659],{"className":27,"code":102658,"language":29,"meta":22,"style":22},"if __name__ == \"__main__\":\n    main()\n",[31,102660,102661,102673],{"__ignoreMap":22},[34,102662,102663,102665,102667,102669,102671],{"class":36,"line":37},[34,102664,2002],{"class":112},[34,102666,31683],{"class":63},[34,102668,101946],{"class":112},[34,102670,101949],{"class":187},[34,102672,4203],{"class":59},[34,102674,102675],{"class":36,"line":44},[34,102676,101956],{"class":59},[14,102678,102679,102680,102683,102684,28850],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[31,102681,102682],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[31,102685,102682],{},[14,102687,102688],{},"运行:",[25,102690,102692],{"className":24286,"code":102691,"language":24288,"meta":22,"style":22},"python ch1_first_sim.py\n",[31,102693,102694],{"__ignoreMap":22},[34,102695,102696,102698],{"class":36,"line":37},[34,102697,29],{"class":2427},[34,102699,101673],{"class":187},[555,102701,102703],{"id":102702},"_5运行结果说明","5.运行结果说明",[14,102705,102706],{},"你应该看到类似输出:",[25,102708,102711],{"className":102709,"code":102710,"language":5651,"meta":22},[5649],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[31,102712,102710],{"__ignoreMap":22},[14,102714,102715,102717,102718,102721,102722,28850],{},[31,102716,102007],{}," 有 7 个位置变量: ",[31,102719,102720],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[31,102723,102724],{},"vx vy vz wx wy wz",[14,102726,102727,102728,102731],{},"你还会看到 ",[31,102729,102730],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[555,102733,102735],{"id":102734},"_6验证步骤","6.验证步骤",[14,102737,102738],{},"确认版本:",[25,102740,102741],{"className":24286,"code":101326,"language":24288,"meta":22,"style":22},[31,102742,102743],{"__ignoreMap":22},[34,102744,102745,102747,102749],{"class":36,"line":37},[34,102746,29],{"class":2427},[34,102748,30823],{"class":63},[34,102750,101337],{"class":187},[14,102752,102753],{},"确认导入的是官方 bindings:",[25,102755,102757],{"className":24286,"code":102756,"language":24288,"meta":22,"style":22},"python -c \"import mujoco; print(mujoco)\"\n",[31,102758,102759],{"__ignoreMap":22},[34,102760,102761,102763,102765],{"class":36,"line":37},[34,102762,29],{"class":2427},[34,102764,30823],{"class":63},[34,102766,102767],{"class":187}," \"import mujoco; print(mujoco)\"\n",[14,102769,102770],{},"运行程序:",[25,102772,102773],{"className":24286,"code":102691,"language":24288,"meta":22,"style":22},[31,102774,102775],{"__ignoreMap":22},[34,102776,102777,102779],{"class":36,"line":37},[34,102778,29],{"class":2427},[34,102780,101673],{"class":187},[14,102782,102783,102784,102787,102788,28850],{},"检查 ",[31,102785,102786],{},"final time"," 是否约等于 ",[31,102789,102790],{},"1.0",[14,102792,102793],{},"再做几个小实验：",[567,102795,102796,102806,102814,102827],{},[570,102797,102798,102799,102801,102802,102805],{},"把 ",[31,102800,102326],{}," 改成 ",[31,102803,102804],{},"pos=\"0 0 2\"","，观察初始高度变化。",[570,102807,102798,102808,102801,102810,102813],{},[31,102809,102215],{},[31,102811,102812],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[570,102815,102798,102816,102801,102818,102821,102822,102824,102825,28850],{},[31,102817,102211],{},[31,102819,102820],{},"timestep=\"0.005\"","，观察 100 步后的 ",[31,102823,102786],{}," 是否变成约 ",[31,102826,35791],{},[570,102828,102829,102830,102833],{},"删除 ",[31,102831,102832],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102835,102836],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[555,102838,102840],{"id":102839},"_7常见错误与解决方案","7.常见错误与解决方案",[584,102842,102844],{"id":102843},"modulenotfounderror-no-module-named-mujoco",[31,102845,102846],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102848,102849],{},"解决:",[25,102851,102853],{"className":24286,"code":102852,"language":24288,"meta":22,"style":22},"pip install \"mujoco>=2.3\"\n",[31,102854,102855],{"__ignoreMap":22},[34,102856,102857,102859,102861],{"class":36,"line":37},[34,102858,24295],{"class":2427},[34,102860,24298],{"class":187},[34,102862,102863],{"class":187}," \"mujoco>=2.3\"\n",[584,102865,102867],{"id":102866},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102869,102870],{},"先安装系统依赖:",[25,102872,102874],{"className":24286,"code":102873,"language":24288,"meta":22,"style":22},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[31,102875,102876],{"__ignoreMap":22},[34,102877,102878,102880,102882,102884,102886,102889,102891,102894,102896,102899,102901],{"class":36,"line":37},[34,102879,25041],{"class":2427},[34,102881,26780],{"class":187},[34,102883,24298],{"class":187},[34,102885,26865],{"class":63},[34,102887,102888],{"class":187}," mesa-libGL",[34,102890,101201],{"class":187},[34,102892,102893],{"class":187}," glfw",[34,102895,101221],{"class":187},[34,102897,102898],{"class":187}," libX11",[34,102900,101234],{"class":187},[34,102902,102903],{"class":187}," libXrandr\n",[584,102905,102907],{"id":102906},"xml-解析失败","XML 解析失败",[14,102909,102910],{},"检查:",[567,102912,102913,102916,102919,102925],{},[570,102914,102915],{},"标签是否闭合",[570,102917,102918],{},"属性是否带引号",[570,102920,102921,102922],{},"根节点是否是 ",[31,102923,102924],{},"\u003Cmujoco>",[570,102926,102927,102929,102930,102933],{},[31,102928,52261],{}," 是否放在 ",[31,102931,102932],{},"\u003Cworldbody>"," 内部",[584,102935,102937,102939,102940],{"id":102936},"final-time-不是严格等于-10",[31,102938,102786],{}," 不是严格等于 ",[31,102941,102790],{},[14,102943,102944],{},"这通常不是错误。浮点数计算可能得到：",[25,102946,102949],{"className":102947,"code":102948,"language":5651,"meta":22},[5649],"1.0000000000000007\n",[31,102950,102948],{"__ignoreMap":22},[14,102952,102953,102954,102956],{},"只要接近 ",[31,102955,102790],{}," 就正常。",[584,102958,102959],{"id":102959},"方块没有掉下来",[14,102961,102962],{},"检查：",[567,102964,102965,102971,102977,102982],{},[570,102966,102967,102968],{},"方块 body 里是否有 ",[31,102969,102970],{},"\u003Cfreejoint\u002F>",[570,102972,102973,102974],{},"重力是否是 ",[31,102975,102976],{},"0 0 -9.81",[570,102978,102979,102980],{},"是否真的调用了 ",[31,102981,101072],{},[570,102983,102984,102985,102987,102988],{},"你看的是否是 ",[31,102986,102730],{},"，不是 ",[31,102989,102990],{},"initial qpos",[555,102992,102994],{"id":102993},"_8本章小结","8.本章小结",[14,102996,102997],{},"本章你已经完成了 MuJoCo 的最小闭环：",[25,102999,103002],{"className":103000,"code":103001,"language":5651,"meta":22},[5649],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[31,103003,103001],{"__ignoreMap":22},[14,103005,103006],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[532,103008,103009],{},"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":22,"searchDepth":44,"depth":44,"links":103011},[103012,103013,103014,103019,103023,103024,103025,103033],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":103015},[103016,103017,103018],{"id":101469,"depth":50,"text":101470},{"id":101563,"depth":50,"text":101564},{"id":101615,"depth":50,"text":101616},{"id":101639,"depth":44,"text":101640,"children":103020},[103021,103022],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":103026},[103027,103028,103029,103030,103032],{"id":102843,"depth":50,"text":102846},{"id":102866,"depth":50,"text":102867},{"id":102906,"depth":50,"text":102907},{"id":102936,"depth":50,"text":103031},"final time 不是严格等于 1.0",{"id":102959,"depth":50,"text":102959},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101025,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103040,"title":103041,"body":103042,"description":22,"extension":538,"meta":104698,"navigation":540,"path":104699,"seo":104700,"stem":104701,"__hash__":104702},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103043,"toc":104674},[103044,103047,103049,103052,103055,103072,103167,103170,103176,103178,103180,103204,103207,103221,103224,103265,103267,103280,103282,103285,103333,103345,103348,103351,103357,103370,103437,103440,103459,103462,103465,103471,103473,103482,103485,103489,103498,103580,103589,103593,103599,103613,103623,103625,103955,103958,103970,103972,103983,103985,103988,104006,104009,104012,104030,104041,104044,104059,104069,104071,104092,104109,104129,104135,104175,104191,104207,104213,104216,104240,104256,104261,104291,104308,104333,104336,104351,104360,104375,104384,104399,104406,104408,104418,104431,104438,104441,104480,104487,104489,104541,104543,104549,104552,104559,104566,104569,104571,104589,104592,104595,104629,104641,104643,104646,104668,104671],[10,103045,103041],{"id":103046},"_2xml-与-mjcf-物理建模基础",[555,103048,101034],{"id":101033},[14,103050,103051],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103053,103054],{},"本章结束后，你应该能看懂一个简单模型里：",[567,103056,103057,103060,103063,103066,103069],{},[570,103058,103059],{},"地面在哪里。",[570,103061,103062],{},"物体初始位置在哪里。",[570,103064,103065],{},"几何体是什么形状。",[570,103067,103068],{},"哪些 body 可以自由运动。",[570,103070,103071],{},"如何用名字在 Python 里找到 XML 中的对象。",[748,103073,103074,103084],{},[751,103075,103076],{},[754,103077,103078,103081],{},[757,103079,103080],{"align":24200},"标签",[757,103082,103083],{"align":24200},"作用",[795,103085,103086,103095,103105,103114,103124,103134,103147,103157],{},[754,103087,103088,103092],{},[800,103089,103090],{"align":24200},[31,103091,102924],{},[800,103093,103094],{"align":24200},"根节点",[754,103096,103097,103102],{},[800,103098,103099],{"align":24200},[31,103100,103101],{},"\u003Coption>",[800,103103,103104],{"align":24200},"仿真参数",[754,103106,103107,103111],{},[800,103108,103109],{"align":24200},[31,103110,102932],{},[800,103112,103113],{"align":24200},"世界中的物体",[754,103115,103116,103121],{},[800,103117,103118],{"align":24200},[31,103119,103120],{},"\u003Cbody>",[800,103122,103123],{"align":24200},"刚体",[754,103125,103126,103131],{},[800,103127,103128],{"align":24200},[31,103129,103130],{},"\u003Cgeom>",[800,103132,103133],{"align":24200},"几何体、碰撞体、可视体",[754,103135,103136,103144],{},[800,103137,103138,25443,103141],{"align":24200},[31,103139,103140],{},"\u003Cjoint>",[31,103142,103143],{},"\u003Cfreejoint>",[800,103145,103146],{"align":24200},"关节",[754,103148,103149,103154],{},[800,103150,103151],{"align":24200},[31,103152,103153],{},"\u003Csite>",[800,103155,103156],{"align":24200},"标记点",[754,103158,103159,103164],{},[800,103160,103161],{"align":24200},[31,103162,103163],{},"\u003Cactuator>",[800,103165,103166],{"align":24200},"控制器",[14,103168,103169],{},"初学时可以先记住：",[25,103171,103174],{"className":103172,"code":103173,"language":5651,"meta":22},[5649],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[31,103175,103173],{"__ignoreMap":22},[555,103177,101157],{"id":101156},[14,103179,101160],{},[25,103181,103183],{"className":24286,"code":103182,"language":24288,"meta":22,"style":22},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[31,103184,103185],{"__ignoreMap":22},[34,103186,103187,103189,103191,103193,103195,103197,103199,103201],{"class":36,"line":37},[34,103188,25041],{"class":2427},[34,103190,26780],{"class":187},[34,103192,24298],{"class":187},[34,103194,26865],{"class":63},[34,103196,102888],{"class":187},[34,103198,101201],{"class":187},[34,103200,102893],{"class":187},[34,103202,103203],{"class":187}," glfw-devel\n",[14,103205,103206],{},"pip:",[25,103208,103209],{"className":24286,"code":101306,"language":24288,"meta":22,"style":22},[31,103210,103211],{"__ignoreMap":22},[34,103212,103213,103215,103217,103219],{"class":36,"line":37},[34,103214,24295],{"class":2427},[34,103216,24298],{"class":187},[34,103218,101317],{"class":187},[34,103220,101320],{"class":187},[14,103222,103223],{},"conda:",[25,103225,103227],{"className":24286,"code":103226,"language":24288,"meta":22,"style":22},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[31,103228,103229,103246,103255],{"__ignoreMap":22},[34,103230,103231,103233,103235,103237,103240,103242,103244],{"class":36,"line":37},[34,103232,30795],{"class":2427},[34,103234,29641],{"class":187},[34,103236,25580],{"class":63},[34,103238,103239],{"class":187}," mujoco-xml",[34,103241,101362],{"class":187},[34,103243,101365],{"class":63},[34,103245,101368],{"class":63},[34,103247,103248,103250,103252],{"class":36,"line":44},[34,103249,30795],{"class":2427},[34,103251,101375],{"class":187},[34,103253,103254],{"class":187}," mujoco-xml\n",[34,103256,103257,103259,103261,103263],{"class":36,"line":50},[34,103258,24295],{"class":2427},[34,103260,24298],{"class":187},[34,103262,101317],{"class":187},[34,103264,101320],{"class":187},[14,103266,101391],{},[567,103268,103269,103272,103277],{},[570,103270,103271],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[570,103273,103274,103275,28850],{},"本章使用基础标签，适用于 ",[31,103276,101414],{},[570,103278,103279],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[555,103281,101432],{"id":101431},[14,103283,103284],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[25,103286,103288],{"className":53528,"code":103287,"language":53530,"meta":22,"style":22},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[31,103289,103290,103304,103312,103317,103325],{"__ignoreMap":22},[34,103291,103292,103294,103296,103298,103300,103302],{"class":36,"line":37},[34,103293,1515],{"class":59},[34,103295,101408],{"class":51761},[34,103297,102162],{"class":2427},[34,103299,447],{"class":59},[34,103301,63140],{"class":187},[34,103303,51768],{"class":59},[34,103305,103306,103308,103310],{"class":36,"line":44},[34,103307,52605],{"class":59},[34,103309,102228],{"class":51761},[34,103311,51768],{"class":59},[34,103313,103314],{"class":36,"line":50},[34,103315,103316],{"class":59},"    ...\n",[34,103318,103319,103321,103323],{"class":36,"line":56},[34,103320,52878],{"class":59},[34,103322,102228],{"class":51761},[34,103324,51768],{"class":59},[34,103326,103327,103329,103331],{"class":36,"line":107},[34,103328,52246],{"class":59},[34,103330,101408],{"class":51761},[34,103332,51768],{"class":59},[14,103334,103335,103337,103338,103340,103341,103344],{},[31,103336,52261],{}," 表示刚体。",[31,103339,101507],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[31,103342,103343],{},"joint"," 表示刚体相对父刚体如何运动。",[584,103346,103347],{"id":103347},"层级结构非常重要",[14,103349,103350],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[25,103352,103355],{"className":103353,"code":103354,"language":5651,"meta":22},[5649],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[31,103356,103354],{"__ignoreMap":22},[14,103358,103359,101405,103362,103365,103366,103369],{},[31,103360,103361],{},"red_box_geom",[31,103363,103364],{},"box_center"," 都属于 ",[31,103367,103368],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[25,103371,103373],{"className":53528,"code":103372,"language":53530,"meta":22,"style":22},"\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",[31,103374,103375,103395,103409,103429],{"__ignoreMap":22},[34,103376,103377,103379,103381,103383,103385,103387,103389,103391,103393],{"class":36,"line":37},[34,103378,1515],{"class":59},[34,103380,52261],{"class":51761},[34,103382,15384],{"class":2427},[34,103384,447],{"class":59},[34,103386,53952],{"class":187},[34,103388,101493],{"class":2427},[34,103390,447],{"class":59},[34,103392,101498],{"class":187},[34,103394,51768],{"class":59},[34,103396,103397,103399,103401,103403,103405,103407],{"class":36,"line":44},[34,103398,52605],{"class":59},[34,103400,102007],{"class":51761},[34,103402,15384],{"class":2427},[34,103404,447],{"class":59},[34,103406,102348],{"class":187},[34,103408,101531],{"class":59},[34,103410,103411,103413,103415,103417,103419,103421,103423,103425,103427],{"class":36,"line":50},[34,103412,52605],{"class":59},[34,103414,101507],{"class":51761},[34,103416,54285],{"class":2427},[34,103418,447],{"class":59},[34,103420,53952],{"class":187},[34,103422,101523],{"class":2427},[34,103424,447],{"class":59},[34,103426,101528],{"class":187},[34,103428,101531],{"class":59},[34,103430,103431,103433,103435],{"class":36,"line":56},[34,103432,52246],{"class":59},[34,103434,52261],{"class":51761},[34,103436,51768],{"class":59},[14,103438,103439],{},"含义:",[567,103441,103442,103448,103453,103456],{},[570,103443,103444,103445,103447],{},"创建名为 ",[31,103446,54175],{}," 的刚体",[570,103449,103450,103451],{},"初始位置在世界坐标 ",[31,103452,101556],{},[570,103454,103455],{},"它有一个自由关节",[570,103457,103458],{},"它有一个盒子几何体",[584,103460,103461],{"id":103461},"坐标怎么理解",[14,103463,103464],{},"MuJoCo 默认使用三维坐标：",[25,103466,103469],{"className":103467,"code":103468,"language":5651,"meta":22},[5649],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[31,103470,103468],{"__ignoreMap":22},[14,103472,15097],{},[25,103474,103476],{"className":53528,"code":103475,"language":53530,"meta":22,"style":22},"pos=\"0 0 1\"\n",[31,103477,103478],{"__ignoreMap":22},[34,103479,103480],{"class":36,"line":37},[34,103481,103475],{"class":59},[14,103483,103484],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[584,103486,103488],{"id":103487},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103490,103491,103492,82991,103495,103497],{},"不同 ",[31,103493,103494],{},"type",[31,103496,31959],{}," 含义不同：",[748,103499,103500,103515],{},[751,103501,103502],{},[754,103503,103504,103508,103513],{},[757,103505,103506],{"align":24200},[31,103507,103494],{},[757,103509,103510,103512],{"align":24200},[31,103511,31959],{}," 示例",[757,103514,101087],{"align":24200},[795,103516,103517,103531,103546,103565],{},[754,103518,103519,103523,103528],{},[800,103520,103521],{"align":24200},[31,103522,54175],{},[800,103524,103525],{"align":24200},[31,103526,103527],{},"size=\"0.1 0.2 0.3\"",[800,103529,103530],{"align":24200},"x\u002Fy\u002Fz 半边长，不是完整长度",[754,103532,103533,103538,103543],{},[800,103534,103535],{"align":24200},[31,103536,103537],{},"sphere",[800,103539,103540],{"align":24200},[31,103541,103542],{},"size=\"0.1\"",[800,103544,103545],{"align":24200},"球半径",[754,103547,103548,103553,103558],{},[800,103549,103550],{"align":24200},[31,103551,103552],{},"capsule",[800,103554,103555],{"align":24200},[31,103556,103557],{},"size=\"0.03\"",[800,103559,103560,103561,103564],{"align":24200},"胶囊半径，长度常用 ",[31,103562,103563],{},"fromto"," 指定",[754,103566,103567,103572,103577],{},[800,103568,103569],{"align":24200},[31,103570,103571],{},"plane",[800,103573,103574],{"align":24200},[31,103575,103576],{},"size=\"3 3 0.1\"",[800,103578,103579],{"align":24200},"可视平面大小，通常当地面",[14,103581,103582,103583,103585,103586,103588],{},"最容易踩坑的是 box：",[31,103584,102411],{}," 表示边长大约是 ",[31,103587,32500],{},"，因为 MuJoCo 用的是半边长。",[584,103590,103592],{"id":103591},"site-是什么","site 是什么",[14,103594,103595,103598],{},[31,103596,103597],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[567,103600,103601,103604,103607,103610],{},[570,103602,103603],{},"标记机械臂末端。",[570,103605,103606],{},"标记目标位置。",[570,103608,103609],{},"放传感器或相机参考点。",[570,103611,103612],{},"在 Python 中读取某个关键点的世界坐标。",[14,103614,103615,103616,101405,103619,103622],{},"在后面的 Reacher 任务中，",[31,103617,103618],{},"tip",[31,103620,103621],{},"target"," 就会用 site 表示。",[555,103624,101640],{"id":101639},[25,103626,103628],{"className":27,"code":103627,"language":29,"meta":22,"style":22},"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",[31,103629,103630,103636,103646,103650,103654,103662,103667,103671,103675,103679,103684,103688,103693,103698,103703,103708,103712,103716,103720,103724,103728,103732,103744,103756,103764,103768,103783,103798,103802,103815,103830,103843,103856,103860,103876,103880,103884,103895,103907,103919,103931,103935,103939,103951],{"__ignoreMap":22},[34,103631,103632,103634],{"class":36,"line":37},[34,103633,30855],{"class":112},[34,103635,101688],{"class":59},[34,103637,103638,103640,103642,103644],{"class":36,"line":44},[34,103639,30855],{"class":112},[34,103641,31843],{"class":59},[34,103643,31846],{"class":112},[34,103645,31849],{"class":59},[34,103647,103648],{"class":36,"line":50},[34,103649,2864],{"emptyLinePlaceholder":540},[34,103651,103652],{"class":36,"line":56},[34,103653,2864],{"emptyLinePlaceholder":540},[34,103655,103656,103658,103660],{"class":36,"line":107},[34,103657,101701],{"class":63},[34,103659,14028],{"class":112},[34,103661,101706],{"class":187},[34,103663,103664],{"class":36,"line":196},[34,103665,103666],{"class":187},"\u003Cmujoco model=\"xml_basic\">\n",[34,103668,103669],{"class":36,"line":202},[34,103670,101716],{"class":187},[34,103672,103673],{"class":36,"line":207},[34,103674,2864],{"emptyLinePlaceholder":540},[34,103676,103677],{"class":36,"line":222},[34,103678,101725],{"class":187},[34,103680,103681],{"class":36,"line":227},[34,103682,103683],{"class":187},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[34,103685,103686],{"class":36,"line":232},[34,103687,2864],{"emptyLinePlaceholder":540},[34,103689,103690],{"class":36,"line":238},[34,103691,103692],{"class":187},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[34,103694,103695],{"class":36,"line":244},[34,103696,103697],{"class":187},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[34,103699,103700],{"class":36,"line":250},[34,103701,103702],{"class":187},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,103704,103705],{"class":36,"line":256},[34,103706,103707],{"class":187},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,103709,103710],{"class":36,"line":261},[34,103711,101754],{"class":187},[34,103713,103714],{"class":36,"line":267},[34,103715,101759],{"class":187},[34,103717,103718],{"class":36,"line":2138},[34,103719,101764],{"class":187},[34,103721,103722],{"class":36,"line":2143},[34,103723,96157],{"class":187},[34,103725,103726],{"class":36,"line":2157},[34,103727,2864],{"emptyLinePlaceholder":540},[34,103729,103730],{"class":36,"line":2162},[34,103731,2864],{"emptyLinePlaceholder":540},[34,103733,103734,103736,103738,103740,103742],{"class":36,"line":2191},[34,103735,32410],{"class":112},[34,103737,2437],{"class":2427},[34,103739,101785],{"class":59},[34,103741,96145],{"class":63},[34,103743,4203],{"class":59},[34,103745,103746,103748,103750,103752,103754],{"class":36,"line":2196},[34,103747,101794],{"class":59},[34,103749,447],{"class":112},[34,103751,101799],{"class":59},[34,103753,101701],{"class":63},[34,103755,623],{"class":59},[34,103757,103758,103760,103762],{"class":36,"line":2213},[34,103759,101808],{"class":59},[34,103761,447],{"class":112},[34,103763,101813],{"class":59},[34,103765,103766],{"class":36,"line":2218},[34,103767,2864],{"emptyLinePlaceholder":540},[34,103769,103770,103773,103775,103778,103781],{"class":36,"line":2223},[34,103771,103772],{"class":59},"    box_body_id ",[34,103774,447],{"class":112},[34,103776,103777],{"class":59}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[34,103779,103780],{"class":187},"\"red_box\"",[34,103782,623],{"class":59},[34,103784,103785,103788,103790,103793,103796],{"class":36,"line":2228},[34,103786,103787],{"class":59},"    site_id ",[34,103789,447],{"class":112},[34,103791,103792],{"class":59}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[34,103794,103795],{"class":187},"\"box_center\"",[34,103797,623],{"class":59},[34,103799,103800],{"class":36,"line":2242},[34,103801,2864],{"emptyLinePlaceholder":540},[34,103803,103804,103806,103809,103811,103813],{"class":36,"line":2247},[34,103805,3565],{"class":112},[34,103807,103808],{"class":59}," box_body_id ",[34,103810,1515],{"class":112},[34,103812,4557],{"class":63},[34,103814,4203],{"class":59},[34,103816,103817,103820,103823,103825,103828],{"class":36,"line":3041},[34,103818,103819],{"class":112},"        raise",[34,103821,103822],{"class":63}," RuntimeError",[34,103824,617],{"class":59},[34,103826,103827],{"class":187},"\"body red_box not found\"",[34,103829,623],{"class":59},[34,103831,103832,103834,103837,103839,103841],{"class":36,"line":3055},[34,103833,3565],{"class":112},[34,103835,103836],{"class":59}," site_id ",[34,103838,1515],{"class":112},[34,103840,4557],{"class":63},[34,103842,4203],{"class":59},[34,103844,103845,103847,103849,103851,103854],{"class":36,"line":3063},[34,103846,103819],{"class":112},[34,103848,103822],{"class":63},[34,103850,617],{"class":59},[34,103852,103853],{"class":187},"\"site box_center not found\"",[34,103855,623],{"class":59},[34,103857,103858],{"class":36,"line":3068},[34,103859,2864],{"emptyLinePlaceholder":540},[34,103861,103862,103864,103866,103868,103870,103872,103874],{"class":36,"line":3074},[34,103863,3665],{"class":112},[34,103865,101888],{"class":59},[34,103867,26508],{"class":112},[34,103869,32906],{"class":63},[34,103871,617],{"class":59},[34,103873,2186],{"class":63},[34,103875,31249],{"class":59},[34,103877,103878],{"class":36,"line":3080},[34,103879,101903],{"class":59},[34,103881,103882],{"class":36,"line":3085},[34,103883,2864],{"emptyLinePlaceholder":540},[34,103885,103886,103888,103890,103893],{"class":36,"line":8412},[34,103887,31762],{"class":63},[34,103889,617],{"class":59},[34,103891,103892],{"class":187},"\"simulation time:\"",[34,103894,101865],{"class":59},[34,103896,103897,103899,103901,103904],{"class":36,"line":8436},[34,103898,31762],{"class":63},[34,103900,617],{"class":59},[34,103902,103903],{"class":187},"\"box body position:\"",[34,103905,103906],{"class":59},", data.xpos[box_body_id].copy())\n",[34,103908,103909,103911,103913,103916],{"class":36,"line":8441},[34,103910,31762],{"class":63},[34,103912,617],{"class":59},[34,103914,103915],{"class":187},"\"site position:\"",[34,103917,103918],{"class":59},", data.site_xpos[site_id].copy())\n",[34,103920,103921,103923,103925,103928],{"class":36,"line":8447},[34,103922,31762],{"class":63},[34,103924,617],{"class":59},[34,103926,103927],{"class":187},"\"box qpos:\"",[34,103929,103930],{"class":59},", np.array(data.qpos))\n",[34,103932,103933],{"class":36,"line":8474},[34,103934,2864],{"emptyLinePlaceholder":540},[34,103936,103937],{"class":36,"line":8479},[34,103938,2864],{"emptyLinePlaceholder":540},[34,103940,103941,103943,103945,103947,103949],{"class":36,"line":8485},[34,103942,2002],{"class":112},[34,103944,31683],{"class":63},[34,103946,101946],{"class":112},[34,103948,101949],{"class":187},[34,103950,4203],{"class":59},[34,103952,103953],{"class":36,"line":8497},[34,103954,101956],{"class":59},[14,103956,103957],{},"保存为：",[25,103959,103961],{"className":24286,"code":103960,"language":24288,"meta":22,"style":22},"touch ch2_xml_basic.py\n",[31,103962,103963],{"__ignoreMap":22},[34,103964,103965,103967],{"class":36,"line":37},[34,103966,101670],{"class":2427},[34,103968,103969],{"class":187}," ch2_xml_basic.py\n",[14,103971,102688],{},[25,103973,103975],{"className":24286,"code":103974,"language":24288,"meta":22,"style":22},"python ch2_xml_basic.py\n",[31,103976,103977],{"__ignoreMap":22},[34,103978,103979,103981],{"class":36,"line":37},[34,103980,29],{"class":2427},[34,103982,103969],{"class":187},[584,103984,101959],{"id":101959},[14,103986,103987],{},"用名字查找 body：",[25,103989,103991],{"className":27,"code":103990,"language":29,"meta":22,"style":22},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[31,103992,103993],{"__ignoreMap":22},[34,103994,103995,103998,104000,104002,104004],{"class":36,"line":37},[34,103996,103997],{"class":59},"box_body_id ",[34,103999,447],{"class":112},[34,104001,103777],{"class":59},[34,104003,103780],{"class":187},[34,104005,623],{"class":59},[14,104007,104008],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104010,104011],{},"用名字查找 site：",[25,104013,104015],{"className":27,"code":104014,"language":29,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[31,104016,104017],{"__ignoreMap":22},[34,104018,104019,104022,104024,104026,104028],{"class":36,"line":37},[34,104020,104021],{"class":59},"site_id ",[34,104023,447],{"class":112},[34,104025,103792],{"class":59},[34,104027,103795],{"class":187},[34,104029,623],{"class":59},[14,104031,104032,104033,104036,104037,104040],{},"注意第二个参数是对象类型。查 body 就用 ",[31,104034,104035],{},"mjOBJ_BODY","，查 site 就用 ",[31,104038,104039],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104042,104043],{},"读取世界坐标：",[25,104045,104047],{"className":27,"code":104046,"language":29,"meta":22,"style":22},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[31,104048,104049,104054],{"__ignoreMap":22},[34,104050,104051],{"class":36,"line":37},[34,104052,104053],{"class":59},"data.xpos[box_body_id]\n",[34,104055,104056],{"class":36,"line":44},[34,104057,104058],{"class":59},"data.site_xpos[site_id]\n",[14,104060,104061,104064,104065,104068],{},[31,104062,104063],{},"xpos"," 是 body 的世界坐标，",[31,104066,104067],{},"site_xpos"," 是 site 的世界坐标。",[584,104070,102095],{"id":102095},[25,104072,104074],{"className":27,"code":104073,"language":29,"meta":22,"style":22},"import mujoco\nimport numpy as np\n",[31,104075,104076,104082],{"__ignoreMap":22},[34,104077,104078,104080],{"class":36,"line":37},[34,104079,30855],{"class":112},[34,104081,101688],{"class":59},[34,104083,104084,104086,104088,104090],{"class":36,"line":44},[34,104085,30855],{"class":112},[34,104087,31843],{"class":59},[34,104089,31846],{"class":112},[34,104091,31849],{"class":59},[14,104093,104094,104095,104098,104099,104102,104103,822,104106,28850],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[31,104096,104097],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[31,104100,104101],{},"as np"," 是习惯写法，后面就可以写 ",[31,104104,104105],{},"np.array(...)",[31,104107,104108],{},"np.round(...)",[25,104110,104111],{"className":27,"code":101982,"language":29,"meta":22,"style":22},[31,104112,104113,104121,104125],{"__ignoreMap":22},[34,104114,104115,104117,104119],{"class":36,"line":37},[34,104116,101701],{"class":63},[34,104118,14028],{"class":112},[34,104120,101706],{"class":187},[34,104122,104123],{"class":36,"line":44},[34,104124,101997],{"class":187},[34,104126,104127],{"class":36,"line":50},[34,104128,96157],{"class":187},[14,104130,104131,104132,28850],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[31,104133,104134],{},"mujoco.MjModel.from_xml_string(XML)",[25,104136,104138],{"className":53528,"code":104137,"language":53530,"meta":22,"style":22},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[31,104139,104140],{"__ignoreMap":22},[34,104141,104142,104144,104146,104148,104150,104152,104154,104156,104159,104161,104163,104166,104168,104170,104173],{"class":36,"line":37},[34,104143,1515],{"class":59},[34,104145,103597],{"class":51761},[34,104147,15384],{"class":2427},[34,104149,447],{"class":59},[34,104151,103795],{"class":187},[34,104153,101493],{"class":2427},[34,104155,447],{"class":59},[34,104157,104158],{"class":187},"\"0 0 0\"",[34,104160,101523],{"class":2427},[34,104162,447],{"class":59},[34,104164,104165],{"class":187},"\"0.03\"",[34,104167,79228],{"class":2427},[34,104169,447],{"class":59},[34,104171,104172],{"class":187},"\"0 1 0 1\"",[34,104174,101531],{"class":59},[14,104176,104177,104179,104180,104183,104184,104186,104187,104190],{},[31,104178,103597],{}," 是标记点。",[31,104181,104182],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[31,104185,103557],{}," 表示显示出来的小球大小。",[31,104188,104189],{},"rgba=\"0 1 0 1\""," 表示绿色。",[25,104192,104193],{"className":27,"code":103990,"language":29,"meta":22,"style":22},[31,104194,104195],{"__ignoreMap":22},[34,104196,104197,104199,104201,104203,104205],{"class":36,"line":37},[34,104198,103997],{"class":59},[34,104200,447],{"class":112},[34,104202,103777],{"class":59},[34,104204,103780],{"class":187},[34,104206,623],{"class":59},[14,104208,104209,104210,104212],{},"这行的作用是：根据名字 ",[31,104211,103780],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104214,104215],{},"拆开看：",[567,104217,104218,104224,104229,104235],{},[570,104219,104220,104223],{},[31,104221,104222],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[570,104225,104226,104228],{},[31,104227,102472],{}," 是被查询的模型。",[570,104230,104231,104234],{},[31,104232,104233],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[570,104236,104237,104239],{},[31,104238,103780],{}," 是 XML 里写的名字。",[25,104241,104242],{"className":27,"code":104014,"language":29,"meta":22,"style":22},[31,104243,104244],{"__ignoreMap":22},[34,104245,104246,104248,104250,104252,104254],{"class":36,"line":37},[34,104247,104021],{"class":59},[34,104249,447],{"class":112},[34,104251,103792],{"class":59},[34,104253,103795],{"class":187},[34,104255,623],{"class":59},[14,104257,104258,104259,28850],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[31,104260,103795],{},[25,104262,104264],{"className":27,"code":104263,"language":29,"meta":22,"style":22},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[31,104265,104266,104278],{"__ignoreMap":22},[34,104267,104268,104270,104272,104274,104276],{"class":36,"line":37},[34,104269,2002],{"class":112},[34,104271,103808],{"class":59},[34,104273,1515],{"class":112},[34,104275,4557],{"class":63},[34,104277,4203],{"class":59},[34,104279,104280,104283,104285,104287,104289],{"class":36,"line":44},[34,104281,104282],{"class":112},"    raise",[34,104284,103822],{"class":63},[34,104286,617],{"class":59},[34,104288,103827],{"class":187},[34,104290,623],{"class":59},[14,104292,104293,104295,104296,104299,104300,104303,104304,104307],{},[31,104294,2002],{}," 是条件判断。",[31,104297,104298],{},"mj_name2id"," 找不到对象时会返回 ",[31,104301,104302],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[31,104305,104306],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[25,104309,104311],{"className":27,"code":104310,"language":29,"meta":22,"style":22},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[31,104312,104313,104329],{"__ignoreMap":22},[34,104314,104315,104317,104319,104321,104323,104325,104327],{"class":36,"line":37},[34,104316,3489],{"class":112},[34,104318,101888],{"class":59},[34,104320,26508],{"class":112},[34,104322,32906],{"class":63},[34,104324,617],{"class":59},[34,104326,2186],{"class":63},[34,104328,31249],{"class":59},[34,104330,104331],{"class":36,"line":44},[34,104332,102086],{"class":59},[14,104334,104335],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[25,104337,104339],{"className":27,"code":104338,"language":29,"meta":22,"style":22},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[31,104340,104341],{"__ignoreMap":22},[34,104342,104343,104345,104347,104349],{"class":36,"line":37},[34,104344,30878],{"class":63},[34,104346,617],{"class":59},[34,104348,103903],{"class":187},[34,104350,103906],{"class":59},[14,104352,104353,104355,104356,104359],{},[31,104354,101466],{}," 保存所有 body 的世界坐标。",[31,104357,104358],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[25,104361,104363],{"className":27,"code":104362,"language":29,"meta":22,"style":22},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[31,104364,104365],{"__ignoreMap":22},[34,104366,104367,104369,104371,104373],{"class":36,"line":37},[34,104368,30878],{"class":63},[34,104370,617],{"class":59},[34,104372,103915],{"class":187},[34,104374,103918],{"class":59},[14,104376,104377,104380,104381,104383],{},[31,104378,104379],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[31,104382,103364],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[25,104385,104387],{"className":27,"code":104386,"language":29,"meta":22,"style":22},"print(\"box qpos:\", np.array(data.qpos))\n",[31,104388,104389],{"__ignoreMap":22},[34,104390,104391,104393,104395,104397],{"class":36,"line":37},[34,104392,30878],{"class":63},[34,104394,617],{"class":59},[34,104396,103927],{"class":187},[34,104398,103930],{"class":59},[14,104400,104401,104402,104405],{},"这里打印广义位置数组。",[31,104403,104404],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[555,104407,102703],{"id":102702},[14,104409,104410,104411,104414,104415,28850],{},"程序会输出 ",[31,104412,104413],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[31,104416,104417],{},"qpos",[14,104419,104420,104422,104423,104426,104427,104430],{},[31,104421,104358],{}," 是 body 的世界坐标位置。",[31,104424,104425],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[31,104428,104429],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104432,82683,104433,82991,104435,104437],{},[31,104434,103364],{},[31,104436,104182],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104439,104440],{},"如果你把 site 改成：",[25,104442,104444],{"className":53528,"code":104443,"language":53530,"meta":22,"style":22},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[31,104445,104446],{"__ignoreMap":22},[34,104447,104448,104450,104452,104454,104456,104459,104461,104463,104466,104468,104470,104472,104474,104476,104478],{"class":36,"line":37},[34,104449,1515],{"class":59},[34,104451,103597],{"class":51761},[34,104453,15384],{"class":2427},[34,104455,447],{"class":59},[34,104457,104458],{"class":187},"\"box_top\"",[34,104460,101493],{"class":2427},[34,104462,447],{"class":59},[34,104464,104465],{"class":187},"\"0 0 0.15\"",[34,104467,101523],{"class":2427},[34,104469,447],{"class":59},[34,104471,104165],{"class":187},[34,104473,79228],{"class":2427},[34,104475,447],{"class":59},[34,104477,104172],{"class":187},[34,104479,101531],{"class":59},[14,104481,104482,104483,104486],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[31,104484,104485],{},"site position"," 就会比 body position 的 z 坐标更高。",[555,104488,102735],{"id":102734},[567,104490,104491,104500,104503,104510,104516,104527],{},[570,104492,102798,104493,104495,104496,102801,104498,28850],{},[31,104494,103368],{}," 的初始高度从 ",[31,104497,64],{},[31,104499,70],{},[570,104501,104502],{},"重新运行程序。",[570,104504,104505,104506,104509],{},"观察 ",[31,104507,104508],{},"box qpos"," 和最终位置是否变化。",[570,104511,104512,104513,104515],{},"故意把 ",[31,104514,103597],{}," 名称改错，确认程序能报错。",[570,104517,102798,104518,104520,104521,102801,104523,104526],{},[31,104519,101507],{}," 的颜色 ",[31,104522,102419],{},[31,104524,104525],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[570,104528,102798,104529,82991,104531,102801,104534,104537,104538,104540],{},[31,104530,103364],{},[31,104532,104533],{},"pos",[31,104535,104536],{},"0 0 0.2","，观察 ",[31,104539,104485],{}," 如何变化。",[555,104542,102840],{"id":102839},[584,104544,104546],{"id":104545},"xml-error-schema-violation",[31,104547,104548],{},"XML Error: Schema violation",[14,104550,104551],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[584,104553,104555,81751,104557],{"id":104554},"mj_name2id-返回-1",[31,104556,104298],{},[31,104558,104302],{},[14,104560,104561,104562,104565],{},"说明名字没有找到。检查 XML 中 ",[31,104563,104564],{},"name=\"...\"","，并确认对象类型正确。",[584,104567,104568],{"id":104568},"物体不下落",[14,104570,102910],{},[567,104572,104573,104578,104583],{},[570,104574,104575,104576],{},"body 是否有 ",[31,104577,102007],{},[570,104579,104580,104581],{},"gravity 是否为 ",[31,104582,102976],{},[570,104584,104585,104586,104588],{},"body 是否被固定在 ",[31,104587,102228],{}," 中",[584,104590,104591],{"id":104591},"坐标看起来不符合预期",[14,104593,104594],{},"先区分两种坐标：",[748,104596,104597,104606],{},[751,104598,104599],{},[754,104600,104601,104604],{},[757,104602,104603],{"align":24200},"坐标",[757,104605,101087],{"align":24200},[795,104607,104608,104618],{},[754,104609,104610,104615],{},[800,104611,104612,104613],{"align":24200},"XML 里的 ",[31,104614,104533],{},[800,104616,104617],{"align":24200},"相对父 body 的局部坐标",[754,104619,104620,104626],{},[800,104621,104622,25443,104624],{"align":24200},[31,104623,101466],{},[31,104625,104379],{},[800,104627,104628],{"align":24200},"仿真更新后的世界坐标",[14,104630,104631,104632,104634,104635,83000,104638,104640],{},"如果你修改了 ",[31,104633,101457],{},"，但还没调用 ",[31,104636,104637],{},"mj_forward",[31,104639,101602],{},"，世界坐标可能还没有更新。",[555,104642,102994],{"id":102993},[14,104644,104645],{},"MJCF 建模先掌握四件事：",[567,104647,104648,104653,104658,104663],{},[570,104649,104650,104652],{},[31,104651,52261],{}," 表示刚体层级。",[570,104654,104655,104657],{},[31,104656,101507],{}," 表示形状、碰撞和质量。",[570,104659,104660,104662],{},[31,104661,103343],{}," 决定 body 能不能动、怎么动。",[570,104664,104665,104667],{},[31,104666,103597],{}," 用来标记关键点，方便 Python 读取位置。",[14,104669,104670],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[532,104672,104673],{},"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":22,"searchDepth":44,"depth":44,"links":104675},[104676,104677,104678,104684,104688,104689,104690,104697],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":104679},[104680,104681,104682,104683],{"id":103347,"depth":50,"text":103347},{"id":103461,"depth":50,"text":103461},{"id":103487,"depth":50,"text":103488},{"id":103591,"depth":50,"text":103592},{"id":101639,"depth":44,"text":101640,"children":104685},[104686,104687],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":104691},[104692,104693,104695,104696],{"id":104545,"depth":50,"text":104548},{"id":104554,"depth":50,"text":104694},"mj_name2id 返回 -1",{"id":104568,"depth":50,"text":104568},{"id":104591,"depth":50,"text":104591},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103041,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104704,"title":104705,"body":104706,"description":22,"extension":538,"meta":106201,"navigation":540,"path":106202,"seo":106203,"stem":106204,"__hash__":106205},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104707,"toc":106173},[104708,104711,104713,104716,104719,104757,104760,104766,104769,104771,104773,104800,104802,104816,104818,104859,104861,104885,104887,104890,104899,104908,104911,104920,104928,104937,104940,104950,104953,105005,105012,105018,105026,105074,105077,105096,105099,105107,105111,105120,105153,105155,105503,105505,105517,105519,105530,105532,105535,105556,105562,105565,105590,105600,105603,105611,105614,105617,105638,105649,105651,105671,105674,105695,105704,105723,105729,105754,105757,105771,105778,105802,105805,105813,105822,105838,105850,105858,105867,105869,105872,105896,105901,105904,105926,105928,105967,105969,105976,105978,105986,105989,105992,106004,106045,106052,106063,106070,106073,106122,106125,106128,106134,106136,106141,106167,106170],[10,104709,104705],{"id":104710},"_3python-控制接口读取状态与推进仿真",[555,104712,101034],{"id":101033},[14,104714,104715],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104717,104718],{},"你将学习:",[567,104720,104721,104726,104731,104735,104740,104751],{},[570,104722,104723],{},[31,104724,104725],{},"MjModel.from_xml_string",[570,104727,104728],{},[31,104729,104730],{},"MjData(model)",[570,104732,104733],{},[31,104734,101602],{},[570,104736,104737],{},[31,104738,104739],{},"mj_resetData",[570,104741,104742,104743,822,104745,822,104748],{},"读取 ",[31,104744,104417],{},[31,104746,104747],{},"qvel",[31,104749,104750],{},"ctrl",[570,104752,104753,104754],{},"使用 ",[31,104755,104756],{},"model.opt.timestep",[14,104758,104759],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[25,104761,104764],{"className":104762,"code":104763,"language":5651,"meta":22},[5649],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[31,104765,104763],{"__ignoreMap":22},[14,104767,104768],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[555,104770,101157],{"id":101156},[14,104772,101160],{},[25,104774,104776],{"className":24286,"code":104775,"language":24288,"meta":22,"style":22},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[31,104777,104778],{"__ignoreMap":22},[34,104779,104780,104782,104784,104786,104788,104791,104793,104795,104797],{"class":36,"line":37},[34,104781,25041],{"class":2427},[34,104783,26780],{"class":187},[34,104785,24298],{"class":187},[34,104787,26865],{"class":63},[34,104789,104790],{"class":187}," python3",[34,104792,101185],{"class":187},[34,104794,102888],{"class":187},[34,104796,101201],{"class":187},[34,104798,104799],{"class":187}," glfw\n",[14,104801,103206],{},[25,104803,104804],{"className":24286,"code":101306,"language":24288,"meta":22,"style":22},[31,104805,104806],{"__ignoreMap":22},[34,104807,104808,104810,104812,104814],{"class":36,"line":37},[34,104809,24295],{"class":2427},[34,104811,24298],{"class":187},[34,104813,101317],{"class":187},[34,104815,101320],{"class":187},[14,104817,103223],{},[25,104819,104821],{"className":24286,"code":104820,"language":24288,"meta":22,"style":22},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[31,104822,104823,104840,104849],{"__ignoreMap":22},[34,104824,104825,104827,104829,104831,104834,104836,104838],{"class":36,"line":37},[34,104826,30795],{"class":2427},[34,104828,29641],{"class":187},[34,104830,25580],{"class":63},[34,104832,104833],{"class":187}," mujoco-python-api",[34,104835,101362],{"class":187},[34,104837,101365],{"class":63},[34,104839,101368],{"class":63},[34,104841,104842,104844,104846],{"class":36,"line":44},[34,104843,30795],{"class":2427},[34,104845,101375],{"class":187},[34,104847,104848],{"class":187}," mujoco-python-api\n",[34,104850,104851,104853,104855,104857],{"class":36,"line":50},[34,104852,24295],{"class":2427},[34,104854,24298],{"class":187},[34,104856,101317],{"class":187},[34,104858,101320],{"class":187},[14,104860,101391],{},[567,104862,104863,104870,104879],{},[570,104864,104865,101405,104867,104869],{},[31,104866,101062],{},[31,104868,101067],{}," 是官方 Python bindings 的类名。",[570,104871,104872,104873,104876,104877,28850],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[31,104874,104875],{},"mjModel"," 在 Python 中是 ",[31,104878,101096],{},[570,104880,104881,104882,28850],{},"不要使用 ",[31,104883,104884],{},"sim = mujoco_py.MjSim(...)",[555,104886,101432],{"id":101431},[14,104888,104889],{},"仿真推进核心代码:",[25,104891,104893],{"className":27,"code":104892,"language":29,"meta":22,"style":22},"mujoco.mj_step(model, data)\n",[31,104894,104895],{"__ignoreMap":22},[34,104896,104897],{"class":36,"line":37},[34,104898,104892],{"class":59},[14,104900,104901,104902,822,104904,822,104906,28850],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[31,104903,101457],{},[31,104905,101460],{},[31,104907,101454],{},[14,104909,104910],{},"重置仿真:",[25,104912,104914],{"className":27,"code":104913,"language":29,"meta":22,"style":22},"mujoco.mj_resetData(model, data)\n",[31,104915,104916],{"__ignoreMap":22},[34,104917,104918],{"class":36,"line":37},[34,104919,104913],{"class":59},[14,104921,104922,104923,83000,104925,104927],{},"如果手动修改了 ",[31,104924,101457],{},[31,104926,101460],{},"，通常应调用:",[25,104929,104931],{"className":27,"code":104930,"language":29,"meta":22,"style":22},"mujoco.mj_forward(model, data)\n",[31,104932,104933],{"__ignoreMap":22},[34,104934,104935],{"class":36,"line":37},[34,104936,104930],{"class":59},[14,104938,104939],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[584,104941,104943,822,104945,822,104947,104949],{"id":104942},"qposqvelctrl-是什么",[31,104944,104417],{},[31,104946,104747],{},[31,104948,104750],{}," 是什么",[14,104951,104952],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[748,104954,104955,104967],{},[751,104956,104957],{},[754,104958,104959,104962,104964],{},[757,104960,104961],{"align":24200},"字段",[757,104963,101087],{"align":24200},[757,104965,104966],{"align":24200},"谁来修改",[795,104968,104969,104981,104993],{},[754,104970,104971,104975,104978],{},[800,104972,104973],{"align":24200},[31,104974,101457],{},[800,104976,104977],{"align":24200},"广义位置，例如小车位置、关节角、自由物体位置姿态",[800,104979,104980],{"align":24200},"MuJoCo 更新，也可以手动设置初始状态",[754,104982,104983,104987,104990],{},[800,104984,104985],{"align":24200},[31,104986,101460],{},[800,104988,104989],{"align":24200},"广义速度，例如小车速度、关节角速度",[800,104991,104992],{"align":24200},"MuJoCo 更新，也可以手动清零",[754,104994,104995,104999,105002],{},[800,104996,104997],{"align":24200},[31,104998,101463],{},[800,105000,105001],{"align":24200},"actuator 的控制输入",[800,105003,105004],{"align":24200},"主要由你的控制代码写入",[14,105006,9489,105007,101405,105009,105011],{},[31,105008,104417],{},[31,105010,104747],{}," 不一定同维。自由刚体就是典型例子：",[25,105013,105016],{"className":105014,"code":105015,"language":5651,"meta":22},[5649],"freejoint: qpos 7 维，qvel 6 维\n",[31,105017,105015],{"__ignoreMap":22},[584,105019,105021,101405,105023,105025],{"id":105020},"mj_step-和-mj_forward-的区别",[31,105022,101602],{},[31,105024,104637],{}," 的区别",[748,105027,105028,105041],{},[751,105029,105030],{},[754,105031,105032,105035,105038],{},[757,105033,105034],{"align":24200},"函数",[757,105036,105037],{"align":24200},"是否推进时间",[757,105039,105040],{"align":24200},"什么时候用",[795,105042,105043,105056],{},[754,105044,105045,105050,105053],{},[800,105046,105047],{"align":24200},[31,105048,105049],{},"mj_step(model, data)",[800,105051,105052],{"align":24200},"是",[800,105054,105055],{"align":24200},"正常仿真循环，每调用一次前进一步",[754,105057,105058,105063,105066],{},[800,105059,105060],{"align":24200},[31,105061,105062],{},"mj_forward(model, data)",[800,105064,105065],{"align":24200},"否",[800,105067,105068,105069,822,105071,105073],{"align":24200},"手动改了 ",[31,105070,104417],{},[31,105072,104747],{}," 后，刷新派生量",[14,105075,105076],{},"例如你写：",[25,105078,105080],{"className":27,"code":105079,"language":29,"meta":22,"style":22},"data.qpos[2] = 2.0\n",[31,105081,105082],{"__ignoreMap":22},[34,105083,105084,105087,105089,105091,105093],{"class":36,"line":37},[34,105085,105086],{"class":59},"data.qpos[",[34,105088,70],{"class":63},[34,105090,4907],{"class":59},[34,105092,447],{"class":112},[34,105094,105095],{"class":63}," 2.0\n",[14,105097,105098],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[25,105100,105101],{"className":27,"code":104930,"language":29,"meta":22,"style":22},[31,105102,105103],{"__ignoreMap":22},[34,105104,105105],{"class":36,"line":37},[34,105106,104930],{"class":59},[584,105108,105110],{"id":105109},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105112,105113,105116,105117,105119],{},[31,105114,105115],{},"mujoco.mj_resetData(model, data)"," 会把 ",[31,105118,33863],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[25,105121,105123],{"className":27,"code":105122,"language":29,"meta":22,"style":22},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[31,105124,105125,105129,105139,105149],{"__ignoreMap":22},[34,105126,105127],{"class":36,"line":37},[34,105128,104913],{"class":59},[34,105130,105131,105134,105136],{"class":36,"line":44},[34,105132,105133],{"class":59},"data.qpos[:] ",[34,105135,447],{"class":112},[34,105137,105138],{"class":59}," random_qpos\n",[34,105140,105141,105144,105146],{"class":36,"line":50},[34,105142,105143],{"class":59},"data.qvel[:] ",[34,105145,447],{"class":112},[34,105147,105148],{"class":63}," 0.0\n",[34,105150,105151],{"class":36,"line":56},[34,105152,104930],{"class":59},[555,105154,101640],{"id":101639},[25,105156,105158],{"className":27,"code":105157,"language":29,"meta":22,"style":22},"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",[31,105159,105160,105166,105176,105180,105184,105192,105197,105201,105205,105209,105214,105218,105223,105228,105233,105237,105241,105245,105249,105253,105257,105276,105283,105295,105306,105322,105338,105342,105346,105358,105370,105378,105382,105393,105397,105413,105417,105421,105430,105434,105439,105448,105452,105465,105470,105479,105483,105487,105499],{"__ignoreMap":22},[34,105161,105162,105164],{"class":36,"line":37},[34,105163,30855],{"class":112},[34,105165,101688],{"class":59},[34,105167,105168,105170,105172,105174],{"class":36,"line":44},[34,105169,30855],{"class":112},[34,105171,31843],{"class":59},[34,105173,31846],{"class":112},[34,105175,31849],{"class":59},[34,105177,105178],{"class":36,"line":50},[34,105179,2864],{"emptyLinePlaceholder":540},[34,105181,105182],{"class":36,"line":56},[34,105183,2864],{"emptyLinePlaceholder":540},[34,105185,105186,105188,105190],{"class":36,"line":107},[34,105187,101701],{"class":63},[34,105189,14028],{"class":112},[34,105191,101706],{"class":187},[34,105193,105194],{"class":36,"line":196},[34,105195,105196],{"class":187},"\u003Cmujoco model=\"state_api\">\n",[34,105198,105199],{"class":36,"line":202},[34,105200,101716],{"class":187},[34,105202,105203],{"class":36,"line":207},[34,105204,2864],{"emptyLinePlaceholder":540},[34,105206,105207],{"class":36,"line":222},[34,105208,101725],{"class":187},[34,105210,105211],{"class":36,"line":227},[34,105212,105213],{"class":187},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[34,105215,105216],{"class":36,"line":232},[34,105217,2864],{"emptyLinePlaceholder":540},[34,105219,105220],{"class":36,"line":238},[34,105221,105222],{"class":187},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[34,105224,105225],{"class":36,"line":244},[34,105226,105227],{"class":187},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[34,105229,105230],{"class":36,"line":250},[34,105231,105232],{"class":187},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[34,105234,105235],{"class":36,"line":256},[34,105236,101754],{"class":187},[34,105238,105239],{"class":36,"line":261},[34,105240,101759],{"class":187},[34,105242,105243],{"class":36,"line":267},[34,105244,101764],{"class":187},[34,105246,105247],{"class":36,"line":2138},[34,105248,96157],{"class":187},[34,105250,105251],{"class":36,"line":2143},[34,105252,2864],{"emptyLinePlaceholder":540},[34,105254,105255],{"class":36,"line":2157},[34,105256,2864],{"emptyLinePlaceholder":540},[34,105258,105259,105261,105264,105267,105269,105272,105274],{"class":36,"line":2162},[34,105260,32410],{"class":112},[34,105262,105263],{"class":2427}," print_state",[34,105265,105266],{"class":59},"(prefix: ",[34,105268,1774],{"class":63},[34,105270,105271],{"class":59},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[34,105273,96145],{"class":63},[34,105275,4203],{"class":59},[34,105277,105278,105280],{"class":36,"line":2191},[34,105279,31762],{"class":63},[34,105281,105282],{"class":59},"(prefix)\n",[34,105284,105285,105287,105289,105292],{"class":36,"line":2196},[34,105286,31762],{"class":63},[34,105288,617],{"class":59},[34,105290,105291],{"class":187},"\"  timestep:\"",[34,105293,105294],{"class":59},", model.opt.timestep)\n",[34,105296,105297,105299,105301,105304],{"class":36,"line":2213},[34,105298,31762],{"class":63},[34,105300,617],{"class":59},[34,105302,105303],{"class":187},"\"  time:\"",[34,105305,101865],{"class":59},[34,105307,105308,105310,105312,105315,105318,105320],{"class":36,"line":2218},[34,105309,31762],{"class":63},[34,105311,617],{"class":59},[34,105313,105314],{"class":187},"\"  qpos:\"",[34,105316,105317],{"class":59},", np.round(data.qpos.copy(), ",[34,105319,217],{"class":63},[34,105321,30960],{"class":59},[34,105323,105324,105326,105328,105331,105334,105336],{"class":36,"line":2223},[34,105325,31762],{"class":63},[34,105327,617],{"class":59},[34,105329,105330],{"class":187},"\"  qvel:\"",[34,105332,105333],{"class":59},", np.round(data.qvel.copy(), ",[34,105335,217],{"class":63},[34,105337,30960],{"class":59},[34,105339,105340],{"class":36,"line":2228},[34,105341,2864],{"emptyLinePlaceholder":540},[34,105343,105344],{"class":36,"line":2242},[34,105345,2864],{"emptyLinePlaceholder":540},[34,105347,105348,105350,105352,105354,105356],{"class":36,"line":2247},[34,105349,32410],{"class":112},[34,105351,2437],{"class":2427},[34,105353,101785],{"class":59},[34,105355,96145],{"class":63},[34,105357,4203],{"class":59},[34,105359,105360,105362,105364,105366,105368],{"class":36,"line":3041},[34,105361,101794],{"class":59},[34,105363,447],{"class":112},[34,105365,101799],{"class":59},[34,105367,101701],{"class":63},[34,105369,623],{"class":59},[34,105371,105372,105374,105376],{"class":36,"line":3055},[34,105373,101808],{"class":59},[34,105375,447],{"class":112},[34,105377,101813],{"class":59},[34,105379,105380],{"class":36,"line":3063},[34,105381,2864],{"emptyLinePlaceholder":540},[34,105383,105384,105387,105390],{"class":36,"line":3068},[34,105385,105386],{"class":59},"    print_state(",[34,105388,105389],{"class":187},"\"initial\"",[34,105391,105392],{"class":59},", model, data)\n",[34,105394,105395],{"class":36,"line":3074},[34,105396,2864],{"emptyLinePlaceholder":540},[34,105398,105399,105401,105403,105405,105407,105409,105411],{"class":36,"line":3080},[34,105400,3665],{"class":112},[34,105402,101888],{"class":59},[34,105404,26508],{"class":112},[34,105406,32906],{"class":63},[34,105408,617],{"class":59},[34,105410,1262],{"class":63},[34,105412,31249],{"class":59},[34,105414,105415],{"class":36,"line":3085},[34,105416,101903],{"class":59},[34,105418,105419],{"class":36,"line":8412},[34,105420,2864],{"emptyLinePlaceholder":540},[34,105422,105423,105425,105428],{"class":36,"line":8436},[34,105424,105386],{"class":59},[34,105426,105427],{"class":187},"\"after 50 steps\"",[34,105429,105392],{"class":59},[34,105431,105432],{"class":36,"line":8441},[34,105433,2864],{"emptyLinePlaceholder":540},[34,105435,105436],{"class":36,"line":8447},[34,105437,105438],{"class":59},"    mujoco.mj_resetData(model, data)\n",[34,105440,105441,105443,105446],{"class":36,"line":8474},[34,105442,105386],{"class":59},[34,105444,105445],{"class":187},"\"after reset\"",[34,105447,105392],{"class":59},[34,105449,105450],{"class":36,"line":8479},[34,105451,2864],{"emptyLinePlaceholder":540},[34,105453,105454,105457,105459,105461,105463],{"class":36,"line":8485},[34,105455,105456],{"class":59},"    data.qpos[",[34,105458,70],{"class":63},[34,105460,4907],{"class":59},[34,105462,447],{"class":112},[34,105464,105095],{"class":63},[34,105466,105467],{"class":36,"line":8497},[34,105468,105469],{"class":59},"    mujoco.mj_forward(model, data)\n",[34,105471,105472,105474,105477],{"class":36,"line":8509},[34,105473,105386],{"class":59},[34,105475,105476],{"class":187},"\"after manual qpos edit\"",[34,105478,105392],{"class":59},[34,105480,105481],{"class":36,"line":8521},[34,105482,2864],{"emptyLinePlaceholder":540},[34,105484,105485],{"class":36,"line":10180},[34,105486,2864],{"emptyLinePlaceholder":540},[34,105488,105489,105491,105493,105495,105497],{"class":36,"line":10205},[34,105490,2002],{"class":112},[34,105492,31683],{"class":63},[34,105494,101946],{"class":112},[34,105496,101949],{"class":187},[34,105498,4203],{"class":59},[34,105500,105501],{"class":36,"line":10228},[34,105502,101956],{"class":59},[14,105504,103957],{},[25,105506,105508],{"className":24286,"code":105507,"language":24288,"meta":22,"style":22},"touch ch3_python_state.py\n",[31,105509,105510],{"__ignoreMap":22},[34,105511,105512,105514],{"class":36,"line":37},[34,105513,101670],{"class":2427},[34,105515,105516],{"class":187}," ch3_python_state.py\n",[14,105518,102688],{},[25,105520,105522],{"className":24286,"code":105521,"language":24288,"meta":22,"style":22},"python ch3_python_state.py\n",[31,105523,105524],{"__ignoreMap":22},[34,105525,105526,105528],{"class":36,"line":37},[34,105527,29],{"class":2427},[34,105529,105516],{"class":187},[584,105531,101959],{"id":101959},[14,105533,105534],{},"打印状态的函数：",[25,105536,105538],{"className":27,"code":105537,"language":29,"meta":22,"style":22},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[31,105539,105540],{"__ignoreMap":22},[34,105541,105542,105544,105546,105548,105550,105552,105554],{"class":36,"line":37},[34,105543,32410],{"class":112},[34,105545,105263],{"class":2427},[34,105547,105266],{"class":59},[34,105549,1774],{"class":63},[34,105551,105271],{"class":59},[34,105553,96145],{"class":63},[34,105555,4203],{"class":59},[14,105557,105558,105559,105561],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[31,105560,33863],{}," 里发生了什么。",[14,105563,105564],{},"推进 50 步：",[25,105566,105568],{"className":27,"code":105567,"language":29,"meta":22,"style":22},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[31,105569,105570,105586],{"__ignoreMap":22},[34,105571,105572,105574,105576,105578,105580,105582,105584],{"class":36,"line":37},[34,105573,3489],{"class":112},[34,105575,101888],{"class":59},[34,105577,26508],{"class":112},[34,105579,32906],{"class":63},[34,105581,617],{"class":59},[34,105583,1262],{"class":63},[34,105585,31249],{"class":59},[34,105587,105588],{"class":36,"line":44},[34,105589,102086],{"class":59},[14,105591,105592,105593,105596,105597,105599],{},"由于 ",[31,105594,105595],{},"timestep=0.01","，所以 50 步后时间约为 ",[31,105598,35791],{}," 秒。",[14,105601,105602],{},"重置：",[25,105604,105605],{"className":27,"code":104913,"language":29,"meta":22,"style":22},[31,105606,105607],{"__ignoreMap":22},[34,105608,105609],{"class":36,"line":37},[34,105610,104913],{"class":59},[14,105612,105613],{},"这会把时间、位置、速度恢复到初始状态。",[14,105615,105616],{},"手动改高度：",[25,105618,105620],{"className":27,"code":105619,"language":29,"meta":22,"style":22},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[31,105621,105622,105634],{"__ignoreMap":22},[34,105623,105624,105626,105628,105630,105632],{"class":36,"line":37},[34,105625,105086],{"class":59},[34,105627,70],{"class":63},[34,105629,4907],{"class":59},[34,105631,447],{"class":112},[34,105633,105095],{"class":63},[34,105635,105636],{"class":36,"line":44},[34,105637,104930],{"class":59},[14,105639,105640,105641,105644,105645,105648],{},"这个例子里 ",[31,105642,105643],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[31,105646,105647],{},"2.0"," 表示把小球放到更高的位置。",[584,105650,102095],{"id":102095},[25,105652,105653],{"className":27,"code":105537,"language":29,"meta":22,"style":22},[31,105654,105655],{"__ignoreMap":22},[34,105656,105657,105659,105661,105663,105665,105667,105669],{"class":36,"line":37},[34,105658,32410],{"class":112},[34,105660,105263],{"class":2427},[34,105662,105266],{"class":59},[34,105664,1774],{"class":63},[34,105666,105271],{"class":59},[34,105668,96145],{"class":63},[34,105670,4203],{"class":59},[14,105672,105673],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[567,105675,105676,105685,105690],{},[570,105677,105678,105681,105682,105684],{},[31,105679,105680],{},"prefix","：一段文字，比如 ",[31,105683,105389],{},"，用来说明现在打印的是哪个阶段。",[570,105686,105687,105689],{},[31,105688,102472],{},"：MuJoCo 模型。",[570,105691,105692,105694],{},[31,105693,33863],{},"：MuJoCo 当前状态。",[14,105696,105697,822,105700,105703],{},[31,105698,105699],{},"prefix: str",[31,105701,105702],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[25,105705,105707],{"className":27,"code":105706,"language":29,"meta":22,"style":22},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[31,105708,105709],{"__ignoreMap":22},[34,105710,105711,105713,105715,105717,105719,105721],{"class":36,"line":37},[34,105712,30878],{"class":63},[34,105714,617],{"class":59},[34,105716,105314],{"class":187},[34,105718,105317],{"class":59},[34,105720,217],{"class":63},[34,105722,30960],{"class":59},[14,105724,105725,105728],{},[31,105726,105727],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[25,105730,105732],{"className":27,"code":105731,"language":29,"meta":22,"style":22},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[31,105733,105734,105746],{"__ignoreMap":22},[34,105735,105736,105738,105740,105742,105744],{"class":36,"line":37},[34,105737,102021],{"class":59},[34,105739,447],{"class":112},[34,105741,101799],{"class":59},[34,105743,101701],{"class":63},[34,105745,623],{"class":59},[34,105747,105748,105750,105752],{"class":36,"line":44},[34,105749,102045],{"class":59},[34,105751,447],{"class":112},[34,105753,101813],{"class":59},[14,105755,105756],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[25,105758,105760],{"className":27,"code":105759,"language":29,"meta":22,"style":22},"print_state(\"initial\", model, data)\n",[31,105761,105762],{"__ignoreMap":22},[34,105763,105764,105767,105769],{"class":36,"line":37},[34,105765,105766],{"class":59},"print_state(",[34,105768,105389],{"class":187},[34,105770,105392],{"class":59},[14,105772,105773,105774,105777],{},"调用刚才定义的 ",[31,105775,105776],{},"print_state"," 函数，打印初始状态。",[25,105779,105780],{"className":27,"code":105567,"language":29,"meta":22,"style":22},[31,105781,105782,105798],{"__ignoreMap":22},[34,105783,105784,105786,105788,105790,105792,105794,105796],{"class":36,"line":37},[34,105785,3489],{"class":112},[34,105787,101888],{"class":59},[34,105789,26508],{"class":112},[34,105791,32906],{"class":63},[34,105793,617],{"class":59},[34,105795,1262],{"class":63},[34,105797,31249],{"class":59},[34,105799,105800],{"class":36,"line":44},[34,105801,102086],{"class":59},[14,105803,105804],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[25,105806,105807],{"className":27,"code":104913,"language":29,"meta":22,"style":22},[31,105808,105809],{"__ignoreMap":22},[34,105810,105811],{"class":36,"line":37},[34,105812,104913],{"class":59},[14,105814,105815,105816,105818,105819,105821],{},"重置 ",[31,105817,33863],{},"。注意它不会重新创建 ",[31,105820,102472],{},"，因为模型结构没有变，只是状态回到初始值。",[25,105823,105824],{"className":27,"code":105079,"language":29,"meta":22,"style":22},[31,105825,105826],{"__ignoreMap":22},[34,105827,105828,105830,105832,105834,105836],{"class":36,"line":37},[34,105829,105086],{"class":59},[34,105831,70],{"class":63},[34,105833,4907],{"class":59},[34,105835,447],{"class":112},[34,105837,105095],{"class":63},[14,105839,105840,105841,822,105844,822,105847,105849],{},"这行是“手动改状态”。在 freejoint 中，",[31,105842,105843],{},"qpos[0]",[31,105845,105846],{},"qpos[1]",[31,105848,105643],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[25,105851,105852],{"className":27,"code":104930,"language":29,"meta":22,"style":22},[31,105853,105854],{"__ignoreMap":22},[34,105855,105856],{"class":36,"line":37},[34,105857,104930],{"class":59},[14,105859,105860,105861,105863,105864,105866],{},"手动改完 ",[31,105862,104417],{}," 后，调用 ",[31,105865,104637],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[555,105868,102703],{"id":102702},[14,105870,105871],{},"你会看到:",[567,105873,105874,105879,105884,105887],{},[570,105875,105876,105877],{},"初始时间为 ",[31,105878,319],{},[570,105880,105881,105882],{},"50 步后时间约为 ",[31,105883,35791],{},[570,105885,105886],{},"reset 后状态恢复",[570,105888,105889,105890,105893,105894],{},"手动修改 ",[31,105891,105892],{},"data.qpos[2]"," 后，小球高度变为 ",[31,105895,105647],{},[14,105897,105898,105900],{},[31,105899,105643],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105902,105903],{},"输出里可以重点看三件事：",[567,105905,105906,105914,105919],{},[570,105907,105908,105910,105911,105913],{},[31,105909,2851],{}," 是否随着 ",[31,105912,101602],{}," 增加。",[570,105915,105916,105918],{},[31,105917,104417],{}," 的 z 坐标是否因为下落而变化。",[570,105920,105921,105923,105924,28850],{},[31,105922,104739],{}," 后时间是否回到 ",[31,105925,319],{},[555,105927,102735],{"id":102734},[567,105929,105930,105936,105942,105948,105951,105960],{},[570,105931,105932,105933,28850],{},"修改 timestep 为 ",[31,105934,105935],{},"0.005",[570,105937,105938,105939,28850],{},"重新运行，检查 50 步后时间是否约为 ",[31,105940,105941],{},"0.25",[570,105943,105944,105945,28850],{},"修改重力为 ",[31,105946,105947],{},"0 0 -1.0",[570,105949,105950],{},"观察小球下降速度是否变慢。",[570,105952,102798,105953,102801,105956,105959],{},[31,105954,105955],{},"data.qpos[2] = 2.0",[31,105957,105958],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[570,105961,105962,105963,105966],{},"注释掉 ",[31,105964,105965],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[555,105968,102840],{"id":102839},[584,105970,105972,105973,105975],{"id":105971},"修改-dataqpos-后位置没有更新","修改 ",[31,105974,101457],{}," 后位置没有更新",[14,105977,102849],{},[25,105979,105980],{"className":27,"code":104930,"language":29,"meta":22,"style":22},[31,105981,105982],{"__ignoreMap":22},[34,105983,105984],{"class":36,"line":37},[34,105985,104930],{"class":59},[584,105987,105988],{"id":105988},"数组维度看不懂",[14,105990,105991],{},"打印模型维度:",[25,105993,105995],{"className":27,"code":105994,"language":29,"meta":22,"style":22},"print(model.nq, model.nv, model.nu)\n",[31,105996,105997],{"__ignoreMap":22},[34,105998,105999,106001],{"class":36,"line":37},[34,106000,30878],{"class":63},[34,106002,106003],{"class":59},"(model.nq, model.nv, model.nu)\n",[748,106005,106006,106014],{},[751,106007,106008],{},[754,106009,106010,106012],{},[757,106011,104961],{"align":24200},[757,106013,101087],{"align":24200},[795,106015,106016,106026,106036],{},[754,106017,106018,106023],{},[800,106019,106020],{"align":24200},[31,106021,106022],{},"nq",[800,106024,106025],{"align":24200},"位置变量数量",[754,106027,106028,106033],{},[800,106029,106030],{"align":24200},[31,106031,106032],{},"nv",[800,106034,106035],{"align":24200},"速度变量数量",[754,106037,106038,106042],{},[800,106039,106040],{"align":24200},[31,106041,102549],{},[800,106043,106044],{"align":24200},"控制输入数量",[584,106046,106048,106049,106051],{"id":106047},"误以为-qpos-一定等于关节数","误以为 ",[31,106050,104417],{}," 一定等于关节数",[14,106053,106054,106055,82991,106057,106059,106060,106062],{},"不是。例如 ",[31,106056,102007],{},[31,106058,104417],{}," 是 7 维，但 ",[31,106061,104747],{}," 是 6 维。",[584,106064,106066,106067,106069],{"id":106065},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[31,106068,104417],{}," 的第几位",[14,106071,106072],{},"初学时可以先打印：",[25,106074,106076],{"className":27,"code":106075,"language":29,"meta":22,"style":22},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[31,106077,106078,106088,106098,106110],{"__ignoreMap":22},[34,106079,106080,106082,106084,106086],{"class":36,"line":37},[34,106081,30878],{"class":63},[34,106083,617],{"class":59},[34,106085,101826],{"class":187},[34,106087,101829],{"class":59},[34,106089,106090,106092,106094,106096],{"class":36,"line":44},[34,106091,30878],{"class":63},[34,106093,617],{"class":59},[34,106095,101838],{"class":187},[34,106097,101841],{"class":59},[34,106099,106100,106102,106104,106107],{"class":36,"line":50},[34,106101,30878],{"class":63},[34,106103,617],{"class":59},[34,106105,106106],{"class":187},"\"qpos:\"",[34,106108,106109],{"class":59},", data.qpos)\n",[34,106111,106112,106114,106116,106119],{"class":36,"line":56},[34,106113,30878],{"class":63},[34,106115,617],{"class":59},[34,106117,106118],{"class":187},"\"qvel:\"",[34,106120,106121],{"class":59},", data.qvel)\n",[14,106123,106124],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[584,106126,106127],{"id":106127},"仿真结果每次都一样",[14,106129,106130,106131,106133],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[31,106132,104417],{},"、目标点或控制输入。",[555,106135,102994],{"id":102993},[14,106137,106138,106139,25083],{},"Python 控制 MuJoCo 的核心就是读写 ",[31,106140,33863],{},[567,106142,106143,106151,106156,106161],{},[570,106144,106145,106146,101405,106148,106150],{},"用 ",[31,106147,101457],{},[31,106149,101460],{}," 读取状态。",[570,106152,106145,106153,106155],{},[31,106154,101463],{}," 写入控制。",[570,106157,106145,106158,106160],{},[31,106159,101602],{}," 推进时间。",[570,106162,106163,106164,106166],{},"手动改状态后用 ",[31,106165,104637],{}," 刷新派生量。",[14,106168,106169],{},"理解这一章后，就可以进入关节和 actuator 控制。",[532,106171,106172],{},"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":22,"searchDepth":44,"depth":44,"links":106174},[106175,106176,106177,106184,106188,106189,106190,106200],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":106178},[106179,106181,106183],{"id":104942,"depth":50,"text":106180},"qpos、qvel、ctrl 是什么",{"id":105020,"depth":50,"text":106182},"mj_step 和 mj_forward 的区别",{"id":105109,"depth":50,"text":105110},{"id":101639,"depth":44,"text":101640,"children":106185},[106186,106187],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":106191},[106192,106194,106195,106197,106199],{"id":105971,"depth":50,"text":106193},"修改 data.qpos 后位置没有更新",{"id":105988,"depth":50,"text":105988},{"id":106047,"depth":50,"text":106196},"误以为 qpos 一定等于关节数",{"id":106065,"depth":50,"text":106198},"不知道某个元素在 qpos 的第几位",{"id":106127,"depth":50,"text":106127},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104705,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106207,"title":106208,"body":106209,"description":22,"extension":538,"meta":107899,"navigation":540,"path":107900,"seo":107901,"stem":107902,"__hash__":107903},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106210,"toc":107875},[106211,106214,106216,106219,106221,106246,106249,106268,106271,106273,106275,106299,106301,106315,106317,106358,106360,106384,106386,106389,106423,106425,106438,106441,106509,106518,106522,106525,106559,106565,106568,106572,106611,106614,106634,106638,106681,106683,106712,106715,106721,106724,106726,107120,107122,107134,107136,107147,107149,107152,107181,107189,107192,107227,107230,107232,107240,107243,107245,107256,107266,107286,107289,107325,107337,107385,107404,107446,107459,107487,107492,107513,107523,107541,107544,107578,107581,107601,107604,107623,107629,107631,107634,107640,107646,107656,107659,107665,107674,107676,107722,107724,107730,107736,107739,107742,107762,107765,107771,107777,107779,107802,107805,107808,107817,107820,107858,107860,107863,107869,107872],[10,106212,106208],{"id":106213},"_4关节actuator-与力控制",[555,106215,101034],{"id":101033},[14,106217,106218],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106220,104718],{},[567,106222,106223,106229,106234,106238,106243],{},[570,106224,106225,106228],{},[31,106226,106227],{},"hinge"," 关节",[570,106230,106231],{},[31,106232,106233],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[570,106235,106236],{},[31,106237,101463],{},[570,106239,106240],{},[31,106241,106242],{},"ctrlrange",[570,106244,106245],{},"读取关节角和角速度",[14,106247,106248],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[25,106250,106252],{"className":27,"code":106251,"language":29,"meta":22,"style":22},"data.ctrl[0] = ...\n",[31,106253,106254],{"__ignoreMap":22},[34,106255,106256,106259,106261,106263,106265],{"class":36,"line":37},[34,106257,106258],{"class":59},"data.ctrl[",[34,106260,319],{"class":63},[34,106262,4907],{"class":59},[34,106264,447],{"class":112},[34,106266,106267],{"class":63}," ...\n",[14,106269,106270],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[555,106272,101157],{"id":101156},[14,106274,101160],{},[25,106276,106277],{"className":24286,"code":104775,"language":24288,"meta":22,"style":22},[31,106278,106279],{"__ignoreMap":22},[34,106280,106281,106283,106285,106287,106289,106291,106293,106295,106297],{"class":36,"line":37},[34,106282,25041],{"class":2427},[34,106284,26780],{"class":187},[34,106286,24298],{"class":187},[34,106288,26865],{"class":63},[34,106290,104790],{"class":187},[34,106292,101185],{"class":187},[34,106294,102888],{"class":187},[34,106296,101201],{"class":187},[34,106298,104799],{"class":187},[14,106300,103206],{},[25,106302,106303],{"className":24286,"code":101306,"language":24288,"meta":22,"style":22},[31,106304,106305],{"__ignoreMap":22},[34,106306,106307,106309,106311,106313],{"class":36,"line":37},[34,106308,24295],{"class":2427},[34,106310,24298],{"class":187},[34,106312,101317],{"class":187},[34,106314,101320],{"class":187},[14,106316,103223],{},[25,106318,106320],{"className":24286,"code":106319,"language":24288,"meta":22,"style":22},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[31,106321,106322,106339,106348],{"__ignoreMap":22},[34,106323,106324,106326,106328,106330,106333,106335,106337],{"class":36,"line":37},[34,106325,30795],{"class":2427},[34,106327,29641],{"class":187},[34,106329,25580],{"class":63},[34,106331,106332],{"class":187}," mujoco-control",[34,106334,101362],{"class":187},[34,106336,101365],{"class":63},[34,106338,101368],{"class":63},[34,106340,106341,106343,106345],{"class":36,"line":44},[34,106342,30795],{"class":2427},[34,106344,101375],{"class":187},[34,106346,106347],{"class":187}," mujoco-control\n",[34,106349,106350,106352,106354,106356],{"class":36,"line":50},[34,106351,24295],{"class":2427},[34,106353,24298],{"class":187},[34,106355,101317],{"class":187},[34,106357,101320],{"class":187},[14,106359,101391],{},[567,106361,106362,106368,106375,106381],{},[570,106363,106364,106367],{},[31,106365,106366],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[570,106369,106370,106372,106373,28850],{},[31,106371,101463],{}," 长度等于 ",[31,106374,102545],{},[570,106376,82683,106377,106380],{},[31,106378,106379],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[570,106382,106383],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[555,106385,101432],{"id":101431},[14,106387,106388],{},"关节决定 body 如何运动:",[25,106390,106392],{"className":53528,"code":106391,"language":53530,"meta":22,"style":22},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[31,106393,106394],{"__ignoreMap":22},[34,106395,106396,106398,106400,106402,106404,106407,106409,106411,106413,106416,106418,106421],{"class":36,"line":37},[34,106397,1515],{"class":59},[34,106399,103343],{"class":51761},[34,106401,15384],{"class":2427},[34,106403,447],{"class":59},[34,106405,106406],{"class":187},"\"hinge\"",[34,106408,54285],{"class":2427},[34,106410,447],{"class":59},[34,106412,106406],{"class":187},[34,106414,106415],{"class":2427}," axis",[34,106417,447],{"class":59},[34,106419,106420],{"class":187},"\"0 1 0\"",[34,106422,101531],{"class":59},[14,106424,103439],{},[567,106426,106427,106432,106435],{},[570,106428,106429,106430],{},"名字是 ",[31,106431,106227],{},[570,106433,106434],{},"类型是旋转关节",[570,106436,106437],{},"绕 y 轴旋转",[14,106439,106440],{},"actuator 决定如何施加控制:",[25,106442,106444],{"className":53528,"code":106443,"language":53530,"meta":22,"style":22},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[31,106445,106446,106455,106501],{"__ignoreMap":22},[34,106447,106448,106450,106453],{"class":36,"line":37},[34,106449,1515],{"class":59},[34,106451,106452],{"class":51761},"actuator",[34,106454,51768],{"class":59},[34,106456,106457,106459,106462,106464,106466,106469,106472,106474,106476,106479,106481,106483,106486,106488,106491,106494,106496,106499],{"class":36,"line":44},[34,106458,52605],{"class":59},[34,106460,106461],{"class":51761},"motor",[34,106463,15384],{"class":2427},[34,106465,447],{"class":59},[34,106467,106468],{"class":187},"\"hinge_motor\"",[34,106470,106471],{"class":2427}," joint",[34,106473,447],{"class":59},[34,106475,106406],{"class":187},[34,106477,106478],{"class":2427}," gear",[34,106480,447],{"class":59},[34,106482,4142],{"class":187},[34,106484,106485],{"class":2427}," ctrlrange",[34,106487,447],{"class":59},[34,106489,106490],{"class":187},"\"-2 2\"",[34,106492,106493],{"class":2427}," ctrllimited",[34,106495,447],{"class":59},[34,106497,106498],{"class":187},"\"true\"",[34,106500,101531],{"class":59},[34,106502,106503,106505,106507],{"class":36,"line":50},[34,106504,52246],{"class":59},[34,106506,106452],{"class":51761},[34,106508,51768],{"class":59},[14,106510,106511,106514,106515,28850],{},[31,106512,106513],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[31,106516,106517],{},"[-2, 2]",[584,106519,106521],{"id":106520},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106523,106524],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[748,106526,106527,106537],{},[751,106528,106529],{},[754,106530,106531,106533,106535],{},[757,106532,26218],{"align":24200},[757,106534,103083],{"align":24200},[757,106536,101121],{"align":24200},[795,106538,106539,106549],{},[754,106540,106541,106543,106546],{},[800,106542,103343],{"align":24200},[800,106544,106545],{"align":24200},"定义能怎么动",[800,106547,106548],{"align":24200},"门轴允许门旋转",[754,106550,106551,106553,106556],{},[800,106552,106452],{"align":24200},[800,106554,106555],{"align":24200},"定义怎么施力或控制",[800,106557,106558],{"align":24200},"人推门、马达带动门",[14,106560,106561,106562,106564],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[31,106563,101463],{}," 主动控制它。",[14,106566,106567],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[584,106569,106571],{"id":106570},"hinge-joint","hinge joint",[25,106573,106575],{"className":53528,"code":106574,"language":53530,"meta":22,"style":22},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[31,106576,106577],{"__ignoreMap":22},[34,106578,106579,106581,106583,106585,106587,106589,106591,106593,106595,106597,106599,106601,106604,106606,106609],{"class":36,"line":37},[34,106580,1515],{"class":59},[34,106582,103343],{"class":51761},[34,106584,15384],{"class":2427},[34,106586,447],{"class":59},[34,106588,106406],{"class":187},[34,106590,54285],{"class":2427},[34,106592,447],{"class":59},[34,106594,106406],{"class":187},[34,106596,106415],{"class":2427},[34,106598,447],{"class":59},[34,106600,106420],{"class":187},[34,106602,106603],{"class":2427}," damping",[34,106605,447],{"class":59},[34,106607,106608],{"class":187},"\"0.1\"",[34,106610,101531],{"class":59},[14,106612,106613],{},"含义：",[567,106615,106616,106622,106628],{},[570,106617,106618,106621],{},[31,106619,106620],{},"type=\"hinge\"","：只能绕一个轴旋转。",[570,106623,106624,106627],{},[31,106625,106626],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[570,106629,106630,106633],{},[31,106631,106632],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[584,106635,106637],{"id":106636},"motor-actuator","motor actuator",[25,106639,106641],{"className":53528,"code":106640,"language":53530,"meta":22,"style":22},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[31,106642,106643],{"__ignoreMap":22},[34,106644,106645,106647,106649,106651,106653,106655,106657,106659,106661,106663,106665,106667,106669,106671,106673,106675,106677,106679],{"class":36,"line":37},[34,106646,1515],{"class":59},[34,106648,106461],{"class":51761},[34,106650,15384],{"class":2427},[34,106652,447],{"class":59},[34,106654,106468],{"class":187},[34,106656,106471],{"class":2427},[34,106658,447],{"class":59},[34,106660,106406],{"class":187},[34,106662,106478],{"class":2427},[34,106664,447],{"class":59},[34,106666,4142],{"class":187},[34,106668,106485],{"class":2427},[34,106670,447],{"class":59},[34,106672,106490],{"class":187},[34,106674,106493],{"class":2427},[34,106676,447],{"class":59},[34,106678,106498],{"class":187},[34,106680,101531],{"class":59},[14,106682,106613],{},[567,106684,106685,106694,106700,106706],{},[570,106686,106687,106690,106691,106693],{},[31,106688,106689],{},"joint=\"hinge\"","：这个电机作用在名为 ",[31,106692,106227],{}," 的关节上。",[570,106695,106696,106699],{},[31,106697,106698],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[570,106701,106702,106705],{},[31,106703,106704],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[570,106707,106708,106711],{},[31,106709,106710],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106713,106714],{},"简单理解：",[25,106716,106719],{"className":106717,"code":106718,"language":5651,"meta":22},[5649],"实际施加效果 ≈ data.ctrl[0] * gear\n",[31,106720,106718],{"__ignoreMap":22},[14,106722,106723],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[555,106725,101640],{"id":101639},[25,106727,106729],{"className":27,"code":106728,"language":29,"meta":22,"style":22},"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",[31,106730,106731,106738,106742,106748,106758,106762,106766,106774,106779,106784,106788,106792,106797,106802,106806,106811,106816,106821,106826,106830,106834,106838,106843,106848,106853,106857,106861,106865,106869,106881,106893,106901,106905,106915,106925,106935,106939,106952,106965,106969,106986,107000,107035,107039,107043,107054,107069,107084,107096,107100,107104,107116],{"__ignoreMap":22},[34,106732,106733,106735],{"class":36,"line":37},[34,106734,30855],{"class":112},[34,106736,106737],{"class":59}," math\n",[34,106739,106740],{"class":36,"line":44},[34,106741,2864],{"emptyLinePlaceholder":540},[34,106743,106744,106746],{"class":36,"line":50},[34,106745,30855],{"class":112},[34,106747,101688],{"class":59},[34,106749,106750,106752,106754,106756],{"class":36,"line":56},[34,106751,30855],{"class":112},[34,106753,31843],{"class":59},[34,106755,31846],{"class":112},[34,106757,31849],{"class":59},[34,106759,106760],{"class":36,"line":107},[34,106761,2864],{"emptyLinePlaceholder":540},[34,106763,106764],{"class":36,"line":196},[34,106765,2864],{"emptyLinePlaceholder":540},[34,106767,106768,106770,106772],{"class":36,"line":202},[34,106769,101701],{"class":63},[34,106771,14028],{"class":112},[34,106773,101706],{"class":187},[34,106775,106776],{"class":36,"line":207},[34,106777,106778],{"class":187},"\u003Cmujoco model=\"one_link_motor\">\n",[34,106780,106781],{"class":36,"line":222},[34,106782,106783],{"class":187},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[34,106785,106786],{"class":36,"line":227},[34,106787,2864],{"emptyLinePlaceholder":540},[34,106789,106790],{"class":36,"line":232},[34,106791,101725],{"class":187},[34,106793,106794],{"class":36,"line":238},[34,106795,106796],{"class":187},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[34,106798,106799],{"class":36,"line":244},[34,106800,106801],{"class":187},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[34,106803,106804],{"class":36,"line":250},[34,106805,2864],{"emptyLinePlaceholder":540},[34,106807,106808],{"class":36,"line":256},[34,106809,106810],{"class":187},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[34,106812,106813],{"class":36,"line":261},[34,106814,106815],{"class":187},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,106817,106818],{"class":36,"line":267},[34,106819,106820],{"class":187},"        \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",[34,106822,106823],{"class":36,"line":2138},[34,106824,106825],{"class":187},"      \u003C\u002Fbody>\n",[34,106827,106828],{"class":36,"line":2143},[34,106829,101754],{"class":187},[34,106831,106832],{"class":36,"line":2157},[34,106833,101759],{"class":187},[34,106835,106836],{"class":36,"line":2162},[34,106837,2864],{"emptyLinePlaceholder":540},[34,106839,106840],{"class":36,"line":2191},[34,106841,106842],{"class":187},"  \u003Cactuator>\n",[34,106844,106845],{"class":36,"line":2196},[34,106846,106847],{"class":187},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,106849,106850],{"class":36,"line":2213},[34,106851,106852],{"class":187},"  \u003C\u002Factuator>\n",[34,106854,106855],{"class":36,"line":2218},[34,106856,101764],{"class":187},[34,106858,106859],{"class":36,"line":2223},[34,106860,96157],{"class":187},[34,106862,106863],{"class":36,"line":2228},[34,106864,2864],{"emptyLinePlaceholder":540},[34,106866,106867],{"class":36,"line":2242},[34,106868,2864],{"emptyLinePlaceholder":540},[34,106870,106871,106873,106875,106877,106879],{"class":36,"line":2247},[34,106872,32410],{"class":112},[34,106874,2437],{"class":2427},[34,106876,101785],{"class":59},[34,106878,96145],{"class":63},[34,106880,4203],{"class":59},[34,106882,106883,106885,106887,106889,106891],{"class":36,"line":3041},[34,106884,101794],{"class":59},[34,106886,447],{"class":112},[34,106888,101799],{"class":59},[34,106890,101701],{"class":63},[34,106892,623],{"class":59},[34,106894,106895,106897,106899],{"class":36,"line":3055},[34,106896,101808],{"class":59},[34,106898,447],{"class":112},[34,106900,101813],{"class":59},[34,106902,106903],{"class":36,"line":3063},[34,106904,2864],{"emptyLinePlaceholder":540},[34,106906,106907,106909,106911,106913],{"class":36,"line":3068},[34,106908,31762],{"class":63},[34,106910,617],{"class":59},[34,106912,101826],{"class":187},[34,106914,101829],{"class":59},[34,106916,106917,106919,106921,106923],{"class":36,"line":3074},[34,106918,31762],{"class":63},[34,106920,617],{"class":59},[34,106922,101838],{"class":187},[34,106924,101841],{"class":59},[34,106926,106927,106929,106931,106933],{"class":36,"line":3080},[34,106928,31762],{"class":63},[34,106930,617],{"class":59},[34,106932,101850],{"class":187},[34,106934,101853],{"class":59},[34,106936,106937],{"class":36,"line":3085},[34,106938,2864],{"emptyLinePlaceholder":540},[34,106940,106941,106943,106946,106948,106950],{"class":36,"line":8412},[34,106942,3565],{"class":112},[34,106944,106945],{"class":59}," model.nu ",[34,106947,21412],{"class":112},[34,106949,25583],{"class":63},[34,106951,4203],{"class":59},[34,106953,106954,106956,106958,106960,106963],{"class":36,"line":8436},[34,106955,103819],{"class":112},[34,106957,103822],{"class":63},[34,106959,617],{"class":59},[34,106961,106962],{"class":187},"\"expected exactly one actuator\"",[34,106964,623],{"class":59},[34,106966,106967],{"class":36,"line":8441},[34,106968,2864],{"emptyLinePlaceholder":540},[34,106970,106971,106973,106975,106977,106979,106981,106984],{"class":36,"line":8447},[34,106972,3665],{"class":112},[34,106974,32079],{"class":59},[34,106976,26508],{"class":112},[34,106978,32906],{"class":63},[34,106980,617],{"class":59},[34,106982,106983],{"class":63},"2000",[34,106985,31249],{"class":59},[34,106987,106988,106991,106993,106995,106997],{"class":36,"line":8474},[34,106989,106990],{"class":59},"        t ",[34,106992,447],{"class":112},[34,106994,32079],{"class":59},[34,106996,1062],{"class":112},[34,106998,106999],{"class":59}," model.opt.timestep\n",[34,107001,107002,107005,107007,107009,107011,107014,107016,107019,107021,107023,107026,107028,107030,107032],{"class":36,"line":8479},[34,107003,107004],{"class":59},"        data.ctrl[",[34,107006,319],{"class":63},[34,107008,4907],{"class":59},[34,107010,447],{"class":112},[34,107012,107013],{"class":63}," 1.5",[34,107015,6982],{"class":112},[34,107017,107018],{"class":59}," math.sin(",[34,107020,105647],{"class":63},[34,107022,6982],{"class":112},[34,107024,107025],{"class":59}," math.pi ",[34,107027,1062],{"class":112},[34,107029,62328],{"class":63},[34,107031,6982],{"class":112},[34,107033,107034],{"class":59}," t)\n",[34,107036,107037],{"class":36,"line":8485},[34,107038,101903],{"class":59},[34,107040,107041],{"class":36,"line":8497},[34,107042,2864],{"emptyLinePlaceholder":540},[34,107044,107045,107047,107049,107052],{"class":36,"line":8509},[34,107046,31762],{"class":63},[34,107048,617],{"class":59},[34,107050,107051],{"class":187},"\"time:\"",[34,107053,101865],{"class":59},[34,107055,107056,107058,107060,107063,107065,107067],{"class":36,"line":8521},[34,107057,31762],{"class":63},[34,107059,617],{"class":59},[34,107061,107062],{"class":187},"\"joint qpos:\"",[34,107064,105317],{"class":59},[34,107066,217],{"class":63},[34,107068,30960],{"class":59},[34,107070,107071,107073,107075,107078,107080,107082],{"class":36,"line":10180},[34,107072,31762],{"class":63},[34,107074,617],{"class":59},[34,107076,107077],{"class":187},"\"joint qvel:\"",[34,107079,105333],{"class":59},[34,107081,217],{"class":63},[34,107083,30960],{"class":59},[34,107085,107086,107088,107090,107093],{"class":36,"line":10205},[34,107087,31762],{"class":63},[34,107089,617],{"class":59},[34,107091,107092],{"class":187},"\"last ctrl:\"",[34,107094,107095],{"class":59},", data.ctrl.copy())\n",[34,107097,107098],{"class":36,"line":10228},[34,107099,2864],{"emptyLinePlaceholder":540},[34,107101,107102],{"class":36,"line":10252},[34,107103,2864],{"emptyLinePlaceholder":540},[34,107105,107106,107108,107110,107112,107114],{"class":36,"line":10257},[34,107107,2002],{"class":112},[34,107109,31683],{"class":63},[34,107111,101946],{"class":112},[34,107113,101949],{"class":187},[34,107115,4203],{"class":59},[34,107117,107118],{"class":36,"line":10262},[34,107119,101956],{"class":59},[14,107121,103957],{},[25,107123,107125],{"className":24286,"code":107124,"language":24288,"meta":22,"style":22},"touch ch4_joint_motor.py\n",[31,107126,107127],{"__ignoreMap":22},[34,107128,107129,107131],{"class":36,"line":37},[34,107130,101670],{"class":2427},[34,107132,107133],{"class":187}," ch4_joint_motor.py\n",[14,107135,102688],{},[25,107137,107139],{"className":24286,"code":107138,"language":24288,"meta":22,"style":22},"python ch4_joint_motor.py\n",[31,107140,107141],{"__ignoreMap":22},[34,107142,107143,107145],{"class":36,"line":37},[34,107144,29],{"class":2427},[34,107146,107133],{"class":187},[584,107148,101959],{"id":101959},[14,107150,107151],{},"检查 actuator 数量：",[25,107153,107155],{"className":27,"code":107154,"language":29,"meta":22,"style":22},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[31,107156,107157,107169],{"__ignoreMap":22},[34,107158,107159,107161,107163,107165,107167],{"class":36,"line":37},[34,107160,2002],{"class":112},[34,107162,106945],{"class":59},[34,107164,21412],{"class":112},[34,107166,25583],{"class":63},[34,107168,4203],{"class":59},[34,107170,107171,107173,107175,107177,107179],{"class":36,"line":44},[34,107172,104282],{"class":112},[34,107174,103822],{"class":63},[34,107176,617],{"class":59},[34,107178,106962],{"class":187},[34,107180,623],{"class":59},[14,107182,107183,107185,107186,107188],{},[31,107184,102545],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[31,107187,101463],{}," 长度应该是 1。",[14,107190,107191],{},"产生正弦控制信号：",[25,107193,107195],{"className":27,"code":107194,"language":29,"meta":22,"style":22},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[31,107196,107197],{"__ignoreMap":22},[34,107198,107199,107201,107203,107205,107207,107209,107211,107213,107215,107217,107219,107221,107223,107225],{"class":36,"line":37},[34,107200,106258],{"class":59},[34,107202,319],{"class":63},[34,107204,4907],{"class":59},[34,107206,447],{"class":112},[34,107208,107013],{"class":63},[34,107210,6982],{"class":112},[34,107212,107018],{"class":59},[34,107214,105647],{"class":63},[34,107216,6982],{"class":112},[34,107218,107025],{"class":59},[34,107220,1062],{"class":112},[34,107222,62328],{"class":63},[34,107224,6982],{"class":112},[34,107226,107034],{"class":59},[14,107228,107229],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107231,102060],{},[25,107233,107234],{"className":27,"code":104892,"language":29,"meta":22,"style":22},[31,107235,107236],{"__ignoreMap":22},[34,107237,107238],{"class":36,"line":37},[34,107239,104892],{"class":59},[14,107241,107242],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[584,107244,102095],{"id":102095},[25,107246,107248],{"className":27,"code":107247,"language":29,"meta":22,"style":22},"import math\n",[31,107249,107250],{"__ignoreMap":22},[34,107251,107252,107254],{"class":36,"line":37},[34,107253,30855],{"class":112},[34,107255,106737],{"class":59},[14,107257,107258,107259,101405,107262,107265],{},"导入 Python 标准库里的数学模块。后面要用 ",[31,107260,107261],{},"math.sin",[31,107263,107264],{},"math.pi"," 生成周期变化的控制信号。",[25,107267,107268],{"className":27,"code":104073,"language":29,"meta":22,"style":22},[31,107269,107270,107276],{"__ignoreMap":22},[34,107271,107272,107274],{"class":36,"line":37},[34,107273,30855],{"class":112},[34,107275,101688],{"class":59},[34,107277,107278,107280,107282,107284],{"class":36,"line":44},[34,107279,30855],{"class":112},[34,107281,31843],{"class":59},[34,107283,31846],{"class":112},[34,107285,31849],{"class":59},[14,107287,107288],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[25,107290,107291],{"className":53528,"code":106574,"language":53530,"meta":22,"style":22},[31,107292,107293],{"__ignoreMap":22},[34,107294,107295,107297,107299,107301,107303,107305,107307,107309,107311,107313,107315,107317,107319,107321,107323],{"class":36,"line":37},[34,107296,1515],{"class":59},[34,107298,103343],{"class":51761},[34,107300,15384],{"class":2427},[34,107302,447],{"class":59},[34,107304,106406],{"class":187},[34,107306,54285],{"class":2427},[34,107308,447],{"class":59},[34,107310,106406],{"class":187},[34,107312,106415],{"class":2427},[34,107314,447],{"class":59},[34,107316,106420],{"class":187},[34,107318,106603],{"class":2427},[34,107320,447],{"class":59},[34,107322,106608],{"class":187},[34,107324,101531],{"class":59},[14,107326,107327,107328,107330,107331,107333,107334,107336],{},"这行定义关节。",[31,107329,106227],{}," 表示旋转关节。",[31,107332,106626],{}," 表示绕 y 轴旋转。",[31,107335,106632],{}," 表示有一点阻尼，运动不会完全无损耗。",[25,107338,107340],{"className":53528,"code":107339,"language":53530,"meta":22,"style":22},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[31,107341,107342],{"__ignoreMap":22},[34,107343,107344,107346,107348,107350,107352,107355,107357,107359,107362,107365,107367,107370,107372,107374,107376,107378,107380,107383],{"class":36,"line":37},[34,107345,1515],{"class":59},[34,107347,101507],{"class":51761},[34,107349,15384],{"class":2427},[34,107351,447],{"class":59},[34,107353,107354],{"class":187},"\"link_geom\"",[34,107356,54285],{"class":2427},[34,107358,447],{"class":59},[34,107360,107361],{"class":187},"\"capsule\"",[34,107363,107364],{"class":2427}," fromto",[34,107366,447],{"class":59},[34,107368,107369],{"class":187},"\"0 0 0 0 0 0.5\"",[34,107371,101523],{"class":2427},[34,107373,447],{"class":59},[34,107375,104165],{"class":187},[34,107377,102388],{"class":2427},[34,107379,447],{"class":59},[34,107381,107382],{"class":187},"\"0.5\"",[34,107384,101531],{"class":59},[14,107386,107387,107388,107390,107391,107393,107394,107397,107398,28850,107401,107403],{},"这行定义摆杆的形状。",[31,107389,103552],{}," 是胶囊体，适合表示杆子。",[31,107392,103563],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[31,107395,107396],{},"(0,0,0)"," 延伸到 ",[31,107399,107400],{},"(0,0,0.5)",[31,107402,103557],{}," 是半径。",[25,107405,107406],{"className":53528,"code":106640,"language":53530,"meta":22,"style":22},[31,107407,107408],{"__ignoreMap":22},[34,107409,107410,107412,107414,107416,107418,107420,107422,107424,107426,107428,107430,107432,107434,107436,107438,107440,107442,107444],{"class":36,"line":37},[34,107411,1515],{"class":59},[34,107413,106461],{"class":51761},[34,107415,15384],{"class":2427},[34,107417,447],{"class":59},[34,107419,106468],{"class":187},[34,107421,106471],{"class":2427},[34,107423,447],{"class":59},[34,107425,106406],{"class":187},[34,107427,106478],{"class":2427},[34,107429,447],{"class":59},[34,107431,4142],{"class":187},[34,107433,106485],{"class":2427},[34,107435,447],{"class":59},[34,107437,106490],{"class":187},[34,107439,106493],{"class":2427},[34,107441,447],{"class":59},[34,107443,106498],{"class":187},[34,107445,101531],{"class":59},[14,107447,107448,107449,107451,107452,107455,107456,107458],{},"这行定义电机。它作用在 ",[31,107450,106227],{}," 关节上。",[31,107453,107454],{},"gear"," 可以理解成放大倍数。",[31,107457,106242],{}," 限制控制输入范围。",[25,107460,107461],{"className":27,"code":107154,"language":29,"meta":22,"style":22},[31,107462,107463,107475],{"__ignoreMap":22},[34,107464,107465,107467,107469,107471,107473],{"class":36,"line":37},[34,107466,2002],{"class":112},[34,107468,106945],{"class":59},[34,107470,21412],{"class":112},[34,107472,25583],{"class":63},[34,107474,4203],{"class":59},[34,107476,107477,107479,107481,107483,107485],{"class":36,"line":44},[34,107478,104282],{"class":112},[34,107480,103822],{"class":63},[34,107482,617],{"class":59},[34,107484,106962],{"class":187},[34,107486,623],{"class":59},[14,107488,107489,107491],{},[31,107490,102545],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[25,107493,107495],{"className":27,"code":107494,"language":29,"meta":22,"style":22},"for step in range(2000):\n",[31,107496,107497],{"__ignoreMap":22},[34,107498,107499,107501,107503,107505,107507,107509,107511],{"class":36,"line":37},[34,107500,3489],{"class":112},[34,107502,32079],{"class":59},[34,107504,26508],{"class":112},[34,107506,32906],{"class":63},[34,107508,617],{"class":59},[34,107510,106983],{"class":63},[34,107512,31249],{"class":59},[14,107514,107515,107516,107518,107519,107522],{},"循环 2000 步。这里没有用 ",[31,107517,1596],{},"，而是用 ",[31,107520,107521],{},"step","，因为后面要用当前步数计算时间。",[25,107524,107526],{"className":27,"code":107525,"language":29,"meta":22,"style":22},"t = step * model.opt.timestep\n",[31,107527,107528],{"__ignoreMap":22},[34,107529,107530,107533,107535,107537,107539],{"class":36,"line":37},[34,107531,107532],{"class":59},"t ",[34,107534,447],{"class":112},[34,107536,32079],{"class":59},[34,107538,1062],{"class":112},[34,107540,106999],{"class":59},[14,107542,107543],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[25,107545,107546],{"className":27,"code":107194,"language":29,"meta":22,"style":22},[31,107547,107548],{"__ignoreMap":22},[34,107549,107550,107552,107554,107556,107558,107560,107562,107564,107566,107568,107570,107572,107574,107576],{"class":36,"line":37},[34,107551,106258],{"class":59},[34,107553,319],{"class":63},[34,107555,4907],{"class":59},[34,107557,447],{"class":112},[34,107559,107013],{"class":63},[34,107561,6982],{"class":112},[34,107563,107018],{"class":59},[34,107565,105647],{"class":63},[34,107567,6982],{"class":112},[34,107569,107025],{"class":59},[34,107571,1062],{"class":112},[34,107573,62328],{"class":63},[34,107575,6982],{"class":112},[34,107577,107034],{"class":59},[14,107579,107580],{},"这行给电机输入一个正弦波。拆开看：",[567,107582,107583,107589,107595],{},[570,107584,107585,107588],{},[31,107586,107587],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[570,107590,107591,107594],{},[31,107592,107593],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[570,107596,107597,107600],{},[31,107598,107599],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107602,107603],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[25,107605,107607],{"className":27,"code":107606,"language":29,"meta":22,"style":22},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[31,107608,107609],{"__ignoreMap":22},[34,107610,107611,107613,107615,107617,107619,107621],{"class":36,"line":37},[34,107612,30878],{"class":63},[34,107614,617],{"class":59},[34,107616,107062],{"class":187},[34,107618,105317],{"class":59},[34,107620,217],{"class":63},[34,107622,30960],{"class":59},[14,107624,107625,107626,107628],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[31,107627,101457],{}," 只有一个数。",[555,107630,102703],{"id":102702},[14,107632,107633],{},"输出类似:",[25,107635,107638],{"className":107636,"code":107637,"language":5651,"meta":22},[5649],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[31,107639,107637],{"__ignoreMap":22},[14,107641,107642,107643,107645],{},"这里 ",[31,107644,106513],{}," 是电机输入。",[14,107647,107648,107651,107652,107655],{},[31,107649,107650],{},"joint qpos"," 是关节角度，单位通常是弧度。",[31,107653,107654],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107657,107658],{},"角度单位提示：",[25,107660,107663],{"className":107661,"code":107662,"language":5651,"meta":22},[5649],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[31,107664,107662],{"__ignoreMap":22},[14,107666,107667,107668,107670,107671,107673],{},"如果你看到 ",[31,107669,104417],{}," 是 ",[31,107672,35791],{},"，大约就是 28.6 度。",[555,107675,102735],{"id":102734},[567,107677,107678,107685,107688,107695,107698,107706,107714],{},[570,107679,102798,107680,102801,107682,28850],{},[31,107681,106698],{},[31,107683,107684],{},"gear=\"5\"",[570,107686,107687],{},"重新运行，观察关节运动是否更剧烈。",[570,107689,102798,107690,102801,107692,28850],{},[31,107691,106242],{},[31,107693,107694],{},"-0.2 0.2",[570,107696,107697],{},"重新运行，观察控制能力是否变弱。",[570,107699,107700,107701,107703,107704,28850],{},"去掉 actuator，确认 ",[31,107702,102545],{}," 变成 ",[31,107705,319],{},[570,107707,102798,107708,102801,107710,107713],{},[31,107709,106632],{},[31,107711,107712],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[570,107715,102798,107716,102801,107718,107721],{},[31,107717,106626],{},[31,107719,107720],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[555,107723,102840],{"id":102839},[584,107725,107727],{"id":107726},"indexerror-index-0-is-out-of-bounds",[31,107728,107729],{},"IndexError: index 0 is out of bounds",[14,107731,107732,107733,107735],{},"原因是 ",[31,107734,106379],{},"，没有 actuator。",[584,107737,107738],{"id":107738},"关节几乎不动",[14,107740,107741],{},"可能原因:",[567,107743,107744,107749,107753,107759],{},[570,107745,107746,107748],{},[31,107747,107454],{}," 太小",[570,107750,107751,107748],{},[31,107752,106242],{},[570,107754,107755,107758],{},[31,107756,107757],{},"damping"," 太大",[570,107760,107761],{},"重力方向导致运动不明显",[584,107763,107764],{"id":107764},"模型编译失败",[14,107766,107767,107768,107770],{},"检查 actuator 引用的 ",[31,107769,106689],{}," 是否存在，joint 名称是否拼写一致。",[584,107772,107774,107776],{"id":107773},"datactrl0-写了但没有效果",[31,107775,106513],{}," 写了但没有效果",[14,107778,102962],{},[567,107780,107781,107786,107789,107794,107799],{},[570,107782,107783,107785],{},[31,107784,102545],{}," 是否大于 0。",[570,107787,107788],{},"motor 是否引用了正确 joint。",[570,107790,107791,107793],{},[31,107792,107454],{}," 是否太小。",[570,107795,107796,107798],{},[31,107797,106242],{}," 是否把输入限制得太小。",[570,107800,107801],{},"body 是否真的有可动 joint。",[584,107803,107804],{"id":107804},"控制输入超过范围会怎样",[14,107806,107807],{},"如果设置了：",[25,107809,107811],{"className":53528,"code":107810,"language":53530,"meta":22,"style":22},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[31,107812,107813],{"__ignoreMap":22},[34,107814,107815],{"class":36,"line":37},[34,107816,107810],{"class":59},[14,107818,107819],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[25,107821,107823],{"className":27,"code":107822,"language":29,"meta":22,"style":22},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[31,107824,107825,107845],{"__ignoreMap":22},[34,107826,107827,107830,107832,107835,107837,107839,107841,107843],{"class":36,"line":37},[34,107828,107829],{"class":59},"action ",[34,107831,447],{"class":112},[34,107833,107834],{"class":59}," np.clip(action, ",[34,107836,113],{"class":112},[34,107838,105647],{"class":63},[34,107840,12899],{"class":59},[34,107842,105647],{"class":63},[34,107844,623],{"class":59},[34,107846,107847,107849,107851,107853,107855],{"class":36,"line":44},[34,107848,106258],{"class":59},[34,107850,319],{"class":63},[34,107852,4907],{"class":59},[34,107854,447],{"class":112},[34,107856,107857],{"class":59}," action\n",[555,107859,102994],{"id":102993},[14,107861,107862],{},"这一章建立了控制任务的基本形式：",[25,107864,107867],{"className":107865,"code":107866,"language":5651,"meta":22},[5649],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[31,107868,107866],{"__ignoreMap":22},[14,107870,107871],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[532,107873,107874],{},"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":22,"searchDepth":44,"depth":44,"links":107876},[107877,107878,107879,107884,107888,107889,107890,107898],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":107880},[107881,107882,107883],{"id":106520,"depth":50,"text":106521},{"id":106570,"depth":50,"text":106571},{"id":106636,"depth":50,"text":106637},{"id":101639,"depth":44,"text":101640,"children":107885},[107886,107887],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":107891},[107892,107893,107894,107895,107897],{"id":107726,"depth":50,"text":107729},{"id":107738,"depth":50,"text":107738},{"id":107764,"depth":50,"text":107764},{"id":107773,"depth":50,"text":107896},"data.ctrl[0] 写了但没有效果",{"id":107804,"depth":50,"text":107804},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106208,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107905,"title":107906,"body":107907,"description":22,"extension":538,"meta":109816,"navigation":540,"path":109817,"seo":109818,"stem":109819,"__hash__":109820},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107908,"toc":109792},[107909,107912,107914,107917,107925,107928,107945,107948,107973,107976,108022,108024,108026,108081,108083,108102,108104,108147,108150,108167,108170,108186,108196,108203,108205,108208,108211,108245,108248,108296,108300,108303,108317,108326,108330,108333,108358,108361,108365,108378,108381,108387,108390,108405,108407,108410,108670,108672,108684,108687,108999,109001,109013,109015,109018,109033,109038,109041,109063,109066,109069,109103,109106,109110,109121,109124,109141,109144,109158,109165,109185,109192,109206,109209,109221,109236,109256,109259,109281,109284,109288,109303,109314,109329,109332,109362,109378,109407,109415,109439,109442,109460,109470,109482,109489,109498,109504,109513,109516,109518,109527,109530,109545,109547,109550,109561,109564,109575,109578,109596,109598,109615,109618,109646,109648,109652,109655,109685,109691,109694,109698,109706,109709,109711,109732,109735,109738,109754,109757,109773,109775,109778,109789],[10,107910,107906],{"id":107911},"_5viewer-可视化与-renderer-离屏渲染",[555,107913,101034],{"id":101033},[14,107915,107916],{},"本章掌握两类可视化方式:",[567,107918,107919,107922],{},[570,107920,107921],{},"交互式 viewer: 适合人工观察仿真",[570,107923,107924],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107926,107927],{},"使用官方接口:",[25,107929,107931],{"className":27,"code":107930,"language":29,"meta":22,"style":22},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[31,107932,107933,107940],{"__ignoreMap":22},[34,107934,107935,107937],{"class":36,"line":37},[34,107936,30855],{"class":112},[34,107938,107939],{"class":59}," mujoco.viewer\n",[34,107941,107942],{"class":36,"line":44},[34,107943,107944],{"class":59},"mujoco.viewer.launch_passive(model, data)\n",[14,107946,107947],{},"以及:",[25,107949,107951],{"className":27,"code":107950,"language":29,"meta":22,"style":22},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[31,107952,107953,107963],{"__ignoreMap":22},[34,107954,107955,107958,107960],{"class":36,"line":37},[34,107956,107957],{"class":59},"renderer ",[34,107959,447],{"class":112},[34,107961,107962],{"class":59}," mujoco.Renderer(model)\n",[34,107964,107965,107968,107970],{"class":36,"line":44},[34,107966,107967],{"class":59},"image ",[34,107969,447],{"class":112},[34,107971,107972],{"class":59}," renderer.render()\n",[14,107974,107975],{},"新手建议先理解二者区别：",[748,107977,107978,107994],{},[751,107979,107980],{},[754,107981,107982,107985,107988,107991],{},[757,107983,107984],{"align":24200},"工具",[757,107986,107987],{"align":24200},"用途",[757,107989,107990],{"align":24200},"是否打开窗口",[757,107992,107993],{"align":24200},"常见场景",[795,107995,107996,108009],{},[754,107997,107998,108001,108004,108006],{},[800,107999,108000],{"align":24200},"Viewer",[800,108002,108003],{"align":24200},"人眼实时观察仿真",[800,108005,105052],{"align":24200},[800,108007,108008],{"align":24200},"调试模型、看控制效果",[754,108010,108011,108014,108017,108019],{},[800,108012,108013],{"align":24200},"Renderer",[800,108015,108016],{"align":24200},"生成图像数组",[800,108018,105065],{"align":24200},[800,108020,108021],{"align":24200},"保存图片、训练视觉策略、服务器批量采集",[555,108023,101157],{"id":101156},[14,108025,101160],{},[25,108027,108029],{"className":24286,"code":108028,"language":24288,"meta":22,"style":22},"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",[31,108030,108031,108043,108053,108061,108069],{"__ignoreMap":22},[34,108032,108033,108035,108037,108039,108041],{"class":36,"line":37},[34,108034,25041],{"class":2427},[34,108036,26780],{"class":187},[34,108038,24298],{"class":187},[34,108040,26865],{"class":63},[34,108042,25143],{"class":63},[34,108044,108045,108047,108049,108051],{"class":36,"line":44},[34,108046,101195],{"class":187},[34,108048,101198],{"class":187},[34,108050,101201],{"class":187},[34,108052,25143],{"class":63},[34,108054,108055,108057,108059],{"class":36,"line":50},[34,108056,101208],{"class":187},[34,108058,101211],{"class":187},[34,108060,25143],{"class":63},[34,108062,108063,108065,108067],{"class":36,"line":56},[34,108064,101218],{"class":187},[34,108066,101221],{"class":187},[34,108068,25143],{"class":63},[34,108070,108071,108073,108075,108077,108079],{"class":36,"line":107},[34,108072,101228],{"class":187},[34,108074,101231],{"class":187},[34,108076,101234],{"class":187},[34,108078,101237],{"class":187},[34,108080,102903],{"class":187},[14,108082,103206],{},[25,108084,108086],{"className":24286,"code":108085,"language":24288,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy pillow\n",[31,108087,108088],{"__ignoreMap":22},[34,108089,108090,108092,108094,108096,108099],{"class":36,"line":37},[34,108091,24295],{"class":2427},[34,108093,24298],{"class":187},[34,108095,101317],{"class":187},[34,108097,108098],{"class":187}," numpy",[34,108100,108101],{"class":187}," pillow\n",[14,108103,103223],{},[25,108105,108107],{"className":24286,"code":108106,"language":24288,"meta":22,"style":22},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[31,108108,108109,108126,108135],{"__ignoreMap":22},[34,108110,108111,108113,108115,108117,108120,108122,108124],{"class":36,"line":37},[34,108112,30795],{"class":2427},[34,108114,29641],{"class":187},[34,108116,25580],{"class":63},[34,108118,108119],{"class":187}," mujoco-render",[34,108121,101362],{"class":187},[34,108123,101365],{"class":63},[34,108125,101368],{"class":63},[34,108127,108128,108130,108132],{"class":36,"line":44},[34,108129,30795],{"class":2427},[34,108131,101375],{"class":187},[34,108133,108134],{"class":187}," mujoco-render\n",[34,108136,108137,108139,108141,108143,108145],{"class":36,"line":50},[34,108138,24295],{"class":2427},[34,108140,24298],{"class":187},[34,108142,101317],{"class":187},[34,108144,108098],{"class":187},[34,108146,108101],{"class":187},[14,108148,108149],{},"离屏渲染后端:",[25,108151,108153],{"className":24286,"code":108152,"language":24288,"meta":22,"style":22},"export MUJOCO_GL=egl\n",[31,108154,108155],{"__ignoreMap":22},[34,108156,108157,108159,108162,108164],{"class":36,"line":37},[34,108158,25507],{"class":112},[34,108160,108161],{"class":59}," MUJOCO_GL",[34,108163,447],{"class":112},[34,108165,108166],{"class":59},"egl\n",[14,108168,108169],{},"或:",[25,108171,108173],{"className":24286,"code":108172,"language":24288,"meta":22,"style":22},"export MUJOCO_GL=osmesa\n",[31,108174,108175],{"__ignoreMap":22},[34,108176,108177,108179,108181,108183],{"class":36,"line":37},[34,108178,25507],{"class":112},[34,108180,108161],{"class":59},[34,108182,447],{"class":112},[34,108184,108185],{"class":59},"osmesa\n",[14,108187,108188,108189,108192,108193,28850],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[31,108190,108191],{},"egl"," 失败，再尝试 ",[31,108194,108195],{},"osmesa",[14,108197,108198,108199,108202],{},"如果你在本机桌面环境运行，通常先不要设置 ",[31,108200,108201],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[555,108204,101432],{"id":101431},[14,108206,108207],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108209,108210],{},"典型 viewer 流程:",[25,108212,108214],{"className":27,"code":108213,"language":29,"meta":22,"style":22},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[31,108215,108216,108229,108236,108240],{"__ignoreMap":22},[34,108217,108218,108221,108224,108226],{"class":36,"line":37},[34,108219,108220],{"class":112},"with",[34,108222,108223],{"class":59}," mujoco.viewer.launch_passive(model, data) ",[34,108225,31846],{"class":112},[34,108227,108228],{"class":59}," viewer:\n",[34,108230,108231,108233],{"class":36,"line":44},[34,108232,2715],{"class":112},[34,108234,108235],{"class":59}," viewer.is_running():\n",[34,108237,108238],{"class":36,"line":50},[34,108239,101903],{"class":59},[34,108241,108242],{"class":36,"line":56},[34,108243,108244],{"class":59},"        viewer.sync()\n",[14,108246,108247],{},"典型 renderer 流程:",[25,108249,108251],{"className":27,"code":108250,"language":29,"meta":22,"style":22},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[31,108252,108253,108279,108283,108288],{"__ignoreMap":22},[34,108254,108255,108257,108259,108262,108264,108266,108268,108270,108272,108274,108277],{"class":36,"line":37},[34,108256,107957],{"class":59},[34,108258,447],{"class":112},[34,108260,108261],{"class":59}," mujoco.Renderer(model, ",[34,108263,25446],{"class":5680},[34,108265,447],{"class":112},[34,108267,42803],{"class":63},[34,108269,12899],{"class":59},[34,108271,25442],{"class":5680},[34,108273,447],{"class":112},[34,108275,108276],{"class":63},"640",[34,108278,623],{"class":59},[34,108280,108281],{"class":36,"line":44},[34,108282,104892],{"class":59},[34,108284,108285],{"class":36,"line":50},[34,108286,108287],{"class":59},"renderer.update_scene(data)\n",[34,108289,108290,108292,108294],{"class":36,"line":56},[34,108291,107967],{"class":59},[34,108293,447],{"class":112},[34,108295,107972],{"class":59},[584,108297,108299],{"id":108298},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108301,108302],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[25,108304,108306],{"className":27,"code":108305,"language":29,"meta":22,"style":22},"mujoco.mj_step(model, data)\nviewer.sync()\n",[31,108307,108308,108312],{"__ignoreMap":22},[34,108309,108310],{"class":36,"line":37},[34,108311,104892],{"class":59},[34,108313,108314],{"class":36,"line":44},[34,108315,108316],{"class":59},"viewer.sync()\n",[14,108318,108319,108321,108322,108325],{},[31,108320,101602],{}," 负责算物理，",[31,108323,108324],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[584,108327,108329],{"id":108328},"为什么要-sleep","为什么要 sleep",[14,108331,108332],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[25,108334,108336],{"className":27,"code":108335,"language":29,"meta":22,"style":22},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[31,108337,108338],{"__ignoreMap":22},[34,108339,108340,108343,108345,108348,108350,108353,108355],{"class":36,"line":37},[34,108341,108342],{"class":59},"sleep_time ",[34,108344,447],{"class":112},[34,108346,108347],{"class":59}," model.opt.timestep ",[34,108349,113],{"class":112},[34,108351,108352],{"class":59}," (time.time() ",[34,108354,113],{"class":112},[34,108356,108357],{"class":59}," step_start)\n",[14,108359,108360],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[584,108362,108364],{"id":108363},"renderer-输出是什么","renderer 输出是什么",[25,108366,108368],{"className":27,"code":108367,"language":29,"meta":22,"style":22},"image = renderer.render()\n",[31,108369,108370],{"__ignoreMap":22},[34,108371,108372,108374,108376],{"class":36,"line":37},[34,108373,107967],{"class":59},[34,108375,447],{"class":112},[34,108377,107972],{"class":59},[14,108379,108380],{},"得到的是 NumPy 数组，形状通常是：",[25,108382,108385],{"className":108383,"code":108384,"language":5651,"meta":22},[5649],"(height, width, 3)\n",[31,108386,108384],{"__ignoreMap":22},[14,108388,108389],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[25,108391,108393],{"className":27,"code":108392,"language":29,"meta":22,"style":22},"Image.fromarray(image).save(\"render_output.png\")\n",[31,108394,108395],{"__ignoreMap":22},[34,108396,108397,108400,108403],{"class":36,"line":37},[34,108398,108399],{"class":59},"Image.fromarray(image).save(",[34,108401,108402],{"class":187},"\"render_output.png\"",[34,108404,623],{"class":59},[555,108406,101640],{"id":101639},[14,108408,108409],{},"交互式 Viewer:",[25,108411,108413],{"className":27,"code":108412,"language":29,"meta":22,"style":22},"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",[31,108414,108415,108421,108425,108431,108437,108441,108445,108453,108458,108462,108466,108470,108475,108480,108484,108488,108492,108497,108501,108505,108509,108513,108517,108521,108533,108545,108553,108557,108567,108587,108597,108602,108607,108611,108628,108641,108646,108650,108654,108666],{"__ignoreMap":22},[34,108416,108417,108419],{"class":36,"line":37},[34,108418,30855],{"class":112},[34,108420,32292],{"class":59},[34,108422,108423],{"class":36,"line":44},[34,108424,2864],{"emptyLinePlaceholder":540},[34,108426,108427,108429],{"class":36,"line":50},[34,108428,30855],{"class":112},[34,108430,101688],{"class":59},[34,108432,108433,108435],{"class":36,"line":56},[34,108434,30855],{"class":112},[34,108436,107939],{"class":59},[34,108438,108439],{"class":36,"line":107},[34,108440,2864],{"emptyLinePlaceholder":540},[34,108442,108443],{"class":36,"line":196},[34,108444,2864],{"emptyLinePlaceholder":540},[34,108446,108447,108449,108451],{"class":36,"line":202},[34,108448,101701],{"class":63},[34,108450,14028],{"class":112},[34,108452,101706],{"class":187},[34,108454,108455],{"class":36,"line":207},[34,108456,108457],{"class":187},"\u003Cmujoco model=\"viewer_demo\">\n",[34,108459,108460],{"class":36,"line":222},[34,108461,101716],{"class":187},[34,108463,108464],{"class":36,"line":227},[34,108465,2864],{"emptyLinePlaceholder":540},[34,108467,108468],{"class":36,"line":232},[34,108469,101725],{"class":187},[34,108471,108472],{"class":36,"line":238},[34,108473,108474],{"class":187},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[34,108476,108477],{"class":36,"line":244},[34,108478,108479],{"class":187},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,108481,108482],{"class":36,"line":250},[34,108483,2864],{"emptyLinePlaceholder":540},[34,108485,108486],{"class":36,"line":256},[34,108487,101739],{"class":187},[34,108489,108490],{"class":36,"line":261},[34,108491,101744],{"class":187},[34,108493,108494],{"class":36,"line":267},[34,108495,108496],{"class":187},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,108498,108499],{"class":36,"line":2138},[34,108500,101754],{"class":187},[34,108502,108503],{"class":36,"line":2143},[34,108504,101759],{"class":187},[34,108506,108507],{"class":36,"line":2157},[34,108508,101764],{"class":187},[34,108510,108511],{"class":36,"line":2162},[34,108512,96157],{"class":187},[34,108514,108515],{"class":36,"line":2191},[34,108516,2864],{"emptyLinePlaceholder":540},[34,108518,108519],{"class":36,"line":2196},[34,108520,2864],{"emptyLinePlaceholder":540},[34,108522,108523,108525,108527,108529,108531],{"class":36,"line":2213},[34,108524,32410],{"class":112},[34,108526,2437],{"class":2427},[34,108528,101785],{"class":59},[34,108530,96145],{"class":63},[34,108532,4203],{"class":59},[34,108534,108535,108537,108539,108541,108543],{"class":36,"line":2218},[34,108536,101794],{"class":59},[34,108538,447],{"class":112},[34,108540,101799],{"class":59},[34,108542,101701],{"class":63},[34,108544,623],{"class":59},[34,108546,108547,108549,108551],{"class":36,"line":2223},[34,108548,101808],{"class":59},[34,108550,447],{"class":112},[34,108552,101813],{"class":59},[34,108554,108555],{"class":36,"line":2228},[34,108556,2864],{"emptyLinePlaceholder":540},[34,108558,108559,108561,108563,108565],{"class":36,"line":2242},[34,108560,34640],{"class":112},[34,108562,108223],{"class":59},[34,108564,31846],{"class":112},[34,108566,108228],{"class":59},[34,108568,108569,108572,108575,108577,108580,108582,108585],{"class":36,"line":2247},[34,108570,108571],{"class":112},"        while",[34,108573,108574],{"class":59}," viewer.is_running() ",[34,108576,30925],{"class":112},[34,108578,108579],{"class":59}," data.time ",[34,108581,1515],{"class":112},[34,108583,108584],{"class":63}," 5.0",[34,108586,4203],{"class":59},[34,108588,108589,108592,108594],{"class":36,"line":3041},[34,108590,108591],{"class":59},"            step_start ",[34,108593,447],{"class":112},[34,108595,108596],{"class":59}," time.time()\n",[34,108598,108599],{"class":36,"line":3055},[34,108600,108601],{"class":59},"            mujoco.mj_step(model, data)\n",[34,108603,108604],{"class":36,"line":3063},[34,108605,108606],{"class":59},"            viewer.sync()\n",[34,108608,108609],{"class":36,"line":3068},[34,108610,2864],{"emptyLinePlaceholder":540},[34,108612,108613,108616,108618,108620,108622,108624,108626],{"class":36,"line":3074},[34,108614,108615],{"class":59},"            sleep_time ",[34,108617,447],{"class":112},[34,108619,108347],{"class":59},[34,108621,113],{"class":112},[34,108623,108352],{"class":59},[34,108625,113],{"class":112},[34,108627,108357],{"class":59},[34,108629,108630,108632,108635,108637,108639],{"class":36,"line":3080},[34,108631,5106],{"class":112},[34,108633,108634],{"class":59}," sleep_time ",[34,108636,1564],{"class":112},[34,108638,4557],{"class":63},[34,108640,4203],{"class":59},[34,108642,108643],{"class":36,"line":3085},[34,108644,108645],{"class":59},"                time.sleep(sleep_time)\n",[34,108647,108648],{"class":36,"line":8412},[34,108649,2864],{"emptyLinePlaceholder":540},[34,108651,108652],{"class":36,"line":8436},[34,108653,2864],{"emptyLinePlaceholder":540},[34,108655,108656,108658,108660,108662,108664],{"class":36,"line":8441},[34,108657,2002],{"class":112},[34,108659,31683],{"class":63},[34,108661,101946],{"class":112},[34,108663,101949],{"class":187},[34,108665,4203],{"class":59},[34,108667,108668],{"class":36,"line":8447},[34,108669,101956],{"class":59},[14,108671,103957],{},[25,108673,108675],{"className":24286,"code":108674,"language":24288,"meta":22,"style":22},"touch ch5_viewer.py\n",[31,108676,108677],{"__ignoreMap":22},[34,108678,108679,108681],{"class":36,"line":37},[34,108680,101670],{"class":2427},[34,108682,108683],{"class":187}," ch5_viewer.py\n",[14,108685,108686],{},"离屏 Renderer 保存图片:",[25,108688,108690],{"className":27,"code":108689,"language":29,"meta":22,"style":22},"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",[31,108691,108692,108704,108708,108714,108724,108728,108732,108740,108745,108749,108753,108757,108761,108766,108770,108774,108778,108782,108786,108790,108794,108798,108802,108806,108810,108822,108834,108842,108867,108871,108887,108891,108895,108910,108919,108923,108937,108942,108947,108951,108963,108975,108979,108983,108995],{"__ignoreMap":22},[34,108693,108694,108696,108699,108701],{"class":36,"line":37},[34,108695,31200],{"class":112},[34,108697,108698],{"class":59}," pathlib ",[34,108700,30855],{"class":112},[34,108702,108703],{"class":59}," Path\n",[34,108705,108706],{"class":36,"line":44},[34,108707,2864],{"emptyLinePlaceholder":540},[34,108709,108710,108712],{"class":36,"line":50},[34,108711,30855],{"class":112},[34,108713,101688],{"class":59},[34,108715,108716,108718,108720,108722],{"class":36,"line":56},[34,108717,31200],{"class":112},[34,108719,47724],{"class":63},[34,108721,47727],{"class":112},[34,108723,47730],{"class":59},[34,108725,108726],{"class":36,"line":107},[34,108727,2864],{"emptyLinePlaceholder":540},[34,108729,108730],{"class":36,"line":196},[34,108731,2864],{"emptyLinePlaceholder":540},[34,108733,108734,108736,108738],{"class":36,"line":202},[34,108735,101701],{"class":63},[34,108737,14028],{"class":112},[34,108739,101706],{"class":187},[34,108741,108742],{"class":36,"line":207},[34,108743,108744],{"class":187},"\u003Cmujoco model=\"renderer_demo\">\n",[34,108746,108747],{"class":36,"line":222},[34,108748,101716],{"class":187},[34,108750,108751],{"class":36,"line":227},[34,108752,2864],{"emptyLinePlaceholder":540},[34,108754,108755],{"class":36,"line":232},[34,108756,101725],{"class":187},[34,108758,108759],{"class":36,"line":238},[34,108760,108474],{"class":187},[34,108762,108763],{"class":36,"line":244},[34,108764,108765],{"class":187},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,108767,108768],{"class":36,"line":250},[34,108769,108479],{"class":187},[34,108771,108772],{"class":36,"line":256},[34,108773,2864],{"emptyLinePlaceholder":540},[34,108775,108776],{"class":36,"line":261},[34,108777,101739],{"class":187},[34,108779,108780],{"class":36,"line":267},[34,108781,101744],{"class":187},[34,108783,108784],{"class":36,"line":2138},[34,108785,108496],{"class":187},[34,108787,108788],{"class":36,"line":2143},[34,108789,101754],{"class":187},[34,108791,108792],{"class":36,"line":2157},[34,108793,101759],{"class":187},[34,108795,108796],{"class":36,"line":2162},[34,108797,101764],{"class":187},[34,108799,108800],{"class":36,"line":2191},[34,108801,96157],{"class":187},[34,108803,108804],{"class":36,"line":2196},[34,108805,2864],{"emptyLinePlaceholder":540},[34,108807,108808],{"class":36,"line":2213},[34,108809,2864],{"emptyLinePlaceholder":540},[34,108811,108812,108814,108816,108818,108820],{"class":36,"line":2218},[34,108813,32410],{"class":112},[34,108815,2437],{"class":2427},[34,108817,101785],{"class":59},[34,108819,96145],{"class":63},[34,108821,4203],{"class":59},[34,108823,108824,108826,108828,108830,108832],{"class":36,"line":2223},[34,108825,101794],{"class":59},[34,108827,447],{"class":112},[34,108829,101799],{"class":59},[34,108831,101701],{"class":63},[34,108833,623],{"class":59},[34,108835,108836,108838,108840],{"class":36,"line":2228},[34,108837,101808],{"class":59},[34,108839,447],{"class":112},[34,108841,101813],{"class":59},[34,108843,108844,108847,108849,108851,108853,108855,108857,108859,108861,108863,108865],{"class":36,"line":2242},[34,108845,108846],{"class":59},"    renderer ",[34,108848,447],{"class":112},[34,108850,108261],{"class":59},[34,108852,25446],{"class":5680},[34,108854,447],{"class":112},[34,108856,42803],{"class":63},[34,108858,12899],{"class":59},[34,108860,25442],{"class":5680},[34,108862,447],{"class":112},[34,108864,108276],{"class":63},[34,108866,623],{"class":59},[34,108868,108869],{"class":36,"line":2247},[34,108870,2864],{"emptyLinePlaceholder":540},[34,108872,108873,108875,108877,108879,108881,108883,108885],{"class":36,"line":3041},[34,108874,3665],{"class":112},[34,108876,101888],{"class":59},[34,108878,26508],{"class":112},[34,108880,32906],{"class":63},[34,108882,617],{"class":59},[34,108884,919],{"class":63},[34,108886,31249],{"class":59},[34,108888,108889],{"class":36,"line":3055},[34,108890,101903],{"class":59},[34,108892,108893],{"class":36,"line":3063},[34,108894,2864],{"emptyLinePlaceholder":540},[34,108896,108897,108900,108903,108905,108908],{"class":36,"line":3068},[34,108898,108899],{"class":59},"    renderer.update_scene(data, ",[34,108901,108902],{"class":5680},"camera",[34,108904,447],{"class":112},[34,108906,108907],{"class":187},"\"fixed_camera\"",[34,108909,623],{"class":59},[34,108911,108912,108915,108917],{"class":36,"line":3074},[34,108913,108914],{"class":59},"    image ",[34,108916,447],{"class":112},[34,108918,107972],{"class":59},[34,108920,108921],{"class":36,"line":3080},[34,108922,2864],{"emptyLinePlaceholder":540},[34,108924,108925,108928,108930,108933,108935],{"class":36,"line":3085},[34,108926,108927],{"class":59},"    output_path ",[34,108929,447],{"class":112},[34,108931,108932],{"class":59}," Path(",[34,108934,108402],{"class":187},[34,108936,623],{"class":59},[34,108938,108939],{"class":36,"line":8412},[34,108940,108941],{"class":59},"    Image.fromarray(image).save(output_path)\n",[34,108943,108944],{"class":36,"line":8436},[34,108945,108946],{"class":59},"    renderer.close()\n",[34,108948,108949],{"class":36,"line":8441},[34,108950,2864],{"emptyLinePlaceholder":540},[34,108952,108953,108955,108957,108960],{"class":36,"line":8447},[34,108954,31762],{"class":63},[34,108956,617],{"class":59},[34,108958,108959],{"class":187},"\"saved:\"",[34,108961,108962],{"class":59},", output_path.resolve())\n",[34,108964,108965,108967,108969,108972],{"class":36,"line":8474},[34,108966,31762],{"class":63},[34,108968,617],{"class":59},[34,108970,108971],{"class":187},"\"image shape:\"",[34,108973,108974],{"class":59},", image.shape)\n",[34,108976,108977],{"class":36,"line":8479},[34,108978,2864],{"emptyLinePlaceholder":540},[34,108980,108981],{"class":36,"line":8485},[34,108982,2864],{"emptyLinePlaceholder":540},[34,108984,108985,108987,108989,108991,108993],{"class":36,"line":8497},[34,108986,2002],{"class":112},[34,108988,31683],{"class":63},[34,108990,101946],{"class":112},[34,108992,101949],{"class":187},[34,108994,4203],{"class":59},[34,108996,108997],{"class":36,"line":8509},[34,108998,101956],{"class":59},[14,109000,103957],{},[25,109002,109004],{"className":24286,"code":109003,"language":24288,"meta":22,"style":22},"touch ch5_renderer.py\n",[31,109005,109006],{"__ignoreMap":22},[34,109007,109008,109010],{"class":36,"line":37},[34,109009,101670],{"class":2427},[34,109011,109012],{"class":187}," ch5_renderer.py\n",[584,109014,101959],{"id":101959},[14,109016,109017],{},"viewer 上下文：",[25,109019,109021],{"className":27,"code":109020,"language":29,"meta":22,"style":22},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[31,109022,109023],{"__ignoreMap":22},[34,109024,109025,109027,109029,109031],{"class":36,"line":37},[34,109026,108220],{"class":112},[34,109028,108223],{"class":59},[34,109030,31846],{"class":112},[34,109032,108228],{"class":59},[14,109034,109035,109037],{},[31,109036,108220],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109039,109040],{},"窗口循环：",[25,109042,109044],{"className":27,"code":109043,"language":29,"meta":22,"style":22},"while viewer.is_running() and data.time \u003C 5.0:\n",[31,109045,109046],{"__ignoreMap":22},[34,109047,109048,109051,109053,109055,109057,109059,109061],{"class":36,"line":37},[34,109049,109050],{"class":112},"while",[34,109052,108574],{"class":59},[34,109054,30925],{"class":112},[34,109056,108579],{"class":59},[34,109058,1515],{"class":112},[34,109060,108584],{"class":63},[34,109062,4203],{"class":59},[14,109064,109065],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109067,109068],{},"固定相机：",[25,109070,109072],{"className":53528,"code":109071,"language":53530,"meta":22,"style":22},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[31,109073,109074],{"__ignoreMap":22},[34,109075,109076,109078,109080,109082,109084,109086,109088,109090,109093,109096,109098,109101],{"class":36,"line":37},[34,109077,1515],{"class":59},[34,109079,108902],{"class":51761},[34,109081,15384],{"class":2427},[34,109083,447],{"class":59},[34,109085,108907],{"class":187},[34,109087,101493],{"class":2427},[34,109089,447],{"class":59},[34,109091,109092],{"class":187},"\"1.5 -2.0 1.2\"",[34,109094,109095],{"class":2427}," xyaxes",[34,109097,447],{"class":59},[34,109099,109100],{"class":187},"\"1 0.75 0 0 0 1\"",[34,109102,101531],{"class":59},[14,109104,109105],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[584,109107,109109],{"id":109108},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[25,109111,109113],{"className":27,"code":109112,"language":29,"meta":22,"style":22},"import time\n",[31,109114,109115],{"__ignoreMap":22},[34,109116,109117,109119],{"class":36,"line":37},[34,109118,30855],{"class":112},[34,109120,32292],{"class":59},[14,109122,109123],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[25,109125,109127],{"className":27,"code":109126,"language":29,"meta":22,"style":22},"import mujoco\nimport mujoco.viewer\n",[31,109128,109129,109135],{"__ignoreMap":22},[34,109130,109131,109133],{"class":36,"line":37},[34,109132,30855],{"class":112},[34,109134,101688],{"class":59},[34,109136,109137,109139],{"class":36,"line":44},[34,109138,30855],{"class":112},[34,109140,107939],{"class":59},[14,109142,109143],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[25,109145,109146],{"className":27,"code":109020,"language":29,"meta":22,"style":22},[31,109147,109148],{"__ignoreMap":22},[34,109149,109150,109152,109154,109156],{"class":36,"line":37},[34,109151,108220],{"class":112},[34,109153,108223],{"class":59},[34,109155,31846],{"class":112},[34,109157,108228],{"class":59},[14,109159,109160,109161,109164],{},"打开一个 viewer 窗口。",[31,109162,109163],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[25,109166,109167],{"className":27,"code":109043,"language":29,"meta":22,"style":22},[31,109168,109169],{"__ignoreMap":22},[34,109170,109171,109173,109175,109177,109179,109181,109183],{"class":36,"line":37},[34,109172,109050],{"class":112},[34,109174,108574],{"class":59},[34,109176,30925],{"class":112},[34,109178,108579],{"class":59},[34,109180,1515],{"class":112},[34,109182,108584],{"class":63},[34,109184,4203],{"class":59},[14,109186,109187,109188,109191],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[31,109189,109190],{},"viewer.is_running()"," 会变成 false，循环结束。",[25,109193,109195],{"className":27,"code":109194,"language":29,"meta":22,"style":22},"step_start = time.time()\n",[31,109196,109197],{"__ignoreMap":22},[34,109198,109199,109202,109204],{"class":36,"line":37},[34,109200,109201],{"class":59},"step_start ",[34,109203,447],{"class":112},[34,109205,108596],{"class":59},[14,109207,109208],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[25,109210,109211],{"className":27,"code":108305,"language":29,"meta":22,"style":22},[31,109212,109213,109217],{"__ignoreMap":22},[34,109214,109215],{"class":36,"line":37},[34,109216,104892],{"class":59},[34,109218,109219],{"class":36,"line":44},[34,109220,108316],{"class":59},[14,109222,109223,109225,109226,109228,109229,109231,109232,109235],{},[31,109224,101602],{}," 推进物理仿真。",[31,109227,108324],{}," 把最新的 ",[31,109230,33863],{}," 同步到窗口里显示。没有 ",[31,109233,109234],{},"sync()","，窗口可能看不到最新状态。",[25,109237,109238],{"className":27,"code":108335,"language":29,"meta":22,"style":22},[31,109239,109240],{"__ignoreMap":22},[34,109241,109242,109244,109246,109248,109250,109252,109254],{"class":36,"line":37},[34,109243,108342],{"class":59},[34,109245,447],{"class":112},[34,109247,108347],{"class":59},[34,109249,113],{"class":112},[34,109251,108352],{"class":59},[34,109253,113],{"class":112},[34,109255,108357],{"class":59},[14,109257,109258],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[25,109260,109262],{"className":27,"code":109261,"language":29,"meta":22,"style":22},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[31,109263,109264,109276],{"__ignoreMap":22},[34,109265,109266,109268,109270,109272,109274],{"class":36,"line":37},[34,109267,2002],{"class":112},[34,109269,108634],{"class":59},[34,109271,1564],{"class":112},[34,109273,4557],{"class":63},[34,109275,4203],{"class":59},[34,109277,109278],{"class":36,"line":44},[34,109279,109280],{"class":59},"    time.sleep(sleep_time)\n",[14,109282,109283],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[584,109285,109287],{"id":109286},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[25,109289,109291],{"className":27,"code":109290,"language":29,"meta":22,"style":22},"from pathlib import Path\n",[31,109292,109293],{"__ignoreMap":22},[34,109294,109295,109297,109299,109301],{"class":36,"line":37},[34,109296,31200],{"class":112},[34,109298,108698],{"class":59},[34,109300,30855],{"class":112},[34,109302,108703],{"class":59},[14,109304,109305,109306,109309,109310,109313],{},"导入 ",[31,109307,109308],{},"Path","，用来处理文件路径。相比直接写字符串，",[31,109311,109312],{},"Path(\"render_output.png\")"," 更清晰。",[25,109315,109317],{"className":27,"code":109316,"language":29,"meta":22,"style":22},"from PIL import Image\n",[31,109318,109319],{"__ignoreMap":22},[34,109320,109321,109323,109325,109327],{"class":36,"line":37},[34,109322,31200],{"class":112},[34,109324,47724],{"class":63},[34,109326,47727],{"class":112},[34,109328,47730],{"class":59},[14,109330,109331],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[25,109333,109334],{"className":53528,"code":109071,"language":53530,"meta":22,"style":22},[31,109335,109336],{"__ignoreMap":22},[34,109337,109338,109340,109342,109344,109346,109348,109350,109352,109354,109356,109358,109360],{"class":36,"line":37},[34,109339,1515],{"class":59},[34,109341,108902],{"class":51761},[34,109343,15384],{"class":2427},[34,109345,447],{"class":59},[34,109347,108907],{"class":187},[34,109349,101493],{"class":2427},[34,109351,447],{"class":59},[34,109353,109092],{"class":187},[34,109355,109095],{"class":2427},[34,109357,447],{"class":59},[34,109359,109100],{"class":187},[34,109361,101531],{"class":59},[14,109363,109364,109365,109367,109368,109370,109371,109374,109375,109377],{},"定义一个相机。",[31,109366,80271],{}," 是相机名字。",[31,109369,104533],{}," 是相机在世界里的位置。",[31,109372,109373],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[31,109376,104533],{}," 来调视角。",[25,109379,109381],{"className":27,"code":109380,"language":29,"meta":22,"style":22},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[31,109382,109383],{"__ignoreMap":22},[34,109384,109385,109387,109389,109391,109393,109395,109397,109399,109401,109403,109405],{"class":36,"line":37},[34,109386,107957],{"class":59},[34,109388,447],{"class":112},[34,109390,108261],{"class":59},[34,109392,25446],{"class":5680},[34,109394,447],{"class":112},[34,109396,42803],{"class":63},[34,109398,12899],{"class":59},[34,109400,25442],{"class":5680},[34,109402,447],{"class":112},[34,109404,108276],{"class":63},[34,109406,623],{"class":59},[14,109408,109409,109410,101405,109412,109414],{},"创建离屏渲染器。",[31,109411,25446],{},[31,109413,25442],{}," 决定输出图片大小。",[25,109416,109417],{"className":27,"code":102063,"language":29,"meta":22,"style":22},[31,109418,109419,109435],{"__ignoreMap":22},[34,109420,109421,109423,109425,109427,109429,109431,109433],{"class":36,"line":37},[34,109422,3489],{"class":112},[34,109424,101888],{"class":59},[34,109426,26508],{"class":112},[34,109428,32906],{"class":63},[34,109430,617],{"class":59},[34,109432,919],{"class":63},[34,109434,31249],{"class":59},[34,109436,109437],{"class":36,"line":44},[34,109438,102086],{"class":59},[14,109440,109441],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[25,109443,109445],{"className":27,"code":109444,"language":29,"meta":22,"style":22},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[31,109446,109447],{"__ignoreMap":22},[34,109448,109449,109452,109454,109456,109458],{"class":36,"line":37},[34,109450,109451],{"class":59},"renderer.update_scene(data, ",[34,109453,108902],{"class":5680},[34,109455,447],{"class":112},[34,109457,108907],{"class":187},[34,109459,623],{"class":59},[14,109461,109462,109463,109465,109466,109469],{},"告诉 renderer：用当前 ",[31,109464,33863],{}," 的状态更新画面，并使用名为 ",[31,109467,109468],{},"fixed_camera"," 的相机视角。",[25,109471,109472],{"className":27,"code":108367,"language":29,"meta":22,"style":22},[31,109473,109474],{"__ignoreMap":22},[34,109475,109476,109478,109480],{"class":36,"line":37},[34,109477,107967],{"class":59},[34,109479,447],{"class":112},[34,109481,107972],{"class":59},[14,109483,109484,109485,109488],{},"真正渲染出图像。",[31,109486,109487],{},"image"," 是一个 NumPy 数组，不是文件。",[25,109490,109492],{"className":27,"code":109491,"language":29,"meta":22,"style":22},"Image.fromarray(image).save(output_path)\n",[31,109493,109494],{"__ignoreMap":22},[34,109495,109496],{"class":36,"line":37},[34,109497,109491],{"class":59},[14,109499,109500,109501,28850],{},"把数组转换成图片，并保存到 ",[31,109502,109503],{},"render_output.png",[25,109505,109507],{"className":27,"code":109506,"language":29,"meta":22,"style":22},"renderer.close()\n",[31,109508,109509],{"__ignoreMap":22},[34,109510,109511],{"class":36,"line":37},[34,109512,109506],{"class":59},[14,109514,109515],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[555,109517,102703],{"id":102702},[14,109519,109520,109521,109523,109524,28850],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[31,109522,109503],{},"，并输出图像数组形状，例如 ",[31,109525,109526],{},"(480, 640, 3)",[14,109528,109529],{},"如果图片里看不到方块，先检查：",[567,109531,109532,109535,109538],{},[570,109533,109534],{},"方块是否掉到相机视野外。",[570,109536,109537],{},"camera 位置是否合理。",[570,109539,109540,109541,109544],{},"是否在 ",[31,109542,109543],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[555,109546,102735],{"id":102734},[14,109548,109549],{},"运行 viewer:",[25,109551,109553],{"className":24286,"code":109552,"language":24288,"meta":22,"style":22},"python ch5_viewer.py\n",[31,109554,109555],{"__ignoreMap":22},[34,109556,109557,109559],{"class":36,"line":37},[34,109558,29],{"class":2427},[34,109560,108683],{"class":187},[14,109562,109563],{},"运行 renderer:",[25,109565,109567],{"className":24286,"code":109566,"language":24288,"meta":22,"style":22},"python ch5_renderer.py\n",[31,109568,109569],{"__ignoreMap":22},[34,109570,109571,109573],{"class":36,"line":37},[34,109572,29],{"class":2427},[34,109574,109012],{"class":187},[14,109576,109577],{},"如果在服务器上运行:",[25,109579,109581],{"className":24286,"code":109580,"language":24288,"meta":22,"style":22},"MUJOCO_GL=egl python ch5_renderer.py\n",[31,109582,109583],{"__ignoreMap":22},[34,109584,109585,109587,109589,109591,109594],{"class":36,"line":37},[34,109586,108201],{"class":59},[34,109588,447],{"class":112},[34,109590,108191],{"class":187},[34,109592,109593],{"class":2427}," python",[34,109595,109012],{"class":187},[14,109597,108169],{},[25,109599,109601],{"className":24286,"code":109600,"language":24288,"meta":22,"style":22},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[31,109602,109603],{"__ignoreMap":22},[34,109604,109605,109607,109609,109611,109613],{"class":36,"line":37},[34,109606,108201],{"class":59},[34,109608,447],{"class":112},[34,109610,108195],{"class":187},[34,109612,109593],{"class":2427},[34,109614,109012],{"class":187},[14,109616,109617],{},"再做几个练习：",[567,109619,109620,109627,109630,109636],{},[570,109621,109622,109623,109626],{},"把 renderer 分辨率改成 ",[31,109624,109625],{},"height=240, width=320","，观察输出 shape。",[570,109628,109629],{},"把方块颜色改成蓝色，重新保存图片。",[570,109631,109632,109633,109635],{},"把相机 ",[31,109634,104533],{}," 改远一点，观察画面中物体是否变小。",[570,109637,109638,109639,102801,109642,109645],{},"把 viewer 示例中的 ",[31,109640,109641],{},"data.time \u003C 5.0",[31,109643,109644],{},"data.time \u003C 20.0","，观察更长时间。",[555,109647,102840],{"id":102839},[584,109649,109651],{"id":109650},"viewer-窗口打不开","viewer 窗口打不开",[14,109653,109654],{},"安装:",[25,109656,109658],{"className":24286,"code":109657,"language":24288,"meta":22,"style":22},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[31,109659,109660],{"__ignoreMap":22},[34,109661,109662,109664,109666,109668,109670,109672,109674,109676,109678,109680,109682],{"class":36,"line":37},[34,109663,25041],{"class":2427},[34,109665,26780],{"class":187},[34,109667,24298],{"class":187},[34,109669,26865],{"class":63},[34,109671,102893],{"class":187},[34,109673,101221],{"class":187},[34,109675,102898],{"class":187},[34,109677,101234],{"class":187},[34,109679,101240],{"class":187},[34,109681,101231],{"class":187},[34,109683,109684],{"class":187}," libXinerama\n",[584,109686,109688],{"id":109687},"glfwerror",[31,109689,109690],{},"GLFWError",[14,109692,109693],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[584,109695,109697],{"id":109696},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109699,109700,109701,83000,109703,109705],{},"尝试 ",[31,109702,101424],{},[31,109704,101427],{},"。可能存在版本差异。",[584,109707,109708],{"id":109708},"保存图片是黑的",[14,109710,102962],{},[567,109712,109713,109716,109719,109729],{},[570,109714,109715],{},"XML 里是否有 light。",[570,109717,109718],{},"相机是否对着模型。",[570,109720,109721,109722,109725,109726,28850],{},"是否先 ",[31,109723,109724],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[31,109727,109728],{},"renderer.render()",[570,109730,109731],{},"物体是否已经掉出视野。",[584,109733,109734],{"id":109734},"远程服务器没有显示器",[14,109736,109737],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[25,109739,109740],{"className":24286,"code":109580,"language":24288,"meta":22,"style":22},[31,109741,109742],{"__ignoreMap":22},[34,109743,109744,109746,109748,109750,109752],{"class":36,"line":37},[34,109745,108201],{"class":59},[34,109747,447],{"class":112},[34,109749,108191],{"class":187},[34,109751,109593],{"class":2427},[34,109753,109012],{"class":187},[14,109755,109756],{},"如果 EGL 不可用，再尝试：",[25,109758,109759],{"className":24286,"code":109600,"language":24288,"meta":22,"style":22},[31,109760,109761],{"__ignoreMap":22},[34,109762,109763,109765,109767,109769,109771],{"class":36,"line":37},[34,109764,108201],{"class":59},[34,109766,447],{"class":112},[34,109768,108195],{"class":187},[34,109770,109593],{"class":2427},[34,109772,109012],{"class":187},[555,109774,102994],{"id":102993},[14,109776,109777],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[567,109779,109780,109783,109786],{},[570,109781,109782],{},"先用 viewer 看模型和控制是否正常。",[570,109784,109785],{},"再用 renderer 保存图片或构造视觉观测。",[570,109787,109788],{},"最后把状态、动作、图像、奖励组织成训练数据。",[532,109790,109791],{},"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":22,"searchDepth":44,"depth":44,"links":109793},[109794,109795,109796,109801,109806,109807,109808,109815],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":109797},[109798,109799,109800],{"id":108298,"depth":50,"text":108299},{"id":108328,"depth":50,"text":108329},{"id":108363,"depth":50,"text":108364},{"id":101639,"depth":44,"text":101640,"children":109802},[109803,109804,109805],{"id":101959,"depth":50,"text":101959},{"id":109108,"depth":50,"text":109109},{"id":109286,"depth":50,"text":109287},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":109809},[109810,109811,109812,109813,109814],{"id":109650,"depth":50,"text":109651},{"id":109687,"depth":50,"text":109690},{"id":109696,"depth":50,"text":109697},{"id":109708,"depth":50,"text":109708},{"id":109734,"depth":50,"text":109734},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107906,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109822,"title":109823,"body":109824,"description":22,"extension":538,"meta":111735,"navigation":540,"path":111736,"seo":111737,"stem":111738,"__hash__":111739},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109825,"toc":111711},[109826,109829,109831,109834,109836,109855,109858,109864,109867,109869,109871,109895,109897,109911,109913,109954,109956,109967,109969,109972,109978,109981,110015,110018,110050,110053,110085,110089,110092,110132,110135,110141,110144,110150,110154,110157,110163,110166,110170,110173,110213,110215,110228,110231,110233,110815,110817,110829,110832,110843,110845,110848,110867,110879,110882,110903,110906,110909,110952,110955,110958,110978,110985,110987,111005,111020,111023,111029,111032,111038,111055,111062,111093,111104,111138,111149,111166,111175,111183,111188,111202,111205,111226,111232,111246,111251,111281,111291,111316,111324,111347,111350,111366,111369,111377,111383,111405,111418,111439,111448,111487,111498,111500,111503,111509,111512,111515,111521,111524,111544,111547,111549,111588,111590,111593,111601,111604,111607,111634,111637,111647,111653,111656,111662,111664,111670,111674,111677,111679,111682,111706,111709],[10,109827,109823],{"id":109828},"_6控制任务cartpole",[555,109830,101034],{"id":101033},[14,109832,109833],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109835,104718],{},[567,109837,109838,109841,109843,109846,109849,109852],{},[570,109839,109840],{},"slide joint",[570,109842,106571],{},[570,109844,109845],{},"cart force actuator",[570,109847,109848],{},"状态观测",[570,109850,109851],{},"简单控制循环",[570,109853,109854],{},"reward 设计雏形",[14,109856,109857],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[25,109859,109862],{"className":109860,"code":109861,"language":5651,"meta":22},[5649],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[31,109863,109861],{"__ignoreMap":22},[14,109865,109866],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[555,109868,101157],{"id":101156},[14,109870,101160],{},[25,109872,109873],{"className":24286,"code":104775,"language":24288,"meta":22,"style":22},[31,109874,109875],{"__ignoreMap":22},[34,109876,109877,109879,109881,109883,109885,109887,109889,109891,109893],{"class":36,"line":37},[34,109878,25041],{"class":2427},[34,109880,26780],{"class":187},[34,109882,24298],{"class":187},[34,109884,26865],{"class":63},[34,109886,104790],{"class":187},[34,109888,101185],{"class":187},[34,109890,102888],{"class":187},[34,109892,101201],{"class":187},[34,109894,104799],{"class":187},[14,109896,103206],{},[25,109898,109899],{"className":24286,"code":101306,"language":24288,"meta":22,"style":22},[31,109900,109901],{"__ignoreMap":22},[34,109902,109903,109905,109907,109909],{"class":36,"line":37},[34,109904,24295],{"class":2427},[34,109906,24298],{"class":187},[34,109908,101317],{"class":187},[34,109910,101320],{"class":187},[14,109912,103223],{},[25,109914,109916],{"className":24286,"code":109915,"language":24288,"meta":22,"style":22},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[31,109917,109918,109935,109944],{"__ignoreMap":22},[34,109919,109920,109922,109924,109926,109929,109931,109933],{"class":36,"line":37},[34,109921,30795],{"class":2427},[34,109923,29641],{"class":187},[34,109925,25580],{"class":63},[34,109927,109928],{"class":187}," mujoco-cartpole",[34,109930,101362],{"class":187},[34,109932,101365],{"class":63},[34,109934,101368],{"class":63},[34,109936,109937,109939,109941],{"class":36,"line":44},[34,109938,30795],{"class":2427},[34,109940,101375],{"class":187},[34,109942,109943],{"class":187}," mujoco-cartpole\n",[34,109945,109946,109948,109950,109952],{"class":36,"line":50},[34,109947,24295],{"class":2427},[34,109949,24298],{"class":187},[34,109951,101317],{"class":187},[34,109953,101320],{"class":187},[14,109955,101391],{},[567,109957,109958,109961,109964],{},[570,109959,109960],{},"本章不依赖 Gymnasium。",[570,109962,109963],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[570,109965,109966],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[555,109968,101432],{"id":101431},[14,109970,109971],{},"Cartpole 的模型结构:",[25,109973,109976],{"className":109974,"code":109975,"language":5651,"meta":22},[5649],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[31,109977,109975],{"__ignoreMap":22},[14,109979,109980],{},"小车通过 slide joint 左右移动:",[25,109982,109984],{"className":53528,"code":109983,"language":53530,"meta":22,"style":22},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[31,109985,109986],{"__ignoreMap":22},[34,109987,109988,109990,109992,109994,109996,109999,110001,110003,110006,110008,110010,110013],{"class":36,"line":37},[34,109989,1515],{"class":59},[34,109991,103343],{"class":51761},[34,109993,15384],{"class":2427},[34,109995,447],{"class":59},[34,109997,109998],{"class":187},"\"cart_x\"",[34,110000,54285],{"class":2427},[34,110002,447],{"class":59},[34,110004,110005],{"class":187},"\"slide\"",[34,110007,106415],{"class":2427},[34,110009,447],{"class":59},[34,110011,110012],{"class":187},"\"1 0 0\"",[34,110014,101531],{"class":59},[14,110016,110017],{},"杆子通过 hinge joint 旋转:",[25,110019,110021],{"className":53528,"code":110020,"language":53530,"meta":22,"style":22},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[31,110022,110023],{"__ignoreMap":22},[34,110024,110025,110027,110029,110031,110033,110036,110038,110040,110042,110044,110046,110048],{"class":36,"line":37},[34,110026,1515],{"class":59},[34,110028,103343],{"class":51761},[34,110030,15384],{"class":2427},[34,110032,447],{"class":59},[34,110034,110035],{"class":187},"\"pole_hinge\"",[34,110037,54285],{"class":2427},[34,110039,447],{"class":59},[34,110041,106406],{"class":187},[34,110043,106415],{"class":2427},[34,110045,447],{"class":59},[34,110047,106420],{"class":187},[34,110049,101531],{"class":59},[14,110051,110052],{},"控制力作用在小车 slide joint 上:",[25,110054,110056],{"className":53528,"code":110055,"language":53530,"meta":22,"style":22},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[31,110057,110058],{"__ignoreMap":22},[34,110059,110060,110062,110064,110066,110068,110071,110073,110075,110077,110079,110081,110083],{"class":36,"line":37},[34,110061,1515],{"class":59},[34,110063,106461],{"class":51761},[34,110065,15384],{"class":2427},[34,110067,447],{"class":59},[34,110069,110070],{"class":187},"\"cart_motor\"",[34,110072,106471],{"class":2427},[34,110074,447],{"class":59},[34,110076,109998],{"class":187},[34,110078,106478],{"class":2427},[34,110080,447],{"class":59},[34,110082,54777],{"class":187},[34,110084,101531],{"class":59},[584,110086,110088],{"id":110087},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110090,110091],{},"这个简化模型有两个关节：",[748,110093,110094,110105],{},[751,110095,110096],{},[754,110097,110098,110100,110102],{},[757,110099,103146],{"align":24200},[757,110101,24201],{"align":24200},[757,110103,110104],{"align":24200},"对应状态",[795,110106,110107,110120],{},[754,110108,110109,110114,110117],{},[800,110110,110111],{"align":24200},[31,110112,110113],{},"cart_x",[800,110115,110116],{"align":24200},"slide",[800,110118,110119],{"align":24200},"小车 x 位置",[754,110121,110122,110127,110129],{},[800,110123,110124],{"align":24200},[31,110125,110126],{},"pole_hinge",[800,110128,106227],{"align":24200},[800,110130,110131],{"align":24200},"杆子角度",[14,110133,110134],{},"所以：",[25,110136,110139],{"className":110137,"code":110138,"language":5651,"meta":22},[5649],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[31,110140,110138],{"__ignoreMap":22},[14,110142,110143],{},"把它们拼起来就是观测：",[25,110145,110148],{"className":110146,"code":110147,"language":5651,"meta":22},[5649],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[31,110149,110147],{"__ignoreMap":22},[584,110151,110153],{"id":110152},"action-是什么","action 是什么",[14,110155,110156],{},"本章只有一个 actuator：",[25,110158,110161],{"className":110159,"code":110160,"language":5651,"meta":22},[5649],"data.ctrl[0] = action\n",[31,110162,110160],{"__ignoreMap":22},[14,110164,110165],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[584,110167,110169],{"id":110168},"reward-是什么","reward 是什么",[14,110171,110172],{},"奖励函数：",[25,110174,110176],{"className":27,"code":110175,"language":29,"meta":22,"style":22},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[31,110177,110178],{"__ignoreMap":22},[34,110179,110180,110182,110185,110187,110189,110191,110194,110196,110199,110201,110203,110205,110208,110210],{"class":36,"line":37},[34,110181,17510],{"class":112},[34,110183,110184],{"class":63}," float",[34,110186,617],{"class":59},[34,110188,102790],{"class":63},[34,110190,52732],{"class":112},[34,110192,110193],{"class":63}," 0.1",[34,110195,6982],{"class":112},[34,110197,110198],{"class":59}," cart_x ",[34,110200,1062],{"class":112},[34,110202,110198],{"class":59},[34,110204,113],{"class":112},[34,110206,110207],{"class":59}," pole_angle ",[34,110209,1062],{"class":112},[34,110211,110212],{"class":59}," pole_angle)\n",[14,110214,106613],{},[567,110216,110217,110222,110225],{},[570,110218,110219,110220,28850],{},"基础奖励是 ",[31,110221,102790],{},[570,110223,110224],{},"小车离中心越远，扣分越多。",[570,110226,110227],{},"杆子角度越大，扣分越多。",[14,110229,110230],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[555,110232,101640],{"id":101639},[25,110234,110236],{"className":27,"code":110235,"language":29,"meta":22,"style":22},"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",[31,110237,110238,110244,110254,110258,110262,110270,110275,110279,110283,110287,110292,110296,110301,110306,110311,110315,110320,110325,110330,110334,110338,110342,110346,110350,110355,110359,110363,110367,110371,110375,110385,110392,110396,110400,110414,110428,110441,110471,110475,110479,110491,110503,110511,110515,110528,110532,110536,110545,110549,110565,110575,110588,110601,110605,110628,110646,110650,110662,110666,110670,110680,110690,110694,110710,110751,110755,110775,110791,110795,110799,110811],{"__ignoreMap":22},[34,110239,110240,110242],{"class":36,"line":37},[34,110241,30855],{"class":112},[34,110243,101688],{"class":59},[34,110245,110246,110248,110250,110252],{"class":36,"line":44},[34,110247,30855],{"class":112},[34,110249,31843],{"class":59},[34,110251,31846],{"class":112},[34,110253,31849],{"class":59},[34,110255,110256],{"class":36,"line":50},[34,110257,2864],{"emptyLinePlaceholder":540},[34,110259,110260],{"class":36,"line":56},[34,110261,2864],{"emptyLinePlaceholder":540},[34,110263,110264,110266,110268],{"class":36,"line":107},[34,110265,101701],{"class":63},[34,110267,14028],{"class":112},[34,110269,101706],{"class":187},[34,110271,110272],{"class":36,"line":196},[34,110273,110274],{"class":187},"\u003Cmujoco model=\"cartpole\">\n",[34,110276,110277],{"class":36,"line":202},[34,110278,101716],{"class":187},[34,110280,110281],{"class":36,"line":207},[34,110282,2864],{"emptyLinePlaceholder":540},[34,110284,110285],{"class":36,"line":222},[34,110286,101725],{"class":187},[34,110288,110289],{"class":36,"line":227},[34,110290,110291],{"class":187},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,110293,110294],{"class":36,"line":232},[34,110295,2864],{"emptyLinePlaceholder":540},[34,110297,110298],{"class":36,"line":238},[34,110299,110300],{"class":187},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[34,110302,110303],{"class":36,"line":244},[34,110304,110305],{"class":187},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[34,110307,110308],{"class":36,"line":250},[34,110309,110310],{"class":187},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[34,110312,110313],{"class":36,"line":256},[34,110314,2864],{"emptyLinePlaceholder":540},[34,110316,110317],{"class":36,"line":261},[34,110318,110319],{"class":187},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[34,110321,110322],{"class":36,"line":267},[34,110323,110324],{"class":187},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[34,110326,110327],{"class":36,"line":2138},[34,110328,110329],{"class":187},"        \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",[34,110331,110332],{"class":36,"line":2143},[34,110333,106825],{"class":187},[34,110335,110336],{"class":36,"line":2157},[34,110337,101754],{"class":187},[34,110339,110340],{"class":36,"line":2162},[34,110341,101759],{"class":187},[34,110343,110344],{"class":36,"line":2191},[34,110345,2864],{"emptyLinePlaceholder":540},[34,110347,110348],{"class":36,"line":2196},[34,110349,106842],{"class":187},[34,110351,110352],{"class":36,"line":2213},[34,110353,110354],{"class":187},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,110356,110357],{"class":36,"line":2218},[34,110358,106852],{"class":187},[34,110360,110361],{"class":36,"line":2223},[34,110362,101764],{"class":187},[34,110364,110365],{"class":36,"line":2228},[34,110366,96157],{"class":187},[34,110368,110369],{"class":36,"line":2242},[34,110370,2864],{"emptyLinePlaceholder":540},[34,110372,110373],{"class":36,"line":2247},[34,110374,2864],{"emptyLinePlaceholder":540},[34,110376,110377,110379,110382],{"class":36,"line":3041},[34,110378,32410],{"class":112},[34,110380,110381],{"class":2427}," get_observation",[34,110383,110384],{"class":59},"(data: mujoco.MjData) -> np.ndarray:\n",[34,110386,110387,110389],{"class":36,"line":3055},[34,110388,4554],{"class":112},[34,110390,110391],{"class":59}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,110393,110394],{"class":36,"line":3063},[34,110395,2864],{"emptyLinePlaceholder":540},[34,110397,110398],{"class":36,"line":3068},[34,110399,2864],{"emptyLinePlaceholder":540},[34,110401,110402,110404,110407,110410,110412],{"class":36,"line":3074},[34,110403,32410],{"class":112},[34,110405,110406],{"class":2427}," compute_reward",[34,110408,110409],{"class":59},"(obs: np.ndarray) -> ",[34,110411,656],{"class":63},[34,110413,4203],{"class":59},[34,110415,110416,110419,110421,110424,110426],{"class":36,"line":3080},[34,110417,110418],{"class":59},"    cart_x ",[34,110420,447],{"class":112},[34,110422,110423],{"class":59}," obs[",[34,110425,319],{"class":63},[34,110427,73],{"class":59},[34,110429,110430,110433,110435,110437,110439],{"class":36,"line":3085},[34,110431,110432],{"class":59},"    pole_angle ",[34,110434,447],{"class":112},[34,110436,110423],{"class":59},[34,110438,64],{"class":63},[34,110440,73],{"class":59},[34,110442,110443,110445,110447,110449,110451,110453,110455,110457,110459,110461,110463,110465,110467,110469],{"class":36,"line":8412},[34,110444,4554],{"class":112},[34,110446,110184],{"class":63},[34,110448,617],{"class":59},[34,110450,102790],{"class":63},[34,110452,52732],{"class":112},[34,110454,110193],{"class":63},[34,110456,6982],{"class":112},[34,110458,110198],{"class":59},[34,110460,1062],{"class":112},[34,110462,110198],{"class":59},[34,110464,113],{"class":112},[34,110466,110207],{"class":59},[34,110468,1062],{"class":112},[34,110470,110212],{"class":59},[34,110472,110473],{"class":36,"line":8436},[34,110474,2864],{"emptyLinePlaceholder":540},[34,110476,110477],{"class":36,"line":8441},[34,110478,2864],{"emptyLinePlaceholder":540},[34,110480,110481,110483,110485,110487,110489],{"class":36,"line":8447},[34,110482,32410],{"class":112},[34,110484,2437],{"class":2427},[34,110486,101785],{"class":59},[34,110488,96145],{"class":63},[34,110490,4203],{"class":59},[34,110492,110493,110495,110497,110499,110501],{"class":36,"line":8474},[34,110494,101794],{"class":59},[34,110496,447],{"class":112},[34,110498,101799],{"class":59},[34,110500,101701],{"class":63},[34,110502,623],{"class":59},[34,110504,110505,110507,110509],{"class":36,"line":8479},[34,110506,101808],{"class":59},[34,110508,447],{"class":112},[34,110510,101813],{"class":59},[34,110512,110513],{"class":36,"line":8485},[34,110514,2864],{"emptyLinePlaceholder":540},[34,110516,110517,110519,110521,110523,110525],{"class":36,"line":8497},[34,110518,105456],{"class":59},[34,110520,64],{"class":63},[34,110522,4907],{"class":59},[34,110524,447],{"class":112},[34,110526,110527],{"class":63}," 0.1\n",[34,110529,110530],{"class":36,"line":8509},[34,110531,105469],{"class":59},[34,110533,110534],{"class":36,"line":8521},[34,110535,2864],{"emptyLinePlaceholder":540},[34,110537,110538,110541,110543],{"class":36,"line":10180},[34,110539,110540],{"class":59},"    total_reward ",[34,110542,447],{"class":112},[34,110544,105148],{"class":63},[34,110546,110547],{"class":36,"line":10205},[34,110548,2864],{"emptyLinePlaceholder":540},[34,110550,110551,110553,110555,110557,110559,110561,110563],{"class":36,"line":10228},[34,110552,3665],{"class":112},[34,110554,32079],{"class":59},[34,110556,26508],{"class":112},[34,110558,32906],{"class":63},[34,110560,617],{"class":59},[34,110562,6874],{"class":63},[34,110564,31249],{"class":59},[34,110566,110567,110570,110572],{"class":36,"line":10252},[34,110568,110569],{"class":59},"        obs ",[34,110571,447],{"class":112},[34,110573,110574],{"class":59}," get_observation(data)\n",[34,110576,110577,110580,110582,110584,110586],{"class":36,"line":10257},[34,110578,110579],{"class":59},"        pole_angle ",[34,110581,447],{"class":112},[34,110583,110423],{"class":59},[34,110585,64],{"class":63},[34,110587,73],{"class":59},[34,110589,110590,110593,110595,110597,110599],{"class":36,"line":10262},[34,110591,110592],{"class":59},"        pole_angular_velocity ",[34,110594,447],{"class":112},[34,110596,110423],{"class":59},[34,110598,309],{"class":63},[34,110600,73],{"class":59},[34,110602,110603],{"class":36,"line":10267},[34,110604,2864],{"emptyLinePlaceholder":540},[34,110606,110607,110610,110612,110615,110617,110619,110621,110623,110625],{"class":36,"line":10276},[34,110608,110609],{"class":59},"        action ",[34,110611,447],{"class":112},[34,110613,110614],{"class":63}," 2.0",[34,110616,6982],{"class":112},[34,110618,110207],{"class":59},[34,110620,1088],{"class":112},[34,110622,62328],{"class":63},[34,110624,6982],{"class":112},[34,110626,110627],{"class":59}," pole_angular_velocity\n",[34,110629,110630,110632,110634,110636,110638,110640,110642,110644],{"class":36,"line":10281},[34,110631,110609],{"class":59},[34,110633,447],{"class":112},[34,110635,107834],{"class":59},[34,110637,113],{"class":112},[34,110639,102790],{"class":63},[34,110641,12899],{"class":59},[34,110643,102790],{"class":63},[34,110645,623],{"class":59},[34,110647,110648],{"class":36,"line":10287},[34,110649,2864],{"emptyLinePlaceholder":540},[34,110651,110652,110654,110656,110658,110660],{"class":36,"line":10308},[34,110653,107004],{"class":59},[34,110655,319],{"class":63},[34,110657,4907],{"class":59},[34,110659,447],{"class":112},[34,110661,107857],{"class":59},[34,110663,110664],{"class":36,"line":10314},[34,110665,101903],{"class":59},[34,110667,110668],{"class":36,"line":10328},[34,110669,2864],{"emptyLinePlaceholder":540},[34,110671,110672,110675,110677],{"class":36,"line":10334},[34,110673,110674],{"class":59},"        reward ",[34,110676,447],{"class":112},[34,110678,110679],{"class":59}," compute_reward(get_observation(data))\n",[34,110681,110682,110685,110687],{"class":36,"line":10361},[34,110683,110684],{"class":59},"        total_reward ",[34,110686,9941],{"class":112},[34,110688,110689],{"class":59}," reward\n",[34,110691,110692],{"class":36,"line":10370},[34,110693,2864],{"emptyLinePlaceholder":540},[34,110695,110696,110698,110700,110702,110704,110706,110708],{"class":36,"line":10376},[34,110697,2961],{"class":112},[34,110699,32079],{"class":59},[34,110701,936],{"class":112},[34,110703,6218],{"class":63},[34,110705,101946],{"class":112},[34,110707,4557],{"class":63},[34,110709,4203],{"class":59},[34,110711,110712,110714,110716,110719,110722,110725,110728,110730,110733,110736,110738,110740,110742,110744,110747,110749],{"class":36,"line":10384},[34,110713,35112],{"class":63},[34,110715,617],{"class":59},[34,110717,110718],{"class":187},"\"step:\"",[34,110720,110721],{"class":59},", step, ",[34,110723,110724],{"class":187},"\"obs:\"",[34,110726,110727],{"class":59},", np.round(obs, ",[34,110729,309],{"class":63},[34,110731,110732],{"class":59},"), ",[34,110734,110735],{"class":187},"\"action:\"",[34,110737,12899],{"class":59},[34,110739,32481],{"class":63},[34,110741,617],{"class":59},[34,110743,656],{"class":63},[34,110745,110746],{"class":59},"(action), ",[34,110748,309],{"class":63},[34,110750,30960],{"class":59},[34,110752,110753],{"class":36,"line":10389},[34,110754,2864],{"emptyLinePlaceholder":540},[34,110756,110757,110759,110761,110764,110766,110768,110771,110773],{"class":36,"line":17068},[34,110758,31762],{"class":63},[34,110760,617],{"class":59},[34,110762,110763],{"class":187},"\"total_reward:\"",[34,110765,12899],{"class":59},[34,110767,32481],{"class":63},[34,110769,110770],{"class":59},"(total_reward, ",[34,110772,309],{"class":63},[34,110774,30960],{"class":59},[34,110776,110777,110779,110781,110784,110787,110789],{"class":36,"line":17074},[34,110778,31762],{"class":63},[34,110780,617],{"class":59},[34,110782,110783],{"class":187},"\"final obs:\"",[34,110785,110786],{"class":59},", np.round(get_observation(data), ",[34,110788,309],{"class":63},[34,110790,30960],{"class":59},[34,110792,110793],{"class":36,"line":17097},[34,110794,2864],{"emptyLinePlaceholder":540},[34,110796,110797],{"class":36,"line":17103},[34,110798,2864],{"emptyLinePlaceholder":540},[34,110800,110801,110803,110805,110807,110809],{"class":36,"line":17126},[34,110802,2002],{"class":112},[34,110804,31683],{"class":63},[34,110806,101946],{"class":112},[34,110808,101949],{"class":187},[34,110810,4203],{"class":59},[34,110812,110813],{"class":36,"line":17140},[34,110814,101956],{"class":59},[14,110816,103957],{},[25,110818,110820],{"className":24286,"code":110819,"language":24288,"meta":22,"style":22},"touch ch6_cartpole.py\n",[31,110821,110822],{"__ignoreMap":22},[34,110823,110824,110826],{"class":36,"line":37},[34,110825,101670],{"class":2427},[34,110827,110828],{"class":187}," ch6_cartpole.py\n",[14,110830,110831],{},"运行：",[25,110833,110835],{"className":24286,"code":110834,"language":24288,"meta":22,"style":22},"python ch6_cartpole.py\n",[31,110836,110837],{"__ignoreMap":22},[34,110838,110839,110841],{"class":36,"line":37},[34,110840,29],{"class":2427},[34,110842,110828],{"class":187},[584,110844,101959],{"id":101959},[14,110846,110847],{},"构造观测：",[25,110849,110851],{"className":27,"code":110850,"language":29,"meta":22,"style":22},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[31,110852,110853,110861],{"__ignoreMap":22},[34,110854,110855,110857,110859],{"class":36,"line":37},[34,110856,32410],{"class":112},[34,110858,110381],{"class":2427},[34,110860,110384],{"class":59},[34,110862,110863,110865],{"class":36,"line":44},[34,110864,4554],{"class":112},[34,110866,110391],{"class":59},[14,110868,110869,110872,110873,110875,110876,110878],{},[31,110870,110871],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[31,110874,104417],{}," 2 维，",[31,110877,104747],{}," 2 维，所以 obs 是 4 维。",[14,110880,110881],{},"设置初始角度：",[25,110883,110885],{"className":27,"code":110884,"language":29,"meta":22,"style":22},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[31,110886,110887,110899],{"__ignoreMap":22},[34,110888,110889,110891,110893,110895,110897],{"class":36,"line":37},[34,110890,105086],{"class":59},[34,110892,64],{"class":63},[34,110894,4907],{"class":59},[34,110896,447],{"class":112},[34,110898,110527],{"class":63},[34,110900,110901],{"class":36,"line":44},[34,110902,104930],{"class":59},[14,110904,110905],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110907,110908],{},"简单反馈控制：",[25,110910,110912],{"className":27,"code":110911,"language":29,"meta":22,"style":22},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[31,110913,110914,110934],{"__ignoreMap":22},[34,110915,110916,110918,110920,110922,110924,110926,110928,110930,110932],{"class":36,"line":37},[34,110917,107829],{"class":59},[34,110919,447],{"class":112},[34,110921,110614],{"class":63},[34,110923,6982],{"class":112},[34,110925,110207],{"class":59},[34,110927,1088],{"class":112},[34,110929,62328],{"class":63},[34,110931,6982],{"class":112},[34,110933,110627],{"class":59},[34,110935,110936,110938,110940,110942,110944,110946,110948,110950],{"class":36,"line":44},[34,110937,107829],{"class":59},[34,110939,447],{"class":112},[34,110941,107834],{"class":59},[34,110943,113],{"class":112},[34,110945,102790],{"class":63},[34,110947,12899],{"class":59},[34,110949,102790],{"class":63},[34,110951,623],{"class":59},[14,110953,110954],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110956,110957],{},"限制动作：",[25,110959,110961],{"className":27,"code":110960,"language":29,"meta":22,"style":22},"np.clip(action, -1.0, 1.0)\n",[31,110962,110963],{"__ignoreMap":22},[34,110964,110965,110968,110970,110972,110974,110976],{"class":36,"line":37},[34,110966,110967],{"class":59},"np.clip(action, ",[34,110969,113],{"class":112},[34,110971,102790],{"class":63},[34,110973,12899],{"class":59},[34,110975,102790],{"class":63},[34,110977,623],{"class":59},[14,110979,110980,110981,110984],{},"因为 XML 里 ",[31,110982,110983],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[584,110986,102095],{"id":102095},[25,110988,110989],{"className":27,"code":110850,"language":29,"meta":22,"style":22},[31,110990,110991,110999],{"__ignoreMap":22},[34,110992,110993,110995,110997],{"class":36,"line":37},[34,110994,32410],{"class":112},[34,110996,110381],{"class":2427},[34,110998,110384],{"class":59},[34,111000,111001,111003],{"class":36,"line":44},[34,111002,4554],{"class":112},[34,111004,110391],{"class":59},[14,111006,111007,111008,111011,111012,111015,111016,111019],{},"这段定义了一个函数，用来获取当前观测。",[31,111009,111010],{},"data.qpos.copy()"," 是位置数组副本，",[31,111013,111014],{},"data.qvel.copy()"," 是速度数组副本。",[31,111017,111018],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111021,111022],{},"在本章模型里：",[25,111024,111027],{"className":111025,"code":111026,"language":5651,"meta":22},[5649],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[31,111028,111026],{"__ignoreMap":22},[14,111030,111031],{},"所以返回的 obs 是：",[25,111033,111036],{"className":111034,"code":111035,"language":5651,"meta":22},[5649],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[31,111037,111035],{"__ignoreMap":22},[25,111039,111041],{"className":27,"code":111040,"language":29,"meta":22,"style":22},"def compute_reward(obs: np.ndarray) -> float:\n",[31,111042,111043],{"__ignoreMap":22},[34,111044,111045,111047,111049,111051,111053],{"class":36,"line":37},[34,111046,32410],{"class":112},[34,111048,110406],{"class":2427},[34,111050,110409],{"class":59},[34,111052,656],{"class":63},[34,111054,4203],{"class":59},[14,111056,111057,111058,111061],{},"这行定义奖励函数。输入是观测 ",[31,111059,111060],{},"obs","，输出是一个浮点数奖励。",[25,111063,111065],{"className":27,"code":111064,"language":29,"meta":22,"style":22},"cart_x = obs[0]\npole_angle = obs[1]\n",[31,111066,111067,111080],{"__ignoreMap":22},[34,111068,111069,111072,111074,111076,111078],{"class":36,"line":37},[34,111070,111071],{"class":59},"cart_x ",[34,111073,447],{"class":112},[34,111075,110423],{"class":59},[34,111077,319],{"class":63},[34,111079,73],{"class":59},[34,111081,111082,111085,111087,111089,111091],{"class":36,"line":44},[34,111083,111084],{"class":59},"pole_angle ",[34,111086,447],{"class":112},[34,111088,110423],{"class":59},[34,111090,64],{"class":63},[34,111092,73],{"class":59},[14,111094,111095,111096,111099,111100,111103],{},"数组索引从 0 开始。",[31,111097,111098],{},"obs[0]"," 是第一个元素，也就是小车位置。",[31,111101,111102],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[25,111105,111106],{"className":27,"code":110175,"language":29,"meta":22,"style":22},[31,111107,111108],{"__ignoreMap":22},[34,111109,111110,111112,111114,111116,111118,111120,111122,111124,111126,111128,111130,111132,111134,111136],{"class":36,"line":37},[34,111111,17510],{"class":112},[34,111113,110184],{"class":63},[34,111115,617],{"class":59},[34,111117,102790],{"class":63},[34,111119,52732],{"class":112},[34,111121,110193],{"class":63},[34,111123,6982],{"class":112},[34,111125,110198],{"class":59},[34,111127,1062],{"class":112},[34,111129,110198],{"class":59},[34,111131,113],{"class":112},[34,111133,110207],{"class":59},[34,111135,1062],{"class":112},[34,111137,110212],{"class":59},[14,111139,111140,111141,111144,111145,111148],{},"这行计算奖励。",[31,111142,111143],{},"cart_x * cart_x"," 是小车位置的平方，",[31,111146,111147],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[25,111150,111152],{"className":27,"code":111151,"language":29,"meta":22,"style":22},"data.qpos[1] = 0.1\n",[31,111153,111154],{"__ignoreMap":22},[34,111155,111156,111158,111160,111162,111164],{"class":36,"line":37},[34,111157,105086],{"class":59},[34,111159,64],{"class":63},[34,111161,4907],{"class":59},[34,111163,447],{"class":112},[34,111165,110527],{"class":63},[14,111167,111168,111169,111171,111172,111174],{},"手动设置杆子的初始角度。因为 ",[31,111170,105843],{}," 是小车位置，",[31,111173,105846],{}," 是杆子角度，所以这里改的是杆子。",[25,111176,111177],{"className":27,"code":104930,"language":29,"meta":22,"style":22},[31,111178,111179],{"__ignoreMap":22},[34,111180,111181],{"class":36,"line":37},[34,111182,104930],{"class":59},[14,111184,105889,111185,111187],{},[31,111186,104417],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[25,111189,111191],{"className":27,"code":111190,"language":29,"meta":22,"style":22},"total_reward = 0.0\n",[31,111192,111193],{"__ignoreMap":22},[34,111194,111195,111198,111200],{"class":36,"line":37},[34,111196,111197],{"class":59},"total_reward ",[34,111199,447],{"class":112},[34,111201,105148],{"class":63},[14,111203,111204],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[25,111206,111208],{"className":27,"code":111207,"language":29,"meta":22,"style":22},"for step in range(1000):\n",[31,111209,111210],{"__ignoreMap":22},[34,111211,111212,111214,111216,111218,111220,111222,111224],{"class":36,"line":37},[34,111213,3489],{"class":112},[34,111215,32079],{"class":59},[34,111217,26508],{"class":112},[34,111219,32906],{"class":63},[34,111221,617],{"class":59},[34,111223,6874],{"class":63},[34,111225,31249],{"class":59},[14,111227,111228,111229,111231],{},"循环 1000 步。",[31,111230,107521],{}," 是当前步数，从 0 到 999。",[25,111233,111235],{"className":27,"code":111234,"language":29,"meta":22,"style":22},"obs = get_observation(data)\n",[31,111236,111237],{"__ignoreMap":22},[34,111238,111239,111242,111244],{"class":36,"line":37},[34,111240,111241],{"class":59},"obs ",[34,111243,447],{"class":112},[34,111245,110574],{"class":59},[14,111247,111248,111249,28850],{},"读取当前状态，保存到 ",[31,111250,111060],{},[25,111252,111254],{"className":27,"code":111253,"language":29,"meta":22,"style":22},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[31,111255,111256,111268],{"__ignoreMap":22},[34,111257,111258,111260,111262,111264,111266],{"class":36,"line":37},[34,111259,111084],{"class":59},[34,111261,447],{"class":112},[34,111263,110423],{"class":59},[34,111265,64],{"class":63},[34,111267,73],{"class":59},[34,111269,111270,111273,111275,111277,111279],{"class":36,"line":44},[34,111271,111272],{"class":59},"pole_angular_velocity ",[34,111274,447],{"class":112},[34,111276,110423],{"class":59},[34,111278,309],{"class":63},[34,111280,73],{"class":59},[14,111282,111283,111284,111287,111288,28850],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[31,111285,111286],{},"obs[3]","？因为 obs 的顺序是 ",[31,111289,111290],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[25,111292,111294],{"className":27,"code":111293,"language":29,"meta":22,"style":22},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[31,111295,111296],{"__ignoreMap":22},[34,111297,111298,111300,111302,111304,111306,111308,111310,111312,111314],{"class":36,"line":37},[34,111299,107829],{"class":59},[34,111301,447],{"class":112},[34,111303,110614],{"class":63},[34,111305,6982],{"class":112},[34,111307,110207],{"class":59},[34,111309,1088],{"class":112},[34,111311,62328],{"class":63},[34,111313,6982],{"class":112},[34,111315,110627],{"class":59},[14,111317,111318,111319,101405,111321,111323],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[31,111320,105647],{},[31,111322,35791],{}," 是人为设置的系数，不是固定公式。",[25,111325,111327],{"className":27,"code":111326,"language":29,"meta":22,"style":22},"action = np.clip(action, -1.0, 1.0)\n",[31,111328,111329],{"__ignoreMap":22},[34,111330,111331,111333,111335,111337,111339,111341,111343,111345],{"class":36,"line":37},[34,111332,107829],{"class":59},[34,111334,447],{"class":112},[34,111336,107834],{"class":59},[34,111338,113],{"class":112},[34,111340,102790],{"class":63},[34,111342,12899],{"class":59},[34,111344,102790],{"class":63},[34,111346,623],{"class":59},[14,111348,111349],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[25,111351,111352],{"className":27,"code":110160,"language":29,"meta":22,"style":22},[31,111353,111354],{"__ignoreMap":22},[34,111355,111356,111358,111360,111362,111364],{"class":36,"line":37},[34,111357,106258],{"class":59},[34,111359,319],{"class":63},[34,111361,4907],{"class":59},[34,111363,447],{"class":112},[34,111365,107857],{"class":59},[14,111367,111368],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[25,111370,111371],{"className":27,"code":104892,"language":29,"meta":22,"style":22},[31,111372,111373],{"__ignoreMap":22},[34,111374,111375],{"class":36,"line":37},[34,111376,104892],{"class":59},[14,111378,111379,111380,111382],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[31,111381,106513],{}," 计算小车和杆子的下一刻状态。",[25,111384,111386],{"className":27,"code":111385,"language":29,"meta":22,"style":22},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[31,111387,111388,111397],{"__ignoreMap":22},[34,111389,111390,111393,111395],{"class":36,"line":37},[34,111391,111392],{"class":59},"reward ",[34,111394,447],{"class":112},[34,111396,110679],{"class":59},[34,111398,111399,111401,111403],{"class":36,"line":44},[34,111400,111197],{"class":59},[34,111402,9941],{"class":112},[34,111404,110689],{"class":59},[14,111406,111407,111408,111410,111411,111414,111415,28850],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[31,111409,9941],{}," 是简写，",[31,111412,111413],{},"total_reward += reward"," 等价于 ",[31,111416,111417],{},"total_reward = total_reward + reward",[25,111419,111421],{"className":27,"code":111420,"language":29,"meta":22,"style":22},"if step % 100 == 0:\n",[31,111422,111423],{"__ignoreMap":22},[34,111424,111425,111427,111429,111431,111433,111435,111437],{"class":36,"line":37},[34,111426,2002],{"class":112},[34,111428,32079],{"class":59},[34,111430,936],{"class":112},[34,111432,6218],{"class":63},[34,111434,101946],{"class":112},[34,111436,4557],{"class":63},[34,111438,4203],{"class":59},[14,111440,111441,111443,111444,111447],{},[31,111442,936],{}," 是取余数。",[31,111445,111446],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[25,111449,111451],{"className":27,"code":111450,"language":29,"meta":22,"style":22},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[31,111452,111453],{"__ignoreMap":22},[34,111454,111455,111457,111459,111461,111463,111465,111467,111469,111471,111473,111475,111477,111479,111481,111483,111485],{"class":36,"line":37},[34,111456,30878],{"class":63},[34,111458,617],{"class":59},[34,111460,110718],{"class":187},[34,111462,110721],{"class":59},[34,111464,110724],{"class":187},[34,111466,110727],{"class":59},[34,111468,309],{"class":63},[34,111470,110732],{"class":59},[34,111472,110735],{"class":187},[34,111474,12899],{"class":59},[34,111476,32481],{"class":63},[34,111478,617],{"class":59},[34,111480,656],{"class":63},[34,111482,110746],{"class":59},[34,111484,309],{"class":63},[34,111486,30960],{"class":59},[14,111488,111489,111490,111493,111494,111497],{},"打印当前步数、观测和动作。",[31,111491,111492],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[31,111495,111496],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[555,111499,102703],{"id":102702},[14,111501,111502],{},"观测向量:",[25,111504,111507],{"className":111505,"code":111506,"language":5651,"meta":22},[5649],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[31,111508,111506],{"__ignoreMap":22},[14,111510,111511],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111513,111514],{},"每隔 100 步会打印一次：",[25,111516,111519],{"className":111517,"code":111518,"language":5651,"meta":22},[5649],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[31,111520,111518],{"__ignoreMap":22},[14,111522,111523],{},"重点观察：",[567,111525,111526,111532,111537],{},[570,111527,111528,111531],{},[31,111529,111530],{},"pole_angle"," 是否越来越大。",[570,111533,111534,111536],{},[31,111535,110113],{}," 是否跑得太远。",[570,111538,111539,111540,83000,111542,28850],{},"action 是否经常被 clip 到 ",[31,111541,104302],{},[31,111543,64],{},[14,111545,111546],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[555,111548,102735],{"id":102734},[567,111550,111551,111557,111560,111566,111576,111582,111585],{},[570,111552,111553,111554,28850],{},"把初始角度改为 ",[31,111555,111556],{},"data.qpos[1] = 0.3",[570,111558,111559],{},"重新运行，观察控制是否变差。",[570,111561,111562,111563,111565],{},"把 actuator ",[31,111564,107454],{}," 改小。",[570,111567,111568,111569,111572,111573,28850],{},"打印 ",[31,111570,111571],{},"model.nq, model.nv, model.nu","，应为 ",[31,111574,111575],{},"2 2 1",[570,111577,111578,111579,111581],{},"把 reward 里的 ",[31,111580,111147],{}," 系数改大，观察总奖励变化。",[570,111583,111584],{},"把控制器改成反号，观察杆子是否更容易倒。",[570,111586,111587],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[555,111589,102840],{"id":102839},[584,111591,111592],{"id":111592},"杆子方向和预期不一致",[14,111594,102783,111595,111597,111598,111600],{},[31,111596,106626],{}," 和 capsule 的 ",[31,111599,103563],{},"，必要时用 viewer 可视化确认。",[584,111602,111603],{"id":111603},"控制器越控越倒",[14,111605,111606],{},"说明反馈符号可能反了，尝试:",[25,111608,111610],{"className":27,"code":111609,"language":29,"meta":22,"style":22},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[31,111611,111612],{"__ignoreMap":22},[34,111613,111614,111616,111618,111620,111622,111624,111626,111628,111630,111632],{"class":36,"line":37},[34,111615,107829],{"class":59},[34,111617,447],{"class":112},[34,111619,52732],{"class":112},[34,111621,105647],{"class":63},[34,111623,6982],{"class":112},[34,111625,110207],{"class":59},[34,111627,113],{"class":112},[34,111629,62328],{"class":63},[34,111631,6982],{"class":112},[34,111633,110627],{"class":59},[584,111635,111636],{"id":111636},"小车飞走",[14,111638,111639,111640,111642,111643,111646],{},"降低 ",[31,111641,107454],{}," 或缩小 ",[31,111644,111645],{},"action"," 的 clip 范围。",[584,111648,111650,111652],{"id":111649},"obs3-为什么是杆子角速度",[31,111651,111286],{}," 为什么是杆子角速度",[14,111654,111655],{},"因为这个模型里：",[25,111657,111660],{"className":111658,"code":111659,"language":5651,"meta":22},[5649],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[31,111661,111659],{"__ignoreMap":22},[14,111663,110134],{},[25,111665,111668],{"className":111666,"code":111667,"language":5651,"meta":22},[5649],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[31,111669,111667],{"__ignoreMap":22},[584,111671,111673],{"id":111672},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111675,111676],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[555,111678,102994],{"id":102993},[14,111680,111681],{},"一个控制任务通常包含：",[567,111683,111684,111687,111695,111700,111703],{},[570,111685,111686],{},"模型：Cartpole 的 body、joint、actuator。",[570,111688,111689,111690,822,111692,111694],{},"观测：从 ",[31,111691,104417],{},[31,111693,104747],{}," 里取状态。",[570,111696,111697,111698,28850],{},"动作：写入 ",[31,111699,101463],{},[570,111701,111702],{},"奖励：根据任务目标打分。",[570,111704,111705],{},"循环：obs -> action -> step -> reward。",[14,111707,111708],{},"这就是后面 Gymnasium 环境的基本骨架。",[532,111710,104673],{},{"title":22,"searchDepth":44,"depth":44,"links":111712},[111713,111714,111715,111720,111724,111725,111726,111734],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":111716},[111717,111718,111719],{"id":110087,"depth":50,"text":110088},{"id":110152,"depth":50,"text":110153},{"id":110168,"depth":50,"text":110169},{"id":101639,"depth":44,"text":101640,"children":111721},[111722,111723],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":111727},[111728,111729,111730,111731,111733],{"id":111592,"depth":50,"text":111592},{"id":111603,"depth":50,"text":111603},{"id":111636,"depth":50,"text":111636},{"id":111649,"depth":50,"text":111732},"obs[3] 为什么是杆子角速度",{"id":111672,"depth":50,"text":111673},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109823,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111741,"title":111742,"body":111743,"description":22,"extension":538,"meta":113757,"navigation":540,"path":113758,"seo":113759,"stem":113760,"__hash__":113761},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111744,"toc":113733},[111745,111748,111750,111753,111755,111772,111775,111778,111784,111787,111789,111791,111815,111817,111831,111833,111874,111876,111894,111896,111899,111905,111908,111936,111940,111946,111971,111974,112005,112012,112015,112018,112024,112027,112033,112036,112042,112046,112049,112074,112077,112079,112839,112841,112853,112855,112866,112868,112871,112888,112891,112893,112904,112907,112909,112955,112958,112971,112974,113056,113059,113061,113077,113087,113100,113103,113142,113152,113163,113173,113186,113189,113218,113221,113231,113234,113240,113257,113268,113270,113276,113293,113304,113325,113328,113340,113343,113364,113367,113375,113383,113400,113403,113472,113479,113487,113490,113503,113510,113512,113515,113521,113524,113527,113533,113539,113541,113581,113583,113589,113598,113601,113603,113623,113626,113629,113635,113639,113641,113668,113671,113674,113701,113707,113710,113713,113715,113718,113721,113727,113730],[10,111746,111742],{"id":111747},"_7控制任务reacher-机械臂到达目标",[555,111749,101034],{"id":101033},[14,111751,111752],{},"本章搭建一个二维两关节 reacher 任务。",[14,111754,104718],{},[567,111756,111757,111760,111763,111766,111769],{},[570,111758,111759],{},"两个 hinge joint",[570,111761,111762],{},"两个 motor actuator",[570,111764,111765],{},"site 作为末端点和目标点",[570,111767,111768],{},"根据末端和目标距离设计 reward",[570,111770,111771],{},"构造机械臂任务的基本形式",[14,111773,111774],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111776,111777],{},"Reacher 任务可以理解为：",[25,111779,111782],{"className":111780,"code":111781,"language":5651,"meta":22},[5649],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[31,111783,111781],{"__ignoreMap":22},[14,111785,111786],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[555,111788,101157],{"id":101156},[14,111790,101160],{},[25,111792,111793],{"className":24286,"code":104775,"language":24288,"meta":22,"style":22},[31,111794,111795],{"__ignoreMap":22},[34,111796,111797,111799,111801,111803,111805,111807,111809,111811,111813],{"class":36,"line":37},[34,111798,25041],{"class":2427},[34,111800,26780],{"class":187},[34,111802,24298],{"class":187},[34,111804,26865],{"class":63},[34,111806,104790],{"class":187},[34,111808,101185],{"class":187},[34,111810,102888],{"class":187},[34,111812,101201],{"class":187},[34,111814,104799],{"class":187},[14,111816,103206],{},[25,111818,111819],{"className":24286,"code":101306,"language":24288,"meta":22,"style":22},[31,111820,111821],{"__ignoreMap":22},[34,111822,111823,111825,111827,111829],{"class":36,"line":37},[34,111824,24295],{"class":2427},[34,111826,24298],{"class":187},[34,111828,101317],{"class":187},[34,111830,101320],{"class":187},[14,111832,103223],{},[25,111834,111836],{"className":24286,"code":111835,"language":24288,"meta":22,"style":22},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[31,111837,111838,111855,111864],{"__ignoreMap":22},[34,111839,111840,111842,111844,111846,111849,111851,111853],{"class":36,"line":37},[34,111841,30795],{"class":2427},[34,111843,29641],{"class":187},[34,111845,25580],{"class":63},[34,111847,111848],{"class":187}," mujoco-reacher",[34,111850,101362],{"class":187},[34,111852,101365],{"class":63},[34,111854,101368],{"class":63},[34,111856,111857,111859,111861],{"class":36,"line":44},[34,111858,30795],{"class":2427},[34,111860,101375],{"class":187},[34,111862,111863],{"class":187}," mujoco-reacher\n",[34,111865,111866,111868,111870,111872],{"class":36,"line":50},[34,111867,24295],{"class":2427},[34,111869,24298],{"class":187},[34,111871,101317],{"class":187},[34,111873,101320],{"class":187},[14,111875,101391],{},[567,111877,111878,111881,111884],{},[570,111879,111880],{},"本章使用低维状态，不使用图像输入。",[570,111882,111883],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[570,111885,111886,111887,822,111889,822,111891,111893],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[31,111888,104417],{},[31,111890,104747],{},[31,111892,104067],{}," 的方法一致。",[555,111895,101432],{"id":101431},[14,111897,111898],{},"Reacher 任务核心:",[25,111900,111903],{"className":111901,"code":111902,"language":5651,"meta":22},[5649],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[31,111904,111902],{"__ignoreMap":22},[14,111906,111907],{},"读取 site 世界坐标:",[25,111909,111911],{"className":27,"code":111910,"language":29,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[31,111912,111913,111926],{"__ignoreMap":22},[34,111914,111915,111917,111919,111921,111924],{"class":36,"line":37},[34,111916,104021],{"class":59},[34,111918,447],{"class":112},[34,111920,103792],{"class":59},[34,111922,111923],{"class":187},"\"tip\"",[34,111925,623],{"class":59},[34,111927,111928,111931,111933],{"class":36,"line":44},[34,111929,111930],{"class":59},"tip_pos ",[34,111932,447],{"class":112},[34,111934,111935],{"class":59}," data.site_xpos[site_id]\n",[584,111937,111939],{"id":111938},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111941,111942,111943,111945],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[31,111944,104417],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[25,111947,111949],{"className":27,"code":111948,"language":29,"meta":22,"style":22},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[31,111950,111951,111961],{"__ignoreMap":22},[34,111952,111953,111956,111958],{"class":36,"line":37},[34,111954,111955],{"class":59},"tip ",[34,111957,447],{"class":112},[34,111959,111960],{"class":59}," data.site_xpos[tip_site_id]\n",[34,111962,111963,111966,111968],{"class":36,"line":44},[34,111964,111965],{"class":59},"target ",[34,111967,447],{"class":112},[34,111969,111970],{"class":59}," data.site_xpos[target_site_id]\n",[14,111972,111973],{},"这样 reward 就很容易写：",[25,111975,111977],{"className":27,"code":111976,"language":29,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[31,111978,111979,111994],{"__ignoreMap":22},[34,111980,111981,111984,111986,111989,111991],{"class":36,"line":37},[34,111982,111983],{"class":59},"dist ",[34,111985,447],{"class":112},[34,111987,111988],{"class":59}," np.linalg.norm(tip ",[34,111990,113],{"class":112},[34,111992,111993],{"class":59}," target)\n",[34,111995,111996,111998,112000,112002],{"class":36,"line":44},[34,111997,111392],{"class":59},[34,111999,447],{"class":112},[34,112001,52732],{"class":112},[34,112003,112004],{"class":59},"dist\n",[14,112006,112007,112008,112011],{},"距离越小，",[31,112009,112010],{},"-dist"," 越接近 0，奖励越高。",[584,112013,112014],{"id":112014},"两关节机械臂的状态",[14,112016,112017],{},"这个模型有两个 hinge joint：",[25,112019,112022],{"className":112020,"code":112021,"language":5651,"meta":22},[5649],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[31,112023,112021],{"__ignoreMap":22},[14,112025,112026],{},"再加上末端和目标位置：",[25,112028,112031],{"className":112029,"code":112030,"language":5651,"meta":22},[5649],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[31,112032,112030],{"__ignoreMap":22},[14,112034,112035],{},"总维度：",[25,112037,112040],{"className":112038,"code":112039,"language":5651,"meta":22},[5649],"2 + 2 + 3 + 3 = 10\n",[31,112041,112039],{"__ignoreMap":22},[584,112043,112045],{"id":112044},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112047,112048],{},"本章把重力设为：",[25,112050,112052],{"className":53528,"code":112051,"language":53530,"meta":22,"style":22},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[31,112053,112054],{"__ignoreMap":22},[34,112055,112056,112058,112060,112062,112064,112066,112068,112070,112072],{"class":36,"line":37},[34,112057,1515],{"class":59},[34,112059,69627],{"class":51761},[34,112061,101581],{"class":2427},[34,112063,447],{"class":59},[34,112065,101586],{"class":187},[34,112067,101589],{"class":2427},[34,112069,447],{"class":59},[34,112071,104158],{"class":187},[34,112073,101531],{"class":59},[14,112075,112076],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[555,112078,101640],{"id":101639},[25,112080,112082],{"className":27,"code":112081,"language":29,"meta":22,"style":22},"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",[31,112083,112084,112090,112100,112104,112108,112116,112121,112126,112130,112134,112139,112144,112148,112153,112158,112163,112167,112172,112177,112182,112187,112191,112195,112199,112203,112207,112212,112217,112221,112225,112229,112233,112237,112252,112261,112273,112296,112303,112307,112311,112321,112335,112349,112356,112360,112364,112378,112390,112402,112415,112430,112447,112451,112455,112467,112479,112487,112495,112499,112515,112520,112533,112546,112561,112565,112600,112632,112636,112640,112649,112653,112669,112679,112690,112706,112722,112738,112754,112758,112776,112796,112815,112819,112823,112835],{"__ignoreMap":22},[34,112085,112086,112088],{"class":36,"line":37},[34,112087,30855],{"class":112},[34,112089,101688],{"class":59},[34,112091,112092,112094,112096,112098],{"class":36,"line":44},[34,112093,30855],{"class":112},[34,112095,31843],{"class":59},[34,112097,31846],{"class":112},[34,112099,31849],{"class":59},[34,112101,112102],{"class":36,"line":50},[34,112103,2864],{"emptyLinePlaceholder":540},[34,112105,112106],{"class":36,"line":56},[34,112107,2864],{"emptyLinePlaceholder":540},[34,112109,112110,112112,112114],{"class":36,"line":107},[34,112111,101701],{"class":63},[34,112113,14028],{"class":112},[34,112115,101706],{"class":187},[34,112117,112118],{"class":36,"line":196},[34,112119,112120],{"class":187},"\u003Cmujoco model=\"two_link_reacher\">\n",[34,112122,112123],{"class":36,"line":202},[34,112124,112125],{"class":187},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,112127,112128],{"class":36,"line":207},[34,112129,2864],{"emptyLinePlaceholder":540},[34,112131,112132],{"class":36,"line":222},[34,112133,101725],{"class":187},[34,112135,112136],{"class":36,"line":227},[34,112137,112138],{"class":187},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[34,112140,112141],{"class":36,"line":232},[34,112142,112143],{"class":187},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[34,112145,112146],{"class":36,"line":238},[34,112147,2864],{"emptyLinePlaceholder":540},[34,112149,112150],{"class":36,"line":244},[34,112151,112152],{"class":187},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[34,112154,112155],{"class":36,"line":250},[34,112156,112157],{"class":187},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,112159,112160],{"class":36,"line":256},[34,112161,112162],{"class":187},"      \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",[34,112164,112165],{"class":36,"line":261},[34,112166,2864],{"emptyLinePlaceholder":540},[34,112168,112169],{"class":36,"line":267},[34,112170,112171],{"class":187},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[34,112173,112174],{"class":36,"line":2138},[34,112175,112176],{"class":187},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,112178,112179],{"class":36,"line":2143},[34,112180,112181],{"class":187},"        \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",[34,112183,112184],{"class":36,"line":2157},[34,112185,112186],{"class":187},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[34,112188,112189],{"class":36,"line":2162},[34,112190,106825],{"class":187},[34,112192,112193],{"class":36,"line":2191},[34,112194,101754],{"class":187},[34,112196,112197],{"class":36,"line":2196},[34,112198,101759],{"class":187},[34,112200,112201],{"class":36,"line":2213},[34,112202,2864],{"emptyLinePlaceholder":540},[34,112204,112205],{"class":36,"line":2218},[34,112206,106842],{"class":187},[34,112208,112209],{"class":36,"line":2223},[34,112210,112211],{"class":187},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,112213,112214],{"class":36,"line":2228},[34,112215,112216],{"class":187},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,112218,112219],{"class":36,"line":2242},[34,112220,106852],{"class":187},[34,112222,112223],{"class":36,"line":2247},[34,112224,101764],{"class":187},[34,112226,112227],{"class":36,"line":3041},[34,112228,96157],{"class":187},[34,112230,112231],{"class":36,"line":3055},[34,112232,2864],{"emptyLinePlaceholder":540},[34,112234,112235],{"class":36,"line":3063},[34,112236,2864],{"emptyLinePlaceholder":540},[34,112238,112239,112241,112244,112247,112249],{"class":36,"line":3068},[34,112240,32410],{"class":112},[34,112242,112243],{"class":2427}," site_position",[34,112245,112246],{"class":59},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[34,112248,1774],{"class":63},[34,112250,112251],{"class":59},") -> np.ndarray:\n",[34,112253,112254,112256,112258],{"class":36,"line":3074},[34,112255,103787],{"class":59},[34,112257,447],{"class":112},[34,112259,112260],{"class":59}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,112262,112263,112265,112267,112269,112271],{"class":36,"line":3080},[34,112264,3565],{"class":112},[34,112266,103836],{"class":59},[34,112268,1515],{"class":112},[34,112270,4557],{"class":63},[34,112272,4203],{"class":59},[34,112274,112275,112277,112279,112281,112283,112286,112288,112290,112292,112294],{"class":36,"line":3085},[34,112276,103819],{"class":112},[34,112278,103822],{"class":63},[34,112280,617],{"class":59},[34,112282,667],{"class":112},[34,112284,112285],{"class":187},"\"site not found: ",[34,112287,1501],{"class":63},[34,112289,80271],{"class":59},[34,112291,1550],{"class":63},[34,112293,860],{"class":187},[34,112295,623],{"class":59},[34,112297,112298,112300],{"class":36,"line":8412},[34,112299,4554],{"class":112},[34,112301,112302],{"class":59}," data.site_xpos[site_id].copy()\n",[34,112304,112305],{"class":36,"line":8436},[34,112306,2864],{"emptyLinePlaceholder":540},[34,112308,112309],{"class":36,"line":8441},[34,112310,2864],{"emptyLinePlaceholder":540},[34,112312,112313,112315,112318],{"class":36,"line":8447},[34,112314,32410],{"class":112},[34,112316,112317],{"class":2427}," get_obs",[34,112319,112320],{"class":59},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,112322,112323,112326,112328,112331,112333],{"class":36,"line":8474},[34,112324,112325],{"class":59},"    tip ",[34,112327,447],{"class":112},[34,112329,112330],{"class":59}," site_position(model, data, ",[34,112332,111923],{"class":187},[34,112334,623],{"class":59},[34,112336,112337,112340,112342,112344,112347],{"class":36,"line":8479},[34,112338,112339],{"class":59},"    target ",[34,112341,447],{"class":112},[34,112343,112330],{"class":59},[34,112345,112346],{"class":187},"\"target\"",[34,112348,623],{"class":59},[34,112350,112351,112353],{"class":36,"line":8485},[34,112352,4554],{"class":112},[34,112354,112355],{"class":59}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,112357,112358],{"class":36,"line":8497},[34,112359,2864],{"emptyLinePlaceholder":540},[34,112361,112362],{"class":36,"line":8509},[34,112363,2864],{"emptyLinePlaceholder":540},[34,112365,112366,112368,112371,112374,112376],{"class":36,"line":8521},[34,112367,32410],{"class":112},[34,112369,112370],{"class":2427}," reward",[34,112372,112373],{"class":59},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[34,112375,656],{"class":63},[34,112377,4203],{"class":59},[34,112379,112380,112382,112384,112386,112388],{"class":36,"line":10180},[34,112381,112325],{"class":59},[34,112383,447],{"class":112},[34,112385,112330],{"class":59},[34,112387,111923],{"class":187},[34,112389,623],{"class":59},[34,112391,112392,112394,112396,112398,112400],{"class":36,"line":10205},[34,112393,112339],{"class":59},[34,112395,447],{"class":112},[34,112397,112330],{"class":59},[34,112399,112346],{"class":187},[34,112401,623],{"class":59},[34,112403,112404,112407,112409,112411,112413],{"class":36,"line":10228},[34,112405,112406],{"class":59},"    dist ",[34,112408,447],{"class":112},[34,112410,111988],{"class":59},[34,112412,113],{"class":112},[34,112414,111993],{"class":59},[34,112416,112417,112420,112422,112425,112427],{"class":36,"line":10252},[34,112418,112419],{"class":59},"    control_cost ",[34,112421,447],{"class":112},[34,112423,112424],{"class":63}," 0.01",[34,112426,6982],{"class":112},[34,112428,112429],{"class":59}," np.sum(np.square(data.ctrl))\n",[34,112431,112432,112434,112436,112438,112440,112442,112444],{"class":36,"line":10257},[34,112433,4554],{"class":112},[34,112435,110184],{"class":63},[34,112437,617],{"class":59},[34,112439,113],{"class":112},[34,112441,111983],{"class":59},[34,112443,113],{"class":112},[34,112445,112446],{"class":59}," control_cost)\n",[34,112448,112449],{"class":36,"line":10262},[34,112450,2864],{"emptyLinePlaceholder":540},[34,112452,112453],{"class":36,"line":10267},[34,112454,2864],{"emptyLinePlaceholder":540},[34,112456,112457,112459,112461,112463,112465],{"class":36,"line":10276},[34,112458,32410],{"class":112},[34,112460,2437],{"class":2427},[34,112462,101785],{"class":59},[34,112464,96145],{"class":63},[34,112466,4203],{"class":59},[34,112468,112469,112471,112473,112475,112477],{"class":36,"line":10281},[34,112470,101794],{"class":59},[34,112472,447],{"class":112},[34,112474,101799],{"class":59},[34,112476,101701],{"class":63},[34,112478,623],{"class":59},[34,112480,112481,112483,112485],{"class":36,"line":10287},[34,112482,101808],{"class":59},[34,112484,447],{"class":112},[34,112486,101813],{"class":59},[34,112488,112489,112491,112493],{"class":36,"line":10308},[34,112490,110540],{"class":59},[34,112492,447],{"class":112},[34,112494,105148],{"class":63},[34,112496,112497],{"class":36,"line":10314},[34,112498,2864],{"emptyLinePlaceholder":540},[34,112500,112501,112503,112505,112507,112509,112511,112513],{"class":36,"line":10328},[34,112502,3665],{"class":112},[34,112504,32079],{"class":59},[34,112506,26508],{"class":112},[34,112508,32906],{"class":63},[34,112510,617],{"class":59},[34,112512,65535],{"class":63},[34,112514,31249],{"class":59},[34,112516,112517],{"class":36,"line":10334},[34,112518,112519],{"class":59},"        mujoco.mj_forward(model, data)\n",[34,112521,112522,112525,112527,112529,112531],{"class":36,"line":10361},[34,112523,112524],{"class":59},"        tip ",[34,112526,447],{"class":112},[34,112528,112330],{"class":59},[34,112530,111923],{"class":187},[34,112532,623],{"class":59},[34,112534,112535,112538,112540,112542,112544],{"class":36,"line":10370},[34,112536,112537],{"class":59},"        target ",[34,112539,447],{"class":112},[34,112541,112330],{"class":59},[34,112543,112346],{"class":187},[34,112545,623],{"class":59},[34,112547,112548,112551,112553,112556,112558],{"class":36,"line":10376},[34,112549,112550],{"class":59},"        error ",[34,112552,447],{"class":112},[34,112554,112555],{"class":59}," target ",[34,112557,113],{"class":112},[34,112559,112560],{"class":59}," tip\n",[34,112562,112563],{"class":36,"line":10384},[34,112564,2864],{"emptyLinePlaceholder":540},[34,112566,112567,112569,112571,112573,112575,112578,112580,112582,112585,112587,112590,112592,112594,112596,112598],{"class":36,"line":10389},[34,112568,107004],{"class":59},[34,112570,319],{"class":63},[34,112572,4907],{"class":59},[34,112574,447],{"class":112},[34,112576,112577],{"class":59}," np.clip(",[34,112579,105647],{"class":63},[34,112581,6982],{"class":112},[34,112583,112584],{"class":59}," error[",[34,112586,70],{"class":63},[34,112588,112589],{"class":59},"], ",[34,112591,113],{"class":112},[34,112593,102790],{"class":63},[34,112595,12899],{"class":59},[34,112597,102790],{"class":63},[34,112599,623],{"class":59},[34,112601,112602,112604,112606,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626,112628,112630],{"class":36,"line":17068},[34,112603,107004],{"class":59},[34,112605,64],{"class":63},[34,112607,4907],{"class":59},[34,112609,447],{"class":112},[34,112611,112577],{"class":59},[34,112613,105647],{"class":63},[34,112615,6982],{"class":112},[34,112617,112584],{"class":59},[34,112619,319],{"class":63},[34,112621,112589],{"class":59},[34,112623,113],{"class":112},[34,112625,102790],{"class":63},[34,112627,12899],{"class":59},[34,112629,102790],{"class":63},[34,112631,623],{"class":59},[34,112633,112634],{"class":36,"line":17074},[34,112635,2864],{"emptyLinePlaceholder":540},[34,112637,112638],{"class":36,"line":17097},[34,112639,101903],{"class":59},[34,112641,112642,112644,112646],{"class":36,"line":17103},[34,112643,110684],{"class":59},[34,112645,9941],{"class":112},[34,112647,112648],{"class":59}," reward(model, data)\n",[34,112650,112651],{"class":36,"line":17126},[34,112652,2864],{"emptyLinePlaceholder":540},[34,112654,112655,112657,112659,112661,112663,112665,112667],{"class":36,"line":17140},[34,112656,2961],{"class":112},[34,112658,32079],{"class":59},[34,112660,936],{"class":112},[34,112662,6218],{"class":63},[34,112664,101946],{"class":112},[34,112666,4557],{"class":63},[34,112668,4203],{"class":59},[34,112670,112671,112674,112676],{"class":36,"line":17160},[34,112672,112673],{"class":59},"            obs ",[34,112675,447],{"class":112},[34,112677,112678],{"class":59}," get_obs(model, data)\n",[34,112680,112681,112683,112685,112687],{"class":36,"line":17166},[34,112682,35112],{"class":63},[34,112684,617],{"class":59},[34,112686,110718],{"class":187},[34,112688,112689],{"class":59},", step)\n",[34,112691,112692,112694,112696,112699,112702,112704],{"class":36,"line":17177},[34,112693,35112],{"class":63},[34,112695,617],{"class":59},[34,112697,112698],{"class":187},"\"  tip:\"",[34,112700,112701],{"class":59},", np.round(tip, ",[34,112703,309],{"class":63},[34,112705,30960],{"class":59},[34,112707,112708,112710,112712,112715,112718,112720],{"class":36,"line":17200},[34,112709,35112],{"class":63},[34,112711,617],{"class":59},[34,112713,112714],{"class":187},"\"  target:\"",[34,112716,112717],{"class":59},", np.round(target, ",[34,112719,309],{"class":63},[34,112721,30960],{"class":59},[34,112723,112724,112726,112728,112731,112734,112736],{"class":36,"line":17222},[34,112725,35112],{"class":63},[34,112727,617],{"class":59},[34,112729,112730],{"class":187},"\"  ctrl:\"",[34,112732,112733],{"class":59},", np.round(data.ctrl.copy(), ",[34,112735,309],{"class":63},[34,112737,30960],{"class":59},[34,112739,112740,112742,112744,112747,112750,112752],{"class":36,"line":17227},[34,112741,35112],{"class":63},[34,112743,617],{"class":59},[34,112745,112746],{"class":187},"\"  obs_dim:\"",[34,112748,112749],{"class":59},", obs.shape[",[34,112751,319],{"class":63},[34,112753,5121],{"class":59},[34,112755,112756],{"class":36,"line":17233},[34,112757,2864],{"emptyLinePlaceholder":540},[34,112759,112760,112762,112764,112766,112768,112770,112772,112774],{"class":36,"line":17247},[34,112761,31762],{"class":63},[34,112763,617],{"class":59},[34,112765,110763],{"class":187},[34,112767,12899],{"class":59},[34,112769,32481],{"class":63},[34,112771,110770],{"class":59},[34,112773,309],{"class":63},[34,112775,30960],{"class":59},[34,112777,112778,112780,112782,112785,112788,112790,112792,112794],{"class":36,"line":17260},[34,112779,31762],{"class":63},[34,112781,617],{"class":59},[34,112783,112784],{"class":187},"\"final tip:\"",[34,112786,112787],{"class":59},", np.round(site_position(model, data, ",[34,112789,111923],{"class":187},[34,112791,110732],{"class":59},[34,112793,309],{"class":63},[34,112795,30960],{"class":59},[34,112797,112798,112800,112802,112805,112807,112809,112811,112813],{"class":36,"line":17265},[34,112799,31762],{"class":63},[34,112801,617],{"class":59},[34,112803,112804],{"class":187},"\"target:\"",[34,112806,112787],{"class":59},[34,112808,112346],{"class":187},[34,112810,110732],{"class":59},[34,112812,309],{"class":63},[34,112814,30960],{"class":59},[34,112816,112817],{"class":36,"line":17279},[34,112818,2864],{"emptyLinePlaceholder":540},[34,112820,112821],{"class":36,"line":17284},[34,112822,2864],{"emptyLinePlaceholder":540},[34,112824,112825,112827,112829,112831,112833],{"class":36,"line":17290},[34,112826,2002],{"class":112},[34,112828,31683],{"class":63},[34,112830,101946],{"class":112},[34,112832,101949],{"class":187},[34,112834,4203],{"class":59},[34,112836,112837],{"class":36,"line":17295},[34,112838,101956],{"class":59},[14,112840,103957],{},[25,112842,112844],{"className":24286,"code":112843,"language":24288,"meta":22,"style":22},"touch ch7_reacher.py\n",[31,112845,112846],{"__ignoreMap":22},[34,112847,112848,112850],{"class":36,"line":37},[34,112849,101670],{"class":2427},[34,112851,112852],{"class":187}," ch7_reacher.py\n",[14,112854,110831],{},[25,112856,112858],{"className":24286,"code":112857,"language":24288,"meta":22,"style":22},"python ch7_reacher.py\n",[31,112859,112860],{"__ignoreMap":22},[34,112861,112862,112864],{"class":36,"line":37},[34,112863,29],{"class":2427},[34,112865,112852],{"class":187},[584,112867,101959],{"id":101959},[14,112869,112870],{},"读取 site 坐标：",[25,112872,112874],{"className":27,"code":112873,"language":29,"meta":22,"style":22},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[31,112875,112876],{"__ignoreMap":22},[34,112877,112878,112880,112882,112884,112886],{"class":36,"line":37},[34,112879,32410],{"class":112},[34,112881,112243],{"class":2427},[34,112883,112246],{"class":59},[34,112885,1774],{"class":63},[34,112887,112251],{"class":59},[14,112889,112890],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112892,110847],{},[25,112894,112896],{"className":27,"code":112895,"language":29,"meta":22,"style":22},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[31,112897,112898],{"__ignoreMap":22},[34,112899,112900,112902],{"class":36,"line":37},[34,112901,17510],{"class":112},[34,112903,112355],{"class":59},[14,112905,112906],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112908,110172],{},[25,112910,112912],{"className":27,"code":112911,"language":29,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[31,112913,112914,112926,112939],{"__ignoreMap":22},[34,112915,112916,112918,112920,112922,112924],{"class":36,"line":37},[34,112917,111983],{"class":59},[34,112919,447],{"class":112},[34,112921,111988],{"class":59},[34,112923,113],{"class":112},[34,112925,111993],{"class":59},[34,112927,112928,112931,112933,112935,112937],{"class":36,"line":44},[34,112929,112930],{"class":59},"control_cost ",[34,112932,447],{"class":112},[34,112934,112424],{"class":63},[34,112936,6982],{"class":112},[34,112938,112429],{"class":59},[34,112940,112941,112943,112945,112947,112949,112951,112953],{"class":36,"line":50},[34,112942,17510],{"class":112},[34,112944,110184],{"class":63},[34,112946,617],{"class":59},[34,112948,113],{"class":112},[34,112950,111983],{"class":59},[34,112952,113],{"class":112},[34,112954,112446],{"class":59},[14,112956,112957],{},"奖励由两部分组成：",[567,112959,112960,112965],{},[570,112961,112962,112964],{},[31,112963,112010],{},"：末端离目标越远，奖励越低。",[570,112966,112967,112970],{},[31,112968,112969],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112972,112973],{},"简单控制器：",[25,112975,112977],{"className":27,"code":112976,"language":29,"meta":22,"style":22},"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",[31,112978,112979,112992,113024],{"__ignoreMap":22},[34,112980,112981,112984,112986,112988,112990],{"class":36,"line":37},[34,112982,112983],{"class":59},"error ",[34,112985,447],{"class":112},[34,112987,112555],{"class":59},[34,112989,113],{"class":112},[34,112991,112560],{"class":59},[34,112993,112994,112996,112998,113000,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022],{"class":36,"line":44},[34,112995,106258],{"class":59},[34,112997,319],{"class":63},[34,112999,4907],{"class":59},[34,113001,447],{"class":112},[34,113003,112577],{"class":59},[34,113005,105647],{"class":63},[34,113007,6982],{"class":112},[34,113009,112584],{"class":59},[34,113011,70],{"class":63},[34,113013,112589],{"class":59},[34,113015,113],{"class":112},[34,113017,102790],{"class":63},[34,113019,12899],{"class":59},[34,113021,102790],{"class":63},[34,113023,623],{"class":59},[34,113025,113026,113028,113030,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054],{"class":36,"line":50},[34,113027,106258],{"class":59},[34,113029,64],{"class":63},[34,113031,4907],{"class":59},[34,113033,447],{"class":112},[34,113035,112577],{"class":59},[34,113037,105647],{"class":63},[34,113039,6982],{"class":112},[34,113041,112584],{"class":59},[34,113043,319],{"class":63},[34,113045,112589],{"class":59},[34,113047,113],{"class":112},[34,113049,102790],{"class":63},[34,113051,12899],{"class":59},[34,113053,102790],{"class":63},[34,113055,623],{"class":59},[14,113057,113058],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[584,113060,102095],{"id":102095},[25,113062,113063],{"className":27,"code":112873,"language":29,"meta":22,"style":22},[31,113064,113065],{"__ignoreMap":22},[34,113066,113067,113069,113071,113073,113075],{"class":36,"line":37},[34,113068,32410],{"class":112},[34,113070,112243],{"class":2427},[34,113072,112246],{"class":59},[34,113074,1774],{"class":63},[34,113076,112251],{"class":59},[14,113078,113079,113080,113082,113083,83000,113085,28850],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[31,113081,80271],{}," 是 site 的名字，比如 ",[31,113084,111923],{},[31,113086,112346],{},[25,113088,113090],{"className":27,"code":113089,"language":29,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[31,113091,113092],{"__ignoreMap":22},[34,113093,113094,113096,113098],{"class":36,"line":37},[34,113095,104021],{"class":59},[34,113097,447],{"class":112},[34,113099,112260],{"class":59},[14,113101,113102],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[25,113104,113106],{"className":27,"code":113105,"language":29,"meta":22,"style":22},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[31,113107,113108,113120],{"__ignoreMap":22},[34,113109,113110,113112,113114,113116,113118],{"class":36,"line":37},[34,113111,2002],{"class":112},[34,113113,103836],{"class":59},[34,113115,1515],{"class":112},[34,113117,4557],{"class":63},[34,113119,4203],{"class":59},[34,113121,113122,113124,113126,113128,113130,113132,113134,113136,113138,113140],{"class":36,"line":44},[34,113123,104282],{"class":112},[34,113125,103822],{"class":63},[34,113127,617],{"class":59},[34,113129,667],{"class":112},[34,113131,112285],{"class":187},[34,113133,1501],{"class":63},[34,113135,80271],{"class":59},[34,113137,1550],{"class":63},[34,113139,860],{"class":187},[34,113141,623],{"class":59},[14,113143,113144,113145,113148,113149,113151],{},"如果 site 没找到，就主动报错。",[31,113146,113147],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[31,113150,80271],{}," 的值放进字符串里。",[25,113153,113155],{"className":27,"code":113154,"language":29,"meta":22,"style":22},"return data.site_xpos[site_id].copy()\n",[31,113156,113157],{"__ignoreMap":22},[34,113158,113159,113161],{"class":36,"line":37},[34,113160,17510],{"class":112},[34,113162,112302],{"class":59},[14,113164,113165,113166,113168,113169,113172],{},"返回这个 site 的世界坐标。",[31,113167,104067],{}," 里的每一行都是一个 site 的 ",[31,113170,113171],{},"(x, y, z)"," 坐标。",[25,113174,113176],{"className":27,"code":113175,"language":29,"meta":22,"style":22},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[31,113177,113178],{"__ignoreMap":22},[34,113179,113180,113182,113184],{"class":36,"line":37},[34,113181,32410],{"class":112},[34,113183,112317],{"class":2427},[34,113185,112320],{"class":59},[14,113187,113188],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[25,113190,113192],{"className":27,"code":113191,"language":29,"meta":22,"style":22},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[31,113193,113194,113206],{"__ignoreMap":22},[34,113195,113196,113198,113200,113202,113204],{"class":36,"line":37},[34,113197,111955],{"class":59},[34,113199,447],{"class":112},[34,113201,112330],{"class":59},[34,113203,111923],{"class":187},[34,113205,623],{"class":59},[34,113207,113208,113210,113212,113214,113216],{"class":36,"line":44},[34,113209,111965],{"class":59},[34,113211,447],{"class":112},[34,113213,112330],{"class":59},[34,113215,112346],{"class":187},[34,113217,623],{"class":59},[14,113219,113220],{},"分别读取末端点和目标点的世界坐标。",[25,113222,113223],{"className":27,"code":112895,"language":29,"meta":22,"style":22},[31,113224,113225],{"__ignoreMap":22},[34,113226,113227,113229],{"class":36,"line":37},[34,113228,17510],{"class":112},[34,113230,112355],{"class":59},[14,113232,113233],{},"把四部分拼成一个观测数组：",[25,113235,113238],{"className":113236,"code":113237,"language":5651,"meta":22},[5649],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[31,113239,113237],{"__ignoreMap":22},[25,113241,113243],{"className":27,"code":113242,"language":29,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\n",[31,113244,113245],{"__ignoreMap":22},[34,113246,113247,113249,113251,113253,113255],{"class":36,"line":37},[34,113248,111983],{"class":59},[34,113250,447],{"class":112},[34,113252,111988],{"class":59},[34,113254,113],{"class":112},[34,113256,111993],{"class":59},[14,113258,113259,113260,113263,113264,113267],{},"计算 tip 到 target 的距离。",[31,113261,113262],{},"tip - target"," 得到一个三维向量，",[31,113265,113266],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113269,15097],{},[25,113271,113274],{"className":113272,"code":113273,"language":5651,"meta":22},[5649],"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",[31,113275,113273],{"__ignoreMap":22},[25,113277,113279],{"className":27,"code":113278,"language":29,"meta":22,"style":22},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[31,113280,113281],{"__ignoreMap":22},[34,113282,113283,113285,113287,113289,113291],{"class":36,"line":37},[34,113284,112930],{"class":59},[34,113286,447],{"class":112},[34,113288,112424],{"class":63},[34,113290,6982],{"class":112},[34,113292,112429],{"class":59},[14,113294,113295,113296,113299,113300,113303],{},"计算动作惩罚。",[31,113297,113298],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[31,113301,113302],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[25,113305,113307],{"className":27,"code":113306,"language":29,"meta":22,"style":22},"return float(-dist - control_cost)\n",[31,113308,113309],{"__ignoreMap":22},[34,113310,113311,113313,113315,113317,113319,113321,113323],{"class":36,"line":37},[34,113312,17510],{"class":112},[34,113314,110184],{"class":63},[34,113316,617],{"class":59},[34,113318,113],{"class":112},[34,113320,111983],{"class":59},[34,113322,113],{"class":112},[34,113324,112446],{"class":59},[14,113326,113327],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[25,113329,113330],{"className":27,"code":111190,"language":29,"meta":22,"style":22},[31,113331,113332],{"__ignoreMap":22},[34,113333,113334,113336,113338],{"class":36,"line":37},[34,113335,111197],{"class":59},[34,113337,447],{"class":112},[34,113339,105148],{"class":63},[14,113341,113342],{},"累计奖励变量，记录整个运行过程的总分。",[25,113344,113346],{"className":27,"code":113345,"language":29,"meta":22,"style":22},"for step in range(500):\n",[31,113347,113348],{"__ignoreMap":22},[34,113349,113350,113352,113354,113356,113358,113360,113362],{"class":36,"line":37},[34,113351,3489],{"class":112},[34,113353,32079],{"class":59},[34,113355,26508],{"class":112},[34,113357,32906],{"class":63},[34,113359,617],{"class":59},[34,113361,65535],{"class":63},[34,113363,31249],{"class":59},[14,113365,113366],{},"运行 500 个控制步。",[25,113368,113369],{"className":27,"code":104930,"language":29,"meta":22,"style":22},[31,113370,113371],{"__ignoreMap":22},[34,113372,113373],{"class":36,"line":37},[34,113374,104930],{"class":59},[14,113376,113377,113378,101405,113380,113382],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[31,113379,103618],{},[31,113381,103621],{}," 是当前状态下的坐标。",[25,113384,113386],{"className":27,"code":113385,"language":29,"meta":22,"style":22},"error = target - tip\n",[31,113387,113388],{"__ignoreMap":22},[34,113389,113390,113392,113394,113396,113398],{"class":36,"line":37},[34,113391,112983],{"class":59},[34,113393,447],{"class":112},[34,113395,112555],{"class":59},[34,113397,113],{"class":112},[34,113399,112560],{"class":59},[14,113401,113402],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[25,113404,113406],{"className":27,"code":113405,"language":29,"meta":22,"style":22},"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",[31,113407,113408,113440],{"__ignoreMap":22},[34,113409,113410,113412,113414,113416,113418,113420,113422,113424,113426,113428,113430,113432,113434,113436,113438],{"class":36,"line":37},[34,113411,106258],{"class":59},[34,113413,319],{"class":63},[34,113415,4907],{"class":59},[34,113417,447],{"class":112},[34,113419,112577],{"class":59},[34,113421,105647],{"class":63},[34,113423,6982],{"class":112},[34,113425,112584],{"class":59},[34,113427,70],{"class":63},[34,113429,112589],{"class":59},[34,113431,113],{"class":112},[34,113433,102790],{"class":63},[34,113435,12899],{"class":59},[34,113437,102790],{"class":63},[34,113439,623],{"class":59},[34,113441,113442,113444,113446,113448,113450,113452,113454,113456,113458,113460,113462,113464,113466,113468,113470],{"class":36,"line":44},[34,113443,106258],{"class":59},[34,113445,64],{"class":63},[34,113447,4907],{"class":59},[34,113449,447],{"class":112},[34,113451,112577],{"class":59},[34,113453,105647],{"class":63},[34,113455,6982],{"class":112},[34,113457,112584],{"class":59},[34,113459,319],{"class":63},[34,113461,112589],{"class":59},[34,113463,113],{"class":112},[34,113465,102790],{"class":63},[34,113467,12899],{"class":59},[34,113469,102790],{"class":63},[34,113471,623],{"class":59},[14,113473,113474,113475,113478],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[31,113476,113477],{},"error -> ctrl -> step"," 的流程。",[25,113480,113481],{"className":27,"code":104892,"language":29,"meta":22,"style":22},[31,113482,113483],{"__ignoreMap":22},[34,113484,113485],{"class":36,"line":37},[34,113486,104892],{"class":59},[14,113488,113489],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[25,113491,113493],{"className":27,"code":113492,"language":29,"meta":22,"style":22},"obs = get_obs(model, data)\n",[31,113494,113495],{"__ignoreMap":22},[34,113496,113497,113499,113501],{"class":36,"line":37},[34,113498,111241],{"class":59},[34,113500,447],{"class":112},[34,113502,112678],{"class":59},[14,113504,113505,113506,113509],{},"读取最新观测。后面打印 ",[31,113507,113508],{},"obs.shape[0]","，用来确认观测维度是 10。",[555,113511,102703],{"id":102702},[14,113513,113514],{},"观测维度为:",[25,113516,113519],{"className":113517,"code":113518,"language":5651,"meta":22},[5649],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[31,113520,113518],{"__ignoreMap":22},[14,113522,113523],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113525,113526],{},"程序每 100 步打印：",[25,113528,113531],{"className":113529,"code":113530,"language":5651,"meta":22},[5649],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[31,113532,113530],{"__ignoreMap":22},[14,113534,113535,113536,113538],{},"如果控制有效，你应该看到最终 ",[31,113537,103618],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[555,113540,102735],{"id":102734},[567,113542,113543,113546,113549,113555,113561,113568,113578],{},[570,113544,113545],{},"修改目标点位置。",[570,113547,113548],{},"重新运行，观察最终 tip 是否变化。",[570,113550,113551,113552,113554],{},"把 gravity 改成 ",[31,113553,102976],{},"，观察控制是否变差。",[570,113556,111568,113557,111572,113559,28850],{},[31,113558,102545],{},[31,113560,70],{},[570,113562,102798,113563,102801,113565,113567],{},[31,113564,110983],{},[31,113566,107694],{},"，观察机械臂是否更难移动。",[570,113569,102798,113570,82991,113572,102801,113574,113577],{},[31,113571,103621],{},[31,113573,104533],{},[31,113575,113576],{},"0.2 0 0.6","，观察 reward 和 final tip。",[570,113579,113580],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[555,113582,102840],{"id":102839},[584,113584,113586],{"id":113585},"site-not-found",[31,113587,113588],{},"site not found",[14,113590,113591,113592,101405,113595,28850],{},"检查 XML 中是否有 ",[31,113593,113594],{},"site name=\"tip\"",[31,113596,113597],{},"site name=\"target\"",[584,113599,113600],{"id":113600},"机械臂完全不动",[14,113602,102910],{},[567,113604,113605,113610,113613,113618],{},[570,113606,113607,113609],{},[31,113608,102545],{}," 是否为 2",[570,113611,113612],{},"actuator 是否引用正确 joint",[570,113614,113615,113617],{},[31,113616,101463],{}," 是否被赋值",[570,113619,113620,113621],{},"是否执行了 ",[31,113622,101072],{},[584,113624,113625],{"id":113625},"控制效果不好",[14,113627,113628],{},"正常。本章重点不是控制器最优，而是任务结构:",[25,113630,113633],{"className":113631,"code":113632,"language":5651,"meta":22},[5649],"obs → action → mj_step → reward → next_obs\n",[31,113634,113632],{"__ignoreMap":22},[584,113636,113638],{"id":113637},"tip-坐标不变化","tip 坐标不变化",[14,113640,102962],{},[567,113642,113643,113648,113656,113665],{},[570,113644,113645,113646,28850],{},"是否每步调用了 ",[31,113647,101072],{},[570,113649,113650,113651,101405,113653,28850],{},"是否写入了 ",[31,113652,106513],{},[31,113654,113655],{},"data.ctrl[1]",[570,113657,113658,113659,822,113662,28850],{},"actuator 是否正确引用 ",[31,113660,113661],{},"joint1",[31,113663,113664],{},"joint2",[570,113666,113667],{},"控制输入是否太小。",[584,113669,113670],{"id":113670},"目标点不会动",[14,113672,113673],{},"本章的 target 是固定 site：",[25,113675,113677],{"className":53528,"code":113676,"language":53530,"meta":22,"style":22},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[31,113678,113679],{"__ignoreMap":22},[34,113680,113681,113683,113685,113687,113689,113691,113693,113695,113698],{"class":36,"line":37},[34,113682,1515],{"class":59},[34,113684,103597],{"class":51761},[34,113686,15384],{"class":2427},[34,113688,447],{"class":59},[34,113690,112346],{"class":187},[34,113692,101493],{"class":2427},[34,113694,447],{"class":59},[34,113696,113697],{"class":187},"\"0.5 0 0.4\"",[34,113699,113700],{"class":59}," ...\u002F>\n",[14,113702,113703,113704,113706],{},"它直接挂在 ",[31,113705,102228],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[584,113708,113709],{"id":113709},"机械臂不像真实机械臂",[14,113711,113712],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[555,113714,102994],{"id":102993},[14,113716,113717],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113719,113720],{},"核心公式：",[25,113722,113725],{"className":113723,"code":113724,"language":5651,"meta":22},[5649],"distance = ||tip - target||\nreward = -distance - action_cost\n",[31,113726,113724],{"__ignoreMap":22},[14,113728,113729],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[532,113731,113732],{},"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":22,"searchDepth":44,"depth":44,"links":113734},[113735,113736,113737,113742,113746,113747,113748,113756],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":113738},[113739,113740,113741],{"id":111938,"depth":50,"text":111939},{"id":112014,"depth":50,"text":112014},{"id":112044,"depth":50,"text":112045},{"id":101639,"depth":44,"text":101640,"children":113743},[113744,113745],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":113749},[113750,113751,113752,113753,113754,113755],{"id":113585,"depth":50,"text":113588},{"id":113600,"depth":50,"text":113600},{"id":113625,"depth":50,"text":113625},{"id":113637,"depth":50,"text":113638},{"id":113670,"depth":50,"text":113670},{"id":113709,"depth":50,"text":113709},{"id":102993,"depth":44,"text":102994},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111742,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113763,"title":113764,"body":113765,"description":22,"extension":538,"meta":117227,"navigation":540,"path":117228,"seo":117229,"stem":117230,"__hash__":117231},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113766,"toc":117198},[113767,113770,113772,113775,113778,113803,113806,113812,113815,113821,113823,113825,113849,113851,113869,113871,113914,113916,113943,113945,113948,114000,114003,114009,114018,114021,114059,114062,114101,114104,114112,114119,114122,114128,114130,114184,114191,114236,114239,114243,114259,114269,114271,115532,115534,115546,115548,115559,115561,115564,115585,115588,115591,115624,115630,115633,115666,115669,115672,115713,115718,115732,115735,115748,115753,115776,115778,115793,115803,115818,115825,115845,115860,115878,115881,115898,115906,115922,115928,115960,115973,116005,116015,116050,116064,116110,116124,116166,116177,116190,116196,116229,116232,116259,116269,116309,116319,116336,116343,116361,116364,116405,116418,116433,116436,116459,116462,116474,116477,116496,116501,116522,116525,116540,116543,116577,116589,116604,116607,116632,116635,116654,116657,116689,116692,116716,116722,116752,116759,116772,116775,116777,116779,116785,116788,116791,116803,116806,116808,116862,116864,116868,116874,116883,116886,116893,116895,116918,116921,116925,116927,116945,116951,116953,116986,116989,116995,116999,117002,117022,117027,117031,117038,117058,117063,117067,117070,117090,117093,117179,117183,117186,117192,117195],[10,113768,113764],{"id":113769},"_8gymnasium-风格强化学习接口基础",[555,113771,101034],{"id":101033},[14,113773,113774],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113776,113777],{},"你将实现:",[25,113779,113781],{"className":27,"code":113780,"language":29,"meta":22,"style":22},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[31,113782,113783,113793],{"__ignoreMap":22},[34,113784,113785,113788,113790],{"class":36,"line":37},[34,113786,113787],{"class":59},"obs, info ",[34,113789,447],{"class":112},[34,113791,113792],{"class":59}," env.reset()\n",[34,113794,113795,113798,113800],{"class":36,"line":44},[34,113796,113797],{"class":59},"obs, reward, terminated, truncated, info ",[34,113799,447],{"class":112},[34,113801,113802],{"class":59}," env.step(action)\n",[14,113804,113805],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113807,113808,113809,113811],{},"前面章节的代码都是“脚本式”的：在 ",[31,113810,102682],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113813,113814],{},"可以先记住 Gymnasium 环境的核心交互：",[25,113816,113819],{"className":113817,"code":113818,"language":5651,"meta":22},[5649],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[31,113820,113818],{"__ignoreMap":22},[555,113822,101157],{"id":101156},[14,113824,101160],{},[25,113826,113827],{"className":24286,"code":104775,"language":24288,"meta":22,"style":22},[31,113828,113829],{"__ignoreMap":22},[34,113830,113831,113833,113835,113837,113839,113841,113843,113845,113847],{"class":36,"line":37},[34,113832,25041],{"class":2427},[34,113834,26780],{"class":187},[34,113836,24298],{"class":187},[34,113838,26865],{"class":63},[34,113840,104790],{"class":187},[34,113842,101185],{"class":187},[34,113844,102888],{"class":187},[34,113846,101201],{"class":187},[34,113848,104799],{"class":187},[14,113850,103206],{},[25,113852,113854],{"className":24286,"code":113853,"language":24288,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[31,113855,113856],{"__ignoreMap":22},[34,113857,113858,113860,113862,113864,113866],{"class":36,"line":37},[34,113859,24295],{"class":2427},[34,113861,24298],{"class":187},[34,113863,101317],{"class":187},[34,113865,108098],{"class":187},[34,113867,113868],{"class":187}," gymnasium\n",[14,113870,103223],{},[25,113872,113874],{"className":24286,"code":113873,"language":24288,"meta":22,"style":22},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[31,113875,113876,113893,113902],{"__ignoreMap":22},[34,113877,113878,113880,113882,113884,113887,113889,113891],{"class":36,"line":37},[34,113879,30795],{"class":2427},[34,113881,29641],{"class":187},[34,113883,25580],{"class":63},[34,113885,113886],{"class":187}," mujoco-gym-api",[34,113888,101362],{"class":187},[34,113890,101365],{"class":63},[34,113892,101368],{"class":63},[34,113894,113895,113897,113899],{"class":36,"line":44},[34,113896,30795],{"class":2427},[34,113898,101375],{"class":187},[34,113900,113901],{"class":187}," mujoco-gym-api\n",[34,113903,113904,113906,113908,113910,113912],{"class":36,"line":50},[34,113905,24295],{"class":2427},[34,113907,24298],{"class":187},[34,113909,101317],{"class":187},[34,113911,108098],{"class":187},[34,113913,113868],{"class":187},[14,113915,101391],{},[567,113917,113918,113928,113931,113937],{},[570,113919,113920,113921,113924,113925,28850],{},"本章使用 ",[31,113922,113923],{},"gymnasium","，不是旧版 ",[31,113926,113927],{},"gym",[570,113929,113930],{},"Gymnasium API 与旧 Gym API 有差异。",[570,113932,113933,113934,28850],{},"旧 Gym 常见返回值是 4 个: ",[31,113935,113936],{},"obs, reward, done, info",[570,113938,113939,113940,28850],{},"Gymnasium 返回值是 5 个: ",[31,113941,113942],{},"obs, reward, terminated, truncated, info",[555,113944,101432],{"id":101431},[14,113946,113947],{},"强化学习环境接口包含:",[748,113949,113950,113959],{},[751,113951,113952],{},[754,113953,113954,113957],{},[757,113955,113956],{"align":24200},"方法",[757,113958,103083],{"align":24200},[795,113960,113961,113971,113981,113991],{},[754,113962,113963,113968],{},[800,113964,113965],{"align":24200},[31,113966,113967],{},"reset()",[800,113969,113970],{"align":24200},"重置环境",[754,113972,113973,113978],{},[800,113974,113975],{"align":24200},[31,113976,113977],{},"step(action)",[800,113979,113980],{"align":24200},"执行动作",[754,113982,113983,113988],{},[800,113984,113985],{"align":24200},[31,113986,113987],{},"observation_space",[800,113989,113990],{"align":24200},"观测空间",[754,113992,113993,113998],{},[800,113994,113995],{"align":24200},[31,113996,113997],{},"action_space",[800,113999,24118],{"align":24200},[14,114001,114002],{},"一个最小环境需要完成:",[25,114004,114007],{"className":114005,"code":114006,"language":5651,"meta":22},[5649],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[31,114008,114006],{"__ignoreMap":22},[584,114010,114012,101405,114015,105025],{"id":114011},"terminated-和-truncated-的区别",[31,114013,114014],{},"terminated",[31,114016,114017],{},"truncated",[14,114019,114020],{},"Gymnasium 把“结束”拆成两个概念：",[748,114022,114023,114033],{},[751,114024,114025],{},[754,114026,114027,114029,114031],{},[757,114028,104961],{"align":24200},[757,114030,101087],{"align":24200},[757,114032,21651],{"align":24200},[795,114034,114035,114047],{},[754,114036,114037,114041,114044],{},[800,114038,114039],{"align":24200},[31,114040,114014],{},[800,114042,114043],{"align":24200},"任务自然结束",[800,114045,114046],{"align":24200},"机械臂到达目标、机器人摔倒",[754,114048,114049,114053,114056],{},[800,114050,114051],{"align":24200},[31,114052,114017],{},[800,114054,114055],{"align":24200},"因外部限制截断",[800,114057,114058],{"align":24200},"达到最大步数、时间限制",[14,114060,114061],{},"本章中：",[25,114063,114065],{"className":27,"code":114064,"language":29,"meta":22,"style":22},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[31,114066,114067,114082],{"__ignoreMap":22},[34,114068,114069,114072,114074,114077,114079],{"class":36,"line":37},[34,114070,114071],{"class":59},"terminated ",[34,114073,447],{"class":112},[34,114075,114076],{"class":59}," dist ",[34,114078,1515],{"class":112},[34,114080,114081],{"class":63}," 0.05\n",[34,114083,114084,114087,114089,114091,114094,114096,114098],{"class":36,"line":44},[34,114085,114086],{"class":59},"truncated ",[34,114088,447],{"class":112},[34,114090,39335],{"class":63},[34,114092,114093],{"class":59},".steps ",[34,114095,2174],{"class":112},[34,114097,39335],{"class":63},[34,114099,114100],{"class":59},".max_steps\n",[14,114102,114103],{},"也就是：",[567,114105,114106,114109],{},[570,114107,114108],{},"末端距离目标小于 0.05，任务成功结束。",[570,114110,114111],{},"步数超过上限，episode 被截断。",[584,114113,114115,101405,114117],{"id":114114},"observation_space-和-action_space",[31,114116,113987],{},[31,114118,113997],{},[14,114120,114121],{},"这两个对象告诉算法：",[25,114123,114126],{"className":114124,"code":114125,"language":5651,"meta":22},[5649],"观测长什么样\n动作允许多大\n",[31,114127,114125],{"__ignoreMap":22},[14,114129,15097],{},[25,114131,114133],{"className":27,"code":114132,"language":29,"meta":22,"style":22},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[31,114134,114135],{"__ignoreMap":22},[34,114136,114137,114139,114142,114144,114147,114150,114153,114155,114157,114160,114162,114164,114166,114168,114170,114172,114174,114177,114179,114181],{"class":36,"line":37},[34,114138,31286],{"class":63},[34,114140,114141],{"class":59},".action_space ",[34,114143,447],{"class":112},[34,114145,114146],{"class":59}," spaces.Box(",[34,114148,114149],{"class":5680},"low",[34,114151,114152],{"class":112},"=-",[34,114154,102790],{"class":63},[34,114156,12899],{"class":59},[34,114158,114159],{"class":5680},"high",[34,114161,447],{"class":112},[34,114163,102790],{"class":63},[34,114165,12899],{"class":59},[34,114167,96422],{"class":5680},[34,114169,447],{"class":112},[34,114171,617],{"class":59},[34,114173,70],{"class":63},[34,114175,114176],{"class":59},",), ",[34,114178,93961],{"class":5680},[34,114180,447],{"class":112},[34,114182,114183],{"class":59},"np.float32)\n",[14,114185,114186,114187,114190],{},"表示动作是 2 维数组，每个值都在 ",[31,114188,114189],{},"[-1, 1]"," 范围内。",[25,114192,114194],{"className":27,"code":114193,"language":29,"meta":22,"style":22},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[31,114195,114196],{"__ignoreMap":22},[34,114197,114198,114200,114203,114205,114207,114209,114211,114214,114216,114218,114220,114222,114224,114226,114228,114230,114232,114234],{"class":36,"line":37},[34,114199,31286],{"class":63},[34,114201,114202],{"class":59},".observation_space ",[34,114204,447],{"class":112},[34,114206,114146],{"class":59},[34,114208,114149],{"class":5680},[34,114210,114152],{"class":112},[34,114212,114213],{"class":59},"np.inf, ",[34,114215,114159],{"class":5680},[34,114217,447],{"class":112},[34,114219,114213],{"class":59},[34,114221,96422],{"class":5680},[34,114223,447],{"class":112},[34,114225,617],{"class":59},[34,114227,1053],{"class":63},[34,114229,114176],{"class":59},[34,114231,93961],{"class":5680},[34,114233,447],{"class":112},[34,114235,114183],{"class":59},[14,114237,114238],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[584,114240,114242],{"id":114241},"frame_skip-是什么","frame_skip 是什么",[25,114244,114246],{"className":27,"code":114245,"language":29,"meta":22,"style":22},"self.frame_skip = 5\n",[31,114247,114248],{"__ignoreMap":22},[34,114249,114250,114252,114255,114257],{"class":36,"line":37},[34,114251,31286],{"class":63},[34,114253,114254],{"class":59},".frame_skip ",[34,114256,447],{"class":112},[34,114258,54888],{"class":63},[14,114260,114261,114262,114265,114266,114268],{},"表示外部调用一次 ",[31,114263,114264],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[31,114267,101602],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[555,114270,101640],{"id":101639},[25,114272,114274],{"className":27,"code":114273,"language":29,"meta":22,"style":22},"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",[31,114275,114276,114288,114294,114304,114315,114319,114323,114331,114336,114340,114344,114348,114352,114356,114360,114364,114369,114373,114377,114381,114386,114390,114394,114398,114402,114406,114410,114414,114418,114422,114426,114430,114434,114438,114456,114471,114475,114488,114498,114513,114530,114534,114555,114574,114599,114613,114617,114627,114639,114649,114653,114695,114733,114737,114747,114763,114778,114797,114804,114808,114821,114836,114851,114864,114883,114899,114903,114944,114959,114974,114978,115017,115028,115041,115045,115055,115064,115068,115078,115093,115111,115115,115126,115143,115156,115160,115170,115174,115185,115196,115200,115214,115228,115244,115248,115261,115278,115293,115300,115304,115308,115320,115330,115348,115360,115372,115376,115384,115400,115409,115418,115426,115468,115481,115486,115490,115508,115512,115516,115528],{"__ignoreMap":22},[34,114277,114278,114280,114283,114285],{"class":36,"line":37},[34,114279,30855],{"class":112},[34,114281,114282],{"class":59}," gymnasium ",[34,114284,31846],{"class":112},[34,114286,114287],{"class":59}," gym\n",[34,114289,114290,114292],{"class":36,"line":44},[34,114291,30855],{"class":112},[34,114293,101688],{"class":59},[34,114295,114296,114298,114300,114302],{"class":36,"line":50},[34,114297,30855],{"class":112},[34,114299,31843],{"class":59},[34,114301,31846],{"class":112},[34,114303,31849],{"class":59},[34,114305,114306,114308,114310,114312],{"class":36,"line":56},[34,114307,31200],{"class":112},[34,114309,114282],{"class":59},[34,114311,30855],{"class":112},[34,114313,114314],{"class":59}," spaces\n",[34,114316,114317],{"class":36,"line":107},[34,114318,2864],{"emptyLinePlaceholder":540},[34,114320,114321],{"class":36,"line":196},[34,114322,2864],{"emptyLinePlaceholder":540},[34,114324,114325,114327,114329],{"class":36,"line":202},[34,114326,101701],{"class":63},[34,114328,14028],{"class":112},[34,114330,101706],{"class":187},[34,114332,114333],{"class":36,"line":207},[34,114334,114335],{"class":187},"\u003Cmujoco model=\"gym_reacher\">\n",[34,114337,114338],{"class":36,"line":222},[34,114339,112125],{"class":187},[34,114341,114342],{"class":36,"line":227},[34,114343,2864],{"emptyLinePlaceholder":540},[34,114345,114346],{"class":36,"line":232},[34,114347,101725],{"class":187},[34,114349,114350],{"class":36,"line":238},[34,114351,112143],{"class":187},[34,114353,114354],{"class":36,"line":244},[34,114355,2864],{"emptyLinePlaceholder":540},[34,114357,114358],{"class":36,"line":250},[34,114359,112152],{"class":187},[34,114361,114362],{"class":36,"line":256},[34,114363,112157],{"class":187},[34,114365,114366],{"class":36,"line":261},[34,114367,114368],{"class":187},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[34,114370,114371],{"class":36,"line":267},[34,114372,2864],{"emptyLinePlaceholder":540},[34,114374,114375],{"class":36,"line":2138},[34,114376,112171],{"class":187},[34,114378,114379],{"class":36,"line":2143},[34,114380,112176],{"class":187},[34,114382,114383],{"class":36,"line":2157},[34,114384,114385],{"class":187},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[34,114387,114388],{"class":36,"line":2162},[34,114389,112186],{"class":187},[34,114391,114392],{"class":36,"line":2191},[34,114393,106825],{"class":187},[34,114395,114396],{"class":36,"line":2196},[34,114397,101754],{"class":187},[34,114399,114400],{"class":36,"line":2213},[34,114401,101759],{"class":187},[34,114403,114404],{"class":36,"line":2218},[34,114405,2864],{"emptyLinePlaceholder":540},[34,114407,114408],{"class":36,"line":2223},[34,114409,106842],{"class":187},[34,114411,114412],{"class":36,"line":2228},[34,114413,112211],{"class":187},[34,114415,114416],{"class":36,"line":2242},[34,114417,112216],{"class":187},[34,114419,114420],{"class":36,"line":2247},[34,114421,106852],{"class":187},[34,114423,114424],{"class":36,"line":3041},[34,114425,101764],{"class":187},[34,114427,114428],{"class":36,"line":3055},[34,114429,96157],{"class":187},[34,114431,114432],{"class":36,"line":3063},[34,114433,2864],{"emptyLinePlaceholder":540},[34,114435,114436],{"class":36,"line":3068},[34,114437,2864],{"emptyLinePlaceholder":540},[34,114439,114440,114442,114445,114447,114449,114451,114454],{"class":36,"line":3074},[34,114441,15158],{"class":112},[34,114443,114444],{"class":2427}," ReacherEnv",[34,114446,617],{"class":59},[34,114448,113927],{"class":2427},[34,114450,1164],{"class":59},[34,114452,114453],{"class":2427},"Env",[34,114455,31249],{"class":59},[34,114457,114458,114461,114463,114465,114468],{"class":36,"line":3080},[34,114459,114460],{"class":59},"    metadata ",[34,114462,447],{"class":112},[34,114464,4912],{"class":59},[34,114466,114467],{"class":187},"\"render_modes\"",[34,114469,114470],{"class":59},": []}\n",[34,114472,114473],{"class":36,"line":3085},[34,114474,2864],{"emptyLinePlaceholder":540},[34,114476,114477,114479,114481,114484,114486],{"class":36,"line":8412},[34,114478,31264],{"class":112},[34,114480,31267],{"class":63},[34,114482,114483],{"class":59},"(self) -> ",[34,114485,96145],{"class":63},[34,114487,4203],{"class":59},[34,114489,114490,114492,114494,114496],{"class":36,"line":8436},[34,114491,31280],{"class":63},[34,114493,17725],{"class":59},[34,114495,31292],{"class":63},[34,114497,2440],{"class":59},[34,114499,114500,114502,114505,114507,114509,114511],{"class":36,"line":8441},[34,114501,31308],{"class":63},[34,114503,114504],{"class":59},".model ",[34,114506,447],{"class":112},[34,114508,101799],{"class":59},[34,114510,101701],{"class":63},[34,114512,623],{"class":59},[34,114514,114515,114517,114520,114522,114525,114527],{"class":36,"line":8447},[34,114516,31308],{"class":63},[34,114518,114519],{"class":59},".data ",[34,114521,447],{"class":112},[34,114523,114524],{"class":59}," mujoco.MjData(",[34,114526,31286],{"class":63},[34,114528,114529],{"class":59},".model)\n",[34,114531,114532],{"class":36,"line":8474},[34,114533,2864],{"emptyLinePlaceholder":540},[34,114535,114536,114538,114541,114543,114546,114548,114551,114553],{"class":36,"line":8479},[34,114537,31308],{"class":63},[34,114539,114540],{"class":59},".tip_site_id ",[34,114542,447],{"class":112},[34,114544,114545],{"class":59}," mujoco.mj_name2id(",[34,114547,31286],{"class":63},[34,114549,114550],{"class":59},".model, mujoco.mjtObj.mjOBJ_SITE, ",[34,114552,111923],{"class":187},[34,114554,623],{"class":59},[34,114556,114557,114559,114562,114564,114566,114568,114570,114572],{"class":36,"line":8485},[34,114558,31308],{"class":63},[34,114560,114561],{"class":59},".target_site_id ",[34,114563,447],{"class":112},[34,114565,114545],{"class":59},[34,114567,31286],{"class":63},[34,114569,114550],{"class":59},[34,114571,112346],{"class":187},[34,114573,623],{"class":59},[34,114575,114576,114578,114580,114582,114584,114586,114589,114591,114593,114595,114597],{"class":36,"line":8497},[34,114577,2961],{"class":112},[34,114579,39335],{"class":63},[34,114581,114540],{"class":59},[34,114583,1515],{"class":112},[34,114585,4557],{"class":63},[34,114587,114588],{"class":112}," or",[34,114590,39335],{"class":63},[34,114592,114561],{"class":59},[34,114594,1515],{"class":112},[34,114596,4557],{"class":63},[34,114598,4203],{"class":59},[34,114600,114601,114604,114606,114608,114611],{"class":36,"line":8509},[34,114602,114603],{"class":112},"            raise",[34,114605,103822],{"class":63},[34,114607,617],{"class":59},[34,114609,114610],{"class":187},"\"required sites not found\"",[34,114612,623],{"class":59},[34,114614,114615],{"class":36,"line":8521},[34,114616,2864],{"emptyLinePlaceholder":540},[34,114618,114619,114621,114623,114625],{"class":36,"line":10180},[34,114620,31308],{"class":63},[34,114622,114254],{"class":59},[34,114624,447],{"class":112},[34,114626,54888],{"class":63},[34,114628,114629,114631,114634,114636],{"class":36,"line":10205},[34,114630,31308],{"class":63},[34,114632,114633],{"class":59},".max_steps ",[34,114635,447],{"class":112},[34,114637,114638],{"class":63}," 200\n",[34,114640,114641,114643,114645,114647],{"class":36,"line":10228},[34,114642,31308],{"class":63},[34,114644,114093],{"class":59},[34,114646,447],{"class":112},[34,114648,47794],{"class":63},[34,114650,114651],{"class":36,"line":10252},[34,114652,2864],{"emptyLinePlaceholder":540},[34,114654,114655,114657,114659,114661,114663,114665,114667,114669,114671,114673,114675,114677,114679,114681,114683,114685,114687,114689,114691,114693],{"class":36,"line":10257},[34,114656,31308],{"class":63},[34,114658,114141],{"class":59},[34,114660,447],{"class":112},[34,114662,114146],{"class":59},[34,114664,114149],{"class":5680},[34,114666,114152],{"class":112},[34,114668,102790],{"class":63},[34,114670,12899],{"class":59},[34,114672,114159],{"class":5680},[34,114674,447],{"class":112},[34,114676,102790],{"class":63},[34,114678,12899],{"class":59},[34,114680,96422],{"class":5680},[34,114682,447],{"class":112},[34,114684,617],{"class":59},[34,114686,70],{"class":63},[34,114688,114176],{"class":59},[34,114690,93961],{"class":5680},[34,114692,447],{"class":112},[34,114694,114183],{"class":59},[34,114696,114697,114699,114701,114703,114705,114707,114709,114711,114713,114715,114717,114719,114721,114723,114725,114727,114729,114731],{"class":36,"line":10262},[34,114698,31308],{"class":63},[34,114700,114202],{"class":59},[34,114702,447],{"class":112},[34,114704,114146],{"class":59},[34,114706,114149],{"class":5680},[34,114708,114152],{"class":112},[34,114710,114213],{"class":59},[34,114712,114159],{"class":5680},[34,114714,447],{"class":112},[34,114716,114213],{"class":59},[34,114718,96422],{"class":5680},[34,114720,447],{"class":112},[34,114722,617],{"class":59},[34,114724,1053],{"class":63},[34,114726,114176],{"class":59},[34,114728,93961],{"class":5680},[34,114730,447],{"class":112},[34,114732,114183],{"class":59},[34,114734,114735],{"class":36,"line":10267},[34,114736,2864],{"emptyLinePlaceholder":540},[34,114738,114739,114741,114744],{"class":36,"line":10276},[34,114740,31264],{"class":112},[34,114742,114743],{"class":2427}," _get_obs",[34,114745,114746],{"class":59},"(self) -> np.ndarray:\n",[34,114748,114749,114751,114753,114755,114758,114760],{"class":36,"line":10281},[34,114750,112524],{"class":59},[34,114752,447],{"class":112},[34,114754,39335],{"class":63},[34,114756,114757],{"class":59},".data.site_xpos[",[34,114759,31286],{"class":63},[34,114761,114762],{"class":59},".tip_site_id].copy()\n",[34,114764,114765,114767,114769,114771,114773,114775],{"class":36,"line":10287},[34,114766,112537],{"class":59},[34,114768,447],{"class":112},[34,114770,39335],{"class":63},[34,114772,114757],{"class":59},[34,114774,31286],{"class":63},[34,114776,114777],{"class":59},".target_site_id].copy()\n",[34,114779,114780,114782,114784,114787,114789,114792,114794],{"class":36,"line":10308},[34,114781,110569],{"class":59},[34,114783,447],{"class":112},[34,114785,114786],{"class":59}," np.concatenate([",[34,114788,31286],{"class":63},[34,114790,114791],{"class":59},".data.qpos.copy(), ",[34,114793,31286],{"class":63},[34,114795,114796],{"class":59},".data.qvel.copy(), tip, target])\n",[34,114798,114799,114801],{"class":36,"line":10314},[34,114800,15216],{"class":112},[34,114802,114803],{"class":59}," obs.astype(np.float32)\n",[34,114805,114806],{"class":36,"line":10328},[34,114807,2864],{"emptyLinePlaceholder":540},[34,114809,114810,114812,114815,114817,114819],{"class":36,"line":10334},[34,114811,31264],{"class":112},[34,114813,114814],{"class":2427}," _get_reward",[34,114816,114483],{"class":59},[34,114818,656],{"class":63},[34,114820,4203],{"class":59},[34,114822,114823,114825,114827,114829,114831,114833],{"class":36,"line":10361},[34,114824,112524],{"class":59},[34,114826,447],{"class":112},[34,114828,39335],{"class":63},[34,114830,114757],{"class":59},[34,114832,31286],{"class":63},[34,114834,114835],{"class":59},".tip_site_id]\n",[34,114837,114838,114840,114842,114844,114846,114848],{"class":36,"line":10370},[34,114839,112537],{"class":59},[34,114841,447],{"class":112},[34,114843,39335],{"class":63},[34,114845,114757],{"class":59},[34,114847,31286],{"class":63},[34,114849,114850],{"class":59},".target_site_id]\n",[34,114852,114853,114856,114858,114860,114862],{"class":36,"line":10376},[34,114854,114855],{"class":59},"        dist ",[34,114857,447],{"class":112},[34,114859,111988],{"class":59},[34,114861,113],{"class":112},[34,114863,111993],{"class":59},[34,114865,114866,114869,114871,114873,114875,114878,114880],{"class":36,"line":10384},[34,114867,114868],{"class":59},"        control_cost ",[34,114870,447],{"class":112},[34,114872,112424],{"class":63},[34,114874,6982],{"class":112},[34,114876,114877],{"class":59}," np.sum(np.square(",[34,114879,31286],{"class":63},[34,114881,114882],{"class":59},".data.ctrl))\n",[34,114884,114885,114887,114889,114891,114893,114895,114897],{"class":36,"line":10389},[34,114886,15216],{"class":112},[34,114888,110184],{"class":63},[34,114890,617],{"class":59},[34,114892,113],{"class":112},[34,114894,111983],{"class":59},[34,114896,113],{"class":112},[34,114898,112446],{"class":59},[34,114900,114901],{"class":36,"line":17068},[34,114902,2864],{"emptyLinePlaceholder":540},[34,114904,114905,114907,114910,114913,114915,114918,114920,114922,114924,114926,114928,114931,114934,114936,114938,114940,114942],{"class":36,"line":17074},[34,114906,31264],{"class":112},[34,114908,114909],{"class":2427}," reset",[34,114911,114912],{"class":59},"(self, ",[34,114914,1062],{"class":112},[34,114916,114917],{"class":59},", seed: ",[34,114919,620],{"class":63},[34,114921,25574],{"class":112},[34,114923,39395],{"class":63},[34,114925,14028],{"class":112},[34,114927,39395],{"class":63},[34,114929,114930],{"class":59},", options: ",[34,114932,114933],{"class":63},"dict",[34,114935,25574],{"class":112},[34,114937,39395],{"class":63},[34,114939,14028],{"class":112},[34,114941,39395],{"class":63},[34,114943,31249],{"class":59},[34,114945,114946,114948,114951,114954,114956],{"class":36,"line":17097},[34,114947,31280],{"class":63},[34,114949,114950],{"class":59},"().reset(",[34,114952,114953],{"class":5680},"seed",[34,114955,447],{"class":112},[34,114957,114958],{"class":59},"seed)\n",[34,114960,114961,114964,114966,114969,114971],{"class":36,"line":17103},[34,114962,114963],{"class":59},"        mujoco.mj_resetData(",[34,114965,31286],{"class":63},[34,114967,114968],{"class":59},".model, ",[34,114970,31286],{"class":63},[34,114972,114973],{"class":59},".data)\n",[34,114975,114976],{"class":36,"line":17126},[34,114977,2864],{"emptyLinePlaceholder":540},[34,114979,114980,114982,114985,114987,114989,114992,114994,114996,114998,115000,115002,115004,115006,115008,115010,115012,115014],{"class":36,"line":17140},[34,114981,31308],{"class":63},[34,114983,114984],{"class":59},".data.qpos[:] ",[34,114986,447],{"class":112},[34,114988,39335],{"class":63},[34,114990,114991],{"class":59},".np_random.uniform(",[34,114993,114149],{"class":5680},[34,114995,114152],{"class":112},[34,114997,86671],{"class":63},[34,114999,12899],{"class":59},[34,115001,114159],{"class":5680},[34,115003,447],{"class":112},[34,115005,86671],{"class":63},[34,115007,12899],{"class":59},[34,115009,31959],{"class":5680},[34,115011,447],{"class":112},[34,115013,31286],{"class":63},[34,115015,115016],{"class":59},".model.nq)\n",[34,115018,115019,115021,115024,115026],{"class":36,"line":17160},[34,115020,31308],{"class":63},[34,115022,115023],{"class":59},".data.qvel[:] ",[34,115025,447],{"class":112},[34,115027,105148],{"class":63},[34,115029,115030,115033,115035,115037,115039],{"class":36,"line":17166},[34,115031,115032],{"class":59},"        mujoco.mj_forward(",[34,115034,31286],{"class":63},[34,115036,114968],{"class":59},[34,115038,31286],{"class":63},[34,115040,114973],{"class":59},[34,115042,115043],{"class":36,"line":17177},[34,115044,2864],{"emptyLinePlaceholder":540},[34,115046,115047,115049,115051,115053],{"class":36,"line":17200},[34,115048,31308],{"class":63},[34,115050,114093],{"class":59},[34,115052,447],{"class":112},[34,115054,47794],{"class":63},[34,115056,115057,115059,115061],{"class":36,"line":17222},[34,115058,15216],{"class":112},[34,115060,39335],{"class":63},[34,115062,115063],{"class":59},"._get_obs(), {}\n",[34,115065,115066],{"class":36,"line":17227},[34,115067,2864],{"emptyLinePlaceholder":540},[34,115069,115070,115072,115075],{"class":36,"line":17233},[34,115071,31264],{"class":112},[34,115073,115074],{"class":2427}," step",[34,115076,115077],{"class":59},"(self, action):\n",[34,115079,115080,115082,115084,115087,115089,115091],{"class":36,"line":17247},[34,115081,110609],{"class":59},[34,115083,447],{"class":112},[34,115085,115086],{"class":59}," np.asarray(action, ",[34,115088,93961],{"class":5680},[34,115090,447],{"class":112},[34,115092,114183],{"class":59},[34,115094,115095,115097,115099,115101,115103,115106,115108],{"class":36,"line":17260},[34,115096,110609],{"class":59},[34,115098,447],{"class":112},[34,115100,107834],{"class":59},[34,115102,31286],{"class":63},[34,115104,115105],{"class":59},".action_space.low, ",[34,115107,31286],{"class":63},[34,115109,115110],{"class":59},".action_space.high)\n",[34,115112,115113],{"class":36,"line":17265},[34,115114,2864],{"emptyLinePlaceholder":540},[34,115116,115117,115119,115122,115124],{"class":36,"line":17279},[34,115118,31308],{"class":63},[34,115120,115121],{"class":59},".data.ctrl[:] ",[34,115123,447],{"class":112},[34,115125,107857],{"class":59},[34,115127,115128,115130,115132,115134,115136,115138,115140],{"class":36,"line":17284},[34,115129,3867],{"class":112},[34,115131,101888],{"class":59},[34,115133,26508],{"class":112},[34,115135,32906],{"class":63},[34,115137,617],{"class":59},[34,115139,31286],{"class":63},[34,115141,115142],{"class":59},".frame_skip):\n",[34,115144,115145,115148,115150,115152,115154],{"class":36,"line":17290},[34,115146,115147],{"class":59},"            mujoco.mj_step(",[34,115149,31286],{"class":63},[34,115151,114968],{"class":59},[34,115153,31286],{"class":63},[34,115155,114973],{"class":59},[34,115157,115158],{"class":36,"line":17295},[34,115159,2864],{"emptyLinePlaceholder":540},[34,115161,115162,115164,115166,115168],{"class":36,"line":17309},[34,115163,31308],{"class":63},[34,115165,114093],{"class":59},[34,115167,9941],{"class":112},[34,115169,56160],{"class":63},[34,115171,115172],{"class":36,"line":17314},[34,115173,2864],{"emptyLinePlaceholder":540},[34,115175,115176,115178,115180,115182],{"class":36,"line":17319},[34,115177,110569],{"class":59},[34,115179,447],{"class":112},[34,115181,39335],{"class":63},[34,115183,115184],{"class":59},"._get_obs()\n",[34,115186,115187,115189,115191,115193],{"class":36,"line":17333},[34,115188,110674],{"class":59},[34,115190,447],{"class":112},[34,115192,39335],{"class":63},[34,115194,115195],{"class":59},"._get_reward()\n",[34,115197,115198],{"class":36,"line":17345},[34,115199,2864],{"emptyLinePlaceholder":540},[34,115201,115202,115204,115206,115208,115210,115212],{"class":36,"line":17350},[34,115203,112524],{"class":59},[34,115205,447],{"class":112},[34,115207,39335],{"class":63},[34,115209,114757],{"class":59},[34,115211,31286],{"class":63},[34,115213,114835],{"class":59},[34,115215,115216,115218,115220,115222,115224,115226],{"class":36,"line":17363},[34,115217,112537],{"class":59},[34,115219,447],{"class":112},[34,115221,39335],{"class":63},[34,115223,114757],{"class":59},[34,115225,31286],{"class":63},[34,115227,114850],{"class":59},[34,115229,115230,115232,115234,115236,115239,115241],{"class":36,"line":17368},[34,115231,114855],{"class":59},[34,115233,447],{"class":112},[34,115235,110184],{"class":63},[34,115237,115238],{"class":59},"(np.linalg.norm(tip ",[34,115240,113],{"class":112},[34,115242,115243],{"class":59}," target))\n",[34,115245,115246],{"class":36,"line":17373},[34,115247,2864],{"emptyLinePlaceholder":540},[34,115249,115250,115253,115255,115257,115259],{"class":36,"line":17378},[34,115251,115252],{"class":59},"        terminated ",[34,115254,447],{"class":112},[34,115256,114076],{"class":59},[34,115258,1515],{"class":112},[34,115260,114081],{"class":63},[34,115262,115263,115266,115268,115270,115272,115274,115276],{"class":36,"line":17391},[34,115264,115265],{"class":59},"        truncated ",[34,115267,447],{"class":112},[34,115269,39335],{"class":63},[34,115271,114093],{"class":59},[34,115273,2174],{"class":112},[34,115275,39335],{"class":63},[34,115277,114100],{"class":59},[34,115279,115280,115283,115285,115287,115290],{"class":36,"line":17396},[34,115281,115282],{"class":59},"        info ",[34,115284,447],{"class":112},[34,115286,4912],{"class":59},[34,115288,115289],{"class":187},"\"distance\"",[34,115291,115292],{"class":59},": dist}\n",[34,115294,115295,115297],{"class":36,"line":33096},[34,115296,15216],{"class":112},[34,115298,115299],{"class":59}," obs, reward, terminated, truncated, info\n",[34,115301,115302],{"class":36,"line":33102},[34,115303,2864],{"emptyLinePlaceholder":540},[34,115305,115306],{"class":36,"line":33108},[34,115307,2864],{"emptyLinePlaceholder":540},[34,115309,115310,115312,115314,115316,115318],{"class":36,"line":33114},[34,115311,32410],{"class":112},[34,115313,2437],{"class":2427},[34,115315,101785],{"class":59},[34,115317,96145],{"class":63},[34,115319,4203],{"class":59},[34,115321,115322,115325,115327],{"class":36,"line":33120},[34,115323,115324],{"class":59},"    env ",[34,115326,447],{"class":112},[34,115328,115329],{"class":59}," ReacherEnv()\n",[34,115331,115332,115335,115337,115340,115342,115344,115346],{"class":36,"line":33131},[34,115333,115334],{"class":59},"    obs, info ",[34,115336,447],{"class":112},[34,115338,115339],{"class":59}," env.reset(",[34,115341,114953],{"class":5680},[34,115343,447],{"class":112},[34,115345,319],{"class":63},[34,115347,623],{"class":59},[34,115349,115350,115352,115354,115357],{"class":36,"line":33137},[34,115351,31762],{"class":63},[34,115353,617],{"class":59},[34,115355,115356],{"class":187},"\"initial obs shape:\"",[34,115358,115359],{"class":59},", obs.shape)\n",[34,115361,115362,115364,115366,115369],{"class":36,"line":33157},[34,115363,31762],{"class":63},[34,115365,617],{"class":59},[34,115367,115368],{"class":187},"\"initial info:\"",[34,115370,115371],{"class":59},", info)\n",[34,115373,115374],{"class":36,"line":33163},[34,115375,2864],{"emptyLinePlaceholder":540},[34,115377,115378,115380,115382],{"class":36,"line":33174},[34,115379,110540],{"class":59},[34,115381,447],{"class":112},[34,115383,105148],{"class":63},[34,115385,115386,115388,115390,115392,115394,115396,115398],{"class":36,"line":33180},[34,115387,3665],{"class":112},[34,115389,32079],{"class":59},[34,115391,26508],{"class":112},[34,115393,32906],{"class":63},[34,115395,617],{"class":59},[34,115397,1306],{"class":63},[34,115399,31249],{"class":59},[34,115401,115402,115404,115406],{"class":36,"line":33186},[34,115403,110609],{"class":59},[34,115405,447],{"class":112},[34,115407,115408],{"class":59}," env.action_space.sample()\n",[34,115410,115411,115414,115416],{"class":36,"line":33192},[34,115412,115413],{"class":59},"        obs, reward, terminated, truncated, info ",[34,115415,447],{"class":112},[34,115417,113802],{"class":59},[34,115419,115420,115422,115424],{"class":36,"line":33198},[34,115421,110684],{"class":59},[34,115423,9941],{"class":112},[34,115425,110689],{"class":59},[34,115427,115428,115430,115432,115434,115436,115439,115441,115443,115446,115448,115450,115453,115455,115457,115460,115462,115464,115466],{"class":36,"line":33204},[34,115429,32914],{"class":63},[34,115431,617],{"class":59},[34,115433,110718],{"class":187},[34,115435,110721],{"class":59},[34,115437,115438],{"class":187},"\"reward:\"",[34,115440,12899],{"class":59},[34,115442,32481],{"class":63},[34,115444,115445],{"class":59},"(reward, ",[34,115447,309],{"class":63},[34,115449,110732],{"class":59},[34,115451,115452],{"class":187},"\"distance:\"",[34,115454,12899],{"class":59},[34,115456,32481],{"class":63},[34,115458,115459],{"class":59},"(info[",[34,115461,115289],{"class":187},[34,115463,112589],{"class":59},[34,115465,309],{"class":63},[34,115467,30960],{"class":59},[34,115469,115470,115472,115475,115478],{"class":36,"line":33210},[34,115471,2961],{"class":112},[34,115473,115474],{"class":59}," terminated ",[34,115476,115477],{"class":112},"or",[34,115479,115480],{"class":59}," truncated:\n",[34,115482,115483],{"class":36,"line":33216},[34,115484,115485],{"class":112},"            break\n",[34,115487,115488],{"class":36,"line":33236},[34,115489,2864],{"emptyLinePlaceholder":540},[34,115491,115492,115494,115496,115498,115500,115502,115504,115506],{"class":36,"line":33242},[34,115493,31762],{"class":63},[34,115495,617],{"class":59},[34,115497,110763],{"class":187},[34,115499,12899],{"class":59},[34,115501,32481],{"class":63},[34,115503,110770],{"class":59},[34,115505,309],{"class":63},[34,115507,30960],{"class":59},[34,115509,115510],{"class":36,"line":33258},[34,115511,2864],{"emptyLinePlaceholder":540},[34,115513,115514],{"class":36,"line":33264},[34,115515,2864],{"emptyLinePlaceholder":540},[34,115517,115518,115520,115522,115524,115526],{"class":36,"line":33278},[34,115519,2002],{"class":112},[34,115521,31683],{"class":63},[34,115523,101946],{"class":112},[34,115525,101949],{"class":187},[34,115527,4203],{"class":59},[34,115529,115530],{"class":36,"line":33284},[34,115531,101956],{"class":59},[14,115533,103957],{},[25,115535,115537],{"className":24286,"code":115536,"language":24288,"meta":22,"style":22},"touch ch8_gym_env.py\n",[31,115538,115539],{"__ignoreMap":22},[34,115540,115541,115543],{"class":36,"line":37},[34,115542,101670],{"class":2427},[34,115544,115545],{"class":187}," ch8_gym_env.py\n",[14,115547,110831],{},[25,115549,115551],{"className":24286,"code":115550,"language":24288,"meta":22,"style":22},"python ch8_gym_env.py\n",[31,115552,115553],{"__ignoreMap":22},[34,115554,115555,115557],{"class":36,"line":37},[34,115556,29],{"class":2427},[34,115558,115545],{"class":187},[584,115560,101959],{"id":101959},[14,115562,115563],{},"继承 Gymnasium 环境：",[25,115565,115567],{"className":27,"code":115566,"language":29,"meta":22,"style":22},"class ReacherEnv(gym.Env):\n",[31,115568,115569],{"__ignoreMap":22},[34,115570,115571,115573,115575,115577,115579,115581,115583],{"class":36,"line":37},[34,115572,15158],{"class":112},[34,115574,114444],{"class":2427},[34,115576,617],{"class":59},[34,115578,113927],{"class":2427},[34,115580,1164],{"class":59},[34,115582,114453],{"class":2427},[34,115584,31249],{"class":59},[14,115586,115587],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115589,115590],{},"初始化模型：",[25,115592,115594],{"className":27,"code":115593,"language":29,"meta":22,"style":22},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[31,115595,115596,115610],{"__ignoreMap":22},[34,115597,115598,115600,115602,115604,115606,115608],{"class":36,"line":37},[34,115599,31286],{"class":63},[34,115601,114504],{"class":59},[34,115603,447],{"class":112},[34,115605,101799],{"class":59},[34,115607,101701],{"class":63},[34,115609,623],{"class":59},[34,115611,115612,115614,115616,115618,115620,115622],{"class":36,"line":44},[34,115613,31286],{"class":63},[34,115615,114519],{"class":59},[34,115617,447],{"class":112},[34,115619,114524],{"class":59},[34,115621,31286],{"class":63},[34,115623,114529],{"class":59},[14,115625,115626,115627,115629],{},"这和前面章节一样，只是现在放到了类的 ",[31,115628,31292],{}," 里。",[14,115631,115632],{},"缓存 site ID：",[25,115634,115636],{"className":27,"code":115635,"language":29,"meta":22,"style":22},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[31,115637,115638,115652],{"__ignoreMap":22},[34,115639,115640,115642,115644,115646,115648,115650],{"class":36,"line":37},[34,115641,31286],{"class":63},[34,115643,114540],{"class":59},[34,115645,447],{"class":112},[34,115647,114545],{"class":59},[34,115649,90015],{"class":63},[34,115651,623],{"class":59},[34,115653,115654,115656,115658,115660,115662,115664],{"class":36,"line":44},[34,115655,31286],{"class":63},[34,115657,114561],{"class":59},[34,115659,447],{"class":112},[34,115661,114545],{"class":59},[34,115663,90015],{"class":63},[34,115665,623],{"class":59},[14,115667,115668],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115670,115671],{},"reset：",[25,115673,115675],{"className":27,"code":115674,"language":29,"meta":22,"style":22},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[31,115676,115677],{"__ignoreMap":22},[34,115678,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701,115703,115705,115707,115709,115711],{"class":36,"line":37},[34,115680,32410],{"class":112},[34,115682,114909],{"class":2427},[34,115684,114912],{"class":59},[34,115686,1062],{"class":112},[34,115688,114917],{"class":59},[34,115690,620],{"class":63},[34,115692,25574],{"class":112},[34,115694,39395],{"class":63},[34,115696,14028],{"class":112},[34,115698,39395],{"class":63},[34,115700,114930],{"class":59},[34,115702,114933],{"class":63},[34,115704,25574],{"class":112},[34,115706,39395],{"class":63},[34,115708,14028],{"class":112},[34,115710,39395],{"class":63},[34,115712,31249],{"class":59},[14,115714,115715,115717],{},[31,115716,70517],{}," 做四件事：",[567,115719,115720,115723,115726,115729],{},[570,115721,115722],{},"设置随机种子。",[570,115724,115725],{},"重置 MuJoCo data。",[570,115727,115728],{},"随机初始化关节角。",[570,115730,115731],{},"返回初始观测和 info。",[14,115733,115734],{},"step：",[25,115736,115738],{"className":27,"code":115737,"language":29,"meta":22,"style":22},"def step(self, action):\n",[31,115739,115740],{"__ignoreMap":22},[34,115741,115742,115744,115746],{"class":36,"line":37},[34,115743,32410],{"class":112},[34,115745,115074],{"class":2427},[34,115747,115077],{"class":59},[14,115749,115750,115752],{},[31,115751,107521],{}," 做六件事：",[567,115754,115755,115758,115764,115767,115770,115773],{},[570,115756,115757],{},"检查并裁剪 action。",[570,115759,115760,115761,28850],{},"写入 ",[31,115762,115763],{},"self.data.ctrl",[570,115765,115766],{},"连续推进若干个 MuJoCo 物理步。",[570,115768,115769],{},"计算新观测。",[570,115771,115772],{},"计算奖励和结束条件。",[570,115774,115775],{},"返回 Gymnasium 标准五元组。",[584,115777,102095],{"id":102095},[25,115779,115781],{"className":27,"code":115780,"language":29,"meta":22,"style":22},"import gymnasium as gym\n",[31,115782,115783],{"__ignoreMap":22},[34,115784,115785,115787,115789,115791],{"class":36,"line":37},[34,115786,30855],{"class":112},[34,115788,114282],{"class":59},[34,115790,31846],{"class":112},[34,115792,114287],{"class":59},[14,115794,115795,115796,115798,115799,115802],{},"导入 Gymnasium，并起别名 ",[31,115797,113927],{},"。后面写 ",[31,115800,115801],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[25,115804,115806],{"className":27,"code":115805,"language":29,"meta":22,"style":22},"from gymnasium import spaces\n",[31,115807,115808],{"__ignoreMap":22},[34,115809,115810,115812,115814,115816],{"class":36,"line":37},[34,115811,31200],{"class":112},[34,115813,114282],{"class":59},[34,115815,30855],{"class":112},[34,115817,114314],{"class":59},[14,115819,115820,115821,115824],{},"导入空间定义工具。",[31,115822,115823],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[25,115826,115827],{"className":27,"code":115566,"language":29,"meta":22,"style":22},[31,115828,115829],{"__ignoreMap":22},[34,115830,115831,115833,115835,115837,115839,115841,115843],{"class":36,"line":37},[34,115832,15158],{"class":112},[34,115834,114444],{"class":2427},[34,115836,617],{"class":59},[34,115838,113927],{"class":2427},[34,115840,1164],{"class":59},[34,115842,114453],{"class":2427},[34,115844,31249],{"class":59},[14,115846,115847,115848,115851,115852,115854,115855,101405,115857,115859],{},"定义一个类，名字叫 ",[31,115849,115850],{},"ReacherEnv","。括号里的 ",[31,115853,115801],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[31,115856,70517],{},[31,115858,107521],{}," 这两个核心方法。",[25,115861,115863],{"className":27,"code":115862,"language":29,"meta":22,"style":22},"metadata = {\"render_modes\": []}\n",[31,115864,115865],{"__ignoreMap":22},[34,115866,115867,115870,115872,115874,115876],{"class":36,"line":37},[34,115868,115869],{"class":59},"metadata ",[34,115871,447],{"class":112},[34,115873,4912],{"class":59},[34,115875,114467],{"class":187},[34,115877,114470],{"class":59},[14,115879,115880],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[25,115882,115884],{"className":27,"code":115883,"language":29,"meta":22,"style":22},"def __init__(self) -> None:\n",[31,115885,115886],{"__ignoreMap":22},[34,115887,115888,115890,115892,115894,115896],{"class":36,"line":37},[34,115889,32410],{"class":112},[34,115891,31267],{"class":63},[34,115893,114483],{"class":59},[34,115895,96145],{"class":63},[34,115897,4203],{"class":59},[14,115899,115900,115902,115903,28850],{},[31,115901,31292],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[31,115904,115905],{},"env = ReacherEnv()",[25,115907,115909],{"className":27,"code":115908,"language":29,"meta":22,"style":22},"super().__init__()\n",[31,115910,115911],{"__ignoreMap":22},[34,115912,115913,115916,115918,115920],{"class":36,"line":37},[34,115914,115915],{"class":63},"super",[34,115917,17725],{"class":59},[34,115919,31292],{"class":63},[34,115921,2440],{"class":59},[14,115923,115924,115925,115927],{},"调用父类 ",[31,115926,115801],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[25,115929,115930],{"className":27,"code":115593,"language":29,"meta":22,"style":22},[31,115931,115932,115946],{"__ignoreMap":22},[34,115933,115934,115936,115938,115940,115942,115944],{"class":36,"line":37},[34,115935,31286],{"class":63},[34,115937,114504],{"class":59},[34,115939,447],{"class":112},[34,115941,101799],{"class":59},[34,115943,101701],{"class":63},[34,115945,623],{"class":59},[34,115947,115948,115950,115952,115954,115956,115958],{"class":36,"line":44},[34,115949,31286],{"class":63},[34,115951,114519],{"class":59},[34,115953,447],{"class":112},[34,115955,114524],{"class":59},[34,115957,31286],{"class":63},[34,115959,114529],{"class":59},[14,115961,115962,115963,115965,115966,101405,115969,115972],{},"把 MuJoCo 模型和状态保存到 ",[31,115964,31286],{}," 上。",[31,115967,115968],{},"self.model",[31,115970,115971],{},"self.data"," 表示这个环境对象自己的模型和状态。",[25,115974,115975],{"className":27,"code":115635,"language":29,"meta":22,"style":22},[31,115976,115977,115991],{"__ignoreMap":22},[34,115978,115979,115981,115983,115985,115987,115989],{"class":36,"line":37},[34,115980,31286],{"class":63},[34,115982,114540],{"class":59},[34,115984,447],{"class":112},[34,115986,114545],{"class":59},[34,115988,90015],{"class":63},[34,115990,623],{"class":59},[34,115992,115993,115995,115997,115999,116001,116003],{"class":36,"line":44},[34,115994,31286],{"class":63},[34,115996,114561],{"class":59},[34,115998,447],{"class":112},[34,116000,114545],{"class":59},[34,116002,90015],{"class":63},[34,116004,623],{"class":59},[14,116006,116007,116008,101405,116011,116014],{},"提前查好 tip 和 target 的 site ID。这样 ",[31,116009,116010],{},"_get_obs",[31,116012,116013],{},"_get_reward"," 里就不用每次按名字查找。",[25,116016,116018],{"className":27,"code":116017,"language":29,"meta":22,"style":22},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[31,116019,116020,116030,116040],{"__ignoreMap":22},[34,116021,116022,116024,116026,116028],{"class":36,"line":37},[34,116023,31286],{"class":63},[34,116025,114254],{"class":59},[34,116027,447],{"class":112},[34,116029,54888],{"class":63},[34,116031,116032,116034,116036,116038],{"class":36,"line":44},[34,116033,31286],{"class":63},[34,116035,114633],{"class":59},[34,116037,447],{"class":112},[34,116039,114638],{"class":63},[34,116041,116042,116044,116046,116048],{"class":36,"line":50},[34,116043,31286],{"class":63},[34,116045,114093],{"class":59},[34,116047,447],{"class":112},[34,116049,47794],{"class":63},[14,116051,116052,116055,116056,116059,116060,116063],{},[31,116053,116054],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[31,116057,116058],{},"max_steps"," 是一个 episode 最多运行多少步。",[31,116061,116062],{},"steps"," 记录当前 episode 已经走了多少步。",[25,116065,116066],{"className":27,"code":114132,"language":29,"meta":22,"style":22},[31,116067,116068],{"__ignoreMap":22},[34,116069,116070,116072,116074,116076,116078,116080,116082,116084,116086,116088,116090,116092,116094,116096,116098,116100,116102,116104,116106,116108],{"class":36,"line":37},[34,116071,31286],{"class":63},[34,116073,114141],{"class":59},[34,116075,447],{"class":112},[34,116077,114146],{"class":59},[34,116079,114149],{"class":5680},[34,116081,114152],{"class":112},[34,116083,102790],{"class":63},[34,116085,12899],{"class":59},[34,116087,114159],{"class":5680},[34,116089,447],{"class":112},[34,116091,102790],{"class":63},[34,116093,12899],{"class":59},[34,116095,96422],{"class":5680},[34,116097,447],{"class":112},[34,116099,617],{"class":59},[34,116101,70],{"class":63},[34,116103,114176],{"class":59},[34,116105,93961],{"class":5680},[34,116107,447],{"class":112},[34,116109,114183],{"class":59},[14,116111,116112,116113,116116,116117,101405,116120,116123],{},"定义动作空间。",[31,116114,116115],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[31,116118,116119],{},"low=-1.0",[31,116121,116122],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[25,116125,116126],{"className":27,"code":114193,"language":29,"meta":22,"style":22},[31,116127,116128],{"__ignoreMap":22},[34,116129,116130,116132,116134,116136,116138,116140,116142,116144,116146,116148,116150,116152,116154,116156,116158,116160,116162,116164],{"class":36,"line":37},[34,116131,31286],{"class":63},[34,116133,114202],{"class":59},[34,116135,447],{"class":112},[34,116137,114146],{"class":59},[34,116139,114149],{"class":5680},[34,116141,114152],{"class":112},[34,116143,114213],{"class":59},[34,116145,114159],{"class":5680},[34,116147,447],{"class":112},[34,116149,114213],{"class":59},[34,116151,96422],{"class":5680},[34,116153,447],{"class":112},[34,116155,617],{"class":59},[34,116157,1053],{"class":63},[34,116159,114176],{"class":59},[34,116161,93961],{"class":5680},[34,116163,447],{"class":112},[34,116165,114183],{"class":59},[14,116167,116168,116169,116172,116173,116176],{},"定义观测空间。",[31,116170,116171],{},"shape=(10,)"," 表示观测是 10 个数。",[31,116174,116175],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[25,116178,116180],{"className":27,"code":116179,"language":29,"meta":22,"style":22},"def _get_obs(self) -> np.ndarray:\n",[31,116181,116182],{"__ignoreMap":22},[34,116183,116184,116186,116188],{"class":36,"line":37},[34,116185,32410],{"class":112},[34,116187,114743],{"class":2427},[34,116189,114746],{"class":59},[14,116191,116192,116193,116195],{},"定义内部函数，用来生成观测。函数名前面的 ",[31,116194,1596],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[25,116197,116199],{"className":27,"code":116198,"language":29,"meta":22,"style":22},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[31,116200,116201,116215],{"__ignoreMap":22},[34,116202,116203,116205,116207,116209,116211,116213],{"class":36,"line":37},[34,116204,111955],{"class":59},[34,116206,447],{"class":112},[34,116208,39335],{"class":63},[34,116210,114757],{"class":59},[34,116212,31286],{"class":63},[34,116214,114762],{"class":59},[34,116216,116217,116219,116221,116223,116225,116227],{"class":36,"line":44},[34,116218,111965],{"class":59},[34,116220,447],{"class":112},[34,116222,39335],{"class":63},[34,116224,114757],{"class":59},[34,116226,31286],{"class":63},[34,116228,114777],{"class":59},[14,116230,116231],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[25,116233,116235],{"className":27,"code":116234,"language":29,"meta":22,"style":22},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[31,116236,116237,116253],{"__ignoreMap":22},[34,116238,116239,116241,116243,116245,116247,116249,116251],{"class":36,"line":37},[34,116240,111241],{"class":59},[34,116242,447],{"class":112},[34,116244,114786],{"class":59},[34,116246,31286],{"class":63},[34,116248,114791],{"class":59},[34,116250,31286],{"class":63},[34,116252,114796],{"class":59},[34,116254,116255,116257],{"class":36,"line":44},[34,116256,17510],{"class":112},[34,116258,114803],{"class":59},[14,116260,116261,116262,116265,116266,116268],{},"拼接观测，并转换成 ",[31,116263,116264],{},"float32","。很多强化学习库默认使用 ",[31,116267,116264],{},"，所以这里主动转换。",[25,116270,116271],{"className":27,"code":115674,"language":29,"meta":22,"style":22},[31,116272,116273],{"__ignoreMap":22},[34,116274,116275,116277,116279,116281,116283,116285,116287,116289,116291,116293,116295,116297,116299,116301,116303,116305,116307],{"class":36,"line":37},[34,116276,32410],{"class":112},[34,116278,114909],{"class":2427},[34,116280,114912],{"class":59},[34,116282,1062],{"class":112},[34,116284,114917],{"class":59},[34,116286,620],{"class":63},[34,116288,25574],{"class":112},[34,116290,39395],{"class":63},[34,116292,14028],{"class":112},[34,116294,39395],{"class":63},[34,116296,114930],{"class":59},[34,116298,114933],{"class":63},[34,116300,25574],{"class":112},[34,116302,39395],{"class":63},[34,116304,14028],{"class":112},[34,116306,39395],{"class":63},[34,116308,31249],{"class":59},[14,116310,116311,116312,116314,116315,116318],{},"定义 reset。",[31,116313,114953],{}," 用来控制随机数，保证实验可以复现。",[31,116316,116317],{},"options"," 用来接收额外配置，本章暂时不用。",[25,116320,116322],{"className":27,"code":116321,"language":29,"meta":22,"style":22},"super().reset(seed=seed)\n",[31,116323,116324],{"__ignoreMap":22},[34,116325,116326,116328,116330,116332,116334],{"class":36,"line":37},[34,116327,115915],{"class":63},[34,116329,114950],{"class":59},[34,116331,114953],{"class":5680},[34,116333,447],{"class":112},[34,116335,114958],{"class":59},[14,116337,116338,116339,116342],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[31,116340,116341],{},"self.np_random"," 生成可复现的随机数。",[25,116344,116346],{"className":27,"code":116345,"language":29,"meta":22,"style":22},"mujoco.mj_resetData(self.model, self.data)\n",[31,116347,116348],{"__ignoreMap":22},[34,116349,116350,116353,116355,116357,116359],{"class":36,"line":37},[34,116351,116352],{"class":59},"mujoco.mj_resetData(",[34,116354,31286],{"class":63},[34,116356,114968],{"class":59},[34,116358,31286],{"class":63},[34,116360,114973],{"class":59},[14,116362,116363],{},"把 MuJoCo 状态重置到默认状态。",[25,116365,116367],{"className":27,"code":116366,"language":29,"meta":22,"style":22},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[31,116368,116369],{"__ignoreMap":22},[34,116370,116371,116373,116375,116377,116379,116381,116383,116385,116387,116389,116391,116393,116395,116397,116399,116401,116403],{"class":36,"line":37},[34,116372,31286],{"class":63},[34,116374,114984],{"class":59},[34,116376,447],{"class":112},[34,116378,39335],{"class":63},[34,116380,114991],{"class":59},[34,116382,114149],{"class":5680},[34,116384,114152],{"class":112},[34,116386,86671],{"class":63},[34,116388,12899],{"class":59},[34,116390,114159],{"class":5680},[34,116392,447],{"class":112},[34,116394,86671],{"class":63},[34,116396,12899],{"class":59},[34,116398,31959],{"class":5680},[34,116400,447],{"class":112},[34,116402,31286],{"class":63},[34,116404,115016],{"class":59},[14,116406,115728,116407,116410,116411,116414,116415,116417],{},[31,116408,116409],{},"[:]"," 表示修改整个数组。",[31,116412,116413],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[31,116416,102537],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[25,116419,116421],{"className":27,"code":116420,"language":29,"meta":22,"style":22},"self.data.qvel[:] = 0.0\n",[31,116422,116423],{"__ignoreMap":22},[34,116424,116425,116427,116429,116431],{"class":36,"line":37},[34,116426,31286],{"class":63},[34,116428,115023],{"class":59},[34,116430,447],{"class":112},[34,116432,105148],{"class":63},[14,116434,116435],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[25,116437,116439],{"className":27,"code":116438,"language":29,"meta":22,"style":22},"self.steps = 0\nreturn self._get_obs(), {}\n",[31,116440,116441,116451],{"__ignoreMap":22},[34,116442,116443,116445,116447,116449],{"class":36,"line":37},[34,116444,31286],{"class":63},[34,116446,114093],{"class":59},[34,116448,447],{"class":112},[34,116450,47794],{"class":63},[34,116452,116453,116455,116457],{"class":36,"line":44},[34,116454,17510],{"class":112},[34,116456,39335],{"class":63},[34,116458,115063],{"class":59},[14,116460,116461],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[25,116463,116464],{"className":27,"code":115737,"language":29,"meta":22,"style":22},[31,116465,116466],{"__ignoreMap":22},[34,116467,116468,116470,116472],{"class":36,"line":37},[34,116469,32410],{"class":112},[34,116471,115074],{"class":2427},[34,116473,115077],{"class":59},[14,116475,116476],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[25,116478,116480],{"className":27,"code":116479,"language":29,"meta":22,"style":22},"action = np.asarray(action, dtype=np.float32)\n",[31,116481,116482],{"__ignoreMap":22},[34,116483,116484,116486,116488,116490,116492,116494],{"class":36,"line":37},[34,116485,107829],{"class":59},[34,116487,447],{"class":112},[34,116489,115086],{"class":59},[34,116491,93961],{"class":5680},[34,116493,447],{"class":112},[34,116495,114183],{"class":59},[14,116497,116498,116499,28850],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[31,116500,116264],{},[25,116502,116504],{"className":27,"code":116503,"language":29,"meta":22,"style":22},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[31,116505,116506],{"__ignoreMap":22},[34,116507,116508,116510,116512,116514,116516,116518,116520],{"class":36,"line":37},[34,116509,107829],{"class":59},[34,116511,447],{"class":112},[34,116513,107834],{"class":59},[34,116515,31286],{"class":63},[34,116517,115105],{"class":59},[34,116519,31286],{"class":63},[34,116521,115110],{"class":59},[14,116523,116524],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[25,116526,116528],{"className":27,"code":116527,"language":29,"meta":22,"style":22},"self.data.ctrl[:] = action\n",[31,116529,116530],{"__ignoreMap":22},[34,116531,116532,116534,116536,116538],{"class":36,"line":37},[34,116533,31286],{"class":63},[34,116535,115121],{"class":59},[34,116537,447],{"class":112},[34,116539,107857],{"class":59},[14,116541,116542],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[25,116544,116546],{"className":27,"code":116545,"language":29,"meta":22,"style":22},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[31,116547,116548,116564],{"__ignoreMap":22},[34,116549,116550,116552,116554,116556,116558,116560,116562],{"class":36,"line":37},[34,116551,3489],{"class":112},[34,116553,101888],{"class":59},[34,116555,26508],{"class":112},[34,116557,32906],{"class":63},[34,116559,617],{"class":59},[34,116561,31286],{"class":63},[34,116563,115142],{"class":59},[34,116565,116566,116569,116571,116573,116575],{"class":36,"line":44},[34,116567,116568],{"class":59},"    mujoco.mj_step(",[34,116570,31286],{"class":63},[34,116572,114968],{"class":59},[34,116574,31286],{"class":63},[34,116576,114973],{"class":59},[14,116578,116579,116580,116583,116584,116586,116587,28850],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[31,116581,116582],{},"frame_skip=5","，所以外部调用一次 ",[31,116585,114264],{},"，内部实际执行 5 次 ",[31,116588,101602],{},[25,116590,116592],{"className":27,"code":116591,"language":29,"meta":22,"style":22},"self.steps += 1\n",[31,116593,116594],{"__ignoreMap":22},[34,116595,116596,116598,116600,116602],{"class":36,"line":37},[34,116597,31286],{"class":63},[34,116599,114093],{"class":59},[34,116601,9941],{"class":112},[34,116603,56160],{"class":63},[14,116605,116606],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[25,116608,116610],{"className":27,"code":116609,"language":29,"meta":22,"style":22},"obs = self._get_obs()\nreward = self._get_reward()\n",[31,116611,116612,116622],{"__ignoreMap":22},[34,116613,116614,116616,116618,116620],{"class":36,"line":37},[34,116615,111241],{"class":59},[34,116617,447],{"class":112},[34,116619,39335],{"class":63},[34,116621,115184],{"class":59},[34,116623,116624,116626,116628,116630],{"class":36,"line":44},[34,116625,111392],{"class":59},[34,116627,447],{"class":112},[34,116629,39335],{"class":63},[34,116631,115195],{"class":59},[14,116633,116634],{},"计算新的观测和奖励。",[25,116636,116638],{"className":27,"code":116637,"language":29,"meta":22,"style":22},"dist = float(np.linalg.norm(tip - target))\n",[31,116639,116640],{"__ignoreMap":22},[34,116641,116642,116644,116646,116648,116650,116652],{"class":36,"line":37},[34,116643,111983],{"class":59},[34,116645,447],{"class":112},[34,116647,110184],{"class":63},[34,116649,115238],{"class":59},[34,116651,113],{"class":112},[34,116653,115243],{"class":59},[14,116655,116656],{},"计算末端到目标的距离，并转换成 Python float。",[25,116658,116659],{"className":27,"code":114064,"language":29,"meta":22,"style":22},[31,116660,116661,116673],{"__ignoreMap":22},[34,116662,116663,116665,116667,116669,116671],{"class":36,"line":37},[34,116664,114071],{"class":59},[34,116666,447],{"class":112},[34,116668,114076],{"class":59},[34,116670,1515],{"class":112},[34,116672,114081],{"class":63},[34,116674,116675,116677,116679,116681,116683,116685,116687],{"class":36,"line":44},[34,116676,114086],{"class":59},[34,116678,447],{"class":112},[34,116680,39335],{"class":63},[34,116682,114093],{"class":59},[34,116684,2174],{"class":112},[34,116686,39335],{"class":63},[34,116688,114100],{"class":59},[14,116690,116691],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[25,116693,116695],{"className":27,"code":116694,"language":29,"meta":22,"style":22},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[31,116696,116697,116710],{"__ignoreMap":22},[34,116698,116699,116702,116704,116706,116708],{"class":36,"line":37},[34,116700,116701],{"class":59},"info ",[34,116703,447],{"class":112},[34,116705,4912],{"class":59},[34,116707,115289],{"class":187},[34,116709,115292],{"class":59},[34,116711,116712,116714],{"class":36,"line":44},[34,116713,17510],{"class":112},[34,116715,115299],{"class":59},[14,116717,116718,116721],{},[31,116719,116720],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[25,116723,116725],{"className":27,"code":116724,"language":29,"meta":22,"style":22},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[31,116726,116727,116736],{"__ignoreMap":22},[34,116728,116729,116732,116734],{"class":36,"line":37},[34,116730,116731],{"class":59},"env ",[34,116733,447],{"class":112},[34,116735,115329],{"class":59},[34,116737,116738,116740,116742,116744,116746,116748,116750],{"class":36,"line":44},[34,116739,113787],{"class":59},[34,116741,447],{"class":112},[34,116743,115339],{"class":59},[34,116745,114953],{"class":5680},[34,116747,447],{"class":112},[34,116749,319],{"class":63},[34,116751,623],{"class":59},[14,116753,116754,116755,116758],{},"创建环境并重置。",[31,116756,116757],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[25,116760,116762],{"className":27,"code":116761,"language":29,"meta":22,"style":22},"action = env.action_space.sample()\n",[31,116763,116764],{"__ignoreMap":22},[34,116765,116766,116768,116770],{"class":36,"line":37},[34,116767,107829],{"class":59},[34,116769,447],{"class":112},[34,116771,115408],{"class":59},[14,116773,116774],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[555,116776,102703],{"id":102702},[14,116778,105871],{},[25,116780,116783],{"className":116781,"code":116782,"language":5651,"meta":22},[5649],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[31,116784,116782],{"__ignoreMap":22},[14,116786,116787],{},"这个环境已经具备强化学习环境的基本结构。",[14,116789,116790],{},"主函数里使用随机动作：",[25,116792,116793],{"className":27,"code":116761,"language":29,"meta":22,"style":22},[31,116794,116795],{"__ignoreMap":22},[34,116796,116797,116799,116801],{"class":36,"line":37},[34,116798,107829],{"class":59},[34,116800,447],{"class":112},[34,116802,115408],{"class":59},[14,116804,116805],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[555,116807,102735],{"id":102734},[567,116809,116810,116813,116819,116828,116837,116846,116852],{},[570,116811,116812],{},"运行程序。",[570,116814,116815,116816,28850],{},"确认 ",[31,116817,116818],{},"obs.shape == (10,)",[570,116820,111568,116821,116824,116825,28850],{},[31,116822,116823],{},"env.action_space","，应类似 ",[31,116826,116827],{},"Box(-1.0, 1.0, (2,), float32)",[570,116829,105972,116830,116833,116834,28850],{},[31,116831,116832],{},"self.max_steps = 10","，确认环境会更快 ",[31,116835,116836],{},"truncated=True",[570,116838,102798,116839,102801,116842,116845],{},[31,116840,116841],{},"terminated = dist \u003C 0.05",[31,116843,116844],{},"dist \u003C 0.2","，观察是否更容易结束。",[570,116847,102798,116848,116851],{},[31,116849,116850],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[570,116853,116854,116855,116857,116858,116861],{},"在 ",[31,116856,116720],{}," 里加入 ",[31,116859,116860],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[555,116863,102840],{"id":102839},[584,116865,116867],{"id":116866},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116869,116870,116871,116873],{},"Gymnasium 的 ",[31,116872,107521],{}," 返回 5 个值:",[25,116875,116877],{"className":27,"code":116876,"language":29,"meta":22,"style":22},"obs, reward, terminated, truncated, info\n",[31,116878,116879],{"__ignoreMap":22},[34,116880,116881],{"class":36,"line":37},[34,116882,116876],{"class":59},[14,116884,116885],{},"不是旧 Gym 的 4 个值。",[584,116887,116889,116892],{"id":116888},"datactrl-action-维度错误",[31,116890,116891],{},"data.ctrl[:] = action"," 维度错误",[14,116894,102910],{},[25,116896,116898],{"className":27,"code":116897,"language":29,"meta":22,"style":22},"print(self.model.nu)\nprint(action.shape)\n",[31,116899,116900,116911],{"__ignoreMap":22},[34,116901,116902,116904,116906,116908],{"class":36,"line":37},[34,116903,30878],{"class":63},[34,116905,617],{"class":59},[34,116907,31286],{"class":63},[34,116909,116910],{"class":59},".model.nu)\n",[34,116912,116913,116915],{"class":36,"line":44},[34,116914,30878],{"class":63},[34,116916,116917],{"class":59},"(action.shape)\n",[14,116919,116920],{},"两者必须匹配。",[584,116922,116924],{"id":116923},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116926,102849],{},[25,116928,116930],{"className":27,"code":116929,"language":29,"meta":22,"style":22},"mujoco.mj_forward(self.model, self.data)\n",[31,116931,116932],{"__ignoreMap":22},[34,116933,116934,116937,116939,116941,116943],{"class":36,"line":37},[34,116935,116936],{"class":59},"mujoco.mj_forward(",[34,116938,31286],{"class":63},[34,116940,114968],{"class":59},[34,116942,31286],{"class":63},[34,116944,114973],{"class":59},[584,116946,116948,116950],{"id":116947},"observation_space-维度和-obs-不一致",[31,116949,113987],{}," 维度和 obs 不一致",[14,116952,102962],{},[25,116954,116956],{"className":27,"code":116955,"language":29,"meta":22,"style":22},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[31,116957,116958,116968,116975],{"__ignoreMap":22},[34,116959,116960,116962,116964,116966],{"class":36,"line":37},[34,116961,111241],{"class":59},[34,116963,447],{"class":112},[34,116965,39335],{"class":63},[34,116967,115184],{"class":59},[34,116969,116970,116972],{"class":36,"line":44},[34,116971,30878],{"class":63},[34,116973,116974],{"class":59},"(obs.shape)\n",[34,116976,116977,116979,116981,116983],{"class":36,"line":50},[34,116978,30878],{"class":63},[34,116980,617],{"class":59},[34,116982,31286],{"class":63},[34,116984,116985],{"class":59},".observation_space.shape)\n",[14,116987,116988],{},"两者必须一致。本章观测是：",[25,116990,116993],{"className":116991,"code":116992,"language":5651,"meta":22},[5649],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[31,116994,116992],{"__ignoreMap":22},[584,116996,116998],{"id":116997},"action-超过范围","action 超过范围",[14,117000,117001],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[25,117003,117004],{"className":27,"code":116503,"language":29,"meta":22,"style":22},[31,117005,117006],{"__ignoreMap":22},[34,117007,117008,117010,117012,117014,117016,117018,117020],{"class":36,"line":37},[34,117009,107829],{"class":59},[34,117011,447],{"class":112},[34,117013,107834],{"class":59},[34,117015,31286],{"class":63},[34,117017,115105],{"class":59},[34,117019,31286],{"class":63},[34,117021,115110],{"class":59},[14,117023,117024,117025,28850],{},"这能避免无效动作直接写入 ",[31,117026,101463],{},[584,117028,117030],{"id":117029},"忘记返回-info","忘记返回 info",[14,117032,116870,117033,101405,117035,117037],{},[31,117034,70517],{},[31,117036,107521],{}," 都会返回 info：",[25,117039,117040],{"className":27,"code":113780,"language":29,"meta":22,"style":22},[31,117041,117042,117050],{"__ignoreMap":22},[34,117043,117044,117046,117048],{"class":36,"line":37},[34,117045,113787],{"class":59},[34,117047,447],{"class":112},[34,117049,113792],{"class":59},[34,117051,117052,117054,117056],{"class":36,"line":44},[34,117053,113797],{"class":59},[34,117055,447],{"class":112},[34,117057,113802],{"class":59},[14,117059,117060,117061,28850],{},"即使暂时没有额外信息，也返回 ",[31,117062,32922],{},[555,117064,117066],{"id":117065},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117068,117069],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[567,117071,117072,117075,117078,117081,117084,117087],{},[570,117073,117074],{},"更稳定的 reward。",[570,117076,117077],{},"合理的 episode 长度。",[570,117079,117080],{},"可重复的随机目标采样。",[570,117082,117083],{},"render 接口。",[570,117085,117086],{},"环境注册代码。",[570,117088,117089],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117091,117092],{},"如果只是自己写训练循环，最小形式是：",[25,117094,117096],{"className":27,"code":117095,"language":29,"meta":22,"style":22},"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",[31,117097,117098,117106,117122,117126,117142,117151,117160,117170],{"__ignoreMap":22},[34,117099,117100,117102,117104],{"class":36,"line":37},[34,117101,116731],{"class":59},[34,117103,447],{"class":112},[34,117105,115329],{"class":59},[34,117107,117108,117110,117112,117114,117116,117118,117120],{"class":36,"line":44},[34,117109,113787],{"class":59},[34,117111,447],{"class":112},[34,117113,115339],{"class":59},[34,117115,114953],{"class":5680},[34,117117,447],{"class":112},[34,117119,319],{"class":63},[34,117121,623],{"class":59},[34,117123,117124],{"class":36,"line":50},[34,117125,2864],{"emptyLinePlaceholder":540},[34,117127,117128,117130,117132,117134,117136,117138,117140],{"class":36,"line":56},[34,117129,3489],{"class":112},[34,117131,101888],{"class":59},[34,117133,26508],{"class":112},[34,117135,32906],{"class":63},[34,117137,617],{"class":59},[34,117139,6874],{"class":63},[34,117141,31249],{"class":59},[34,117143,117144,117147,117149],{"class":36,"line":107},[34,117145,117146],{"class":59},"    action ",[34,117148,447],{"class":112},[34,117150,115408],{"class":59},[34,117152,117153,117156,117158],{"class":36,"line":196},[34,117154,117155],{"class":59},"    obs, reward, terminated, truncated, info ",[34,117157,447],{"class":112},[34,117159,113802],{"class":59},[34,117161,117162,117164,117166,117168],{"class":36,"line":202},[34,117163,3565],{"class":112},[34,117165,115474],{"class":59},[34,117167,115477],{"class":112},[34,117169,115480],{"class":59},[34,117171,117172,117175,117177],{"class":36,"line":207},[34,117173,117174],{"class":59},"        obs, info ",[34,117176,447],{"class":112},[34,117178,113792],{"class":59},[555,117180,117182],{"id":117181},"_9本章小结","9.本章小结",[14,117184,117185],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[25,117187,117190],{"className":117188,"code":117189,"language":5651,"meta":22},[5649],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[31,117191,117189],{"__ignoreMap":22},[14,117193,117194],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[532,117196,117197],{},"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":22,"searchDepth":44,"depth":44,"links":117199},[117200,117201,117202,117209,117213,117214,117215,117225,117226],{"id":101033,"depth":44,"text":101034},{"id":101156,"depth":44,"text":101157},{"id":101431,"depth":44,"text":101432,"children":117203},[117204,117206,117208],{"id":114011,"depth":50,"text":117205},"terminated 和 truncated 的区别",{"id":114114,"depth":50,"text":117207},"observation_space 和 action_space",{"id":114241,"depth":50,"text":114242},{"id":101639,"depth":44,"text":101640,"children":117210},[117211,117212],{"id":101959,"depth":50,"text":101959},{"id":102095,"depth":50,"text":102095},{"id":102702,"depth":44,"text":102703},{"id":102734,"depth":44,"text":102735},{"id":102839,"depth":44,"text":102840,"children":117216},[117217,117218,117220,117221,117223,117224],{"id":116866,"depth":50,"text":116867},{"id":116888,"depth":50,"text":117219},"data.ctrl[:] = action 维度错误",{"id":116923,"depth":50,"text":116924},{"id":116947,"depth":50,"text":117222},"observation_space 维度和 obs 不一致",{"id":116997,"depth":50,"text":116998},{"id":117029,"depth":50,"text":117030},{"id":117065,"depth":44,"text":117066},{"id":117181,"depth":44,"text":117182},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113764,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117233,"title":117234,"body":117235,"description":117658,"extension":538,"meta":117659,"navigation":540,"path":117660,"seo":117661,"stem":117662,"__hash__":117663},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117236,"toc":117648},[117237,117241,117244,117247,117267,117273,117279,117289,117292,117295,117315,117318,117322,117325,117331,117334,117348,117351,117354,117428,117431,117437,117440,117463,117466,117516,117519,117525,117528,117531,117534,117553,117556,117562,117565,117568,117571,117591,117594,117597,117600,117645],[10,117238,117240],{"id":117239},"mujoco-学习","MuJoCo 学习",[14,117242,117243],{},"初版",[14,117245,117246],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[567,117248,117249,117252,117255,117264],{},[570,117250,117251],{},"MuJoCo 模型文件在描述什么。",[570,117253,117254],{},"Python 代码怎样读取和推进仿真。",[570,117256,117257,822,117259,822,117261,117263],{},[31,117258,104417],{},[31,117260,104747],{},[31,117262,104750],{}," 这些数组为什么重要。",[570,117265,117266],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117268,117269,117270,117272],{},"默认环境为 Fedora 44、Python >= 3.10、",[31,117271,101414],{}," 官方 Python bindings。",[14,117274,117275,117276,117278],{},"注意：本文禁止使用 ",[31,117277,101399],{},"。所有示例均使用：",[25,117280,117281],{"className":27,"code":101965,"language":29,"meta":22,"style":22},[31,117282,117283],{"__ignoreMap":22},[34,117284,117285,117287],{"class":36,"line":37},[34,117286,30855],{"class":112},[34,117288,101688],{"class":59},[555,117290,117291],{"id":117291},"适合谁阅读",[14,117293,117294],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[567,117296,117297,117300,117303,117306],{},[570,117298,117299],{},"没学过 MuJoCo，只会一点 Python。",[570,117301,117302],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[570,117304,117305],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[570,117307,117308,117309,117311,117312,117314],{},"以前接触过 ",[31,117310,101399],{},"，现在想迁移到官方 ",[31,117313,101408],{}," Python bindings。",[14,117316,117317],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[555,117319,117321],{"id":117320},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117323,117324],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[25,117326,117329],{"className":117327,"code":117328,"language":5651,"meta":22},[5649],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[31,117330,117328],{"__ignoreMap":22},[14,117332,117333],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[567,117335,117336,117339,117342,117345],{},[570,117337,117338],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[570,117340,117341],{},"快速测试控制算法，不必一开始就上真实机器人。",[570,117343,117344],{},"生成强化学习环境。",[570,117346,117347],{},"采集状态、动作、图像、奖励等训练数据。",[555,117349,117350],{"id":117350},"学习前的心智模型",[14,117352,117353],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[748,117355,117356,117368],{},[751,117357,117358],{},[754,117359,117360,117363,117366],{},[757,117361,117362],{"align":24200},"部分",[757,117364,117365],{"align":24200},"负责什么",[757,117367,21651],{"align":24200},[795,117369,117370,117381,117393,117405,117417],{},[754,117371,117372,117375,117378],{},[800,117373,117374],{"align":24200},"MJCF XML",[800,117376,117377],{"align":24200},"定义世界和机器人结构",[800,117379,117380],{"align":24200},"地面、盒子、关节、电机、摄像头",[754,117382,117383,117387,117390],{},[800,117384,117385],{"align":24200},[31,117386,101096],{},[800,117388,117389],{"align":24200},"编译后的静态模型",[800,117391,117392],{"align":24200},"有几个关节、有几个电机、时间步长是多少",[754,117394,117395,117399,117402],{},[800,117396,117397],{"align":24200},[31,117398,101106],{},[800,117400,117401],{"align":24200},"运行中的动态状态",[800,117403,117404],{"align":24200},"当前时间、位置、速度、电机输入",[754,117406,117407,117411,117414],{},[800,117408,117409],{"align":24200},[31,117410,101602],{},[800,117412,117413],{"align":24200},"推进一步物理仿真",[800,117415,117416],{"align":24200},"根据重力、力、碰撞更新状态",[754,117418,117419,117422,117425],{},[800,117420,117421],{"align":24200},"Viewer \u002F Renderer",[800,117423,117424],{"align":24200},"把仿真显示出来",[800,117426,117427],{"align":24200},"打开窗口或保存图片",[14,117429,117430],{},"一句话总结：",[25,117432,117435],{"className":117433,"code":117434,"language":5651,"meta":22},[5649],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[31,117436,117434],{"__ignoreMap":22},[14,117438,117439],{},"参考来源：",[1611,117441,117442,117449,117456],{},[570,117443,117444,117445],{},"MuJoCo Python 官方文档：",[847,117446,117447],{"href":117447,"rel":117448},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24329],[570,117450,117451,117452],{},"MuJoCo XML Reference：",[847,117453,117454],{"href":117454,"rel":117455},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24329],[570,117457,117458,117459],{},"MuJoCo Overview：",[847,117460,117461],{"href":117461,"rel":117462},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24329],[555,117464,117465],{"id":117465},"章节目录",[567,117467,117468,117474,117480,117486,117492,117498,117504,117510],{},[570,117469,117470],{},[847,117471,117473],{"href":117472},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[570,117475,117476],{},[847,117477,117479],{"href":117478},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[570,117481,117482],{},[847,117483,117485],{"href":117484},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[570,117487,117488],{},[847,117489,117491],{"href":117490},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[570,117493,117494],{},[847,117495,117497],{"href":117496},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[570,117499,117500],{},[847,117501,117503],{"href":117502},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[570,117505,117506],{},[847,117507,117509],{"href":117508},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[570,117511,117512],{},[847,117513,117515],{"href":117514},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[555,117517,117518],{"id":117518},"推荐学习路线",[25,117520,117523],{"className":117521,"code":117522,"language":5651,"meta":22},[5649],"环境安装\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",[31,117524,117522],{"__ignoreMap":22},[14,117526,117527],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[555,117529,117530],{"id":117530},"建议的目录结构",[14,117532,117533],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[25,117535,117537],{"className":24286,"code":117536,"language":24288,"meta":22,"style":22},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[31,117538,117539,117547],{"__ignoreMap":22},[34,117540,117541,117543,117545],{"class":36,"line":37},[34,117542,101653],{"class":2427},[34,117544,29681],{"class":63},[34,117546,101658],{"class":187},[34,117548,117549,117551],{"class":36,"line":44},[34,117550,101663],{"class":63},[34,117552,101658],{"class":187},[14,117554,117555],{},"每一章的代码都单独保存：",[25,117557,117560],{"className":117558,"code":117559,"language":5651,"meta":22},[5649],"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",[31,117561,117559],{"__ignoreMap":22},[14,117563,117564],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[555,117566,117567],{"id":117567},"学习方法",[14,117569,117570],{},"每章建议按这个顺序操作：",[567,117572,117573,117576,117579,117582,117585,117588],{},[570,117574,117575],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[570,117577,117578],{},"复制最小可运行代码，保存成指定文件。",[570,117580,117581],{},"运行代码，确认没有报错。",[570,117583,117584],{},"对照“运行结果说明”理解输出。",[570,117586,117587],{},"做“验证步骤”，主动改一两个参数。",[570,117589,117590],{},"遇到报错先看“常见错误与解决方案”。",[14,117592,117593],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[555,117595,117596],{"id":117596},"全局排错顺序",[14,117598,117599],{},"遇到问题时，按下面顺序查：",[567,117601,117602,117608,117614,117619,117622,117625,117632,117642],{},[570,117603,117604,117605],{},"Python 环境是否激活：",[31,117606,117607],{},"which python",[570,117609,117610,117611],{},"MuJoCo 是否能导入：",[31,117612,117613],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[570,117615,117616,117617],{},"是否误装了 ",[31,117618,101399],{},[570,117620,117621],{},"XML 标签是否闭合、属性是否拼写正确",[570,117623,117624],{},"actuator 引用的 joint 名字是否存在",[570,117626,117627,117629,117630],{},[31,117628,101463],{}," 的长度是否等于 ",[31,117631,102545],{},[570,117633,105972,117634,83000,117636,117638,117639],{},[31,117635,104417],{},[31,117637,104747],{}," 后是否调用了 ",[31,117640,117641],{},"mujoco.mj_forward",[570,117643,117644],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[532,117646,117647],{},"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":22,"searchDepth":44,"depth":44,"links":117649},[117650,117651,117652,117653,117654,117655,117656,117657],{"id":117291,"depth":44,"text":117291},{"id":117320,"depth":44,"text":117321},{"id":117350,"depth":44,"text":117350},{"id":117465,"depth":44,"text":117465},{"id":117518,"depth":44,"text":117518},{"id":117530,"depth":44,"text":117530},{"id":117567,"depth":44,"text":117567},{"id":117596,"depth":44,"text":117596},"仿真搭建。",{"category":23842},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117234,"description":117658},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117665,"title":117666,"body":117667,"description":537,"extension":538,"meta":118122,"navigation":540,"path":118123,"seo":118124,"stem":118125,"__hash__":118126},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117668,"toc":118120},[117669,117672,117675,117681,118117],[10,117670,117666],{"id":117671},"_1-最常用的基本操作更新",[14,117673,117674],{},"装linux系统教程：",[14,117676,117677],{},[847,117678,117679],{"href":117679,"rel":117680},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24329],[25,117682,117686],{"className":117683,"code":117684,"language":117685,"meta":22,"style":22},"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",[31,117687,117688,117693,117698,117707,117712,117721,117726,117746,117751,117762,117767,117776,117781,117809,117814,117833,117838,117857,117861,117866,117882,117886,117891,117921,117925,117930,117946,117950,117955,117970,117974,117979,117995,117999,118004,118016,118028,118032,118037,118054,118058,118063,118081,118085,118090,118099,118103,118108],{"__ignoreMap":22},[34,117689,117690],{"class":36,"line":37},[34,117691,117692],{"class":40},"#更新相关的知识\n",[34,117694,117695],{"class":36,"line":44},[34,117696,117697],{"class":40},"# 更新软件包列表（从服务器获取最新软件信息）\n",[34,117699,117700,117702,117705],{"class":36,"line":50},[34,117701,25041],{"class":2427},[34,117703,117704],{"class":187}," apt",[34,117706,26707],{"class":187},[34,117708,117709],{"class":36,"line":56},[34,117710,117711],{"class":40},"# 升级所有可更新的软件包（不删除旧包）\n",[34,117713,117714,117716,117718],{"class":36,"line":107},[34,117715,25041],{"class":2427},[34,117717,117704],{"class":187},[34,117719,117720],{"class":187}," upgrade\n",[34,117722,117723],{"class":36,"line":196},[34,117724,117725],{"class":40},"#更新和升级软件包\n",[34,117727,117728,117730,117732,117735,117737,117739,117741,117744],{"class":36,"line":202},[34,117729,25041],{"class":2427},[34,117731,117704],{"class":187},[34,117733,117734],{"class":187}," update",[34,117736,26655],{"class":59},[34,117738,25041],{"class":2427},[34,117740,117704],{"class":187},[34,117742,117743],{"class":187}," upgrade",[34,117745,101368],{"class":63},[34,117747,117748],{"class":36,"line":207},[34,117749,117750],{"class":40},"#列出可更新的软件包及版本信息\n",[34,117752,117753,117756,117759],{"class":36,"line":222},[34,117754,117755],{"class":2427},"apt",[34,117757,117758],{"class":187}," list",[34,117760,117761],{"class":63}," --upgradable\n",[34,117763,117764],{"class":36,"line":227},[34,117765,117766],{"class":40},"#彻底升级（处理依赖关系，可能删除旧包）\n",[34,117768,117769,117771,117773],{"class":36,"line":232},[34,117770,25041],{"class":2427},[34,117772,117704],{"class":187},[34,117774,117775],{"class":187}," full-upgrade\n",[34,117777,117778],{"class":36,"line":238},[34,117779,117780],{"class":40},"#设置指定版本\n",[34,117782,117783,117785,117787,117789,117791,117794,117796,117798,117800,117802,117805,117807],{"class":36,"line":244},[34,117784,25041],{"class":2427},[34,117786,117704],{"class":187},[34,117788,24298],{"class":187},[34,117790,29367],{"class":112},[34,117792,117793],{"class":187},"package_nam",[34,117795,687],{"class":59},[34,117797,1564],{"class":112},[34,117799,447],{"class":187},[34,117801,1515],{"class":112},[34,117803,117804],{"class":187},"version_numbe",[34,117806,1276],{"class":59},[34,117808,51768],{"class":112},[34,117810,117811],{"class":36,"line":250},[34,117812,117813],{"class":40},"#只安装软件包不升级\n",[34,117815,117816,117818,117820,117822,117824,117826,117828,117830],{"class":36,"line":256},[34,117817,25041],{"class":2427},[34,117819,117704],{"class":187},[34,117821,24298],{"class":187},[34,117823,29367],{"class":112},[34,117825,117793],{"class":187},[34,117827,687],{"class":59},[34,117829,1564],{"class":112},[34,117831,117832],{"class":63}," --no-upgrade\n",[34,117834,117835],{"class":36,"line":261},[34,117836,117837],{"class":40},"#只升级，不存在就不安装\n",[34,117839,117840,117842,117844,117846,117848,117850,117852,117854],{"class":36,"line":267},[34,117841,25041],{"class":2427},[34,117843,117704],{"class":187},[34,117845,24298],{"class":187},[34,117847,29367],{"class":112},[34,117849,117793],{"class":187},[34,117851,687],{"class":59},[34,117853,1564],{"class":112},[34,117855,117856],{"class":63}," --only-upgrade\n",[34,117858,117859],{"class":36,"line":2138},[34,117860,2864],{"emptyLinePlaceholder":540},[34,117862,117863],{"class":36,"line":2143},[34,117864,117865],{"class":40},"#安装指定的软件命令\n",[34,117867,117868,117870,117872,117874,117876,117878,117880],{"class":36,"line":2157},[34,117869,25041],{"class":2427},[34,117871,117704],{"class":187},[34,117873,24298],{"class":187},[34,117875,29367],{"class":112},[34,117877,117793],{"class":187},[34,117879,687],{"class":59},[34,117881,51768],{"class":112},[34,117883,117884],{"class":36,"line":2162},[34,117885,2864],{"emptyLinePlaceholder":540},[34,117887,117888],{"class":36,"line":2191},[34,117889,117890],{"class":40},"#安装多个软件包\n",[34,117892,117893,117895,117897,117899,117901,117904,117907,117909,117911,117914,117916,117918],{"class":36,"line":2196},[34,117894,25041],{"class":2427},[34,117896,117704],{"class":187},[34,117898,24298],{"class":187},[34,117900,29367],{"class":112},[34,117902,117903],{"class":187},"package_",[34,117905,117906],{"class":112},"1>",[34,117908,29367],{"class":112},[34,117910,117903],{"class":187},[34,117912,117913],{"class":112},"2>",[34,117915,29367],{"class":112},[34,117917,117903],{"class":187},[34,117919,117920],{"class":112},"3>\n",[34,117922,117923],{"class":36,"line":2213},[34,117924,2864],{"emptyLinePlaceholder":540},[34,117926,117927],{"class":36,"line":2218},[34,117928,117929],{"class":40},"#更新指定的软件命令\n",[34,117931,117932,117934,117936,117938,117940,117942,117944],{"class":36,"line":2223},[34,117933,25041],{"class":2427},[34,117935,117704],{"class":187},[34,117937,117734],{"class":187},[34,117939,29367],{"class":112},[34,117941,117793],{"class":187},[34,117943,687],{"class":59},[34,117945,51768],{"class":112},[34,117947,117948],{"class":36,"line":2228},[34,117949,2864],{"emptyLinePlaceholder":540},[34,117951,117952],{"class":36,"line":2242},[34,117953,117954],{"class":40},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[34,117956,117957,117959,117962,117964,117966,117968],{"class":36,"line":2247},[34,117958,117755],{"class":2427},[34,117960,117961],{"class":187}," show",[34,117963,29367],{"class":112},[34,117965,117793],{"class":187},[34,117967,687],{"class":59},[34,117969,51768],{"class":112},[34,117971,117972],{"class":36,"line":3041},[34,117973,2864],{"emptyLinePlaceholder":540},[34,117975,117976],{"class":36,"line":3055},[34,117977,117978],{"class":40},"#删除软件包命令\n",[34,117980,117981,117983,117985,117987,117989,117991,117993],{"class":36,"line":3063},[34,117982,25041],{"class":2427},[34,117984,117704],{"class":187},[34,117986,26544],{"class":187},[34,117988,29367],{"class":112},[34,117990,117793],{"class":187},[34,117992,687],{"class":59},[34,117994,51768],{"class":112},[34,117996,117997],{"class":36,"line":3068},[34,117998,2864],{"emptyLinePlaceholder":540},[34,118000,118001],{"class":36,"line":3074},[34,118002,118003],{"class":40},"# 清理旧版本和缓存（释放磁盘空间）\n",[34,118005,118006,118008,118010,118013],{"class":36,"line":3080},[34,118007,25041],{"class":2427},[34,118009,117704],{"class":187},[34,118011,118012],{"class":187}," autoremove",[34,118014,118015],{"class":40},"  # 删除不再需要的依赖和库文件\n",[34,118017,118018,118020,118022,118025],{"class":36,"line":3085},[34,118019,25041],{"class":2427},[34,118021,117704],{"class":187},[34,118023,118024],{"class":187}," clean",[34,118026,118027],{"class":40},"       # 清理下载的缓存包\n",[34,118029,118030],{"class":36,"line":8412},[34,118031,2864],{"emptyLinePlaceholder":540},[34,118033,118034],{"class":36,"line":8436},[34,118035,118036],{"class":40},"#移除软件包及配置文件\n",[34,118038,118039,118041,118043,118046,118048,118050,118052],{"class":36,"line":8441},[34,118040,25041],{"class":2427},[34,118042,117704],{"class":187},[34,118044,118045],{"class":187}," purge",[34,118047,29367],{"class":112},[34,118049,117793],{"class":187},[34,118051,687],{"class":59},[34,118053,51768],{"class":112},[34,118055,118056],{"class":36,"line":8447},[34,118057,2864],{"emptyLinePlaceholder":540},[34,118059,118060],{"class":36,"line":8474},[34,118061,118062],{"class":40},"#查找软件包命令\n",[34,118064,118065,118067,118069,118072,118074,118077,118079],{"class":36,"line":8479},[34,118066,25041],{"class":2427},[34,118068,117704],{"class":187},[34,118070,118071],{"class":187}," search",[34,118073,29367],{"class":112},[34,118075,118076],{"class":187},"keywor",[34,118078,922],{"class":59},[34,118080,51768],{"class":112},[34,118082,118083],{"class":36,"line":8485},[34,118084,2864],{"emptyLinePlaceholder":540},[34,118086,118087],{"class":36,"line":8497},[34,118088,118089],{"class":40},"#列出所有已安装的包\n",[34,118091,118092,118094,118096],{"class":36,"line":8509},[34,118093,117755],{"class":2427},[34,118095,117758],{"class":187},[34,118097,118098],{"class":63}," --installed\n",[34,118100,118101],{"class":36,"line":8521},[34,118102,2864],{"emptyLinePlaceholder":540},[34,118104,118105],{"class":36,"line":10180},[34,118106,118107],{"class":40},"#列出所有已安装的包的版本信息\n",[34,118109,118110,118112,118114],{"class":36,"line":10205},[34,118111,117755],{"class":2427},[34,118113,117758],{"class":187},[34,118115,118116],{"class":63}," --all-versions\n",[532,118118,118119],{},"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":22,"searchDepth":44,"depth":44,"links":118121},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117666,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118128,"title":118129,"body":118130,"description":537,"extension":538,"meta":118871,"navigation":540,"path":118872,"seo":118873,"stem":118874,"__hash__":118875},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118131,"toc":118858},[118132,118135,118139,118142,118148,118152,118156,118162,118167,118172,118177,118182,118187,118190,118193,118196,118199,118203,118206,118211,118214,118219,118222,118227,118234,118237,118240,118243,118246,118249,118260,118264,118268,118273,118278,118282,118287,118291,118296,118300,118304,118309,118312,118357,118362,118366,118370,118375,118381,118386,118396,118401,118411,118416,118421,118448,118452,118455,118460,118463,118488,118492,118497,118500,118505,118510,118530,118535,118538,118553,118557,118610,118613,118618,118622,118625,118640,118643,118646,118651,118655,118659,118662,118666,118670,118673,118678,118683,118687,118694,118702,118705,118712,118717,118722,118725,118730,118737,118742,118749,118753,118755,118760,118764,118767,118770,118775,118778,118783,118786,118791,118796,118801,118805,118810,118814,118855],[10,118133,118129],{"id":118134},"_2-linux装机教程",[555,118136,118138],{"id":118137},"_21-实体机","2.1 实体机",[14,118140,118141],{},"使用清华源：（Ubuntu24.04）",[14,118143,118144],{},[847,118145,118146],{"href":118146,"rel":118147},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24329],[555,118149,118151],{"id":118150},"_22-普通虚拟机","2.2 普通虚拟机",[584,118153,118155],{"id":118154},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118157,118158],{},[847,118159,118160],{"href":118160,"rel":118161},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24329],[14,118163,118164],{},[20,118165],{"alt":22,"src":118166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118168,118169],{},[20,118170],{"alt":22,"src":118171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118173,118174],{},[20,118175],{"alt":22,"src":118176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118178,118179],{},[20,118180],{"alt":22,"src":118181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118183,118184],{},[20,118185],{"alt":22,"src":118186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118188,118189],{},"内存4G（4096MB）；",[14,118191,118192],{},"CPU给4个核；",[14,118194,118195],{},"硬盘动态分配60G；",[14,118197,118198],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[584,118200,118202],{"id":118201},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118204,118205],{},"按照1.1的步骤下载Ubuntu",[14,118207,118208],{},[20,118209],{"alt":22,"src":118210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118212,118213],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118215,118216],{},[20,118217],{"alt":22,"src":118218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118220,118221],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118223,118224],{},[20,118225],{"alt":22,"src":118226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118228,118229,118230,118233],{},"选择“正常安装”(找不到都用Alt+F7)， ",[760,118231,118232],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118235,118236],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118238,118239],{},"将改动写入磁盘吗 继续",[14,118241,118242],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118244,118245],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118247,118248],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118250,118251,118252,118255,118256,118259],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[760,118253,118254],{},"除了"," 选不发送系统信息与不升级之外， ",[760,118257,118258],{},"其它"," 都跳过或前进）",[584,118261,118263],{"id":118262},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22462,118265,118267],{"id":118266},"_2231-全屏","2.2.3.1 全屏",[14,118269,118270],{},[20,118271],{"alt":22,"src":118272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118274,118275],{},[20,118276],{"alt":22,"src":118277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22462,118279,118281],{"id":118280},"_2232-文件交换","2.2.3.2 文件交换",[14,118283,118284],{},[20,118285],{"alt":22,"src":118286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22462,118288,118290],{"id":118289},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118292,118293],{},[20,118294],{"alt":22,"src":118295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[555,118297,118299],{"id":118298},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[584,118301,118303],{"id":118302},"_231-简介与优缺点","2.3.1 简介与优缺点",[567,118305,118306],{},[570,118307,118308],{},"什么情况下推荐？",[14,118310,118311],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[567,118313,118314],{"start":44},[570,118315,118316,118317],{},"优缺点：",[567,118318,118319,118349],{},[570,118320,118321,118322],{},"优点：",[567,118323,118324,118327,118334,118337,118340,118343,118346],{},[570,118325,118326],{},"WSL2是最好的Linux发行版;(bushi)",[570,118328,118329,118330,118333],{},"性能损耗极低。且比在Windows上跑深度性能 ",[760,118331,118332],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[570,118335,118336],{},"非常方便调用USB设备，可以USB直通;",[570,118338,118339],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[570,118341,118342],{},"非常方便Win与WSL2互相传文件等协同操作;",[570,118344,118345],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[570,118347,118348],{},"非常方便使用Windows的VScode远程开发;",[570,118350,118351,118352],{},"缺点：",[567,118353,118354],{},[570,118355,118356],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118358,118359],{},[20,118360],{"alt":22,"src":118361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[584,118363,118365],{"id":118364},"_232-安装教程","2.3.2 安装教程",[22462,118367,118369],{"id":118368},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[567,118371,118372],{},[570,118373,118374],{},"方法一(图形界面)",[14,118376,118377,118378,25083],{},"用Win+R输入",[31,118379,118380],{},"appwiz.cpl",[14,118382,118383],{},[20,118384],{"alt":22,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118387,118388,118389,118392,118393,26938],{},"点击OK进入 ",[760,118390,118391],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[760,118394,118395],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118397,118398],{},[20,118399],{"alt":22,"src":118400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118402,118403,118404,101405,118407,118410],{},"选择 ",[760,118405,118406],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[760,118408,118409],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118412,118413],{},[20,118414],{"alt":22,"src":118415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[567,118417,118418],{"start":44},[570,118419,118420],{},"方法二(命令行)",[25,118422,118426],{"className":118423,"code":118424,"language":118425,"meta":22,"style":22},"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",[31,118427,118428,118433,118438,118443],{"__ignoreMap":22},[34,118429,118430],{"class":36,"line":37},[34,118431,118432],{},"# 开启 Linux 子系统\n",[34,118434,118435],{"class":36,"line":44},[34,118436,118437],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[34,118439,118440],{"class":36,"line":50},[34,118441,118442],{},"# 开启虚拟机平台\n",[34,118444,118445],{"class":36,"line":56},[34,118446,118447],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22462,118449,118451],{"id":118450},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118453,118454],{},"用管理员权限打开powershell",[14,118456,118457],{},[20,118458],{"alt":22,"src":118459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118461,118462],{},"升级WSL并设置默认版本为WSL2",[25,118464,118466],{"className":118423,"code":118465,"language":118425,"meta":22,"style":22},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[31,118467,118468,118473,118478,118483],{"__ignoreMap":22},[34,118469,118470],{"class":36,"line":37},[34,118471,118472],{},"# 更新 wsl\n",[34,118474,118475],{"class":36,"line":44},[34,118476,118477],{},"wsl --update\n",[34,118479,118480],{"class":36,"line":50},[34,118481,118482],{},"# 将 wsl 版本设置为 wsl2\n",[34,118484,118485],{"class":36,"line":56},[34,118486,118487],{},"wsl --set-default-version 2\n",[22462,118489,118491],{"id":118490},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[567,118493,118494],{},[570,118495,118496],{},"方式一(商店下载)",[14,118498,118499],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118501,118502],{},[20,118503],{"alt":22,"src":118504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[567,118506,118507],{"start":44},[570,118508,118509],{},"方式二(命令行安装)",[25,118511,118513],{"className":118423,"code":118512,"language":118425,"meta":22,"style":22},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[31,118514,118515,118520,118525],{"__ignoreMap":22},[34,118516,118517],{"class":36,"line":37},[34,118518,118519],{},"# 列出可安装的 Linux 版本\n",[34,118521,118522],{"class":36,"line":44},[34,118523,118524],{},"#（需要科学手段）\n",[34,118526,118527],{"class":36,"line":50},[34,118528,118529],{},"wsl --list --online\n",[14,118531,118532],{},[20,118533],{"alt":22,"src":118534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118536,118537],{},"选择对应发行版并安装",[25,118539,118541],{"className":118423,"code":118540,"language":118425,"meta":22,"style":22},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[31,118542,118543,118548],{"__ignoreMap":22},[34,118544,118545],{"class":36,"line":37},[34,118546,118547],{},"# Ubuntu安装完毕后需要重启系统\n",[34,118549,118550],{"class":36,"line":44},[34,118551,118552],{},"wsl --install -d Ubuntu-24.04\n",[22462,118554,118556],{"id":118555},"_2324-查看系统状态","2.3.2.4 查看系统状态",[25,118558,118560],{"className":118423,"code":118559,"language":118425,"meta":22,"style":22},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[31,118561,118562,118567,118572,118577,118582,118586,118590,118595,118600,118605],{"__ignoreMap":22},[34,118563,118564],{"class":36,"line":37},[34,118565,118566],{},"# 查看 wsl\n",[34,118568,118569],{"class":36,"line":44},[34,118570,118571],{},"wsl -l\n",[34,118573,118574],{"class":36,"line":50},[34,118575,118576],{},"# 查看 wsl 运行版本或模式\n",[34,118578,118579],{"class":36,"line":56},[34,118580,118581],{},"wsl -l -v\n",[34,118583,118584],{"class":36,"line":107},[34,118585,2864],{"emptyLinePlaceholder":540},[34,118587,118588],{"class":36,"line":196},[34,118589,2864],{"emptyLinePlaceholder":540},[34,118591,118592],{"class":36,"line":202},[34,118593,118594],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[34,118596,118597],{"class":36,"line":207},[34,118598,118599],{},"wsl --set-version \u003Cdistro> 2\n",[34,118601,118602],{"class":36,"line":222},[34,118603,118604],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[34,118606,118607],{"class":36,"line":227},[34,118608,118609],{},"wsl --unregister \u003Cdistro>\n",[14,118611,118612],{},"输出Version为2即正常",[14,118614,118615],{},[20,118616],{"alt":22,"src":118617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22462,118619,118621],{"id":118620},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118623,118624],{},"直接在Powershell里输入wsl命令进入子系统",[25,118626,118628],{"className":118423,"code":118627,"language":118425,"meta":22,"style":22},"# 进入子系统\nwsl\n",[31,118629,118630,118635],{"__ignoreMap":22},[34,118631,118632],{"class":36,"line":37},[34,118633,118634],{},"# 进入子系统\n",[34,118636,118637],{"class":36,"line":44},[34,118638,118639],{},"wsl\n",[14,118641,118642],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118644,118645],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118647,118648],{},[20,118649],{"alt":22,"src":118650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[584,118652,118654],{"id":118653},"_233-配置各种环境","2.3.3 配置各种环境",[22462,118656,118658],{"id":118657},"_2331-换源","2.3.3.1 换源",[14,118660,118661],{},"(同实体机LINUX，往下找教程)",[22462,118663,118665],{"id":118664},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23374,118667,118669],{"id":118668},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118671,118672],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118674,118675],{},[20,118676],{"alt":22,"src":118677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118679,118680],{},[20,118681],{"alt":22,"src":118682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23374,118684,118686],{"id":118685},"_23322-cuda","2.3.3.2.2 CUDA",[14,118688,118689,118690],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[847,118691,118692],{"href":118692,"rel":118693},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24329],[14,118695,118696,118699],{},[20,118697],{"alt":22,"src":118698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[20,118700],{"alt":22,"src":118701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118703,118704],{},"在下方的网站，选择合适的版本。",[14,118706,118707,118708],{},"WSL2 专属 CUDA 指南：",[847,118709,118710],{"href":118710,"rel":118711},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24329],[14,118713,118714],{},[760,118715,118716],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118718,118719],{},[20,118720],{"alt":22,"src":118721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118723,118724],{},"挨行敲一遍",[14,118726,118727],{},[20,118728],{"alt":22,"src":118729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118731,118732,118733,118736],{},"敲完后，输入",[31,118734,118735],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118738,118739],{},[20,118740],{"alt":22,"src":118741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118743,118744,118745,118748],{},"（请详看下方教程的",[760,118746,118747],{},"安装CUDA的配置环境来看","如何配置环境）",[23374,118750,118752],{"id":118751},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118754,118661],{},[14,118756,118757],{},[20,118758],{"alt":22,"src":118759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22462,118761,118763],{"id":118762},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118765,118766],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118768,118769],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118771,118772],{},[20,118773],{"alt":22,"src":118774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118776,118777],{},"连接WSL2",[14,118779,118780],{},[20,118781],{"alt":22,"src":118782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118784,118785],{},"远程开发成功。",[14,118787,118788],{},[20,118789],{"alt":22,"src":118790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118792,118793],{},[20,118794],{"alt":22,"src":118795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118797,118798],{},[20,118799],{"alt":22,"src":118800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22462,118802,118804],{"id":118803},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118806,118807],{},[20,118808],{"alt":22,"src":118809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22462,118811,118813],{"id":118812},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[25,118815,118817],{"className":117683,"code":118816,"language":117685,"meta":22,"style":22},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[31,118818,118819,118827,118835,118846,118850],{"__ignoreMap":22},[34,118820,118821,118823,118825],{"class":36,"line":37},[34,118822,25041],{"class":2427},[34,118824,117704],{"class":187},[34,118826,26707],{"class":187},[34,118828,118829,118831,118833],{"class":36,"line":44},[34,118830,25041],{"class":2427},[34,118832,117704],{"class":187},[34,118834,117720],{"class":187},[34,118836,118837,118839,118841,118843],{"class":36,"line":50},[34,118838,25041],{"class":2427},[34,118840,117704],{"class":187},[34,118842,24298],{"class":187},[34,118844,118845],{"class":187}," mesa-utils\n",[34,118847,118848],{"class":36,"line":56},[34,118849,2864],{"emptyLinePlaceholder":540},[34,118851,118852],{"class":36,"line":107},[34,118853,118854],{"class":40},"#然后重启wsl2即可\n",[532,118856,118857],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":22,"searchDepth":44,"depth":44,"links":118859},[118860,118861,118866],{"id":118137,"depth":44,"text":118138},{"id":118150,"depth":44,"text":118151,"children":118862},[118863,118864,118865],{"id":118154,"depth":50,"text":118155},{"id":118201,"depth":50,"text":118202},{"id":118262,"depth":50,"text":118263},{"id":118298,"depth":44,"text":118299,"children":118867},[118868,118869,118870],{"id":118302,"depth":50,"text":118303},{"id":118364,"depth":50,"text":118365},{"id":118653,"depth":50,"text":118654},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118129,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118877,"title":118878,"body":118879,"description":537,"extension":538,"meta":121815,"navigation":540,"path":121816,"seo":121817,"stem":121818,"__hash__":121819},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118880,"toc":121787},[118881,118884,118888,118894,118898,118904,118908,119096,119099,119104,119108,119112,119115,119118,119124,119129,119132,119135,119140,119173,119178,119182,119259,119262,119267,119271,119274,119313,119316,119325,119343,119348,119355,119472,119477,119480,119507,119512,119516,119525,119575,119582,119586,119589,119603,119610,119644,119649,119653,119676,119679,119684,119688,119691,119694,119697,119739,119743,119746,119749,119790,119794,119798,119801,119806,119811,119814,119837,119840,119848,119853,119856,119861,119866,119869,119874,119878,119883,119906,119911,119973,119981,119986,119991,119994,119999,120002,120007,120012,120030,120035,120041,120046,120060,120064,120067,120070,120073,120116,120119,120124,120225,120228,120233,120237,120241,120278,120282,120286,120290,120336,120340,120385,120389,120396,120404,120459,120462,120539,120542,120565,120569,120572,120577,120582,120590,120593,120598,120603,120608,120611,120616,120625,120628,120633,120636,120707,120712,120715,120720,120723,120728,120731,120736,120739,120744,120749,120752,120827,120830,120843,120848,120851,120865,120868,120897,120902,120931,120934,120939,120943,120948,120957,120960,120965,120968,120973,120976,120979,120984,120987,120992,120997,121000,121005,121008,121133,121138,121168,121171,121176,121181,121198,121201,121244,121247,121274,121279,121292,121435,121439,121444,121458,121461,121512,121515,121545,121548,121564,121569,121583,121586,121653,121658,121667,121672,121675,121687,121692,121699,121723,121726,121731,121734,121753,121758,121765,121777,121784],[10,118882,118878],{"id":118883},"_3-安装必备配置",[555,118885,118887],{"id":118886},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[25,118889,118892],{"className":118890,"code":118891,"language":5651},[5649],"  打开下方网站（注意，该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",[31,118893,118891],{"__ignoreMap":22},[584,118895,118897],{"id":118896},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[25,118899,118902],{"className":118900,"code":118901,"language":5651},[5649],"  输入以下命令\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",[31,118903,118901],{"__ignoreMap":22},[584,118905,118907],{"id":118906},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[25,118909,118913],{"className":118910,"code":118911,"language":118912,"meta":22,"style":22},"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",[31,118914,118915,118923,118934,118946,118960,118964,118974,118979,118983,118987,118992,118996,119008,119012,119017,119021,119032,119036,119052,119056,119067,119071,119076,119080,119088],{"__ignoreMap":22},[34,118916,118917,118919,118921],{"class":36,"line":37},[34,118918,25041],{"class":2427},[34,118920,117704],{"class":187},[34,118922,26707],{"class":187},[34,118924,118925,118927,118929,118931],{"class":36,"line":44},[34,118926,25041],{"class":2427},[34,118928,117704],{"class":187},[34,118930,24298],{"class":187},[34,118932,118933],{"class":187}," vim\n",[34,118935,118936,118938,118941,118943],{"class":36,"line":50},[34,118937,25041],{"class":2427},[34,118939,118940],{"class":187}," rm",[34,118942,25790],{"class":63},[34,118944,118945],{"class":187}," \u002Fetc\u002Fapt\u002Fsources.list\n",[34,118947,118948,118950,118952,118954,118957],{"class":36,"line":56},[34,118949,25041],{"class":2427},[34,118951,118940],{"class":187},[34,118953,25790],{"class":63},[34,118955,118956],{"class":187}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[34,118958,118959],{"class":63},"**\n",[34,118961,118962],{"class":36,"line":107},[34,118963,2864],{"emptyLinePlaceholder":540},[34,118965,118966,118968,118971],{"class":36,"line":196},[34,118967,25041],{"class":2427},[34,118969,118970],{"class":187}," vim",[34,118972,118973],{"class":187}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[34,118975,118976],{"class":36,"line":202},[34,118977,118978],{"class":187},"```\n",[34,118980,118981],{"class":36,"line":207},[34,118982,2864],{"emptyLinePlaceholder":540},[34,118984,118985],{"class":36,"line":222},[34,118986,2864],{"emptyLinePlaceholder":540},[34,118988,118989],{"class":36,"line":227},[34,118990,118991],{"class":2427},"选择好Ubuntu版本后，复制下方的内容。\n",[34,118993,118994],{"class":36,"line":232},[34,118995,2864],{"emptyLinePlaceholder":540},[34,118997,118998,119000,119003,119006],{"class":36,"line":238},[34,118999,835],{"class":112},[34,119001,119002],{"class":187},"[](",[34,119004,119005],{"class":2427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[34,119007,623],{"class":187},[34,119009,119010],{"class":36,"line":244},[34,119011,2864],{"emptyLinePlaceholder":540},[34,119013,119014],{"class":36,"line":250},[34,119015,119016],{"class":2427},"粘贴进去\n",[34,119018,119019],{"class":36,"line":256},[34,119020,2864],{"emptyLinePlaceholder":540},[34,119022,119023,119025,119027,119030],{"class":36,"line":261},[34,119024,835],{"class":112},[34,119026,119002],{"class":187},[34,119028,119029],{"class":2427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[34,119031,623],{"class":187},[34,119033,119034],{"class":36,"line":267},[34,119035,2864],{"emptyLinePlaceholder":540},[34,119037,119038,119041,119044,119047,119049],{"class":36,"line":2138},[34,119039,119040],{"class":2427},"按一下ESC，然后英文冒号，输入",[34,119042,119043],{"class":187}," `",[34,119045,119046],{"class":2427},":wq!",[34,119048,1576],{"class":187},[34,119050,119051],{"class":2427},"然后回车\n",[34,119053,119054],{"class":36,"line":2143},[34,119055,2864],{"emptyLinePlaceholder":540},[34,119057,119058,119060,119062,119065],{"class":36,"line":2157},[34,119059,835],{"class":112},[34,119061,119002],{"class":187},[34,119063,119064],{"class":2427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[34,119066,623],{"class":187},[34,119068,119069],{"class":36,"line":2162},[34,119070,2864],{"emptyLinePlaceholder":540},[34,119072,119073],{"class":36,"line":2191},[34,119074,119075],{"class":2427},"输入以下命令\n",[34,119077,119078],{"class":36,"line":2196},[34,119079,2864],{"emptyLinePlaceholder":540},[34,119081,119082,119085],{"class":36,"line":2213},[34,119083,119084],{"class":187},"```",[34,119086,119087],{"class":2427},"Bash\n",[34,119089,119090,119092,119094],{"class":36,"line":2218},[34,119091,25041],{"class":2427},[34,119093,117704],{"class":187},[34,119095,26707],{"class":187},[14,119097,119098],{},"这里被替换成对应学校则成功",[14,119100,119101],{},[20,119102],{"alt":22,"src":119103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[555,119105,119107],{"id":119106},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[584,119109,119111],{"id":119110},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119113,119114],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119116,119117],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119119,119120],{},[847,119121,119122],{"href":119122,"rel":119123},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24329],[14,119125,119126],{},[20,119127],{"alt":22,"src":119128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119130,119131],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119133,119134],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119136,119137],{},[20,119138],{"alt":22,"src":119139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[25,119141,119143],{"className":117683,"code":119142,"language":117685,"meta":22,"style":22},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[31,119144,119145,119150,119157,119162],{"__ignoreMap":22},[34,119146,119147],{"class":36,"line":37},[34,119148,119149],{"class":40},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[34,119151,119152,119154],{"class":36,"line":44},[34,119153,101663],{"class":63},[34,119155,119156],{"class":187}," ~\u002FDownloads\n",[34,119158,119159],{"class":36,"line":50},[34,119160,119161],{"class":40},"#下方chrome安装包名不一定是这个，根据名字来看\n",[34,119163,119164,119166,119168,119170],{"class":36,"line":56},[34,119165,25041],{"class":2427},[34,119167,117704],{"class":187},[34,119169,24298],{"class":187},[34,119171,119172],{"class":187}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119174,119175],{},[20,119176],{"alt":22,"src":119177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[584,119179,119181],{"id":119180},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[25,119183,119185],{"className":117683,"code":119184,"language":117685,"meta":22,"style":22},"# 老版\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",[31,119186,119187,119192,119200,119211,119216,119220,119225,119235,119243,119254],{"__ignoreMap":22},[34,119188,119189],{"class":36,"line":37},[34,119190,119191],{"class":40},"# 老版\n",[34,119193,119194,119196,119198],{"class":36,"line":44},[34,119195,25041],{"class":2427},[34,119197,117704],{"class":187},[34,119199,26707],{"class":187},[34,119201,119202,119204,119206,119208],{"class":36,"line":50},[34,119203,25041],{"class":2427},[34,119205,117704],{"class":187},[34,119207,24298],{"class":187},[34,119209,119210],{"class":187}," neofetch\n",[34,119212,119213],{"class":36,"line":56},[34,119214,119215],{"class":2427},"neofetch\n",[34,119217,119218],{"class":36,"line":107},[34,119219,2864],{"emptyLinePlaceholder":540},[34,119221,119222],{"class":36,"line":196},[34,119223,119224],{"class":40},"# 新版\n",[34,119226,119227,119229,119232],{"class":36,"line":202},[34,119228,25041],{"class":2427},[34,119230,119231],{"class":187}," add-apt-repository",[34,119233,119234],{"class":187}," ppa:zhangsongcui3371\u002Ffastfetch\n",[34,119236,119237,119239,119241],{"class":36,"line":207},[34,119238,25041],{"class":2427},[34,119240,117704],{"class":187},[34,119242,26707],{"class":187},[34,119244,119245,119247,119249,119251],{"class":36,"line":222},[34,119246,25041],{"class":2427},[34,119248,117704],{"class":187},[34,119250,24298],{"class":187},[34,119252,119253],{"class":187}," fastfetch\n",[34,119255,119256],{"class":36,"line":227},[34,119257,119258],{"class":2427},"fastfetch\n",[14,119260,119261],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119263,119264],{},[20,119265],{"alt":22,"src":119266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[584,119268,119270],{"id":119269},"_323-移除snap应用","3.2.3 移除snap应用",[14,119272,119273],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[25,119275,119277],{"className":117683,"code":119276,"language":117685,"meta":22,"style":22},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[31,119278,119279,119291,119302],{"__ignoreMap":22},[34,119280,119281,119283,119285,119288],{"class":36,"line":37},[34,119282,25041],{"class":2427},[34,119284,26978],{"class":187},[34,119286,119287],{"class":187}," disable",[34,119289,119290],{"class":187}," snapd.service\n",[34,119292,119293,119295,119297,119299],{"class":36,"line":44},[34,119294,25041],{"class":2427},[34,119296,26978],{"class":187},[34,119298,119287],{"class":187},[34,119300,119301],{"class":187}," snapd.socket\n",[34,119303,119304,119306,119308,119310],{"class":36,"line":50},[34,119305,25041],{"class":2427},[34,119307,26978],{"class":187},[34,119309,119287],{"class":187},[34,119311,119312],{"class":187}," snapd.seeded.service\n",[14,119314,119315],{},"然后查看snap应用列表",[14,119317,119318,119319,119324],{},"根据你安装的选择不同（最小安装或普通安装），有",[847,119320,119323],{"href":119321,"rel":119322},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24329],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[25,119326,119328],{"className":117683,"code":119327,"language":117685,"meta":22,"style":22},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[31,119329,119330,119335],{"__ignoreMap":22},[34,119331,119332],{"class":36,"line":37},[34,119333,119334],{"class":40},"# 查询当前系统上snap安装了哪些app\n",[34,119336,119337,119340],{"class":36,"line":44},[34,119338,119339],{"class":2427},"snap",[34,119341,119342],{"class":187}," list\n",[14,119344,119345],{},[20,119346],{"alt":22,"src":119347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119349,119350,119351,119354],{},"卸载掉图中所有应用，按照 ",[760,119352,119353],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[25,119356,119358],{"className":117683,"code":119357,"language":117685,"meta":22,"style":22},"#移除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",[31,119359,119360,119365,119377,119382,119393,119398,119409,119414,119425,119430,119434,119439,119450,119461],{"__ignoreMap":22},[34,119361,119362],{"class":36,"line":37},[34,119363,119364],{"class":40},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[34,119366,119367,119369,119372,119374],{"class":36,"line":44},[34,119368,25041],{"class":2427},[34,119370,119371],{"class":187}," snap",[34,119373,26544],{"class":187},[34,119375,119376],{"class":187}," snap-store\n",[34,119378,119379],{"class":36,"line":50},[34,119380,119381],{"class":40},"#移除firefox浏览器\n",[34,119383,119384,119386,119388,119390],{"class":36,"line":56},[34,119385,25041],{"class":2427},[34,119387,119371],{"class":187},[34,119389,26544],{"class":187},[34,119391,119392],{"class":187}," firefox\n",[34,119394,119395],{"class":36,"line":107},[34,119396,119397],{"class":40},"#移除gnome-42-2204\n",[34,119399,119400,119402,119404,119406],{"class":36,"line":196},[34,119401,25041],{"class":2427},[34,119403,119371],{"class":187},[34,119405,26544],{"class":187},[34,119407,119408],{"class":187}," gnome-42-2204\n",[34,119410,119411],{"class":36,"line":202},[34,119412,119413],{"class":40},"#移除gtk-common-themes\n",[34,119415,119416,119418,119420,119422],{"class":36,"line":207},[34,119417,25041],{"class":2427},[34,119419,119371],{"class":187},[34,119421,26544],{"class":187},[34,119423,119424],{"class":187}," gtk-common-themes\n",[34,119426,119427],{"class":36,"line":222},[34,119428,119429],{"class":40},"#移除其它...\n",[34,119431,119432],{"class":36,"line":227},[34,119433,3138],{"class":59},[34,119435,119436],{"class":36,"line":232},[34,119437,119438],{"class":40},"#移除core22,bare以及snapd\n",[34,119440,119441,119443,119445,119447],{"class":36,"line":238},[34,119442,25041],{"class":2427},[34,119444,119371],{"class":187},[34,119446,26544],{"class":187},[34,119448,119449],{"class":187}," core22\n",[34,119451,119452,119454,119456,119458],{"class":36,"line":244},[34,119453,25041],{"class":2427},[34,119455,119371],{"class":187},[34,119457,26544],{"class":187},[34,119459,119460],{"class":187}," bare\n",[34,119462,119463,119465,119467,119469],{"class":36,"line":250},[34,119464,25041],{"class":2427},[34,119466,119371],{"class":187},[34,119468,26544],{"class":187},[34,119470,119471],{"class":187}," snapd\n",[14,119473,119474],{},[20,119475],{"alt":22,"src":119476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119478,119479],{},"输入以下命令查看是否还有snap包",[25,119481,119483],{"className":117683,"code":119482,"language":117685,"meta":22,"style":22},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[31,119484,119485,119491,119495,119499,119503],{"__ignoreMap":22},[34,119486,119487,119489],{"class":36,"line":37},[34,119488,119339],{"class":2427},[34,119490,119342],{"class":187},[34,119492,119493],{"class":36,"line":44},[34,119494,119191],{"class":40},[34,119496,119497],{"class":36,"line":50},[34,119498,119215],{"class":2427},[34,119500,119501],{"class":36,"line":56},[34,119502,119224],{"class":40},[34,119504,119505],{"class":36,"line":107},[34,119506,119258],{"class":2427},[14,119508,119509],{},[20,119510],{"alt":22,"src":119511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[584,119513,119515],{"id":119514},"_324-移除snap","3.2.4 移除snap",[14,119517,119518,119519,119524],{},"在删除掉",[847,119520,119523],{"href":119521,"rel":119522},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24329],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[25,119526,119528],{"className":117683,"code":119527,"language":117685,"meta":22,"style":22}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[31,119529,119530,119535,119548,119553,119564],{"__ignoreMap":22},[34,119531,119532],{"class":36,"line":37},[34,119533,119534],{"class":40}," #使用apt移除掉snap\n",[34,119536,119537,119539,119541,119543,119546],{"class":36,"line":44},[34,119538,25041],{"class":2427},[34,119540,117704],{"class":187},[34,119542,118012],{"class":187},[34,119544,119545],{"class":63}," --purge",[34,119547,119471],{"class":187},[34,119549,119550],{"class":36,"line":50},[34,119551,119552],{"class":40},"#移除snapd的一些目录\n",[34,119554,119555,119557,119559,119561],{"class":36,"line":56},[34,119556,25041],{"class":2427},[34,119558,118940],{"class":187},[34,119560,25790],{"class":63},[34,119562,119563],{"class":187}," \u002Fvar\u002Fcache\u002Fsnapd\n",[34,119565,119566,119568,119570,119572],{"class":36,"line":107},[34,119567,25041],{"class":2427},[34,119569,118940],{"class":187},[34,119571,25790],{"class":63},[34,119573,119574],{"class":187}," ~\u002Fsnap\n",[14,119576,119577,119578,119581],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[31,119579,119580],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[584,119583,119585],{"id":119584},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119587,119588],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[25,119590,119592],{"className":117683,"code":119591,"language":117685,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[31,119593,119594],{"__ignoreMap":22},[34,119595,119596,119598,119600],{"class":36,"line":37},[34,119597,25041],{"class":2427},[34,119599,118970],{"class":187},[34,119601,119602],{"class":187}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119604,119605,119606,119609],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[31,119607,119608],{},":wq"," 回车",[25,119611,119613],{"className":117683,"code":119612,"language":117685,"meta":22,"style":22},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[31,119614,119615,119622,119636],{"__ignoreMap":22},[34,119616,119617,119620],{"class":36,"line":37},[34,119618,119619],{"class":2427},"Package:",[34,119621,119471],{"class":187},[34,119623,119624,119627,119630,119633],{"class":36,"line":44},[34,119625,119626],{"class":2427},"Pin:",[34,119628,119629],{"class":187}," release",[34,119631,119632],{"class":187}," a=",[34,119634,119635],{"class":63},"*\n",[34,119637,119638,119641],{"class":36,"line":50},[34,119639,119640],{"class":2427},"Pin-Priority:",[34,119642,119643],{"class":63}," -10\n",[14,119645,119646],{},[20,119647],{"alt":22,"src":119648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[584,119650,119652],{"id":119651},"_326-测试是否成功","3.2.6 测试是否成功",[25,119654,119656],{"className":117683,"code":119655,"language":117685,"meta":22,"style":22},"sudo apt update\nsudo apt install firefox\n",[31,119657,119658,119666],{"__ignoreMap":22},[34,119659,119660,119662,119664],{"class":36,"line":37},[34,119661,25041],{"class":2427},[34,119663,117704],{"class":187},[34,119665,26707],{"class":187},[34,119667,119668,119670,119672,119674],{"class":36,"line":44},[34,119669,25041],{"class":2427},[34,119671,117704],{"class":187},[34,119673,24298],{"class":187},[34,119675,119392],{"class":187},[14,119677,119678],{},"这里提示snapd无法被安装，就证明成功了",[14,119680,119681],{},[20,119682],{"alt":22,"src":119683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[584,119685,119687],{"id":119686},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119689,119690],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119692,119693],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119695,119696],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[25,119698,119700],{"className":117683,"code":119699,"language":117685,"meta":22,"style":22},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[31,119701,119702,119707,119716,119721,119729],{"__ignoreMap":22},[34,119703,119704],{"class":36,"line":37},[34,119705,119706],{"class":40},"# 添加Mozilla提供的源\n",[34,119708,119709,119711,119713],{"class":36,"line":44},[34,119710,25041],{"class":2427},[34,119712,119231],{"class":187},[34,119714,119715],{"class":187}," ppa:mozillateam\u002Fppa\n",[34,119717,119718],{"class":36,"line":50},[34,119719,119720],{"class":40},"# 安装Firefox\n",[34,119722,119723,119725,119727],{"class":36,"line":56},[34,119724,25041],{"class":2427},[34,119726,117704],{"class":187},[34,119728,26707],{"class":187},[34,119730,119731,119733,119735,119737],{"class":36,"line":107},[34,119732,25041],{"class":2427},[34,119734,117704],{"class":187},[34,119736,24298],{"class":187},[34,119738,119392],{"class":187},[584,119740,119742],{"id":119741},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119744,119745],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119747,119748],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[25,119750,119752],{"className":117683,"code":119751,"language":117685,"meta":22,"style":22},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[31,119753,119754,119759,119769,119777,119781],{"__ignoreMap":22},[34,119755,119756],{"class":36,"line":37},[34,119757,119758],{"class":40},"#删掉禁止安装snap的配置文件\n",[34,119760,119761,119763,119765,119767],{"class":36,"line":44},[34,119762,25041],{"class":2427},[34,119764,118940],{"class":187},[34,119766,25790],{"class":63},[34,119768,119602],{"class":187},[34,119770,119771,119773,119775],{"class":36,"line":50},[34,119772,25041],{"class":2427},[34,119774,117704],{"class":187},[34,119776,26707],{"class":187},[34,119778,119779],{"class":36,"line":56},[34,119780,2864],{"emptyLinePlaceholder":540},[34,119782,119783,119785,119787],{"class":36,"line":107},[34,119784,25041],{"class":2427},[34,119786,117704],{"class":187},[34,119788,119789],{"class":187}," dist-update\n",[555,119791,119793],{"id":119792},"_33-中文输入法","3.3 中文输入法",[584,119795,119797],{"id":119796},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119799,119800],{},"官网下载搜狗输入法",[14,119802,119803],{},[20,119804],{"alt":22,"src":119805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119807,119808],{},[20,119809],{"alt":22,"src":119810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119812,119813],{},"打开终端输入如下",[25,119815,119817],{"className":117683,"code":119816,"language":117685,"meta":22,"style":22},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[31,119818,119819,119826],{"__ignoreMap":22},[34,119820,119821,119823],{"class":36,"line":37},[34,119822,101663],{"class":63},[34,119824,119825],{"class":187}," ~\u002FDownloads\u002F\n",[34,119827,119828,119830,119832,119834],{"class":36,"line":44},[34,119829,25041],{"class":2427},[34,119831,117704],{"class":187},[34,119833,24298],{"class":187},[34,119835,119836],{"class":187}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119838,119839],{},"打开Fcitx",[14,119841,119842,119845],{},[20,119843],{"alt":22,"src":119844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[20,119846],{"alt":22,"src":119847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119849,119850],{},[20,119851],{"alt":22,"src":119852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119854,119855],{},"添加搜狗输入法",[14,119857,119858],{},[20,119859],{"alt":22,"src":119860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119862,119863],{},[20,119864],{"alt":22,"src":119865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119867,119868],{},"将搜狗输入法设置为唯一输入法",[14,119870,119871],{},[20,119872],{"alt":22,"src":119873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[584,119875,119877],{"id":119876},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[567,119879,119880],{},[570,119881,119882],{},"卸载旧输入法",[25,119884,119886],{"className":118910,"code":119885,"language":118912,"meta":22,"style":22},"sudo apt purge fcitx* ibus*\n",[31,119887,119888],{"__ignoreMap":22},[34,119889,119890,119892,119894,119896,119899,119901,119904],{"class":36,"line":37},[34,119891,25041],{"class":2427},[34,119893,117704],{"class":187},[34,119895,118045],{"class":187},[34,119897,119898],{"class":187}," fcitx",[34,119900,1062],{"class":63},[34,119902,119903],{"class":187}," ibus",[34,119905,119635],{"class":63},[567,119907,119908],{"start":44},[570,119909,119910],{},"安装Fcitx5",[25,119912,119914],{"className":117683,"code":119913,"language":117685,"meta":22,"style":22},"# 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",[31,119915,119916,119921,119935,119939,119944,119953,119961],{"__ignoreMap":22},[34,119917,119918],{"class":36,"line":37},[34,119919,119920],{"class":40},"# Ubuntu22.04及以上、Debian12及以上\n",[34,119922,119923,119925,119927,119929,119932],{"class":36,"line":44},[34,119924,25041],{"class":2427},[34,119926,117704],{"class":187},[34,119928,24298],{"class":187},[34,119930,119931],{"class":187}," fcitx5",[34,119933,119934],{"class":187}," fcitx5-chinese-addons\n",[34,119936,119937],{"class":36,"line":50},[34,119938,2864],{"emptyLinePlaceholder":540},[34,119940,119941],{"class":36,"line":56},[34,119942,119943],{"class":40},"# Ubuntu20.04\n",[34,119945,119946,119948,119950],{"class":36,"line":107},[34,119947,25041],{"class":2427},[34,119949,119231],{"class":187},[34,119951,119952],{"class":187}," ppa:zhsj\u002Ffcitx5\n",[34,119954,119955,119957,119959],{"class":36,"line":196},[34,119956,25041],{"class":2427},[34,119958,117704],{"class":187},[34,119960,26707],{"class":187},[34,119962,119963,119965,119967,119969,119971],{"class":36,"line":202},[34,119964,25041],{"class":2427},[34,119966,117704],{"class":187},[34,119968,24298],{"class":187},[34,119970,119931],{"class":187},[34,119972,119934],{"class":187},[567,119974,119975,119978],{"start":50},[570,119976,119977],{},"Reboot System",[570,119979,119980],{},"启动Fcitx5",[14,119982,119983],{},[20,119984],{"alt":22,"src":119985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[567,119987,119988],{"start":107},[570,119989,119990],{},"修改一些设置",[14,119992,119993],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119995,119996],{},[20,119997],{"alt":22,"src":119998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,120000,120001],{},"添加快捷键以便于更好切换中英文",[14,120003,120004],{},[20,120005],{"alt":22,"src":120006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[567,120008,120009],{"start":196},[570,120010,120011],{},"重启",[25,120013,120015],{"className":118910,"code":120014,"language":118912,"meta":22,"style":22},"sudo shutdown -r now\n",[31,120016,120017],{"__ignoreMap":22},[34,120018,120019,120021,120024,120027],{"class":36,"line":37},[34,120020,25041],{"class":2427},[34,120022,120023],{"class":187}," shutdown",[34,120025,120026],{"class":63}," -r",[34,120028,120029],{"class":187}," now\n",[567,120031,120032],{"start":202},[570,120033,120034],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120036,120037],{},[847,120038,120039],{"href":120039,"rel":120040},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24329],[567,120042,120043],{"start":207},[570,120044,120045],{},"再重启",[25,120047,120048],{"className":118910,"code":120014,"language":118912,"meta":22,"style":22},[31,120049,120050],{"__ignoreMap":22},[34,120051,120052,120054,120056,120058],{"class":36,"line":37},[34,120053,25041],{"class":2427},[34,120055,120023],{"class":187},[34,120057,120026],{"class":63},[34,120059,120029],{"class":187},[555,120061,120063],{"id":120062},"_34-pip3源替换","3.4 pip3源替换",[14,120065,120066],{},"非Debian系发行版需要做。",[14,120068,120069],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120071,120072],{},"使用dnf的系统也可能不用做。",[25,120074,120076],{"className":117683,"code":120075,"language":117685,"meta":22,"style":22},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,120077,120078,120083,120090,120095,120100],{"__ignoreMap":22},[34,120079,120080],{"class":36,"line":37},[34,120081,120082],{"class":40},"# 检查是否已安装 pip\n",[34,120084,120085,120088],{"class":36,"line":44},[34,120086,120087],{"class":2427},"pip3",[34,120089,26758],{"class":63},[34,120091,120092],{"class":36,"line":50},[34,120093,120094],{"class":40},"# 如果未安装，先安装 pip3（见下方）\n",[34,120096,120097],{"class":36,"line":56},[34,120098,120099],{"class":40},"# 配置 pip 使用清华源\n",[34,120101,120102,120104,120107,120110,120113],{"class":36,"line":107},[34,120103,120087],{"class":2427},[34,120105,120106],{"class":187}," config",[34,120108,120109],{"class":187}," set",[34,120111,120112],{"class":187}," global.index-url",[34,120114,120115],{"class":187}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120117,120118],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120120,120121],{},[20,120122],{"alt":22,"src":120123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[25,120125,120127],{"className":117683,"code":120126,"language":117685,"meta":22,"style":22},"#安装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",[31,120128,120129,120134,120142,120153,120157,120162,120181,120185,120190,120202,120206,120211],{"__ignoreMap":22},[34,120130,120131],{"class":36,"line":37},[34,120132,120133],{"class":40},"#安装pip3\n",[34,120135,120136,120138,120140],{"class":36,"line":44},[34,120137,25041],{"class":2427},[34,120139,117704],{"class":187},[34,120141,26707],{"class":187},[34,120143,120144,120146,120148,120150],{"class":36,"line":50},[34,120145,25041],{"class":2427},[34,120147,26541],{"class":187},[34,120149,24298],{"class":187},[34,120151,120152],{"class":187}," python3-pip\n",[34,120154,120155],{"class":36,"line":56},[34,120156,2864],{"emptyLinePlaceholder":540},[34,120158,120159],{"class":36,"line":107},[34,120160,120161],{"class":40},"#更新pip3\n",[34,120163,120164,120166,120168,120170,120172,120174,120177,120179],{"class":36,"line":196},[34,120165,101266],{"class":2427},[34,120167,101269],{"class":63},[34,120169,101292],{"class":187},[34,120171,24298],{"class":187},[34,120173,26895],{"class":63},[34,120175,120176],{"class":187}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[34,120178,101297],{"class":63},[34,120180,101300],{"class":187},[34,120182,120183],{"class":36,"line":202},[34,120184,2864],{"emptyLinePlaceholder":540},[34,120186,120187],{"class":36,"line":207},[34,120188,120189],{"class":40},"#设置pip源为清华源\n",[34,120191,120192,120194,120196,120198,120200],{"class":36,"line":222},[34,120193,120087],{"class":2427},[34,120195,120106],{"class":187},[34,120197,120109],{"class":187},[34,120199,120112],{"class":187},[34,120201,120115],{"class":187},[34,120203,120204],{"class":36,"line":227},[34,120205,2864],{"emptyLinePlaceholder":540},[34,120207,120208],{"class":36,"line":232},[34,120209,120210],{"class":40},"#测试\n",[34,120212,120213,120215,120217,120219,120221,120223],{"class":36,"line":238},[34,120214,101266],{"class":2427},[34,120216,101269],{"class":63},[34,120218,101292],{"class":187},[34,120220,24298],{"class":187},[34,120222,101297],{"class":63},[34,120224,101300],{"class":187},[14,120226,120227],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120229,120230],{},[20,120231],{"alt":22,"src":120232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[555,120234,120236],{"id":120235},"_35-显卡驱动安装","3.5 显卡驱动安装",[584,120238,120240],{"id":120239},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[25,120242,120244],{"className":118910,"code":120243,"language":118912,"meta":22,"style":22},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[31,120245,120246,120251,120266,120271],{"__ignoreMap":22},[34,120247,120248],{"class":36,"line":37},[34,120249,120250],{"class":40},"# 如果是使用apt安装的驱动\n",[34,120252,120253,120255,120257,120259,120261,120264],{"class":36,"line":44},[34,120254,25041],{"class":2427},[34,120256,26541],{"class":187},[34,120258,26544],{"class":187},[34,120260,119545],{"class":63},[34,120262,120263],{"class":187}," nvidia",[34,120265,119635],{"class":63},[34,120267,120268],{"class":36,"line":50},[34,120269,120270],{"class":40},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[34,120272,120273,120275],{"class":36,"line":56},[34,120274,25041],{"class":2427},[34,120276,120277],{"class":187}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[584,120279,120281],{"id":120280},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22462,120283,120285],{"id":120284},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23374,120287,120289],{"id":120288},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[25,120291,120293],{"className":118910,"code":120292,"language":118912,"meta":22,"style":22},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,120294,120295,120300,120311,120316,120326,120331],{"__ignoreMap":22},[34,120296,120297],{"class":36,"line":37},[34,120298,120299],{"class":40},"# 安装英伟达驱动\n",[34,120301,120302,120304,120306,120308],{"class":36,"line":44},[34,120303,25041],{"class":2427},[34,120305,117704],{"class":187},[34,120307,24298],{"class":187},[34,120309,120310],{"class":187}," nvidia-driver-版本号\n",[34,120312,120313],{"class":36,"line":50},[34,120314,120315],{"class":40},"# 重启 \n",[34,120317,120318,120320,120322,120324],{"class":36,"line":56},[34,120319,25041],{"class":2427},[34,120321,120023],{"class":187},[34,120323,120026],{"class":63},[34,120325,120029],{"class":187},[34,120327,120328],{"class":36,"line":107},[34,120329,120330],{"class":40},"# 检查驱动是否安装成功\n",[34,120332,120333],{"class":36,"line":196},[34,120334,120335],{"class":2427},"nvidia-smi\n",[23374,120337,120339],{"id":120338},"_35212-debian","3.5.2.1.2 Debian",[25,120341,120343],{"className":118910,"code":120342,"language":118912,"meta":22,"style":22},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,120344,120345,120349,120363,120367,120377,120381],{"__ignoreMap":22},[34,120346,120347],{"class":36,"line":37},[34,120348,120299],{"class":40},[34,120350,120351,120353,120355,120357,120360],{"class":36,"line":44},[34,120352,25041],{"class":2427},[34,120354,117704],{"class":187},[34,120356,24298],{"class":187},[34,120358,120359],{"class":187}," nvidia-driver",[34,120361,120362],{"class":187}," nvidia-settings\n",[34,120364,120365],{"class":36,"line":50},[34,120366,120315],{"class":40},[34,120368,120369,120371,120373,120375],{"class":36,"line":56},[34,120370,25041],{"class":2427},[34,120372,120023],{"class":187},[34,120374,120026],{"class":63},[34,120376,120029],{"class":187},[34,120378,120379],{"class":36,"line":107},[34,120380,120330],{"class":40},[34,120382,120383],{"class":36,"line":196},[34,120384,120335],{"class":2427},[22462,120386,120388],{"id":120387},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120390,120391,120392,120395],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[760,120393,120394],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120397,120398,120399],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24017,120400,120401],{},[760,120402,120403],{},"（也可以不禁用桌面环境，直接进行下一步。）",[25,120405,120407],{"className":118910,"code":120406,"language":118912,"meta":22,"style":22},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[31,120408,120409,120414,120424,120429,120442,120447],{"__ignoreMap":22},[34,120410,120411],{"class":36,"line":37},[34,120412,120413],{"class":40},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[34,120415,120416,120418,120421],{"class":36,"line":44},[34,120417,25041],{"class":2427},[34,120419,120420],{"class":187}," telinit",[34,120422,120423],{"class":63}," 3\n",[34,120425,120426],{"class":36,"line":50},[34,120427,120428],{"class":40},"# ubuntu 使用下方命令\n",[34,120430,120431,120433,120436,120439],{"class":36,"line":56},[34,120432,25041],{"class":2427},[34,120434,120435],{"class":187}," service",[34,120437,120438],{"class":187}," lightdm",[34,120440,120441],{"class":187}," stop\n",[34,120443,120444],{"class":36,"line":107},[34,120445,120446],{"class":40},"# Fedora 使用下方命令\n",[34,120448,120449,120451,120453,120456],{"class":36,"line":196},[34,120450,25041],{"class":2427},[34,120452,26978],{"class":187},[34,120454,120455],{"class":187}," isolate",[34,120457,120458],{"class":187}," multi-user.target\n",[14,120460,120461],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[25,120463,120465],{"className":118910,"code":120464,"language":118912,"meta":22,"style":22},"# 编译环境+准备工作\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",[31,120466,120467,120472,120483,120488,120495,120500,120512,120517,120524,120529],{"__ignoreMap":22},[34,120468,120469],{"class":36,"line":37},[34,120470,120471],{"class":40},"# 编译环境+准备工作\n",[34,120473,120474,120476,120478,120480],{"class":36,"line":44},[34,120475,25041],{"class":2427},[34,120477,117704],{"class":187},[34,120479,24298],{"class":187},[34,120481,120482],{"class":187}," build-essential\n",[34,120484,120485],{"class":36,"line":50},[34,120486,120487],{"class":40},"# 进入到.run目录中\n",[34,120489,120490,120492],{"class":36,"line":56},[34,120491,101663],{"class":63},[34,120493,120494],{"class":187}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[34,120496,120497],{"class":36,"line":107},[34,120498,120499],{"class":40},"# 给驱动文件增加可执行权限：\n",[34,120501,120502,120504,120506,120509],{"class":36,"line":196},[34,120503,25041],{"class":2427},[34,120505,25044],{"class":187},[34,120507,120508],{"class":187}," a+x",[34,120510,120511],{"class":187}," NVIDIA-Linux-x86_64-550.107.02.run\n",[34,120513,120514],{"class":36,"line":202},[34,120515,120516],{"class":40},"# 然后执行安装：\n",[34,120518,120519,120521],{"class":36,"line":207},[34,120520,25041],{"class":2427},[34,120522,120523],{"class":187}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[34,120525,120526],{"class":36,"line":222},[34,120527,120528],{"class":40},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[34,120530,120531,120533,120536],{"class":36,"line":227},[34,120532,25041],{"class":2427},[34,120534,120535],{"class":187}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[34,120537,120538],{"class":63},"  --no-opengl-files\n",[14,120540,120541],{},"安装完毕重启即可",[25,120543,120545],{"className":118910,"code":120544,"language":118912,"meta":22,"style":22},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,120546,120547,120551,120557,120561],{"__ignoreMap":22},[34,120548,120549],{"class":36,"line":37},[34,120550,120315],{"class":40},[34,120552,120553,120555],{"class":36,"line":44},[34,120554,25041],{"class":2427},[34,120556,27112],{"class":187},[34,120558,120559],{"class":36,"line":50},[34,120560,120330],{"class":40},[34,120562,120563],{"class":36,"line":56},[34,120564,120335],{"class":2427},[584,120566,120568],{"id":120567},"_353-安装cuda","3.5.3 安装CUDA",[14,120570,120571],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120573,120574],{},[20,120575],{"alt":22,"src":120576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[567,120578,120579],{},[570,120580,120581],{},"先查看显卡驱动所支持的最高CUDA版本",[25,120583,120584],{"className":118910,"code":120335,"language":118912,"meta":22,"style":22},[31,120585,120586],{"__ignoreMap":22},[34,120587,120588],{"class":36,"line":37},[34,120589,120335],{"class":2427},[14,120591,120592],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120594,120595],{},[20,120596],{"alt":22,"src":120597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[567,120599,120600],{"start":44},[570,120601,120602],{},"下载CUDA并安装CUDA",[14,120604,118689,120605],{},[847,120606,118692],{"href":118692,"rel":120607},[24329],[14,120609,120610],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120612,120613],{},[20,120614],{"alt":22,"src":120615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120617,120618,120619,120624],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[847,120620,120623],{"href":120621,"rel":120622},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24329],"Vinci机器人队单片机教程","）",[14,120626,120627],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120629,120630],{},[20,120631],{"alt":22,"src":120632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120634,120635],{},"将最下方框框里的命令敲入终端",[25,120637,120639],{"className":118910,"code":120638,"language":118912,"meta":22,"style":22},"# 在当前文件夹下创建一个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",[31,120640,120641,120646,120655,120660,120667,120672,120680,120685,120696,120701],{"__ignoreMap":22},[34,120642,120643],{"class":36,"line":37},[34,120644,120645],{"class":40},"# 在当前文件夹下创建一个ttt的子文件夹\n",[34,120647,120648,120650,120652],{"class":36,"line":44},[34,120649,101653],{"class":2427},[34,120651,29681],{"class":63},[34,120653,120654],{"class":187}," .\u002Fttt\n",[34,120656,120657],{"class":36,"line":50},[34,120658,120659],{"class":40},"# 进入ttt文件夹\n",[34,120661,120662,120664],{"class":36,"line":56},[34,120663,101663],{"class":63},[34,120665,120666],{"class":187}," ttt\n",[34,120668,120669],{"class":36,"line":107},[34,120670,120671],{"class":40},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[34,120673,120674,120677],{"class":36,"line":196},[34,120675,120676],{"class":2427},"wget",[34,120678,120679],{"class":187}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[34,120681,120682],{"class":36,"line":202},[34,120683,120684],{"class":40},"# 给予权限\n",[34,120686,120687,120689,120691,120693],{"class":36,"line":207},[34,120688,25041],{"class":2427},[34,120690,25044],{"class":187},[34,120692,120508],{"class":187},[34,120694,120695],{"class":187}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[34,120697,120698],{"class":36,"line":222},[34,120699,120700],{"class":40},"# 运行脚本\n",[34,120702,120703,120705],{"class":36,"line":227},[34,120704,25041],{"class":2427},[34,120706,120695],{"class":187},[14,120708,120709],{},[20,120710],{"alt":22,"src":120711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120713,120714],{},"正在安装中：",[14,120716,120717],{},[20,120718],{"alt":22,"src":120719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120721,120722],{},"输入accept接受即可",[14,120724,120725],{},[20,120726],{"alt":22,"src":120727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120729,120730],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120732,120733],{},[20,120734],{"alt":22,"src":120735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120737,120738],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120740,120741],{},[20,120742],{"alt":22,"src":120743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[567,120745,120746],{"start":50},[570,120747,120748],{},"配置环境",[14,120750,120751],{},"根据上方确认一下路径，比如我上面红色框起来的为",[25,120753,120755],{"className":118910,"code":120754,"language":118912,"meta":22,"style":22},"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",[31,120756,120757,120773,120788],{"__ignoreMap":22},[34,120758,120759,120762,120765,120768,120771],{"class":36,"line":37},[34,120760,120761],{"class":2427},"Please",[34,120763,120764],{"class":187}," make",[34,120766,120767],{"class":187}," sure",[34,120769,120770],{"class":187}," that",[34,120772,3138],{"class":59},[34,120774,120775,120777,120780,120783,120786],{"class":36,"line":44},[34,120776,52732],{"class":2427},[34,120778,120779],{"class":187},"   PATH",[34,120781,120782],{"class":187}," includes",[34,120784,120785],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[34,120787,3138],{"class":59},[34,120789,120790,120792,120795,120797,120800,120803,120805,120808,120811,120814,120817,120819,120822,120824],{"class":36,"line":50},[34,120791,52732],{"class":2427},[34,120793,120794],{"class":187},"   LD_LIBRARY_PATH",[34,120796,120782],{"class":187},[34,120798,120799],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[34,120801,120802],{"class":187}," or,",[34,120804,5673],{"class":187},[34,120806,120807],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[34,120809,120810],{"class":187}," to",[34,120812,120813],{"class":187}," \u002Fetc\u002Fld.so.conf",[34,120815,120816],{"class":187}," and",[34,120818,27695],{"class":187},[34,120820,120821],{"class":187}," ldconfig",[34,120823,65065],{"class":187},[34,120825,120826],{"class":187}," root\n",[14,120828,120829],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[25,120831,120833],{"className":118910,"code":120832,"language":118912,"meta":22,"style":22},"which nvcc\n",[31,120834,120835],{"__ignoreMap":22},[34,120836,120837,120840],{"class":36,"line":37},[34,120838,120839],{"class":63},"which",[34,120841,120842],{"class":187}," nvcc\n",[14,120844,120845],{},[20,120846],{"alt":22,"src":120847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120849,120850],{},"所以我进行以下操作：",[25,120852,120854],{"className":118910,"code":120853,"language":118912,"meta":22,"style":22},"sudo vim ~\u002F.bashrc\n",[31,120855,120856],{"__ignoreMap":22},[34,120857,120858,120860,120862],{"class":36,"line":37},[34,120859,25041],{"class":2427},[34,120861,118970],{"class":187},[34,120863,120864],{"class":187}," ~\u002F.bashrc\n",[14,120866,120867],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[25,120869,120871],{"className":118910,"code":120870,"language":118912,"meta":22,"style":22},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[31,120872,120873,120885],{"__ignoreMap":22},[34,120874,120875,120877,120880,120882],{"class":36,"line":37},[34,120876,25507],{"class":112},[34,120878,120879],{"class":59}," PATH",[34,120881,447],{"class":112},[34,120883,120884],{"class":59},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[34,120886,120887,120889,120892,120894],{"class":36,"line":44},[34,120888,25507],{"class":112},[34,120890,120891],{"class":59}," LD_LIBRARY_PATH",[34,120893,447],{"class":112},[34,120895,120896],{"class":59},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120898,120899],{},[20,120900],{"alt":22,"src":120901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[25,120903,120905],{"className":118910,"code":120904,"language":118912,"meta":22,"style":22},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[31,120906,120907,120912,120918,120923],{"__ignoreMap":22},[34,120908,120909],{"class":36,"line":37},[34,120910,120911],{"class":40},"# 刷新当前终端的环境变量\n",[34,120913,120914,120916],{"class":36,"line":44},[34,120915,101280],{"class":63},[34,120917,120864],{"class":187},[34,120919,120920],{"class":36,"line":50},[34,120921,120922],{"class":40},"# 验证CUDA是否安装成功\n",[34,120924,120925,120928],{"class":36,"line":56},[34,120926,120927],{"class":2427},"nvcc",[34,120929,120930],{"class":63}," -V\n",[14,120932,120933],{},"出现下图这种则安装成功。",[14,120935,120936],{},[20,120937],{"alt":22,"src":120938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[584,120940,120942],{"id":120941},"_354-安装cudnn","3.5.4 安装cuDNN",[567,120944,120945],{},[570,120946,120947],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120949,120950,120951,120956],{},"前往 NVIDIA cuDNN 下载页面：",[847,120952,120955],{"href":120953,"rel":120954},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24329],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120958,120959],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120961,120962],{},[20,120963],{"alt":22,"src":120964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120966,120967],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120969,120970],{},[20,120971],{"alt":22,"src":120972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120974,120975],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120977,120978],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120980,120981],{},[760,120982,120983],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120985,120986],{},"下载好的：",[14,120988,120989],{},[20,120990],{"alt":22,"src":120991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[567,120993,120994],{"start":44},[570,120995,120996],{},"安装cuDNN",[14,120998,120999],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,121001,121002],{},[20,121003],{"alt":22,"src":121004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,121006,121007],{},"解压文件，并复制到对应位置完成安装",[25,121009,121011],{"className":118910,"code":121010,"language":118912,"meta":22,"style":22},"# 解压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",[31,121012,121013,121018,121029,121034,121041,121046,121062,121076,121081,121092,121101,121105,121121],{"__ignoreMap":22},[34,121014,121015],{"class":36,"line":37},[34,121016,121017],{"class":40},"# 解压cuDNN文件\n",[34,121019,121020,121023,121026],{"class":36,"line":44},[34,121021,121022],{"class":2427},"tar",[34,121024,121025],{"class":63}," -xvf",[34,121027,121028],{"class":187}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[34,121030,121031],{"class":36,"line":50},[34,121032,121033],{"class":40},"# cd进文件夹\n",[34,121035,121036,121038],{"class":36,"line":56},[34,121037,101663],{"class":63},[34,121039,121040],{"class":187}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[34,121042,121043],{"class":36,"line":107},[34,121044,121045],{"class":40},"# 复制cuDNN文件到CUDA目录\n",[34,121047,121048,121050,121052,121055,121057,121060],{"class":36,"line":196},[34,121049,25041],{"class":2427},[34,121051,28326],{"class":187},[34,121053,121054],{"class":187}," include\u002Fcudnn",[34,121056,1062],{"class":63},[34,121058,121059],{"class":187},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[34,121061,3138],{"class":59},[34,121063,121064,121066,121068,121071,121073],{"class":36,"line":202},[34,121065,25041],{"class":2427},[34,121067,28326],{"class":187},[34,121069,121070],{"class":187}," lib\u002Flibcudnn",[34,121072,1062],{"class":63},[34,121074,121075],{"class":187},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[34,121077,121078],{"class":36,"line":207},[34,121079,121080],{"class":40},"# 对比一下有没有缺文件\n",[34,121082,121083,121085,121088,121090],{"class":36,"line":222},[34,121084,27226],{"class":2427},[34,121086,121087],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[34,121089,1062],{"class":63},[34,121091,3138],{"class":59},[34,121093,121094,121096,121099],{"class":36,"line":227},[34,121095,27226],{"class":2427},[34,121097,121098],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[34,121100,119635],{"class":63},[34,121102,121103],{"class":36,"line":232},[34,121104,120684],{"class":40},[34,121106,121107,121109,121111,121114,121116,121118],{"class":36,"line":238},[34,121108,25041],{"class":2427},[34,121110,25044],{"class":187},[34,121112,121113],{"class":187}," a+r",[34,121115,121087],{"class":187},[34,121117,1062],{"class":63},[34,121119,121120],{"class":59},"   \n",[34,121122,121123,121125,121127,121129,121131],{"class":36,"line":244},[34,121124,25041],{"class":2427},[34,121126,25044],{"class":187},[34,121128,121113],{"class":187},[34,121130,121098],{"class":187},[34,121132,119635],{"class":63},[567,121134,121135],{"start":50},[570,121136,121137],{},"检查是否安装成功",[25,121139,121141],{"className":118910,"code":121140,"language":118912,"meta":22,"style":22},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[31,121142,121143,121148],{"__ignoreMap":22},[34,121144,121145],{"class":36,"line":37},[34,121146,121147],{"class":40},"# 检查cuDNN版本命令\n",[34,121149,121150,121153,121156,121158,121160,121163,121166],{"class":36,"line":44},[34,121151,121152],{"class":2427},"cat",[34,121154,121155],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[34,121157,25574],{"class":112},[34,121159,30701],{"class":2427},[34,121161,121162],{"class":187}," CUDNN_MAJOR",[34,121164,121165],{"class":63}," -A",[34,121167,48184],{"class":63},[14,121169,121170],{},"出现下图这样的就是安装成功了",[14,121172,121173],{},[20,121174],{"alt":22,"src":121175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[567,121177,121178],{"start":56},[570,121179,121180],{},"软链接(一般不需要)",[25,121182,121184],{"className":118910,"code":121183,"language":118912,"meta":22,"style":22},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[31,121185,121186,121191],{"__ignoreMap":22},[34,121187,121188],{"class":36,"line":37},[34,121189,121190],{"class":40},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[34,121192,121193,121195],{"class":36,"line":44},[34,121194,25041],{"class":2427},[34,121196,121197],{"class":187}," ldconfig\n",[14,121199,121200],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[25,121202,121207],{"className":121203,"code":121204,"language":121205,"meta":121206,"style":22},"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",[31,121208,121209,121214,121219,121224,121229,121234,121239],{"__ignoreMap":22},[34,121210,121211],{"class":36,"line":37},[34,121212,121213],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[34,121215,121216],{"class":36,"line":44},[34,121217,121218],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[34,121220,121221],{"class":36,"line":50},[34,121222,121223],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[34,121225,121226],{"class":36,"line":56},[34,121227,121228],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[34,121230,121231],{"class":36,"line":107},[34,121232,121233],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[34,121235,121236],{"class":36,"line":196},[34,121237,121238],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[34,121240,121241],{"class":36,"line":202},[34,121242,121243],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121245,121246],{},"运行下方的命令",[25,121248,121250],{"className":118910,"code":121249,"language":118912,"meta":22,"style":22},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[31,121251,121252,121257,121264,121269],{"__ignoreMap":22},[34,121253,121254],{"class":36,"line":37},[34,121255,121256],{"class":40},"# cd进入CUDA路径\n",[34,121258,121259,121261],{"class":36,"line":44},[34,121260,101663],{"class":63},[34,121262,121263],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[34,121265,121266],{"class":36,"line":50},[34,121267,121268],{"class":40}," # 查看本路径下的需要软链接的文件名\n",[34,121270,121271],{"class":36,"line":56},[34,121272,121273],{"class":2427}," ls\n",[14,121275,121276],{},[20,121277],{"alt":22,"src":121278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121280,121281,121282,18874,121285,18874,121288,121291],{},"如上图，我需要将",[31,121283,121284],{},"libcudnn_xxx_xxxxx.so.8.9.7",[31,121286,121287],{},"libcudnn_xxx_xxxxx.so.8",[31,121289,121290],{},"libcudnn_xxx_xxxxx.so","软链接",[25,121293,121295],{"className":118910,"code":121294,"language":118912,"meta":22,"style":22},"# 创建符号链接。对于每个 .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",[31,121296,121297,121302,121318,121332,121346,121360,121374,121388,121402,121407,121413,121418],{"__ignoreMap":22},[34,121298,121299],{"class":36,"line":37},[34,121300,121301],{"class":40},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[34,121303,121304,121306,121309,121312,121315],{"class":36,"line":44},[34,121305,25041],{"class":2427},[34,121307,121308],{"class":187}," ln",[34,121310,121311],{"class":63}," -sf",[34,121313,121314],{"class":187}," libcudnn_cnn_train.so.8.9.7",[34,121316,121317],{"class":187}," libcudnn_cnn_train.so.8\n",[34,121319,121320,121322,121324,121326,121329],{"class":36,"line":50},[34,121321,25041],{"class":2427},[34,121323,121308],{"class":187},[34,121325,121311],{"class":63},[34,121327,121328],{"class":187}," libcudnn_adv_infer.so.8.9.7",[34,121330,121331],{"class":187}," libcudnn_adv_infer.so.8\n",[34,121333,121334,121336,121338,121340,121343],{"class":36,"line":56},[34,121335,25041],{"class":2427},[34,121337,121308],{"class":187},[34,121339,121311],{"class":63},[34,121341,121342],{"class":187}," libcudnn_adv_train.so.8.9.7",[34,121344,121345],{"class":187}," libcudnn_adv_train.so.8\n",[34,121347,121348,121350,121352,121354,121357],{"class":36,"line":107},[34,121349,25041],{"class":2427},[34,121351,121308],{"class":187},[34,121353,121311],{"class":63},[34,121355,121356],{"class":187}," libcudnn_cnn_infer.so.8.9.7",[34,121358,121359],{"class":187}," libcudnn_cnn_infer.so.8\n",[34,121361,121362,121364,121366,121368,121371],{"class":36,"line":196},[34,121363,25041],{"class":2427},[34,121365,121308],{"class":187},[34,121367,121311],{"class":63},[34,121369,121370],{"class":187}," libcudnn.so.8.9.7",[34,121372,121373],{"class":187}," libcudnn.so.8\n",[34,121375,121376,121378,121380,121382,121385],{"class":36,"line":202},[34,121377,25041],{"class":2427},[34,121379,121308],{"class":187},[34,121381,121311],{"class":63},[34,121383,121384],{"class":187}," libcudnn_ops_infer.so.8.9.7",[34,121386,121387],{"class":187}," libcudnn_ops_infer.so.8\n",[34,121389,121390,121392,121394,121396,121399],{"class":36,"line":207},[34,121391,25041],{"class":2427},[34,121393,121308],{"class":187},[34,121395,121311],{"class":63},[34,121397,121398],{"class":187}," libcudnn_ops_train.so.8.9.7",[34,121400,121401],{"class":187}," libcudnn_ops_train.so.8\n",[34,121403,121404],{"class":36,"line":222},[34,121405,121406],{"class":40},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[34,121408,121409,121411],{"class":36,"line":227},[34,121410,25041],{"class":2427},[34,121412,121197],{"class":187},[34,121414,121415],{"class":36,"line":232},[34,121416,121417],{"class":40},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[34,121419,121420,121422,121425,121428,121430,121433],{"class":36,"line":238},[34,121421,27226],{"class":2427},[34,121423,121424],{"class":63}," -l",[34,121426,121427],{"class":187}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[34,121429,1062],{"class":63},[34,121431,121432],{"class":187},".so",[34,121434,119635],{"class":63},[584,121436,121438],{"id":121437},"_355-常见问题","3.5.5 常见问题",[567,121440,121441],{},[570,121442,121443],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[25,121445,121447],{"className":118910,"code":121446,"language":118912,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[31,121448,121449],{"__ignoreMap":22},[34,121450,121451,121453,121455],{"class":36,"line":37},[34,121452,25041],{"class":2427},[34,121454,118970],{"class":187},[34,121456,121457],{"class":187}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121459,121460],{},"blacklist-nouveau.conf文件内容如下：",[25,121462,121464],{"className":118910,"code":121463,"language":118912,"meta":22,"style":22},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[31,121465,121466,121474,121481,121493,121503],{"__ignoreMap":22},[34,121467,121468,121471],{"class":36,"line":37},[34,121469,121470],{"class":2427},"blacklist",[34,121472,121473],{"class":187}," nouveau\n",[34,121475,121476,121478],{"class":36,"line":44},[34,121477,121470],{"class":2427},[34,121479,121480],{"class":187}," lbm-nouveau\n",[34,121482,121483,121485,121488,121491],{"class":36,"line":50},[34,121484,116317],{"class":2427},[34,121486,121487],{"class":187}," nouveau",[34,121489,121490],{"class":187}," modeset=",[34,121492,3549],{"class":63},[34,121494,121495,121498,121500],{"class":36,"line":56},[34,121496,121497],{"class":63},"alias",[34,121499,121487],{"class":187},[34,121501,121502],{"class":187}," off\n",[34,121504,121505,121507,121510],{"class":36,"line":107},[34,121506,121497],{"class":63},[34,121508,121509],{"class":187}," lbm-nouveau",[34,121511,121502],{"class":187},[14,121513,121514],{},"接着运行下方命令",[25,121516,121518],{"className":118910,"code":121517,"language":118912,"meta":22,"style":22},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[31,121519,121520,121530,121535],{"__ignoreMap":22},[34,121521,121522,121524,121527],{"class":36,"line":37},[34,121523,25041],{"class":2427},[34,121525,121526],{"class":187}," update-initramfs",[34,121528,121529],{"class":63}," -u\n",[34,121531,121532],{"class":36,"line":44},[34,121533,121534],{"class":2427},"或者\n",[34,121536,121537,121539,121542],{"class":36,"line":50},[34,121538,25041],{"class":2427},[34,121540,121541],{"class":187}," dracut",[34,121543,121544],{"class":63}," --force\n",[14,121546,121547],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[25,121549,121551],{"className":118910,"code":121550,"language":118912,"meta":22,"style":22},"lsmod | grep nouveau\n",[31,121552,121553],{"__ignoreMap":22},[34,121554,121555,121558,121560,121562],{"class":36,"line":37},[34,121556,121557],{"class":2427},"lsmod",[34,121559,25574],{"class":112},[34,121561,30701],{"class":2427},[34,121563,121473],{"class":187},[567,121565,121566],{"start":44},[570,121567,121568],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[25,121570,121572],{"className":118910,"code":121571,"language":118912,"meta":22,"style":22},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[31,121573,121574],{"__ignoreMap":22},[34,121575,121576,121578,121580],{"class":36,"line":37},[34,121577,25041],{"class":2427},[34,121579,118970],{"class":187},[34,121581,121582],{"class":187}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121584,121585],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[25,121587,121589],{"className":118910,"code":121588,"language":118912,"meta":22,"style":22},"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",[31,121590,121591,121599,121607,121615,121622,121630,121640,121648],{"__ignoreMap":22},[34,121592,121593,121596],{"class":36,"line":37},[34,121594,121595],{"class":2427},"Section",[34,121597,121598],{"class":187}," \"OutputClass\"\n",[34,121600,121601,121604],{"class":36,"line":44},[34,121602,121603],{"class":2427},"   Identifier",[34,121605,121606],{"class":187}," \"nvidia\"\n",[34,121608,121609,121612],{"class":36,"line":50},[34,121610,121611],{"class":2427},"   MatchDriver",[34,121613,121614],{"class":187}," \"nvidia-drm\"\n",[34,121616,121617,121620],{"class":36,"line":56},[34,121618,121619],{"class":2427},"   Driver",[34,121621,121606],{"class":187},[34,121623,121624,121627],{"class":36,"line":107},[34,121625,121626],{"class":2427},"   Option",[34,121628,121629],{"class":187}," \"AllowEmptyInitialConfiguration\"\n",[34,121631,121632,121634,121637],{"class":36,"line":196},[34,121633,121626],{"class":2427},[34,121635,121636],{"class":187}," \"PrimaryGPU\"",[34,121638,121639],{"class":187}," \"yes\"\n",[34,121641,121642,121645],{"class":36,"line":202},[34,121643,121644],{"class":2427},"   ModulePath",[34,121646,121647],{"class":187}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[34,121649,121650],{"class":36,"line":207},[34,121651,121652],{"class":2427},"EndSection\n",[567,121654,121655],{"start":50},[570,121656,121657],{},"安装N卡驱动提示错误",[25,121659,121661],{"className":121203,"code":121660,"language":121205,"meta":121206,"style":22},"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",[31,121662,121663],{"__ignoreMap":22},[34,121664,121665],{"class":36,"line":37},[34,121666,121660],{},[567,121668,121669],{},[570,121670,121671],{},"检查当前运行的内核版本：",[14,121673,121674],{},"运行以下命令以查看你当前正在使用的内核版本：",[25,121676,121678],{"className":117683,"code":121677,"language":117685,"meta":22,"style":22},"uname -r\n",[31,121679,121680],{"__ignoreMap":22},[34,121681,121682,121684],{"class":36,"line":37},[34,121683,70665],{"class":2427},[34,121685,121686],{"class":63}," -r\n",[567,121688,121689],{"start":44},[570,121690,121691],{},"安装内核开发文件：",[14,121693,121694,121695,121698],{},"确保你已经安装了与当前内核版本相匹配的 ",[31,121696,121697],{},"kernel-devel"," 包。运行以下命令来安装：",[25,121700,121702],{"className":117683,"code":121701,"language":117685,"meta":22,"style":22},"sudo dnf install kernel-devel-$(uname -r)\n",[31,121703,121704],{"__ignoreMap":22},[34,121705,121706,121708,121710,121712,121715,121717,121719,121721],{"class":36,"line":37},[34,121707,25041],{"class":2427},[34,121709,26780],{"class":187},[34,121711,24298],{"class":187},[34,121713,121714],{"class":187}," kernel-devel-",[34,121716,25564],{"class":59},[34,121718,70665],{"class":2427},[34,121720,120026],{"class":63},[34,121722,623],{"class":59},[14,121724,121725],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[567,121727,121728],{"start":50},[570,121729,121730],{},"安装内核源代码（如果需要）：",[14,121732,121733],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[25,121735,121737],{"className":117683,"code":121736,"language":117685,"meta":22,"style":22},"sudo dnf install kernel-headers kernel-source\n",[31,121738,121739],{"__ignoreMap":22},[34,121740,121741,121743,121745,121747,121750],{"class":36,"line":37},[34,121742,25041],{"class":2427},[34,121744,26780],{"class":187},[34,121746,24298],{"class":187},[34,121748,121749],{"class":187}," kernel-headers",[34,121751,121752],{"class":187}," kernel-source\n",[567,121754,121755],{"start":56},[570,121756,121757],{},"检查安装：",[14,121759,121760,121761,121764],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[31,121762,121763],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[25,121766,121768],{"className":117683,"code":121767,"language":117685,"meta":22,"style":22},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[31,121769,121770],{"__ignoreMap":22},[34,121771,121772,121774],{"class":36,"line":37},[34,121773,27226],{"class":2427},[34,121775,121776],{"class":187}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121778,121779,121780,121783],{},"如果仍然遇到问题，可以通过 ",[31,121781,121782],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[532,121785,121786],{},"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":22,"searchDepth":44,"depth":44,"links":121788},[121789,121793,121803,121807,121808],{"id":118886,"depth":44,"text":118887,"children":121790},[121791,121792],{"id":118896,"depth":50,"text":118897},{"id":118906,"depth":50,"text":118907},{"id":119106,"depth":44,"text":119107,"children":121794},[121795,121796,121797,121798,121799,121800,121801,121802],{"id":119110,"depth":50,"text":119111},{"id":119180,"depth":50,"text":119181},{"id":119269,"depth":50,"text":119270},{"id":119514,"depth":50,"text":119515},{"id":119584,"depth":50,"text":119585},{"id":119651,"depth":50,"text":119652},{"id":119686,"depth":50,"text":119687},{"id":119741,"depth":50,"text":119742},{"id":119792,"depth":44,"text":119793,"children":121804},[121805,121806],{"id":119796,"depth":50,"text":119797},{"id":119876,"depth":50,"text":119877},{"id":120062,"depth":44,"text":120063},{"id":120235,"depth":44,"text":120236,"children":121809},[121810,121811,121812,121813,121814],{"id":120239,"depth":50,"text":120240},{"id":120280,"depth":50,"text":120281},{"id":120567,"depth":50,"text":120568},{"id":120941,"depth":50,"text":120942},{"id":121437,"depth":50,"text":121438},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118878,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121821,"title":121822,"body":121823,"description":537,"extension":538,"meta":122163,"navigation":540,"path":122164,"seo":122165,"stem":122166,"__hash__":122167},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121824,"toc":122161},[121825,121828,121833,121836,122082,122087,122090,122126,122129,122158],[10,121826,121822],{"id":121827},"_4-命令教程长期积累",[567,121829,121830],{},[570,121831,121832],{},"大多数命令",[14,121834,121835],{},"常用 Linux 命令速查：",[25,121837,121839],{"className":117683,"code":121838,"language":117685,"meta":22,"style":22},"# 文件与目录\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",[31,121840,121841,121846,121853,121860,121868,121875,121882,121890,121898,121905,121912,121920,121924,121929,121936,121944,121951,121955,121960,121967,121975,121983,121991,121999,122003,122008,122016,122023,122030,122038,122046,122050,122055,122064,122073],{"__ignoreMap":22},[34,121842,121843],{"class":36,"line":37},[34,121844,121845],{"class":40},"# 文件与目录\n",[34,121847,121848,121850],{"class":36,"line":44},[34,121849,27226],{"class":2427},[34,121851,121852],{"class":40},"        # 列出目录内容\n",[34,121854,121855,121857],{"class":36,"line":50},[34,121856,101663],{"class":63},[34,121858,121859],{"class":40},"        # 切换目录\n",[34,121861,121862,121865],{"class":36,"line":56},[34,121863,121864],{"class":63},"pwd",[34,121866,121867],{"class":40},"       # 显示当前路径\n",[34,121869,121870,121872],{"class":36,"line":107},[34,121871,101653],{"class":2427},[34,121873,121874],{"class":40},"     # 创建目录\n",[34,121876,121877,121879],{"class":36,"line":196},[34,121878,25787],{"class":2427},[34,121880,121881],{"class":40},"        # 删除文件或目录\n",[34,121883,121884,121887],{"class":36,"line":202},[34,121885,121886],{"class":2427},"cp",[34,121888,121889],{"class":40},"        # 复制文件或目录\n",[34,121891,121892,121895],{"class":36,"line":207},[34,121893,121894],{"class":2427},"mv",[34,121896,121897],{"class":40},"        # 移动\u002F重命名文件或目录\n",[34,121899,121900,121902],{"class":36,"line":222},[34,121901,101670],{"class":2427},[34,121903,121904],{"class":40},"     # 创建空文件\n",[34,121906,121907,121909],{"class":36,"line":227},[34,121908,121152],{"class":2427},[34,121910,121911],{"class":40},"       # 查看文件内容\n",[34,121913,121914,121917],{"class":36,"line":232},[34,121915,121916],{"class":2427},"head\u002Ftail",[34,121918,121919],{"class":40}," # 查看文件头部\u002F尾部\n",[34,121921,121922],{"class":36,"line":238},[34,121923,2864],{"emptyLinePlaceholder":540},[34,121925,121926],{"class":36,"line":244},[34,121927,121928],{"class":40},"# 权限管理\n",[34,121930,121931,121933],{"class":36,"line":250},[34,121932,25076],{"class":2427},[34,121934,121935],{"class":40},"     # 修改文件权限\n",[34,121937,121938,121941],{"class":36,"line":256},[34,121939,121940],{"class":2427},"chown",[34,121942,121943],{"class":40},"     # 修改文件所有者\n",[34,121945,121946,121948],{"class":36,"line":261},[34,121947,25041],{"class":2427},[34,121949,121950],{"class":40},"      # 以管理员身份执行\n",[34,121952,121953],{"class":36,"line":267},[34,121954,2864],{"emptyLinePlaceholder":540},[34,121956,121957],{"class":36,"line":2138},[34,121958,121959],{"class":40},"# 系统信息\n",[34,121961,121962,121964],{"class":36,"line":2143},[34,121963,70665],{"class":2427},[34,121965,121966],{"class":40},"     # 系统信息\n",[34,121968,121969,121972],{"class":36,"line":2157},[34,121970,121971],{"class":2427},"df",[34,121973,121974],{"class":40},"        # 磁盘使用情况\n",[34,121976,121977,121980],{"class":36,"line":2162},[34,121978,121979],{"class":2427},"free",[34,121981,121982],{"class":40},"      # 内存使用情况\n",[34,121984,121985,121988],{"class":36,"line":2191},[34,121986,121987],{"class":2427},"top\u002Fhtop",[34,121989,121990],{"class":40},"  # 进程监控\n",[34,121992,121993,121996],{"class":36,"line":2196},[34,121994,121995],{"class":2427},"ps",[34,121997,121998],{"class":40},"        # 查看进程\n",[34,122000,122001],{"class":36,"line":2213},[34,122002,2864],{"emptyLinePlaceholder":540},[34,122004,122005],{"class":36,"line":2218},[34,122006,122007],{"class":40},"# 网络\n",[34,122009,122010,122013],{"class":36,"line":2223},[34,122011,122012],{"class":2427},"ping",[34,122014,122015],{"class":40},"      # 测试网络连通性\n",[34,122017,122018,122020],{"class":36,"line":2228},[34,122019,27314],{"class":2427},[34,122021,122022],{"class":40},"      # 发送 HTTP 请求\n",[34,122024,122025,122027],{"class":36,"line":2242},[34,122026,120676],{"class":2427},[34,122028,122029],{"class":40},"      # 下载文件\n",[34,122031,122032,122035],{"class":36,"line":2247},[34,122033,122034],{"class":2427},"ssh",[34,122036,122037],{"class":40},"       # 远程登录\n",[34,122039,122040,122043],{"class":36,"line":3041},[34,122041,122042],{"class":2427},"scp",[34,122044,122045],{"class":40},"       # 远程文件传输\n",[34,122047,122048],{"class":36,"line":3055},[34,122049,2864],{"emptyLinePlaceholder":540},[34,122051,122052],{"class":36,"line":3063},[34,122053,122054],{"class":40},"# 包管理（Debian\u002FUbuntu）\n",[34,122056,122057,122059,122061],{"class":36,"line":3068},[34,122058,117755],{"class":2427},[34,122060,117734],{"class":187},[34,122062,122063],{"class":40},"   # 更新软件源\n",[34,122065,122066,122068,122070],{"class":36,"line":3074},[34,122067,117755],{"class":2427},[34,122069,24298],{"class":187},[34,122071,122072],{"class":40},"  # 安装软件包\n",[34,122074,122075,122077,122079],{"class":36,"line":3080},[34,122076,117755],{"class":2427},[34,122078,26544],{"class":187},[34,122080,122081],{"class":40},"   # 卸载软件包\n",[567,122083,122084],{"start":44},[570,122085,122086],{},"KDE Dolphin 以root打开",[14,122088,122089],{},"kde5",[25,122091,122093],{"className":117683,"code":122092,"language":117685,"meta":22,"style":22},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[31,122094,122095],{"__ignoreMap":22},[34,122096,122097,122100,122103,122106,122108,122110,122113,122116,122118,122121,122123],{"class":36,"line":37},[34,122098,122099],{"class":2427},"pkexec",[34,122101,122102],{"class":187}," env",[34,122104,122105],{"class":187}," DISPLAY=",[34,122107,28608],{"class":59},[34,122109,28666],{"class":187},[34,122111,122112],{"class":59},"$XAUTHORITY ",[34,122114,122115],{"class":187},"KDE_SESSION_VERSION=",[34,122117,927],{"class":63},[34,122119,122120],{"class":187}," KDE_FULL_SESSION=",[34,122122,1834],{"class":63},[34,122124,122125],{"class":187}," dolphin\n",[14,122127,122128],{},"kde6",[25,122130,122132],{"className":117683,"code":122131,"language":117685,"meta":22,"style":22},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[31,122133,122134],{"__ignoreMap":22},[34,122135,122136,122138,122140,122142,122144,122146,122148,122150,122152,122154,122156],{"class":36,"line":37},[34,122137,122099],{"class":2427},[34,122139,122102],{"class":187},[34,122141,122105],{"class":187},[34,122143,28608],{"class":59},[34,122145,28666],{"class":187},[34,122147,122112],{"class":59},[34,122149,122115],{"class":187},[34,122151,952],{"class":63},[34,122153,122120],{"class":187},[34,122155,1834],{"class":63},[34,122157,122125],{"class":187},[532,122159,122160],{},"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":22,"searchDepth":44,"depth":44,"links":122162},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121822,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122169,"title":122170,"body":122171,"description":537,"extension":538,"meta":122185,"navigation":540,"path":122186,"seo":122187,"stem":122188,"__hash__":122189},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122172,"toc":122183},[122173,122176],[10,122174,122170],{"id":122175},"_5-各种环境配置",[14,122177,122178],{},[847,122179,122182],{"href":122180,"rel":122181},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24329],"电控组环境搭建大全",{"title":22,"searchDepth":44,"depth":44,"links":122184},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122170,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122191,"title":122192,"body":122193,"description":537,"extension":538,"meta":122541,"navigation":540,"path":122542,"seo":122543,"stem":122544,"__hash__":122545},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122194,"toc":122533},[122195,122198,122202,122206,122210,122215,122222,122226,122519,122523,122530],[10,122196,122192],{"id":122197},"_6-拓展功能",[555,122199,122201],{"id":122200},"_61-wine","6.1 Wine",[555,122203,122205],{"id":122204},"_62-android","6.2 Android",[584,122207,122209],{"id":122208},"_621-i卡a卡","6.2.1 I卡、A卡",[567,122211,122212],{},[570,122213,122214],{},"Wayland-Waydroid(体验超级好)",[14,122216,122217,122218],{},"Waydroid 官网与安装指南：",[847,122219,122220],{"href":122220,"rel":122221},"https:\u002F\u002Fwaydro.id\u002F",[24329],[584,122223,122225],{"id":122224},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[567,122227,122228],{},[570,122229,122230,122231,122233,122234,122238,122240,122243,122248,122445],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54177,122232],{},"BlissOS 官网下载：",[847,122235,122236],{"href":122236,"rel":122237},"https:\u002F\u002Fblissos.org\u002F",[24329],[54177,122239],{},[20,122241],{"alt":22,"src":122242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[567,122244,122245],{"start":50},[570,122246,122247],{},"比较推荐的配置",[25,122249,122251],{"className":117683,"code":122250,"language":117685,"meta":22,"style":22},"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",[31,122252,122253,122260,122270,122280,122290,122302,122312,122319,122329,122338,122347,122357,122367,122376,122386,122396,122408,122418,122427,122437],{"__ignoreMap":22},[34,122254,122255,122258],{"class":36,"line":37},[34,122256,122257],{"class":2427},"qemu-system-x86_64",[34,122259,25143],{"class":63},[34,122261,122262,122265,122268],{"class":36,"line":44},[34,122263,122264],{"class":63},"        -M",[34,122266,122267],{"class":187}," q35,vmport=off",[34,122269,25143],{"class":63},[34,122271,122272,122275,122278],{"class":36,"line":50},[34,122273,122274],{"class":63},"        -accel",[34,122276,122277],{"class":187}," kvm",[34,122279,25143],{"class":63},[34,122281,122282,122285,122288],{"class":36,"line":56},[34,122283,122284],{"class":63},"        -cpu",[34,122286,122287],{"class":187}," qemu64,+sse3,+sse4.2",[34,122289,25143],{"class":63},[34,122291,122292,122295,122298,122300],{"class":36,"line":107},[34,122293,122294],{"class":63},"        -smp",[34,122296,122297],{"class":187}," 8,cores=",[34,122299,217],{"class":63},[34,122301,25143],{"class":63},[34,122303,122304,122307,122310],{"class":36,"line":196},[34,122305,122306],{"class":63},"        -m",[34,122308,122309],{"class":187}," 6G",[34,122311,25143],{"class":63},[34,122313,122314,122317],{"class":36,"line":202},[34,122315,122316],{"class":63},"        -usb",[34,122318,25143],{"class":63},[34,122320,122321,122324,122327],{"class":36,"line":207},[34,122322,122323],{"class":63},"        -device",[34,122325,122326],{"class":187}," virtio-tablet",[34,122328,25143],{"class":63},[34,122330,122331,122333,122336],{"class":36,"line":222},[34,122332,122323],{"class":63},[34,122334,122335],{"class":187}," virtio-keyboard",[34,122337,25143],{"class":63},[34,122339,122340,122342,122345],{"class":36,"line":227},[34,122341,122323],{"class":63},[34,122343,122344],{"class":187}," usb-tablet",[34,122346,25143],{"class":63},[34,122348,122349,122352,122355],{"class":36,"line":232},[34,122350,122351],{"class":63},"        -bios",[34,122353,122354],{"class":187}," OVMF-pure-efi64.fd",[34,122356,25143],{"class":63},[34,122358,122359,122362,122365],{"class":36,"line":238},[34,122360,122361],{"class":63},"        -net",[34,122363,122364],{"class":187}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[34,122366,25143],{"class":63},[34,122368,122369,122371,122374],{"class":36,"line":244},[34,122370,122361],{"class":63},[34,122372,122373],{"class":187}," nic,model=virtio",[34,122375,25143],{"class":63},[34,122377,122378,122381,122384],{"class":36,"line":250},[34,122379,122380],{"class":63},"        -audio",[34,122382,122383],{"class":187}," sdl,model=hda",[34,122385,25143],{"class":63},[34,122387,122388,122391,122394],{"class":36,"line":256},[34,122389,122390],{"class":63},"        -display",[34,122392,122393],{"class":187}," sdl,gl=on,show-cursor=on",[34,122395,25143],{"class":63},[34,122397,122398,122400,122403,122406],{"class":36,"line":261},[34,122399,122323],{"class":63},[34,122401,122402],{"class":187}," virtio-vga-gl,xres=1920,yres=",[34,122404,122405],{"class":63},"1080",[34,122407,25143],{"class":63},[34,122409,122410,122413,122416],{"class":36,"line":267},[34,122411,122412],{"class":63},"        -drive",[34,122414,122415],{"class":187}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[34,122417,25143],{"class":63},[34,122419,122420,122422,122425],{"class":36,"line":2138},[34,122421,122412],{"class":63},[34,122423,122424],{"class":187}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[34,122426,25143],{"class":63},[34,122428,122429,122432,122435],{"class":36,"line":2143},[34,122430,122431],{"class":63},"        -monitor",[34,122433,122434],{"class":187}," stdio",[34,122436,25143],{"class":63},[34,122438,122439,122442],{"class":36,"line":2157},[34,122440,122441],{"class":63},"        -serial",[34,122443,122444],{"class":187}," none\n",[567,122446,122447],{"start":107},[570,122448,122449,122450],{},"常用操作：",[567,122451,122452,122455,122511],{},[570,122453,122454],{},"全屏：Ctrl+Alt+F",[570,122456,122457,122458,122463],{},"adb调试",[567,122459,122460],{},[570,122461,122462],{},"使Linux与Android用ADB连接。",[25,122464,122466],{"className":117683,"code":122465,"language":117685,"meta":22,"style":22},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[31,122467,122468,122473,122484,122489,122501,122506],{"__ignoreMap":22},[34,122469,122470],{"class":36,"line":37},[34,122471,122472],{"class":40},"# 连接安卓\n",[34,122474,122475,122478,122481],{"class":36,"line":44},[34,122476,122477],{"class":2427},"adb",[34,122479,122480],{"class":187}," connect",[34,122482,122483],{"class":63}," 127.0.0.1\n",[34,122485,122486],{"class":36,"line":50},[34,122487,122488],{"class":40},"# 打开shell\n",[34,122490,122491,122493,122495,122498],{"class":36,"line":56},[34,122492,122477],{"class":2427},[34,122494,27348],{"class":63},[34,122496,122497],{"class":187}," 127.0.0.1:5555",[34,122499,122500],{"class":187}," shell\n",[34,122502,122503],{"class":36,"line":107},[34,122504,122505],{"class":40},"# 使用root权限\n",[34,122507,122508],{"class":36,"line":196},[34,122509,122510],{"class":2427},"su\n",[570,122512,122513,122514],{},"中文输入法",[567,122515,122516],{},[570,122517,122518],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[555,122520,122522],{"id":122521},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122524,122525,122526],{},"rEFInd 官网与文档：",[847,122527,122528],{"href":122528,"rel":122529},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24329],[532,122531,122532],{},"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":22,"searchDepth":44,"depth":44,"links":122534},[122535,122536,122540],{"id":122200,"depth":44,"text":122201},{"id":122204,"depth":44,"text":122205,"children":122537},[122538,122539],{"id":122208,"depth":50,"text":122209},{"id":122224,"depth":50,"text":122225},{"id":122521,"depth":44,"text":122522},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122192,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122547,"title":122548,"body":122549,"description":537,"extension":538,"meta":125848,"navigation":540,"path":125849,"seo":125850,"stem":125851,"__hash__":125852},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122550,"toc":125822},[122551,122554,122558,122561,122568,122818,122821,122893,122896,122900,122904,122909,122912,122915,122918,122923,122926,122929,122932,122937,122940,122945,122948,122951,122956,122959,122964,122967,122971,122975,122978,122983,122986,123000,123003,123006,123015,123018,123027,123030,123033,123042,123045,123054,123057,123060,123069,123072,123075,123090,123093,123096,123105,123110,123113,123116,123125,123128,123137,123140,123149,123152,123161,123166,123169,123177,123182,123185,123194,123197,123205,123210,123213,123222,123225,123228,123232,123235,123240,123243,123248,123262,123267,123272,123283,123288,123294,123299,123314,123319,123322,123327,123332,123337,123345,123350,123357,123362,123373,123378,123381,123385,123388,123391,123396,123399,123418,123423,123426,123435,123440,123443,123465,123468,123498,123501,123506,123509,123523,123528,123547,123550,123553,123558,123570,123575,123580,123583,123588,123591,123606,123609,123614,123619,123623,123628,123668,123671,123675,123681,123687,123692,123695,123702,123707,123714,123717,123720,123727,123741,123744,123804,123807,123821,123833,123836,123839,123842,123906,123909,123912,123915,123935,123938,123943,123950,123954,123957,123961,123966,123971,123975,123978,123981,124023,124028,124031,124053,124068,124070,124075,124087,124147,124149,124151,124205,124207,124209,124215,124220,124223,124228,124232,124235,124297,124302,124305,124307,124311,124323,124405,124407,124409,124463,124469,124471,124475,124480,124482,124487,124491,124511,124546,124550,124553,124556,124559,124566,124569,124581,124584,124599,124602,124621,124669,124672,124689,124692,124706,124711,124714,124723,124738,124750,124788,124793,124802,124807,124812,124838,124847,124851,124855,124860,124863,124867,124871,124876,124879,124884,124887,124892,124895,124900,124903,124907,124912,124915,124920,124923,124927,124932,124935,124940,124943,124948,124951,124955,124960,124963,124968,124971,124976,124979,124983,124988,124991,124996,124999,125004,125007,125012,125015,125020,125023,125028,125031,125035,125040,125043,125048,125055,125059,125064,125067,125072,125075,125079,125084,125087,125090,125093,125096,125099,125103,125106,125116,125121,125126,125148,125153,125158,125165,125169,125174,125177,125180,125185,125188,125191,125194,125197,125200,125203,125206,125209,125212,125215,125218,125221,125226,125231,125236,125241,125246,125251,125256,125259,125263,125266,125270,125275,125280,125285,125290,125294,125300,125308,125313,125316,125321,125336,125339,125344,125378,125393,125396,125451,125477,125489,125492,125501,125504,125519,125524,125527,125533,125538,125541,125546,125549,125554,125559,125566,125569,125584,125587,125622,125627,125635,125673,125676,125679,125684,125687,125692,125703,125737,125742,125745,125754,125759,125765,125768,125773,125782,125787,125790,125793,125798,125806,125809,125814,125819],[10,122552,122548],{"id":122553},"_7-其他操作",[555,122555,122557],{"id":122556},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122559,122560],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122562,122563,122564,122567],{},"进入工控机的硬盘目录，进入",[31,122565,122566],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[25,122569,122573],{"className":122570,"code":122571,"language":122572,"meta":22,"style":22},"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",[31,122574,122575,122583,122594,122601,122608,122620,122627,122639,122650,122661,122668,122675,122682,122694,122706,122713,122725,122737,122744,122756,122768,122780,122791,122798,122809],{"__ignoreMap":22},[34,122576,122577,122580],{"class":36,"line":37},[34,122578,122579],{"class":51761},"network",[34,122581,122582],{"class":59},": \n",[34,122584,122585,122588,122590,122592],{"class":36,"line":44},[34,122586,122587],{"class":51761},"  version",[34,122589,51898],{"class":59},[34,122591,70],{"class":63},[34,122593,3138],{"class":59},[34,122595,122596,122599],{"class":36,"line":50},[34,122597,122598],{"class":51761},"  wifis",[34,122600,122582],{"class":59},[34,122602,122603,122606],{"class":36,"line":56},[34,122604,122605],{"class":51761},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[34,122607,122582],{"class":59},[34,122609,122610,122613,122615,122618],{"class":36,"line":107},[34,122611,122612],{"class":51761},"      renderer",[34,122614,51898],{"class":59},[34,122616,122617],{"class":187},"NetworkManager",[34,122619,3138],{"class":59},[34,122621,122622,122625],{"class":36,"line":196},[34,122623,122624],{"class":51761},"      match",[34,122626,122582],{"class":59},[34,122628,122629,122632,122634,122637],{"class":36,"line":202},[34,122630,122631],{"class":51761},"        name",[34,122633,51898],{"class":59},[34,122635,122636],{"class":187},"\"wlan0\"",[34,122638,3138],{"class":59},[34,122640,122641,122644,122646,122648],{"class":36,"line":207},[34,122642,122643],{"class":51761},"      dhcp4",[34,122645,51898],{"class":59},[34,122647,1834],{"class":63},[34,122649,3138],{"class":59},[34,122651,122652,122655,122657,122659],{"class":36,"line":222},[34,122653,122654],{"class":51761},"      dhcp6",[34,122656,51898],{"class":59},[34,122658,1834],{"class":63},[34,122660,3138],{"class":59},[34,122662,122663,122666],{"class":36,"line":227},[34,122664,122665],{"class":51761},"      access-points",[34,122667,122582],{"class":59},[34,122669,122670,122673],{"class":36,"line":232},[34,122671,122672],{"class":187},"        \"EMIS_Vinci_Robocon_5G\"",[34,122674,122582],{"class":59},[34,122676,122677,122680],{"class":36,"line":238},[34,122678,122679],{"class":51761},"          auth",[34,122681,122582],{"class":59},[34,122683,122684,122687,122689,122692],{"class":36,"line":244},[34,122685,122686],{"class":51761},"            key-management",[34,122688,51898],{"class":59},[34,122690,122691],{"class":187},"\"psk\"",[34,122693,3138],{"class":59},[34,122695,122696,122699,122701,122704],{"class":36,"line":250},[34,122697,122698],{"class":51761},"            password",[34,122700,51898],{"class":59},[34,122702,122703],{"class":187},"\"vinci666\"",[34,122705,3138],{"class":59},[34,122707,122708,122711],{"class":36,"line":256},[34,122709,122710],{"class":51761},"          networkmanager",[34,122712,122582],{"class":59},[34,122714,122715,122718,122720,122723],{"class":36,"line":261},[34,122716,122717],{"class":51761},"            uuid",[34,122719,51898],{"class":59},[34,122721,122722],{"class":187},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[34,122724,3138],{"class":59},[34,122726,122727,122730,122732,122735],{"class":36,"line":267},[34,122728,122729],{"class":51761},"            name",[34,122731,51898],{"class":59},[34,122733,122734],{"class":187},"\"EMIS_Vinci_Robocon_5G\"",[34,122736,3138],{"class":59},[34,122738,122739,122742],{"class":36,"line":2138},[34,122740,122741],{"class":51761},"            passthrough",[34,122743,122582],{"class":59},[34,122745,122746,122749,122751,122754],{"class":36,"line":2143},[34,122747,122748],{"class":51761},"              wifi-security.auth-alg",[34,122750,51898],{"class":59},[34,122752,122753],{"class":187},"\"open\"",[34,122755,3138],{"class":59},[34,122757,122758,122761,122763,122766],{"class":36,"line":2157},[34,122759,122760],{"class":51761},"              ipv6.addr-gen-mode",[34,122762,51898],{"class":59},[34,122764,122765],{"class":187},"\"default\"",[34,122767,3138],{"class":59},[34,122769,122770,122773,122775,122778],{"class":36,"line":2162},[34,122771,122772],{"class":51761},"              ipv6.ip6-privacy",[34,122774,51898],{"class":59},[34,122776,122777],{"class":187},"\"-1\"",[34,122779,3138],{"class":59},[34,122781,122782,122785,122787,122789],{"class":36,"line":2191},[34,122783,122784],{"class":51761},"              proxy._",[34,122786,51898],{"class":59},[34,122788,8116],{"class":187},[34,122790,3138],{"class":59},[34,122792,122793,122796],{"class":36,"line":2196},[34,122794,122795],{"class":51761},"      networkmanager",[34,122797,122582],{"class":59},[34,122799,122800,122803,122805,122807],{"class":36,"line":2213},[34,122801,122802],{"class":51761},"        uuid",[34,122804,51898],{"class":59},[34,122806,122722],{"class":187},[34,122808,3138],{"class":59},[34,122810,122811,122813,122815],{"class":36,"line":2218},[34,122812,122631],{"class":51761},[34,122814,51898],{"class":59},[34,122816,122817],{"class":187},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122819,122820],{},"将其改为新wifi的名和密码：",[25,122822,122824],{"className":122570,"code":122823,"language":122572,"meta":22,"style":22},"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",[31,122825,122826,122832,122841,122847,122854,122863,122871,122877,122883],{"__ignoreMap":22},[34,122827,122828,122830],{"class":36,"line":37},[34,122829,122579],{"class":51761},[34,122831,4203],{"class":59},[34,122833,122834,122836,122838],{"class":36,"line":44},[34,122835,122587],{"class":51761},[34,122837,51898],{"class":59},[34,122839,122840],{"class":63},"2\n",[34,122842,122843,122845],{"class":36,"line":50},[34,122844,122598],{"class":51761},[34,122846,4203],{"class":59},[34,122848,122849,122852],{"class":36,"line":56},[34,122850,122851],{"class":51761},"    wlan0",[34,122853,4203],{"class":59},[34,122855,122856,122858,122860],{"class":36,"line":107},[34,122857,122643],{"class":51761},[34,122859,51898],{"class":59},[34,122861,122862],{"class":63},"true\n",[34,122864,122865,122867,122869],{"class":36,"line":196},[34,122866,122654],{"class":51761},[34,122868,51898],{"class":59},[34,122870,122862],{"class":63},[34,122872,122873,122875],{"class":36,"line":202},[34,122874,122665],{"class":51761},[34,122876,4203],{"class":59},[34,122878,122879,122881],{"class":36,"line":207},[34,122880,122672],{"class":187},[34,122882,4203],{"class":59},[34,122884,122885,122888,122890],{"class":36,"line":222},[34,122886,122887],{"class":51761},"          password",[34,122889,51898],{"class":59},[34,122891,122892],{"class":187},"\"vinci666\"\n",[14,122894,122895],{},"工控机开机即可连上网。",[555,122897,122899],{"id":122898},"_72-ssh远程开发","7.2 SSH远程开发",[584,122901,122903],{"id":122902},"_721-环境准备","7.2.1 环境准备",[14,122905,122906],{},[760,122907,122908],{},"1.硬件准备",[14,122910,122911],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122913,122914],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122916,122917],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122919,122920],{},[760,122921,122922],{},"2.设置固定IP",[14,122924,122925],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122927,122928],{},"1.进入设置界面",[14,122930,122931],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122933,122934],{},[20,122935],{"alt":22,"src":122936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122938,122939],{},"2.配置所连接的网络",[14,122941,122942],{},[20,122943],{"alt":22,"src":122944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122946,122947],{},"3.设置固定IP",[14,122949,122950],{},"查看当前IP地址。",[14,122952,122953],{},[20,122954],{"alt":22,"src":122955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122957,122958],{},"设置固定IP。",[14,122960,122961],{},[20,122962],{"alt":22,"src":122963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122965,122966],{},"至此，IP配置完毕。",[584,122968,122970],{"id":122969},"_722-环境搭建","7.2.2 环境搭建",[14,122972,122973],{},[760,122974,26218],{},[14,122976,122977],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122979,122980],{},[760,122981,122982],{},"实现",[14,122984,122985],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[567,122987,122988,122991,122994,122997],{},[570,122989,122990],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[570,122992,122993],{},"远程主机启动SSH服务；",[570,122995,122996],{},"本地主机登陆远程主机；",[570,122998,122999],{},"实现数据传输。",[14,123001,123002],{},"1.安装SSH客户端与服务端",[14,123004,123005],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[25,123007,123009],{"className":121203,"code":123008,"language":121205,"meta":121206,"style":22}," sudo apt install openssh-server\n",[31,123010,123011],{"__ignoreMap":22},[34,123012,123013],{"class":36,"line":37},[34,123014,123008],{},[14,123016,123017],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[25,123019,123021],{"className":121203,"code":123020,"language":121205,"meta":121206,"style":22},"sudo apt install openssh-client\n",[31,123022,123023],{"__ignoreMap":22},[34,123024,123025],{"class":36,"line":37},[34,123026,123020],{},[14,123028,123029],{},"2.远程主机启动SSH服务",[14,123031,123032],{},"远程主机启动 ssh 服务命令如下：",[25,123034,123036],{"className":121203,"code":123035,"language":121205,"meta":121206,"style":22},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[31,123037,123038],{"__ignoreMap":22},[34,123039,123040],{"class":36,"line":37},[34,123041,123035],{},[14,123043,123044],{},"启动后可使用如下命令查看服务是否正常运行：",[25,123046,123048],{"className":121203,"code":123047,"language":121205,"meta":121206,"style":22},"ps -e | grep ssh\n",[31,123049,123050],{"__ignoreMap":22},[34,123051,123052],{"class":36,"line":37},[34,123053,123047],{},[14,123055,123056],{},"如果启动成功，会包含 sshd 程序。",[14,123058,123059],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[25,123061,123063],{"className":121203,"code":123062,"language":121205,"meta":121206,"style":22},"sudo systemctl enable ssh\n",[31,123064,123065],{"__ignoreMap":22},[34,123066,123067],{"class":36,"line":37},[34,123068,123062],{},[14,123070,123071],{},"3.本地远程登录",[14,123073,123074],{},"登录远程主机可以调用如下命令:",[25,123076,123078],{"className":117683,"code":123077,"language":117685,"meta":22,"style":22},"ssh -X 用户名@ip地址\n",[31,123079,123080],{"__ignoreMap":22},[34,123081,123082,123084,123087],{"class":36,"line":37},[34,123083,122034],{"class":2427},[34,123085,123086],{"class":63}," -X",[34,123088,123089],{"class":187}," 用户名@ip地址\n",[14,123091,123092],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123094,123095],{},"如果退出，可以调用exit命令：",[25,123097,123099],{"className":121203,"code":123098,"language":121205,"meta":121206,"style":22},"exit\n",[31,123100,123101],{"__ignoreMap":22},[34,123102,123103],{"class":36,"line":37},[34,123104,123098],{},[14,123106,123107],{},[760,123108,123109],{},"4.实现数据传输",[14,123111,123112],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123114,123115],{},"上传文件指令格式如下：",[25,123117,123119],{"className":121203,"code":123118,"language":121205,"meta":121206,"style":22},"scp 本地文件路径 账号@ip:路径\n",[31,123120,123121],{"__ignoreMap":22},[34,123122,123123],{"class":36,"line":37},[34,123124,123118],{},[14,123126,123127],{},"上传文件夹指令格式如下：",[25,123129,123131],{"className":121203,"code":123130,"language":121205,"meta":121206,"style":22},"scp -r 本地文件夹路径 账号@ip:路径\n",[31,123132,123133],{"__ignoreMap":22},[34,123134,123135],{"class":36,"line":37},[34,123136,123130],{},[14,123138,123139],{},"下载文件指令格式如下：",[25,123141,123143],{"className":121203,"code":123142,"language":121205,"meta":121206,"style":22},"scp 账号@ip:路径 本地文件夹路径\n",[31,123144,123145],{"__ignoreMap":22},[34,123146,123147],{"class":36,"line":37},[34,123148,123142],{},[14,123150,123151],{},"下载文件夹指令格式如下：",[25,123153,123155],{"className":121203,"code":123154,"language":121205,"meta":121206,"style":22},"scp -r 账号@ip:路径 本地文件夹路径\n",[31,123156,123157],{"__ignoreMap":22},[34,123158,123159],{"class":36,"line":37},[34,123160,123154],{},[14,123162,123163],{},[760,123164,123165],{},"优化",[14,123167,123168],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[567,123170,123171,123174],{},[570,123172,123173],{},"本地生成密钥对；",[570,123175,123176],{},"将公钥上传至远程主机。",[14,123178,123179],{},[760,123180,123181],{},"1.生成密钥对",[14,123183,123184],{},"本地客户端生成公私钥：（一路回车默认即可）",[25,123186,123188],{"className":121203,"code":123187,"language":121205,"meta":121206,"style":22},"ssh-keygen\n",[31,123189,123190],{"__ignoreMap":22},[34,123191,123192],{"class":36,"line":37},[34,123193,123187],{},[14,123195,123196],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[567,123198,123199,123202],{},[570,123200,123201],{},"id_rsa （私钥）；",[570,123203,123204],{},"id_rsa.pub (公钥)。",[14,123206,123207],{},[760,123208,123209],{},"2.公钥上传",[14,123211,123212],{},"上传指令如下：",[25,123214,123216],{"className":121203,"code":123215,"language":121205,"meta":121206,"style":22},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[31,123217,123218],{"__ignoreMap":22},[34,123219,123220],{"class":36,"line":37},[34,123221,123215],{},[14,123223,123224],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123226,123227],{},"以后再远程登录就无需录入密码了。",[584,123229,123231],{"id":123230},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123233,123234],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123236,123237],{},[760,123238,123239],{},"1.准备工作",[14,123241,123242],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123244,123245],{},[760,123246,123247],{},"2.为VScode安装远程开发插件",[14,123249,123250,123251,123254,123255,123258,123259,28850],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[31,123252,123253],{},"扩展：商店","的搜索栏输入",[31,123256,123257],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[31,123260,123261],{},"安装",[14,123263,123264],{},[20,123265],{"alt":22,"src":123266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123268,123269],{},[760,123270,123271],{},"3.配置远程连接",[14,123273,123274,123275,123278,123279,123282],{},"步骤1：使用快捷键",[31,123276,123277],{},"ctrl + shift + p","打开命令输入窗口，并输入",[31,123280,123281],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123284,123285],{},[20,123286],{"alt":22,"src":123287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123289,123290,123291,28850],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[31,123292,123293],{},"Add New SSH Host",[14,123295,123296],{},[20,123297],{"alt":22,"src":123298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123300,123301,123302,123305,123306,123309,123310,123313],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[31,123303,123304],{},"ssh +X ubuntu@192.168.43.164","，其中，",[31,123307,123308],{},"ubuntu","需要替换为你的登录用户名，",[31,123311,123312],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123315,123316],{},[20,123317],{"alt":22,"src":123318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123320,123321],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123323,123324],{},[20,123325],{"alt":22,"src":123326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123328,123329],{},[20,123330],{"alt":22,"src":123331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123333,123334],{},[760,123335,123336],{},"4.使用",[14,123338,123339,123340,123278,123342,123344],{},"步骤1：继续使用快捷键",[31,123341,123277],{},[31,123343,123281],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123346,123347],{},[20,123348],{"alt":22,"src":123349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123351,123352,123353,123356],{},"或者，也可以点击侧边栏的",[31,123354,123355],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123358,123359],{},[20,123360],{"alt":22,"src":123361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123363,123364,123365,123368,123369,123372],{},"步骤2：选择菜单栏的",[31,123366,123367],{},"文件","下的",[31,123370,123371],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123374,123375],{},[20,123376],{"alt":22,"src":123377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123379,123380],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[555,123382,123384],{"id":123383},"_73-远程桌面","7.3 远程桌面",[14,123386,123387],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123389,123390],{},"我们选择使用VNC来看。",[567,123392,123393],{},[570,123394,123395],{},"安装VNC服务器：",[14,123397,123398],{},"这里以TigerVNC为例进行安装：",[25,123400,123402],{"className":117683,"code":123401,"language":117685,"meta":22,"style":22},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[31,123403,123404],{"__ignoreMap":22},[34,123405,123406,123408,123410,123412,123415],{"class":36,"line":37},[34,123407,25041],{"class":2427},[34,123409,117704],{"class":187},[34,123411,24298],{"class":187},[34,123413,123414],{"class":187}," tigervnc-standalone-server",[34,123416,123417],{"class":187}," tigervnc-common\n",[567,123419,123420],{"start":44},[570,123421,123422],{},"设置VNC密码：",[14,123424,123425],{},"为VNC用户设置密码，运行以下命令：",[25,123427,123429],{"className":117683,"code":123428,"language":117685,"meta":22,"style":22},"vncpasswd\n",[31,123430,123431],{"__ignoreMap":22},[34,123432,123433],{"class":36,"line":37},[34,123434,123428],{"class":2427},[567,123436,123437],{"start":50},[570,123438,123439],{},"配置VNC启动脚本:",[14,123441,123442],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[25,123444,123446],{"className":117683,"code":123445,"language":117685,"meta":22,"style":22},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[31,123447,123448,123457],{"__ignoreMap":22},[34,123449,123450,123452,123454],{"class":36,"line":37},[34,123451,101653],{"class":2427},[34,123453,29681],{"class":63},[34,123455,123456],{"class":187}," ~\u002F.vnc\n",[34,123458,123459,123462],{"class":36,"line":44},[34,123460,123461],{"class":2427},"nano",[34,123463,123464],{"class":187}," ~\u002F.vnc\u002Fxstartup\n",[14,123466,123467],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[25,123469,123471],{"className":117683,"code":123470,"language":117685,"meta":22,"style":22},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[31,123472,123473,123478,123486,123493],{"__ignoreMap":22},[34,123474,123475],{"class":36,"line":37},[34,123476,123477],{"class":40},"#!\u002Fbin\u002Fsh\n",[34,123479,123480,123483],{"class":36,"line":44},[34,123481,123482],{"class":63},"unset",[34,123484,123485],{"class":187}," SESSION_MANAGER\n",[34,123487,123488,123490],{"class":36,"line":50},[34,123489,123482],{"class":63},[34,123491,123492],{"class":187}," DBUS_SESSION_BUS_ADDRESS\n",[34,123494,123495],{"class":36,"line":56},[34,123496,123497],{"class":2427},"gnome-session\n",[14,123499,123500],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[567,123502,123503],{"start":56},[570,123504,123505],{},"给予执行权限：",[14,123507,123508],{},"为xstartup文件设置执行权限：",[25,123510,123512],{"className":117683,"code":123511,"language":117685,"meta":22,"style":22},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[31,123513,123514],{"__ignoreMap":22},[34,123515,123516,123518,123521],{"class":36,"line":37},[34,123517,25076],{"class":2427},[34,123519,123520],{"class":187}," +x",[34,123522,123464],{"class":187},[567,123524,123525],{"start":107},[570,123526,123527],{},"启动VNC服务器：",[25,123529,123531],{"className":117683,"code":123530,"language":117685,"meta":22,"style":22},"vncserver -geometry 1920x1080 -localhost=0\n",[31,123532,123533],{"__ignoreMap":22},[34,123534,123535,123538,123541,123544],{"class":36,"line":37},[34,123536,123537],{"class":2427},"vncserver",[34,123539,123540],{"class":63}," -geometry",[34,123542,123543],{"class":187}," 1920x1080",[34,123545,123546],{"class":63}," -localhost=0\n",[14,123548,123549],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123551,123552],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[567,123554,123555],{"start":196},[570,123556,123557],{},"查看已开启的VNC服务器：",[25,123559,123561],{"className":117683,"code":123560,"language":117685,"meta":22,"style":22},"vncserver -list\n",[31,123562,123563],{"__ignoreMap":22},[34,123564,123565,123567],{"class":36,"line":37},[34,123566,123537],{"class":2427},[34,123568,123569],{"class":63}," -list\n",[14,123571,123572],{},[20,123573],{"alt":22,"src":123574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[567,123576,123577],{"start":202},[570,123578,123579],{},"连接到VNC服务器：",[14,123581,123582],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[567,123584,123585],{"start":207},[570,123586,123587],{},"停止VNC服务器：",[14,123589,123590],{},"如果需要停止VNC服务器，可以使用以下命令：",[25,123592,123594],{"className":117683,"code":123593,"language":117685,"meta":22,"style":22},"vncserver -kill :1\n",[31,123595,123596],{"__ignoreMap":22},[34,123597,123598,123600,123603],{"class":36,"line":37},[34,123599,123537],{"class":2427},[34,123601,123602],{"class":63}," -kill",[34,123604,123605],{"class":187}," :1\n",[14,123607,123608],{},"将:1替换为你实际使用的显示编号。",[14,123610,123611],{},[20,123612],{"alt":22,"src":123613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123615,123616],{},[20,123617],{"alt":22,"src":123618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[555,123620,123622],{"id":123621},"_74-usb端口设置","7.4 USB端口设置",[14,123624,123625],{},[760,123626,123627],{},"首先先配置好权限",[25,123629,123631],{"className":117683,"code":123630,"language":117685,"meta":22,"style":22},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[31,123632,123633,123638,123651,123658,123663],{"__ignoreMap":22},[34,123634,123635],{"class":36,"line":37},[34,123636,123637],{"class":40},"# 将用户权限提高\n",[34,123639,123640,123642,123644,123646,123649],{"class":36,"line":44},[34,123641,25041],{"class":2427},[34,123643,27039],{"class":187},[34,123645,27042],{"class":63},[34,123647,123648],{"class":187}," dialout",[34,123650,27047],{"class":59},[34,123652,123653,123655],{"class":36,"line":50},[34,123654,27066],{"class":2427},[34,123656,123657],{"class":187}," dialout\n",[34,123659,123660],{"class":36,"line":56},[34,123661,123662],{"class":40},"# 查看下面命令是否输出dialout（若输出才正常）\n",[34,123664,123665],{"class":36,"line":107},[34,123666,123667],{"class":2427},"groups\n",[14,123669,123670],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[584,123672,123674],{"id":123673},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123676,123677,123680],{},[760,123678,123679],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123682,123683,123686],{},[760,123684,123685],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123688,123689],{},[760,123690,123691],{},"流程如下：",[14,123693,123694],{},"（1）.查找设备idVendor和idProduct",[14,123696,123697,123698,123701],{},"接入两个USB设备，在终端调用指令",[31,123699,123700],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123703,123704],{},[20,123705],{"alt":22,"src":123706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123708,123709,123710,123713],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[31,123711,123712],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123715,123716],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123718,123719],{},"（2）.编写映射规则",[14,123721,123722,123723,123726],{},"在",[31,123724,123725],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[25,123728,123730],{"className":117683,"code":123729,"language":117685,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[31,123731,123732],{"__ignoreMap":22},[34,123733,123734,123736,123738],{"class":36,"line":37},[34,123735,25041],{"class":2427},[34,123737,118970],{"class":187},[34,123739,123740],{"class":187}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123742,123743],{},"输入如下内容：",[25,123745,123747],{"className":117683,"code":123746,"language":117685,"meta":22,"style":22},"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",[31,123748,123749,123779],{"__ignoreMap":22},[34,123750,123751,123754,123756,123759,123762,123765,123768,123770,123773,123776],{"class":36,"line":37},[34,123752,123753],{"class":59},"KERNEL",[34,123755,447],{"class":112},[34,123757,123758],{"class":187},"=\"ttyUSB*\",",[34,123760,123761],{"class":2427}," ATTRS",[34,123763,123764],{"class":187},"{idVendor}==",[34,123766,123767],{"class":2427},"\"10c4\"",[34,123769,67],{"class":2427},[34,123771,123772],{"class":187}," ATTRS{idProduct}==\"ea60\",",[34,123774,123775],{"class":187}," MODE:=\"0777\",",[34,123777,123778],{"class":187}," SYMLINK+=\"mylidar\"\n",[34,123780,123781,123783,123785,123787,123789,123791,123794,123796,123799,123801],{"class":36,"line":44},[34,123782,123753],{"class":59},[34,123784,447],{"class":112},[34,123786,123758],{"class":187},[34,123788,123761],{"class":2427},[34,123790,123764],{"class":187},[34,123792,123793],{"class":2427},"\"1a86\"",[34,123795,67],{"class":2427},[34,123797,123798],{"class":187}," ATTRS{idProduct}==\"7523\",",[34,123800,123775],{"class":187},[34,123802,123803],{"class":187}," SYMLINK+=\"mycar\"\n",[14,123805,123806],{},"代码解释：",[1611,123808,123809,123812,123815,123818],{},[570,123810,123811],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[570,123813,123814],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[570,123816,123817],{},"SYMLINK是符号连接，即绑定的别名；",[570,123819,123820],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123822,123823,123824,123827,123830],{},"***小提示：***",[24017,123825,123826],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[31,123828,123829],{},"\u002Fetc\u002Fudev\u002Frule.d",[24017,123831,123832],{},"目录即可。",[14,123834,123835],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123837,123838],{},"（3）.使规则生效",[14,123840,123841],{},"在终端下输入如下指令：",[25,123843,123845],{"className":117683,"code":123844,"language":117685,"meta":22,"style":22},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[31,123846,123847,123852,123864,123875,123879,123884,123897],{"__ignoreMap":22},[34,123848,123849],{"class":36,"line":37},[34,123850,123851],{"class":40},"# Ubuntu用下方命令\n",[34,123853,123854,123856,123858,123861],{"class":36,"line":44},[34,123855,25041],{"class":2427},[34,123857,120435],{"class":187},[34,123859,123860],{"class":187}," udev",[34,123862,123863],{"class":187}," reload\n",[34,123865,123866,123868,123870,123872],{"class":36,"line":50},[34,123867,25041],{"class":2427},[34,123869,120435],{"class":187},[34,123871,123860],{"class":187},[34,123873,123874],{"class":187}," restart\n",[34,123876,123877],{"class":36,"line":56},[34,123878,2864],{"emptyLinePlaceholder":540},[34,123880,123881],{"class":36,"line":107},[34,123882,123883],{"class":40},"#Fedora用下方命令\n",[34,123885,123886,123888,123891,123894],{"class":36,"line":196},[34,123887,25041],{"class":2427},[34,123889,123890],{"class":187}," udevadm",[34,123892,123893],{"class":187}," control",[34,123895,123896],{"class":63}," --reload\n",[34,123898,123899,123901,123903],{"class":36,"line":202},[34,123900,25041],{"class":2427},[34,123902,123890],{"class":187},[34,123904,123905],{"class":187}," trigger\n",[14,123907,123908],{},"再重新插拔设备即可。",[14,123910,123911],{},"（4）.测试",[14,123913,123914],{},"终端下输入如下指令",[25,123916,123918],{"className":117683,"code":123917,"language":117685,"meta":22,"style":22},"ll \u002Fdev | grep ttyUSB\n",[31,123919,123920],{"__ignoreMap":22},[34,123921,123922,123925,123928,123930,123932],{"class":36,"line":37},[34,123923,123924],{"class":2427},"ll",[34,123926,123927],{"class":187}," \u002Fdev",[34,123929,25574],{"class":112},[34,123931,30701],{"class":2427},[34,123933,123934],{"class":187}," ttyUSB\n",[14,123936,123937],{},"运行结果如下：",[14,123939,123940],{},[20,123941],{"alt":22,"src":123942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123944,123945,123946,123949],{},"也可以多次插拔USB设备，会发现设备端口",[31,123947,123948],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123951,123952],{},[760,123953,118351],{},[14,123955,123956],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[584,123958,123960],{"id":123959},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123962,123963,123965],{},[760,123964,123679],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123967,123968,123970],{},[760,123969,123685],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123972,123973],{},[760,123974,123691],{},[14,123976,123977],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123979,123980],{},"调用如下指令查看第一台雷达的USB信息：",[25,123982,123984],{"className":117683,"code":123983,"language":117685,"meta":22,"style":22},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[31,123985,123986,124006],{"__ignoreMap":22},[34,123987,123988,123991,123993,123996,123999,124001,124003],{"class":36,"line":37},[34,123989,123990],{"class":2427},"udevadm",[34,123992,70282],{"class":187},[34,123994,123995],{"class":63}," --attribute-walk",[34,123997,123998],{"class":63}," --name=\u002Fdev\u002FttyUSB0",[34,124000,25574],{"class":112},[34,124002,30701],{"class":2427},[34,124004,124005],{"class":187}," KERNELS\n",[34,124007,124008,124010,124012,124014,124017,124019,124021],{"class":36,"line":44},[34,124009,123990],{"class":2427},[34,124011,70282],{"class":187},[34,124013,123995],{"class":63},[34,124015,124016],{"class":63}," --name=\u002Fdev\u002FttyACM0",[34,124018,25574],{"class":112},[34,124020,30701],{"class":2427},[34,124022,124005],{"class":187},[14,124024,124025],{},[20,124026],{"alt":22,"src":124027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124029,124030],{},"调用如下指令查看第二台雷达的USB信息：",[25,124032,124034],{"className":117683,"code":124033,"language":117685,"meta":22,"style":22},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[31,124035,124036],{"__ignoreMap":22},[34,124037,124038,124040,124042,124044,124047,124049,124051],{"class":36,"line":37},[34,124039,123990],{"class":2427},[34,124041,70282],{"class":187},[34,124043,123995],{"class":63},[34,124045,124046],{"class":63}," --name=\u002Fdev\u002FttyUSB1",[34,124048,25574],{"class":112},[34,124050,30701],{"class":2427},[34,124052,124005],{"class":187},[14,124054,124055,124056,124059,124060,124063,124064,124067],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[31,124057,124058],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[31,124061,124062],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[760,124065,124066],{},"唯一性标识","”。",[14,124069,123719],{},[14,124071,123722,124072,124074],{},[31,124073,123725],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[25,124076,124077],{"className":117683,"code":123729,"language":117685,"meta":22,"style":22},[31,124078,124079],{"__ignoreMap":22},[34,124080,124081,124083,124085],{"class":36,"line":37},[34,124082,25041],{"class":2427},[34,124084,118970],{"class":187},[34,124086,123740],{"class":187},[25,124088,124090],{"className":117683,"code":124089,"language":117685,"meta":22,"style":22},"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",[31,124091,124092,124121],{"__ignoreMap":22},[34,124093,124094,124096,124098,124100,124103,124105,124108,124111,124113,124116,124118],{"class":36,"line":37},[34,124095,123753],{"class":59},[34,124097,447],{"class":112},[34,124099,123758],{"class":187},[34,124101,124102],{"class":59}," KERNELS",[34,124104,447],{"class":112},[34,124106,124107],{"class":187},"=\"1-1.3:1.0\",",[34,124109,124110],{"class":2427}," MODE:",[34,124112,447],{"class":187},[34,124114,124115],{"class":2427},"\"0777\"",[34,124117,67],{"class":2427},[34,124119,124120],{"class":187}," SYMLINK+=\"rplidar_front\"\n",[34,124122,124123,124125,124127,124129,124131,124133,124136,124138,124140,124142,124144],{"class":36,"line":44},[34,124124,123753],{"class":59},[34,124126,447],{"class":112},[34,124128,123758],{"class":187},[34,124130,124102],{"class":59},[34,124132,447],{"class":112},[34,124134,124135],{"class":187},"=\"1-1.4:1.0\",",[34,124137,124110],{"class":2427},[34,124139,447],{"class":187},[34,124141,124115],{"class":2427},[34,124143,67],{"class":2427},[34,124145,124146],{"class":187}," SYMLINK+=\"rplidar_back\"\n",[14,124148,123838],{},[14,124150,123841],{},[25,124152,124153],{"className":117683,"code":123844,"language":117685,"meta":22,"style":22},[31,124154,124155,124159,124169,124179,124183,124187,124197],{"__ignoreMap":22},[34,124156,124157],{"class":36,"line":37},[34,124158,123851],{"class":40},[34,124160,124161,124163,124165,124167],{"class":36,"line":44},[34,124162,25041],{"class":2427},[34,124164,120435],{"class":187},[34,124166,123860],{"class":187},[34,124168,123863],{"class":187},[34,124170,124171,124173,124175,124177],{"class":36,"line":50},[34,124172,25041],{"class":2427},[34,124174,120435],{"class":187},[34,124176,123860],{"class":187},[34,124178,123874],{"class":187},[34,124180,124181],{"class":36,"line":56},[34,124182,2864],{"emptyLinePlaceholder":540},[34,124184,124185],{"class":36,"line":107},[34,124186,123883],{"class":40},[34,124188,124189,124191,124193,124195],{"class":36,"line":196},[34,124190,25041],{"class":2427},[34,124192,123890],{"class":187},[34,124194,123893],{"class":187},[34,124196,123896],{"class":63},[34,124198,124199,124201,124203],{"class":36,"line":202},[34,124200,25041],{"class":2427},[34,124202,123890],{"class":187},[34,124204,123905],{"class":187},[14,124206,123908],{},[14,124208,123911],{},[14,124210,123914,124211,124214],{},[31,124212,124213],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124216,124217],{},[20,124218],{"alt":22,"src":124219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124221,124222],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124224,124225,124227],{},[760,124226,118351],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[584,124229,124231],{"id":124230},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124233,124234],{},"（1）.查看所连接的主机USB接口的信息",[25,124236,124238],{"className":117683,"code":124237,"language":117685,"meta":22,"style":22},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[31,124239,124240,124270],{"__ignoreMap":22},[34,124241,124242,124244,124246,124249,124251,124253,124255,124257,124260,124263,124265,124268],{"class":36,"line":37},[34,124243,123990],{"class":2427},[34,124245,70282],{"class":187},[34,124247,124248],{"class":63}," -a",[34,124250,29681],{"class":63},[34,124252,28887],{"class":59},[34,124254,123990],{"class":2427},[34,124256,70282],{"class":187},[34,124258,124259],{"class":63}," -q",[34,124261,124262],{"class":187}," path",[34,124264,25580],{"class":63},[34,124266,124267],{"class":187}," \u002Fdev\u002FttyACM0",[34,124269,623],{"class":59},[34,124271,124272,124274,124276,124278,124280,124282,124284,124286,124288,124290,124292,124295],{"class":36,"line":44},[34,124273,123990],{"class":2427},[34,124275,70282],{"class":187},[34,124277,124248],{"class":63},[34,124279,29681],{"class":63},[34,124281,28887],{"class":59},[34,124283,123990],{"class":2427},[34,124285,70282],{"class":187},[34,124287,124259],{"class":63},[34,124289,124262],{"class":187},[34,124291,25580],{"class":63},[34,124293,124294],{"class":187}," \u002Fdev\u002FttyUSB0",[34,124296,623],{"class":59},[14,124298,124299],{},[20,124300],{"alt":22,"src":124301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124303,124304],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124306,123719],{},[14,124308,123722,124309,124074],{},[31,124310,123725],{},[25,124312,124313],{"className":117683,"code":123729,"language":117685,"meta":22,"style":22},[31,124314,124315],{"__ignoreMap":22},[34,124316,124317,124319,124321],{"class":36,"line":37},[34,124318,25041],{"class":2427},[34,124320,118970],{"class":187},[34,124322,123740],{"class":187},[25,124324,124326],{"className":117683,"code":124325,"language":117685,"meta":22,"style":22},"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",[31,124327,124328,124356,124382],{"__ignoreMap":22},[34,124329,124330,124332,124334,124337,124339,124341,124343,124345,124348,124351,124353],{"class":36,"line":37},[34,124331,123753],{"class":59},[34,124333,447],{"class":112},[34,124335,124336],{"class":187},"=\"ttyACM*\",",[34,124338,123761],{"class":2427},[34,124340,123764],{"class":187},[34,124342,123793],{"class":2427},[34,124344,67],{"class":2427},[34,124346,124347],{"class":187}," ATTRS{idProduct}==\"55d4\",",[34,124349,124350],{"class":187}," ATTRS{serial}==\"0001\",",[34,124352,123775],{"class":187},[34,124354,124355],{"class":187}," SYMLINK+=\"ttyACM_MCU\"\n",[34,124357,124358,124360,124362,124364,124366,124368,124370,124372,124374,124377,124379],{"class":36,"line":44},[34,124359,123753],{"class":59},[34,124361,447],{"class":112},[34,124363,124336],{"class":187},[34,124365,123761],{"class":2427},[34,124367,123764],{"class":187},[34,124369,123793],{"class":2427},[34,124371,67],{"class":2427},[34,124373,124347],{"class":187},[34,124375,124376],{"class":187}," ATTRS{serial}==\"0002\",",[34,124378,123775],{"class":187},[34,124380,124381],{"class":187}," SYMLINK+=\"ttyACM_Lidar\"\n",[34,124383,124384,124386,124388,124390,124392,124394,124396,124398,124400,124402],{"class":36,"line":50},[34,124385,123753],{"class":59},[34,124387,447],{"class":112},[34,124389,123758],{"class":187},[34,124391,123761],{"class":2427},[34,124393,123764],{"class":187},[34,124395,123793],{"class":2427},[34,124397,67],{"class":2427},[34,124399,123798],{"class":187},[34,124401,123775],{"class":187},[34,124403,124404],{"class":187}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124406,123838],{},[14,124408,123841],{},[25,124410,124411],{"className":117683,"code":123844,"language":117685,"meta":22,"style":22},[31,124412,124413,124417,124427,124437,124441,124445,124455],{"__ignoreMap":22},[34,124414,124415],{"class":36,"line":37},[34,124416,123851],{"class":40},[34,124418,124419,124421,124423,124425],{"class":36,"line":44},[34,124420,25041],{"class":2427},[34,124422,120435],{"class":187},[34,124424,123860],{"class":187},[34,124426,123863],{"class":187},[34,124428,124429,124431,124433,124435],{"class":36,"line":50},[34,124430,25041],{"class":2427},[34,124432,120435],{"class":187},[34,124434,123860],{"class":187},[34,124436,123874],{"class":187},[34,124438,124439],{"class":36,"line":56},[34,124440,2864],{"emptyLinePlaceholder":540},[34,124442,124443],{"class":36,"line":107},[34,124444,123883],{"class":40},[34,124446,124447,124449,124451,124453],{"class":36,"line":196},[34,124448,25041],{"class":2427},[34,124450,123890],{"class":187},[34,124452,123893],{"class":187},[34,124454,123896],{"class":63},[34,124456,124457,124459,124461],{"class":36,"line":202},[34,124458,25041],{"class":2427},[34,124460,123890],{"class":187},[34,124462,123905],{"class":187},[14,124464,124465,124466],{},"再重新插拔设备即可，或者 ",[760,124467,124468],{},"直接重启系统。",[14,124470,123911],{},[14,124472,123914,124473,124214],{},[31,124474,124213],{},[14,124476,124477],{},[20,124478],{"alt":22,"src":124479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124481,124222],{},[14,124483,124484,124486],{},[760,124485,118351],{}," 一些设备可能没有串口号等。",[584,124488,124490],{"id":124489},"_744-其他注意事项","7.4.4 其他注意事项",[14,124492,124493,124494,124496,124497,124500,124501,18874,124504,124507,124508,124510],{},"并非所有的USB设备端口号都是",[31,124495,123948],{},"的格式，比如Arduino的端口号可能是",[31,124498,124499],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[31,124502,124503],{},"videon",[31,124505,124506],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[31,124509,124503],{},"端口，绑定时需要关联的也是该接口。",[14,124512,124513,124514,124517,124518,124521,124522,124524,124525,124528,124529,124532,124533,124536,124537,124536,124540,124536,124543,28850],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[31,124515,124516],{},"KERNEL==\"ttyUSB*\"","修改为",[31,124519,124520],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[31,124523,124516],{},"修改为类似于",[31,124526,124527],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[31,124530,124531],{},"video[0,2,4,6]","表示可以绑定的端口为",[31,124534,124535],{},"video0","或",[31,124538,124539],{},"video2",[31,124541,124542],{},"video4",[31,124544,124545],{},"video6",[555,124547,124549],{"id":124548},"_75-挂载内网网页","7.5 挂载内网网页",[14,124551,124552],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124554,124555],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124557,124558],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124560,124561,124562],{},"Termux 下载地址（F-Droid）：",[847,124563,124564],{"href":124564,"rel":124565},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24329],[14,124567,124568],{},"首先打开app后，先更新软件缓存：",[25,124570,124572],{"className":117683,"code":124571,"language":117685,"meta":22,"style":22},"pkg update\n",[31,124573,124574],{"__ignoreMap":22},[34,124575,124576,124579],{"class":36,"line":37},[34,124577,124578],{"class":2427},"pkg",[34,124580,26707],{"class":187},[14,124582,124583],{},"然后换源",[25,124585,124587],{"className":117683,"code":124586,"language":117685,"meta":22,"style":22},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[31,124588,124589],{"__ignoreMap":22},[34,124590,124591,124593,124596],{"class":36,"line":37},[34,124592,123461],{"class":2427},[34,124594,124595],{"class":59}," $PREFIX",[34,124597,124598],{"class":187},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124600,124601],{},"将该文件内容替换为下面：",[25,124603,124605],{"className":117683,"code":124604,"language":117685,"meta":22,"style":22},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[31,124606,124607],{"__ignoreMap":22},[34,124608,124609,124612,124615,124618],{"class":36,"line":37},[34,124610,124611],{"class":2427},"deb",[34,124613,124614],{"class":187}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[34,124616,124617],{"class":187}," stable",[34,124619,124620],{"class":187}," main\n",[1611,124622,124623,124650],{},[570,124624,124625,124626,124628,124629],{},"如果你使用的是",[31,124627,123461],{},"编辑器：",[1611,124630,124631,124638,124644],{},[570,124632,124633,124634,124637],{},"按 ",[31,124635,124636],{},"Ctrl+O"," 保存文件。",[570,124639,124633,124640,124643],{},[31,124641,124642],{},"Enter"," 确认文件名。",[570,124645,124633,124646,124649],{},[31,124647,124648],{},"Ctrl+X"," 退出编辑器。",[570,124651,124625,124652,124628,124655],{},[31,124653,124654],{},"vim",[1611,124656,124657,124663],{},[570,124658,124633,124659,124662],{},[31,124660,124661],{},"Esc"," 退出编辑模式。",[570,124664,124665,124666,124668],{},"输入 ",[31,124667,119608],{}," 保存并退出。",[14,124670,124671],{},"接下来重新更新软件源：",[25,124673,124675],{"className":117683,"code":124674,"language":117685,"meta":22,"style":22},"pkg update && pkg upgrade\n",[31,124676,124677],{"__ignoreMap":22},[34,124678,124679,124681,124683,124685,124687],{"class":36,"line":37},[34,124680,124578],{"class":2427},[34,124682,117734],{"class":187},[34,124684,26655],{"class":59},[34,124686,124578],{"class":2427},[34,124688,117720],{"class":187},[14,124690,124691],{},"安装python：",[25,124693,124695],{"className":117683,"code":124694,"language":117685,"meta":22,"style":22},"pkg install python\n",[31,124696,124697],{"__ignoreMap":22},[34,124698,124699,124701,124703],{"class":36,"line":37},[34,124700,124578],{"class":2427},[34,124702,24298],{"class":187},[34,124704,124705],{"class":187}," python\n",[14,124707,124708,26938],{},[760,124709,124710],{},"通过Termux访问设备存储",[14,124712,124713],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[25,124715,124717],{"className":117683,"code":124716,"language":117685,"meta":22,"style":22},"termux-setup-storage\n",[31,124718,124719],{"__ignoreMap":22},[34,124720,124721],{"class":36,"line":37},[34,124722,124716],{"class":2427},[567,124724,124725],{},[570,124726,124727,26938,124730],{},[760,124728,124729],{},"进入HTML文件所在的目录",[567,124731,124732],{},[570,124733,124734,124735,124737],{},"使用",[31,124736,101663],{},"命令进入HTML文件所在的目录：",[25,124739,124741],{"className":117683,"code":124740,"language":117685,"meta":22,"style":22},"cd ~\u002Fyour_html_folder\n",[31,124742,124743],{"__ignoreMap":22},[34,124744,124745,124747],{"class":36,"line":37},[34,124746,101663],{"class":63},[34,124748,124749],{"class":187}," ~\u002Fyour_html_folder\n",[567,124751,124752],{"start":44},[570,124753,124754,26938,124757,124762,124779],{},[760,124755,124756],{},"启动Python HTTP服务器",[567,124758,124759],{},[570,124760,124761],{},"运行以下命令启动一个简单的HTTP服务器：",[25,124763,124765],{"className":117683,"code":124764,"language":117685,"meta":22,"style":22},"python -m http.server 8000\n",[31,124766,124767],{"__ignoreMap":22},[34,124768,124769,124771,124773,124776],{"class":36,"line":37},[34,124770,29],{"class":2427},[34,124772,101269],{"class":63},[34,124774,124775],{"class":187}," http.server",[34,124777,124778],{"class":63}," 8000\n",[567,124780,124781],{"start":50},[570,124782,124783,124784,124787],{},"这会在端口",[31,124785,124786],{},"8000","上启动一个Web服务器。",[1611,124789,124790],{},[570,124791,124792],{},"启动服务器后，Termux会显示日志信息，例如：",[25,124794,124796],{"className":121203,"code":124795,"language":121205,"meta":121206,"style":22},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[31,124797,124798],{"__ignoreMap":22},[34,124799,124800],{"class":36,"line":37},[34,124801,124795],{},[1611,124803,124804],{},[570,124805,124806],{},"这表示服务器已成功启动。",[14,124808,124809],{},[760,124810,124811],{},"在浏览器中访问HTML文件",[567,124813,124814],{},[570,124815,124816,26938,124819,124824],{},[760,124817,124818],{},"在同一设备上访问",[567,124820,124821],{},[570,124822,124823],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[25,124825,124828],{"className":124826,"code":124827,"language":72125,"meta":22,"style":22},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[31,124829,124830],{"__ignoreMap":22},[34,124831,124832,124835],{"class":36,"line":37},[34,124833,124834],{"class":59},"http:",[34,124836,124837],{"class":40},"\u002F\u002Flocalhost:8000\n",[1611,124839,124840],{},[570,124841,124842,124843,124846],{},"如果HTML文件中有",[31,124844,124845],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[555,124848,124850],{"id":124849},"_76-linux重点知识","7.6 Linux重点知识",[584,124852,124854],{"id":124853},"_761-关于点的说明","7.6.1 关于点的说明",[14,124856,124857],{},[20,124858],{"alt":22,"src":124859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124861,124862],{},"一点本目录，两点上目录",[584,124864,124866],{"id":124865},"_762-目录","7.6.2 目录",[22462,124868,124870],{"id":124869},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124872,124873],{},[760,124874,124875],{},"\u002Fboot:",[14,124877,124878],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124880,124881],{},[760,124882,124883],{},"\u002Fetc:",[14,124885,124886],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124888,124889],{},[760,124890,124891],{},"\u002Flib：",[14,124893,124894],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124896,124897],{},[760,124898,124899],{},"\u002Fsys:",[14,124901,124902],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22462,124904,124906],{"id":124905},"_7622-指令集合","7.6.2.2 指令集合",[14,124908,124909],{},[760,124910,124911],{},"\u002Fbin:",[14,124913,124914],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124916,124917],{},[760,124918,124919],{},"\u002Fsbin:",[14,124921,124922],{},"只有系统管理员才能使用的程序和指令",[22462,124924,124926],{"id":124925},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124928,124929],{},[760,124930,124931],{},"\u002Fdev:",[14,124933,124934],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124936,124937],{},[760,124938,124939],{},"\u002Fmedia:",[14,124941,124942],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124944,124945],{},[760,124946,124947],{},"\u002Fmnt:",[14,124949,124950],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22462,124952,124954],{"id":124953},"_7624-临时文件","7.6.2.4 临时文件",[14,124956,124957],{},[760,124958,124959],{},"\u002Frun:",[14,124961,124962],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124964,124965],{},[760,124966,124967],{},"\u002Flost+found:",[14,124969,124970],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124972,124973],{},[760,124974,124975],{},"\u002Ftmp:",[14,124977,124978],{},"这个目录是用来存放一些临时文件的",[22462,124980,124982],{"id":124981},"_7625-账户","7.6.2.5 账户",[14,124984,124985],{},[760,124986,124987],{},"\u002Froot：",[14,124989,124990],{},"系统管理员的用户主目录",[14,124992,124993,26938],{},[760,124994,124995],{},"\u002Fhome",[14,124997,124998],{},"用户的主目录，以用户的账号命名的",[14,125000,125001,26938],{},[760,125002,125003],{},"\u002Fusr",[14,125005,125006],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,125008,125009],{},[760,125010,125011],{},"\u002Fusr\u002Fbin：",[14,125013,125014],{},"系统用户使用的应用程序与指令",[14,125016,125017],{},[760,125018,125019],{},"\u002Fusr\u002Fsbin：",[14,125021,125022],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125024,125025],{},[760,125026,125027],{},"\u002Fusr\u002Fsrc：",[14,125029,125030],{},"内核源代码默认的放置目录",[22462,125032,125034],{"id":125033},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125036,125037],{},[760,125038,125039],{},"\u002Fvar：",[14,125041,125042],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125044,125045],{},[760,125046,125047],{},"\u002Fproc:",[14,125049,125050,125051,125054],{},"管理 ",[760,125052,125053],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22462,125056,125058],{"id":125057},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125060,125061],{},[760,125062,125063],{},"\u002Fopt:",[14,125065,125066],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125068,125069],{},[760,125070,125071],{},"\u002Fsrv:",[14,125073,125074],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[584,125076,125078],{"id":125077},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125080,125081],{},[20,125082],{"alt":22,"src":125083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125085,125086],{},"windows-->linux:",[14,125088,125089],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125091,125092],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125094,125095],{},"linux传输文件到windows",[14,125097,125098],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[584,125100,125102],{"id":125101},"_764-易忘知识","7.6.4 易忘知识",[14,125104,125105],{},"操作系统内核查看",[25,125107,125108],{"className":117683,"code":121677,"language":117685,"meta":22,"style":22},[31,125109,125110],{"__ignoreMap":22},[34,125111,125112,125114],{"class":36,"line":37},[34,125113,70665],{"class":2427},[34,125115,121686],{"class":63},[14,125117,125118],{},[20,125119],{"alt":22,"src":125120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125122,125123],{},[20,125124],{"alt":22,"src":125125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[25,125127,125129],{"className":117683,"code":125128,"language":117685,"meta":22,"style":22},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[31,125130,125131,125143],{"__ignoreMap":22},[34,125132,125133,125135,125138,125141],{"class":36,"line":37},[34,125134,121894],{"class":2427},[34,125136,125137],{"class":187}," mvtest",[34,125139,125140],{"class":187}," mvtest2",[34,125142,3138],{"class":59},[34,125144,125145],{"class":36,"line":44},[34,125146,125147],{"class":2427},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125149,125150],{},[20,125151],{"alt":22,"src":125152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125154,125155],{},[20,125156],{"alt":22,"src":125157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125159,125160,125161,125164],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[31,125162,125163],{},"du -a"," 可以快速查看磁盘使用细节。",[584,125166,125168],{"id":125167},"_765-vim","7.6.5 Vim",[14,125170,125171],{},[20,125172],{"alt":22,"src":125173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125175,125176],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125178,125179],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125181,125182],{},[760,125183,125184],{},"1.命令模式：",[14,125186,125187],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125189,125190],{},"x 删除当前光标所在处的字符",[14,125192,125193],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125195,125196],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125198,125199],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125201,125202],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125204,125205],{},"dd 剪切当前行",[14,125207,125208],{},"yy 复制当前行",[14,125210,125211],{},"p 粘贴剪贴板内容到光标下方",[14,125213,125214],{},"P 粘贴剪贴板内容到光标上方",[14,125216,125217],{},"u 撤销上一次操作",[14,125219,125220],{},"ctrl+r 重做上一次操作",[14,125222,125223,125225],{},[1401,125224],{}," 保存文件",[14,125227,125228,125230],{},[1251,125229],{}," 退出Vim编辑器",[14,125232,125233,125235],{},[1251,125234],{},"! 强制退出Vim编辑器，不保存修改",[14,125237,125238],{},[760,125239,125240],{},"2.输入模式：",[14,125242,125243],{},[20,125244],{"alt":22,"src":125245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125247,125248],{},[760,125249,125250],{},"3.底线命令模式：",[14,125252,125253],{},[20,125254],{"alt":22,"src":125255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125257,125258],{},"按下esc可以退出底线命令模式",[584,125260,125262],{"id":125261},"_766-apt","7.6.6 apt",[14,125264,125265],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[584,125267,125269],{"id":125268},"_767-home与root的区别","7.6.7 home与root的区别",[14,125271,125272],{},[20,125273],{"alt":22,"src":125274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125276,125277],{},[20,125278],{"alt":22,"src":125279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125281,125282],{},[20,125283],{"alt":22,"src":125284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125286,125287],{},[20,125288],{"alt":22,"src":125289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[584,125291,125293],{"id":125292},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125295,125296],{},[847,125297,125298],{"href":125298,"rel":125299},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24329],[567,125301,125302,125305],{},[570,125303,125304],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[570,125306,125307],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125309,125310],{},[20,125311],{"alt":22,"src":125312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125314,125315],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125317,125318],{},[20,125319],{"alt":22,"src":125320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[25,125322,125324],{"className":121203,"code":125323,"language":121205,"meta":121206,"style":22},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[31,125325,125326,125331],{"__ignoreMap":22},[34,125327,125328],{"class":36,"line":37},[34,125329,125330],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[34,125332,125333],{"class":36,"line":44},[34,125334,125335],{},".\u002Fpycharm.sh\n",[14,125337,125338],{},"3️⃣创建.desktop文件",[14,125340,125341],{},[760,125342,125343],{},"原理：",[1611,125345,125346,125356],{},[570,125347,125348,125349,125355],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[760,125350,125351,125354],{},[31,125352,125353],{},".desktop"," 文件"," 来识别应用。",[570,125357,125358,125360,125361],{},[31,125359,125353],{}," 文件相当于一个“应用注册表”，告诉系统：",[1611,125362,125363,125366,125369,125372,125375],{},[570,125364,125365],{},"应用名字（Name）",[570,125367,125368],{},"图标（Icon）",[570,125370,125371],{},"执行命令（Exec）",[570,125373,125374],{},"分类（Categories）",[570,125376,125377],{},"是否需要终端（Terminal）",[25,125379,125381],{"className":121203,"code":125380,"language":121205,"meta":121206,"style":22},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[31,125382,125383,125388],{"__ignoreMap":22},[34,125384,125385],{"class":36,"line":37},[34,125386,125387],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[34,125389,125390],{"class":36,"line":44},[34,125391,125392],{},"nano pycharm.desktop\n",[14,125394,125395],{},"nano是一个命令行下的编辑器，也可以使用vim",[25,125397,125399],{"className":121203,"code":125398,"language":121205,"meta":121206,"style":22},"[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",[31,125400,125401,125406,125411,125416,125421,125426,125431,125436,125441,125446],{"__ignoreMap":22},[34,125402,125403],{"class":36,"line":37},[34,125404,125405],{},"[Desktop Entry]\n",[34,125407,125408],{"class":36,"line":44},[34,125409,125410],{},"Version=1.0\n",[34,125412,125413],{"class":36,"line":50},[34,125414,125415],{},"Type=Application\n",[34,125417,125418],{"class":36,"line":56},[34,125419,125420],{},"Name=PyCharm\n",[34,125422,125423],{"class":36,"line":107},[34,125424,125425],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[34,125427,125428],{"class":36,"line":196},[34,125429,125430],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[34,125432,125433],{"class":36,"line":202},[34,125434,125435],{},"Comment=JetBrains PyCharm IDE\n",[34,125437,125438],{"class":36,"line":207},[34,125439,125440],{},"Categories=Development;IDE;\n",[34,125442,125443],{"class":36,"line":222},[34,125444,125445],{},"Terminal=false\n",[34,125447,125448],{"class":36,"line":227},[34,125449,125450],{},"StartupWMClass=jetbrains-pycharm\n",[1611,125452,125453,125459,125465,125471],{},[570,125454,125455,125458],{},[31,125456,125457],{},"Exec"," → 点击图标时执行的命令",[570,125460,125461,125464],{},[31,125462,125463],{},"Icon"," → 显示在菜单和桌面上的图标",[570,125466,125467,125470],{},[31,125468,125469],{},"Terminal=false"," → 不打开终端",[570,125472,125473,125476],{},[31,125474,125475],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125478,125479,125480],"blockquote",{},[14,125481,125482,125483,125485,125486],{},"可以理解成 ",[31,125484,125353],{}," 文件是 Linux 的 ",[760,125487,125488],{},"快捷方式配置文件",[14,125490,125491],{},"4️⃣设置可执行权限",[25,125493,125495],{"className":121203,"code":125494,"language":121205,"meta":121206,"style":22},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[31,125496,125497],{"__ignoreMap":22},[34,125498,125499],{"class":36,"line":37},[34,125500,125494],{},[14,125502,125503],{},"5️⃣桌面图标启动的话如下：",[25,125505,125507],{"className":121203,"code":125506,"language":121205,"meta":121206,"style":22},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[31,125508,125509,125514],{"__ignoreMap":22},[34,125510,125511],{"class":36,"line":37},[34,125512,125513],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[34,125515,125516],{"class":36,"line":44},[34,125517,125518],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[567,125520,125521],{"start":50},[570,125522,125523],{},"下载Appimage文件实现软件的安装",[14,125525,125526],{},"1️⃣先下载appimage",[14,125528,125529],{},[847,125530,125531],{"href":125531,"rel":125532},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24329],[14,125534,125535],{},[20,125536],{"alt":22,"src":125537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125539,125540],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125542,125543],{},[20,125544],{"alt":22,"src":125545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125547,125548],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125550,125551],{},[20,125552],{"alt":22,"src":125553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125555,125556],{},[20,125557],{"alt":22,"src":125558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125560,125561,125562,125565],{},"3️⃣给他们放在",[31,125563,125564],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125567,125568],{},"4️⃣给软件执行权限",[25,125570,125572],{"className":121203,"code":125571,"language":121205,"meta":121206,"style":22},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[31,125573,125574,125579],{"__ignoreMap":22},[34,125575,125576],{"class":36,"line":37},[34,125577,125578],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[34,125580,125581],{"class":36,"line":44},[34,125582,125583],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125585,125586],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[25,125588,125590],{"className":117683,"code":125589,"language":117685,"meta":22,"style":22},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[31,125591,125592,125599,125606,125612],{"__ignoreMap":22},[34,125593,125594,125596],{"class":36,"line":37},[34,125595,101663],{"class":63},[34,125597,125598],{"class":187}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[34,125600,125601,125603],{"class":36,"line":44},[34,125602,101670],{"class":2427},[34,125604,125605],{"class":187}," .\u002Fqqmusic.desktop\n",[34,125607,125608,125610],{"class":36,"line":50},[34,125609,124654],{"class":2427},[34,125611,125605],{"class":187},[34,125613,125614,125616,125618,125620],{"class":36,"line":56},[34,125615,25041],{"class":2427},[34,125617,25044],{"class":187},[34,125619,123520],{"class":187},[34,125621,125605],{"class":187},[14,125623,125624,125626],{},[31,125625,101670],{},"：一个 Linux 命令，主要功能是：",[1611,125628,125629,125632],{},[570,125630,125631],{},"如果文件不存在，就创建一个新的空文件",[570,125633,125634],{},"如果文件已存在，就更新该文件的最后修改时间",[25,125636,125638],{"className":121203,"code":125637,"language":121205,"meta":121206,"style":22},"[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",[31,125639,125640,125644,125649,125654,125659,125663,125668],{"__ignoreMap":22},[34,125641,125642],{"class":36,"line":37},[34,125643,125405],{},[34,125645,125646],{"class":36,"line":44},[34,125647,125648],{},"Name=QQ音乐\n",[34,125650,125651],{"class":36,"line":50},[34,125652,125653],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[34,125655,125656],{"class":36,"line":56},[34,125657,125658],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[34,125660,125661],{"class":36,"line":107},[34,125662,125415],{},[34,125664,125665],{"class":36,"line":196},[34,125666,125667],{},"Categories=Audio;Music;Player;\n",[34,125669,125670],{"class":36,"line":202},[34,125671,125672],{},"Comment=QQ Music Client for Linux\n",[14,125674,125675],{},"将文件复制进去",[14,125677,125678],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125680,125681],{},[20,125682],{"alt":22,"src":125683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125685,125686],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125688,125689],{},[20,125690],{"alt":22,"src":125691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125693,125694,125695,125698,125699,125702],{},"如果你用的不是KDE，那么也可以直接修改",[31,125696,125697],{},"qqmuic.desktop","：在exec的末尾加上",[31,125700,125701],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[25,125704,125706],{"className":121203,"code":125705,"language":121205,"meta":121206,"style":22},"[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",[31,125707,125708,125712,125716,125721,125725,125729,125733],{"__ignoreMap":22},[34,125709,125710],{"class":36,"line":37},[34,125711,125405],{},[34,125713,125714],{"class":36,"line":44},[34,125715,125648],{},[34,125717,125718],{"class":36,"line":50},[34,125719,125720],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[34,125722,125723],{"class":36,"line":56},[34,125724,125658],{},[34,125726,125727],{"class":36,"line":107},[34,125728,125415],{},[34,125730,125731],{"class":36,"line":196},[34,125732,125667],{},[34,125734,125735],{"class":36,"line":202},[34,125736,125672],{},[14,125738,125739],{},[20,125740],{"alt":22,"src":125741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125743,125744],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[25,125746,125748],{"className":121203,"code":125747,"language":121205,"meta":121206,"style":22},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[31,125749,125750],{"__ignoreMap":22},[34,125751,125752],{"class":36,"line":37},[34,125753,125747],{},[567,125755,125756],{"start":56},[570,125757,125758],{},"去Flathub上安装软件",[14,125760,125761],{},[847,125762,125763],{"href":125763,"rel":125764},"https:\u002F\u002Fflathub.org\u002F",[24329],[14,125766,125767],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125769,125770],{},[20,125771],{"alt":22,"src":125772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[25,125774,125776],{"className":121203,"code":125775,"language":121205,"meta":121206,"style":22},"flatpak install flathub com.obsproject.Studio\n",[31,125777,125778],{"__ignoreMap":22},[34,125779,125780],{"class":36,"line":37},[34,125781,125775],{},[14,125783,125784],{},[20,125785],{"alt":22,"src":125786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125788,125789],{},"2️⃣运行软件",[14,125791,125792],{},"a.官方方式：",[14,125794,125795],{},[20,125796],{"alt":22,"src":125797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[25,125799,125800],{"className":121203,"code":125775,"language":121205,"meta":121206,"style":22},[31,125801,125802],{"__ignoreMap":22},[34,125803,125804],{"class":36,"line":37},[34,125805,125775],{},[14,125807,125808],{},"b.当普通软件运行：",[14,125810,125811],{},[20,125812],{"alt":22,"src":125813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125815,125816],{},[20,125817],{"alt":22,"src":125818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[532,125820,125821],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":22,"searchDepth":44,"depth":44,"links":125823},[125824,125825,125830,125831,125837,125838],{"id":122556,"depth":44,"text":122557},{"id":122898,"depth":44,"text":122899,"children":125826},[125827,125828,125829],{"id":122902,"depth":50,"text":122903},{"id":122969,"depth":50,"text":122970},{"id":123230,"depth":50,"text":123231},{"id":123383,"depth":44,"text":123384},{"id":123621,"depth":44,"text":123622,"children":125832},[125833,125834,125835,125836],{"id":123673,"depth":50,"text":123674},{"id":123959,"depth":50,"text":123960},{"id":124230,"depth":50,"text":124231},{"id":124489,"depth":50,"text":124490},{"id":124548,"depth":44,"text":124549},{"id":124849,"depth":44,"text":124850,"children":125839},[125840,125841,125842,125843,125844,125845,125846,125847],{"id":124853,"depth":50,"text":124854},{"id":124865,"depth":50,"text":124866},{"id":125077,"depth":50,"text":125078},{"id":125101,"depth":50,"text":125102},{"id":125167,"depth":50,"text":125168},{"id":125261,"depth":50,"text":125262},{"id":125268,"depth":50,"text":125269},{"id":125292,"depth":50,"text":125293},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122548,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125854,"title":125855,"body":125856,"description":537,"extension":538,"meta":125860,"navigation":540,"path":125861,"seo":125862,"stem":125863,"__hash__":125864},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125857,"toc":125858},[],{"title":22,"searchDepth":44,"depth":44,"links":125859},[],{"category":30728},"\u002Fwiki\u002F2025-01-27-linux",{"title":125855,"description":537},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125866,"title":125867,"body":125868,"description":125872,"extension":538,"meta":126263,"navigation":540,"path":126264,"seo":126265,"stem":126266,"__hash__":126267},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125869,"toc":126261},[125870,125873,125877,125894,125897,125950,125954,125956,125996,126005,126009,126012,126253,126258],[14,125871,125872],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125874,125876],{"id":125875},"_1ubuntu环境配置","1.Ubuntu环境配置",[567,125878,125879,125882,125885,125888,125891],{},[570,125880,125881],{},"ubuntu环境换源",[570,125883,125884],{},"安装cuda",[570,125886,125887],{},"安装miniconda",[570,125889,125890],{},"安装pytorch",[570,125892,125893],{},"安装genesis",[14,125895,125896],{},"参考链接：",[25,125898,125900],{"className":24286,"code":125899,"language":24288,"meta":22,"style":22},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[31,125901,125902],{"__ignoreMap":22},[34,125903,125904,125907,125910,125913,125915,125918,125921,125923,125926,125929,125931,125934,125937,125939,125942,125945,125947],{"class":36,"line":37},[34,125905,125906],{"class":2427},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[34,125908,125909],{"class":187},"=blogdetail",[34,125911,125912],{"class":59},"&sharetype",[34,125914,447],{"class":112},[34,125916,125917],{"class":187},"blogdetail",[34,125919,125920],{"class":59},"&sharerId",[34,125922,447],{"class":112},[34,125924,125925],{"class":187},"144728092",[34,125927,125928],{"class":59},"&sharerefer",[34,125930,447],{"class":112},[34,125932,125933],{"class":187},"PC",[34,125935,125936],{"class":59},"&sharesource",[34,125938,447],{"class":112},[34,125940,125941],{"class":187},"qq_69379513",[34,125943,125944],{"class":59},"&sharefrom",[34,125946,447],{"class":112},[34,125948,125949],{"class":187},"from_link\n",[10,125951,125953],{"id":125952},"_2genesis-报错issue","2.Genesis 报错issue",[14,125955,125896],{},[25,125957,125958],{"className":24286,"code":125899,"language":24288,"meta":22,"style":22},[31,125959,125960],{"__ignoreMap":22},[34,125961,125962,125964,125966,125968,125970,125972,125974,125976,125978,125980,125982,125984,125986,125988,125990,125992,125994],{"class":36,"line":37},[34,125963,125906],{"class":2427},[34,125965,125909],{"class":187},[34,125967,125912],{"class":59},[34,125969,447],{"class":112},[34,125971,125917],{"class":187},[34,125973,125920],{"class":59},[34,125975,447],{"class":112},[34,125977,125925],{"class":187},[34,125979,125928],{"class":59},[34,125981,447],{"class":112},[34,125983,125933],{"class":187},[34,125985,125936],{"class":59},[34,125987,447],{"class":112},[34,125989,125941],{"class":187},[34,125991,125944],{"class":59},[34,125993,447],{"class":112},[34,125995,125949],{"class":187},[25,125997,125999],{"className":24286,"code":125998,"language":24288,"meta":22,"style":22},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[31,126000,126001],{"__ignoreMap":22},[34,126002,126003],{"class":36,"line":37},[34,126004,125998],{"class":2427},[10,126006,126008],{"id":126007},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,126010,126011],{},"hello_robot.py",[25,126013,126015],{"className":27,"code":126014,"language":29,"meta":22,"style":22},"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",[31,126016,126017,126023,126038,126042,126054,126066,126070,126083,126087,126106,126116,126126,126140,126144,126148,126153,126157,126167,126174,126188,126195,126205,126210,126214,126232,126237,126241,126248],{"__ignoreMap":22},[34,126018,126019,126021],{"class":36,"line":37},[34,126020,30855],{"class":112},[34,126022,45766],{"class":59},[34,126024,126025,126028,126031,126033,126035],{"class":36,"line":44},[34,126026,126027],{"class":59},"os.environ[",[34,126029,126030],{"class":187},"'PYOPENGL_PLATFORM'",[34,126032,4907],{"class":59},[34,126034,447],{"class":112},[34,126036,126037],{"class":187}," 'glx'\n",[34,126039,126040],{"class":36,"line":50},[34,126041,2864],{"emptyLinePlaceholder":540},[34,126043,126044,126046,126049,126051],{"class":36,"line":56},[34,126045,30855],{"class":112},[34,126047,126048],{"class":59}," genesis ",[34,126050,31846],{"class":112},[34,126052,126053],{"class":59}," gs\n",[34,126055,126056,126058,126061,126063],{"class":36,"line":107},[34,126057,31200],{"class":112},[34,126059,126060],{"class":59}," pynput ",[34,126062,30855],{"class":112},[34,126064,126065],{"class":59}," keyboard\n",[34,126067,126068],{"class":36,"line":196},[34,126069,2864],{"emptyLinePlaceholder":540},[34,126071,126072,126075,126078,126080],{"class":36,"line":202},[34,126073,126074],{"class":59},"gs.init(",[34,126076,126077],{"class":5680},"backend",[34,126079,447],{"class":112},[34,126081,126082],{"class":59},"gs.gpu)\n",[34,126084,126085],{"class":36,"line":207},[34,126086,2864],{"emptyLinePlaceholder":540},[34,126088,126089,126092,126094,126097,126100,126102,126104],{"class":36,"line":222},[34,126090,126091],{"class":59},"scene ",[34,126093,447],{"class":112},[34,126095,126096],{"class":59}," gs.Scene(",[34,126098,126099],{"class":5680},"show_viewer",[34,126101,447],{"class":112},[34,126103,31939],{"class":63},[34,126105,623],{"class":59},[34,126107,126108,126111,126113],{"class":36,"line":227},[34,126109,126110],{"class":59},"plane ",[34,126112,447],{"class":112},[34,126114,126115],{"class":59}," scene.add_entity(gs.morphs.Plane())\n",[34,126117,126118,126121,126123],{"class":36,"line":232},[34,126119,126120],{"class":59},"franka ",[34,126122,447],{"class":112},[34,126124,126125],{"class":59}," scene.add_entity(\n",[34,126127,126128,126131,126133,126135,126138],{"class":36,"line":238},[34,126129,126130],{"class":59},"    gs.morphs.MJCF(",[34,126132,45815],{"class":5680},[34,126134,447],{"class":112},[34,126136,126137],{"class":187},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[34,126139,38509],{"class":59},[34,126141,126142],{"class":36,"line":244},[34,126143,623],{"class":59},[34,126145,126146],{"class":36,"line":250},[34,126147,2864],{"emptyLinePlaceholder":540},[34,126149,126150],{"class":36,"line":256},[34,126151,126152],{"class":59},"scene.build()\n",[34,126154,126155],{"class":36,"line":261},[34,126156,2864],{"emptyLinePlaceholder":540},[34,126158,126159,126161,126164],{"class":36,"line":267},[34,126160,32410],{"class":112},[34,126162,126163],{"class":2427}," on_press",[34,126165,126166],{"class":59},"(key):\n",[34,126168,126169,126172],{"class":36,"line":2138},[34,126170,126171],{"class":112},"    try",[34,126173,4203],{"class":59},[34,126175,126176,126178,126181,126183,126186],{"class":36,"line":2143},[34,126177,2961],{"class":112},[34,126179,126180],{"class":59}," key.char ",[34,126182,3413],{"class":112},[34,126184,126185],{"class":187}," 'q'",[34,126187,4203],{"class":59},[34,126189,126190,126192],{"class":36,"line":2157},[34,126191,16196],{"class":112},[34,126193,126194],{"class":63}," False\n",[34,126196,126197,126200,126203],{"class":36,"line":2162},[34,126198,126199],{"class":112},"    except",[34,126201,126202],{"class":63}," AttributeError",[34,126204,4203],{"class":59},[34,126206,126207],{"class":36,"line":2191},[34,126208,126209],{"class":112},"        pass\n",[34,126211,126212],{"class":36,"line":2196},[34,126213,2864],{"emptyLinePlaceholder":540},[34,126215,126216,126219,126221,126224,126227,126229],{"class":36,"line":2213},[34,126217,126218],{"class":59},"listener ",[34,126220,447],{"class":112},[34,126222,126223],{"class":59}," keyboard.Listener(",[34,126225,126226],{"class":5680},"on_press",[34,126228,447],{"class":112},[34,126230,126231],{"class":59},"on_press)\n",[34,126233,126234],{"class":36,"line":2218},[34,126235,126236],{"class":59},"listener.start()\n",[34,126238,126239],{"class":36,"line":2223},[34,126240,2864],{"emptyLinePlaceholder":540},[34,126242,126243,126245],{"class":36,"line":2228},[34,126244,109050],{"class":112},[34,126246,126247],{"class":59}," listener.running:\n",[34,126249,126250],{"class":36,"line":2242},[34,126251,126252],{"class":59},"    scene.step()\n",[14,126254,126255],{},[20,126256],{"alt":22,"src":126257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[532,126259,126260],{},"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":22,"searchDepth":44,"depth":44,"links":126262},[],{"category":23842},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125867,"description":125872},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126269,"title":126270,"body":126271,"description":537,"extension":538,"meta":126286,"navigation":540,"path":126287,"seo":126288,"stem":126289,"__hash__":126290},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126272,"toc":126283},[126273,126276,126280],[10,126274,126270],{"id":126275},"_1-基础知识",[555,126277,126279],{"id":126278},"_11-js的组成","1.1 js的组成",[14,126281,126282],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":22,"searchDepth":44,"depth":44,"links":126284},[126285],{"id":126278,"depth":44,"text":126279},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126270,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126292,"title":126293,"body":126294,"description":537,"extension":538,"meta":126433,"navigation":540,"path":126434,"seo":126435,"stem":126436,"__hash__":126437},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126295,"toc":126421},[126296,126299,126303,126306,126310,126320,126324,126327,126330,126333,126337,126344,126350,126354,126360,126371,126375,126378,126382,126385,126389,126392,126396,126399,126403,126406,126409,126412,126415,126418],[10,126297,126293],{"id":126298},"_2-vscode必备内容",[555,126300,126302],{"id":126301},"_21-标签分类","2.1 标签分类",[14,126304,126305],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[555,126307,126309],{"id":126308},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126311,126312,126313,126315,126316,126319],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[31,126314,835],{}," 然后按 ",[31,126317,126318],{},"Tab","，快速自动生成基本结构。",[555,126321,126323],{"id":126322},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126325,126326],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126328,126329],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126331,126332],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[555,126334,126336],{"id":126335},"_24-视图缩放","2.4 视图缩放",[14,126338,126339,126340,126343],{},"缩放视图 ",[31,126341,126342],{},"ctrl+"," 可实现代码增大。",[14,126345,126346,126349],{},[31,126347,126348],{},"ctrl-"," 可实现代码减小。",[555,126351,126353],{"id":126352},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126355,126356,126357,28850],{},"VSCode 新建文件快捷键为 ",[31,126358,126359],{},"ctrl+N",[14,126361,126362,126363,126366,126367,126370],{},"保存快捷键为 ",[31,126364,126365],{},"ctrl+S","，将文本保存为 ",[31,126368,126369],{},".html"," 文件。",[555,126372,126374],{"id":126373},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126376,126377],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[555,126379,126381],{"id":126380},"_27-vscode-icons","2.7 vscode-icons",[14,126383,126384],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[555,126386,126388],{"id":126387},"_28-easy-less","2.8 Easy LESS",[14,126390,126391],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[555,126393,126395],{"id":126394},"_29-会了吧插件","2.9 会了吧插件",[14,126397,126398],{},"会了吧插件可以展示代码中英语单词的意思。",[555,126400,126402],{"id":126401},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126404,126405],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126407,126408],{},"②选定多个相同的单词:ctrl+D",[14,126410,126411],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126413,126414],{},"④全局替换某些单词:ctrl+h",[14,126416,126417],{},"⑤快速定位到某一行:ctrl+g",[14,126419,126420],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":22,"searchDepth":44,"depth":44,"links":126422},[126423,126424,126425,126426,126427,126428,126429,126430,126431,126432],{"id":126301,"depth":44,"text":126302},{"id":126308,"depth":44,"text":126309},{"id":126322,"depth":44,"text":126323},{"id":126335,"depth":44,"text":126336},{"id":126352,"depth":44,"text":126353},{"id":126373,"depth":44,"text":126374},{"id":126380,"depth":44,"text":126381},{"id":126387,"depth":44,"text":126388},{"id":126394,"depth":44,"text":126395},{"id":126401,"depth":44,"text":126402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126293,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126439,"title":126440,"body":126441,"description":537,"extension":538,"meta":126600,"navigation":540,"path":126601,"seo":126602,"stem":126603,"__hash__":126604},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126442,"toc":126592},[126443,126446,126450,126460,126466,126472,126476,126485,126489,126494,126497,126500,126504,126507,126517,126526,126535,126544,126554,126561,126566,126571,126584],[10,126444,126440],{"id":126445},"_3-html文本与容器标签",[555,126447,126449],{"id":126448},"_31-标题标签","3.1 标题标签",[14,126451,126452,126455,126456,126459],{},[31,126453,126454],{},"\u003Ch1>","我是一级标签",[31,126457,126458],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126461,126462,126455,126464],{},[31,126463,126454],{},[31,126465,126458],{},[14,126467,123722,126468,126471],{},[31,126469,126470],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[555,126473,126475],{"id":126474},"_32-段落标签","3.2 段落标签",[14,126477,126478,126481,126482],{},[31,126479,126480],{},"\u003Cp>","....",[31,126483,126484],{},"\u003C\u002Fp>",[555,126486,126488],{"id":126487},"_33-换行标签","3.3 换行标签",[14,126490,126491],{},[31,126492,126493],{},"\u003Cbr \u002F>",[14,126495,126496],{},"具有强制换行的作用",[14,126498,126499],{},"单标签",[555,126501,126503],{"id":126502},"_34-文本格式化标签","3.4 文本格式化标签",[14,126505,126506],{},"提供粗体、斜体和下划线等效果",[14,126508,126509,126510,83000,126513,126516],{},"加粗：",[31,126511,126512],{},"\u003Cstrong>...\u003C\u002Fstrong>",[31,126514,126515],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126518,126519,126520,83000,126523,126516],{},"斜体：",[31,126521,126522],{},"\u003Cem>...\u003C\u002Fem>",[31,126524,126525],{},"\u003Ci>...\u003C\u002Fi>",[14,126527,126528,126529,83000,126532,126516],{},"删除线：",[31,126530,126531],{},"\u003Cdel>...\u003C\u002Fdel>",[31,126533,126534],{},"\u003Cs>...\u003C\u002Fs>",[14,126536,126537,126538,83000,126541,126516],{},"下划线：",[31,126539,126540],{},"\u003Cins>...\u003C\u002Fins>",[31,126542,126543],{},"\u003Cu>...\u003C\u002Fu>",[555,126545,126547,126548,18874,126551,103080],{"id":126546},"_35-div和span标签","3.5 ",[31,126549,126550],{},"\u003Cdiv>",[31,126552,126553],{},"\u003Cspan>",[14,126555,126556,101405,126558,126560],{},[31,126557,126550],{},[31,126559,126553],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126562,126563],{},[31,126564,126565],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126567,126568],{},[31,126569,126570],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126572,126573,126574,126576,126577,126579,126580,126583],{},"两者特点：①",[31,126575,126550],{}," 标签用来布局，但一行通常只放一个 ",[31,126578,126550],{},"。可以理解为一个大盒子，独占一行，在 ",[31,126581,126582],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126585,77710,126586,126588,126589,126591],{},[31,126587,126553],{}," 标签也可用于布局，一行可以放多个 ",[31,126590,126553],{},"，可理解为小盒子。",{"title":22,"searchDepth":44,"depth":44,"links":126593},[126594,126595,126596,126597,126598],{"id":126448,"depth":44,"text":126449},{"id":126474,"depth":44,"text":126475},{"id":126487,"depth":44,"text":126488},{"id":126502,"depth":44,"text":126503},{"id":126546,"depth":44,"text":126599},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126440,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126606,"title":126607,"body":126608,"description":537,"extension":538,"meta":126805,"navigation":540,"path":126806,"seo":126807,"stem":126808,"__hash__":126809},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126609,"toc":126797},[126610,126613,126617,126620,126626,126633,126639,126645,126648,126651,126654,126657,126660,126663,126666,126670,126673,126676,126679,126685,126691,126697,126704,126708,126714,126720,126723,126726,126732,126738,126744,126747,126750,126754,126757,126767,126773,126777,126786,126790,126793],[10,126611,126607],{"id":126612},"_4-html图像与链接",[555,126614,126616],{"id":126615},"_41-图像标签","4.1 图像标签",[14,126618,126619],{},"（1）标签",[14,126621,126622,126625],{},[31,126623,126624],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126627,126628,126629,126632],{},"src是",[31,126630,126631],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126634,126635,126636],{},"alt:文本，替换文本。图像不能显示的文字 ",[31,126637,126638],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126640,126641,126642],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[31,126643,126644],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126646,126647],{},"width:像素，设置图像的宽度",[14,126649,126650],{},"height:像素，设置图像的高度",[14,126652,126653],{},"border：像素，设置图像的边框粗细",[14,126655,126656],{},"（2）图像标签属性的注意点：",[14,126658,126659],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126661,126662],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126664,126665],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[555,126667,126669],{"id":126668},"_42-路径注意要点","4.2 路径注意要点：",[14,126671,126672],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126674,126675],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126677,126678],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126680,126681,126682],{},"①同一级路径：图像文件位于HTML文件同一级，如",[31,126683,126684],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126686,126687,126688],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[31,126689,126690],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126692,126693,126694],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[31,126695,126696],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126698,126699,126700,860],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[847,126701,126702],{"href":126702,"rel":126703},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24329],[555,126705,126707],{"id":126706},"_43-超链接标签","4.3 超链接标签",[14,126709,126710,126713],{},[31,126711,126712],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126715,126716,126717],{},"①语法格式：",[31,126718,126719],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126721,126722],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126724,126725],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126727,126728,126729],{},"③链接分类：外部链接：",[31,126730,126731],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126733,126734,126735],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[31,126736,126737],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126739,126740,126741],{},"空链接：如果当时没有确定链接目标时，",[31,126742,126743],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126745,126746],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126748,126749],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[555,126751,126753],{"id":126752},"_44-锚点链接","4.4 锚点链接",[14,126755,126756],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126758,126759,126760,126763,126764],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[31,126761,126762],{},"\u003Ca href=\"#two\">","第二级",[31,126765,126766],{},"\u003C\u002Fa>",[14,126768,126769,126770],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[31,126771,126772],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[555,126774,126776],{"id":126775},"_45-注释标签","4.5 注释标签",[14,126778,126779,126782,126783],{},[31,126780,126781],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[31,126784,126785],{},"ctrl+\u002F",[555,126787,126789],{"id":126788},"_46-特殊字符","4.6 特殊字符",[14,126791,126792],{},"可以实现添加多个空格",[20,126794],{"style":126795,"src":126796},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":22,"searchDepth":44,"depth":44,"links":126798},[126799,126800,126801,126802,126803,126804],{"id":126615,"depth":44,"text":126616},{"id":126668,"depth":44,"text":126669},{"id":126706,"depth":44,"text":126707},{"id":126752,"depth":44,"text":126753},{"id":126775,"depth":44,"text":126776},{"id":126788,"depth":44,"text":126789},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126607,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126811,"title":126812,"body":126813,"description":537,"extension":538,"meta":127106,"navigation":540,"path":127107,"seo":127108,"stem":127109,"__hash__":127110},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126814,"toc":127097},[126815,126818,126822,126825,126828,126831,126834,126837,126840,126843,126846,126849,126869,126875,126879,126882,126885,126888,126891,126894,126897,126901,126904,126907,126910,126913,126926,126931,126934,126937,126952,126955,126958,126961,126964,126967,126971,126974,126981,126984,126987,126990,126993,126996,127002,127005,127008,127014,127017,127020,127023,127029,127032,127035,127049,127056,127059,127062,127069,127078,127081,127084,127087,127091,127094],[10,126816,126812],{"id":126817},"_5-html表格列表与表单",[555,126819,126821],{"id":126820},"_51-表格标签","5.1 表格标签",[14,126823,126824],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126826,126827],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126829,126830],{},"②表格基本语法：",[20,126832],{"style":126795,"src":126833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126835,126836],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[20,126838],{"style":126795,"src":126839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126841,126842],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[20,126844],{"style":126795,"src":126845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126847,126848],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126850,126851,126854,126855,126857,126858,126861,126862,126864,126865,126868],{},[31,126852,126853],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[31,126856,126853],{},"内部必须拥有",[31,126859,126860],{},"\u003Ctr>","标签，一般位于第一行，",[31,126863,126853],{},"比",[31,126866,126867],{},"\u003Cth>","范围广",[14,126870,126871,126874],{},[31,126872,126873],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[555,126876,126878],{"id":126877},"_52-合并单元格","5.2 合并单元格",[14,126880,126881],{},"（1）合并单元格方式：",[14,126883,126884],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126886,126887],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126889,126890],{},"（2）目标单元格：",[14,126892,126893],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126895,126896],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[555,126898,126900],{"id":126899},"_53-列表标签","5.3 列表标签",[14,126902,126903],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126905,126906],{},"①无序列表：",[20,126908],{"style":126795,"src":126909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126911,126912],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126914,126915,126918,126919,126922,126923,126925],{},[31,126916,126917],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[31,126920,126921],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[31,126924,126917],{},"中输入其他标签或文字是不对的",[14,126927,126928,126930],{},[31,126929,126921],{},"之间相当于一个容器，可以容纳所有元素",[14,126932,126933],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126935,126936],{},"在css中去除前边的小圆点采用如下代码:",[25,126938,126942],{"className":126939,"code":126940,"language":126941,"meta":22,"style":22},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[31,126943,126944],{"__ignoreMap":22},[34,126945,126946,126949],{"class":36,"line":37},[34,126947,126948],{"class":51761},"list-style",[34,126950,126951],{"class":59},": none;\n",[14,126953,126954],{},"②有序列表：",[20,126956],{"style":126795,"src":126957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126959,126960],{},"③自定义列表：",[20,126962],{"style":126795,"src":126963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[20,126965],{"style":126795,"src":126966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[555,126968,126970],{"id":126969},"_54-表单标签","5.4 表单标签",[14,126972,126973],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126975,126976,126977,126980],{},"（1）表单域：包含单元素的区域，",[31,126978,126979],{},"\u003Cform>","标签可以实现信息的收集和传递。",[20,126982],{"style":126795,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126985,126986],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126988,126989],{},"表单元素提交必须有name属性",[14,126991,126992],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126994,126995],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126997,77687,126998,127001],{},[31,126999,127000],{},"\u003Cinput>","输入表单元素",[20,127003],{"style":126795,"src":127004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[20,127006],{"style":126795,"src":127007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,127009,127010,127011],{},"单选按钮：",[31,127012,127013],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[20,127015],{"style":126795,"src":127016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127018,127019],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[20,127021],{"style":126795,"src":127022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127024,127025,127028],{},[760,127026,127027],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127030,127031],{},"②select下拉表单元素：可以节约页面控件",[20,127033],{"style":126795,"src":127034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127036,127037,14259,127039,127042,127043,127045,127046,127048],{},[760,127038,646],{},[31,127040,127041],{},"\u003Cselect>","中至少包含一对",[31,127044,103101],{},"；在",[31,127047,103101],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127050,127051,127052,127055],{},"③",[31,127053,127054],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[20,127057],{"style":126795,"src":127058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127060,127061],{},"3行20列",[555,127063,127065,127066,103080],{"id":127064},"_55-lable标签","5.5 ",[31,127067,127068],{},"\u003Clable>",[14,127070,127071,127072,127074,127075,127077],{},"它不是表单标签，但常常与表单标签搭配使用，",[31,127073,127068],{},"标签用于绑定一个表单标签，当点击",[31,127076,127068],{},"标签内的文本",[14,127079,127080],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[20,127082],{"style":126795,"src":127083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[20,127085],{"style":126795,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[555,127088,127090],{"id":127089},"_56-实例","5.6 实例",[20,127092],{"style":126795,"src":127093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[532,127095,127096],{},"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":22,"searchDepth":44,"depth":44,"links":127098},[127099,127100,127101,127102,127103,127105],{"id":126820,"depth":44,"text":126821},{"id":126877,"depth":44,"text":126878},{"id":126899,"depth":44,"text":126900},{"id":126969,"depth":44,"text":126970},{"id":127064,"depth":44,"text":127104},"5.5 \u003Clable>标签",{"id":127089,"depth":44,"text":127090},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126812,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127112,"title":127113,"body":127114,"description":537,"extension":538,"meta":127663,"navigation":540,"path":127664,"seo":127665,"stem":127666,"__hash__":127667},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127115,"toc":127638},[127116,127119,127123,127126,127129,127133,127136,127139,127142,127145,127148,127151,127154,127158,127161,127165,127168,127171,127174,127178,127181,127184,127187,127193,127196,127199,127202,127205,127208,127211,127214,127247,127251,127254,127257,127260,127264,127267,127270,127273,127276,127279,127283,127286,127289,127292,127296,127299,127303,127306,127310,127313,127318,127322,127325,127329,127332,127335,127338,127341,127368,127371,127375,127378,127381,127386,127389,127392,127396,127399,127404,127407,127410,127413,127417,127420,127423,127426,127430,127433,127436,127439,127443,127447,127450,127490,127493,127497,127504,127507,127511,127514,127560,127564,127567,127570,127573,127601,127605,127608,127635],[10,127117,127113],{"id":127118},"_6-css语法与文本样式",[555,127120,127122],{"id":127121},"_61-css语法规范","6.1 css语法规范",[14,127124,127125],{},"由两部分组成，选择器及一条或多条声明",[20,127127],{"style":126795,"src":127128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127130,127131],{},[760,127132,646],{},[14,127134,127135],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127137,127138],{},"②属性与属性值以“键值对”的形式出现",[14,127140,127141],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127143,127144],{},"④属性和属性值之间用英文“;”分开",[20,127146],{"style":126795,"src":127147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[20,127149],{"style":126795,"src":127150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[20,127152],{"style":126795,"src":127153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[555,127155,127157],{"id":127156},"_62-css选择器","6.2 css选择器",[14,127159,127160],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[584,127162,127164],{"id":127163},"_621-标签选择器","6.2.1 标签选择器",[14,127166,127167],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127169,127170],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[20,127172],{"style":126795,"src":127173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[584,127175,127177],{"id":127176},"_622-类选择器","6.2.2 类选择器",[14,127179,127180],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127182,127183],{},"②样例",[20,127185],{"style":126795,"src":127186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127188,127189,127190,127192],{},"③ ",[760,127191,127027],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127194,127195],{},"可以理解为给这个标签起了个名字，来表示；",[14,127197,127198],{},"长名称或词组可以使用横线来为选择器命名；",[14,127200,127201],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127203,127204],{},"命名要有意义；",[20,127206],{"style":126795,"src":127207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127209,127210],{},"类选择器也可以指定特殊的元素p.center{}",[14,127212,127213],{},"p.center和.center都对",[25,127215,127217],{"className":126939,"code":127216,"language":126941,"meta":22,"style":22},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[31,127218,127219,127224,127233,127243],{"__ignoreMap":22},[34,127220,127221],{"class":36,"line":37},[34,127222,127223],{"class":40},"\u002F* 类选择器指定特殊元素 *\u002F\n",[34,127225,127226,127228,127231],{"class":36,"line":44},[34,127227,14],{"class":51761},[34,127229,127230],{"class":2427},".center",[34,127232,16036],{"class":59},[34,127234,127235,127237,127239,127241],{"class":36,"line":50},[34,127236,70987],{"class":63},[34,127238,51898],{"class":59},[34,127240,52053],{"class":63},[34,127242,1765],{"class":59},[34,127244,127245],{"class":36,"line":56},[34,127246,2036],{"class":59},[584,127248,127250],{"id":127249},"_623-多类名使用","6.2.3 多类名使用",[14,127252,127253],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[20,127255],{"style":126795,"src":127256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127258,127259],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[584,127261,127263],{"id":127262},"_624-id选择器","6.2.4 id选择器",[14,127265,127266],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127268,127269],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[20,127271],{"style":126795,"src":127272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127274,127275],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127277,127278],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[584,127280,127282],{"id":127281},"_625-通配符选择器","6.2.5 通配符选择器",[14,127284,127285],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127287,127288],{},"* {",[14,127290,127291],{},"color=\"red\"}",[584,127293,127295],{"id":127294},"_626-总结","6.2.6 总结",[20,127297],{"style":126795,"src":127298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[555,127300,127302],{"id":127301},"_63-css字体属性","6.3 css字体属性",[14,127304,127305],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[584,127307,127309],{"id":127308},"_631-字体系列","6.3.1 字体系列",[14,127311,127312],{},"font-family: '宋体';",[14,127314,127315,127317],{},[760,127316,646],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[584,127319,127321],{"id":127320},"_632-字体大小","6.3.2 字体大小",[14,127323,127324],{},"font-size: 20px",[14,127326,127327,26938],{},[760,127328,127027],{},[14,127330,127331],{},"①px（像素）大小是网页的最常用单位",[14,127333,127334],{},"②谷歌浏览器默认为16px",[14,127336,127337],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127339,127340],{},"④可以给body指定整个页面的大小：会自动引用",[25,127342,127344],{"className":126939,"code":127343,"language":126941,"meta":22,"style":22},"body {\n  font-size: 16px;\n}\n",[31,127345,127346,127352,127364],{"__ignoreMap":22},[34,127347,127348,127350],{"class":36,"line":37},[34,127349,52261],{"class":51761},[34,127351,16036],{"class":59},[34,127353,127354,127356,127358,127360,127362],{"class":36,"line":44},[34,127355,71087],{"class":63},[34,127357,51898],{"class":59},[34,127359,1207],{"class":63},[34,127361,51953],{"class":112},[34,127363,1765],{"class":59},[34,127365,127366],{"class":36,"line":50},[34,127367,2036],{"class":59},[14,127369,127370],{},"⑤标题标签比较特殊，需要单独指定大小",[584,127372,127374],{"id":127373},"_633-字体粗细","6.3.3 字体粗细",[14,127376,127377],{},"font-weight: bold;",[14,127379,127380],{},"font-weight: 100；",[14,127382,127383,127385],{},[760,127384,646],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127387,127388],{},"font-weight= 400;",[14,127390,127391],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[584,127393,127395],{"id":127394},"_634-文字样式","6.3.4 文字样式",[14,127397,127398],{},"font-style: normal；",[14,127400,127401,26938],{},[760,127402,127403],{},"属性值",[14,127405,127406],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127408,127409],{},"②italic：浏览器会显示斜体的字体样式",[20,127411],{"style":126795,"src":127412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[584,127414,127416],{"id":127415},"_635-字体符合属性","6.3.5 字体符合属性",[20,127418],{"style":126795,"src":127419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[20,127421],{"style":126795,"src":127422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127424,127425],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127427,127428,26938],{},[760,127429,127027],{},[14,127431,127432],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127434,127435],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127437,127438],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[555,127440,127442],{"id":127441},"_64-css-test文本属性","6.4 css test文本属性",[584,127444,127446],{"id":127445},"_641-文本颜色","6.4.1 文本颜色",[14,127448,127449],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[25,127451,127453],{"className":126939,"code":127452,"language":126941,"meta":22,"style":22},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[31,127454,127455,127460,127466,127476,127481,127486],{"__ignoreMap":22},[34,127456,127457],{"class":36,"line":37},[34,127458,127459],{"class":40},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[34,127461,127462,127464],{"class":36,"line":44},[34,127463,14],{"class":51761},[34,127465,16036],{"class":59},[34,127467,127468,127470,127472,127474],{"class":36,"line":50},[34,127469,71366],{"class":63},[34,127471,51898],{"class":59},[34,127473,57882],{"class":63},[34,127475,1765],{"class":59},[34,127477,127478],{"class":36,"line":56},[34,127479,127480],{"class":40},"  \u002F* color: #ff0000; *\u002F\n",[34,127482,127483],{"class":36,"line":107},[34,127484,127485],{"class":40},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[34,127487,127488],{"class":36,"line":196},[34,127489,2036],{"class":59},[20,127491],{"style":126795,"src":127492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[584,127494,127496],{"id":127495},"_642-对齐文本","6.4.2 对齐文本",[14,127498,127499,127500,127503],{},"text-align属于用于设置元素内文本内容的 ",[760,127501,127502],{},"水平对齐"," 方式",[14,127505,127506],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[584,127508,127510],{"id":127509},"_643-装饰文本","6.4.3 装饰文本",[14,127512,127513],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[25,127515,127517],{"className":126939,"code":127516,"language":126941,"meta":22,"style":22},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[31,127518,127519,127525,127535,127539,127545,127556],{"__ignoreMap":22},[34,127520,127521,127523],{"class":36,"line":37},[34,127522,847],{"class":51761},[34,127524,16036],{"class":59},[34,127526,127527,127529,127531,127533],{"class":36,"line":44},[34,127528,70963],{"class":63},[34,127530,51898],{"class":59},[34,127532,55198],{"class":63},[34,127534,1765],{"class":59},[34,127536,127537],{"class":36,"line":50},[34,127538,2036],{"class":59},[34,127540,127541,127543],{"class":36,"line":56},[34,127542,14],{"class":51761},[34,127544,16036],{"class":59},[34,127546,127547,127549,127551,127554],{"class":36,"line":107},[34,127548,70963],{"class":63},[34,127550,51898],{"class":59},[34,127552,127553],{"class":63},"underline",[34,127555,1765],{"class":59},[34,127557,127558],{"class":36,"line":196},[34,127559,2036],{"class":59},[584,127561,127563],{"id":127562},"_644-文本缩进","6.4.4 文本缩进",[14,127565,127566],{},"实现文本的第一行首行缩进自己指定的距离",[14,127568,127569],{},"20px往右边走；-20px往左边走",[14,127571,127572],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[25,127574,127576],{"className":126939,"code":127575,"language":126941,"meta":22,"style":22},"p {\n  text-indent: 2em;\n}\n",[31,127577,127578,127584,127597],{"__ignoreMap":22},[34,127579,127580,127582],{"class":36,"line":37},[34,127581,14],{"class":51761},[34,127583,16036],{"class":59},[34,127585,127586,127589,127591,127593,127595],{"class":36,"line":44},[34,127587,127588],{"class":63},"  text-indent",[34,127590,51898],{"class":59},[34,127592,70],{"class":63},[34,127594,24017],{"class":112},[34,127596,1765],{"class":59},[34,127598,127599],{"class":36,"line":50},[34,127600,2036],{"class":59},[584,127602,127604],{"id":127603},"_645-行间距","6.4.5 行间距",[14,127606,127607],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[25,127609,127611],{"className":126939,"code":127610,"language":126941,"meta":22,"style":22},"p {\n  line-height: 1.6;\n}\n",[31,127612,127613,127619,127631],{"__ignoreMap":22},[34,127614,127615,127617],{"class":36,"line":37},[34,127616,14],{"class":51761},[34,127618,16036],{"class":59},[34,127620,127621,127624,127626,127629],{"class":36,"line":44},[34,127622,127623],{"class":63},"  line-height",[34,127625,51898],{"class":59},[34,127627,127628],{"class":63},"1.6",[34,127630,1765],{"class":59},[34,127632,127633],{"class":36,"line":50},[34,127634,2036],{"class":59},[532,127636,127637],{},"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":22,"searchDepth":44,"depth":44,"links":127639},[127640,127641,127649,127656],{"id":127121,"depth":44,"text":127122},{"id":127156,"depth":44,"text":127157,"children":127642},[127643,127644,127645,127646,127647,127648],{"id":127163,"depth":50,"text":127164},{"id":127176,"depth":50,"text":127177},{"id":127249,"depth":50,"text":127250},{"id":127262,"depth":50,"text":127263},{"id":127281,"depth":50,"text":127282},{"id":127294,"depth":50,"text":127295},{"id":127301,"depth":44,"text":127302,"children":127650},[127651,127652,127653,127654,127655],{"id":127308,"depth":50,"text":127309},{"id":127320,"depth":50,"text":127321},{"id":127373,"depth":50,"text":127374},{"id":127394,"depth":50,"text":127395},{"id":127415,"depth":50,"text":127416},{"id":127441,"depth":44,"text":127442,"children":127657},[127658,127659,127660,127661,127662],{"id":127445,"depth":50,"text":127446},{"id":127495,"depth":50,"text":127496},{"id":127509,"depth":50,"text":127510},{"id":127562,"depth":50,"text":127563},{"id":127603,"depth":50,"text":127604},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127113,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127669,"title":127670,"body":127671,"description":537,"extension":538,"meta":128320,"navigation":540,"path":128321,"seo":128322,"stem":128323,"__hash__":128324},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127672,"toc":128301},[127673,127676,127680,127684,127744,127748,127758,127761,127764,127768,127793,127797,127800,127803,127806,127809,127812,127816,127819,127822,127864,127867,127893,127899,127902,127906,127910,127916,127919,127922,127925,127928,127931,127934,127979,127983,127986,127989,127993,127997,128026,128029,128034,128037,128040,128043,128046,128050,128054,128057,128059,128062,128066,128069,128073,128076,128079,128082,128086,128090,128096,128106,128109,128112,128115,128118,128121,128244,128252,128260,128298],[10,127674,127670],{"id":127675},"_7-css引入方式与选择器进阶",[555,127677,127679],{"id":127678},"_71-css引入方式","7.1 css引入方式",[584,127681,127683],{"id":127682},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[25,127685,127689],{"className":127686,"code":127687,"language":127688,"meta":22,"style":22},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[31,127690,127691,127699,127706,127718,127731,127736],{"__ignoreMap":22},[34,127692,127693,127695,127697],{"class":36,"line":37},[34,127694,1515],{"class":59},[34,127696,532],{"class":51761},[34,127698,51768],{"class":59},[34,127700,127701,127704],{"class":36,"line":44},[34,127702,127703],{"class":51761},"  h1",[34,127705,16036],{"class":59},[34,127707,127708,127711,127713,127716],{"class":36,"line":50},[34,127709,127710],{"class":63},"    color",[34,127712,51898],{"class":59},[34,127714,127715],{"class":63},"blue",[34,127717,1765],{"class":59},[34,127719,127720,127723,127725,127727,127729],{"class":36,"line":56},[34,127721,127722],{"class":63},"    font-size",[34,127724,51898],{"class":59},[34,127726,1406],{"class":63},[34,127728,51953],{"class":112},[34,127730,1765],{"class":59},[34,127732,127733],{"class":36,"line":107},[34,127734,127735],{"class":59},"  }\n",[34,127737,127738,127740,127742],{"class":36,"line":196},[34,127739,52246],{"class":59},[34,127741,532],{"class":51761},[34,127743,51768],{"class":59},[14,127745,127746,26938],{},[760,127747,127027],{},[14,127749,77687,127750,127753,127754,127757],{},[31,127751,127752],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[31,127755,127756],{},"\u003Chead>","标签中",[14,127759,127760],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127762,127763],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[584,127765,127767],{"id":127766},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[25,127769,127771],{"className":127686,"code":127770,"language":127688,"meta":22,"style":22},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[31,127772,127773],{"__ignoreMap":22},[34,127774,127775,127777,127779,127781,127783,127786,127789,127791],{"class":36,"line":37},[34,127776,1515],{"class":59},[34,127778,14],{"class":51761},[34,127780,63087],{"class":2427},[34,127782,447],{"class":59},[34,127784,127785],{"class":187},"\"color: red; font-size: 16px;\"",[34,127787,127788],{"class":59},">这是一个段落\u003C\u002F",[34,127790,14],{"class":51761},[34,127792,51768],{"class":59},[14,127794,127795,26938],{},[760,127796,127027],{},[14,127798,127799],{},"①style其实就是标签的属性",[14,127801,127802],{},"②在双引号中间，写法要符合css规范",[14,127804,127805],{},"③可以控制当前的标签设置样式",[14,127807,127808],{},"④书写繁琐，简单时才用",[14,127810,127811],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[584,127813,127815],{"id":127814},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127817,127818],{},"使用最多，单独建一个css文件，然后html引用",[14,127820,127821],{},"①css文件部分： style.css",[25,127823,127825],{"className":126939,"code":127824,"language":126941,"meta":22,"style":22},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[31,127826,127827,127832,127838,127848,127860],{"__ignoreMap":22},[34,127828,127829],{"class":36,"line":37},[34,127830,127831],{"class":40},"\u002F* style.css *\u002F\n",[34,127833,127834,127836],{"class":36,"line":44},[34,127835,10],{"class":51761},[34,127837,16036],{"class":59},[34,127839,127840,127842,127844,127846],{"class":36,"line":50},[34,127841,71366],{"class":63},[34,127843,51898],{"class":59},[34,127845,127715],{"class":63},[34,127847,1765],{"class":59},[34,127849,127850,127852,127854,127856,127858],{"class":36,"line":56},[34,127851,71087],{"class":63},[34,127853,51898],{"class":59},[34,127855,1406],{"class":63},[34,127857,51953],{"class":112},[34,127859,1765],{"class":59},[34,127861,127862],{"class":36,"line":107},[34,127863,2036],{"class":59},[14,127865,127866],{},"②html部分",[25,127868,127870],{"className":127686,"code":127869,"language":127688,"meta":22,"style":22},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[31,127871,127872],{"__ignoreMap":22},[34,127873,127874,127876,127878,127880,127882,127884,127886,127888,127891],{"class":36,"line":37},[34,127875,1515],{"class":59},[34,127877,69466],{"class":51761},[34,127879,69469],{"class":2427},[34,127881,447],{"class":59},[34,127883,69474],{"class":187},[34,127885,61518],{"class":2427},[34,127887,447],{"class":59},[34,127889,127890],{"class":187},"\"style.css\"",[34,127892,51768],{"class":59},[14,127894,127895,127898],{},[31,127896,127897],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127900,127901],{},"ctrl+0回到页面原来大小",[555,127903,127905],{"id":127904},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[584,127907,127909],{"id":127908},"_721-快速生成html","7.2.1 快速生成html",[14,127911,127912,127913],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[31,127914,127915],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127917,127918],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127920,127921],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127923,127924],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127926,127927],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127929,127930],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127932,127933],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[25,127935,127937],{"className":127686,"code":127936,"language":127688,"meta":22,"style":22},"\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",[31,127938,127939,127944,127949,127954,127959,127964,127969,127974],{"__ignoreMap":22},[34,127940,127941],{"class":36,"line":37},[34,127942,127943],{"class":40},"\u003C!-- Emmet 语法示例 -->\n",[34,127945,127946],{"class":36,"line":44},[34,127947,127948],{"class":40},"\u003C!-- div*3        → 生成3个div -->\n",[34,127950,127951],{"class":36,"line":50},[34,127952,127953],{"class":40},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[34,127955,127956],{"class":36,"line":56},[34,127957,127958],{"class":40},"\u003C!-- div+p        → 兄弟div和p -->\n",[34,127960,127961],{"class":36,"line":107},[34,127962,127963],{"class":40},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[34,127965,127966],{"class":36,"line":196},[34,127967,127968],{"class":40},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[34,127970,127971],{"class":36,"line":202},[34,127972,127973],{"class":40},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[34,127975,127976],{"class":36,"line":207},[34,127977,127978],{"class":40},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[584,127980,127982],{"id":127981},"_722-快速生成css","7.2.2 快速生成css",[14,127984,127985],{},"简写开头",[14,127987,127988],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[555,127990,127992],{"id":127991},"_73-css复合选择器","7.3 css复合选择器",[584,127994,127996],{"id":127995},"_731-后代选择器","7.3.1 后代选择器",[25,127998,128000],{"className":126939,"code":127999,"language":126941,"meta":22,"style":22},".parent .child {\n  color: blue;\n}\n",[31,128001,128002,128012,128022],{"__ignoreMap":22},[34,128003,128004,128007,128010],{"class":36,"line":37},[34,128005,128006],{"class":2427},".parent",[34,128008,128009],{"class":2427}," .child",[34,128011,16036],{"class":59},[34,128013,128014,128016,128018,128020],{"class":36,"line":44},[34,128015,71366],{"class":63},[34,128017,51898],{"class":59},[34,128019,127715],{"class":63},[34,128021,1765],{"class":59},[34,128023,128024],{"class":36,"line":50},[34,128025,2036],{"class":59},[14,128027,128028],{},"元素1 元素2 {样式声明}",[14,128030,128031],{},[760,128032,128033],{},"注意点:",[14,128035,128036],{},"①元素1和元素2中间用空格隔开",[14,128038,128039],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128041,128042],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128044,128045],{},"④元素1和元素2可以是任意基础选择器",[584,128047,128049],{"id":128048},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128051,128052],{},[760,128053,128033],{},[14,128055,128056],{},"①元素1和元素2中间用大于号隔开",[14,128058,128039],{},[14,128060,128061],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[584,128063,128065],{"id":128064},"_733-并集选择器","7.3.3 并集选择器",[14,128067,128068],{},"元素1，元素2 {样式声明}",[14,128070,128071],{},[760,128072,128033],{},[14,128074,128075],{},"①元素1和元素2中间用逗号隔开",[14,128077,128078],{},"②逗号可以理解为和的意思",[14,128080,128081],{},"③并集选择器通常用于集体声明",[584,128083,128085],{"id":128084},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128087,128088],{},[760,128089,128033],{},[14,128091,128092,128093,128095],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69466,128094],{},"－:visited－:hover－:active。",[14,128097,128098,128099,128102,128103,26205],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128100,128101],"hover",{}," 、 ",[128104,128105],"first-child",{},[14,128107,128108],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128110,128111],{},"link对没访问的进行设置",[14,128113,128114],{},"vistied对已访问的进行改变",[14,128116,128117],{},"hover鼠标经过就会变",[14,128119,128120],{},"active常按(点)就会变",[25,128122,128124],{"className":126939,"code":128123,"language":126941,"meta":22,"style":22},"\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",[31,128125,128126,128131,128140,128150,128160,128164,128173,128184,128188,128196,128206,128216,128220,128229,128240],{"__ignoreMap":22},[34,128127,128128],{"class":36,"line":37},[34,128129,128130],{"class":40},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[34,128132,128133,128135,128138],{"class":36,"line":44},[34,128134,847],{"class":51761},[34,128136,128137],{"class":2427},":link",[34,128139,16036],{"class":59},[34,128141,128142,128144,128146,128148],{"class":36,"line":50},[34,128143,71366],{"class":63},[34,128145,51898],{"class":59},[34,128147,62830],{"class":63},[34,128149,1765],{"class":59},[34,128151,128152,128154,128156,128158],{"class":36,"line":56},[34,128153,70963],{"class":63},[34,128155,51898],{"class":59},[34,128157,55198],{"class":63},[34,128159,1765],{"class":59},[34,128161,128162],{"class":36,"line":107},[34,128163,2036],{"class":59},[34,128165,128166,128168,128171],{"class":36,"line":196},[34,128167,847],{"class":51761},[34,128169,128170],{"class":2427},":visited",[34,128172,16036],{"class":59},[34,128174,128175,128177,128179,128182],{"class":36,"line":202},[34,128176,71366],{"class":63},[34,128178,51898],{"class":59},[34,128180,128181],{"class":63},"purple",[34,128183,1765],{"class":59},[34,128185,128186],{"class":36,"line":207},[34,128187,2036],{"class":59},[34,128189,128190,128192,128194],{"class":36,"line":222},[34,128191,847],{"class":51761},[34,128193,61401],{"class":2427},[34,128195,16036],{"class":59},[34,128197,128198,128200,128202,128204],{"class":36,"line":227},[34,128199,71366],{"class":63},[34,128201,51898],{"class":59},[34,128203,55350],{"class":63},[34,128205,1765],{"class":59},[34,128207,128208,128210,128212,128214],{"class":36,"line":232},[34,128209,70963],{"class":63},[34,128211,51898],{"class":59},[34,128213,127553],{"class":63},[34,128215,1765],{"class":59},[34,128217,128218],{"class":36,"line":238},[34,128219,2036],{"class":59},[34,128221,128222,128224,128227],{"class":36,"line":244},[34,128223,847],{"class":51761},[34,128225,128226],{"class":2427},":active",[34,128228,16036],{"class":59},[34,128230,128231,128233,128235,128238],{"class":36,"line":250},[34,128232,71366],{"class":63},[34,128234,51898],{"class":59},[34,128236,128237],{"class":63},"green",[34,128239,1765],{"class":59},[34,128241,128242],{"class":36,"line":256},[34,128243,2036],{"class":59},[584,128245,128247,128248,128251],{"id":128246},"_735-伪类选择器","7.3.5 ",[128249,128250],"focus",{},"伪类选择器",[14,128253,128254,128256,128257,128259],{},[128249,128255],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[31,128258,127000],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[25,128261,128263],{"className":126939,"code":128262,"language":126941,"meta":22,"style":22},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[31,128264,128265,128273,128284,128294],{"__ignoreMap":22},[34,128266,128267,128269,128271],{"class":36,"line":37},[34,128268,54282],{"class":51761},[34,128270,62361],{"class":2427},[34,128272,16036],{"class":59},[34,128274,128275,128278,128280,128282],{"class":36,"line":44},[34,128276,128277],{"class":63},"  border-color",[34,128279,51898],{"class":59},[34,128281,55350],{"class":63},[34,128283,1765],{"class":59},[34,128285,128286,128288,128290,128292],{"class":36,"line":50},[34,128287,71259],{"class":63},[34,128289,51898],{"class":59},[34,128291,55198],{"class":63},[34,128293,1765],{"class":59},[34,128295,128296],{"class":36,"line":56},[34,128297,2036],{"class":59},[532,128299,128300],{},"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":22,"searchDepth":44,"depth":44,"links":128302},[128303,128308,128312],{"id":127678,"depth":44,"text":127679,"children":128304},[128305,128306,128307],{"id":127682,"depth":50,"text":127683},{"id":127766,"depth":50,"text":127767},{"id":127814,"depth":50,"text":127815},{"id":127904,"depth":44,"text":127905,"children":128309},[128310,128311],{"id":127908,"depth":50,"text":127909},{"id":127981,"depth":50,"text":127982},{"id":127991,"depth":44,"text":127992,"children":128313},[128314,128315,128316,128317,128318],{"id":127995,"depth":50,"text":127996},{"id":128048,"depth":50,"text":128049},{"id":128064,"depth":50,"text":128065},{"id":128084,"depth":50,"text":128085},{"id":128246,"depth":50,"text":128319},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127670,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128326,"title":128327,"body":128328,"description":537,"extension":538,"meta":130251,"navigation":540,"path":130252,"seo":130253,"stem":130254,"__hash__":130255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128329,"toc":130225},[128330,128333,128337,128346,128350,128376,128381,128384,128387,128390,128393,128397,128400,128410,128418,128422,128457,128462,128465,128468,128471,128474,128478,128481,128490,128494,128507,128512,128515,128518,128521,128525,128528,128532,128535,128590,128593,128624,128627,128681,128685,128688,128854,128977,128980,128983,128986,128989,128993,128996,129000,129003,129006,129010,129013,129044,129071,129099,129102,129106,129132,129175,129179,129273,129276,129303,129306,129309,129312,129315,129318,129321,129324,129327,129330,129334,129391,129418,129422,129470,129474,129515,129517,129520,129523,129526,129529,129533,129625,129628,129631,129634,129638,129761,129962,129966,129970,129973,129976,129979,129983,129986,129989,130014,130017,130020,130023,130026,130029,130033,130041,130103,130106,130164,130167,130170,130173,130176,130179,130182,130185,130222],[10,128331,128327],{"id":128332},"_8-css显示模式与背景特性",[555,128334,128336],{"id":128335},"_81-css元素显示模式","8.1 css元素显示模式",[14,128338,128339,128340,128342,128343,128345],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[31,128341,126550],{},"自己占一行，比如一行可以放多个",[31,128344,126553],{},"，HTML 元素一般分为块元素和行内元素两种类型",[584,128347,128349],{"id":128348},"_811-块元素","8.1.1 块元素",[14,128351,128352,128353,128355,128356,822,128359,822,128361,822,128363,822,128366,822,128369,128372,128373,128375],{},"常见的块元素有",[31,128354,126454],{},"~",[31,128357,128358],{},"\u003Ch6>",[31,128360,126480],{},[31,128362,126550],{},[31,128364,128365],{},"\u003Cul>",[31,128367,128368],{},"\u003Col>",[31,128370,128371],{},"\u003Cli>","等，其中 ",[31,128374,126550],{}," 标签是最典型的块元素",[14,128377,128378],{},[760,128379,128380],{},"块级元素的特点：",[14,128382,128383],{},"① 比较霸道，自己独占一行。",[14,128385,128386],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128388,128389],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128391,128392],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128394,128395],{},[760,128396,646],{},[14,128398,128399],{},"①文字类的元素内不能使用块级元素",[14,128401,77710,128402,128404,128405,128407,128408],{},[31,128403,126480],{}," 标签主要用于存放文字，因此 ",[31,128406,126480],{}," 里面不能放块级元素，特别是不能放",[31,128409,126550],{},[14,128411,128412,128413,128355,128415,128417],{},"⑥同理， ",[31,128414,126454],{},[31,128416,128358],{},"等都是文字类块级标签，里面也不能放其他块级元素",[584,128419,128421],{"id":128420},"_812-行内元素","8.1.2 行内元素",[14,128423,128424,128425,822,128427,822,128430,822,128433,822,128436,822,128439,822,128442,822,128445,822,128448,822,128451,128453,128454,128456],{},"常见的行内元素有 ",[31,128426,126712],{},[31,128428,128429],{},"\u003Cstrong>",[31,128431,128432],{},"\u003Cb>",[31,128434,128435],{},"\u003Cem>",[31,128437,128438],{},"\u003Ci>",[31,128440,128441],{},"\u003Cdel>",[31,128443,128444],{},"\u003Cs>",[31,128446,128447],{},"\u003Cins>",[31,128449,128450],{},"\u003Cu>",[31,128452,126553],{}," 等，其中 ",[31,128455,126553],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128458,128459],{},[760,128460,128461],{},"特点：",[14,128463,128464],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128466,128467],{},"② 高、宽直接设置是无效的。",[14,128469,128470],{},"③ 默认宽度就是它本身内容的宽度。",[14,128472,128473],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128475,128476],{},[760,128477,646],{},[14,128479,128480],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128482,128483,128484,128486,128487,128489],{},"②特殊情况链接 ",[31,128485,126712],{}," 里面可以放块级元素，但是给 ",[31,128488,126712],{}," 转换一下块级模式最安全",[584,128491,128493],{"id":128492},"_813-行内块元素","8.1.3 行内块元素",[14,128495,128496,128497,822,128500,822,128503,128506],{},"在行内元素中有几个特殊的标签 —— ",[31,128498,128499],{},"\u003Cimg \u002F>",[31,128501,128502],{},"\u003Cinput \u002F>",[31,128504,128505],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128508,128509],{},[760,128510,128511],{},"行内块元素的特点：",[14,128513,128514],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128516,128517],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128519,128520],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[584,128522,128524],{"id":128523},"_814-总结","8.1.4 总结",[20,128526],{"style":126795,"src":128527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[584,128529,128531],{"id":128530},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128533,128534],{},"①转换为块元素：display:block;",[25,128536,128538],{"className":126939,"code":128537,"language":126941,"meta":22,"style":22},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[31,128539,128540,128545,128551,128562,128574,128586],{"__ignoreMap":22},[34,128541,128542],{"class":36,"line":37},[34,128543,128544],{"class":40},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[34,128546,128547,128549],{"class":36,"line":44},[34,128548,847],{"class":51761},[34,128550,16036],{"class":59},[34,128552,128553,128556,128558,128560],{"class":36,"line":50},[34,128554,128555],{"class":63},"  display",[34,128557,51898],{"class":59},[34,128559,61330],{"class":63},[34,128561,1765],{"class":59},[34,128563,128564,128566,128568,128570,128572],{"class":36,"line":56},[34,128565,71029],{"class":63},[34,128567,51898],{"class":59},[34,128569,919],{"class":63},[34,128571,51953],{"class":112},[34,128573,1765],{"class":59},[34,128575,128576,128578,128580,128582,128584],{"class":36,"line":107},[34,128577,71249],{"class":63},[34,128579,51898],{"class":59},[34,128581,1008],{"class":63},[34,128583,51953],{"class":112},[34,128585,1765],{"class":59},[34,128587,128588],{"class":36,"line":196},[34,128589,2036],{"class":59},[14,128591,128592],{},"②转换为行内元素：display:inline;",[25,128594,128596],{"className":126939,"code":128595,"language":126941,"meta":22,"style":22},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[31,128597,128598,128603,128609,128620],{"__ignoreMap":22},[34,128599,128600],{"class":36,"line":37},[34,128601,128602],{"class":40},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[34,128604,128605,128607],{"class":36,"line":44},[34,128606,52072],{"class":51761},[34,128608,16036],{"class":59},[34,128610,128611,128613,128615,128618],{"class":36,"line":50},[34,128612,128555],{"class":63},[34,128614,51898],{"class":59},[34,128616,128617],{"class":63},"inline",[34,128619,1765],{"class":59},[34,128621,128622],{"class":36,"line":56},[34,128623,2036],{"class":59},[14,128625,128626],{},"③转换为行内块：display:inline-block;",[25,128628,128630],{"className":126939,"code":128629,"language":126941,"meta":22,"style":22},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[31,128631,128632,128637,128643,128653,128665,128677],{"__ignoreMap":22},[34,128633,128634],{"class":36,"line":37},[34,128635,128636],{"class":40},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[34,128638,128639,128641],{"class":36,"line":44},[34,128640,34],{"class":51761},[34,128642,16036],{"class":59},[34,128644,128645,128647,128649,128651],{"class":36,"line":50},[34,128646,128555],{"class":63},[34,128648,51898],{"class":59},[34,128650,72844],{"class":63},[34,128652,1765],{"class":59},[34,128654,128655,128657,128659,128661,128663],{"class":36,"line":56},[34,128656,71029],{"class":63},[34,128658,51898],{"class":59},[34,128660,1218],{"class":63},[34,128662,51953],{"class":112},[34,128664,1765],{"class":59},[34,128666,128667,128669,128671,128673,128675],{"class":36,"line":107},[34,128668,71249],{"class":63},[34,128670,51898],{"class":59},[34,128672,1555],{"class":63},[34,128674,51953],{"class":112},[34,128676,1765],{"class":59},[34,128678,128679],{"class":36,"line":196},[34,128680,2036],{"class":59},[584,128682,128684],{"id":128683},"_816-小米侧边栏","8.1.6 小米侧边栏",[20,128686],{"style":126795,"src":128687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[25,128689,128691],{"className":127686,"code":128690,"language":127688,"meta":22,"style":22},"\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",[31,128692,128693,128698,128713,128732,128751,128770,128789,128808,128827,128846],{"__ignoreMap":22},[34,128694,128695],{"class":36,"line":37},[34,128696,128697],{"class":40},"\u003C!-- 小米侧边栏案例 -->\n",[34,128699,128700,128702,128704,128706,128708,128711],{"class":36,"line":44},[34,128701,1515],{"class":59},[34,128703,52072],{"class":51761},[34,128705,53947],{"class":2427},[34,128707,447],{"class":59},[34,128709,128710],{"class":187},"\"sidebar\"",[34,128712,51768],{"class":59},[34,128714,128715,128717,128719,128721,128723,128725,128728,128730],{"class":36,"line":50},[34,128716,52605],{"class":59},[34,128718,847],{"class":51761},[34,128720,61518],{"class":2427},[34,128722,447],{"class":59},[34,128724,61523],{"class":187},[34,128726,128727],{"class":59},">手机 电话卡\u003C\u002F",[34,128729,847],{"class":51761},[34,128731,51768],{"class":59},[34,128733,128734,128736,128738,128740,128742,128744,128747,128749],{"class":36,"line":56},[34,128735,52605],{"class":59},[34,128737,847],{"class":51761},[34,128739,61518],{"class":2427},[34,128741,447],{"class":59},[34,128743,61523],{"class":187},[34,128745,128746],{"class":59},">电视 盒子\u003C\u002F",[34,128748,847],{"class":51761},[34,128750,51768],{"class":59},[34,128752,128753,128755,128757,128759,128761,128763,128766,128768],{"class":36,"line":107},[34,128754,52605],{"class":59},[34,128756,847],{"class":51761},[34,128758,61518],{"class":2427},[34,128760,447],{"class":59},[34,128762,61523],{"class":187},[34,128764,128765],{"class":59},">笔记本 平板\u003C\u002F",[34,128767,847],{"class":51761},[34,128769,51768],{"class":59},[34,128771,128772,128774,128776,128778,128780,128782,128785,128787],{"class":36,"line":196},[34,128773,52605],{"class":59},[34,128775,847],{"class":51761},[34,128777,61518],{"class":2427},[34,128779,447],{"class":59},[34,128781,61523],{"class":187},[34,128783,128784],{"class":59},">出行 穿戴\u003C\u002F",[34,128786,847],{"class":51761},[34,128788,51768],{"class":59},[34,128790,128791,128793,128795,128797,128799,128801,128804,128806],{"class":36,"line":202},[34,128792,52605],{"class":59},[34,128794,847],{"class":51761},[34,128796,61518],{"class":2427},[34,128798,447],{"class":59},[34,128800,61523],{"class":187},[34,128802,128803],{"class":59},">智能 路由器\u003C\u002F",[34,128805,847],{"class":51761},[34,128807,51768],{"class":59},[34,128809,128810,128812,128814,128816,128818,128820,128823,128825],{"class":36,"line":207},[34,128811,52605],{"class":59},[34,128813,847],{"class":51761},[34,128815,61518],{"class":2427},[34,128817,447],{"class":59},[34,128819,61523],{"class":187},[34,128821,128822],{"class":59},">健康 儿童\u003C\u002F",[34,128824,847],{"class":51761},[34,128826,51768],{"class":59},[34,128828,128829,128831,128833,128835,128837,128839,128842,128844],{"class":36,"line":222},[34,128830,52605],{"class":59},[34,128832,847],{"class":51761},[34,128834,61518],{"class":2427},[34,128836,447],{"class":59},[34,128838,61523],{"class":187},[34,128840,128841],{"class":59},">耳机 音响\u003C\u002F",[34,128843,847],{"class":51761},[34,128845,51768],{"class":59},[34,128847,128848,128850,128852],{"class":36,"line":227},[34,128849,52246],{"class":59},[34,128851,52072],{"class":51761},[34,128853,51768],{"class":59},[25,128855,128857],{"className":126939,"code":128856,"language":126941,"meta":22,"style":22},".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",[31,128858,128859,128868,128878,128891,128903,128915,128927,128937,128948,128952,128962,128973],{"__ignoreMap":22},[34,128860,128861,128864,128866],{"class":36,"line":37},[34,128862,128863],{"class":2427},".sidebar",[34,128865,1870],{"class":51761},[34,128867,16036],{"class":59},[34,128869,128870,128872,128874,128876],{"class":36,"line":44},[34,128871,128555],{"class":63},[34,128873,51898],{"class":59},[34,128875,61330],{"class":63},[34,128877,1765],{"class":59},[34,128879,128880,128882,128884,128887,128889],{"class":36,"line":50},[34,128881,71029],{"class":63},[34,128883,51898],{"class":59},[34,128885,128886],{"class":63},"234",[34,128888,51953],{"class":112},[34,128890,1765],{"class":59},[34,128892,128893,128895,128897,128899,128901],{"class":36,"line":56},[34,128894,71249],{"class":63},[34,128896,51898],{"class":59},[34,128898,1059],{"class":63},[34,128900,51953],{"class":112},[34,128902,1765],{"class":59},[34,128904,128905,128907,128909,128911,128913],{"class":36,"line":107},[34,128906,127623],{"class":63},[34,128908,51898],{"class":59},[34,128910,1059],{"class":63},[34,128912,51953],{"class":112},[34,128914,1765],{"class":59},[34,128916,128917,128919,128921,128923,128925],{"class":36,"line":196},[34,128918,71284],{"class":63},[34,128920,51898],{"class":59},[34,128922,1555],{"class":63},[34,128924,51953],{"class":112},[34,128926,1765],{"class":59},[34,128928,128929,128931,128933,128935],{"class":36,"line":202},[34,128930,71366],{"class":63},[34,128932,51898],{"class":59},[34,128934,61303],{"class":63},[34,128936,1765],{"class":59},[34,128938,128939,128941,128943,128946],{"class":36,"line":207},[34,128940,71339],{"class":63},[34,128942,51898],{"class":59},[34,128944,128945],{"class":63},"#55585a",[34,128947,1765],{"class":59},[34,128949,128950],{"class":36,"line":222},[34,128951,2036],{"class":59},[34,128953,128954,128956,128958,128960],{"class":36,"line":227},[34,128955,128863],{"class":2427},[34,128957,1870],{"class":51761},[34,128959,61401],{"class":2427},[34,128961,16036],{"class":59},[34,128963,128964,128966,128968,128971],{"class":36,"line":232},[34,128965,71339],{"class":63},[34,128967,51898],{"class":59},[34,128969,128970],{"class":63},"#ff6700",[34,128972,1765],{"class":59},[34,128974,128975],{"class":36,"line":238},[34,128976,2036],{"class":59},[20,128978],{"style":126795,"src":128979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128981,128982],{},"行高=盒子高度：实现文字的垂直居中",[14,128984,128985],{},"原理讲解：",[20,128987],{"style":126795,"src":128988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[555,128990,128992],{"id":128991},"_82-css背景","8.2 css背景",[14,128994,128995],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[584,128997,128999],{"id":128998},"_821-背景颜色","8.2.1 背景颜色",[14,129001,129002],{},"background-color:颜色值;",[14,129004,129005],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[584,129007,129009],{"id":129008},"_822-背景图片","8.2.2 背景图片",[14,129011,129012],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[25,129014,129016],{"className":126939,"code":129015,"language":126941,"meta":22,"style":22},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[31,129017,129018,129024,129040],{"__ignoreMap":22},[34,129019,129020,129022],{"class":36,"line":37},[34,129021,52072],{"class":51761},[34,129023,16036],{"class":59},[34,129025,129026,129029,129031,129033,129035,129038],{"class":36,"line":44},[34,129027,129028],{"class":63},"  background-image",[34,129030,51898],{"class":59},[34,129032,62187],{"class":63},[34,129034,617],{"class":59},[34,129036,129037],{"class":5680},"images\u002Fbg.png",[34,129039,3183],{"class":59},[34,129041,129042],{"class":36,"line":50},[34,129043,2036],{"class":59},[748,129045,129046,129055],{},[751,129047,129048],{},[754,129049,129050,129053],{},[757,129051,129052],{"align":24200},"参数值",[757,129054,103083],{"align":24200},[795,129056,129057,129064],{},[754,129058,129059,129061],{},[800,129060,55198],{"align":24200},[800,129062,129063],{"align":24200},"无背景图（默认的）",[754,129065,129066,129068],{},[800,129067,62187],{"align":24200},[800,129069,129070],{"align":24200},"使用绝对或相对地址指定背景图像",[25,129072,129073],{"className":126939,"code":129015,"language":126941,"meta":22,"style":22},[31,129074,129075,129081,129095],{"__ignoreMap":22},[34,129076,129077,129079],{"class":36,"line":37},[34,129078,52072],{"class":51761},[34,129080,16036],{"class":59},[34,129082,129083,129085,129087,129089,129091,129093],{"class":36,"line":44},[34,129084,129028],{"class":63},[34,129086,51898],{"class":59},[34,129088,62187],{"class":63},[34,129090,617],{"class":59},[34,129092,129037],{"class":5680},[34,129094,3183],{"class":59},[34,129096,129097],{"class":36,"line":50},[34,129098,2036],{"class":59},[14,129100,129101],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[584,129103,129105],{"id":129104},"_823-背景平铺","8.2.3 背景平铺",[25,129107,129109],{"className":126939,"code":129108,"language":126941,"meta":22,"style":22},"div {\n  background-repeat: no-repeat;\n}\n",[31,129110,129111,129117,129128],{"__ignoreMap":22},[34,129112,129113,129115],{"class":36,"line":37},[34,129114,52072],{"class":51761},[34,129116,16036],{"class":59},[34,129118,129119,129122,129124,129126],{"class":36,"line":44},[34,129120,129121],{"class":63},"  background-repeat",[34,129123,51898],{"class":59},[34,129125,62197],{"class":63},[34,129127,1765],{"class":59},[34,129129,129130],{"class":36,"line":50},[34,129131,2036],{"class":59},[748,129133,129134,129142],{},[751,129135,129136],{},[754,129137,129138,129140],{},[757,129139,129052],{"align":24200},[757,129141,103083],{"align":24200},[795,129143,129144,129152,129159,129167],{},[754,129145,129146,129149],{},[800,129147,129148],{"align":24200},"repeat",[800,129150,129151],{"align":24200},"背景图像在纵向和横向上平铺（默认的）",[754,129153,129154,129156],{},[800,129155,62197],{"align":24200},[800,129157,129158],{"align":24200},"背景图像不平铺",[754,129160,129161,129164],{},[800,129162,129163],{"align":24200},"repeat-x",[800,129165,129166],{"align":24200},"背景图像在横向上平铺",[754,129168,129169,129172],{},[800,129170,129171],{"align":24200},"repeat-y",[800,129173,129174],{"align":24200},"背景图像在纵向平铺",[584,129176,129178],{"id":129177},"_824-背景图片位置","8.2.4 背景图片位置",[25,129180,129182],{"className":126939,"code":129181,"language":126941,"meta":22,"style":22},"\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",[31,129183,129184,129189,129195,129209,129213,129218,129224,129240,129244,129249,129255,129269],{"__ignoreMap":22},[34,129185,129186],{"class":36,"line":37},[34,129187,129188],{"class":40},"\u002F* 方位名词 *\u002F\n",[34,129190,129191,129193],{"class":36,"line":44},[34,129192,52072],{"class":51761},[34,129194,16036],{"class":59},[34,129196,129197,129200,129202,129204,129207],{"class":36,"line":50},[34,129198,129199],{"class":63},"  background-position",[34,129201,51898],{"class":59},[34,129203,52053],{"class":63},[34,129205,129206],{"class":63}," top",[34,129208,1765],{"class":59},[34,129210,129211],{"class":36,"line":56},[34,129212,2036],{"class":59},[34,129214,129215],{"class":36,"line":107},[34,129216,129217],{"class":40},"\u002F* 精确单位 *\u002F\n",[34,129219,129220,129222],{"class":36,"line":196},[34,129221,52072],{"class":51761},[34,129223,16036],{"class":59},[34,129225,129226,129228,129230,129232,129234,129236,129238],{"class":36,"line":202},[34,129227,129199],{"class":63},[34,129229,51898],{"class":59},[34,129231,1306],{"class":63},[34,129233,51953],{"class":112},[34,129235,57965],{"class":63},[34,129237,51953],{"class":112},[34,129239,1765],{"class":59},[34,129241,129242],{"class":36,"line":207},[34,129243,2036],{"class":59},[34,129245,129246],{"class":36,"line":222},[34,129247,129248],{"class":40},"\u002F* 混合单位 *\u002F\n",[34,129250,129251,129253],{"class":36,"line":227},[34,129252,52072],{"class":51761},[34,129254,16036],{"class":59},[34,129256,129257,129259,129261,129263,129265,129267],{"class":36,"line":232},[34,129258,129199],{"class":63},[34,129260,51898],{"class":59},[34,129262,1306],{"class":63},[34,129264,51953],{"class":112},[34,129266,17608],{"class":63},[34,129268,1765],{"class":59},[34,129270,129271],{"class":36,"line":238},[34,129272,2036],{"class":59},[14,129274,129275],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[748,129277,129278,129286],{},[751,129279,129280],{},[754,129281,129282,129284],{},[757,129283,129052],{"align":24200},[757,129285,26334],{"align":24200},[795,129287,129288,129295],{},[754,129289,129290,129292],{},[800,129291,52429],{"align":24200},[800,129293,129294],{"align":24200},"百分数|由浮点数和单位标识符组成的长度值",[754,129296,129297,129300],{},[800,129298,129299],{"align":24200},"position",[800,129301,129302],{"align":24200},"top|center|bottom|left|center|right 方位名词",[14,129304,129305],{},"其他说明：",[14,129307,129308],{},"①参数是方位名词",[14,129310,129311],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129313,129314],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129316,129317],{},"②参数是精确单位",[14,129319,129320],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129322,129323],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129325,129326],{},"③参数是混合单位",[14,129328,129329],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[584,129331,129333],{"id":129332},"_825-背景图片固定","8.2.5 背景图片固定",[25,129335,129337],{"className":126939,"code":129336,"language":126941,"meta":22,"style":22},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[31,129338,129339,129344,129350,129362,129366,129371,129377,129387],{"__ignoreMap":22},[34,129340,129341],{"class":36,"line":37},[34,129342,129343],{"class":40},"\u002F* 背景滚动（默认） *\u002F\n",[34,129345,129346,129348],{"class":36,"line":44},[34,129347,52072],{"class":51761},[34,129349,16036],{"class":59},[34,129351,129352,129355,129357,129360],{"class":36,"line":50},[34,129353,129354],{"class":63},"  background-attachment",[34,129356,51898],{"class":59},[34,129358,129359],{"class":63},"scroll",[34,129361,1765],{"class":59},[34,129363,129364],{"class":36,"line":56},[34,129365,2036],{"class":59},[34,129367,129368],{"class":36,"line":107},[34,129369,129370],{"class":40},"\u002F* 背景固定 *\u002F\n",[34,129372,129373,129375],{"class":36,"line":196},[34,129374,52072],{"class":51761},[34,129376,16036],{"class":59},[34,129378,129379,129381,129383,129385],{"class":36,"line":202},[34,129380,129354],{"class":63},[34,129382,51898],{"class":59},[34,129384,86694],{"class":63},[34,129386,1765],{"class":59},[34,129388,129389],{"class":36,"line":207},[34,129390,2036],{"class":59},[748,129392,129393,129402],{},[751,129394,129395],{},[754,129396,129397,129400],{},[757,129398,129399],{"align":24200},"参数",[757,129401,103083],{"align":24200},[795,129403,129404,129411],{},[754,129405,129406,129408],{},[800,129407,129359],{"align":24200},[800,129409,129410],{"align":24200},"背景图像是随对象内容滚动",[754,129412,129413,129415],{},[800,129414,86694],{"align":24200},[800,129416,129417],{"align":24200},"背景图像固定",[584,129419,129421],{"id":129420},"_826-背景样式合写","8.2.6 背景样式合写",[25,129423,129425],{"className":126939,"code":129424,"language":126941,"meta":22,"style":22},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[31,129426,129427,129432,129438,129466],{"__ignoreMap":22},[34,129428,129429],{"class":36,"line":37},[34,129430,129431],{"class":40},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[34,129433,129434,129436],{"class":36,"line":44},[34,129435,52072],{"class":51761},[34,129437,16036],{"class":59},[34,129439,129440,129442,129444,129446,129449,129451,129453,129455,129457,129460,129462,129464],{"class":36,"line":50},[34,129441,71072],{"class":63},[34,129443,51898],{"class":59},[34,129445,61303],{"class":63},[34,129447,129448],{"class":63}," url",[34,129450,617],{"class":59},[34,129452,129037],{"class":5680},[34,129454,14178],{"class":59},[34,129456,62197],{"class":63},[34,129458,129459],{"class":63}," fixed",[34,129461,17608],{"class":63},[34,129463,129206],{"class":63},[34,129465,1765],{"class":59},[34,129467,129468],{"class":36,"line":56},[34,129469,2036],{"class":59},[584,129471,129473],{"id":129472},"_827-背景色半透明","8.2.7 背景色半透明",[25,129475,129477],{"className":126939,"code":129476,"language":126941,"meta":22,"style":22},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[31,129478,129479,129485,129511],{"__ignoreMap":22},[34,129480,129481,129483],{"class":36,"line":37},[34,129482,52072],{"class":51761},[34,129484,16036],{"class":59},[34,129486,129487,129489,129491,129493,129495,129497,129499,129501,129503,129505,129507,129509],{"class":36,"line":44},[34,129488,71072],{"class":63},[34,129490,51898],{"class":59},[34,129492,55571],{"class":63},[34,129494,617],{"class":59},[34,129496,319],{"class":63},[34,129498,12899],{"class":59},[34,129500,319],{"class":63},[34,129502,12899],{"class":59},[34,129504,319],{"class":63},[34,129506,12899],{"class":59},[34,129508,100908],{"class":63},[34,129510,3183],{"class":59},[34,129512,129513],{"class":36,"line":50},[34,129514,2036],{"class":59},[14,129516,99783],{},[14,129518,129519],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129521,129522],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129524,129525],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129527,129528],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[584,129530,129532],{"id":129531},"_828-总结","8.2.8 总结",[748,129534,129535,129546],{},[751,129536,129537],{},[754,129538,129539,129542,129544],{},[757,129540,129541],{"align":24200},"属性",[757,129543,103083],{"align":24200},[757,129545,763],{"align":24200},[795,129547,129548,129559,129570,129581,129592,129603,129614],{},[754,129549,129550,129553,129556],{},[800,129551,129552],{"align":24200},"background-color",[800,129554,129555],{"align":24200},"背景颜色",[800,129557,129558],{"align":24200},"预定义的颜色值\u002F十六进制\u002FRGB代码",[754,129560,129561,129564,129567],{},[800,129562,129563],{"align":24200},"background-image",[800,129565,129566],{"align":24200},"背景图片",[800,129568,129569],{"align":24200},"url(图片路径)",[754,129571,129572,129575,129578],{},[800,129573,129574],{"align":24200},"background-repeat",[800,129576,129577],{"align":24200},"是否平铺",[800,129579,129580],{"align":24200},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[754,129582,129583,129586,129589],{},[800,129584,129585],{"align":24200},"background-position",[800,129587,129588],{"align":24200},"背景位置",[800,129590,129591],{"align":24200},"length\u002Fposition 分别是x和y坐标",[754,129593,129594,129597,129600],{},[800,129595,129596],{"align":24200},"background-attachment",[800,129598,129599],{"align":24200},"背景附着",[800,129601,129602],{"align":24200},"scroll(背景滚动) \u002Ffixed (背景固定)",[754,129604,129605,129608,129611],{},[800,129606,129607],{"align":24200},"背景简写",[800,129609,129610],{"align":24200},"书写更简单",[800,129612,129613],{"align":24200},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[754,129615,129616,129619,129622],{},[800,129617,129618],{"align":24200},"背景半透明",[800,129620,129621],{"align":24200},"背景颜色半透明",[800,129623,129624],{"align":24200},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129626,129627],{},"颜色渐变：",[20,129629],{"style":126795,"src":129630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[20,129632],{"style":126795,"src":129633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[584,129635,129637],{"id":129636},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[25,129639,129641],{"className":127686,"code":129640,"language":127688,"meta":22,"style":22},"\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",[31,129642,129643,129658,129677,129696,129715,129734,129753],{"__ignoreMap":22},[34,129644,129645,129647,129649,129651,129653,129656],{"class":36,"line":37},[34,129646,1515],{"class":59},[34,129648,52072],{"class":51761},[34,129650,53947],{"class":2427},[34,129652,447],{"class":59},[34,129654,129655],{"class":187},"\"nav\"",[34,129657,51768],{"class":59},[34,129659,129660,129662,129664,129666,129668,129670,129673,129675],{"class":36,"line":44},[34,129661,52605],{"class":59},[34,129663,847],{"class":51761},[34,129665,61518],{"class":2427},[34,129667,447],{"class":59},[34,129669,61523],{"class":187},[34,129671,129672],{"class":59},">五彩导航1\u003C\u002F",[34,129674,847],{"class":51761},[34,129676,51768],{"class":59},[34,129678,129679,129681,129683,129685,129687,129689,129692,129694],{"class":36,"line":50},[34,129680,52605],{"class":59},[34,129682,847],{"class":51761},[34,129684,61518],{"class":2427},[34,129686,447],{"class":59},[34,129688,61523],{"class":187},[34,129690,129691],{"class":59},">五彩导航2\u003C\u002F",[34,129693,847],{"class":51761},[34,129695,51768],{"class":59},[34,129697,129698,129700,129702,129704,129706,129708,129711,129713],{"class":36,"line":56},[34,129699,52605],{"class":59},[34,129701,847],{"class":51761},[34,129703,61518],{"class":2427},[34,129705,447],{"class":59},[34,129707,61523],{"class":187},[34,129709,129710],{"class":59},">五彩导航3\u003C\u002F",[34,129712,847],{"class":51761},[34,129714,51768],{"class":59},[34,129716,129717,129719,129721,129723,129725,129727,129730,129732],{"class":36,"line":107},[34,129718,52605],{"class":59},[34,129720,847],{"class":51761},[34,129722,61518],{"class":2427},[34,129724,447],{"class":59},[34,129726,61523],{"class":187},[34,129728,129729],{"class":59},">五彩导航4\u003C\u002F",[34,129731,847],{"class":51761},[34,129733,51768],{"class":59},[34,129735,129736,129738,129740,129742,129744,129746,129749,129751],{"class":36,"line":196},[34,129737,52605],{"class":59},[34,129739,847],{"class":51761},[34,129741,61518],{"class":2427},[34,129743,447],{"class":59},[34,129745,61523],{"class":187},[34,129747,129748],{"class":59},">五彩导航5\u003C\u002F",[34,129750,847],{"class":51761},[34,129752,51768],{"class":59},[34,129754,129755,129757,129759],{"class":36,"line":202},[34,129756,52246],{"class":59},[34,129758,52072],{"class":51761},[34,129760,51768],{"class":59},[25,129762,129764],{"className":126939,"code":129763,"language":126941,"meta":22,"style":22},".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",[31,129765,129766,129775,129785,129797,129809,129819,129831,129841,129845,129870,129893,129916,129939],{"__ignoreMap":22},[34,129767,129768,129771,129773],{"class":36,"line":37},[34,129769,129770],{"class":2427},".nav",[34,129772,1870],{"class":51761},[34,129774,16036],{"class":59},[34,129776,129777,129779,129781,129783],{"class":36,"line":44},[34,129778,128555],{"class":63},[34,129780,51898],{"class":59},[34,129782,72844],{"class":63},[34,129784,1765],{"class":59},[34,129786,129787,129789,129791,129793,129795],{"class":36,"line":50},[34,129788,71029],{"class":63},[34,129790,51898],{"class":59},[34,129792,1423],{"class":63},[34,129794,51953],{"class":112},[34,129796,1765],{"class":59},[34,129798,129799,129801,129803,129805,129807],{"class":36,"line":56},[34,129800,71249],{"class":63},[34,129802,51898],{"class":59},[34,129804,1462],{"class":63},[34,129806,51953],{"class":112},[34,129808,1765],{"class":59},[34,129810,129811,129813,129815,129817],{"class":36,"line":107},[34,129812,70987],{"class":63},[34,129814,51898],{"class":59},[34,129816,52053],{"class":63},[34,129818,1765],{"class":59},[34,129820,129821,129823,129825,129827,129829],{"class":36,"line":196},[34,129822,127623],{"class":63},[34,129824,51898],{"class":59},[34,129826,1462],{"class":63},[34,129828,51953],{"class":112},[34,129830,1765],{"class":59},[34,129832,129833,129835,129837,129839],{"class":36,"line":202},[34,129834,71366],{"class":63},[34,129836,51898],{"class":59},[34,129838,61303],{"class":63},[34,129840,1765],{"class":59},[34,129842,129843],{"class":36,"line":207},[34,129844,2036],{"class":59},[34,129846,129847,129849,129851,129854,129856,129858,129861,129863,129865,129867],{"class":36,"line":222},[34,129848,129770],{"class":2427},[34,129850,1870],{"class":51761},[34,129852,129853],{"class":2427},":nth-child",[34,129855,617],{"class":59},[34,129857,64],{"class":63},[34,129859,129860],{"class":59},") { ",[34,129862,129552],{"class":63},[34,129864,51898],{"class":59},[34,129866,128970],{"class":63},[34,129868,129869],{"class":59},"; }\n",[34,129871,129872,129874,129876,129878,129880,129882,129884,129886,129888,129891],{"class":36,"line":227},[34,129873,129770],{"class":2427},[34,129875,1870],{"class":51761},[34,129877,129853],{"class":2427},[34,129879,617],{"class":59},[34,129881,70],{"class":63},[34,129883,129860],{"class":59},[34,129885,129552],{"class":63},[34,129887,51898],{"class":59},[34,129889,129890],{"class":63},"#ff0000",[34,129892,129869],{"class":59},[34,129894,129895,129897,129899,129901,129903,129905,129907,129909,129911,129914],{"class":36,"line":232},[34,129896,129770],{"class":2427},[34,129898,1870],{"class":51761},[34,129900,129853],{"class":2427},[34,129902,617],{"class":59},[34,129904,309],{"class":63},[34,129906,129860],{"class":59},[34,129908,129552],{"class":63},[34,129910,51898],{"class":59},[34,129912,129913],{"class":63},"#00a4ff",[34,129915,129869],{"class":59},[34,129917,129918,129920,129922,129924,129926,129928,129930,129932,129934,129937],{"class":36,"line":238},[34,129919,129770],{"class":2427},[34,129921,1870],{"class":51761},[34,129923,129853],{"class":2427},[34,129925,617],{"class":59},[34,129927,217],{"class":63},[34,129929,129860],{"class":59},[34,129931,129552],{"class":63},[34,129933,51898],{"class":59},[34,129935,129936],{"class":63},"#ff00ff",[34,129938,129869],{"class":59},[34,129940,129941,129943,129945,129947,129949,129951,129953,129955,129957,129960],{"class":36,"line":244},[34,129942,129770],{"class":2427},[34,129944,1870],{"class":51761},[34,129946,129853],{"class":2427},[34,129948,617],{"class":59},[34,129950,927],{"class":63},[34,129952,129860],{"class":59},[34,129954,129552],{"class":63},[34,129956,51898],{"class":59},[34,129958,129959],{"class":63},"#00ff00",[34,129961,129869],{"class":59},[555,129963,129965],{"id":129964},"_83-css三大特性","8.3 css三大特性",[584,129967,129969],{"id":129968},"_831-层叠性","8.3.1 层叠性",[14,129971,129972],{},"为了解决样式冲突问题",[14,129974,129975],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129977,129978],{},"   ②样式不冲突，不会层叠",[584,129980,129982],{"id":129981},"_832-继承性","8.3.2 继承性",[14,129984,129985],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129987,129988],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[25,129990,129992],{"className":126939,"code":129991,"language":126941,"meta":22,"style":22},"p {\n  color: #333;\n}\n",[31,129993,129994,130000,130010],{"__ignoreMap":22},[34,129995,129996,129998],{"class":36,"line":37},[34,129997,14],{"class":51761},[34,129999,16036],{"class":59},[34,130001,130002,130004,130006,130008],{"class":36,"line":44},[34,130003,71366],{"class":63},[34,130005,51898],{"class":59},[34,130007,62830],{"class":63},[34,130009,1765],{"class":59},[34,130011,130012],{"class":36,"line":50},[34,130013,2036],{"class":59},[20,130015],{"style":126795,"src":130016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130018,130019],{},"解释：①行高可以跟单位也可以不跟单位",[14,130021,130022],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130024,130025],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130027,130028],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[584,130030,130032],{"id":130031},"_833-优先级","8.3.3 优先级",[567,130034,130035,130038],{},[570,130036,130037],{},"选择器相同，则执行层叠性",[570,130039,130040],{},"选择器不同，则根据选择器权重执行",[748,130042,130043,130053],{},[751,130044,130045],{},[754,130046,130047,130050],{},[757,130048,130049],{"align":24200},"选择器",[757,130051,130052],{"align":24200},"选择器权重",[795,130054,130055,130063,130071,130079,130087,130095],{},[754,130056,130057,130060],{},[800,130058,130059],{"align":24200},"继承 或者*",[800,130061,130062],{"align":24200},"0，0，0，0",[754,130064,130065,130068],{},[800,130066,130067],{"align":24200},"标签选择器",[800,130069,130070],{"align":24200},"0，0，0，1",[754,130072,130073,130076],{},[800,130074,130075],{"align":24200},"类选择器，伪类选择器",[800,130077,130078],{"align":24200},"0，0，1，0",[754,130080,130081,130084],{},[800,130082,130083],{"align":24200},"ID选择器",[800,130085,130086],{"align":24200},"0，1，0，0",[754,130088,130089,130092],{},[800,130090,130091],{"align":24200},"行内样式",[800,130093,130094],{"align":24200},"1，0，0，0",[754,130096,130097,130100],{},[800,130098,130099],{"align":24200},"！important",[800,130101,130102],{"align":24200},"无穷大",[14,130104,130105],{},"! important用法：",[25,130107,130109],{"className":126939,"code":130108,"language":126941,"meta":22,"style":22},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[31,130110,130111,130116,130122,130135,130139,130144,130150,130160],{"__ignoreMap":22},[34,130112,130113],{"class":36,"line":37},[34,130114,130115],{"class":40},"\u002F* !important 拥有最高优先级 *\u002F\n",[34,130117,130118,130120],{"class":36,"line":44},[34,130119,52072],{"class":51761},[34,130121,16036],{"class":59},[34,130123,130124,130126,130128,130130,130133],{"class":36,"line":50},[34,130125,71366],{"class":63},[34,130127,51898],{"class":59},[34,130129,52106],{"class":63},[34,130131,130132],{"class":112}," !important",[34,130134,1765],{"class":59},[34,130136,130137],{"class":36,"line":56},[34,130138,2036],{"class":59},[34,130140,130141],{"class":36,"line":107},[34,130142,130143],{"class":40},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[34,130145,130146,130148],{"class":36,"line":196},[34,130147,52072],{"class":51761},[34,130149,16036],{"class":59},[34,130151,130152,130154,130156,130158],{"class":36,"line":202},[34,130153,71366],{"class":63},[34,130155,51898],{"class":59},[34,130157,57882],{"class":63},[34,130159,1765],{"class":59},[34,130161,130162],{"class":36,"line":207},[34,130163,2036],{"class":59},[14,130165,130166],{},"优先级注意点：",[14,130168,130169],{},"①权重是有4组数字组成,但是不会有进位",[14,130171,130172],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130174,130175],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130177,130178],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130180,130181],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130183,130184],{},"⑥复合选择器",[748,130186,130187,130197],{},[751,130188,130189],{},[754,130190,130191,130194],{},[757,130192,130193],{"align":24200},"div ul li",[757,130195,130196],{"align":24200},"0,0,0,3",[795,130198,130199,130207,130215],{},[754,130200,130201,130204],{},[800,130202,130203],{"align":24200},".nav ul li",[800,130205,130206],{"align":24200},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[754,130208,130209,130212],{},[800,130210,130211],{"align":24200},"a:hover",[800,130213,130214],{"align":24200},"0,0,1,1",[754,130216,130217,130220],{},[800,130218,130219],{"align":24200},".nav a",[800,130221,130214],{"align":24200},[532,130223,130224],{},"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":22,"searchDepth":44,"depth":44,"links":130226},[130227,130235,130246],{"id":128335,"depth":44,"text":128336,"children":130228},[130229,130230,130231,130232,130233,130234],{"id":128348,"depth":50,"text":128349},{"id":128420,"depth":50,"text":128421},{"id":128492,"depth":50,"text":128493},{"id":128523,"depth":50,"text":128524},{"id":128530,"depth":50,"text":128531},{"id":128683,"depth":50,"text":128684},{"id":128991,"depth":44,"text":128992,"children":130236},[130237,130238,130239,130240,130241,130242,130243,130244,130245],{"id":128998,"depth":50,"text":128999},{"id":129008,"depth":50,"text":129009},{"id":129104,"depth":50,"text":129105},{"id":129177,"depth":50,"text":129178},{"id":129332,"depth":50,"text":129333},{"id":129420,"depth":50,"text":129421},{"id":129472,"depth":50,"text":129473},{"id":129531,"depth":50,"text":129532},{"id":129636,"depth":50,"text":129637},{"id":129964,"depth":44,"text":129965,"children":130247},[130248,130249,130250],{"id":129968,"depth":50,"text":129969},{"id":129981,"depth":50,"text":129982},{"id":130031,"depth":50,"text":130032},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128327,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130257,"title":130258,"body":130259,"description":537,"extension":538,"meta":131849,"navigation":540,"path":131850,"seo":131851,"stem":131852,"__hash__":131853},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130260,"toc":131828},[130261,130264,130268,130271,130274,130277,130280,130283,130286,130289,130293,130301,130338,130374,130377,130391,130396,130430,130433,130526,130531,130534,130564,130567,130572,130580,130584,130591,130637,130681,130686,130689,130692,130695,130698,130701,130704,130706,130709,130713,130718,130762,130767,130770,130773,130810,130815,130818,130821,130824,130827,130859,130862,130865,130868,130900,130903,130906,130909,130913,130916,130948,130951,130955,130975,130978,130986,130989,130993,130998,131001,131033,131038,131041,131079,131083,131088,131091,131094,131125,131128,131145,131150,131202,131262,131267,131321,131359,131363,131367,131370,131374,131382,131385,131387,131398,131403,131451,131485,131488,131491,131494,131497,131541,131544,131547,131550,131553,131556,131559,131603,131606,131609,131612,131615,131618,131621,131627,131630,131674,131677,131680,131683,131686,131689,131733,131736,131738,131741,131745,131749,131787,131791,131794,131797,131801,131809,131813,131816,131819,131822,131825],[10,130262,130258],{"id":130263},"_9-css盒模型浮动与切图",[555,130265,130267],{"id":130266},"_91-盒子模型","9.1 盒子模型",[14,130269,130270],{},"利用盒子来设计网页",[14,130272,130273],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130275,130276],{},"网页布局设置：",[14,130278,130279],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130281,130282],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130284,130285],{},"③往盒子里装内容",[20,130287],{"style":126795,"src":130288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[584,130290,130292],{"id":130291},"_911-边框border","9.1.1 边框（border）",[567,130294,130295,130298],{},[570,130296,130297],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[570,130299,130300],{},"语法",[25,130302,130304],{"className":126939,"code":130303,"language":126941,"meta":22,"style":22},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[31,130305,130306,130311,130317,130334],{"__ignoreMap":22},[34,130307,130308],{"class":36,"line":37},[34,130309,130310],{"class":40},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[34,130312,130313,130315],{"class":36,"line":44},[34,130314,52072],{"class":51761},[34,130316,16036],{"class":59},[34,130318,130319,130321,130323,130325,130327,130329,130332],{"class":36,"line":50},[34,130320,71357],{"class":63},[34,130322,51898],{"class":59},[34,130324,64],{"class":63},[34,130326,51953],{"class":112},[34,130328,51982],{"class":63},[34,130330,130331],{"class":63}," #ccc",[34,130333,1765],{"class":59},[34,130335,130336],{"class":36,"line":56},[34,130337,2036],{"class":59},[748,130339,130340,130348],{},[751,130341,130342],{},[754,130343,130344,130346],{},[757,130345,129541],{"align":24200},[757,130347,103083],{"align":24200},[795,130349,130350,130358,130366],{},[754,130351,130352,130355],{},[800,130353,130354],{"align":24200},"border-width",[800,130356,130357],{"align":24200},"定义边框粗细，单位是px",[754,130359,130360,130363],{},[800,130361,130362],{"align":24200},"border-style",[800,130364,130365],{"align":24200},"边框的样式",[754,130367,130368,130371],{},[800,130369,130370],{"align":24200},"border-color",[800,130372,130373],{"align":24200},"边框的颜色",[14,130375,130376],{},"边框样式 border-style 可以设置如下值：",[1611,130378,130379,130382,130385,130388],{},[570,130380,130381],{},"none：没有边框即忽略所有边框的宽度（默认值）",[570,130383,130384],{},"solid：边框为单实线(最为常用的)",[570,130386,130387],{},"dashed：边框为虚线",[570,130389,130390],{},"dotted：边框为点线",[567,130392,130393],{"start":50},[570,130394,130395],{},"边框的合写分写",[25,130397,130398],{"className":126939,"code":130303,"language":126941,"meta":22,"style":22},[31,130399,130400,130404,130410,130426],{"__ignoreMap":22},[34,130401,130402],{"class":36,"line":37},[34,130403,130310],{"class":40},[34,130405,130406,130408],{"class":36,"line":44},[34,130407,52072],{"class":51761},[34,130409,16036],{"class":59},[34,130411,130412,130414,130416,130418,130420,130422,130424],{"class":36,"line":50},[34,130413,71357],{"class":63},[34,130415,51898],{"class":59},[34,130417,64],{"class":63},[34,130419,51953],{"class":112},[34,130421,51982],{"class":63},[34,130423,130331],{"class":63},[34,130425,1765],{"class":59},[34,130427,130428],{"class":36,"line":56},[34,130429,2036],{"class":59},[14,130431,130432],{},"边框分开写法：",[25,130434,130436],{"className":126939,"code":130435,"language":126941,"meta":22,"style":22},"\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",[31,130437,130438,130443,130449,130467,130485,130504,130522],{"__ignoreMap":22},[34,130439,130440],{"class":36,"line":37},[34,130441,130442],{"class":40},"\u002F* 边框分开写法 *\u002F\n",[34,130444,130445,130447],{"class":36,"line":44},[34,130446,52072],{"class":51761},[34,130448,16036],{"class":59},[34,130450,130451,130454,130456,130458,130460,130462,130465],{"class":36,"line":50},[34,130452,130453],{"class":63},"  border-top",[34,130455,51898],{"class":59},[34,130457,64],{"class":63},[34,130459,51953],{"class":112},[34,130461,51982],{"class":63},[34,130463,130464],{"class":63}," #000",[34,130466,1765],{"class":59},[34,130468,130469,130472,130474,130476,130478,130480,130483],{"class":36,"line":56},[34,130470,130471],{"class":63},"  border-right",[34,130473,51898],{"class":59},[34,130475,70],{"class":63},[34,130477,51953],{"class":112},[34,130479,62702],{"class":63},[34,130481,130482],{"class":63}," #333",[34,130484,1765],{"class":59},[34,130486,130487,130490,130492,130494,130496,130499,130502],{"class":36,"line":107},[34,130488,130489],{"class":63},"  border-bottom",[34,130491,51898],{"class":59},[34,130493,309],{"class":63},[34,130495,51953],{"class":112},[34,130497,130498],{"class":63}," dotted",[34,130500,130501],{"class":63}," #666",[34,130503,1765],{"class":59},[34,130505,130506,130509,130511,130513,130515,130517,130520],{"class":36,"line":196},[34,130507,130508],{"class":63},"  border-left",[34,130510,51898],{"class":59},[34,130512,64],{"class":63},[34,130514,51953],{"class":112},[34,130516,51982],{"class":63},[34,130518,130519],{"class":63}," #999",[34,130521,1765],{"class":59},[34,130523,130524],{"class":36,"line":202},[34,130525,2036],{"class":59},[567,130527,130528],{"start":56},[570,130529,130530],{},"表格的细线边框",[14,130532,130533],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[25,130535,130537],{"className":126939,"code":130536,"language":126941,"meta":22,"style":22},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[31,130538,130539,130544,130550,130560],{"__ignoreMap":22},[34,130540,130541],{"class":36,"line":37},[34,130542,130543],{"class":40},"\u002F* 表格细线边框合并 *\u002F\n",[34,130545,130546,130548],{"class":36,"line":44},[34,130547,748],{"class":51761},[34,130549,16036],{"class":59},[34,130551,130552,130554,130556,130558],{"class":36,"line":50},[34,130553,71039],{"class":63},[34,130555,51898],{"class":59},[34,130557,65496],{"class":63},[34,130559,1765],{"class":59},[34,130561,130562],{"class":36,"line":56},[34,130563,2036],{"class":59},[14,130565,130566],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[567,130568,130569],{"start":107},[570,130570,130571],{},"解决边框额外增加盒子的实际大小的方法：",[1611,130573,130574,130577],{},[570,130575,130576],{},"测量盒子大小的时候,不量边框",[570,130578,130579],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[584,130581,130583],{"id":130582},"_912-内边距","9.1.2 内边距",[567,130585,130586,130589],{},[570,130587,130588],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[570,130590,130300],{},[748,130592,130593,130603],{},[751,130594,130595],{},[754,130596,130597,130600],{},[757,130598,130599],{"align":24200},"值的个数",[757,130601,130602],{"align":24200},"表达意思",[795,130604,130605,130613,130621,130629],{},[754,130606,130607,130610],{},[800,130608,130609],{"align":24200},"padding: 5px;",[800,130611,130612],{"align":24200},"1个值，代表上下左右都有5个元素",[754,130614,130615,130618],{},[800,130616,130617],{"align":24200},"padding: 5px 10px;",[800,130619,130620],{"align":24200},"2个值，代表上下内边距为5像素，左右内边距为10像素",[754,130622,130623,130626],{},[800,130624,130625],{"align":24200},"padding: 5px 10px 20px;",[800,130627,130628],{"align":24200},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[754,130630,130631,130634],{},[800,130632,130633],{"align":24200},"padding: 5px 10px 20px 30px;",[800,130635,130636],{"align":24200},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[748,130638,130639,130647],{},[751,130640,130641],{},[754,130642,130643,130645],{},[757,130644,129541],{"align":24200},[757,130646,103083],{"align":24200},[795,130648,130649,130657,130665,130673],{},[754,130650,130651,130654],{},[800,130652,130653],{"align":24200},"padding-left",[800,130655,130656],{"align":24200},"左内边距",[754,130658,130659,130662],{},[800,130660,130661],{"align":24200},"padding-right",[800,130663,130664],{"align":24200},"右内边距",[754,130666,130667,130670],{},[800,130668,130669],{"align":24200},"padding-top",[800,130671,130672],{"align":24200},"上内边距",[754,130674,130675,130678],{},[800,130676,130677],{"align":24200},"padding-bottom",[800,130679,130680],{"align":24200},"下内边距",[567,130682,130683],{"start":50},[570,130684,130685],{},"内边距会影响盒子的实际大小",[14,130687,130688],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130690,130691],{},"①内容和边框有了距离，添加了内边距",[14,130693,130694],{},"②padding影响了盒子实际大小",[14,130696,130697],{},"内边距对盒子大小的影响：",[14,130699,130700],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130702,130703],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130705,95679],{},[14,130707,130708],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[584,130710,130712],{"id":130711},"_913-外边距","9.1.3 外边距",[567,130714,130715],{},[570,130716,130717],{},"控制盒子与盒子之间的距离",[748,130719,130720,130728],{},[751,130721,130722],{},[754,130723,130724,130726],{},[757,130725,129541],{"align":24200},[757,130727,103083],{"align":24200},[795,130729,130730,130738,130746,130754],{},[754,130731,130732,130735],{},[800,130733,130734],{"align":24200},"margin-left",[800,130736,130737],{"align":24200},"左外边距",[754,130739,130740,130743],{},[800,130741,130742],{"align":24200},"margin-right",[800,130744,130745],{"align":24200},"右外边距",[754,130747,130748,130751],{},[800,130749,130750],{"align":24200},"margin-top",[800,130752,130753],{"align":24200},"上外边距",[754,130755,130756,130759],{},[800,130757,130758],{"align":24200},"margin-bottom",[800,130760,130761],{"align":24200},"下外边距",[567,130763,130764],{"start":44},[570,130765,130766],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130768,130769],{},"①盒子必须指定了宽度（width）",[14,130771,130772],{},"②盒子左右的外边距都设置为 auto",[25,130774,130776],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,130777,130778,130783,130790,130806],{"__ignoreMap":22},[34,130779,130780],{"class":36,"line":37},[34,130781,130782],{"class":40},"\u002F* margin 复合写法（同上） *\u002F\n",[34,130784,130785,130788],{"class":36,"line":44},[34,130786,130787],{"class":2427},".box",[34,130789,16036],{"class":59},[34,130791,130792,130794,130796,130798,130800,130803],{"class":36,"line":50},[34,130793,70931],{"class":63},[34,130795,51898],{"class":59},[34,130797,319],{"class":63},[34,130799,52017],{"class":63},[34,130801,130802],{"class":59},";  ",[34,130804,130805],{"class":40},"\u002F* 块级盒子水平居中 *\u002F\n",[34,130807,130808],{"class":36,"line":56},[34,130809,2036],{"class":59},[567,130811,130812],{"start":50},[570,130813,130814],{},"外边距塌陷问题",[14,130816,130817],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[20,130819],{"style":126795,"src":130820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130822,130823],{},"解决方案：",[14,130825,130826],{},"①可以为父亲元素定义上边距",[25,130828,130829],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},[31,130830,130831,130835,130841,130855],{"__ignoreMap":22},[34,130832,130833],{"class":36,"line":37},[34,130834,130782],{"class":40},[34,130836,130837,130839],{"class":36,"line":44},[34,130838,130787],{"class":2427},[34,130840,16036],{"class":59},[34,130842,130843,130845,130847,130849,130851,130853],{"class":36,"line":50},[34,130844,70931],{"class":63},[34,130846,51898],{"class":59},[34,130848,319],{"class":63},[34,130850,52017],{"class":63},[34,130852,130802],{"class":59},[34,130854,130805],{"class":40},[34,130856,130857],{"class":36,"line":56},[34,130858,2036],{"class":59},[14,130860,130861],{},"②可以为父亲元素定义上内边距",[14,130863,130864],{},"③可以为父亲元素添加overflow:hidden",[20,130866],{"style":126795,"src":130867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[25,130869,130870],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},[31,130871,130872,130876,130882,130896],{"__ignoreMap":22},[34,130873,130874],{"class":36,"line":37},[34,130875,130782],{"class":40},[34,130877,130878,130880],{"class":36,"line":44},[34,130879,130787],{"class":2427},[34,130881,16036],{"class":59},[34,130883,130884,130886,130888,130890,130892,130894],{"class":36,"line":50},[34,130885,70931],{"class":63},[34,130887,51898],{"class":59},[34,130889,319],{"class":63},[34,130891,52017],{"class":63},[34,130893,130802],{"class":59},[34,130895,130805],{"class":40},[34,130897,130898],{"class":36,"line":56},[34,130899,2036],{"class":59},[20,130901],{"style":126795,"src":130902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130904,130905],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130907,130908],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[584,130910,130912],{"id":130911},"_914-清除内外边距","9.1.4 清除内外边距",[14,130914,130915],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[25,130917,130918],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},[31,130919,130920,130924,130930,130944],{"__ignoreMap":22},[34,130921,130922],{"class":36,"line":37},[34,130923,130782],{"class":40},[34,130925,130926,130928],{"class":36,"line":44},[34,130927,130787],{"class":2427},[34,130929,16036],{"class":59},[34,130931,130932,130934,130936,130938,130940,130942],{"class":36,"line":50},[34,130933,70931],{"class":63},[34,130935,51898],{"class":59},[34,130937,319],{"class":63},[34,130939,52017],{"class":63},[34,130941,130802],{"class":59},[34,130943,130805],{"class":40},[34,130945,130946],{"class":36,"line":56},[34,130947,2036],{"class":59},[14,130949,130950],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[584,130952,130954],{"id":130953},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1611,130956,130957,130960,130963,130966,130969,130972],{},[570,130958,130959],{},"文件→打开 ：可以打开我们要测量的图片",[570,130961,130962],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[570,130964,130965],{},"右击标尺，把里面的单位改为像素",[570,130967,130968],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[570,130970,130971],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[570,130973,130974],{},"用选区拖动 可以测量大小",[20,130976],{"style":126795,"src":130977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1611,130979,130980,130983],{},[570,130981,130982],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[570,130984,130985],{},"吸管取色工具",[20,130987],{"style":126795,"src":130988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[584,130990,130992],{"id":130991},"_916-案例","9.1.6 案例",[567,130994,130995],{},[570,130996,130997],{},"小米商品",[20,130999],{"style":126795,"src":131000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[25,131002,131003],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},[31,131004,131005,131009,131015,131029],{"__ignoreMap":22},[34,131006,131007],{"class":36,"line":37},[34,131008,130782],{"class":40},[34,131010,131011,131013],{"class":36,"line":44},[34,131012,130787],{"class":2427},[34,131014,16036],{"class":59},[34,131016,131017,131019,131021,131023,131025,131027],{"class":36,"line":50},[34,131018,70931],{"class":63},[34,131020,51898],{"class":59},[34,131022,319],{"class":63},[34,131024,52017],{"class":63},[34,131026,130802],{"class":59},[34,131028,130805],{"class":40},[34,131030,131031],{"class":36,"line":56},[34,131032,2036],{"class":59},[567,131034,131035],{"start":44},[570,131036,131037],{},"快报模块",[20,131039],{"style":126795,"src":131040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[25,131042,131044],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[31,131045,131046,131051,131066,131071],{"__ignoreMap":22},[34,131047,131048],{"class":36,"line":37},[34,131049,131050],{"class":40},"\u003C!-- HTML 代码示例 -->\n",[34,131052,131053,131055,131057,131059,131061,131064],{"class":36,"line":44},[34,131054,1515],{"class":59},[34,131056,52072],{"class":51761},[34,131058,53947],{"class":2427},[34,131060,447],{"class":59},[34,131062,131063],{"class":187},"\"example\"",[34,131065,51768],{"class":59},[34,131067,131068],{"class":36,"line":50},[34,131069,131070],{"class":59},"  示例内容\n",[34,131072,131073,131075,131077],{"class":36,"line":56},[34,131074,52246],{"class":59},[34,131076,52072],{"class":51761},[34,131078,51768],{"class":59},[584,131080,131082],{"id":131081},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[567,131084,131085],{},[570,131086,131087],{},"圆角边框",[14,131089,131090],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[20,131092],{"style":126795,"src":131093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[25,131095,131097],{"className":126939,"code":131096,"language":126941,"meta":22,"style":22},"div {\n  border: 1px solid #ccc;\n}\n",[31,131098,131099,131105,131121],{"__ignoreMap":22},[34,131100,131101,131103],{"class":36,"line":37},[34,131102,52072],{"class":51761},[34,131104,16036],{"class":59},[34,131106,131107,131109,131111,131113,131115,131117,131119],{"class":36,"line":44},[34,131108,71357],{"class":63},[34,131110,51898],{"class":59},[34,131112,64],{"class":63},[34,131114,51953],{"class":112},[34,131116,51982],{"class":63},[34,131118,130331],{"class":63},[34,131120,1765],{"class":59},[34,131122,131123],{"class":36,"line":50},[34,131124,2036],{"class":59},[14,131126,131127],{},"解释:",[1611,131129,131130,131133,131136,131139,131142],{},[570,131131,131132],{},"参数值可以为数值或百分比的形式",[570,131134,131135],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[570,131137,131138],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[570,131140,131141],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[570,131143,131144],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[567,131146,131147],{"start":44},[570,131148,131149],{},"盒子阴影",[25,131151,131153],{"className":126939,"code":131152,"language":126941,"meta":22,"style":22},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[31,131154,131155,131161,131198],{"__ignoreMap":22},[34,131156,131157,131159],{"class":36,"line":37},[34,131158,52072],{"class":51761},[34,131160,16036],{"class":59},[34,131162,131163,131166,131168,131170,131172,131174,131176,131178,131180,131182,131184,131186,131188,131190,131192,131194,131196],{"class":36,"line":44},[34,131164,131165],{"class":63},"  box-shadow",[34,131167,51898],{"class":59},[34,131169,319],{"class":63},[34,131171,15219],{"class":63},[34,131173,51953],{"class":112},[34,131175,2502],{"class":63},[34,131177,51953],{"class":112},[34,131179,79228],{"class":63},[34,131181,617],{"class":59},[34,131183,319],{"class":63},[34,131185,12899],{"class":59},[34,131187,319],{"class":63},[34,131189,12899],{"class":59},[34,131191,319],{"class":63},[34,131193,12899],{"class":59},[34,131195,86671],{"class":63},[34,131197,3183],{"class":59},[34,131199,131200],{"class":36,"line":50},[34,131201,2036],{"class":59},[748,131203,131204,131212],{},[751,131205,131206],{},[754,131207,131208,131210],{},[757,131209,763],{"align":24200},[757,131211,27954],{"align":24200},[795,131213,131214,131222,131230,131238,131246,131254],{},[754,131215,131216,131219],{},[800,131217,131218],{"align":24200},"h-shadow",[800,131220,131221],{"align":24200},"必需,水平阴影的位置,允许负值",[754,131223,131224,131227],{},[800,131225,131226],{"align":24200},"v-shadow",[800,131228,131229],{"align":24200},"必需,垂直阴影的位置,允许负值",[754,131231,131232,131235],{},[800,131233,131234],{"align":24200},"blur",[800,131236,131237],{"align":24200},"可选,模糊距离,就是影子的虚实",[754,131239,131240,131243],{},[800,131241,131242],{"align":24200},"spread",[800,131244,131245],{"align":24200},"可选,阴影尺寸",[754,131247,131248,131251],{},[800,131249,131250],{"align":24200},"color",[800,131252,131253],{"align":24200},"可选,阴影的颜色",[754,131255,131256,131259],{},[800,131257,131258],{"align":24200},"inset",[800,131260,131261],{"align":24200},"可选,将外部阴影(outset)改为内部阴影",[567,131263,131264],{"start":50},[570,131265,131266],{},"文字阴影",[25,131268,131270],{"className":126939,"code":131269,"language":126941,"meta":22,"style":22},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[31,131271,131272,131278,131317],{"__ignoreMap":22},[34,131273,131274,131276],{"class":36,"line":37},[34,131275,14],{"class":51761},[34,131277,16036],{"class":59},[34,131279,131280,131283,131285,131287,131289,131291,131293,131295,131297,131299,131301,131303,131305,131307,131309,131311,131313,131315],{"class":36,"line":44},[34,131281,131282],{"class":63},"  text-shadow",[34,131284,51898],{"class":59},[34,131286,64],{"class":63},[34,131288,51953],{"class":112},[34,131290,25583],{"class":63},[34,131292,51953],{"class":112},[34,131294,15219],{"class":63},[34,131296,51953],{"class":112},[34,131298,79228],{"class":63},[34,131300,617],{"class":59},[34,131302,319],{"class":63},[34,131304,12899],{"class":59},[34,131306,319],{"class":63},[34,131308,12899],{"class":59},[34,131310,319],{"class":63},[34,131312,12899],{"class":59},[34,131314,100908],{"class":63},[34,131316,3183],{"class":59},[34,131318,131319],{"class":36,"line":50},[34,131320,2036],{"class":59},[748,131322,131323,131331],{},[751,131324,131325],{},[754,131326,131327,131329],{},[757,131328,763],{"align":24200},[757,131330,27954],{"align":24200},[795,131332,131333,131339,131346,131353],{},[754,131334,131335,131337],{},[800,131336,131218],{"align":24200},[800,131338,131221],{"align":24200},[754,131340,131341,131343],{},[800,131342,131226],{"align":24200},[800,131344,131345],{"align":24200},"必需,垂直阴影位置,允许负值",[754,131347,131348,131350],{},[800,131349,131234],{"align":24200},[800,131351,131352],{"align":24200},"可选,模糊的距离",[754,131354,131355,131357],{},[800,131356,131250],{"align":24200},[800,131358,131253],{"align":24200},[555,131360,131362],{"id":131361},"_92-浮动","9.2 浮动",[584,131364,131366],{"id":131365},"_921-浮动介绍","9.2.1 浮动介绍",[14,131368,131369],{},"在16.2中详细介绍",[584,131371,131373],{"id":131372},"_922-清除浮动","9.2.2 清除浮动",[567,131375,131376,131379],{},[570,131377,131378],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[570,131380,131381],{},"清除浮动的本质",[14,131383,131384],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131386,9489],{},[1611,131388,131389,131392,131395],{},[570,131390,131391],{},"如果父盒子本身有高度，则不需要清除浮动",[570,131393,131394],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[570,131396,131397],{},"父级有了高度，就不会影响下面的标准流了",[567,131399,131400],{"start":50},[570,131401,131402],{},"清除浮动样式",[25,131404,131406],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[31,131407,131408,131415,131426,131430,131437,131447],{"__ignoreMap":22},[34,131409,131410,131413],{"class":36,"line":37},[34,131411,131412],{"class":2427},".left",[34,131414,16036],{"class":59},[34,131416,131417,131420,131422,131424],{"class":36,"line":44},[34,131418,131419],{"class":63},"  float",[34,131421,51898],{"class":59},[34,131423,24200],{"class":63},[34,131425,1765],{"class":59},[34,131427,131428],{"class":36,"line":50},[34,131429,2036],{"class":59},[34,131431,131432,131435],{"class":36,"line":56},[34,131433,131434],{"class":2427},".right",[34,131436,16036],{"class":59},[34,131438,131439,131441,131443,131445],{"class":36,"line":107},[34,131440,131419],{"class":63},[34,131442,51898],{"class":59},[34,131444,72983],{"class":63},[34,131446,1765],{"class":59},[34,131448,131449],{"class":36,"line":196},[34,131450,2036],{"class":59},[748,131452,131453,131461],{},[751,131454,131455],{},[754,131456,131457,131459],{},[757,131458,127403],{"align":24200},[757,131460,27954],{"align":24200},[795,131462,131463,131470,131477],{},[754,131464,131465,131467],{},[800,131466,24200],{"align":24200},[800,131468,131469],{"align":24200},"不允许左侧有浮动元素（清除左侧浮动的影响）",[754,131471,131472,131474],{},[800,131473,72983],{"align":24200},[800,131475,131476],{"align":24200},"不允许右侧有浮动元素（清除右侧浮动的影响）",[754,131478,131479,131482],{},[800,131480,131481],{"align":24200},"both",[800,131483,131484],{"align":24200},"同时清除左右侧浮动的影响",[14,131486,131487],{},"法一",[14,131489,131490],{},"额外标签法也称为隔墙法",[14,131492,131493],{},"使用方式：",[14,131495,131496],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[25,131498,131499],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,131500,131501,131507,131517,131521,131527,131537],{"__ignoreMap":22},[34,131502,131503,131505],{"class":36,"line":37},[34,131504,131412],{"class":2427},[34,131506,16036],{"class":59},[34,131508,131509,131511,131513,131515],{"class":36,"line":44},[34,131510,131419],{"class":63},[34,131512,51898],{"class":59},[34,131514,24200],{"class":63},[34,131516,1765],{"class":59},[34,131518,131519],{"class":36,"line":50},[34,131520,2036],{"class":59},[34,131522,131523,131525],{"class":36,"line":56},[34,131524,131434],{"class":2427},[34,131526,16036],{"class":59},[34,131528,131529,131531,131533,131535],{"class":36,"line":107},[34,131530,131419],{"class":63},[34,131532,51898],{"class":59},[34,131534,72983],{"class":63},[34,131536,1765],{"class":59},[34,131538,131539],{"class":36,"line":196},[34,131540,2036],{"class":59},[14,131542,131543],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131545,131546],{},"优点： 通俗易懂，书写方便",[14,131548,131549],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131551,131552],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131554,131555],{},"法二",[14,131557,131558],{},"父级添加overflow属性",[25,131560,131561],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,131562,131563,131569,131579,131583,131589,131599],{"__ignoreMap":22},[34,131564,131565,131567],{"class":36,"line":37},[34,131566,131412],{"class":2427},[34,131568,16036],{"class":59},[34,131570,131571,131573,131575,131577],{"class":36,"line":44},[34,131572,131419],{"class":63},[34,131574,51898],{"class":59},[34,131576,24200],{"class":63},[34,131578,1765],{"class":59},[34,131580,131581],{"class":36,"line":50},[34,131582,2036],{"class":59},[34,131584,131585,131587],{"class":36,"line":56},[34,131586,131434],{"class":2427},[34,131588,16036],{"class":59},[34,131590,131591,131593,131595,131597],{"class":36,"line":107},[34,131592,131419],{"class":63},[34,131594,51898],{"class":59},[34,131596,72983],{"class":63},[34,131598,1765],{"class":59},[34,131600,131601],{"class":36,"line":196},[34,131602,2036],{"class":59},[14,131604,131605],{},"overflow: hidden;",[14,131607,131608],{},"优点：代码简洁",[14,131610,131611],{},"缺点：无法显示溢出的部分",[14,131613,131614],{},"注意：是给父元素添加代码",[14,131616,131617],{},"法三",[14,131619,131620],{},"父级添加after伪元素",[14,131622,131623,131626],{},[131624,131625],"after",{}," 方式是额外标签法的升级版",[14,131628,131629],{},"使用的时候复制就可以",[25,131631,131632],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,131633,131634,131640,131650,131654,131660,131670],{"__ignoreMap":22},[34,131635,131636,131638],{"class":36,"line":37},[34,131637,131412],{"class":2427},[34,131639,16036],{"class":59},[34,131641,131642,131644,131646,131648],{"class":36,"line":44},[34,131643,131419],{"class":63},[34,131645,51898],{"class":59},[34,131647,24200],{"class":63},[34,131649,1765],{"class":59},[34,131651,131652],{"class":36,"line":50},[34,131653,2036],{"class":59},[34,131655,131656,131658],{"class":36,"line":56},[34,131657,131434],{"class":2427},[34,131659,16036],{"class":59},[34,131661,131662,131664,131666,131668],{"class":36,"line":107},[34,131663,131419],{"class":63},[34,131665,51898],{"class":59},[34,131667,72983],{"class":63},[34,131669,1765],{"class":59},[34,131671,131672],{"class":36,"line":196},[34,131673,2036],{"class":59},[14,131675,131676],{},"优点：没有增加标签，结构更简单",[14,131678,131679],{},"缺点：照顾低版本浏览器",[14,131681,131682],{},"代表网站： 百度、淘宝网、网易等",[14,131684,131685],{},"法四",[14,131687,131688],{},"父级添加双伪元素",[25,131690,131691],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,131692,131693,131699,131709,131713,131719,131729],{"__ignoreMap":22},[34,131694,131695,131697],{"class":36,"line":37},[34,131696,131412],{"class":2427},[34,131698,16036],{"class":59},[34,131700,131701,131703,131705,131707],{"class":36,"line":44},[34,131702,131419],{"class":63},[34,131704,51898],{"class":59},[34,131706,24200],{"class":63},[34,131708,1765],{"class":59},[34,131710,131711],{"class":36,"line":50},[34,131712,2036],{"class":59},[34,131714,131715,131717],{"class":36,"line":56},[34,131716,131434],{"class":2427},[34,131718,16036],{"class":59},[34,131720,131721,131723,131725,131727],{"class":36,"line":107},[34,131722,131419],{"class":63},[34,131724,51898],{"class":59},[34,131726,72983],{"class":63},[34,131728,1765],{"class":59},[34,131730,131731],{"class":36,"line":196},[34,131732,2036],{"class":59},[14,131734,131735],{},"优点：代码更简洁",[14,131737,131679],{},[14,131739,131740],{},"代表网站：小米、腾讯等",[555,131742,131744],{"id":131743},"_93-ps切图","9.3 PS切图",[584,131746,131748],{"id":131747},"_931-常见图片格式","9.3.1 常见图片格式",[748,131750,131751,131761],{},[751,131752,131753],{},[754,131754,131755,131758],{},[757,131756,131757],{"align":24200},"jpg图像格式",[757,131759,131760],{"align":24200},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[795,131762,131763,131771,131779],{},[754,131764,131765,131768],{},[800,131766,131767],{"align":24200},"gif图像格式",[800,131769,131770],{"align":24200},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[754,131772,131773,131776],{},[800,131774,131775],{"align":24200},"png图像格式",[800,131777,131778],{"align":24200},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[754,131780,131781,131784],{},[800,131782,131783],{"align":24200},"PSD图像格式",[800,131785,131786],{"align":24200},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[584,131788,131790],{"id":131789},"_932-图层切图","9.3.2 图层切图",[14,131792,131793],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131795,131796],{},"按住shift选中两个图层->图层菜单->合并图层",[584,131798,131800],{"id":131799},"_933-切片切图","9.3.3 切片切图",[1611,131802,131803,131806],{},[570,131804,131805],{},"利用切片工具手动划出",[570,131807,131808],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[584,131810,131812],{"id":131811},"_934-切图步骤","9.3.4 切图步骤",[14,131814,131815],{},"用切片工具选中：",[20,131817],{"style":126795,"src":131818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131820,131821],{},"文件 -> 导出",[20,131823],{"style":126795,"src":131824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[532,131826,131827],{},"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":22,"searchDepth":44,"depth":44,"links":131829},[131830,131839,131843],{"id":130266,"depth":44,"text":130267,"children":131831},[131832,131833,131834,131835,131836,131837,131838],{"id":130291,"depth":50,"text":130292},{"id":130582,"depth":50,"text":130583},{"id":130711,"depth":50,"text":130712},{"id":130911,"depth":50,"text":130912},{"id":130953,"depth":50,"text":130954},{"id":130991,"depth":50,"text":130992},{"id":131081,"depth":50,"text":131082},{"id":131361,"depth":44,"text":131362,"children":131840},[131841,131842],{"id":131365,"depth":50,"text":131366},{"id":131372,"depth":50,"text":131373},{"id":131743,"depth":44,"text":131744,"children":131844},[131845,131846,131847,131848],{"id":131747,"depth":50,"text":131748},{"id":131789,"depth":50,"text":131790},{"id":131799,"depth":50,"text":131800},{"id":131811,"depth":50,"text":131812},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130258,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131855,"title":131856,"body":131857,"description":537,"extension":538,"meta":132498,"navigation":540,"path":132499,"seo":132500,"stem":132501,"__hash__":132502},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131858,"toc":132486},[131859,131862,131866,131892,131926,131930,131934,131937,131979,131986,131996,132004,132006,132009,132012,132015,132022,132036,132040,132043,132072,132076,132079,132093,132097,132100,132128,132132,132135,132161,132165,132170,132203,132208,132236,132240,132257,132303,132308,132352,132369,132476,132484],[10,131860,131856],{"id":131861},"_10-css规范与学成在线案例",[555,131863,131865],{"id":131864},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[567,131867,131868,131874,131880,131886],{},[570,131869,131870,131873],{},[760,131871,131872],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[570,131875,131876,131879],{},[760,131877,131878],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[570,131881,131882,131885],{},[760,131883,131884],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[570,131887,131888,131891],{},[760,131889,131890],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[25,131893,131894],{"className":126939,"code":130303,"language":126941,"meta":22,"style":22},[31,131895,131896,131900,131906,131922],{"__ignoreMap":22},[34,131897,131898],{"class":36,"line":37},[34,131899,130310],{"class":40},[34,131901,131902,131904],{"class":36,"line":44},[34,131903,52072],{"class":51761},[34,131905,16036],{"class":59},[34,131907,131908,131910,131912,131914,131916,131918,131920],{"class":36,"line":50},[34,131909,71357],{"class":63},[34,131911,51898],{"class":59},[34,131913,64],{"class":63},[34,131915,51953],{"class":112},[34,131917,51982],{"class":63},[34,131919,130331],{"class":63},[34,131921,1765],{"class":59},[34,131923,131924],{"class":36,"line":56},[34,131925,2036],{"class":59},[555,131927,131929],{"id":131928},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[584,131931,131933],{"id":131932},"_1021-header头部制作","10.2.1 header头部制作",[20,131935],{"style":126795,"src":131936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1611,131938,131939,131946,131953,131959,131966,131973],{},[570,131940,131941,131942,131945],{},"1号是版心盒子 ",[760,131943,131944],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[570,131947,131948,131949,131952],{},"版心盒子 里面包含 2号盒子 ",[760,131950,131951],{},"logo"," 图标",[570,131954,131955,131956,131958],{},"版心盒子 里面包含 3号盒子 ",[760,131957,54174],{}," 导航栏",[570,131960,131961,131962,131965],{},"版心盒子 里面包含 4号盒子 ",[760,131963,131964],{},"search"," 搜索框",[570,131967,131968,131969,131972],{},"版心盒子 里面包含 5号盒子 ",[760,131970,131971],{},"user"," 个人信息",[570,131974,131975,131976],{},"注意，要求里面的 ",[760,131977,131978],{},"4个子盒子 必须都浮动",[567,131980,131981],{},[570,131982,131983],{},[760,131984,131985],{},"导航栏注意点:",[14,131987,131988,131989,131992,131993],{},"实际开发中， ",[760,131990,131991],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[760,131994,131995],{},"用 li 包含链接(li+a)的做法",[1611,131997,131998,132001],{},[570,131999,132000],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[570,132002,132003],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,132005,9489],{},[14,132007,132008],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,132010,132011],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132013,132014],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[567,132016,132017],{"start":44},[570,132018,132019],{},[760,132020,132021],{},"4号盒子search的细节：",[1611,132023,132024,132027,132030],{},[570,132025,132026],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[570,132028,132029],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[570,132031,132032,132035],{},[31,132033,132034],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[584,132037,132039],{"id":132038},"_1022-banner制作","10.2.2 banner制作",[20,132041],{"style":126795,"src":132042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1611,132044,132045,132052,132058,132065],{},[570,132046,132047,132048,132051],{},"1号盒子是通栏的大盒子 ",[760,132049,132050],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[570,132053,132054,132055,132057],{},"2号盒子是版心 ",[760,132056,1401],{}," ， 要水平居中对齐",[570,132059,132060,132061,132064],{},"3号盒子版心内，左对齐 ",[760,132062,132063],{},"subnav"," 侧导航栏",[570,132066,132067,132068,132071],{},"4号盒子版心内，右对齐 ",[760,132069,132070],{},"course"," 课程",[584,132073,132075],{"id":132074},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[20,132077],{"style":126795,"src":132078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1611,132080,132081,132084,132087,132090],{},[570,132082,132083],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[570,132085,132086],{},"1号盒子是标题 H3 左侧浮动",[570,132088,132089],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[570,132091,132092],{},"3号盒子 右浮动 mod 修改",[584,132094,132096],{"id":132095},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[20,132098],{"style":126795,"src":132099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1611,132101,132102,132108,132115,132122,132125],{},[570,132103,132104,132105,132107],{},"1号盒子为最大的盒子 ",[760,132106,54175],{}," 版心水平居中对齐",[570,132109,132110,132111,132114],{},"2号盒子为上面部分 ",[760,132112,132113],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[570,132116,132117,132118,132121],{},"3号盒子为底下部分 ",[760,132119,132120],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[570,132123,132124],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[570,132126,132127],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[584,132129,132131],{"id":132130},"_1025-底部模块制作","10.2.5 底部模块制作",[20,132133],{"style":126795,"src":132134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1611,132136,132137,132144,132147,132154],{},[570,132138,132139,132140,132143],{},"1号盒子通栏大盒子 底部 ",[760,132141,132142],{},"footer"," 给高度 底色是白色",[570,132145,132146],{},"2号盒子版心水平居中",[570,132148,132149,132150,132153],{},"3号盒子版权 ",[760,132151,132152],{},"copyright"," 左对齐",[570,132155,132156,132157,132160],{},"4号盒子 链接组 ",[760,132158,132159],{},"links"," 右对齐",[584,132162,132164],{"id":132163},"_1026-代码模块","10.2.6 代码模块",[567,132166,132167],{},[570,132168,132169],{},"html部分",[25,132171,132173],{"className":127686,"code":132172,"language":127688,"meta":22,"style":22},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[31,132174,132175],{"__ignoreMap":22},[34,132176,132177,132179,132181,132183,132185,132188,132191,132193,132196,132199,132201],{"class":36,"line":37},[34,132178,1515],{"class":59},[34,132180,847],{"class":51761},[34,132182,61518],{"class":2427},[34,132184,447],{"class":59},[34,132186,132187],{"class":187},"\"https:\u002F\u002Fexample.com\"",[34,132189,132190],{"class":2427}," target",[34,132192,447],{"class":59},[34,132194,132195],{"class":187},"\"_blank\"",[34,132197,132198],{"class":59},">链接文字\u003C\u002F",[34,132200,847],{"class":51761},[34,132202,51768],{"class":59},[567,132204,132205],{"start":44},[570,132206,132207],{},"css部分",[25,132209,132210],{"className":127686,"code":132172,"language":127688,"meta":22,"style":22},[31,132211,132212],{"__ignoreMap":22},[34,132213,132214,132216,132218,132220,132222,132224,132226,132228,132230,132232,132234],{"class":36,"line":37},[34,132215,1515],{"class":59},[34,132217,847],{"class":51761},[34,132219,61518],{"class":2427},[34,132221,447],{"class":59},[34,132223,132187],{"class":187},[34,132225,132190],{"class":2427},[34,132227,447],{"class":59},[34,132229,132195],{"class":187},[34,132231,132198],{"class":59},[34,132233,847],{"class":51761},[34,132235,51768],{"class":59},[584,132237,132239],{"id":132238},"_1027-收获","10.2.7 收获",[567,132241,132242,132245,132248,132251,132254],{},[570,132243,132244],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[570,132246,132247],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[570,132249,132250],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[570,132252,132253],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[570,132255,132256],{},"遗忘代码",[25,132258,132260],{"className":126939,"code":132259,"language":126941,"meta":22,"style":22},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[31,132261,132262,132284,132289,132299],{"__ignoreMap":22},[34,132263,132264,132266,132268,132270,132272,132274,132276,132278,132280,132282],{"class":36,"line":37},[34,132265,52072],{"class":51761},[34,132267,12899],{"class":59},[34,132269,14],{"class":51761},[34,132271,12899],{"class":59},[34,132273,10],{"class":51761},[34,132275,12899],{"class":59},[34,132277,1611],{"class":51761},[34,132279,12899],{"class":59},[34,132281,570],{"class":51761},[34,132283,16036],{"class":59},[34,132285,132286],{"class":36,"line":44},[34,132287,132288],{"class":40},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[34,132290,132291,132293,132295,132297],{"class":36,"line":50},[34,132292,128555],{"class":63},[34,132294,51898],{"class":59},[34,132296,61330],{"class":63},[34,132298,1765],{"class":59},[34,132300,132301],{"class":36,"line":56},[34,132302,2036],{"class":59},[567,132304,132305],{"start":196},[570,132306,132307],{},"html引css的程序",[25,132309,132310],{"className":126939,"code":132259,"language":126941,"meta":22,"style":22},[31,132311,132312,132334,132338,132348],{"__ignoreMap":22},[34,132313,132314,132316,132318,132320,132322,132324,132326,132328,132330,132332],{"class":36,"line":37},[34,132315,52072],{"class":51761},[34,132317,12899],{"class":59},[34,132319,14],{"class":51761},[34,132321,12899],{"class":59},[34,132323,10],{"class":51761},[34,132325,12899],{"class":59},[34,132327,1611],{"class":51761},[34,132329,12899],{"class":59},[34,132331,570],{"class":51761},[34,132333,16036],{"class":59},[34,132335,132336],{"class":36,"line":44},[34,132337,132288],{"class":40},[34,132339,132340,132342,132344,132346],{"class":36,"line":50},[34,132341,128555],{"class":63},[34,132343,51898],{"class":59},[34,132345,61330],{"class":63},[34,132347,1765],{"class":59},[34,132349,132350],{"class":36,"line":56},[34,132351,2036],{"class":59},[567,132353,132354,132357,132360,132363,132366],{"start":202},[570,132355,132356],{},"浮动的盒子不会有外边距合并问题",[570,132358,132359],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[570,132361,132362],{},"ctrl+g快速定位行；shift+alt多个光标",[570,132364,132365],{},"学习上方各个模块的选择器起名方法，以后就这样用",[570,132367,132368],{},"在写选择器时尽量写全一些，例如",[25,132370,132372],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},"\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",[31,132373,132374,132379,132395,132400,132415,132420,132435,132440,132455,132460],{"__ignoreMap":22},[34,132375,132376],{"class":36,"line":37},[34,132377,132378],{"class":40},"\u002F* 静态定位（默认） *\u002F\n",[34,132380,132381,132384,132386,132388,132390,132393],{"class":36,"line":44},[34,132382,132383],{"class":2427},".static",[34,132385,80268],{"class":59},[34,132387,129299],{"class":63},[34,132389,51898],{"class":59},[34,132391,132392],{"class":63},"static",[34,132394,129869],{"class":59},[34,132396,132397],{"class":36,"line":50},[34,132398,132399],{"class":40},"\u002F* 相对定位 *\u002F\n",[34,132401,132402,132405,132407,132409,132411,132413],{"class":36,"line":56},[34,132403,132404],{"class":2427},".relative",[34,132406,80268],{"class":59},[34,132408,129299],{"class":63},[34,132410,51898],{"class":59},[34,132412,55225],{"class":63},[34,132414,129869],{"class":59},[34,132416,132417],{"class":36,"line":107},[34,132418,132419],{"class":40},"\u002F* 绝对定位 *\u002F\n",[34,132421,132422,132425,132427,132429,132431,132433],{"class":36,"line":196},[34,132423,132424],{"class":2427},".absolute",[34,132426,80268],{"class":59},[34,132428,129299],{"class":63},[34,132430,51898],{"class":59},[34,132432,55292],{"class":63},[34,132434,129869],{"class":59},[34,132436,132437],{"class":36,"line":202},[34,132438,132439],{"class":40},"\u002F* 固定定位 *\u002F\n",[34,132441,132442,132445,132447,132449,132451,132453],{"class":36,"line":207},[34,132443,132444],{"class":2427},".fixed",[34,132446,80268],{"class":59},[34,132448,129299],{"class":63},[34,132450,51898],{"class":59},[34,132452,86694],{"class":63},[34,132454,129869],{"class":59},[34,132456,132457],{"class":36,"line":222},[34,132458,132459],{"class":40},"\u002F* 粘性定位 *\u002F\n",[34,132461,132462,132465,132467,132469,132471,132474],{"class":36,"line":227},[34,132463,132464],{"class":2427},".sticky",[34,132466,80268],{"class":59},[34,132468,129299],{"class":63},[34,132470,51898],{"class":59},[34,132472,132473],{"class":63},"sticky",[34,132475,129869],{"class":59},[567,132477,132478,132481],{"start":238},[570,132479,132480],{},"一定要用好注释",[570,132482,132483],{},"浮动的盒子不会有外边距合并的问题",[532,132485,131827],{},{"title":22,"searchDepth":44,"depth":44,"links":132487},[132488,132489],{"id":131864,"depth":44,"text":131865},{"id":131928,"depth":44,"text":131929,"children":132490},[132491,132492,132493,132494,132495,132496,132497],{"id":131932,"depth":50,"text":131933},{"id":132038,"depth":50,"text":132039},{"id":132074,"depth":50,"text":132075},{"id":132095,"depth":50,"text":132096},{"id":132130,"depth":50,"text":132131},{"id":132163,"depth":50,"text":132164},{"id":132238,"depth":50,"text":132239},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131856,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132504,"title":132505,"body":132506,"description":537,"extension":538,"meta":133992,"navigation":540,"path":133993,"seo":133994,"stem":133995,"__hash__":133996},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132507,"toc":133984},[132508,132511,132515,132519,132530,132534,132551,132595,132628,132631,132648,132651,132654,132698,132702,132706,132709,132712,132716,132719,132730,132793,132834,132837,132852,132906,132914,132917,132928,132982,133008,133011,133024,133078,133110,133164,133187,133241,133244,133247,133254,133308,133329,133383,133386,133389,133474,133482,133539,133562,133566,133569,133587,133591,133610,133664,133702,133706,133709,133712,133734,133738,133746,133749,133754,133765,133768,133772,133786,133830,133833,133837,133840,133845,133871,133876,133953,133956,133960,133963,133966,133969,133972,133975,133978,133981],[10,132509,132505],{"id":132510},"_11-传统布局与定位体系",[555,132512,132514],{"id":132513},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[584,132516,132518],{"id":132517},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1611,132520,132521,132524,132527],{},[570,132522,132523],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[570,132525,132526],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[570,132528,132529],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[584,132531,132533],{"id":132532},"_1112-浮动","11.1.2 浮动",[1611,132535,132536,132539,132542,132545,132548],{},[570,132537,132538],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[570,132540,132541],{},"浮动可以改变元素标签默认的排列方式",[570,132543,132544],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[570,132546,132547],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[570,132549,132550],{},"在使用行内块转换时盒子之间是有空隙的",[25,132552,132553],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,132554,132555,132561,132571,132575,132581,132591],{"__ignoreMap":22},[34,132556,132557,132559],{"class":36,"line":37},[34,132558,131412],{"class":2427},[34,132560,16036],{"class":59},[34,132562,132563,132565,132567,132569],{"class":36,"line":44},[34,132564,131419],{"class":63},[34,132566,51898],{"class":59},[34,132568,24200],{"class":63},[34,132570,1765],{"class":59},[34,132572,132573],{"class":36,"line":50},[34,132574,2036],{"class":59},[34,132576,132577,132579],{"class":36,"line":56},[34,132578,131434],{"class":2427},[34,132580,16036],{"class":59},[34,132582,132583,132585,132587,132589],{"class":36,"line":107},[34,132584,131419],{"class":63},[34,132586,51898],{"class":59},[34,132588,72983],{"class":63},[34,132590,1765],{"class":59},[34,132592,132593],{"class":36,"line":196},[34,132594,2036],{"class":59},[748,132596,132597,132605],{},[751,132598,132599],{},[754,132600,132601,132603],{},[757,132602,127403],{"align":24200},[757,132604,27954],{"align":24200},[795,132606,132607,132614,132621],{},[754,132608,132609,132611],{},[800,132610,55198],{"align":24200},[800,132612,132613],{"align":24200},"元素不浮动（默认值）",[754,132615,132616,132618],{},[800,132617,24200],{"align":24200},[800,132619,132620],{"align":24200},"元素向左浮动",[754,132622,132623,132625],{},[800,132624,72983],{"align":24200},[800,132626,132627],{"align":24200},"元素向右浮动",[14,132629,132630],{},"浮动重点：",[1611,132632,132633,132636,132639,132642,132645],{},[570,132634,132635],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[570,132637,132638],{},"浮动的元素会一行内显示并且元素顶部对齐",[570,132640,132641],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[570,132643,132644],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[570,132646,132647],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132649,132650],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132652,132653],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[25,132655,132656],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,132657,132658,132664,132674,132678,132684,132694],{"__ignoreMap":22},[34,132659,132660,132662],{"class":36,"line":37},[34,132661,131412],{"class":2427},[34,132663,16036],{"class":59},[34,132665,132666,132668,132670,132672],{"class":36,"line":44},[34,132667,131419],{"class":63},[34,132669,51898],{"class":59},[34,132671,24200],{"class":63},[34,132673,1765],{"class":59},[34,132675,132676],{"class":36,"line":50},[34,132677,2036],{"class":59},[34,132679,132680,132682],{"class":36,"line":56},[34,132681,131434],{"class":2427},[34,132683,16036],{"class":59},[34,132685,132686,132688,132690,132692],{"class":36,"line":107},[34,132687,131419],{"class":63},[34,132689,51898],{"class":59},[34,132691,72983],{"class":63},[34,132693,1765],{"class":59},[34,132695,132696],{"class":36,"line":196},[34,132697,2036],{"class":59},[584,132699,132701],{"id":132700},"_1113-定位","11.1.3 定位",[22462,132703,132705],{"id":132704},"_11131-使用场景","11.1.3.1 使用场景",[14,132707,132708],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132710,132711],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22462,132713,132715],{"id":132714},"_11132-定位组成","11.1.3.2 定位组成",[14,132717,132718],{},"定位 = 定位模式 + 边偏移",[567,132720,132721],{},[570,132722,132723,132726,132727],{},[760,132724,132725],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[760,132728,132729],{},"定位模式",[25,132731,132733],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[31,132734,132735,132741,132755,132772,132789],{"__ignoreMap":22},[34,132736,132737,132739],{"class":36,"line":37},[34,132738,130787],{"class":2427},[34,132740,16036],{"class":59},[34,132742,132743,132746,132748,132750,132752],{"class":36,"line":44},[34,132744,132745],{"class":63},"  position",[34,132747,51898],{"class":59},[34,132749,55225],{"class":63},[34,132751,130802],{"class":59},[34,132753,132754],{"class":40},"\u002F* 定位模式 *\u002F\n",[34,132756,132757,132760,132762,132764,132766,132769],{"class":36,"line":50},[34,132758,132759],{"class":63},"  top",[34,132761,51898],{"class":59},[34,132763,1053],{"class":63},[34,132765,51953],{"class":112},[34,132767,132768],{"class":59},";           ",[34,132770,132771],{"class":40},"\u002F* 边偏移：上 *\u002F\n",[34,132773,132774,132777,132779,132781,132783,132786],{"class":36,"line":56},[34,132775,132776],{"class":63},"  left",[34,132778,51898],{"class":59},[34,132780,1306],{"class":63},[34,132782,51953],{"class":112},[34,132784,132785],{"class":59},";          ",[34,132787,132788],{"class":40},"\u002F* 边偏移：左 *\u002F\n",[34,132790,132791],{"class":36,"line":107},[34,132792,2036],{"class":59},[748,132794,132795,132804],{},[751,132796,132797],{},[754,132798,132799,132801],{},[757,132800,763],{"align":24200},[757,132802,132803],{"align":24200},"语义",[795,132805,132806,132813,132820,132827],{},[754,132807,132808,132810],{},[800,132809,132392],{"align":24200},[800,132811,132812],{"align":24200},"静态定位",[754,132814,132815,132817],{},[800,132816,55225],{"align":24200},[800,132818,132819],{"align":24200},"相对定位",[754,132821,132822,132824],{},[800,132823,55292],{"align":24200},[800,132825,132826],{"align":24200},"绝对定位",[754,132828,132829,132831],{},[800,132830,86694],{"align":24200},[800,132832,132833],{"align":24200},"固定定位",[14,132835,132836],{},"（1）静态定位：",[1611,132838,132839,132850],{},[570,132840,132841,132842,132845,132846,132849],{},"静态定位是元素的 ",[760,132843,132844],{},"默认定位方式"," ， ",[760,132847,132848],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[570,132851,5645],{},[25,132853,132854],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,132855,132856,132862,132874,132888,132902],{"__ignoreMap":22},[34,132857,132858,132860],{"class":36,"line":37},[34,132859,130787],{"class":2427},[34,132861,16036],{"class":59},[34,132863,132864,132866,132868,132870,132872],{"class":36,"line":44},[34,132865,132745],{"class":63},[34,132867,51898],{"class":59},[34,132869,55225],{"class":63},[34,132871,130802],{"class":59},[34,132873,132754],{"class":40},[34,132875,132876,132878,132880,132882,132884,132886],{"class":36,"line":50},[34,132877,132759],{"class":63},[34,132879,51898],{"class":59},[34,132881,1053],{"class":63},[34,132883,51953],{"class":112},[34,132885,132768],{"class":59},[34,132887,132771],{"class":40},[34,132889,132890,132892,132894,132896,132898,132900],{"class":36,"line":56},[34,132891,132776],{"class":63},[34,132893,51898],{"class":59},[34,132895,1306],{"class":63},[34,132897,51953],{"class":112},[34,132899,132785],{"class":59},[34,132901,132788],{"class":40},[34,132903,132904],{"class":36,"line":107},[34,132905,2036],{"class":59},[1611,132907,132908,132911],{},[570,132909,132910],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[570,132912,132913],{},"静态定位在布局时我们几乎不用的",[14,132915,132916],{},"（2）相对定位",[1611,132918,132919,132926],{},[570,132920,132921,132922,132925],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[760,132923,132924],{},"原来的位置"," 来说的（自恋型）",[570,132927,5645],{},[25,132929,132930],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,132931,132932,132938,132950,132964,132978],{"__ignoreMap":22},[34,132933,132934,132936],{"class":36,"line":37},[34,132935,130787],{"class":2427},[34,132937,16036],{"class":59},[34,132939,132940,132942,132944,132946,132948],{"class":36,"line":44},[34,132941,132745],{"class":63},[34,132943,51898],{"class":59},[34,132945,55225],{"class":63},[34,132947,130802],{"class":59},[34,132949,132754],{"class":40},[34,132951,132952,132954,132956,132958,132960,132962],{"class":36,"line":50},[34,132953,132759],{"class":63},[34,132955,51898],{"class":59},[34,132957,1053],{"class":63},[34,132959,51953],{"class":112},[34,132961,132768],{"class":59},[34,132963,132771],{"class":40},[34,132965,132966,132968,132970,132972,132974,132976],{"class":36,"line":56},[34,132967,132776],{"class":63},[34,132969,51898],{"class":59},[34,132971,1306],{"class":63},[34,132973,51953],{"class":112},[34,132975,132785],{"class":59},[34,132977,132788],{"class":40},[34,132979,132980],{"class":36,"line":107},[34,132981,2036],{"class":59},[1611,132983,132984],{},[570,132985,132986,132987,132989,132990,132992,132993,132996,132997,133000,133001,133003,133004,133007],{},"相对定位的特点：",[54177,132988],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54177,132991],{},"  ② ",[760,132994,132995],{},"原来"," 在标准流的 ",[760,132998,132999],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54177,133002],{},"  ③因此， ",[760,133005,133006],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,133009,133010],{},"（3）绝对定位",[1611,133012,133013,133022],{},[570,133014,133015,133017,133018,133021],{},[760,133016,132826],{}," 是元素在移动位置的时候，是相对于它 ",[760,133019,133020],{},"祖先元素"," 来说的（拼爹型）",[570,133023,5645],{},[25,133025,133026],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,133027,133028,133034,133046,133060,133074],{"__ignoreMap":22},[34,133029,133030,133032],{"class":36,"line":37},[34,133031,130787],{"class":2427},[34,133033,16036],{"class":59},[34,133035,133036,133038,133040,133042,133044],{"class":36,"line":44},[34,133037,132745],{"class":63},[34,133039,51898],{"class":59},[34,133041,55225],{"class":63},[34,133043,130802],{"class":59},[34,133045,132754],{"class":40},[34,133047,133048,133050,133052,133054,133056,133058],{"class":36,"line":50},[34,133049,132759],{"class":63},[34,133051,51898],{"class":59},[34,133053,1053],{"class":63},[34,133055,51953],{"class":112},[34,133057,132768],{"class":59},[34,133059,132771],{"class":40},[34,133061,133062,133064,133066,133068,133070,133072],{"class":36,"line":56},[34,133063,132776],{"class":63},[34,133065,51898],{"class":59},[34,133067,1306],{"class":63},[34,133069,51953],{"class":112},[34,133071,132785],{"class":59},[34,133073,132788],{"class":40},[34,133075,133076],{"class":36,"line":107},[34,133077,2036],{"class":59},[1611,133079,133080,133095,133104,133107],{},[570,133081,133082,133083,133085,133086,133088,133089,133091,133092,133094],{},"绝对定位的特点：",[54177,133084],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54177,133087],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54177,133090],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54177,133093],{},"  (4)固定定位",[570,133096,133097,133099,133100,133103],{},[760,133098,132833],{}," 是元素 ",[760,133101,133102],{},"固定于浏览器可视区的位置"," 。（认死理型）",[570,133105,133106],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[570,133108,133109],{},"语法:",[25,133111,133112],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,133113,133114,133120,133132,133146,133160],{"__ignoreMap":22},[34,133115,133116,133118],{"class":36,"line":37},[34,133117,130787],{"class":2427},[34,133119,16036],{"class":59},[34,133121,133122,133124,133126,133128,133130],{"class":36,"line":44},[34,133123,132745],{"class":63},[34,133125,51898],{"class":59},[34,133127,55225],{"class":63},[34,133129,130802],{"class":59},[34,133131,132754],{"class":40},[34,133133,133134,133136,133138,133140,133142,133144],{"class":36,"line":50},[34,133135,132759],{"class":63},[34,133137,51898],{"class":59},[34,133139,1053],{"class":63},[34,133141,51953],{"class":112},[34,133143,132768],{"class":59},[34,133145,132771],{"class":40},[34,133147,133148,133150,133152,133154,133156,133158],{"class":36,"line":56},[34,133149,132776],{"class":63},[34,133151,51898],{"class":59},[34,133153,1306],{"class":63},[34,133155,51953],{"class":112},[34,133157,132785],{"class":59},[34,133159,132788],{"class":40},[34,133161,133162],{"class":36,"line":107},[34,133163,2036],{"class":59},[1611,133165,133166,133175],{},[570,133167,133168,133169,133171,133172,133174],{},"特点:",[54177,133170],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54177,133173],{},"  ②固定定位不再占有原先的位置,完全脱标",[570,133176,133177,133178,133180,133181,133183,133184,133186],{},"固定在版心位置的方法:",[54177,133179],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54177,133182],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54177,133185],{},"  实例：",[25,133188,133189],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,133190,133191,133197,133209,133223,133237],{"__ignoreMap":22},[34,133192,133193,133195],{"class":36,"line":37},[34,133194,130787],{"class":2427},[34,133196,16036],{"class":59},[34,133198,133199,133201,133203,133205,133207],{"class":36,"line":44},[34,133200,132745],{"class":63},[34,133202,51898],{"class":59},[34,133204,55225],{"class":63},[34,133206,130802],{"class":59},[34,133208,132754],{"class":40},[34,133210,133211,133213,133215,133217,133219,133221],{"class":36,"line":50},[34,133212,132759],{"class":63},[34,133214,51898],{"class":59},[34,133216,1053],{"class":63},[34,133218,51953],{"class":112},[34,133220,132768],{"class":59},[34,133222,132771],{"class":40},[34,133224,133225,133227,133229,133231,133233,133235],{"class":36,"line":56},[34,133226,132776],{"class":63},[34,133228,51898],{"class":59},[34,133230,1306],{"class":63},[34,133232,51953],{"class":112},[34,133234,132785],{"class":59},[34,133236,132788],{"class":40},[34,133238,133239],{"class":36,"line":107},[34,133240,2036],{"class":59},[20,133242],{"style":126795,"src":133243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133245,133246],{},"(5)粘性定位",[1611,133248,133249,133252],{},[570,133250,133251],{},"粘性定位可以被认为是相对定位和固定定位的混合",[570,133253,5645],{},[25,133255,133256],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,133257,133258,133264,133276,133290,133304],{"__ignoreMap":22},[34,133259,133260,133262],{"class":36,"line":37},[34,133261,130787],{"class":2427},[34,133263,16036],{"class":59},[34,133265,133266,133268,133270,133272,133274],{"class":36,"line":44},[34,133267,132745],{"class":63},[34,133269,51898],{"class":59},[34,133271,55225],{"class":63},[34,133273,130802],{"class":59},[34,133275,132754],{"class":40},[34,133277,133278,133280,133282,133284,133286,133288],{"class":36,"line":50},[34,133279,132759],{"class":63},[34,133281,51898],{"class":59},[34,133283,1053],{"class":63},[34,133285,51953],{"class":112},[34,133287,132768],{"class":59},[34,133289,132771],{"class":40},[34,133291,133292,133294,133296,133298,133300,133302],{"class":36,"line":56},[34,133293,132776],{"class":63},[34,133295,51898],{"class":59},[34,133297,1306],{"class":63},[34,133299,51953],{"class":112},[34,133301,132785],{"class":59},[34,133303,132788],{"class":40},[34,133305,133306],{"class":36,"line":107},[34,133307,2036],{"class":59},[1611,133309,133310],{},[570,133311,133312,133313,133315,133316,133318,133319,133321,133322,133325,133326,133328],{},"粘性定位的特点：",[54177,133314],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54177,133317],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54177,133320],{},"  ③必须添加 top 、left、right、bottom ",[760,133323,133324],{},"其中一个"," 才有效",[54177,133327],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[25,133330,133331],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,133332,133333,133339,133351,133365,133379],{"__ignoreMap":22},[34,133334,133335,133337],{"class":36,"line":37},[34,133336,130787],{"class":2427},[34,133338,16036],{"class":59},[34,133340,133341,133343,133345,133347,133349],{"class":36,"line":44},[34,133342,132745],{"class":63},[34,133344,51898],{"class":59},[34,133346,55225],{"class":63},[34,133348,130802],{"class":59},[34,133350,132754],{"class":40},[34,133352,133353,133355,133357,133359,133361,133363],{"class":36,"line":50},[34,133354,132759],{"class":63},[34,133356,51898],{"class":59},[34,133358,1053],{"class":63},[34,133360,51953],{"class":112},[34,133362,132768],{"class":59},[34,133364,132771],{"class":40},[34,133366,133367,133369,133371,133373,133375,133377],{"class":36,"line":56},[34,133368,132776],{"class":63},[34,133370,51898],{"class":59},[34,133372,1306],{"class":63},[34,133374,51953],{"class":112},[34,133376,132785],{"class":59},[34,133378,132788],{"class":40},[34,133380,133381],{"class":36,"line":107},[34,133382,2036],{"class":59},[20,133384],{"style":126795,"src":133385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133387,133388],{},"(6)总结",[748,133390,133391,133406],{},[751,133392,133393],{},[754,133394,133395,133397,133400,133403],{},[757,133396,132729],{"align":24200},[757,133398,133399],{"align":24200},"是否脱标",[757,133401,133402],{"align":24200},"移动位置",[757,133404,133405],{"align":24200},"是否常用",[795,133407,133408,133421,133435,133449,133462],{},[754,133409,133410,133413,133415,133418],{},[800,133411,133412],{"align":24200},"Static 静态定位",[800,133414,105065],{"align":24200},[800,133416,133417],{"align":24200},"不能使用边偏移",[800,133419,133420],{"align":24200},"很少",[754,133422,133423,133426,133429,133432],{},[800,133424,133425],{"align":24200},"Relative 相对定位",[800,133427,133428],{"align":24200},"否(占有位置)",[800,133430,133431],{"align":24200},"相对于自身位置移动",[800,133433,133434],{"align":24200},"基本单独使用",[754,133436,133437,133440,133443,133446],{},[800,133438,133439],{"align":24200},"Absolute 绝对定位",[800,133441,133442],{"align":24200},"是(不占有位置)",[800,133444,133445],{"align":24200},"带有定位的父级",[800,133447,133448],{"align":24200},"要和定位父级元素搭配使用",[754,133450,133451,133454,133456,133459],{},[800,133452,133453],{"align":24200},"Fixed 固定定位",[800,133455,133442],{"align":24200},[800,133457,133458],{"align":24200},"浏览器可视区",[800,133460,133461],{"align":24200},"单独使用,不需要父级",[754,133463,133464,133467,133469,133471],{},[800,133465,133466],{"align":24200},"Sticky 粘性定位",[800,133468,133428],{"align":24200},[800,133470,133458],{"align":24200},[800,133472,133473],{"align":24200},"当前阶段少",[567,133475,133476],{"start":44},[570,133477,133478,133481],{},[760,133479,133480],{},"边偏移"," 则决定了该元素的最终位置",[748,133483,133484,133495],{},[751,133485,133486],{},[754,133487,133488,133491,133493],{},[757,133489,133490],{"align":24200},"边偏移属性",[757,133492,27957],{"align":24200},[757,133494,27954],{"align":24200},[795,133496,133497,133508,133519,133529],{},[754,133498,133499,133502,133505],{},[800,133500,133501],{"align":24200},"top",[800,133503,133504],{"align":24200},"top: 80px;",[800,133506,133507],{"align":24200},"顶端偏移量，定义元素相对于父元素上边线的距离",[754,133509,133510,133513,133516],{},[800,133511,133512],{"align":24200},"bottom",[800,133514,133515],{"align":24200},"bottom: 80px ;",[800,133517,133518],{"align":24200},"底部偏移量，定义元素相对于其父元素下边线的距离",[754,133520,133521,133523,133526],{},[800,133522,24200],{"align":24200},[800,133524,133525],{"align":24200},"left: 80px ;",[800,133527,133528],{"align":24200},"左侧偏移量，定义元素相对于其父元素左边线的距离",[754,133530,133531,133533,133536],{},[800,133532,72983],{"align":24200},[800,133534,133535],{"align":24200},"right: 80px ;",[800,133537,133538],{"align":24200},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1611,133540,133541],{},[570,133542,9489,133543,133545,133546,133548,133549,133551,133552,133555,133556,133558,133559,133561],{},[54177,133544],{},"  ① ",[760,133547,133480],{}," 需要和 ",[760,133550,132729],{}," 联合使用， ",[760,133553,133554],{},"单独使用无效"," ；",[54177,133557],{},"  ②top和bottom不要同时使用",[54177,133560],{},"  ③left和right不要同时使用",[22462,133563,133565],{"id":133564},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133567,133568],{},"子级是绝对定位的话，父级要用相对定位",[1611,133570,133571,133574,133577,133580],{},[570,133572,133573],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[570,133575,133576],{},"父盒子需要加定位限制子盒子在父盒子内显示",[570,133578,133579],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[570,133581,133582,133583,133586],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[760,133584,133585],{},"子绝父绝"," 也会遇到",[22462,133588,133590],{"id":133589},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1611,133592,133593,133608],{},[570,133594,133595,133596,133599,133600,133603,133604,133607],{},"在使用 ",[760,133597,133598],{},"定位"," 布局时，可能会 ",[760,133601,133602],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[760,133605,133606],{},"z-index"," 来控制盒子的前后次序 (z轴)",[570,133609,5645],{},[25,133611,133612],{"className":126939,"code":132732,"language":126941,"meta":22,"style":22},[31,133613,133614,133620,133632,133646,133660],{"__ignoreMap":22},[34,133615,133616,133618],{"class":36,"line":37},[34,133617,130787],{"class":2427},[34,133619,16036],{"class":59},[34,133621,133622,133624,133626,133628,133630],{"class":36,"line":44},[34,133623,132745],{"class":63},[34,133625,51898],{"class":59},[34,133627,55225],{"class":63},[34,133629,130802],{"class":59},[34,133631,132754],{"class":40},[34,133633,133634,133636,133638,133640,133642,133644],{"class":36,"line":50},[34,133635,132759],{"class":63},[34,133637,51898],{"class":59},[34,133639,1053],{"class":63},[34,133641,51953],{"class":112},[34,133643,132768],{"class":59},[34,133645,132771],{"class":40},[34,133647,133648,133650,133652,133654,133656,133658],{"class":36,"line":56},[34,133649,132776],{"class":63},[34,133651,51898],{"class":59},[34,133653,1306],{"class":63},[34,133655,51953],{"class":112},[34,133657,132785],{"class":59},[34,133659,132788],{"class":40},[34,133661,133662],{"class":36,"line":107},[34,133663,2036],{"class":59},[1611,133665,133666],{},[570,133667,133668,133669,133545,133671,133673,133674,128102,133677,83000,133680,133682,133683,133685,133686,133689,133690,133555,133693,133695,133696,133699,133701],{},"z-index的特性",[54177,133670],{},[760,133672,127403],{}," ： ",[760,133675,133676],{},"正整数",[760,133678,133679],{},"负整数",[760,133681,319],{}," ，默认值是 0，数值越大，盒子越靠上；",[54177,133684],{},"  ②如果 ",[760,133687,133688],{},"属性值相同"," ，则按照书写顺序， ",[760,133691,133692],{},"后来居上",[54177,133694],{},"  ③数字后面 ",[760,133697,133698],{},"不能加单位",[54177,133700],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22462,133703,133705],{"id":133704},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133707,133708],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133710,133711],{},"方法:",[1611,133713,133714,133724],{},[570,133715,133716,133717,133720,133721],{},"left: 50%; 让 ",[760,133718,133719],{},"盒子的左侧"," 移动到 ",[760,133722,133723],{},"父级元素的水平中心位置",[570,133725,133726,133727,133730,133731],{},"margin-left: -100px; 让盒子 ",[760,133728,133729],{},"向左"," 移动 ",[760,133732,133733],{},"自身宽度的一半",[22462,133735,133737],{"id":133736},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[567,133739,133740,133743],{},[570,133741,133742],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[570,133744,133745],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133747,133748],{},"也就是说绝对定位和固定定位和浮动类似",[567,133750,133751],{"start":50},[570,133752,133753],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1611,133755,133756,133759,133762],{},[570,133757,133758],{},"可以用inline-block 转换为行内块",[570,133760,133761],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[570,133763,133764],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133766,133767],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22462,133769,133771],{"id":133770},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[567,133773,133774,133777,133780,133783],{},[570,133775,133776],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[570,133778,133779],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[570,133781,133782],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[570,133784,133785],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[25,133787,133788],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,133789,133790,133796,133806,133810,133816,133826],{"__ignoreMap":22},[34,133791,133792,133794],{"class":36,"line":37},[34,133793,131412],{"class":2427},[34,133795,16036],{"class":59},[34,133797,133798,133800,133802,133804],{"class":36,"line":44},[34,133799,131419],{"class":63},[34,133801,51898],{"class":59},[34,133803,24200],{"class":63},[34,133805,1765],{"class":59},[34,133807,133808],{"class":36,"line":50},[34,133809,2036],{"class":59},[34,133811,133812,133814],{"class":36,"line":56},[34,133813,131434],{"class":2427},[34,133815,16036],{"class":59},[34,133817,133818,133820,133822,133824],{"class":36,"line":107},[34,133819,131419],{"class":63},[34,133821,51898],{"class":59},[34,133823,72983],{"class":63},[34,133825,1765],{"class":59},[34,133827,133828],{"class":36,"line":196},[34,133829,2036],{"class":59},[20,133831],{"style":126795,"src":133832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22462,133834,133836],{"id":133835},"_11138-轮播图","11.1.3.8 轮播图",[20,133838],{"style":126795,"src":133839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[567,133841,133842],{},[570,133843,133844],{},"制作顺序:",[1611,133846,133847,133850,133853,133862],{},[570,133848,133849],{},"大盒子我们类名为： tb-promo 淘宝广告",[570,133851,133852],{},"里面先放一张图片",[570,133854,133855,133856,133858,133859,133861],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54177,133857],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54177,133860],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[570,133863,133864,133865,133867,133868,133870],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54177,133866],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54177,133869],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[567,133872,133873],{"start":44},[570,133874,133875],{},"代码模块",[25,133877,133879],{"className":126939,"code":133878,"language":126941,"meta":22,"style":22},"\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",[31,133880,133881,133886,133893,133903,133913,133923,133927,133932,133939,133949],{"__ignoreMap":22},[34,133882,133883],{"class":36,"line":37},[34,133884,133885],{"class":40},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[34,133887,133888,133891],{"class":36,"line":44},[34,133889,133890],{"class":2427},".son",[34,133892,16036],{"class":59},[34,133894,133895,133897,133899,133901],{"class":36,"line":50},[34,133896,132745],{"class":63},[34,133898,51898],{"class":59},[34,133900,55292],{"class":63},[34,133902,1765],{"class":59},[34,133904,133905,133907,133909,133911],{"class":36,"line":56},[34,133906,132759],{"class":63},[34,133908,51898],{"class":59},[34,133910,319],{"class":63},[34,133912,1765],{"class":59},[34,133914,133915,133917,133919,133921],{"class":36,"line":107},[34,133916,132776],{"class":63},[34,133918,51898],{"class":59},[34,133920,319],{"class":63},[34,133922,1765],{"class":59},[34,133924,133925],{"class":36,"line":196},[34,133926,2036],{"class":59},[34,133928,133929],{"class":36,"line":202},[34,133930,133931],{"class":40},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[34,133933,133934,133937],{"class":36,"line":207},[34,133935,133936],{"class":2427},".father",[34,133938,16036],{"class":59},[34,133940,133941,133943,133945,133947],{"class":36,"line":222},[34,133942,132745],{"class":63},[34,133944,51898],{"class":59},[34,133946,55225],{"class":63},[34,133948,1765],{"class":59},[34,133950,133951],{"class":36,"line":227},[34,133952,2036],{"class":59},[14,133954,133955],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[584,133957,133959],{"id":133958},"_1114-定位数值的移动","11.1.4 定位数值的移动",[20,133961],{"style":126795,"src":133962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133964,133965],{},"✨ 黄金口诀：",[14,133967,133968],{},"\"TOP正下负上，LEFT正右负左\"",[14,133970,133971],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133973,133974],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133976,133977],{},"✨ 简单记：",[14,133979,133980],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[532,133982,133983],{},"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":22,"searchDepth":44,"depth":44,"links":133985},[133986],{"id":132513,"depth":44,"text":132514,"children":133987},[133988,133989,133990,133991],{"id":132517,"depth":50,"text":132518},{"id":132532,"depth":50,"text":132533},{"id":132700,"depth":50,"text":132701},{"id":133958,"depth":50,"text":133959},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132505,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133998,"title":133999,"body":134000,"description":537,"extension":538,"meta":135423,"navigation":540,"path":135424,"seo":135425,"stem":135426,"__hash__":135427},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134001,"toc":135402},[134002,134005,134009,134017,134021,134026,134034,134046,134050,134055,134063,134074,134078,134083,134124,134132,134136,134139,134142,134145,134239,134242,134336,134339,134433,134436,134439,134474,134477,134480,134510,134513,134516,134519,134522,134525,134528,134531,134601,134604,134608,134612,134653,134657,134663,134666,134669,134673,134676,134679,134682,134763,134766,134769,134773,134777,134780,134783,134786,134789,134792,134798,134807,134811,134830,134834,134844,134847,134850,134853,134856,134859,134862,134865,134868,134877,134881,134890,134893,134898,134951,134956,135122,135125,135128,135133,135136,135139,135142,135145,135150,135298,135301,135304,135309,135312,135317,135351,135354,135357,135361,135364,135371,135374,135377,135380,135383,135386,135389,135392,135396,135399],[10,134003,133999],{"id":134004},"_12-显示隐藏与图形资源",[555,134006,134008],{"id":134007},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1611,134010,134011,134014],{},[570,134012,134013],{},"目的:让一个元素在页面中消失或者显示出来",[570,134015,134016],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[584,134018,134020],{"id":134019},"_1211-display-显示","12.1.1 display 显示",[567,134022,134023],{},[570,134024,134025],{},"display 设置或检索对象是否及如何显示",[1611,134027,134028,134031],{},[570,134029,134030],{},"display: none;隐藏对象",[570,134032,134033],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[567,134035,134036,134043],{"start":44},[570,134037,134038,134039,134042],{},"特点： display 隐藏元素后， ",[760,134040,134041],{},"不再占"," 有原来的位置",[570,134044,134045],{},"在js中使用非常的广泛",[584,134047,134049],{"id":134048},"_1212-visibility可见性","12.1.2 visibility可见性",[567,134051,134052],{},[570,134053,134054],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1611,134056,134057,134060],{},[570,134058,134059],{},"visibility： visible；元素可见",[570,134061,134062],{},"visibility：hidden；元素隐藏",[567,134064,134065,134068,134071],{"start":44},[570,134066,134067],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[570,134069,134070],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[570,134072,134073],{},"隐藏后继续占有原有位置",[584,134075,134077],{"id":134076},"_1213-overflow溢出","12.1.3 overflow溢出",[1611,134079,134080],{},[570,134081,134082],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[748,134084,134085,134093],{},[751,134086,134087],{},[754,134088,134089,134091],{},[757,134090,127403],{"align":24200},[757,134092,27954],{"align":24200},[795,134094,134095,134103,134110,134117],{},[754,134096,134097,134100],{},[800,134098,134099],{"align":24200},"visible",[800,134101,134102],{"align":24200},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[754,134104,134105,134107],{},[800,134106,62175],{"align":24200},[800,134108,134109],{"align":24200},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[754,134111,134112,134114],{},[800,134113,129359],{"align":24200},[800,134115,134116],{"align":24200},"不管超出内容否，总是显示滚动条",[754,134118,134119,134121],{},[800,134120,73124],{"align":24200},[800,134122,134123],{"align":24200},"超出自动显示滚动条，不超出不显示滚动条",[1611,134125,134126,134129],{},[570,134127,134128],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[570,134130,134131],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[584,134133,134135],{"id":134134},"_1214-案例收获","12.1.4 案例收获",[20,134137],{"style":126795,"src":134138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134140,134141],{},"问题：没做出来动态效果，使用hover没实现",[14,134143,134144],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[25,134146,134147],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,134148,134149,134153,134167,134171,134185,134189,134203,134207,134221,134225],{"__ignoreMap":22},[34,134150,134151],{"class":36,"line":37},[34,134152,132378],{"class":40},[34,134154,134155,134157,134159,134161,134163,134165],{"class":36,"line":44},[34,134156,132383],{"class":2427},[34,134158,80268],{"class":59},[34,134160,129299],{"class":63},[34,134162,51898],{"class":59},[34,134164,132392],{"class":63},[34,134166,129869],{"class":59},[34,134168,134169],{"class":36,"line":50},[34,134170,132399],{"class":40},[34,134172,134173,134175,134177,134179,134181,134183],{"class":36,"line":56},[34,134174,132404],{"class":2427},[34,134176,80268],{"class":59},[34,134178,129299],{"class":63},[34,134180,51898],{"class":59},[34,134182,55225],{"class":63},[34,134184,129869],{"class":59},[34,134186,134187],{"class":36,"line":107},[34,134188,132419],{"class":40},[34,134190,134191,134193,134195,134197,134199,134201],{"class":36,"line":196},[34,134192,132424],{"class":2427},[34,134194,80268],{"class":59},[34,134196,129299],{"class":63},[34,134198,51898],{"class":59},[34,134200,55292],{"class":63},[34,134202,129869],{"class":59},[34,134204,134205],{"class":36,"line":202},[34,134206,132439],{"class":40},[34,134208,134209,134211,134213,134215,134217,134219],{"class":36,"line":207},[34,134210,132444],{"class":2427},[34,134212,80268],{"class":59},[34,134214,129299],{"class":63},[34,134216,51898],{"class":59},[34,134218,86694],{"class":63},[34,134220,129869],{"class":59},[34,134222,134223],{"class":36,"line":222},[34,134224,132459],{"class":40},[34,134226,134227,134229,134231,134233,134235,134237],{"class":36,"line":227},[34,134228,132464],{"class":2427},[34,134230,80268],{"class":59},[34,134232,129299],{"class":63},[34,134234,51898],{"class":59},[34,134236,132473],{"class":63},[34,134238,129869],{"class":59},[14,134240,134241],{},"完整代码：",[25,134243,134244],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,134245,134246,134250,134264,134268,134282,134286,134300,134304,134318,134322],{"__ignoreMap":22},[34,134247,134248],{"class":36,"line":37},[34,134249,132378],{"class":40},[34,134251,134252,134254,134256,134258,134260,134262],{"class":36,"line":44},[34,134253,132383],{"class":2427},[34,134255,80268],{"class":59},[34,134257,129299],{"class":63},[34,134259,51898],{"class":59},[34,134261,132392],{"class":63},[34,134263,129869],{"class":59},[34,134265,134266],{"class":36,"line":50},[34,134267,132399],{"class":40},[34,134269,134270,134272,134274,134276,134278,134280],{"class":36,"line":56},[34,134271,132404],{"class":2427},[34,134273,80268],{"class":59},[34,134275,129299],{"class":63},[34,134277,51898],{"class":59},[34,134279,55225],{"class":63},[34,134281,129869],{"class":59},[34,134283,134284],{"class":36,"line":107},[34,134285,132419],{"class":40},[34,134287,134288,134290,134292,134294,134296,134298],{"class":36,"line":196},[34,134289,132424],{"class":2427},[34,134291,80268],{"class":59},[34,134293,129299],{"class":63},[34,134295,51898],{"class":59},[34,134297,55292],{"class":63},[34,134299,129869],{"class":59},[34,134301,134302],{"class":36,"line":202},[34,134303,132439],{"class":40},[34,134305,134306,134308,134310,134312,134314,134316],{"class":36,"line":207},[34,134307,132444],{"class":2427},[34,134309,80268],{"class":59},[34,134311,129299],{"class":63},[34,134313,51898],{"class":59},[34,134315,86694],{"class":63},[34,134317,129869],{"class":59},[34,134319,134320],{"class":36,"line":222},[34,134321,132459],{"class":40},[34,134323,134324,134326,134328,134330,134332,134334],{"class":36,"line":227},[34,134325,132464],{"class":2427},[34,134327,80268],{"class":59},[34,134329,129299],{"class":63},[34,134331,51898],{"class":59},[34,134333,132473],{"class":63},[34,134335,129869],{"class":59},[14,134337,134338],{},"分布思路重点详解：",[25,134340,134341],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,134342,134343,134347,134361,134365,134379,134383,134397,134401,134415,134419],{"__ignoreMap":22},[34,134344,134345],{"class":36,"line":37},[34,134346,132378],{"class":40},[34,134348,134349,134351,134353,134355,134357,134359],{"class":36,"line":44},[34,134350,132383],{"class":2427},[34,134352,80268],{"class":59},[34,134354,129299],{"class":63},[34,134356,51898],{"class":59},[34,134358,132392],{"class":63},[34,134360,129869],{"class":59},[34,134362,134363],{"class":36,"line":50},[34,134364,132399],{"class":40},[34,134366,134367,134369,134371,134373,134375,134377],{"class":36,"line":56},[34,134368,132404],{"class":2427},[34,134370,80268],{"class":59},[34,134372,129299],{"class":63},[34,134374,51898],{"class":59},[34,134376,55225],{"class":63},[34,134378,129869],{"class":59},[34,134380,134381],{"class":36,"line":107},[34,134382,132419],{"class":40},[34,134384,134385,134387,134389,134391,134393,134395],{"class":36,"line":196},[34,134386,132424],{"class":2427},[34,134388,80268],{"class":59},[34,134390,129299],{"class":63},[34,134392,51898],{"class":59},[34,134394,55292],{"class":63},[34,134396,129869],{"class":59},[34,134398,134399],{"class":36,"line":202},[34,134400,132439],{"class":40},[34,134402,134403,134405,134407,134409,134411,134413],{"class":36,"line":207},[34,134404,132444],{"class":2427},[34,134406,80268],{"class":59},[34,134408,129299],{"class":63},[34,134410,51898],{"class":59},[34,134412,86694],{"class":63},[34,134414,129869],{"class":59},[34,134416,134417],{"class":36,"line":222},[34,134418,132459],{"class":40},[34,134420,134421,134423,134425,134427,134429,134431],{"class":36,"line":227},[34,134422,132464],{"class":2427},[34,134424,80268],{"class":59},[34,134426,129299],{"class":63},[34,134428,51898],{"class":59},[34,134430,132473],{"class":63},[34,134432,129869],{"class":59},[20,134434],{"style":126795,"src":134435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134437,134438],{},"图片太大，盒子太小，此时需要修改图片的大小",[25,134440,134442],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[31,134443,134444],{"__ignoreMap":22},[34,134445,134446,134448,134450,134452,134454,134457,134459,134461,134464,134467,134469,134472],{"class":36,"line":37},[34,134447,1515],{"class":59},[34,134449,20],{"class":51761},[34,134451,55700],{"class":2427},[34,134453,447],{"class":59},[34,134455,134456],{"class":187},"\"images\u002Fpic.jpg\"",[34,134458,55708],{"class":2427},[34,134460,447],{"class":59},[34,134462,134463],{"class":187},"\"描述文字\"",[34,134465,134466],{"class":2427}," title",[34,134468,447],{"class":59},[34,134470,134471],{"class":187},"\"悬停提示\"",[34,134473,51768],{"class":59},[20,134475],{"style":126795,"src":134476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134478,134479],{},"制造遮罩层",[25,134481,134482],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,134483,134484],{"__ignoreMap":22},[34,134485,134486,134488,134490,134492,134494,134496,134498,134500,134502,134504,134506,134508],{"class":36,"line":37},[34,134487,1515],{"class":59},[34,134489,20],{"class":51761},[34,134491,55700],{"class":2427},[34,134493,447],{"class":59},[34,134495,134456],{"class":187},[34,134497,55708],{"class":2427},[34,134499,447],{"class":59},[34,134501,134463],{"class":187},[34,134503,134466],{"class":2427},[34,134505,447],{"class":59},[34,134507,134471],{"class":187},[34,134509,51768],{"class":59},[14,134511,134512],{},"此时是这样的为标准流",[20,134514],{"style":126795,"src":134515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134517,134518],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134520,134521],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134523,134524],{},"让他在中间，用center(background-position)",[14,134526,134527],{},"将需要变的尽可能放到一个盒子中",[14,134529,134530],{},"放大盒子上内部盒子发生变化",[25,134532,134534],{"className":126939,"code":134533,"language":126941,"meta":22,"style":22},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[31,134535,134536,134542,134552,134556,134563,134573,134585,134597],{"__ignoreMap":22},[34,134537,134538,134540],{"class":36,"line":37},[34,134539,128006],{"class":2427},[34,134541,16036],{"class":59},[34,134543,134544,134546,134548,134550],{"class":36,"line":44},[34,134545,132745],{"class":63},[34,134547,51898],{"class":59},[34,134549,55225],{"class":63},[34,134551,1765],{"class":59},[34,134553,134554],{"class":36,"line":50},[34,134555,2036],{"class":59},[34,134557,134558,134561],{"class":36,"line":56},[34,134559,134560],{"class":2427},".child",[34,134562,16036],{"class":59},[34,134564,134565,134567,134569,134571],{"class":36,"line":107},[34,134566,132745],{"class":63},[34,134568,51898],{"class":59},[34,134570,55292],{"class":63},[34,134572,1765],{"class":59},[34,134574,134575,134577,134579,134581,134583],{"class":36,"line":196},[34,134576,132759],{"class":63},[34,134578,51898],{"class":59},[34,134580,1262],{"class":63},[34,134582,936],{"class":112},[34,134584,1765],{"class":59},[34,134586,134587,134589,134591,134593,134595],{"class":36,"line":202},[34,134588,132776],{"class":63},[34,134590,51898],{"class":59},[34,134592,1262],{"class":63},[34,134594,936],{"class":112},[34,134596,1765],{"class":59},[34,134598,134599],{"class":36,"line":207},[34,134600,2036],{"class":59},[14,134602,134603],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[555,134605,134607],{"id":134606},"_122-精灵图","12.2 精灵图",[584,134609,134611],{"id":134610},"_1221-理解","12.2.1 理解",[567,134613,134614,134632],{},[570,134615,134616,134617,132845,134620,134623,134624,134627,134628,134631],{},"目的： ",[760,134618,134619],{},"为了有效地减少服务器接收和发送请求的次数",[760,134621,134622],{},"提高"," 页面的 ",[760,134625,134626],{},"加载速度"," ，出现了 ",[760,134629,134630],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[570,134633,134634,134635,134637,134638,134640,134641,134643,134644,134646,134647,134649,134650,134652],{},"使用精灵图核心：",[54177,134636],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54177,134639],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54177,134642],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54177,134645],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54177,134648],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54177,134651],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[584,134654,134656],{"id":134655},"_1222-扒图","12.2.2 扒图",[25,134658,134661],{"className":134659,"code":134660,"language":5651},[5649],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[31,134662,134660],{"__ignoreMap":22},[20,134664],{"style":126795,"src":134665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[20,134667],{"style":126795,"src":134668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[584,134670,134672],{"id":134671},"_1223-精灵图的实现","12.2.3 精灵图的实现",[20,134674],{"style":126795,"src":134675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134677,134678],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[20,134680],{"style":126795,"src":134681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[25,134683,134685],{"className":126939,"code":134684,"language":126941,"meta":22,"style":22},"\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",[31,134686,134687,134692,134699,134711,134723,134742,134759],{"__ignoreMap":22},[34,134688,134689],{"class":36,"line":37},[34,134690,134691],{"class":40},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[34,134693,134694,134697],{"class":36,"line":44},[34,134695,134696],{"class":2427},".icon",[34,134698,16036],{"class":59},[34,134700,134701,134703,134705,134707,134709],{"class":36,"line":50},[34,134702,71029],{"class":63},[34,134704,51898],{"class":59},[34,134706,1306],{"class":63},[34,134708,51953],{"class":112},[34,134710,1765],{"class":59},[34,134712,134713,134715,134717,134719,134721],{"class":36,"line":56},[34,134714,71249],{"class":63},[34,134716,51898],{"class":59},[34,134718,1306],{"class":63},[34,134720,51953],{"class":112},[34,134722,1765],{"class":59},[34,134724,134725,134727,134729,134731,134733,134736,134738,134740],{"class":36,"line":107},[34,134726,71072],{"class":63},[34,134728,51898],{"class":59},[34,134730,62187],{"class":63},[34,134732,617],{"class":59},[34,134734,134735],{"class":5680},"sprites.png",[34,134737,14178],{"class":59},[34,134739,62197],{"class":63},[34,134741,1765],{"class":59},[34,134743,134744,134746,134748,134750,134752,134755,134757],{"class":36,"line":196},[34,134745,129199],{"class":63},[34,134747,51898],{"class":59},[34,134749,52224],{"class":63},[34,134751,51953],{"class":112},[34,134753,134754],{"class":63}," -20",[34,134756,51953],{"class":112},[34,134758,1765],{"class":59},[34,134760,134761],{"class":36,"line":202},[34,134762,2036],{"class":59},[20,134764],{"style":126795,"src":134765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134767,134768],{},"在前端中坐标轴的正方向是右和下",[555,134770,134772],{"id":134771},"_123-字体图标","12.3 字体图标",[584,134774,134776],{"id":134775},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134778,134779],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134781,134782],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134784,134785],{},"1.图片文件还是比较大的。",[14,134787,134788],{},"2.图片本身放大和缩小会失真。",[14,134790,134791],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134793,134794,134795,26205],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[760,134796,134797],{},"字体图标 iconfont",[14,134799,134800,134803,134804,28850],{},[760,134801,134802],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[760,134805,134806],{},"展示的是图标，本质属于字体",[584,134808,134810],{"id":134809},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1611,134812,134813,134818,134821,134824,134827],{},[570,134814,134815,134817],{},[760,134816,26341],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[570,134819,134820],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[570,134822,134823],{},"兼容性：几乎支持所有的浏览器，请放心使用",[570,134825,134826],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[570,134828,134829],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[584,134831,134833],{"id":134832},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1611,134835,134836],{},[570,134837,134838,134839],{},"icomoon字体库：",[847,134840,134843],{"href":134841,"rel":134842},"http:\u002F\u002Ficomoon.io\u002F",[24329],"http:\u002F\u002Ficomoon.io",[14,134845,134846],{},"进去之后点icomoon app",[20,134848],{"style":126795,"src":134849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134851,134852],{},"可以对其编辑：",[20,134854],{"style":126795,"src":134855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134857,134858],{},"生成字体：",[20,134860],{"style":126795,"src":134861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134863,134864],{},"下载：",[20,134866],{"style":126795,"src":134867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1611,134869,134870],{},[570,134871,134872,134873],{},"阿里iconfont字体库： ",[847,134874,134875],{"href":134875,"rel":134876},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24329],[584,134878,134880],{"id":134879},"_1234-字体图标的引入","12.3.4 字体图标的引入",[567,134882,134883],{},[570,134884,134885,134886,134889],{},"把下载包里面的 ",[760,134887,134888],{},"fonts"," 文件夹放入页面根目录下",[20,134891],{"style":126795,"src":134892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[567,134894,134895],{"start":44},[570,134896,134897],{},"字体文件格式",[748,134899,134900,134909],{},[751,134901,134902],{},[754,134903,134904,134907],{},[757,134905,134906],{"align":24200},"格式",[757,134908,24204],{"align":24200},[795,134910,134911,134921,134931,134941],{},[754,134912,134913,134918],{},[800,134914,134915],{"align":24200},[760,134916,134917],{},".ttf",[800,134919,134920],{"align":24200},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[754,134922,134923,134928],{},[800,134924,134925],{"align":24200},[760,134926,134927],{},".woff",[800,134929,134930],{"align":24200},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[754,134932,134933,134938],{},[800,134934,134935],{"align":24200},[760,134936,134937],{},".eot",[800,134939,134940],{"align":24200},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[754,134942,134943,134948],{},[800,134944,134945],{"align":24200},[760,134946,134947],{},"svg",[800,134949,134950],{"align":24200},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[567,134952,134953],{"start":50},[570,134954,134955],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[25,134957,134959],{"className":126939,"code":134958,"language":126941,"meta":22,"style":22},"\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",[31,134960,134961,134966,134973,134985,135001,135026,135047,135067,135087,135091,135097,135107,135118],{"__ignoreMap":22},[34,134962,134963],{"class":36,"line":37},[34,134964,134965],{"class":40},"\u002F* 引入字体图标 *\u002F\n",[34,134967,134968,134971],{"class":36,"line":44},[34,134969,134970],{"class":112},"@font-face",[34,134972,16036],{"class":59},[34,134974,134975,134978,134980,134983],{"class":36,"line":50},[34,134976,134977],{"class":63},"  font-family",[34,134979,51898],{"class":59},[34,134981,134982],{"class":187},"'icomoon'",[34,134984,1765],{"class":59},[34,134986,134987,134990,134992,134994,134996,134999],{"class":36,"line":56},[34,134988,134989],{"class":63},"  src",[34,134991,51898],{"class":59},[34,134993,62187],{"class":63},[34,134995,617],{"class":59},[34,134997,134998],{"class":187},"'fonts\u002Ficomoon.eot'",[34,135000,3183],{"class":59},[34,135002,135003,135005,135007,135009,135011,135014,135016,135019,135021,135024],{"class":36,"line":107},[34,135004,134989],{"class":63},[34,135006,51898],{"class":59},[34,135008,62187],{"class":63},[34,135010,617],{"class":59},[34,135012,135013],{"class":187},"'fonts\u002Ficomoon.eot?#iefix'",[34,135015,14178],{"class":59},[34,135017,135018],{"class":63},"format",[34,135020,617],{"class":59},[34,135022,135023],{"class":187},"'embedded-opentype'",[34,135025,38509],{"class":59},[34,135027,135028,135031,135033,135036,135038,135040,135042,135045],{"class":36,"line":196},[34,135029,135030],{"class":63},"       url",[34,135032,617],{"class":59},[34,135034,135035],{"class":187},"'fonts\u002Ficomoon.woff'",[34,135037,14178],{"class":59},[34,135039,135018],{"class":63},[34,135041,617],{"class":59},[34,135043,135044],{"class":187},"'woff'",[34,135046,38509],{"class":59},[34,135048,135049,135051,135053,135056,135058,135060,135062,135065],{"class":36,"line":202},[34,135050,135030],{"class":63},[34,135052,617],{"class":59},[34,135054,135055],{"class":187},"'fonts\u002Ficomoon.ttf'",[34,135057,14178],{"class":59},[34,135059,135018],{"class":63},[34,135061,617],{"class":59},[34,135063,135064],{"class":187},"'truetype'",[34,135066,38509],{"class":59},[34,135068,135069,135071,135073,135076,135078,135080,135082,135085],{"class":36,"line":207},[34,135070,135030],{"class":63},[34,135072,617],{"class":59},[34,135074,135075],{"class":187},"'fonts\u002Ficomoon.svg#icomoon'",[34,135077,14178],{"class":59},[34,135079,135018],{"class":63},[34,135081,617],{"class":59},[34,135083,135084],{"class":187},"'svg'",[34,135086,3183],{"class":59},[34,135088,135089],{"class":36,"line":222},[34,135090,2036],{"class":59},[34,135092,135093,135095],{"class":36,"line":227},[34,135094,134696],{"class":2427},[34,135096,16036],{"class":59},[34,135098,135099,135101,135103,135105],{"class":36,"line":232},[34,135100,134977],{"class":63},[34,135102,51898],{"class":59},[34,135104,134982],{"class":187},[34,135106,1765],{"class":59},[34,135108,135109,135112,135114,135116],{"class":36,"line":238},[34,135110,135111],{"class":63},"  font-style",[34,135113,51898],{"class":59},[34,135115,64302],{"class":63},[34,135117,1765],{"class":59},[34,135119,135120],{"class":36,"line":244},[34,135121,2036],{"class":59},[14,135123,135124],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[20,135126],{"style":126795,"src":135127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[567,135129,135130],{"start":56},[570,135131,135132],{},"添加字体",[20,135134],{"style":126795,"src":135135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135137,135138],{},"复制：",[20,135140],{"style":126795,"src":135141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135143,135144],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[567,135146,135147],{"start":107},[570,135148,135149],{},"代码展示：",[25,135151,135152],{"className":126939,"code":134958,"language":126941,"meta":22,"style":22},[31,135153,135154,135158,135164,135174,135188,135210,135228,135246,135264,135268,135274,135284,135294],{"__ignoreMap":22},[34,135155,135156],{"class":36,"line":37},[34,135157,134965],{"class":40},[34,135159,135160,135162],{"class":36,"line":44},[34,135161,134970],{"class":112},[34,135163,16036],{"class":59},[34,135165,135166,135168,135170,135172],{"class":36,"line":50},[34,135167,134977],{"class":63},[34,135169,51898],{"class":59},[34,135171,134982],{"class":187},[34,135173,1765],{"class":59},[34,135175,135176,135178,135180,135182,135184,135186],{"class":36,"line":56},[34,135177,134989],{"class":63},[34,135179,51898],{"class":59},[34,135181,62187],{"class":63},[34,135183,617],{"class":59},[34,135185,134998],{"class":187},[34,135187,3183],{"class":59},[34,135189,135190,135192,135194,135196,135198,135200,135202,135204,135206,135208],{"class":36,"line":107},[34,135191,134989],{"class":63},[34,135193,51898],{"class":59},[34,135195,62187],{"class":63},[34,135197,617],{"class":59},[34,135199,135013],{"class":187},[34,135201,14178],{"class":59},[34,135203,135018],{"class":63},[34,135205,617],{"class":59},[34,135207,135023],{"class":187},[34,135209,38509],{"class":59},[34,135211,135212,135214,135216,135218,135220,135222,135224,135226],{"class":36,"line":196},[34,135213,135030],{"class":63},[34,135215,617],{"class":59},[34,135217,135035],{"class":187},[34,135219,14178],{"class":59},[34,135221,135018],{"class":63},[34,135223,617],{"class":59},[34,135225,135044],{"class":187},[34,135227,38509],{"class":59},[34,135229,135230,135232,135234,135236,135238,135240,135242,135244],{"class":36,"line":202},[34,135231,135030],{"class":63},[34,135233,617],{"class":59},[34,135235,135055],{"class":187},[34,135237,14178],{"class":59},[34,135239,135018],{"class":63},[34,135241,617],{"class":59},[34,135243,135064],{"class":187},[34,135245,38509],{"class":59},[34,135247,135248,135250,135252,135254,135256,135258,135260,135262],{"class":36,"line":207},[34,135249,135030],{"class":63},[34,135251,617],{"class":59},[34,135253,135075],{"class":187},[34,135255,14178],{"class":59},[34,135257,135018],{"class":63},[34,135259,617],{"class":59},[34,135261,135084],{"class":187},[34,135263,3183],{"class":59},[34,135265,135266],{"class":36,"line":222},[34,135267,2036],{"class":59},[34,135269,135270,135272],{"class":36,"line":227},[34,135271,134696],{"class":2427},[34,135273,16036],{"class":59},[34,135275,135276,135278,135280,135282],{"class":36,"line":232},[34,135277,134977],{"class":63},[34,135279,51898],{"class":59},[34,135281,134982],{"class":187},[34,135283,1765],{"class":59},[34,135285,135286,135288,135290,135292],{"class":36,"line":238},[34,135287,135111],{"class":63},[34,135289,51898],{"class":59},[34,135291,64302],{"class":63},[34,135293,1765],{"class":59},[34,135295,135296],{"class":36,"line":244},[34,135297,2036],{"class":59},[20,135299],{"style":126795,"src":135300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135302,135303],{},"更加细节展示：",[567,135305,135306],{},[570,135307,135308],{},"html 标签内添加小图标",[20,135310],{"style":126795,"src":135311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[567,135313,135314],{"start":44},[570,135315,135316],{},"给标签定义字体",[25,135318,135319],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,135320,135321,135325,135339,135343],{"__ignoreMap":22},[34,135322,135323],{"class":36,"line":37},[34,135324,131050],{"class":40},[34,135326,135327,135329,135331,135333,135335,135337],{"class":36,"line":44},[34,135328,1515],{"class":59},[34,135330,52072],{"class":51761},[34,135332,53947],{"class":2427},[34,135334,447],{"class":59},[34,135336,131063],{"class":187},[34,135338,51768],{"class":59},[34,135340,135341],{"class":36,"line":50},[34,135342,131070],{"class":59},[34,135344,135345,135347,135349],{"class":36,"line":56},[34,135346,52246],{"class":59},[34,135348,52072],{"class":51761},[34,135350,51768],{"class":59},[14,135352,135353],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[20,135355],{"style":126795,"src":135356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[584,135358,135360],{"id":135359},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135362,135363],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135365,135366,135367,135370],{},"把压缩包里面的 ",[760,135368,135369],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135372,135373],{},"打开网站，点下方：",[20,135375],{"style":126795,"src":135376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[20,135378],{"style":126795,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[20,135381],{"style":126795,"src":135382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135384,135385],{},"点yes重新加载",[14,135387,135388],{},"然后重复之前的操作就可以实现了",[14,135390,135391],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[584,135393,135395],{"id":135394},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[20,135397],{"style":126795,"src":135398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[532,135400,135401],{},"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":22,"searchDepth":44,"depth":44,"links":135403},[135404,135410,135415],{"id":134007,"depth":44,"text":134008,"children":135405},[135406,135407,135408,135409],{"id":134019,"depth":50,"text":134020},{"id":134048,"depth":50,"text":134049},{"id":134076,"depth":50,"text":134077},{"id":134134,"depth":50,"text":134135},{"id":134606,"depth":44,"text":134607,"children":135411},[135412,135413,135414],{"id":134610,"depth":50,"text":134611},{"id":134655,"depth":50,"text":134656},{"id":134671,"depth":50,"text":134672},{"id":134771,"depth":44,"text":134772,"children":135416},[135417,135418,135419,135420,135421,135422],{"id":134775,"depth":50,"text":134776},{"id":134809,"depth":50,"text":134810},{"id":134832,"depth":50,"text":134833},{"id":134879,"depth":50,"text":134880},{"id":135359,"depth":50,"text":135360},{"id":135394,"depth":50,"text":135395},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133999,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135429,"title":135430,"body":135431,"description":537,"extension":538,"meta":136658,"navigation":540,"path":136659,"seo":136660,"stem":136661,"__hash__":136662},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135432,"toc":136639},[135433,135436,135440,135443,135457,135525,135555,135558,135562,135566,135668,135715,135719,135722,135725,135759,135762,135765,135768,135771,135774,135777,135780,135782,135785,135788,135791,135794,135797,135800,135803,135831,135834,135838,135841,135848,135851,135854,135880,135883,135887,135890,135893,135900,135904,135907,135909,135941,135944,135947,135959,135965,135968,135971,135974,135976,135980,135983,135986,135989,136034,136038,136040,136043,136050,136092,136095,136099,136104,136118,136122,136125,136128,136131,136134,136137,136171,136174,136177,136231,136234,136237,136240,136243,136295,136298,136301,136350,136354,136356,136359,136362,136365,136368,136371,136429,136432,136438,136441,136444,136476,136479,136483,136487,136490,136522,136526,136529,136573,136577,136580,136583,136586,136589,136592,136595,136598,136600,136603,136605,136608,136611,136614,136617,136622,136625,136627,136630,136633,136636],[10,135434,135430],{"id":135435},"_13-界面样式与布局技巧",[555,135437,135439],{"id":135438},"_131-css三角","13.1 css三角",[14,135441,135442],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1611,135444,135445,135448,135451,135454],{},[570,135446,135447],{},"用css 边框可以模拟三角效果",[570,135449,135450],{},"宽度高度为0",[570,135452,135453],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[570,135455,135456],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[25,135458,135460],{"className":126939,"code":135459,"language":126941,"meta":22,"style":22},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[31,135461,135462,135467,135474,135484,135494,135510,135521],{"__ignoreMap":22},[34,135463,135464],{"class":36,"line":37},[34,135465,135466],{"class":40},"\u002F* CSS 实现三角形 *\u002F\n",[34,135468,135469,135472],{"class":36,"line":44},[34,135470,135471],{"class":2427},".triangle",[34,135473,16036],{"class":59},[34,135475,135476,135478,135480,135482],{"class":36,"line":50},[34,135477,71029],{"class":63},[34,135479,51898],{"class":59},[34,135481,319],{"class":63},[34,135483,1765],{"class":59},[34,135485,135486,135488,135490,135492],{"class":36,"line":56},[34,135487,71249],{"class":63},[34,135489,51898],{"class":59},[34,135491,319],{"class":63},[34,135493,1765],{"class":59},[34,135495,135496,135498,135500,135502,135504,135506,135508],{"class":36,"line":107},[34,135497,71357],{"class":63},[34,135499,51898],{"class":59},[34,135501,1053],{"class":63},[34,135503,51953],{"class":112},[34,135505,51982],{"class":63},[34,135507,64452],{"class":63},[34,135509,1765],{"class":59},[34,135511,135512,135515,135517,135519],{"class":36,"line":196},[34,135513,135514],{"class":63},"  border-bottom-color",[34,135516,51898],{"class":59},[34,135518,62830],{"class":63},[34,135520,1765],{"class":59},[34,135522,135523],{"class":36,"line":202},[34,135524,2036],{"class":59},[25,135526,135527],{"className":126939,"code":131096,"language":126941,"meta":22,"style":22},[31,135528,135529,135535,135551],{"__ignoreMap":22},[34,135530,135531,135533],{"class":36,"line":37},[34,135532,52072],{"class":51761},[34,135534,16036],{"class":59},[34,135536,135537,135539,135541,135543,135545,135547,135549],{"class":36,"line":44},[34,135538,71357],{"class":63},[34,135540,51898],{"class":59},[34,135542,64],{"class":63},[34,135544,51953],{"class":112},[34,135546,51982],{"class":63},[34,135548,130331],{"class":63},[34,135550,1765],{"class":59},[34,135552,135553],{"class":36,"line":50},[34,135554,2036],{"class":59},[20,135556],{"style":126795,"src":135557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[555,135559,135561],{"id":135560},"_132-css用户界面样式","13.2 css用户界面样式",[584,135563,135565],{"id":135564},"_1321-鼠标样式","13.2.1 鼠标样式",[25,135567,135569],{"className":126939,"code":135568,"language":126941,"meta":22,"style":22},"\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",[31,135570,135571,135576,135595,135613,135632,135649],{"__ignoreMap":22},[34,135572,135573],{"class":36,"line":37},[34,135574,135575],{"class":40},"\u002F* 鼠标样式 *\u002F\n",[34,135577,135578,135580,135582,135585,135587,135589,135592],{"class":36,"line":44},[34,135579,52072],{"class":51761},[34,135581,80268],{"class":59},[34,135583,135584],{"class":63},"cursor",[34,135586,51898],{"class":59},[34,135588,62491],{"class":63},[34,135590,135591],{"class":59},"; }   ",[34,135593,135594],{"class":40},"\u002F* 手型 *\u002F\n",[34,135596,135597,135599,135601,135603,135605,135608,135610],{"class":36,"line":50},[34,135598,52072],{"class":51761},[34,135600,80268],{"class":59},[34,135602,135584],{"class":63},[34,135604,51898],{"class":59},[34,135606,135607],{"class":63},"default",[34,135609,135591],{"class":59},[34,135611,135612],{"class":40},"\u002F* 默认 *\u002F\n",[34,135614,135615,135617,135619,135621,135623,135626,135629],{"class":36,"line":56},[34,135616,52072],{"class":51761},[34,135618,80268],{"class":59},[34,135620,135584],{"class":63},[34,135622,51898],{"class":59},[34,135624,135625],{"class":63},"move",[34,135627,135628],{"class":59},"; }      ",[34,135630,135631],{"class":40},"\u002F* 移动 *\u002F\n",[34,135633,135634,135636,135638,135640,135642,135644,135646],{"class":36,"line":107},[34,135635,52072],{"class":51761},[34,135637,80268],{"class":59},[34,135639,135584],{"class":63},[34,135641,51898],{"class":59},[34,135643,5651],{"class":63},[34,135645,135628],{"class":59},[34,135647,135648],{"class":40},"\u002F* 文本 *\u002F\n",[34,135650,135651,135653,135655,135657,135659,135662,135665],{"class":36,"line":196},[34,135652,52072],{"class":51761},[34,135654,80268],{"class":59},[34,135656,135584],{"class":63},[34,135658,51898],{"class":59},[34,135660,135661],{"class":63},"not-allowed",[34,135663,135664],{"class":59},"; } ",[34,135666,135667],{"class":40},"\u002F* 禁止 *\u002F\n",[748,135669,135670,135678],{},[751,135671,135672],{},[754,135673,135674,135676],{},[757,135675,127403],{"align":24200},[757,135677,27954],{"align":24200},[795,135679,135680,135687,135694,135701,135708],{},[754,135681,135682,135684],{},[800,135683,135607],{"align":24200},[800,135685,135686],{"align":24200},"小白 默认",[754,135688,135689,135691],{},[800,135690,62491],{"align":24200},[800,135692,135693],{"align":24200},"小手",[754,135695,135696,135698],{},[800,135697,135625],{"align":24200},[800,135699,135700],{"align":24200},"移动",[754,135702,135703,135705],{},[800,135704,5651],{"align":24200},[800,135706,135707],{"align":24200},"文本",[754,135709,135710,135712],{},[800,135711,135661],{"align":24200},[800,135713,135714],{"align":24200},"禁止",[584,135716,135718],{"id":135717},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135720,135721],{},"去除表单轮廓线",[14,135723,135724],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[25,135726,135727],{"className":126939,"code":130303,"language":126941,"meta":22,"style":22},[31,135728,135729,135733,135739,135755],{"__ignoreMap":22},[34,135730,135731],{"class":36,"line":37},[34,135732,130310],{"class":40},[34,135734,135735,135737],{"class":36,"line":44},[34,135736,52072],{"class":51761},[34,135738,16036],{"class":59},[34,135740,135741,135743,135745,135747,135749,135751,135753],{"class":36,"line":50},[34,135742,71357],{"class":63},[34,135744,51898],{"class":59},[34,135746,64],{"class":63},[34,135748,51953],{"class":112},[34,135750,51982],{"class":63},[34,135752,130331],{"class":63},[34,135754,1765],{"class":59},[34,135756,135757],{"class":36,"line":56},[34,135758,2036],{"class":59},[14,135760,135761],{},"文本域：",[20,135763],{"style":126795,"src":135764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135766,135767],{},"此时会有一个空白区域",[20,135769],{"style":126795,"src":135770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135772,135773],{},"写在同一行就不会出现这个问题",[20,135775],{"style":126795,"src":135776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135778,135779],{},"文本域是行内块元素，一定记住！！！",[14,135781,98620],{},[20,135783],{"style":126795,"src":135784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135786,135787],{},"文本域尽量放在一行",[14,135789,135790],{},"知识回顾：cols是列，rols是行",[20,135792],{"style":126795,"src":135793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135795,135796],{},"它可以进行拖动，显然这是我们不愿意看到的",[20,135798],{"style":126795,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135801,135802],{},"使用resize进行解决",[25,135804,135806],{"className":126939,"code":135805,"language":126941,"meta":22,"style":22},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[31,135807,135808,135814,135827],{"__ignoreMap":22},[34,135809,135810,135812],{"class":36,"line":37},[34,135811,54282],{"class":51761},[34,135813,16036],{"class":59},[34,135815,135816,135818,135820,135822,135824],{"class":36,"line":44},[34,135817,71259],{"class":63},[34,135819,51898],{"class":59},[34,135821,55198],{"class":63},[34,135823,130802],{"class":59},[34,135825,135826],{"class":40},"\u002F* 取消表单轮廓线 *\u002F\n",[34,135828,135829],{"class":36,"line":50},[34,135830,2036],{"class":59},[14,135832,135833],{},"此时就无法通过右下方实现拖动了",[584,135835,135837],{"id":135836},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135839,135840],{},"实现一个盒子中的文字和图片对齐",[14,135842,135843,135844,135847],{},"用于设置一个元素的 ",[760,135845,135846],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135849,135850],{},"图片和文字默认是基线对齐",[20,135852],{"style":126795,"src":135853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[25,135855,135856],{"className":126939,"code":135805,"language":126941,"meta":22,"style":22},[31,135857,135858,135864,135876],{"__ignoreMap":22},[34,135859,135860,135862],{"class":36,"line":37},[34,135861,54282],{"class":51761},[34,135863,16036],{"class":59},[34,135865,135866,135868,135870,135872,135874],{"class":36,"line":44},[34,135867,71259],{"class":63},[34,135869,51898],{"class":59},[34,135871,55198],{"class":63},[34,135873,130802],{"class":59},[34,135875,135826],{"class":40},[34,135877,135878],{"class":36,"line":50},[34,135879,2036],{"class":59},[20,135881],{"style":126795,"src":135882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22462,135884,135886],{"id":135885},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135888,135889],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[20,135891],{"style":126795,"src":135892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135894,135895,135896,135899],{},"此时可以给图片、表单这些行内块元素的 ",[760,135897,135898],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22462,135901,135903],{"id":135902},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135905,135906],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135908,15097],{},[25,135910,135912],{"className":126939,"code":135911,"language":126941,"meta":22,"style":22},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[31,135913,135914,135919,135925,135937],{"__ignoreMap":22},[34,135915,135916],{"class":36,"line":37},[34,135917,135918],{"class":40},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[34,135920,135921,135923],{"class":36,"line":44},[34,135922,20],{"class":51761},[34,135924,16036],{"class":59},[34,135926,135927,135930,135932,135935],{"class":36,"line":50},[34,135928,135929],{"class":63},"  vertical-align",[34,135931,51898],{"class":59},[34,135933,135934],{"class":63},"middle",[34,135936,1765],{"class":59},[34,135938,135939],{"class":36,"line":56},[34,135940,2036],{"class":59},[20,135942],{"style":126795,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135945,135946],{},"主要解决方法有两种：",[567,135948,135949],{},[570,135950,135951,135954,135955,135958],{},[760,135952,135953],{},"给图片"," 添加 ",[760,135956,135957],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135960,135961,135962],{},"2.把图片转换为块级元素 ",[760,135963,135964],{},"display: block",[14,135966,135967],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135969,135970],{},"img {",[14,135972,135973],{},"vertical-align:middle;",[14,135975,1550],{},[584,135977,135979],{"id":135978},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135981,135982],{},"效果：",[20,135984],{"style":126795,"src":135985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135987,135988],{},"单行文本溢出显示省略号--必须满足三个条件：",[25,135990,135992],{"className":126939,"code":135991,"language":126941,"meta":22,"style":22},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[31,135993,135994,135999,136005,136015,136020,136030],{"__ignoreMap":22},[34,135995,135996],{"class":36,"line":37},[34,135997,135998],{"class":40},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[34,136000,136001,136003],{"class":36,"line":44},[34,136002,20],{"class":51761},[34,136004,16036],{"class":59},[34,136006,136007,136009,136011,136013],{"class":36,"line":50},[34,136008,135929],{"class":63},[34,136010,51898],{"class":59},[34,136012,135934],{"class":63},[34,136014,1765],{"class":59},[34,136016,136017],{"class":36,"line":56},[34,136018,136019],{"class":40},"  \u002F* 或 *\u002F\n",[34,136021,136022,136024,136026,136028],{"class":36,"line":107},[34,136023,128555],{"class":63},[34,136025,51898],{"class":59},[34,136027,61330],{"class":63},[34,136029,1765],{"class":59},[34,136031,136032],{"class":36,"line":196},[34,136033,2036],{"class":59},[584,136035,136037],{"id":136036},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136039,135982],{},[20,136041],{"style":126795,"src":136042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136044,136045,136046,136049],{},"多行文本溢出显示省略号， ",[760,136047,136048],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[25,136051,136052],{"className":126939,"code":135991,"language":126941,"meta":22,"style":22},[31,136053,136054,136058,136064,136074,136078,136088],{"__ignoreMap":22},[34,136055,136056],{"class":36,"line":37},[34,136057,135998],{"class":40},[34,136059,136060,136062],{"class":36,"line":44},[34,136061,20],{"class":51761},[34,136063,16036],{"class":59},[34,136065,136066,136068,136070,136072],{"class":36,"line":50},[34,136067,135929],{"class":63},[34,136069,51898],{"class":59},[34,136071,135934],{"class":63},[34,136073,1765],{"class":59},[34,136075,136076],{"class":36,"line":56},[34,136077,136019],{"class":40},[34,136079,136080,136082,136084,136086],{"class":36,"line":107},[34,136081,128555],{"class":63},[34,136083,51898],{"class":59},[34,136085,61330],{"class":63},[34,136087,1765],{"class":59},[34,136089,136090],{"class":36,"line":196},[34,136091,2036],{"class":59},[14,136093,136094],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[555,136096,136098],{"id":136097},"_133-常见布局技巧","13.3 常见布局技巧",[14,136100,136101],{},[760,136102,136103],{},"巧妙利用一个技术更快更好的布局：",[567,136105,136106,136109,136112,136115],{},[570,136107,136108],{},"margin负值的运用",[570,136110,136111],{},"文字围绕浮动元素",[570,136113,136114],{},"行内块的巧妙运用",[570,136116,136117],{},"CSS三角强化",[584,136119,136121],{"id":136120},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136123,136124],{},"应用场景：",[20,136126],{"style":126795,"src":136127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[20,136129],{"style":126795,"src":136130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136132,136133],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136135,136136],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[25,136138,136139],{"className":126939,"code":130303,"language":126941,"meta":22,"style":22},[31,136140,136141,136145,136151,136167],{"__ignoreMap":22},[34,136142,136143],{"class":36,"line":37},[34,136144,130310],{"class":40},[34,136146,136147,136149],{"class":36,"line":44},[34,136148,52072],{"class":51761},[34,136150,16036],{"class":59},[34,136152,136153,136155,136157,136159,136161,136163,136165],{"class":36,"line":50},[34,136154,71357],{"class":63},[34,136156,51898],{"class":59},[34,136158,64],{"class":63},[34,136160,51953],{"class":112},[34,136162,51982],{"class":63},[34,136164,130331],{"class":63},[34,136166,1765],{"class":59},[34,136168,136169],{"class":36,"line":56},[34,136170,2036],{"class":59},[20,136172],{"style":126795,"src":136173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136175,136176],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[25,136178,136180],{"className":126939,"code":136179,"language":126941,"meta":22,"style":22},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[31,136181,136182,136187,136193,136203,136215,136227],{"__ignoreMap":22},[34,136183,136184],{"class":36,"line":37},[34,136185,136186],{"class":40},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[34,136188,136189,136191],{"class":36,"line":44},[34,136190,130787],{"class":2427},[34,136192,16036],{"class":59},[34,136194,136195,136197,136199,136201],{"class":36,"line":50},[34,136196,132745],{"class":63},[34,136198,51898],{"class":59},[34,136200,55225],{"class":63},[34,136202,1765],{"class":59},[34,136204,136205,136207,136209,136211,136213],{"class":36,"line":56},[34,136206,132759],{"class":63},[34,136208,51898],{"class":59},[34,136210,1053],{"class":63},[34,136212,51953],{"class":112},[34,136214,1765],{"class":59},[34,136216,136217,136219,136221,136223,136225],{"class":36,"line":107},[34,136218,132776],{"class":63},[34,136220,51898],{"class":59},[34,136222,1306],{"class":63},[34,136224,51953],{"class":112},[34,136226,1765],{"class":59},[34,136228,136229],{"class":36,"line":196},[34,136230,2036],{"class":59},[14,136232,136233],{},"加上上述代码会发现：",[20,136235],{"style":126795,"src":136236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136238,136239],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136241,136242],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[25,136244,136245],{"className":126939,"code":136179,"language":126941,"meta":22,"style":22},[31,136246,136247,136251,136257,136267,136279,136291],{"__ignoreMap":22},[34,136248,136249],{"class":36,"line":37},[34,136250,136186],{"class":40},[34,136252,136253,136255],{"class":36,"line":44},[34,136254,130787],{"class":2427},[34,136256,16036],{"class":59},[34,136258,136259,136261,136263,136265],{"class":36,"line":50},[34,136260,132745],{"class":63},[34,136262,51898],{"class":59},[34,136264,55225],{"class":63},[34,136266,1765],{"class":59},[34,136268,136269,136271,136273,136275,136277],{"class":36,"line":56},[34,136270,132759],{"class":63},[34,136272,51898],{"class":59},[34,136274,1053],{"class":63},[34,136276,51953],{"class":112},[34,136278,1765],{"class":59},[34,136280,136281,136283,136285,136287,136289],{"class":36,"line":107},[34,136282,132776],{"class":63},[34,136284,51898],{"class":59},[34,136286,1306],{"class":63},[34,136288,51953],{"class":112},[34,136290,1765],{"class":59},[34,136292,136293],{"class":36,"line":196},[34,136294,2036],{"class":59},[14,136296,136297],{},"解决方式2：",[14,136299,136300],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[25,136302,136304],{"className":126939,"code":136303,"language":126941,"meta":22,"style":22},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[31,136305,136306,136312,136322,136334,136346],{"__ignoreMap":22},[34,136307,136308,136310],{"class":36,"line":37},[34,136309,52072],{"class":51761},[34,136311,16036],{"class":59},[34,136313,136314,136316,136318,136320],{"class":36,"line":44},[34,136315,132745],{"class":63},[34,136317,51898],{"class":59},[34,136319,55225],{"class":63},[34,136321,1765],{"class":59},[34,136323,136324,136326,136328,136330,136332],{"class":36,"line":50},[34,136325,132759],{"class":63},[34,136327,51898],{"class":59},[34,136329,1053],{"class":63},[34,136331,51953],{"class":112},[34,136333,1765],{"class":59},[34,136335,136336,136338,136340,136342,136344],{"class":36,"line":56},[34,136337,132776],{"class":63},[34,136339,51898],{"class":59},[34,136341,1306],{"class":63},[34,136343,51953],{"class":112},[34,136345,1765],{"class":59},[34,136347,136348],{"class":36,"line":107},[34,136349,2036],{"class":59},[584,136351,136353],{"id":136352},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136355,136124],{},[20,136357],{"style":126795,"src":136358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136360,136361],{},"实现结构图：",[20,136363],{"style":126795,"src":136364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136366,136367],{},"巧妙运用浮动元素不会压住文字的特性",[14,136369,136370],{},"代码显示：",[25,136372,136374],{"className":126939,"code":136373,"language":126941,"meta":22,"style":22},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,136375,136376,136382,136392,136396,136401,136405,136411,136425],{"__ignoreMap":22},[34,136377,136378,136380],{"class":36,"line":37},[34,136379,130787],{"class":2427},[34,136381,16036],{"class":59},[34,136383,136384,136386,136388,136390],{"class":36,"line":44},[34,136385,131419],{"class":63},[34,136387,51898],{"class":59},[34,136389,24200],{"class":63},[34,136391,1765],{"class":59},[34,136393,136394],{"class":36,"line":50},[34,136395,2036],{"class":59},[34,136397,136398],{"class":36,"line":56},[34,136399,136400],{"class":59},"```Css\n",[34,136402,136403],{"class":36,"line":107},[34,136404,130782],{"class":40},[34,136406,136407,136409],{"class":36,"line":196},[34,136408,130787],{"class":2427},[34,136410,16036],{"class":59},[34,136412,136413,136415,136417,136419,136421,136423],{"class":36,"line":202},[34,136414,70931],{"class":63},[34,136416,51898],{"class":59},[34,136418,319],{"class":63},[34,136420,52017],{"class":63},[34,136422,130802],{"class":59},[34,136424,130805],{"class":40},[34,136426,136427],{"class":36,"line":207},[34,136428,2036],{"class":59},[14,136430,136431],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[25,136433,136436],{"className":136434,"code":136435,"language":5651},[5649],"\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",[31,136437,136435],{"__ignoreMap":22},[20,136439],{"style":126795,"src":136440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136442,136443],{},"最终展示结果：",[25,136445,136446],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},[31,136447,136448,136452,136458,136472],{"__ignoreMap":22},[34,136449,136450],{"class":36,"line":37},[34,136451,130782],{"class":40},[34,136453,136454,136456],{"class":36,"line":44},[34,136455,130787],{"class":2427},[34,136457,16036],{"class":59},[34,136459,136460,136462,136464,136466,136468,136470],{"class":36,"line":50},[34,136461,70931],{"class":63},[34,136463,51898],{"class":59},[34,136465,319],{"class":63},[34,136467,52017],{"class":63},[34,136469,130802],{"class":59},[34,136471,130805],{"class":40},[34,136473,136474],{"class":36,"line":56},[34,136475,2036],{"class":59},[20,136477],{"style":126795,"src":136478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[555,136480,136482],{"id":136481},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[584,136484,136486],{"id":136485},"_1341-原理","13.4.1 原理",[20,136488],{"style":126795,"src":136489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[25,136491,136492],{"className":126939,"code":130775,"language":126941,"meta":22,"style":22},[31,136493,136494,136498,136504,136518],{"__ignoreMap":22},[34,136495,136496],{"class":36,"line":37},[34,136497,130782],{"class":40},[34,136499,136500,136502],{"class":36,"line":44},[34,136501,130787],{"class":2427},[34,136503,16036],{"class":59},[34,136505,136506,136508,136510,136512,136514,136516],{"class":36,"line":50},[34,136507,70931],{"class":63},[34,136509,51898],{"class":59},[34,136511,319],{"class":63},[34,136513,52017],{"class":63},[34,136515,130802],{"class":59},[34,136517,130805],{"class":40},[34,136519,136520],{"class":36,"line":56},[34,136521,2036],{"class":59},[584,136523,136525],{"id":136524},"_1342-实例","13.4.2 实例",[20,136527],{"style":126795,"src":136528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[25,136530,136531],{"className":126939,"code":131405,"language":126941,"meta":22,"style":22},[31,136532,136533,136539,136549,136553,136559,136569],{"__ignoreMap":22},[34,136534,136535,136537],{"class":36,"line":37},[34,136536,131412],{"class":2427},[34,136538,16036],{"class":59},[34,136540,136541,136543,136545,136547],{"class":36,"line":44},[34,136542,131419],{"class":63},[34,136544,51898],{"class":59},[34,136546,24200],{"class":63},[34,136548,1765],{"class":59},[34,136550,136551],{"class":36,"line":50},[34,136552,2036],{"class":59},[34,136554,136555,136557],{"class":36,"line":56},[34,136556,131434],{"class":2427},[34,136558,16036],{"class":59},[34,136560,136561,136563,136565,136567],{"class":36,"line":107},[34,136562,131419],{"class":63},[34,136564,51898],{"class":59},[34,136566,72983],{"class":63},[34,136568,1765],{"class":59},[34,136570,136571],{"class":36,"line":196},[34,136572,2036],{"class":59},[555,136574,136576],{"id":136575},"_135-css的初始化","13.5 css的初始化",[14,136578,136579],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136581,136582],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136584,136585],{},"每个网页都必须首先进行 CSS初始化。",[14,136587,136588],{},"这里我们以 京东CSS初始化代码为例。",[14,136590,136591],{},"在网页右键查看网页源代码",[14,136593,136594],{},"找到css的link引入语句",[14,136596,136597],{},"然后ctrl+f 输入body",[14,136599,77687],{},[20,136601],{"style":126795,"src":136602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136604,77710],{},[20,136606],{"style":126795,"src":136607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136609,136610],{},"③打开了网页上传压缩的代码",[20,136612],{"style":126795,"src":136613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136615,136616],{},"④从body前可以查看这个网页的初始化代码",[14,136618,136619],{},[760,136620,136621],{},"Unicode编码字体：",[14,136623,136624],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136626,83668],{},[14,136628,136629],{},"黑体 \\9ED1\\4F53",[14,136631,136632],{},"宋体 \\5B8B\\4F53",[14,136634,136635],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[532,136637,136638],{},"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":22,"searchDepth":44,"depth":44,"links":136640},[136641,136642,136649,136653,136657],{"id":135438,"depth":44,"text":135439},{"id":135560,"depth":44,"text":135561,"children":136643},[136644,136645,136646,136647,136648],{"id":135564,"depth":50,"text":135565},{"id":135717,"depth":50,"text":135718},{"id":135836,"depth":50,"text":135837},{"id":135978,"depth":50,"text":135979},{"id":136036,"depth":50,"text":136037},{"id":136097,"depth":44,"text":136098,"children":136650},[136651,136652],{"id":136120,"depth":50,"text":136121},{"id":136352,"depth":50,"text":136353},{"id":136481,"depth":44,"text":136482,"children":136654},[136655,136656],{"id":136485,"depth":50,"text":136486},{"id":136524,"depth":50,"text":136525},{"id":136575,"depth":44,"text":136576},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135430,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136664,"title":136665,"body":136666,"description":537,"extension":538,"meta":138352,"navigation":540,"path":138353,"seo":138354,"stem":138355,"__hash__":138356},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136667,"toc":138341},[136668,136671,136675,136679,136682,136689,136692,136695,136733,136736,136738,136752,136756,136765,136769,136774,136777,136780,136783,136818,136823,136826,136856,136859,136864,136867,136870,136900,136903,136957,136960,136964,136969,136981,136984,136988,137018,137021,137026,137029,137059,137062,137066,137083,137087,137091,137094,137127,137130,137134,137137,137140,137143,137146,137149,137260,137263,137266,137269,137371,137374,137378,137382,137386,137389,137429,137432,137434,137450,137454,137457,137462,137543,137546,137549,137675,137680,137683,137691,137694,137699,137784,137787,137791,137794,137797,137801,137821,137826,137910,137913,137918,137921,137924,138002,138005,138008,138011,138014,138017,138022,138025,138028,138100,138103,138108,138111,138208,138211,138217,138220,138223,138226,138229,138232,138235,138238,138241,138245,138250,138253,138286,138291,138294,138335,138338],[10,136669,136665],{"id":136670},"_14-html5与css3新特性",[555,136672,136674],{"id":136673},"_141-html5的新特性","14.1 HTML5的新特性",[584,136676,136678],{"id":136677},"_1411-基本标签","14.1.1 基本标签",[14,136680,136681],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136683,136684,136685,136688],{},"这些新特性都有兼容性问题，基本是 ",[760,136686,136687],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136690,136691],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136693,136694],{},"现在使用的是新特性：",[1611,136696,136697,136703,136709,136715,136721,136727],{},[570,136698,136699,136702],{},[31,136700,136701],{},"\u003Cheader>"," 头部标签",[570,136704,136705,136708],{},[31,136706,136707],{},"\u003Cnav>"," 导航标签",[570,136710,136711,136714],{},[31,136712,136713],{},"\u003Carticle>"," 内容标签",[570,136716,136717,136720],{},[31,136718,136719],{},"\u003Csection>"," 定义文档某个区域",[570,136722,136723,136726],{},[31,136724,136725],{},"\u003Caside>"," 侧边栏标签",[570,136728,136729,136732],{},[31,136730,136731],{},"\u003Cfooter>"," 尾部标签",[20,136734],{"style":126795,"src":136735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136737,646],{},[1611,136739,136740,136743,136746,136749],{},[570,136741,136742],{},"这种语义化标准主要是针对搜索引擎的",[570,136744,136745],{},"这些标签页面中可以经常使用",[570,136747,136748],{},"在IE9中，需要把这些元素转换为块级元素",[570,136750,136751],{},"移动端更喜欢使用这些标签",[584,136753,136755],{"id":136754},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136757,136758,136759,136761,136762,136764],{},"音频 ",[760,136760,28639],{}," 和视频 ",[760,136763,28648],{}," 两个标签",[22462,136766,136768],{"id":136767},"_14121-视频标签-video","14.1.2.1 视频标签- video",[567,136770,136771],{},[570,136772,136773],{},"支持格式：",[20,136775],{"style":126795,"src":136776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136778,136779],{},"尽量使用MP4，兼容性好",[14,136781,136782],{},"用MP4就可以",[25,136784,136786],{"className":127686,"code":136785,"language":127688,"meta":22,"style":22},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[31,136787,136788],{"__ignoreMap":22},[34,136789,136790,136792,136794,136796,136798,136801,136803,136806,136809,136812,136814,136816],{"class":36,"line":37},[34,136791,1515],{"class":59},[34,136793,28648],{"class":51761},[34,136795,55700],{"class":2427},[34,136797,447],{"class":59},[34,136799,136800],{"class":187},"\"movie.mp4\"",[34,136802,92884],{"class":2427},[34,136804,136805],{"class":2427}," autoplay",[34,136807,136808],{"class":2427}," muted",[34,136810,136811],{"class":2427}," loop",[34,136813,55775],{"class":59},[34,136815,28648],{"class":51761},[34,136817,51768],{"class":59},[567,136819,136820],{"start":44},[570,136821,136822],{},"兼容写法",[14,136824,136825],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[25,136827,136828],{"className":127686,"code":136785,"language":127688,"meta":22,"style":22},[31,136829,136830],{"__ignoreMap":22},[34,136831,136832,136834,136836,136838,136840,136842,136844,136846,136848,136850,136852,136854],{"class":36,"line":37},[34,136833,1515],{"class":59},[34,136835,28648],{"class":51761},[34,136837,55700],{"class":2427},[34,136839,447],{"class":59},[34,136841,136800],{"class":187},[34,136843,92884],{"class":2427},[34,136845,136805],{"class":2427},[34,136847,136808],{"class":2427},[34,136849,136811],{"class":2427},[34,136851,55775],{"class":59},[34,136853,28648],{"class":51761},[34,136855,51768],{"class":59},[14,136857,136858],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[567,136860,136861],{"start":50},[570,136862,136863],{},"video常用属性",[20,136865],{"style":126795,"src":136866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136868,136869],{},"poster属性后面是跟的等待加载图片的地址",[25,136871,136872],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,136873,136874],{"__ignoreMap":22},[34,136875,136876,136878,136880,136882,136884,136886,136888,136890,136892,136894,136896,136898],{"class":36,"line":37},[34,136877,1515],{"class":59},[34,136879,20],{"class":51761},[34,136881,55700],{"class":2427},[34,136883,447],{"class":59},[34,136885,134456],{"class":187},[34,136887,55708],{"class":2427},[34,136889,447],{"class":59},[34,136891,134463],{"class":187},[34,136893,134466],{"class":2427},[34,136895,447],{"class":59},[34,136897,134471],{"class":187},[34,136899,51768],{"class":59},[14,136901,136902],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[25,136904,136906],{"className":126939,"code":136905,"language":126941,"meta":22,"style":22},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[31,136907,136908,136913,136919,136943,136948,136953],{"__ignoreMap":22},[34,136909,136910],{"class":36,"line":37},[34,136911,136912],{"class":40},"\u002F* 2D 位移 *\u002F\n",[34,136914,136915,136917],{"class":36,"line":44},[34,136916,52072],{"class":51761},[34,136918,16036],{"class":59},[34,136920,136921,136924,136926,136929,136931,136933,136935,136937,136939,136941],{"class":36,"line":50},[34,136922,136923],{"class":63},"  transform",[34,136925,51898],{"class":59},[34,136927,136928],{"class":63},"translate",[34,136930,617],{"class":59},[34,136932,919],{"class":63},[34,136934,51953],{"class":112},[34,136936,12899],{"class":59},[34,136938,1262],{"class":63},[34,136940,51953],{"class":112},[34,136942,3183],{"class":59},[34,136944,136945],{"class":36,"line":56},[34,136946,136947],{"class":40},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[34,136949,136950],{"class":36,"line":107},[34,136951,136952],{"class":40},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[34,136954,136955],{"class":36,"line":196},[34,136956,2036],{"class":59},[14,136958,136959],{},"muted:自动静音属性",[22462,136961,136963],{"id":136962},"_14122-音频标签audio","14.1.2.2 音频标签audio",[567,136965,136966],{},[570,136967,136968],{},"基本使用",[14,136970,136971,136972,136977,136978],{},"当前 ",[760,136973,136974],{},[31,136975,136976],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[760,136979,136980],{},"mp3格式",[20,136982],{"style":126795,"src":136983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[567,136985,136986],{"start":44},[570,136987,136822],{},[25,136989,136990],{"className":127686,"code":136785,"language":127688,"meta":22,"style":22},[31,136991,136992],{"__ignoreMap":22},[34,136993,136994,136996,136998,137000,137002,137004,137006,137008,137010,137012,137014,137016],{"class":36,"line":37},[34,136995,1515],{"class":59},[34,136997,28648],{"class":51761},[34,136999,55700],{"class":2427},[34,137001,447],{"class":59},[34,137003,136800],{"class":187},[34,137005,92884],{"class":2427},[34,137007,136805],{"class":2427},[34,137009,136808],{"class":2427},[34,137011,136811],{"class":2427},[34,137013,55775],{"class":59},[34,137015,28648],{"class":51761},[34,137017,51768],{"class":59},[14,137019,137020],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[567,137022,137023],{"start":50},[570,137024,137025],{},"常用属性",[20,137027],{"style":126795,"src":137028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[25,137030,137031],{"className":127686,"code":136785,"language":127688,"meta":22,"style":22},[31,137032,137033],{"__ignoreMap":22},[34,137034,137035,137037,137039,137041,137043,137045,137047,137049,137051,137053,137055,137057],{"class":36,"line":37},[34,137036,1515],{"class":59},[34,137038,28648],{"class":51761},[34,137040,55700],{"class":2427},[34,137042,447],{"class":59},[34,137044,136800],{"class":187},[34,137046,92884],{"class":2427},[34,137048,136805],{"class":2427},[34,137050,136808],{"class":2427},[34,137052,136811],{"class":2427},[34,137054,55775],{"class":59},[34,137056,28648],{"class":51761},[34,137058,51768],{"class":59},[14,137060,137061],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22462,137063,137065],{"id":137064},"_14123-总结","14.1.2.3 总结",[1611,137067,137068,137071,137074,137077,137080],{},[570,137069,137070],{},"音频标签和视频标签使用方式基本一致",[570,137072,137073],{},"浏览器支持情况不同",[570,137075,137076],{},"谷歌浏览器把音频和视频自动播放禁止了",[570,137078,137079],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[570,137081,137082],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[584,137084,137086],{"id":137085},"_1413-表单元素","14.1.3 表单元素",[22462,137088,137090],{"id":137089},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[20,137092],{"style":126795,"src":137093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[25,137095,137097],{"className":127686,"code":137096,"language":127688,"meta":22,"style":22},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[31,137098,137099],{"__ignoreMap":22},[34,137100,137101,137103,137105,137107,137109,137111,137113,137115,137118,137120,137122,137125],{"class":36,"line":37},[34,137102,1515],{"class":59},[34,137104,54282],{"class":51761},[34,137106,54285],{"class":2427},[34,137108,447],{"class":59},[34,137110,63160],{"class":187},[34,137112,15384],{"class":2427},[34,137114,447],{"class":59},[34,137116,137117],{"class":187},"\"username\"",[34,137119,61481],{"class":2427},[34,137121,447],{"class":59},[34,137123,137124],{"class":187},"\"请输入用户名\"",[34,137126,51768],{"class":59},[20,137128],{"style":126795,"src":137129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22462,137131,137133],{"id":137132},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[20,137135],{"style":126795,"src":137136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137138,137139],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137141,137142],{},"快捷操作：",[20,137144],{"style":126795,"src":137145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137147,137148],{},"例子1：",[25,137150,137152],{"className":127686,"code":137151,"language":127688,"meta":22,"style":22},"\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",[31,137153,137154,137177,137204,137233,137252],{"__ignoreMap":22},[34,137155,137156,137158,137160,137162,137164,137167,137170,137172,137175],{"class":36,"line":37},[34,137157,1515],{"class":59},[34,137159,67086],{"class":51761},[34,137161,67089],{"class":2427},[34,137163,447],{"class":59},[34,137165,137166],{"class":187},"\"\u002Fsubmit\"",[34,137168,137169],{"class":2427}," method",[34,137171,447],{"class":59},[34,137173,137174],{"class":187},"\"post\"",[34,137176,51768],{"class":59},[34,137178,137179,137181,137183,137185,137187,137189,137191,137193,137195,137197,137199,137202],{"class":36,"line":44},[34,137180,52605],{"class":59},[34,137182,54282],{"class":51761},[34,137184,54285],{"class":2427},[34,137186,447],{"class":59},[34,137188,63160],{"class":187},[34,137190,15384],{"class":2427},[34,137192,447],{"class":59},[34,137194,137117],{"class":187},[34,137196,61481],{"class":2427},[34,137198,447],{"class":59},[34,137200,137201],{"class":187},"\"用户名\"",[34,137203,51768],{"class":59},[34,137205,137206,137208,137210,137212,137214,137217,137219,137221,137224,137226,137228,137231],{"class":36,"line":50},[34,137207,52605],{"class":59},[34,137209,54282],{"class":51761},[34,137211,54285],{"class":2427},[34,137213,447],{"class":59},[34,137215,137216],{"class":187},"\"password\"",[34,137218,15384],{"class":2427},[34,137220,447],{"class":59},[34,137222,137223],{"class":187},"\"pwd\"",[34,137225,61481],{"class":2427},[34,137227,447],{"class":59},[34,137229,137230],{"class":187},"\"密码\"",[34,137232,51768],{"class":59},[34,137234,137235,137237,137239,137241,137243,137245,137248,137250],{"class":36,"line":56},[34,137236,52605],{"class":59},[34,137238,54348],{"class":51761},[34,137240,54285],{"class":2427},[34,137242,447],{"class":59},[34,137244,67109],{"class":187},[34,137246,137247],{"class":59},">提交\u003C\u002F",[34,137249,54348],{"class":51761},[34,137251,51768],{"class":59},[34,137253,137254,137256,137258],{"class":36,"line":107},[34,137255,52246],{"class":59},[34,137257,67086],{"class":51761},[34,137259,51768],{"class":59},[20,137261],{"style":126795,"src":137262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137264,137265],{},"value是表单域的内容",[14,137267,137268],{},"例子2：",[25,137270,137271],{"className":127686,"code":137151,"language":127688,"meta":22,"style":22},[31,137272,137273,137293,137319,137345,137363],{"__ignoreMap":22},[34,137274,137275,137277,137279,137281,137283,137285,137287,137289,137291],{"class":36,"line":37},[34,137276,1515],{"class":59},[34,137278,67086],{"class":51761},[34,137280,67089],{"class":2427},[34,137282,447],{"class":59},[34,137284,137166],{"class":187},[34,137286,137169],{"class":2427},[34,137288,447],{"class":59},[34,137290,137174],{"class":187},[34,137292,51768],{"class":59},[34,137294,137295,137297,137299,137301,137303,137305,137307,137309,137311,137313,137315,137317],{"class":36,"line":44},[34,137296,52605],{"class":59},[34,137298,54282],{"class":51761},[34,137300,54285],{"class":2427},[34,137302,447],{"class":59},[34,137304,63160],{"class":187},[34,137306,15384],{"class":2427},[34,137308,447],{"class":59},[34,137310,137117],{"class":187},[34,137312,61481],{"class":2427},[34,137314,447],{"class":59},[34,137316,137201],{"class":187},[34,137318,51768],{"class":59},[34,137320,137321,137323,137325,137327,137329,137331,137333,137335,137337,137339,137341,137343],{"class":36,"line":50},[34,137322,52605],{"class":59},[34,137324,54282],{"class":51761},[34,137326,54285],{"class":2427},[34,137328,447],{"class":59},[34,137330,137216],{"class":187},[34,137332,15384],{"class":2427},[34,137334,447],{"class":59},[34,137336,137223],{"class":187},[34,137338,61481],{"class":2427},[34,137340,447],{"class":59},[34,137342,137230],{"class":187},[34,137344,51768],{"class":59},[34,137346,137347,137349,137351,137353,137355,137357,137359,137361],{"class":36,"line":56},[34,137348,52605],{"class":59},[34,137350,54348],{"class":51761},[34,137352,54285],{"class":2427},[34,137354,447],{"class":59},[34,137356,67109],{"class":187},[34,137358,137247],{"class":59},[34,137360,54348],{"class":51761},[34,137362,51768],{"class":59},[34,137364,137365,137367,137369],{"class":36,"line":107},[34,137366,52246],{"class":59},[34,137368,67086],{"class":51761},[34,137370,51768],{"class":59},[20,137372],{"style":126795,"src":137373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[555,137375,137377],{"id":137376},"_142-css新特性","14.2 CSS新特性",[584,137379,137381],{"id":137380},"_1421-新增选择器","14.2.1 新增选择器",[22462,137383,137385],{"id":137384},"_14211-属性选择器","14.2.1.1 属性选择器",[20,137387],{"style":126795,"src":137388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[25,137390,137392],{"className":126939,"code":137391,"language":126941,"meta":22,"style":22},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[31,137393,137394,137409,137425],{"__ignoreMap":22},[34,137395,137396,137398,137400,137402,137404,137406],{"class":36,"line":37},[34,137397,54282],{"class":51761},[34,137399,1495],{"class":59},[34,137401,103494],{"class":2427},[34,137403,447],{"class":112},[34,137405,63160],{"class":187},[34,137407,137408],{"class":59},"] {\n",[34,137410,137411,137413,137415,137417,137419,137421,137423],{"class":36,"line":44},[34,137412,71357],{"class":63},[34,137414,51898],{"class":59},[34,137416,64],{"class":63},[34,137418,51953],{"class":112},[34,137420,51982],{"class":63},[34,137422,130519],{"class":63},[34,137424,1765],{"class":59},[34,137426,137427],{"class":36,"line":50},[34,137428,2036],{"class":59},[20,137430],{"style":126795,"src":137431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137433,646],{},[1611,137435,137436,137439,137442,137445],{},[570,137437,137438],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[570,137440,137441],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[570,137443,137444],{},"属性选择器也可以选择出来自定义的属性",[570,137446,137447,137449],{},[760,137448,9489],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22462,137451,137453],{"id":137452},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[20,137455],{"style":126795,"src":137456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[567,137458,137459],{},[570,137460,137461],{},"fist-child",[25,137463,137465],{"className":126939,"code":137464,"language":126941,"meta":22,"style":22},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[31,137466,137467,137472,137487,137507,137525],{"__ignoreMap":22},[34,137468,137469],{"class":36,"line":37},[34,137470,137471],{"class":40},"\u002F* 属性选择器 *\u002F\n",[34,137473,137474,137476,137478,137480,137482,137484],{"class":36,"line":44},[34,137475,54282],{"class":51761},[34,137477,1495],{"class":59},[34,137479,103494],{"class":2427},[34,137481,447],{"class":112},[34,137483,63160],{"class":187},[34,137485,137486],{"class":59},"] { }\n",[34,137488,137489,137491,137493,137495,137498,137501,137504],{"class":36,"line":50},[34,137490,54282],{"class":51761},[34,137492,1495],{"class":59},[34,137494,15158],{"class":2427},[34,137496,137497],{"class":112},"^=",[34,137499,137500],{"class":187},"\"icon\"",[34,137502,137503],{"class":59},"] { }  ",[34,137505,137506],{"class":40},"\u002F* 以 icon 开头 *\u002F\n",[34,137508,137509,137511,137513,137515,137518,137520,137522],{"class":36,"line":56},[34,137510,54282],{"class":51761},[34,137512,1495],{"class":59},[34,137514,15158],{"class":2427},[34,137516,137517],{"class":112},"$=",[34,137519,137500],{"class":187},[34,137521,137503],{"class":59},[34,137523,137524],{"class":40},"\u002F* 以 icon 结尾 *\u002F\n",[34,137526,137527,137529,137531,137533,137536,137538,137540],{"class":36,"line":107},[34,137528,54282],{"class":51761},[34,137530,1495],{"class":59},[34,137532,15158],{"class":2427},[34,137534,137535],{"class":112},"*=",[34,137537,137500],{"class":187},[34,137539,137503],{"class":59},[34,137541,137542],{"class":40},"\u002F* 包含 icon *\u002F\n",[14,137544,137545],{},"ul的第一个儿子文本为红色",[14,137547,137548],{},"一定要在冒号前加空格，不然就是选中所有的了",[25,137550,137552],{"className":126939,"code":137551,"language":126941,"meta":22,"style":22},".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",[31,137553,137554,137560,137570,137574,137578,137583,137596,137609,137625,137642,137659],{"__ignoreMap":22},[34,137555,137556,137558],{"class":36,"line":37},[34,137557,127230],{"class":2427},[34,137559,16036],{"class":59},[34,137561,137562,137564,137566,137568],{"class":36,"line":44},[34,137563,71366],{"class":63},[34,137565,51898],{"class":59},[34,137567,57882],{"class":63},[34,137569,1765],{"class":59},[34,137571,137572],{"class":36,"line":50},[34,137573,2036],{"class":59},[34,137575,137576],{"class":36,"line":56},[34,137577,136400],{"class":59},[34,137579,137580],{"class":36,"line":107},[34,137581,137582],{"class":40},"\u002F* 结构伪类选择器 *\u002F\n",[34,137584,137585,137587,137590,137593],{"class":36,"line":196},[34,137586,570],{"class":51761},[34,137588,137589],{"class":2427},":first-child",[34,137591,137592],{"class":59}," { }           ",[34,137594,137595],{"class":40},"\u002F* 第一个 *\u002F\n",[34,137597,137598,137600,137603,137606],{"class":36,"line":202},[34,137599,570],{"class":51761},[34,137601,137602],{"class":2427},":last-child",[34,137604,137605],{"class":59}," { }            ",[34,137607,137608],{"class":40},"\u002F* 最后一个 *\u002F\n",[34,137610,137611,137613,137615,137617,137619,137622],{"class":36,"line":207},[34,137612,570],{"class":51761},[34,137614,129853],{"class":2427},[34,137616,617],{"class":59},[34,137618,70],{"class":63},[34,137620,137621],{"class":59},") { }          ",[34,137623,137624],{"class":40},"\u002F* 第2个 *\u002F\n",[34,137626,137627,137629,137631,137633,137636,137639],{"class":36,"line":222},[34,137628,570],{"class":51761},[34,137630,129853],{"class":2427},[34,137632,617],{"class":59},[34,137634,137635],{"class":63},"2n",[34,137637,137638],{"class":59},") { }         ",[34,137640,137641],{"class":40},"\u002F* 偶数 *\u002F\n",[34,137643,137644,137646,137648,137650,137653,137656],{"class":36,"line":227},[34,137645,570],{"class":51761},[34,137647,129853],{"class":2427},[34,137649,617],{"class":59},[34,137651,137652],{"class":63},"2n+1",[34,137654,137655],{"class":59},") { }       ",[34,137657,137658],{"class":40},"\u002F* 奇数 *\u002F\n",[34,137660,137661,137663,137665,137667,137670,137672],{"class":36,"line":232},[34,137662,570],{"class":51761},[34,137664,129853],{"class":2427},[34,137666,617],{"class":59},[34,137668,137669],{"class":63},"-n+3",[34,137671,137655],{"class":59},[34,137673,137674],{"class":40},"\u002F* 前3个 *\u002F\n",[52072,137676,137679],{"className":137677},[137678],"example","\n  示例内容\n",[14,137681,137682],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1611,137684,137685],{},[570,137686,137687,137690],{},[31,137688,137689],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137692,137693],{},"也就是说它选择的是熊大",[567,137695,137696],{"start":196},[570,137697,137698],{},"权重",[25,137700,137702],{"className":126939,"code":137701,"language":126941,"meta":22,"style":22},"\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",[31,137703,137704,137708,137718,137728,137742,137756,137770],{"__ignoreMap":22},[34,137705,137706],{"class":36,"line":37},[34,137707,137582],{"class":40},[34,137709,137710,137712,137714,137716],{"class":36,"line":44},[34,137711,570],{"class":51761},[34,137713,137589],{"class":2427},[34,137715,137592],{"class":59},[34,137717,137595],{"class":40},[34,137719,137720,137722,137724,137726],{"class":36,"line":50},[34,137721,570],{"class":51761},[34,137723,137602],{"class":2427},[34,137725,137605],{"class":59},[34,137727,137608],{"class":40},[34,137729,137730,137732,137734,137736,137738,137740],{"class":36,"line":56},[34,137731,570],{"class":51761},[34,137733,129853],{"class":2427},[34,137735,617],{"class":59},[34,137737,70],{"class":63},[34,137739,137621],{"class":59},[34,137741,137624],{"class":40},[34,137743,137744,137746,137748,137750,137752,137754],{"class":36,"line":107},[34,137745,570],{"class":51761},[34,137747,129853],{"class":2427},[34,137749,617],{"class":59},[34,137751,137635],{"class":63},[34,137753,137638],{"class":59},[34,137755,137641],{"class":40},[34,137757,137758,137760,137762,137764,137766,137768],{"class":36,"line":196},[34,137759,570],{"class":51761},[34,137761,129853],{"class":2427},[34,137763,617],{"class":59},[34,137765,137652],{"class":63},[34,137767,137655],{"class":59},[34,137769,137658],{"class":40},[34,137771,137772,137774,137776,137778,137780,137782],{"class":36,"line":202},[34,137773,570],{"class":51761},[34,137775,129853],{"class":2427},[34,137777,617],{"class":59},[34,137779,137669],{"class":63},[34,137781,137655],{"class":59},[34,137783,137674],{"class":40},[14,137785,137786],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22462,137788,137790],{"id":137789},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137792,137793],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[20,137795],{"style":126795,"src":137796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[567,137798,137799],{},[570,137800,646],{},[1611,137802,137803,137806,137809,137812,137815,137818],{},[570,137804,137805],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[570,137807,137808],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[570,137810,137811],{},"语法： element::before {}",[570,137813,137814],{},"before 和 after 必须有 content 属性",[570,137816,137817],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[570,137819,137820],{},"伪元素选择器和标签选择器一样，权重为 1",[567,137822,137823],{"start":44},[570,137824,137825],{},"实例",[25,137827,137828],{"className":126939,"code":137701,"language":126941,"meta":22,"style":22},[31,137829,137830,137834,137844,137854,137868,137882,137896],{"__ignoreMap":22},[34,137831,137832],{"class":36,"line":37},[34,137833,137582],{"class":40},[34,137835,137836,137838,137840,137842],{"class":36,"line":44},[34,137837,570],{"class":51761},[34,137839,137589],{"class":2427},[34,137841,137592],{"class":59},[34,137843,137595],{"class":40},[34,137845,137846,137848,137850,137852],{"class":36,"line":50},[34,137847,570],{"class":51761},[34,137849,137602],{"class":2427},[34,137851,137605],{"class":59},[34,137853,137608],{"class":40},[34,137855,137856,137858,137860,137862,137864,137866],{"class":36,"line":56},[34,137857,570],{"class":51761},[34,137859,129853],{"class":2427},[34,137861,617],{"class":59},[34,137863,70],{"class":63},[34,137865,137621],{"class":59},[34,137867,137624],{"class":40},[34,137869,137870,137872,137874,137876,137878,137880],{"class":36,"line":107},[34,137871,570],{"class":51761},[34,137873,129853],{"class":2427},[34,137875,617],{"class":59},[34,137877,137635],{"class":63},[34,137879,137638],{"class":59},[34,137881,137641],{"class":40},[34,137883,137884,137886,137888,137890,137892,137894],{"class":36,"line":196},[34,137885,570],{"class":51761},[34,137887,129853],{"class":2427},[34,137889,617],{"class":59},[34,137891,137652],{"class":63},[34,137893,137655],{"class":59},[34,137895,137658],{"class":40},[34,137897,137898,137900,137902,137904,137906,137908],{"class":36,"line":202},[34,137899,570],{"class":51761},[34,137901,129853],{"class":2427},[34,137903,617],{"class":59},[34,137905,137669],{"class":63},[34,137907,137655],{"class":59},[34,137909,137674],{"class":40},[20,137911],{"style":126795,"src":137912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[567,137914,137915],{"start":50},[570,137916,137917],{},"使用场景1",[20,137919],{"style":126795,"src":137920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137922,137923],{},"不需要再加盒子来整红色那部分了",[25,137925,137927],{"className":126939,"code":137926,"language":126941,"meta":22,"style":22},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[31,137928,137929,137934,137943,137954,137964,137968,137977,137988,137998],{"__ignoreMap":22},[34,137930,137931],{"class":36,"line":37},[34,137932,137933],{"class":40},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[34,137935,137936,137938,137941],{"class":36,"line":44},[34,137937,52072],{"class":51761},[34,137939,137940],{"class":2427},"::before",[34,137942,16036],{"class":59},[34,137944,137945,137948,137950,137952],{"class":36,"line":50},[34,137946,137947],{"class":63},"  content",[34,137949,51898],{"class":59},[34,137951,8116],{"class":187},[34,137953,1765],{"class":59},[34,137955,137956,137958,137960,137962],{"class":36,"line":56},[34,137957,128555],{"class":63},[34,137959,51898],{"class":59},[34,137961,61330],{"class":63},[34,137963,1765],{"class":59},[34,137965,137966],{"class":36,"line":107},[34,137967,2036],{"class":59},[34,137969,137970,137972,137975],{"class":36,"line":196},[34,137971,52072],{"class":51761},[34,137973,137974],{"class":2427},"::after",[34,137976,16036],{"class":59},[34,137978,137979,137981,137983,137986],{"class":36,"line":202},[34,137980,137947],{"class":63},[34,137982,51898],{"class":59},[34,137984,137985],{"class":187},"\"→\"",[34,137987,1765],{"class":59},[34,137989,137990,137992,137994,137996],{"class":36,"line":207},[34,137991,71366],{"class":63},[34,137993,51898],{"class":59},[34,137995,62531],{"class":63},[34,137997,1765],{"class":59},[34,137999,138000],{"class":36,"line":222},[34,138001,2036],{"class":59},[20,138003],{"style":126795,"src":138004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,138006,138007],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[20,138009],{"style":126795,"src":138010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,138012,138013],{},"但是在引用时需要先转义一下",[14,138015,138016],{},"content='\\e930'",[567,138018,138019],{"start":56},[570,138020,138021],{},"使用场景2",[14,138023,138024],{},"仿土豆效果",[14,138026,138027],{},"通过使用伪元素选择器可以减少body中盒子的数量",[25,138029,138030],{"className":126939,"code":137926,"language":126941,"meta":22,"style":22},[31,138031,138032,138036,138044,138054,138064,138068,138076,138086,138096],{"__ignoreMap":22},[34,138033,138034],{"class":36,"line":37},[34,138035,137933],{"class":40},[34,138037,138038,138040,138042],{"class":36,"line":44},[34,138039,52072],{"class":51761},[34,138041,137940],{"class":2427},[34,138043,16036],{"class":59},[34,138045,138046,138048,138050,138052],{"class":36,"line":50},[34,138047,137947],{"class":63},[34,138049,51898],{"class":59},[34,138051,8116],{"class":187},[34,138053,1765],{"class":59},[34,138055,138056,138058,138060,138062],{"class":36,"line":56},[34,138057,128555],{"class":63},[34,138059,51898],{"class":59},[34,138061,61330],{"class":63},[34,138063,1765],{"class":59},[34,138065,138066],{"class":36,"line":107},[34,138067,2036],{"class":59},[34,138069,138070,138072,138074],{"class":36,"line":196},[34,138071,52072],{"class":51761},[34,138073,137974],{"class":2427},[34,138075,16036],{"class":59},[34,138077,138078,138080,138082,138084],{"class":36,"line":202},[34,138079,137947],{"class":63},[34,138081,51898],{"class":59},[34,138083,137985],{"class":187},[34,138085,1765],{"class":59},[34,138087,138088,138090,138092,138094],{"class":36,"line":207},[34,138089,71366],{"class":63},[34,138091,51898],{"class":59},[34,138093,62531],{"class":63},[34,138095,1765],{"class":59},[34,138097,138098],{"class":36,"line":222},[34,138099,2036],{"class":59},[20,138101],{"style":126795,"src":138102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[567,138104,138105],{"start":107},[570,138106,138107],{},"使用场景3",[14,138109,138110],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[25,138112,138114],{"className":126939,"code":138113,"language":126941,"meta":22,"style":22},".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",[31,138115,138116,138122,138132,138136,138140,138144,138152,138162,138172,138176,138184,138194,138204],{"__ignoreMap":22},[34,138117,138118,138120],{"class":36,"line":37},[34,138119,130787],{"class":2427},[34,138121,16036],{"class":59},[34,138123,138124,138126,138128,138130],{"class":36,"line":44},[34,138125,131419],{"class":63},[34,138127,51898],{"class":59},[34,138129,24200],{"class":63},[34,138131,1765],{"class":59},[34,138133,138134],{"class":36,"line":50},[34,138135,2036],{"class":59},[34,138137,138138],{"class":36,"line":56},[34,138139,136400],{"class":59},[34,138141,138142],{"class":36,"line":107},[34,138143,137933],{"class":40},[34,138145,138146,138148,138150],{"class":36,"line":196},[34,138147,52072],{"class":51761},[34,138149,137940],{"class":2427},[34,138151,16036],{"class":59},[34,138153,138154,138156,138158,138160],{"class":36,"line":202},[34,138155,137947],{"class":63},[34,138157,51898],{"class":59},[34,138159,8116],{"class":187},[34,138161,1765],{"class":59},[34,138163,138164,138166,138168,138170],{"class":36,"line":207},[34,138165,128555],{"class":63},[34,138167,51898],{"class":59},[34,138169,61330],{"class":63},[34,138171,1765],{"class":59},[34,138173,138174],{"class":36,"line":222},[34,138175,2036],{"class":59},[34,138177,138178,138180,138182],{"class":36,"line":227},[34,138179,52072],{"class":51761},[34,138181,137974],{"class":2427},[34,138183,16036],{"class":59},[34,138185,138186,138188,138190,138192],{"class":36,"line":232},[34,138187,137947],{"class":63},[34,138189,51898],{"class":59},[34,138191,137985],{"class":187},[34,138193,1765],{"class":59},[34,138195,138196,138198,138200,138202],{"class":36,"line":238},[34,138197,71366],{"class":63},[34,138199,51898],{"class":59},[34,138201,62531],{"class":63},[34,138203,1765],{"class":59},[34,138205,138206],{"class":36,"line":244},[34,138207,2036],{"class":59},[14,138209,138210],{},"div {\nmargin: 0 auto;\n}",[25,138212,138215],{"className":138213,"code":138214,"language":5651},[5649],"\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",[31,138216,138214],{"__ignoreMap":22},[14,138218,138219],{},"如果想让多个元素都发生变化",[14,138221,138222],{},"不能如下操作：",[14,138224,138225],{},"transition: width 2s ease 0.5s;",[14,138227,138228],{},"transition: height 2s ease 0.5s;不对！！！",[14,138230,138231],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138233,138234],{},"使用如下：加逗号隔开",[14,138236,138237],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138239,138240],{},"transition all 2s ease;",[584,138242,138244],{"id":138243},"_1426-过渡练习","14.2.6 过渡练习",[567,138246,138247],{},[570,138248,138249],{},"进度条",[20,138251],{"style":126795,"src":138252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[25,138254,138256],{"className":126939,"code":138255,"language":126941,"meta":22,"style":22},"div {\n  transition: all 0.3s ease;\n}\n",[31,138257,138258,138264,138282],{"__ignoreMap":22},[34,138259,138260,138262],{"class":36,"line":37},[34,138261,52072],{"class":51761},[34,138263,16036],{"class":59},[34,138265,138266,138269,138271,138273,138276,138278,138280],{"class":36,"line":44},[34,138267,138268],{"class":63},"  transition",[34,138270,51898],{"class":59},[34,138272,28586],{"class":63},[34,138274,138275],{"class":63}," 0.3",[34,138277,1301],{"class":112},[34,138279,79141],{"class":63},[34,138281,1765],{"class":59},[34,138283,138284],{"class":36,"line":50},[34,138285,2036],{"class":59},[567,138287,138288],{"start":44},[570,138289,138290],{},"小米logo",[14,138292,138293],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[25,138295,138297],{"className":126939,"code":138296,"language":126941,"meta":22,"style":22},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[31,138298,138299,138304,138310,138326,138331],{"__ignoreMap":22},[34,138300,138301],{"class":36,"line":37},[34,138302,138303],{"class":40},"\u002F* CSS3 过渡 *\u002F\n",[34,138305,138306,138308],{"class":36,"line":44},[34,138307,52072],{"class":51761},[34,138309,16036],{"class":59},[34,138311,138312,138314,138316,138318,138320,138322,138324],{"class":36,"line":50},[34,138313,138268],{"class":63},[34,138315,51898],{"class":59},[34,138317,28586],{"class":63},[34,138319,138275],{"class":63},[34,138321,1301],{"class":112},[34,138323,79141],{"class":63},[34,138325,1765],{"class":59},[34,138327,138328],{"class":36,"line":56},[34,138329,138330],{"class":40},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[34,138332,138333],{"class":36,"line":107},[34,138334,2036],{"class":59},[14,138336,138337],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[532,138339,138340],{},"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":22,"searchDepth":44,"depth":44,"links":138342},[138343,138348],{"id":136673,"depth":44,"text":136674,"children":138344},[138345,138346,138347],{"id":136677,"depth":50,"text":136678},{"id":136754,"depth":50,"text":136755},{"id":137085,"depth":50,"text":137086},{"id":137376,"depth":44,"text":137377,"children":138349},[138350,138351],{"id":137380,"depth":50,"text":137381},{"id":138243,"depth":50,"text":138244},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136665,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138358,"title":138359,"body":138360,"description":537,"extension":538,"meta":140104,"navigation":540,"path":140105,"seo":140106,"stem":140107,"__hash__":140108},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138361,"toc":140085},[138362,138365,138369,138372,138378,138384,138388,138390,138393,138396,138399,138402,138405,138408,138411,138415,138419,138422,138425,138428,138432,138435,138438,138443,138446,138449,138452,138456,138459,138468,138471,138474,138478,138481,138484,138489,138496,138510,138518,138525,138530,138533,138536,138539,138546,138550,138556,138562,138565,138568,138573,138579,138581,138589,138594,138597,138603,138605,138610,138615,138618,138620,138625,138628,138633,138638,138672,138676,138680,138683,138687,138690,138776,138779,138816,138819,138855,138859,138864,138877,138931,138933,138961,138963,138991,138997,139011,139013,139057,139059,139103,139106,139113,139124,139126,139153,139155,139181,139188,139204,139206,139300,139302,139396,139403,139406,139411,139417,139491,139494,139496,139532,139534,139570,139573,139580,139599,139602,139605,139607,139632,139634,139658,139661,139664,139694,139698,139701,139764,139766,139832,139834,139898,139901,139933,139935,139961,139963,139989,139992,140023,140025,140051,140053,140079,140082],[10,138363,138359],{"id":138364},"_15-品优购项目上篇-搭建与公共模块",[555,138366,138368],{"id":138367},"_151-项目规划","15.1 项目规划",[20,138370],{"style":126795,"src":138371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138373,138374,138377],{},[760,138375,138376],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138379,138380,138383],{},[760,138381,138382],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[555,138385,138387],{"id":138386},"_152-项目介绍","15.2 项目介绍",[14,138389,138376],{},[20,138391],{"style":126795,"src":138392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138394,138395],{},"主页：",[20,138397],{"style":126795,"src":138398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138400,138401],{},"列表页：",[20,138403],{"style":126795,"src":138404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138406,138407],{},"注册页：",[20,138409],{"style":126795,"src":138410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[555,138412,138414],{"id":138413},"_153-项目搭建工作","15.3 项目搭建工作",[584,138416,138418],{"id":138417},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[20,138420],{"style":126795,"src":138421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138423,138424],{},"经常更换的图片要放到upload文件夹中",[14,138426,138427],{},"不经常换的放到images文件夹中",[584,138429,138431],{"id":138430},"_1532-创建文件如下","15.3.2 创建文件如下",[20,138433],{"style":126795,"src":138434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[20,138436],{"style":126795,"src":138437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138439,138440],{},[760,138441,138442],{},"初始化样式：",[14,138444,138445],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138447,138448],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138450,138451],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[584,138453,138455],{"id":138454},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138457,138458],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138460,138461,138462,138467],{},"这里最典型的应用就是 ",[760,138463,138464],{},[31,138465,138466],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[20,138469],{"style":126795,"src":138470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138472,138473],{},"通过link方法来引入",[584,138475,138477],{"id":138476},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[20,138479],{"style":126795,"src":138480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138482,138483],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[567,138485,138486],{},[570,138487,138488],{},"制作favicon图标",[14,138490,138491,138492,138495],{},"①把品优购图标切成 ",[31,138493,138494],{},"png"," 图片",[14,138497,138498,138499,138501,138502,138505,138506],{},"②把 ",[31,138500,138494],{}," 图片转换为 ",[31,138503,138504],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[847,138507,138508],{"href":138508,"rel":138509},"http:\u002F\u002Fwww.bitbug.net\u002F",[24329],[567,138511,138512,138515],{"start":44},[570,138513,138514],{},"favicon图标放到网站根目录下",[570,138516,138517],{},"HTML页面引入favicon",[14,138519,138520,138521,138524],{},"在html 页面里面的 ",[31,138522,138523],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138526,138527],{},[31,138528,138529],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138531,138532],{},"复制这行代码或者在生成这个的网站进行复制",[20,138534],{"style":126795,"src":138535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138537,138538],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138540,138541,138542],{},"例如:",[847,138543,138544],{"href":138544,"rel":138545},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24329],[584,138547,138549],{"id":138548},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138551,138552,138555],{},[760,138553,138554],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138557,138558,138561],{},[760,138559,138560],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138563,138564],{},"页面必须有三个标签用来符合 SEO 优化",[20,138566],{"style":126795,"src":138567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[567,138569,138570],{},[570,138571,138572],{},"title网站标题",[14,138574,138575,138578],{},[760,138576,138577],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138580,69251],{},[1611,138582,138583,138586],{},[570,138584,138585],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[570,138587,138588],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[567,138590,138591],{"start":44},[570,138592,138593],{},"description网站描述",[14,138595,138596],{},"简要说明我们网站主要是做什么的",[14,138598,138599,138602],{},[760,138600,138601],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138604,69251],{},[14,138606,138607],{},[31,138608,138609],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[567,138611,138612],{"start":50},[570,138613,138614],{},"keywords关键词",[14,138616,138617],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138619,69251],{},[14,138621,138622],{},[31,138623,138624],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138626,138627],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138629,138630],{},[760,138631,138632],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[567,138634,138635],{"start":56},[570,138636,138637],{},"代码总结",[25,138639,138640],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,138641,138642,138646,138660,138664],{"__ignoreMap":22},[34,138643,138644],{"class":36,"line":37},[34,138645,131050],{"class":40},[34,138647,138648,138650,138652,138654,138656,138658],{"class":36,"line":44},[34,138649,1515],{"class":59},[34,138651,52072],{"class":51761},[34,138653,53947],{"class":2427},[34,138655,447],{"class":59},[34,138657,131063],{"class":187},[34,138659,51768],{"class":59},[34,138661,138662],{"class":36,"line":50},[34,138663,131070],{"class":59},[34,138665,138666,138668,138670],{"class":36,"line":56},[34,138667,52246],{"class":59},[34,138669,52072],{"class":51761},[34,138671,51768],{"class":59},[555,138673,138675],{"id":138674},"_154-项目公共部分制作","15.4 项目公共部分制作",[584,138677,138679],{"id":138678},"_1541-常用模块类命名","15.4.1 常用模块类命名",[20,138681],{"style":126795,"src":138682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[584,138684,138686],{"id":138685},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138688,138689],{},"布局思路：",[1611,138691,138692,138695,138698,138720,138753],{},[570,138693,138694],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[570,138696,138697],{},"里面包含版心的盒子",[570,138699,138700,138701],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1611,138702,138703,138711,138717],{},[570,138704,138705,138706,21964,138708,138710],{},"1 号盒子 里面包含一个",[31,138707,1611],{},[31,138709,1611],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[570,138712,138713,138714,138716],{},"里面的内容是水平排列，所以需要给",[31,138715,570],{},"设置浮动",[570,138718,138719],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[570,138721,138722,138723],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1611,138724,138725,138739,138744],{},[570,138726,138727,138728,21964,138730,138732,138733,138735,138736,138738],{},"2 号盒子 里面包含一个",[31,138729,1611],{},[31,138731,1611],{},"包裹",[31,138734,570],{},"，中间的",[31,138737,1526],{},"可以用样式去设置，也可以用字符 |",[570,138740,138741,138742,138716],{},"里面内容水平排列，给",[31,138743,570],{},[570,138745,138746,138747,138749,138750,138752],{},"找到里面所有偶数的 ",[31,138748,570],{}," 设置样式（偶数的 ",[31,138751,570],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[570,138754,138755,138756],{},"需要用到字体图标",[1611,138757,138758,138764,138767,138770,138773],{},[570,138759,138760,138761],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[31,138762,138763],{},"arrow-icon",[570,138765,138766],{},"先要引入字体图片的资源",[570,138768,138769],{},"在样式里面利用 font-face 来进行声明",[570,138771,138772],{},"在伪元素的 content属性设置 图标的编码",[570,138774,138775],{},"给伪元素设置font-family属性",[14,138777,138778],{},"结构实例代码：",[25,138780,138782],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},"div::before {\n  content: \"\";\n  display: block;\n}\n",[31,138783,138784,138792,138802,138812],{"__ignoreMap":22},[34,138785,138786,138788,138790],{"class":36,"line":37},[34,138787,52072],{"class":51761},[34,138789,137940],{"class":2427},[34,138791,16036],{"class":59},[34,138793,138794,138796,138798,138800],{"class":36,"line":44},[34,138795,137947],{"class":63},[34,138797,51898],{"class":59},[34,138799,8116],{"class":187},[34,138801,1765],{"class":59},[34,138803,138804,138806,138808,138810],{"class":36,"line":50},[34,138805,128555],{"class":63},[34,138807,51898],{"class":59},[34,138809,61330],{"class":63},[34,138811,1765],{"class":59},[34,138813,138814],{"class":36,"line":56},[34,138815,2036],{"class":59},[14,138817,138818],{},"样式实例代码：",[25,138820,138821],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,138822,138823,138831,138841,138851],{"__ignoreMap":22},[34,138824,138825,138827,138829],{"class":36,"line":37},[34,138826,52072],{"class":51761},[34,138828,137940],{"class":2427},[34,138830,16036],{"class":59},[34,138832,138833,138835,138837,138839],{"class":36,"line":44},[34,138834,137947],{"class":63},[34,138836,51898],{"class":59},[34,138838,8116],{"class":187},[34,138840,1765],{"class":59},[34,138842,138843,138845,138847,138849],{"class":36,"line":50},[34,138844,128555],{"class":63},[34,138846,51898],{"class":59},[34,138848,61330],{"class":63},[34,138850,1765],{"class":59},[34,138852,138853],{"class":36,"line":56},[34,138854,2036],{"class":59},[584,138856,138858],{"id":138857},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1611,138860,138861],{},[570,138862,138863],{},"header 盒子必须要有高度",[14,138865,138866,138867,138869,138870],{},"1 号盒子是 ",[31,138868,131951],{}," 标志定位，在正常开发过程中， ",[760,138871,138872,138873,138876],{},"logo的布局其实是有讲究的，需要进行 ",[31,138874,138875],{},"logoSEO","的优化 （★★★）",[1611,138878,138879,138887,138895,138922],{},[570,138880,138881,138883,138884,138886],{},[31,138882,131951],{}," 里面首先放一个 ",[31,138885,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[570,138888,138889,138891,138892,138894],{},[31,138890,10],{}," 里面再放一个链接，可以返回首页的，把 ",[31,138893,131951],{}," 的背景图片给链接即可",[570,138896,138897,138898],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1611,138899,138900,138915],{},[570,138901,138902,138903,138906,138907,138910,138911,138914],{},"方法1：",[31,138904,138905],{},"text-indent"," 移到盒子外面（",[31,138908,138909],{},"text-indent: -9999px",") ，然后 ",[31,138912,138913],{},"overflow:hidden"," ，淘宝的做法",[570,138916,138917,138918,138921],{},"方法2：直接给 ",[31,138919,138920],{},"font-size: 0;"," 就看不到文字了，京东的做法",[570,138923,138924,138925,138927,138928,138930],{},"最后给链接一个 ",[31,138926,51868],{}," 属性，这样鼠标放到 ",[31,138929,131951],{}," 上就可以看到提示文字了",[14,138932,138778],{},[25,138934,138935],{"className":127686,"code":132172,"language":127688,"meta":22,"style":22},[31,138936,138937],{"__ignoreMap":22},[34,138938,138939,138941,138943,138945,138947,138949,138951,138953,138955,138957,138959],{"class":36,"line":37},[34,138940,1515],{"class":59},[34,138942,847],{"class":51761},[34,138944,61518],{"class":2427},[34,138946,447],{"class":59},[34,138948,132187],{"class":187},[34,138950,132190],{"class":2427},[34,138952,447],{"class":59},[34,138954,132195],{"class":187},[34,138956,132198],{"class":59},[34,138958,847],{"class":51761},[34,138960,51768],{"class":59},[14,138962,138818],{},[25,138964,138965],{"className":127686,"code":132172,"language":127688,"meta":22,"style":22},[31,138966,138967],{"__ignoreMap":22},[34,138968,138969,138971,138973,138975,138977,138979,138981,138983,138985,138987,138989],{"class":36,"line":37},[34,138970,1515],{"class":59},[34,138972,847],{"class":51761},[34,138974,61518],{"class":2427},[34,138976,447],{"class":59},[34,138978,132187],{"class":187},[34,138980,132190],{"class":2427},[34,138982,447],{"class":59},[34,138984,132195],{"class":187},[34,138986,132198],{"class":59},[34,138988,847],{"class":51761},[34,138990,51768],{"class":59},[14,138992,138993,138994,138996],{},"2 号盒子是 ",[31,138995,131964],{}," 搜索模块定位",[1611,138998,138999,139002,139005,139008],{},[570,139000,139001],{},"search盒子利用定位的方式放在对应的位置",[570,139003,139004],{},"search盒子设置绝对定位，header盒子设置相对定位",[570,139006,139007],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[570,139009,139010],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,139012,138778],{},[25,139014,139015],{"className":126939,"code":132259,"language":126941,"meta":22,"style":22},[31,139016,139017,139039,139043,139053],{"__ignoreMap":22},[34,139018,139019,139021,139023,139025,139027,139029,139031,139033,139035,139037],{"class":36,"line":37},[34,139020,52072],{"class":51761},[34,139022,12899],{"class":59},[34,139024,14],{"class":51761},[34,139026,12899],{"class":59},[34,139028,10],{"class":51761},[34,139030,12899],{"class":59},[34,139032,1611],{"class":51761},[34,139034,12899],{"class":59},[34,139036,570],{"class":51761},[34,139038,16036],{"class":59},[34,139040,139041],{"class":36,"line":44},[34,139042,132288],{"class":40},[34,139044,139045,139047,139049,139051],{"class":36,"line":50},[34,139046,128555],{"class":63},[34,139048,51898],{"class":59},[34,139050,61330],{"class":63},[34,139052,1765],{"class":59},[34,139054,139055],{"class":36,"line":56},[34,139056,2036],{"class":59},[14,139058,138818],{},[25,139060,139061],{"className":126939,"code":132259,"language":126941,"meta":22,"style":22},[31,139062,139063,139085,139089,139099],{"__ignoreMap":22},[34,139064,139065,139067,139069,139071,139073,139075,139077,139079,139081,139083],{"class":36,"line":37},[34,139066,52072],{"class":51761},[34,139068,12899],{"class":59},[34,139070,14],{"class":51761},[34,139072,12899],{"class":59},[34,139074,10],{"class":51761},[34,139076,12899],{"class":59},[34,139078,1611],{"class":51761},[34,139080,12899],{"class":59},[34,139082,570],{"class":51761},[34,139084,16036],{"class":59},[34,139086,139087],{"class":36,"line":44},[34,139088,132288],{"class":40},[34,139090,139091,139093,139095,139097],{"class":36,"line":50},[34,139092,128555],{"class":63},[34,139094,51898],{"class":59},[34,139096,61330],{"class":63},[34,139098,1765],{"class":59},[34,139100,139101],{"class":36,"line":56},[34,139102,2036],{"class":59},[14,139104,139105],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139107,139108,139109,139112],{},"3 号盒子是 ",[31,139110,139111],{},"hotwords"," 热词模块定位",[1611,139114,139115,139118,139121],{},[570,139116,139117],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[570,139119,139120],{},"给里面所有的a标签设置 左右10px的外边距",[570,139122,139123],{},"给第一个a标签设置文字变红色（#c81623）",[14,139125,138778],{},[25,139127,139129],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},"div {\n  margin: 0 auto;\n}\n",[31,139130,139131,139137,139149],{"__ignoreMap":22},[34,139132,139133,139135],{"class":36,"line":37},[34,139134,52072],{"class":51761},[34,139136,16036],{"class":59},[34,139138,139139,139141,139143,139145,139147],{"class":36,"line":44},[34,139140,70931],{"class":63},[34,139142,51898],{"class":59},[34,139144,319],{"class":63},[34,139146,52017],{"class":63},[34,139148,1765],{"class":59},[34,139150,139151],{"class":36,"line":50},[34,139152,2036],{"class":59},[14,139154,138818],{},[25,139156,139157],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,139158,139159,139165,139177],{"__ignoreMap":22},[34,139160,139161,139163],{"class":36,"line":37},[34,139162,52072],{"class":51761},[34,139164,16036],{"class":59},[34,139166,139167,139169,139171,139173,139175],{"class":36,"line":44},[34,139168,70931],{"class":63},[34,139170,51898],{"class":59},[34,139172,319],{"class":63},[34,139174,52017],{"class":63},[34,139176,1765],{"class":59},[34,139178,139179],{"class":36,"line":50},[34,139180,2036],{"class":59},[14,139182,139183,139184,139187],{},"4 号盒子是 ",[31,139185,139186],{},"shopcar"," 购物车模块",[1611,139189,139190,139195,139198,139201],{},[570,139191,123722,139192,139194],{},[31,139193,139186],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[570,139196,139197],{},"count 统计部分用绝对定位做",[570,139199,139200],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[570,139202,139203],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139205,138778],{},[25,139207,139208],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,139209,139210,139214,139228,139232,139246,139250,139264,139268,139282,139286],{"__ignoreMap":22},[34,139211,139212],{"class":36,"line":37},[34,139213,132378],{"class":40},[34,139215,139216,139218,139220,139222,139224,139226],{"class":36,"line":44},[34,139217,132383],{"class":2427},[34,139219,80268],{"class":59},[34,139221,129299],{"class":63},[34,139223,51898],{"class":59},[34,139225,132392],{"class":63},[34,139227,129869],{"class":59},[34,139229,139230],{"class":36,"line":50},[34,139231,132399],{"class":40},[34,139233,139234,139236,139238,139240,139242,139244],{"class":36,"line":56},[34,139235,132404],{"class":2427},[34,139237,80268],{"class":59},[34,139239,129299],{"class":63},[34,139241,51898],{"class":59},[34,139243,55225],{"class":63},[34,139245,129869],{"class":59},[34,139247,139248],{"class":36,"line":107},[34,139249,132419],{"class":40},[34,139251,139252,139254,139256,139258,139260,139262],{"class":36,"line":196},[34,139253,132424],{"class":2427},[34,139255,80268],{"class":59},[34,139257,129299],{"class":63},[34,139259,51898],{"class":59},[34,139261,55292],{"class":63},[34,139263,129869],{"class":59},[34,139265,139266],{"class":36,"line":202},[34,139267,132439],{"class":40},[34,139269,139270,139272,139274,139276,139278,139280],{"class":36,"line":207},[34,139271,132444],{"class":2427},[34,139273,80268],{"class":59},[34,139275,129299],{"class":63},[34,139277,51898],{"class":59},[34,139279,86694],{"class":63},[34,139281,129869],{"class":59},[34,139283,139284],{"class":36,"line":222},[34,139285,132459],{"class":40},[34,139287,139288,139290,139292,139294,139296,139298],{"class":36,"line":227},[34,139289,132464],{"class":2427},[34,139291,80268],{"class":59},[34,139293,129299],{"class":63},[34,139295,51898],{"class":59},[34,139297,132473],{"class":63},[34,139299,129869],{"class":59},[14,139301,138818],{},[25,139303,139304],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,139305,139306,139310,139324,139328,139342,139346,139360,139364,139378,139382],{"__ignoreMap":22},[34,139307,139308],{"class":36,"line":37},[34,139309,132378],{"class":40},[34,139311,139312,139314,139316,139318,139320,139322],{"class":36,"line":44},[34,139313,132383],{"class":2427},[34,139315,80268],{"class":59},[34,139317,129299],{"class":63},[34,139319,51898],{"class":59},[34,139321,132392],{"class":63},[34,139323,129869],{"class":59},[34,139325,139326],{"class":36,"line":50},[34,139327,132399],{"class":40},[34,139329,139330,139332,139334,139336,139338,139340],{"class":36,"line":56},[34,139331,132404],{"class":2427},[34,139333,80268],{"class":59},[34,139335,129299],{"class":63},[34,139337,51898],{"class":59},[34,139339,55225],{"class":63},[34,139341,129869],{"class":59},[34,139343,139344],{"class":36,"line":107},[34,139345,132419],{"class":40},[34,139347,139348,139350,139352,139354,139356,139358],{"class":36,"line":196},[34,139349,132424],{"class":2427},[34,139351,80268],{"class":59},[34,139353,129299],{"class":63},[34,139355,51898],{"class":59},[34,139357,55292],{"class":63},[34,139359,129869],{"class":59},[34,139361,139362],{"class":36,"line":202},[34,139363,132439],{"class":40},[34,139365,139366,139368,139370,139372,139374,139376],{"class":36,"line":207},[34,139367,132444],{"class":2427},[34,139369,80268],{"class":59},[34,139371,129299],{"class":63},[34,139373,51898],{"class":59},[34,139375,86694],{"class":63},[34,139377,129869],{"class":59},[34,139379,139380],{"class":36,"line":222},[34,139381,132459],{"class":40},[34,139383,139384,139386,139388,139390,139392,139394],{"class":36,"line":227},[34,139385,132464],{"class":2427},[34,139387,80268],{"class":59},[34,139389,129299],{"class":63},[34,139391,51898],{"class":59},[34,139393,132473],{"class":63},[34,139395,129869],{"class":59},[584,139397,139399,139400,139402],{"id":139398},"_1544-nav导航模块制作","15.4.4 ",[31,139401,54174],{},"导航模块制作",[20,139404],{"style":126795,"src":139405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139407,139408,139410],{},[31,139409,54174],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139412,139413,139414],{},"1 号盒子左侧浮动，",[31,139415,139416],{},"dropdown",[1611,139418,139419,139429,139437,139443,139451,139461,139469,139480],{},[570,139420,139421,139422,101405,139425,139428],{},"1号盒子有讲究，根据相关性 里面包含 ",[31,139423,139424],{},".dt",[31,139426,139427],{},".dd"," 两个盒子",[570,139430,139431,139433,139434,139436],{},[31,139432,139424],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[31,139435,139427],{}," 挤到下面去了",[570,139438,139439,139440,139442],{},"给 ",[31,139441,139427],{}," 盒子设置宽度 和 高度，以及背景颜色",[570,139444,139439,139445,139447,139448,120624],{},[31,139446,139427],{}," 盒子里面定义 无序列表 （",[31,139449,139450],{},"ul > li > a",[570,139452,139453,139454,139456,139457,139460],{},"每个 ",[31,139455,570],{}," 都有一个高度（",[31,139458,139459],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[570,139462,139439,139463,139465,139466,120624],{},[31,139464,570],{}," 里面的a设置文字大小（",[31,139467,139468],{},"14px",[570,139470,139439,139471,139473,139474,139476,139477,139479],{},[31,139472,570],{}," 设置 ",[31,139475,128100],{},"，当鼠标移入的时候，让",[31,139478,570],{},"的背景变成白色，让里面的文字变成红色",[570,139481,139482,139484,139485,139487,139488,139490],{},[31,139483,570],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[31,139486,570],{},"的右侧，那么给",[31,139489,570],{},"设置相对定位",[14,139492,139493],{},"一定要注意相关性",[14,139495,138778],{},[25,139497,139498],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,139499,139500,139508,139518,139528],{"__ignoreMap":22},[34,139501,139502,139504,139506],{"class":36,"line":37},[34,139503,52072],{"class":51761},[34,139505,137940],{"class":2427},[34,139507,16036],{"class":59},[34,139509,139510,139512,139514,139516],{"class":36,"line":44},[34,139511,137947],{"class":63},[34,139513,51898],{"class":59},[34,139515,8116],{"class":187},[34,139517,1765],{"class":59},[34,139519,139520,139522,139524,139526],{"class":36,"line":50},[34,139521,128555],{"class":63},[34,139523,51898],{"class":59},[34,139525,61330],{"class":63},[34,139527,1765],{"class":59},[34,139529,139530],{"class":36,"line":56},[34,139531,2036],{"class":59},[14,139533,138818],{},[25,139535,139536],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,139537,139538,139546,139556,139566],{"__ignoreMap":22},[34,139539,139540,139542,139544],{"class":36,"line":37},[34,139541,52072],{"class":51761},[34,139543,137940],{"class":2427},[34,139545,16036],{"class":59},[34,139547,139548,139550,139552,139554],{"class":36,"line":44},[34,139549,137947],{"class":63},[34,139551,51898],{"class":59},[34,139553,8116],{"class":187},[34,139555,1765],{"class":59},[34,139557,139558,139560,139562,139564],{"class":36,"line":50},[34,139559,128555],{"class":63},[34,139561,51898],{"class":59},[34,139563,61330],{"class":63},[34,139565,1765],{"class":59},[34,139567,139568],{"class":36,"line":56},[34,139569,2036],{"class":59},[14,139571,139572],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139574,139575,139576,139579],{},"2 号盒子左侧浮动，",[31,139577,139578],{},"navitems"," 导航栏组",[1611,139581,139582,139587,139596],{},[570,139583,139584,139585],{},"里面结构是 ",[31,139586,139450],{},[570,139588,139589,139590,139592,139593,139595],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[31,139591,847],{},"左右的",[31,139594,31346],{},"把两侧撑开",[570,139597,139598],{},"让文字垂直居中（行高等于高度）",[20,139600],{"style":126795,"src":139601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139603,139604],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139606,138778],{},[25,139608,139610],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},".box {\n  float: left;\n}\n",[31,139611,139612,139618,139628],{"__ignoreMap":22},[34,139613,139614,139616],{"class":36,"line":37},[34,139615,130787],{"class":2427},[34,139617,16036],{"class":59},[34,139619,139620,139622,139624,139626],{"class":36,"line":44},[34,139621,131419],{"class":63},[34,139623,51898],{"class":59},[34,139625,24200],{"class":63},[34,139627,1765],{"class":59},[34,139629,139630],{"class":36,"line":50},[34,139631,2036],{"class":59},[14,139633,138818],{},[25,139635,139636],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,139637,139638,139644,139654],{"__ignoreMap":22},[34,139639,139640,139642],{"class":36,"line":37},[34,139641,130787],{"class":2427},[34,139643,16036],{"class":59},[34,139645,139646,139648,139650,139652],{"class":36,"line":44},[34,139647,131419],{"class":63},[34,139649,51898],{"class":59},[34,139651,24200],{"class":63},[34,139653,1765],{"class":59},[34,139655,139656],{"class":36,"line":50},[34,139657,2036],{"class":59},[14,139659,139660],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[20,139662],{"style":126795,"src":139663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[25,139665,139666],{"className":126939,"code":131096,"language":126941,"meta":22,"style":22},[31,139667,139668,139674,139690],{"__ignoreMap":22},[34,139669,139670,139672],{"class":36,"line":37},[34,139671,52072],{"class":51761},[34,139673,16036],{"class":59},[34,139675,139676,139678,139680,139682,139684,139686,139688],{"class":36,"line":44},[34,139677,71357],{"class":63},[34,139679,51898],{"class":59},[34,139681,64],{"class":63},[34,139683,51953],{"class":112},[34,139685,51982],{"class":63},[34,139687,130331],{"class":63},[34,139689,1765],{"class":59},[34,139691,139692],{"class":36,"line":50},[34,139693,2036],{"class":59},[584,139695,139697],{"id":139696},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[20,139699],{"style":126795,"src":139700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1611,139702,139703,139708,139713],{},[570,139704,139705,139707],{},[31,139706,132142],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[570,139709,139710,139712],{},[31,139711,132142],{}," 里面有一个大的版心",[570,139714,139715,139716,139719,139720],{},"版心里面包含 1 号盒子，",[31,139717,139718],{},"mod_service"," 是服务模块，mod 是模块的意思",[1611,139721,139722,139727,139740,139756,139761],{},[570,139723,139439,139724,139726],{},[31,139725,139718],{}," 设置高度（80px）和下边框",[570,139728,139729,139730,139733,139734,139736,139737,139739],{},"在里面定义 ",[31,139731,139732],{},"ul > li"," ,每个",[31,139735,570],{}," 宽度是300px 高度是 50px，给每个",[31,139738,570],{},"设置35px的左内边距",[570,139741,139742,139743,139745,139746,139748,139749,139751,139752,18874,139754,120624],{},"在每个",[31,139744,570],{},"里面，放一个 ",[31,139747,23374],{},"（里面放图标），一个",[31,139750,52072],{},"（里面放",[31,139753,52072],{},[31,139755,14],{},[570,139757,139439,139758,139760],{},[31,139759,23374],{},"设置浮动，让h5与这个div左右排列",[570,139762,139763],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139765,138778],{},[25,139767,139769],{"className":126939,"code":139768,"language":126941,"meta":22,"style":22},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[31,139770,139771,139777,139789,139801,139828],{"__ignoreMap":22},[34,139772,139773,139775],{"class":36,"line":37},[34,139774,134696],{"class":2427},[34,139776,16036],{"class":59},[34,139778,139779,139781,139783,139785,139787],{"class":36,"line":44},[34,139780,71029],{"class":63},[34,139782,51898],{"class":59},[34,139784,1306],{"class":63},[34,139786,51953],{"class":112},[34,139788,1765],{"class":59},[34,139790,139791,139793,139795,139797,139799],{"class":36,"line":50},[34,139792,71249],{"class":63},[34,139794,51898],{"class":59},[34,139796,1306],{"class":63},[34,139798,51953],{"class":112},[34,139800,1765],{"class":59},[34,139802,139803,139805,139807,139809,139811,139813,139815,139817,139820,139822,139824,139826],{"class":36,"line":56},[34,139804,71072],{"class":63},[34,139806,51898],{"class":59},[34,139808,62187],{"class":63},[34,139810,617],{"class":59},[34,139812,134735],{"class":5680},[34,139814,14178],{"class":59},[34,139816,62197],{"class":63},[34,139818,139819],{"class":63}," -10",[34,139821,51953],{"class":112},[34,139823,134754],{"class":63},[34,139825,51953],{"class":112},[34,139827,1765],{"class":59},[34,139829,139830],{"class":36,"line":107},[34,139831,2036],{"class":59},[14,139833,138818],{},[25,139835,139836],{"className":126939,"code":139768,"language":126941,"meta":22,"style":22},[31,139837,139838,139844,139856,139868,139894],{"__ignoreMap":22},[34,139839,139840,139842],{"class":36,"line":37},[34,139841,134696],{"class":2427},[34,139843,16036],{"class":59},[34,139845,139846,139848,139850,139852,139854],{"class":36,"line":44},[34,139847,71029],{"class":63},[34,139849,51898],{"class":59},[34,139851,1306],{"class":63},[34,139853,51953],{"class":112},[34,139855,1765],{"class":59},[34,139857,139858,139860,139862,139864,139866],{"class":36,"line":50},[34,139859,71249],{"class":63},[34,139861,51898],{"class":59},[34,139863,1306],{"class":63},[34,139865,51953],{"class":112},[34,139867,1765],{"class":59},[34,139869,139870,139872,139874,139876,139878,139880,139882,139884,139886,139888,139890,139892],{"class":36,"line":56},[34,139871,71072],{"class":63},[34,139873,51898],{"class":59},[34,139875,62187],{"class":63},[34,139877,617],{"class":59},[34,139879,134735],{"class":5680},[34,139881,14178],{"class":59},[34,139883,62197],{"class":63},[34,139885,139819],{"class":63},[34,139887,51953],{"class":112},[34,139889,134754],{"class":63},[34,139891,51953],{"class":112},[34,139893,1765],{"class":59},[34,139895,139896],{"class":36,"line":107},[34,139897,2036],{"class":59},[14,139899,139900],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1611,139902,139903,139906,139912,139918,139930],{},[570,139904,139905],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[570,139907,139908,139909,120624],{},"里面的布局利用 自定义列表来实现（",[31,139910,139911],{},"dl > dt + dd",[570,139913,139439,139914,139917],{},[31,139915,139916],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[570,139919,139439,139920,139923,139924,18874,139926,139929],{},[31,139921,139922],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[31,139925,139922],{},[31,139927,139928],{},"dd","之间有些距离",[570,139931,139932],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139934,138778],{},[25,139936,139937],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,139938,139939,139945,139957],{"__ignoreMap":22},[34,139940,139941,139943],{"class":36,"line":37},[34,139942,52072],{"class":51761},[34,139944,16036],{"class":59},[34,139946,139947,139949,139951,139953,139955],{"class":36,"line":44},[34,139948,70931],{"class":63},[34,139950,51898],{"class":59},[34,139952,319],{"class":63},[34,139954,52017],{"class":63},[34,139956,1765],{"class":59},[34,139958,139959],{"class":36,"line":50},[34,139960,2036],{"class":59},[14,139962,138818],{},[25,139964,139965],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,139966,139967,139973,139985],{"__ignoreMap":22},[34,139968,139969,139971],{"class":36,"line":37},[34,139970,52072],{"class":51761},[34,139972,16036],{"class":59},[34,139974,139975,139977,139979,139981,139983],{"class":36,"line":44},[34,139976,70931],{"class":63},[34,139978,51898],{"class":59},[34,139980,319],{"class":63},[34,139982,52017],{"class":63},[34,139984,1765],{"class":59},[34,139986,139987],{"class":36,"line":50},[34,139988,2036],{"class":59},[14,139990,139991],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1611,139993,139994,140003,140006,140017],{},[570,139995,139996,139997,139999,140000,140002],{},"分为上下两块，上面是 ",[31,139998,132159],{}," 友情链接，下面是 ",[31,140001,132152],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[570,140004,140005],{},"把内容分别复制到相应模块中",[570,140007,139439,140008,140010,140011,140013,140014,140016],{},[31,140009,132159],{}," 设置 15px 的下外边距，给",[31,140012,132159],{}," 里面 的 ",[31,140015,847],{}," 标签设置 左右 3px 的外边距",[570,140018,140019,140020,140022],{},"给",[31,140021,132152],{}," 设置 20px 的行高",[14,140024,138778],{},[25,140026,140027],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,140028,140029,140035,140047],{"__ignoreMap":22},[34,140030,140031,140033],{"class":36,"line":37},[34,140032,52072],{"class":51761},[34,140034,16036],{"class":59},[34,140036,140037,140039,140041,140043,140045],{"class":36,"line":44},[34,140038,70931],{"class":63},[34,140040,51898],{"class":59},[34,140042,319],{"class":63},[34,140044,52017],{"class":63},[34,140046,1765],{"class":59},[34,140048,140049],{"class":36,"line":50},[34,140050,2036],{"class":59},[14,140052,138818],{},[25,140054,140055],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,140056,140057,140063,140075],{"__ignoreMap":22},[34,140058,140059,140061],{"class":36,"line":37},[34,140060,52072],{"class":51761},[34,140062,16036],{"class":59},[34,140064,140065,140067,140069,140071,140073],{"class":36,"line":44},[34,140066,70931],{"class":63},[34,140068,51898],{"class":59},[34,140070,319],{"class":63},[34,140072,52017],{"class":63},[34,140074,1765],{"class":59},[34,140076,140077],{"class":36,"line":50},[34,140078,2036],{"class":59},[14,140080,140081],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[532,140083,140084],{},"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":22,"searchDepth":44,"depth":44,"links":140086},[140087,140088,140089,140096],{"id":138367,"depth":44,"text":138368},{"id":138386,"depth":44,"text":138387},{"id":138413,"depth":44,"text":138414,"children":140090},[140091,140092,140093,140094,140095],{"id":138417,"depth":50,"text":138418},{"id":138430,"depth":50,"text":138431},{"id":138454,"depth":50,"text":138455},{"id":138476,"depth":50,"text":138477},{"id":138548,"depth":50,"text":138549},{"id":138674,"depth":44,"text":138675,"children":140097},[140098,140099,140100,140101,140103],{"id":138678,"depth":50,"text":138679},{"id":138685,"depth":50,"text":138686},{"id":138857,"depth":50,"text":138858},{"id":139398,"depth":50,"text":140102},"15.4.4 nav导航模块制作",{"id":139696,"depth":50,"text":139697},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138359,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140110,"title":140111,"body":140112,"description":537,"extension":538,"meta":142514,"navigation":540,"path":142515,"seo":142516,"stem":142517,"__hash__":142518},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140113,"toc":142491},[140114,140117,140121,140125,140137,140140,140143,140146,140157,140159,140183,140185,140209,140214,140217,140219,140255,140257,140293,140296,140301,140304,140307,140310,140340,140347,140350,140360,140362,140396,140399,140433,140439,140456,140458,140494,140496,140532,140537,140562,140564,140590,140592,140616,140623,140626,140690,140692,140734,140736,140776,140783,140788,140790,140820,140822,140852,140856,140859,140866,140878,140880,140906,140908,140932,140935,140937,140961,140967,140977,140979,141009,141011,141041,141048,141089,141091,141127,141129,141165,141169,141172,141175,141178,141184,141189,141192,141215,141218,141242,141245,141269,141274,141277,141280,141283,141286,141289,141363,141365,141395,141397,141427,141430,141433,141465,141469,141473,141487,141496,141499,141504,141506,141600,141602,141696,141719,141721,141745,141747,141771,141778,141781,141791,141793,141817,141822,141830,141832,141862,141867,141907,141909,141935,141937,141963,141967,141970,141975,141978,141982,141990,141997,142005,142007,142037,142039,142069,142077,142080,142083,142085,142115,142117,142147,142150,142155,142157,142181,142183,142207,142210,142295,142297,142321,142323,142347,142351,142353,142377,142379,142413,142417,142431,142434,142439,142442,142447,142450,142480,142488],[10,140115,140111],{"id":140116},"_16-品优购项目下篇-主体与页面开发",[555,140118,140120],{"id":140119},"_161-项目主体模块制作","16.1 项目主体模块制作",[584,140122,140124],{"id":140123},"_1611-首页制作","16.1.1 首页制作",[14,140126,140127,140129,140130,140132,140133,140136],{},[760,140128,102445],{}," 主体模块是 ",[760,140131,74519],{}," 里面专有的，注意需要新的样式文件 ",[760,140134,140135],{},"index.css，"," 就不要写在common.css中了",[20,140138],{"style":126795,"src":140139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[20,140141],{"style":126795,"src":140142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140144,140145],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1611,140147,140148,140151,140154],{},[570,140149,140150],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[570,140152,140153],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[570,140155,140156],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140158,138778],{},[25,140160,140161],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,140162,140163,140169,140179],{"__ignoreMap":22},[34,140164,140165,140167],{"class":36,"line":37},[34,140166,130787],{"class":2427},[34,140168,16036],{"class":59},[34,140170,140171,140173,140175,140177],{"class":36,"line":44},[34,140172,131419],{"class":63},[34,140174,51898],{"class":59},[34,140176,24200],{"class":63},[34,140178,1765],{"class":59},[34,140180,140181],{"class":36,"line":50},[34,140182,2036],{"class":59},[14,140184,138818],{},[25,140186,140187],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,140188,140189,140195,140205],{"__ignoreMap":22},[34,140190,140191,140193],{"class":36,"line":37},[34,140192,130787],{"class":2427},[34,140194,16036],{"class":59},[34,140196,140197,140199,140201,140203],{"class":36,"line":44},[34,140198,131419],{"class":63},[34,140200,51898],{"class":59},[34,140202,24200],{"class":63},[34,140204,1765],{"class":59},[34,140206,140207],{"class":36,"line":50},[34,140208,2036],{"class":59},[567,140210,140211],{},[570,140212,140213],{},"左侧focus模块制作",[20,140215],{"style":126795,"src":140216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140218,138778],{},[25,140220,140221],{"className":126939,"code":128262,"language":126941,"meta":22,"style":22},[31,140222,140223,140231,140241,140251],{"__ignoreMap":22},[34,140224,140225,140227,140229],{"class":36,"line":37},[34,140226,54282],{"class":51761},[34,140228,62361],{"class":2427},[34,140230,16036],{"class":59},[34,140232,140233,140235,140237,140239],{"class":36,"line":44},[34,140234,128277],{"class":63},[34,140236,51898],{"class":59},[34,140238,55350],{"class":63},[34,140240,1765],{"class":59},[34,140242,140243,140245,140247,140249],{"class":36,"line":50},[34,140244,71259],{"class":63},[34,140246,51898],{"class":59},[34,140248,55198],{"class":63},[34,140250,1765],{"class":59},[34,140252,140253],{"class":36,"line":56},[34,140254,2036],{"class":59},[14,140256,138818],{},[25,140258,140259],{"className":126939,"code":128262,"language":126941,"meta":22,"style":22},[31,140260,140261,140269,140279,140289],{"__ignoreMap":22},[34,140262,140263,140265,140267],{"class":36,"line":37},[34,140264,54282],{"class":51761},[34,140266,62361],{"class":2427},[34,140268,16036],{"class":59},[34,140270,140271,140273,140275,140277],{"class":36,"line":44},[34,140272,128277],{"class":63},[34,140274,51898],{"class":59},[34,140276,55350],{"class":63},[34,140278,1765],{"class":59},[34,140280,140281,140283,140285,140287],{"class":36,"line":50},[34,140282,71259],{"class":63},[34,140284,51898],{"class":59},[34,140286,55198],{"class":63},[34,140288,1765],{"class":59},[34,140290,140291],{"class":36,"line":56},[34,140292,2036],{"class":59},[14,140294,140295],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[567,140297,140298],{"start":44},[570,140299,140300],{},"右侧newsflash模块制作",[20,140302],{"style":126795,"src":140303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140305,140306],{},"右侧的模块 分为上中下三个盒子",[14,140308,140309],{},"结构代码：",[25,140311,140312],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,140313,140314],{"__ignoreMap":22},[34,140315,140316,140318,140320,140322,140324,140326,140328,140330,140332,140334,140336,140338],{"class":36,"line":37},[34,140317,1515],{"class":59},[34,140319,20],{"class":51761},[34,140321,55700],{"class":2427},[34,140323,447],{"class":59},[34,140325,134456],{"class":187},[34,140327,55708],{"class":2427},[34,140329,447],{"class":59},[34,140331,134463],{"class":187},[34,140333,134466],{"class":2427},[34,140335,447],{"class":59},[34,140337,134471],{"class":187},[34,140339,51768],{"class":59},[14,140341,140342,140343,140346],{},"1 号盒子为 ",[31,140344,140345],{},"news"," 新闻模块 高度为 165px",[20,140348],{"style":126795,"src":140349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140351,140352,140353,140356,140357],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[31,140354,140355],{},"news-hd","，下面是 ",[31,140358,140359],{},"news-bd",[14,140361,140309],{},[25,140363,140364],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,140365,140366,140370,140384,140388],{"__ignoreMap":22},[34,140367,140368],{"class":36,"line":37},[34,140369,131050],{"class":40},[34,140371,140372,140374,140376,140378,140380,140382],{"class":36,"line":44},[34,140373,1515],{"class":59},[34,140375,52072],{"class":51761},[34,140377,53947],{"class":2427},[34,140379,447],{"class":59},[34,140381,131063],{"class":187},[34,140383,51768],{"class":59},[34,140385,140386],{"class":36,"line":50},[34,140387,131070],{"class":59},[34,140389,140390,140392,140394],{"class":36,"line":56},[34,140391,52246],{"class":59},[34,140393,52072],{"class":51761},[34,140395,51768],{"class":59},[14,140397,140398],{},"样式代码：",[25,140400,140401],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,140402,140403,140407,140421,140425],{"__ignoreMap":22},[34,140404,140405],{"class":36,"line":37},[34,140406,131050],{"class":40},[34,140408,140409,140411,140413,140415,140417,140419],{"class":36,"line":44},[34,140410,1515],{"class":59},[34,140412,52072],{"class":51761},[34,140414,53947],{"class":2427},[34,140416,447],{"class":59},[34,140418,131063],{"class":187},[34,140420,51768],{"class":59},[34,140422,140423],{"class":36,"line":50},[34,140424,131070],{"class":59},[34,140426,140427,140429,140431],{"class":36,"line":56},[34,140428,52246],{"class":59},[34,140430,52072],{"class":51761},[34,140432,51768],{"class":59},[14,140434,140435,140436,140438],{},"上面是",[31,140437,140355],{},"，设置高度是 33px，设置下边框",[1611,140440,140441,140447],{},[570,140442,140443,140444,140446],{},"里面放一个",[31,140445,23374],{}," 标题",[570,140448,140449,140450,140452,140453,140455],{},"放一个a",[31,140451,103080],{},"，内容是 更多，然后让 ",[31,140454,847],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140457,140309],{},[25,140459,140460],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,140461,140462,140470,140480,140490],{"__ignoreMap":22},[34,140463,140464,140466,140468],{"class":36,"line":37},[34,140465,52072],{"class":51761},[34,140467,137940],{"class":2427},[34,140469,16036],{"class":59},[34,140471,140472,140474,140476,140478],{"class":36,"line":44},[34,140473,137947],{"class":63},[34,140475,51898],{"class":59},[34,140477,8116],{"class":187},[34,140479,1765],{"class":59},[34,140481,140482,140484,140486,140488],{"class":36,"line":50},[34,140483,128555],{"class":63},[34,140485,51898],{"class":59},[34,140487,61330],{"class":63},[34,140489,1765],{"class":59},[34,140491,140492],{"class":36,"line":56},[34,140493,2036],{"class":59},[14,140495,140398],{},[25,140497,140498],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,140499,140500,140508,140518,140528],{"__ignoreMap":22},[34,140501,140502,140504,140506],{"class":36,"line":37},[34,140503,52072],{"class":51761},[34,140505,137940],{"class":2427},[34,140507,16036],{"class":59},[34,140509,140510,140512,140514,140516],{"class":36,"line":44},[34,140511,137947],{"class":63},[34,140513,51898],{"class":59},[34,140515,8116],{"class":187},[34,140517,1765],{"class":59},[34,140519,140520,140522,140524,140526],{"class":36,"line":50},[34,140521,128555],{"class":63},[34,140523,51898],{"class":59},[34,140525,61330],{"class":63},[34,140527,1765],{"class":59},[34,140529,140530],{"class":36,"line":56},[34,140531,2036],{"class":59},[14,140533,140534,140535],{},"下面是",[31,140536,140359],{},[1611,140538,140539,140547],{},[570,140540,140541,140542,101405,140544,140546],{},"里面包含 ",[31,140543,1611],{},[31,140545,570],{}," 还有链接",[570,140548,140019,140549,140551,140552,140554,140555,140558,140559],{},[31,140550,570],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[31,140553,131605],{}," 2.设置 ",[31,140556,140557],{},"white-space: nowrap;"," 3. 设置 ",[31,140560,140561],{},"text-overflow: ellipsis;",[14,140563,140309],{},[25,140565,140567],{"className":126939,"code":140566,"language":126941,"meta":22,"style":22},"div {\n  overflow: hidden;\n}\n",[31,140568,140569,140575,140586],{"__ignoreMap":22},[34,140570,140571,140573],{"class":36,"line":37},[34,140572,52072],{"class":51761},[34,140574,16036],{"class":59},[34,140576,140577,140580,140582,140584],{"class":36,"line":44},[34,140578,140579],{"class":63},"  overflow",[34,140581,51898],{"class":59},[34,140583,62175],{"class":63},[34,140585,1765],{"class":59},[34,140587,140588],{"class":36,"line":50},[34,140589,2036],{"class":59},[14,140591,140398],{},[25,140593,140594],{"className":126939,"code":140566,"language":126941,"meta":22,"style":22},[31,140595,140596,140602,140612],{"__ignoreMap":22},[34,140597,140598,140600],{"class":36,"line":37},[34,140599,52072],{"class":51761},[34,140601,16036],{"class":59},[34,140603,140604,140606,140608,140610],{"class":36,"line":44},[34,140605,140579],{"class":63},[34,140607,51898],{"class":59},[34,140609,62175],{"class":63},[34,140611,1765],{"class":59},[34,140613,140614],{"class":36,"line":50},[34,140615,2036],{"class":59},[14,140617,140618,140619,140622],{},"2 号盒子为 ",[31,140620,140621],{},"lifeservice"," 生活服务模块 高度为 209px",[20,140624],{"style":126795,"src":140625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1611,140627,140628,140631,140641,140665,140676],{},[570,140629,140630],{},"设置边框（左右下边框）",[570,140632,140633,140634,140637,140638,140640],{},"里面的内容 是 ",[31,140635,140636],{},"ul > 12*li","，给",[31,140639,570],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[570,140642,140643,140644],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1611,140645,140646,140651,140660],{},[570,140647,140648,140650],{},[31,140649,140621],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[570,140652,140653,140654,140656,140657,140659],{},"可以让 ",[31,140655,140621],{}," 里面的 ",[31,140658,1611],{}," 宽度为 252，就可以装的下 4 个 小 li",[570,140661,140662,140664],{},[31,140663,140621],{}," 盒子 overflow 隐藏多余的部分就可以了",[570,140666,116854,140667,140669,140670,140672,140673,140675],{},[31,140668,570],{}," 里面放一个 ",[31,140671,1048],{},"（里面放图标），下面的文本用 ",[31,140674,14],{}," 标签包裹",[570,140677,139439,140678,140680,140681,140683,140684,139473,140686,140689],{},[31,140679,1048],{}," 设置 24px宽和28px的高（注意 ",[31,140682,1048],{}," 是行内元素， 转成行内块），给 ",[31,140685,570],{},[31,140687,140688],{},"text-align:center"," 让里面内容居中显示",[14,140691,140309],{},[25,140693,140695],{"className":126939,"code":140694,"language":126941,"meta":22,"style":22},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[31,140696,140697,140715,140720,140730],{"__ignoreMap":22},[34,140698,140699,140701,140703,140705,140707,140709,140711,140713],{"class":36,"line":37},[34,140700,34],{"class":51761},[34,140702,12899],{"class":59},[34,140704,847],{"class":51761},[34,140706,12899],{"class":59},[34,140708,24017],{"class":51761},[34,140710,12899],{"class":59},[34,140712,760],{"class":51761},[34,140714,16036],{"class":59},[34,140716,140717],{"class":36,"line":44},[34,140718,140719],{"class":40},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[34,140721,140722,140724,140726,140728],{"class":36,"line":50},[34,140723,128555],{"class":63},[34,140725,51898],{"class":59},[34,140727,128617],{"class":63},[34,140729,1765],{"class":59},[34,140731,140732],{"class":36,"line":56},[34,140733,2036],{"class":59},[14,140735,140398],{},[25,140737,140738],{"className":126939,"code":140694,"language":126941,"meta":22,"style":22},[31,140739,140740,140758,140762,140772],{"__ignoreMap":22},[34,140741,140742,140744,140746,140748,140750,140752,140754,140756],{"class":36,"line":37},[34,140743,34],{"class":51761},[34,140745,12899],{"class":59},[34,140747,847],{"class":51761},[34,140749,12899],{"class":59},[34,140751,24017],{"class":51761},[34,140753,12899],{"class":59},[34,140755,760],{"class":51761},[34,140757,16036],{"class":59},[34,140759,140760],{"class":36,"line":44},[34,140761,140719],{"class":40},[34,140763,140764,140766,140768,140770],{"class":36,"line":50},[34,140765,128555],{"class":63},[34,140767,51898],{"class":59},[34,140769,128617],{"class":63},[34,140771,1765],{"class":59},[34,140773,140774],{"class":36,"line":56},[34,140775,2036],{"class":59},[14,140777,140778,140779,140782],{},"3 号盒子为 ",[31,140780,140781],{},"bargain"," 特价商品",[1611,140784,140785],{},[570,140786,140787],{},"这个比较简单，直接插入一张图片即可",[14,140789,140309],{},[25,140791,140792],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,140793,140794],{"__ignoreMap":22},[34,140795,140796,140798,140800,140802,140804,140806,140808,140810,140812,140814,140816,140818],{"class":36,"line":37},[34,140797,1515],{"class":59},[34,140799,20],{"class":51761},[34,140801,55700],{"class":2427},[34,140803,447],{"class":59},[34,140805,134456],{"class":187},[34,140807,55708],{"class":2427},[34,140809,447],{"class":59},[34,140811,134463],{"class":187},[34,140813,134466],{"class":2427},[34,140815,447],{"class":59},[34,140817,134471],{"class":187},[34,140819,51768],{"class":59},[14,140821,140398],{},[25,140823,140824],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,140825,140826],{"__ignoreMap":22},[34,140827,140828,140830,140832,140834,140836,140838,140840,140842,140844,140846,140848,140850],{"class":36,"line":37},[34,140829,1515],{"class":59},[34,140831,20],{"class":51761},[34,140833,55700],{"class":2427},[34,140835,447],{"class":59},[34,140837,134456],{"class":187},[34,140839,55708],{"class":2427},[34,140841,447],{"class":59},[34,140843,134463],{"class":187},[34,140845,134466],{"class":2427},[34,140847,447],{"class":59},[34,140849,134471],{"class":187},[34,140851,51768],{"class":59},[584,140853,140855],{"id":140854},"_1612-推荐模块制作","16.1.2 推荐模块制作",[20,140857],{"style":126795,"src":140858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140860,140861,140862,140865],{},"大盒子 ",[31,140863,140864],{},"recom"," 推荐模块 recommend",[1611,140867,140868],{},[570,140869,140870,140871,140873,140874,140877],{},"给这个 ",[31,140872,140864],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[31,140875,140876],{},"#ebebeb","），设置距离上边 12px",[14,140879,140309],{},[25,140881,140883],{"className":126939,"code":140882,"language":126941,"meta":22,"style":22},"div {\n  background-color: #f0f0f0;\n}\n",[31,140884,140885,140891,140902],{"__ignoreMap":22},[34,140886,140887,140889],{"class":36,"line":37},[34,140888,52072],{"class":51761},[34,140890,16036],{"class":59},[34,140892,140893,140895,140897,140900],{"class":36,"line":44},[34,140894,71339],{"class":63},[34,140896,51898],{"class":59},[34,140898,140899],{"class":63},"#f0f0f0",[34,140901,1765],{"class":59},[34,140903,140904],{"class":36,"line":50},[34,140905,2036],{"class":59},[14,140907,140398],{},[25,140909,140910],{"className":126939,"code":140882,"language":126941,"meta":22,"style":22},[31,140911,140912,140918,140928],{"__ignoreMap":22},[34,140913,140914,140916],{"class":36,"line":37},[34,140915,52072],{"class":51761},[34,140917,16036],{"class":59},[34,140919,140920,140922,140924,140926],{"class":36,"line":44},[34,140921,71339],{"class":63},[34,140923,51898],{"class":59},[34,140925,140899],{"class":63},[34,140927,1765],{"class":59},[34,140929,140930],{"class":36,"line":50},[34,140931,2036],{"class":59},[14,140933,140934],{},"里面包含 2 个盒子， 浮动即可",[14,140936,140309],{},[25,140938,140939],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,140940,140941,140947,140957],{"__ignoreMap":22},[34,140942,140943,140945],{"class":36,"line":37},[34,140944,130787],{"class":2427},[34,140946,16036],{"class":59},[34,140948,140949,140951,140953,140955],{"class":36,"line":44},[34,140950,131419],{"class":63},[34,140952,51898],{"class":59},[34,140954,24200],{"class":63},[34,140956,1765],{"class":59},[34,140958,140959],{"class":36,"line":50},[34,140960,2036],{"class":59},[14,140962,140963,140964],{},"1 号盒子 ",[31,140965,140966],{},"recom_hd",[1611,140968,140969,140972],{},[570,140970,140971],{},"设置宽度205px，高度163px",[570,140973,140443,140974,140976],{},[31,140975,20],{},"标签，插入图片即可",[14,140978,140309],{},[25,140980,140981],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,140982,140983],{"__ignoreMap":22},[34,140984,140985,140987,140989,140991,140993,140995,140997,140999,141001,141003,141005,141007],{"class":36,"line":37},[34,140986,1515],{"class":59},[34,140988,20],{"class":51761},[34,140990,55700],{"class":2427},[34,140992,447],{"class":59},[34,140994,134456],{"class":187},[34,140996,55708],{"class":2427},[34,140998,447],{"class":59},[34,141000,134463],{"class":187},[34,141002,134466],{"class":2427},[34,141004,447],{"class":59},[34,141006,134471],{"class":187},[34,141008,51768],{"class":59},[14,141010,140398],{},[25,141012,141013],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,141014,141015],{"__ignoreMap":22},[34,141016,141017,141019,141021,141023,141025,141027,141029,141031,141033,141035,141037,141039],{"class":36,"line":37},[34,141018,1515],{"class":59},[34,141020,20],{"class":51761},[34,141022,55700],{"class":2427},[34,141024,447],{"class":59},[34,141026,134456],{"class":187},[34,141028,55708],{"class":2427},[34,141030,447],{"class":59},[34,141032,134463],{"class":187},[34,141034,134466],{"class":2427},[34,141036,447],{"class":59},[34,141038,134471],{"class":187},[34,141040,51768],{"class":59},[14,141042,141043,141044,141047],{},"2 号盒子 ",[31,141045,141046],{},"recom_bd"," ，注意里面的小竖线",[1611,141049,141050,141061,141064,141069,141074],{},[570,141051,141052,141053,141055,141056,141058,141059],{},"右侧结构里面放 ",[31,141054,1611],{}," 包含 4个 ",[31,141057,570],{},"，每个li里面包含一个",[31,141060,20],{},[570,141062,141063],{},"直接利用切片工具把里面的内容当成一张图片",[570,141065,139439,141066,141068],{},[31,141067,570],{}," 设置浮动",[570,141070,139439,141071,141073],{},[31,141072,20],{}," 设置宽高，宽度 248px，高度 163px",[570,141075,141076,141077,140637,141080,141082,141083,141085,141086],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[31,141078,141079],{},"top 10px",[31,141081,570],{},"设置相对定位（注意，最后一个",[31,141084,570],{},"不用设置伪元素），可以利用 ",[31,141087,141088],{},"nth-child(-n+3){...}",[14,141090,140309],{},[25,141092,141093],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,141094,141095,141103,141113,141123],{"__ignoreMap":22},[34,141096,141097,141099,141101],{"class":36,"line":37},[34,141098,52072],{"class":51761},[34,141100,137940],{"class":2427},[34,141102,16036],{"class":59},[34,141104,141105,141107,141109,141111],{"class":36,"line":44},[34,141106,137947],{"class":63},[34,141108,51898],{"class":59},[34,141110,8116],{"class":187},[34,141112,1765],{"class":59},[34,141114,141115,141117,141119,141121],{"class":36,"line":50},[34,141116,128555],{"class":63},[34,141118,51898],{"class":59},[34,141120,61330],{"class":63},[34,141122,1765],{"class":59},[34,141124,141125],{"class":36,"line":56},[34,141126,2036],{"class":59},[14,141128,140398],{},[25,141130,141131],{"className":126939,"code":138781,"language":126941,"meta":22,"style":22},[31,141132,141133,141141,141151,141161],{"__ignoreMap":22},[34,141134,141135,141137,141139],{"class":36,"line":37},[34,141136,52072],{"class":51761},[34,141138,137940],{"class":2427},[34,141140,16036],{"class":59},[34,141142,141143,141145,141147,141149],{"class":36,"line":44},[34,141144,137947],{"class":63},[34,141146,51898],{"class":59},[34,141148,8116],{"class":187},[34,141150,1765],{"class":59},[34,141152,141153,141155,141157,141159],{"class":36,"line":50},[34,141154,128555],{"class":63},[34,141156,51898],{"class":59},[34,141158,61330],{"class":63},[34,141160,1765],{"class":59},[34,141162,141163],{"class":36,"line":56},[34,141164,2036],{"class":59},[584,141166,141168],{"id":141167},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[20,141170],{"style":126795,"src":141171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141173,141174],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141176,141177],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141179,141180,141183],{},[31,141181,141182],{},"box_hd"," 制作",[14,141185,140963,141186,141188],{},[31,141187,141182],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[20,141190],{"style":126795,"src":141191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1611,141193,141194,141199,141204,141207],{},[570,141195,141196,141198],{},[31,141197,141182],{}," 给 30px 的高度，2个像素的下边框",[570,141200,141201,141202],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[31,141203,139450],{},[570,141205,141206],{},"左侧盒左浮动，右侧盒子右浮动",[570,141208,141209,141211,141212,141214],{},[31,141210,847],{},"标签之间的距离用左右的",[31,141213,31346],{},"撑开即可",[14,141216,141217],{},"结构代码",[25,141219,141220],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,141221,141222,141228,141238],{"__ignoreMap":22},[34,141223,141224,141226],{"class":36,"line":37},[34,141225,130787],{"class":2427},[34,141227,16036],{"class":59},[34,141229,141230,141232,141234,141236],{"class":36,"line":44},[34,141231,131419],{"class":63},[34,141233,51898],{"class":59},[34,141235,24200],{"class":63},[34,141237,1765],{"class":59},[34,141239,141240],{"class":36,"line":50},[34,141241,2036],{"class":59},[14,141243,141244],{},"样式代码",[25,141246,141247],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,141248,141249,141255,141265],{"__ignoreMap":22},[34,141250,141251,141253],{"class":36,"line":37},[34,141252,130787],{"class":2427},[34,141254,16036],{"class":59},[34,141256,141257,141259,141261,141263],{"class":36,"line":44},[34,141258,131419],{"class":63},[34,141260,51898],{"class":59},[34,141262,24200],{"class":63},[34,141264,1765],{"class":59},[34,141266,141267],{"class":36,"line":50},[34,141268,2036],{"class":59},[14,141270,141271,141183],{},[31,141272,141273],{},"box_bd",[14,141275,141276],{},"2 号盒子 box_bd，不要给高度",[20,141278],{"style":126795,"src":141279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141281,141282],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141284,141285],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141287,141288],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1611,141290,141291,141303,141319],{},[570,141292,141293,141295,141296,141299,141300,141302],{},[31,141294,141273],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[31,141297,141298],{},"tab_content","，在",[31,141301,141298],{}," 里面包裹tab选项卡对应的内容",[570,141304,141305,141306,141309,141310,141312,141313,141315,141316,141318],{},"内容被一个大盒子包裹（",[31,141307,141308],{},"tab_list_item","），里面是 ",[31,141311,1611],{}," 包裹 5个 ",[31,141314,570],{},"，每个",[31,141317,570],{},"设置对应的宽度，然后设置浮动",[570,141320,141321,141322,141324,141325,141327,141328],{},"而这5个",[31,141323,570],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[31,141326,570],{},"设置",[1611,141329,141330,141348,141351],{},[570,141331,141332,141333,141335,141336,141338,141339,141341,141342,141344,141345,141347],{},"第一个小 ",[31,141334,570],{}," 分为上下结构，上面是 ",[31,141337,1611],{}," 包裹 ",[31,141340,570],{}," ，",[31,141343,570],{},"里面包裹 ",[31,141346,847],{},"，下面插入一张图片",[570,141349,141350],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[570,141352,141353,141354,141356,141357,141359,141360,141362],{},"后面的小 ",[31,141355,570],{}," 里面先放一个",[31,141358,847],{},"标签，然后在",[31,141361,847],{},"标签里面插入图片即可",[14,141364,141217],{},[25,141366,141367],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,141368,141369],{"__ignoreMap":22},[34,141370,141371,141373,141375,141377,141379,141381,141383,141385,141387,141389,141391,141393],{"class":36,"line":37},[34,141372,1515],{"class":59},[34,141374,20],{"class":51761},[34,141376,55700],{"class":2427},[34,141378,447],{"class":59},[34,141380,134456],{"class":187},[34,141382,55708],{"class":2427},[34,141384,447],{"class":59},[34,141386,134463],{"class":187},[34,141388,134466],{"class":2427},[34,141390,447],{"class":59},[34,141392,134471],{"class":187},[34,141394,51768],{"class":59},[14,141396,141244],{},[25,141398,141399],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,141400,141401],{"__ignoreMap":22},[34,141402,141403,141405,141407,141409,141411,141413,141415,141417,141419,141421,141423,141425],{"class":36,"line":37},[34,141404,1515],{"class":59},[34,141406,20],{"class":51761},[34,141408,55700],{"class":2427},[34,141410,447],{"class":59},[34,141412,134456],{"class":187},[34,141414,55708],{"class":2427},[34,141416,447],{"class":59},[34,141418,134463],{"class":187},[34,141420,134466],{"class":2427},[34,141422,447],{"class":59},[34,141424,134471],{"class":187},[34,141426,51768],{"class":59},[14,141428,141429],{},"tab栏切换需求！！！！！！介绍：",[20,141431],{"style":126795,"src":141432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1611,141434,141435,141443,141449,141452],{},[570,141436,141437,141440,141441],{},[31,141438,141439],{},"tab","栏的布局是 ",[31,141442,139450],{},[570,141444,141445,141446,141448],{},"有多少个",[31,141447,141439],{},"选项卡，那么对应就有多少个内容",[570,141450,141451],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[570,141453,141454,141455,141458,141459,141461,141462,141464],{},"等后面我们学习了",[31,141456,141457],{},"js","之后，我们就会配合",[31,141460,141457],{},"来实现，",[31,141463,141439],{},"栏的切换",[555,141466,141468],{"id":141467},"_162-列表制作","16.2 列表制作",[584,141470,141472],{"id":141471},"_1621-准备工作","16.2.1 准备工作",[1611,141474,141475,141478,141481,141484],{},[570,141476,141477],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[570,141479,141480],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[570,141482,141483],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[570,141485,141486],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[584,141488,141490,141491,101405,141493,141495],{"id":141489},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[31,141492,131944],{},[31,141494,54174],{}," 修改",[20,141497],{"style":126795,"src":141498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1611,141500,141501],{},[570,141502,141503],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141505,140309],{},[25,141507,141508],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,141509,141510,141514,141528,141532,141546,141550,141564,141568,141582,141586],{"__ignoreMap":22},[34,141511,141512],{"class":36,"line":37},[34,141513,132378],{"class":40},[34,141515,141516,141518,141520,141522,141524,141526],{"class":36,"line":44},[34,141517,132383],{"class":2427},[34,141519,80268],{"class":59},[34,141521,129299],{"class":63},[34,141523,51898],{"class":59},[34,141525,132392],{"class":63},[34,141527,129869],{"class":59},[34,141529,141530],{"class":36,"line":50},[34,141531,132399],{"class":40},[34,141533,141534,141536,141538,141540,141542,141544],{"class":36,"line":56},[34,141535,132404],{"class":2427},[34,141537,80268],{"class":59},[34,141539,129299],{"class":63},[34,141541,51898],{"class":59},[34,141543,55225],{"class":63},[34,141545,129869],{"class":59},[34,141547,141548],{"class":36,"line":107},[34,141549,132419],{"class":40},[34,141551,141552,141554,141556,141558,141560,141562],{"class":36,"line":196},[34,141553,132424],{"class":2427},[34,141555,80268],{"class":59},[34,141557,129299],{"class":63},[34,141559,51898],{"class":59},[34,141561,55292],{"class":63},[34,141563,129869],{"class":59},[34,141565,141566],{"class":36,"line":202},[34,141567,132439],{"class":40},[34,141569,141570,141572,141574,141576,141578,141580],{"class":36,"line":207},[34,141571,132444],{"class":2427},[34,141573,80268],{"class":59},[34,141575,129299],{"class":63},[34,141577,51898],{"class":59},[34,141579,86694],{"class":63},[34,141581,129869],{"class":59},[34,141583,141584],{"class":36,"line":222},[34,141585,132459],{"class":40},[34,141587,141588,141590,141592,141594,141596,141598],{"class":36,"line":227},[34,141589,132464],{"class":2427},[34,141591,80268],{"class":59},[34,141593,129299],{"class":63},[34,141595,51898],{"class":59},[34,141597,132473],{"class":63},[34,141599,129869],{"class":59},[14,141601,140398],{},[25,141603,141604],{"className":126939,"code":132371,"language":126941,"meta":22,"style":22},[31,141605,141606,141610,141624,141628,141642,141646,141660,141664,141678,141682],{"__ignoreMap":22},[34,141607,141608],{"class":36,"line":37},[34,141609,132378],{"class":40},[34,141611,141612,141614,141616,141618,141620,141622],{"class":36,"line":44},[34,141613,132383],{"class":2427},[34,141615,80268],{"class":59},[34,141617,129299],{"class":63},[34,141619,51898],{"class":59},[34,141621,132392],{"class":63},[34,141623,129869],{"class":59},[34,141625,141626],{"class":36,"line":50},[34,141627,132399],{"class":40},[34,141629,141630,141632,141634,141636,141638,141640],{"class":36,"line":56},[34,141631,132404],{"class":2427},[34,141633,80268],{"class":59},[34,141635,129299],{"class":63},[34,141637,51898],{"class":59},[34,141639,55225],{"class":63},[34,141641,129869],{"class":59},[34,141643,141644],{"class":36,"line":107},[34,141645,132419],{"class":40},[34,141647,141648,141650,141652,141654,141656,141658],{"class":36,"line":196},[34,141649,132424],{"class":2427},[34,141651,80268],{"class":59},[34,141653,129299],{"class":63},[34,141655,51898],{"class":59},[34,141657,55292],{"class":63},[34,141659,129869],{"class":59},[34,141661,141662],{"class":36,"line":202},[34,141663,132439],{"class":40},[34,141665,141666,141668,141670,141672,141674,141676],{"class":36,"line":207},[34,141667,132444],{"class":2427},[34,141669,80268],{"class":59},[34,141671,129299],{"class":63},[34,141673,51898],{"class":59},[34,141675,86694],{"class":63},[34,141677,129869],{"class":59},[34,141679,141680],{"class":36,"line":222},[34,141681,132459],{"class":40},[34,141683,141684,141686,141688,141690,141692,141694],{"class":36,"line":227},[34,141685,132464],{"class":2427},[34,141687,80268],{"class":59},[34,141689,129299],{"class":63},[34,141691,51898],{"class":59},[34,141693,132473],{"class":63},[34,141695,129869],{"class":59},[1611,141697,141698,141709],{},[570,141699,141700,141701,141704,141705,101405,141707],{},"1 号盒子左侧浮动 ",[31,141702,141703],{},"sk_list"," 里面包含 ",[31,141706,1611],{},[31,141708,570],{},[570,141710,141711,141712,141704,141715,101405,141717],{},"2 号盒子左侧浮动 ",[31,141713,141714],{},"sk_con",[31,141716,1611],{},[31,141718,570],{},[14,141720,140309],{},[25,141722,141723],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,141724,141725,141731,141741],{"__ignoreMap":22},[34,141726,141727,141729],{"class":36,"line":37},[34,141728,130787],{"class":2427},[34,141730,16036],{"class":59},[34,141732,141733,141735,141737,141739],{"class":36,"line":44},[34,141734,131419],{"class":63},[34,141736,51898],{"class":59},[34,141738,24200],{"class":63},[34,141740,1765],{"class":59},[34,141742,141743],{"class":36,"line":50},[34,141744,2036],{"class":59},[14,141746,140398],{},[25,141748,141749],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,141750,141751,141757,141767],{"__ignoreMap":22},[34,141752,141753,141755],{"class":36,"line":37},[34,141754,130787],{"class":2427},[34,141756,16036],{"class":59},[34,141758,141759,141761,141763,141765],{"class":36,"line":44},[34,141760,131419],{"class":63},[34,141762,51898],{"class":59},[34,141764,24200],{"class":63},[34,141766,1765],{"class":59},[34,141768,141769],{"class":36,"line":50},[34,141770,2036],{"class":59},[584,141772,141774,141775],{"id":141773},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[31,141776,141777],{},"sk_container",[20,141779],{"style":126795,"src":141780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1611,141782,141783,141788],{},[570,141784,140963,141785,141787],{},[31,141786,141777],{}," 给宽度 1200，不要给高度",[570,141789,141790],{},"一定不要忘记清除浮动",[14,141792,140309],{},[25,141794,141795],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,141796,141797,141803,141813],{"__ignoreMap":22},[34,141798,141799,141801],{"class":36,"line":37},[34,141800,130787],{"class":2427},[34,141802,16036],{"class":59},[34,141804,141805,141807,141809,141811],{"class":36,"line":44},[34,141806,131419],{"class":63},[34,141808,51898],{"class":59},[34,141810,24200],{"class":63},[34,141812,1765],{"class":59},[34,141814,141815],{"class":36,"line":50},[34,141816,2036],{"class":59},[567,141818,141819],{},[570,141820,141821],{},"sk_hd制作",[1611,141823,141824],{},[570,141825,141043,141826,141829],{},[31,141827,141828],{},"sk_hd"," ，插入图片即可",[14,141831,140309],{},[25,141833,141834],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,141835,141836],{"__ignoreMap":22},[34,141837,141838,141840,141842,141844,141846,141848,141850,141852,141854,141856,141858,141860],{"class":36,"line":37},[34,141839,1515],{"class":59},[34,141841,20],{"class":51761},[34,141843,55700],{"class":2427},[34,141845,447],{"class":59},[34,141847,134456],{"class":187},[34,141849,55708],{"class":2427},[34,141851,447],{"class":59},[34,141853,134463],{"class":187},[34,141855,134466],{"class":2427},[34,141857,447],{"class":59},[34,141859,134471],{"class":187},[34,141861,51768],{"class":59},[567,141863,141864],{"start":44},[570,141865,141866],{},"sk_bd制作",[1611,141868,141869],{},[570,141870,141871,141872,141875,141876,101405,141878,141880],{},"3 号盒子 ",[31,141873,141874],{},"sk_bd"," ，里面包含很多的 ",[31,141877,1611],{},[31,141879,570],{},[1611,141881,141882,141891],{},[570,141883,141884,141885,141887,141888,141890],{},"当鼠标移入到 ",[31,141886,570],{}," 上面的时候显示红色的边框，在这里先给 ",[31,141889,570],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[570,141892,141893,141894,141896,141897,141899,141900,141903,141904,141906],{},"由于给每个 ",[31,141895,570],{}," 都设置了外边距，导致一行的最后一个 ",[31,141898,570],{}," 掉了下来，在这里我们利用 ",[31,141901,141902],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[31,141905,570],{},"，去掉外边距就好了",[14,141908,140309],{},[25,141910,141911],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,141912,141913,141919,141931],{"__ignoreMap":22},[34,141914,141915,141917],{"class":36,"line":37},[34,141916,52072],{"class":51761},[34,141918,16036],{"class":59},[34,141920,141921,141923,141925,141927,141929],{"class":36,"line":44},[34,141922,70931],{"class":63},[34,141924,51898],{"class":59},[34,141926,319],{"class":63},[34,141928,52017],{"class":63},[34,141930,1765],{"class":59},[34,141932,141933],{"class":36,"line":50},[34,141934,2036],{"class":59},[14,141936,140398],{},[25,141938,141939],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,141940,141941,141947,141959],{"__ignoreMap":22},[34,141942,141943,141945],{"class":36,"line":37},[34,141944,52072],{"class":51761},[34,141946,16036],{"class":59},[34,141948,141949,141951,141953,141955,141957],{"class":36,"line":44},[34,141950,70931],{"class":63},[34,141952,51898],{"class":59},[34,141954,319],{"class":63},[34,141956,52017],{"class":63},[34,141958,1765],{"class":59},[34,141960,141961],{"class":36,"line":50},[34,141962,2036],{"class":59},[555,141964,141966],{"id":141965},"_163-注册页面制作","16.3 注册页面制作",[20,141968],{"style":126795,"src":141969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141971,141972,141974],{},[760,141973,9489],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[20,141976],{"style":126795,"src":141977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[584,141979,141981],{"id":141980},"_1631-准备工作","16.3.1 准备工作",[1611,141983,141984,141987],{},[570,141985,141986],{},"创建register.html，引入 base.css，引入favicon图标",[570,141988,141989],{},"创建register.css ，在html页面进行引入",[584,141991,141993,141994,141996],{"id":141992},"_1632-header-头部实现","16.3.2 ",[31,141995,131944],{}," 头部实现",[1611,141998,141999,142002],{},[570,142000,142001],{},"整个内容用 版心 进行包裹",[570,142003,142004],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,142006,140309],{},[25,142008,142009],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,142010,142011],{"__ignoreMap":22},[34,142012,142013,142015,142017,142019,142021,142023,142025,142027,142029,142031,142033,142035],{"class":36,"line":37},[34,142014,1515],{"class":59},[34,142016,20],{"class":51761},[34,142018,55700],{"class":2427},[34,142020,447],{"class":59},[34,142022,134456],{"class":187},[34,142024,55708],{"class":2427},[34,142026,447],{"class":59},[34,142028,134463],{"class":187},[34,142030,134466],{"class":2427},[34,142032,447],{"class":59},[34,142034,134471],{"class":187},[34,142036,51768],{"class":59},[14,142038,140398],{},[25,142040,142041],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,142042,142043],{"__ignoreMap":22},[34,142044,142045,142047,142049,142051,142053,142055,142057,142059,142061,142063,142065,142067],{"class":36,"line":37},[34,142046,1515],{"class":59},[34,142048,20],{"class":51761},[34,142050,55700],{"class":2427},[34,142052,447],{"class":59},[34,142054,134456],{"class":187},[34,142056,55708],{"class":2427},[34,142058,447],{"class":59},[34,142060,134463],{"class":187},[34,142062,134466],{"class":2427},[34,142064,447],{"class":59},[34,142066,134471],{"class":187},[34,142068,51768],{"class":59},[584,142070,142072,142073,142076],{"id":142071},"_1633-registerarea-主体模块实现","16.3.3 ",[31,142074,142075],{},"registerarea"," 主体模块实现",[20,142078],{"style":126795,"src":142079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142081,142082],{},"整个大盒子 高度为 522px，设置4个边框",[14,142084,140309],{},[25,142086,142087],{"className":126939,"code":131096,"language":126941,"meta":22,"style":22},[31,142088,142089,142095,142111],{"__ignoreMap":22},[34,142090,142091,142093],{"class":36,"line":37},[34,142092,52072],{"class":51761},[34,142094,16036],{"class":59},[34,142096,142097,142099,142101,142103,142105,142107,142109],{"class":36,"line":44},[34,142098,71357],{"class":63},[34,142100,51898],{"class":59},[34,142102,64],{"class":63},[34,142104,51953],{"class":112},[34,142106,51982],{"class":63},[34,142108,130331],{"class":63},[34,142110,1765],{"class":59},[34,142112,142113],{"class":36,"line":50},[34,142114,2036],{"class":59},[14,142116,140398],{},[25,142118,142119],{"className":126939,"code":131096,"language":126941,"meta":22,"style":22},[31,142120,142121,142127,142143],{"__ignoreMap":22},[34,142122,142123,142125],{"class":36,"line":37},[34,142124,52072],{"class":51761},[34,142126,16036],{"class":59},[34,142128,142129,142131,142133,142135,142137,142139,142141],{"class":36,"line":44},[34,142130,71357],{"class":63},[34,142132,51898],{"class":59},[34,142134,64],{"class":63},[34,142136,51953],{"class":112},[34,142138,51982],{"class":63},[34,142140,130331],{"class":63},[34,142142,1765],{"class":59},[34,142144,142145],{"class":36,"line":50},[34,142146,2036],{"class":59},[14,142148,142149],{},"1号盒子 是一个 h3 标签，放标题",[1611,142151,142152],{},[570,142153,142154],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142156,140309],{},[25,142158,142159],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,142160,142161,142167,142177],{"__ignoreMap":22},[34,142162,142163,142165],{"class":36,"line":37},[34,142164,130787],{"class":2427},[34,142166,16036],{"class":59},[34,142168,142169,142171,142173,142175],{"class":36,"line":44},[34,142170,131419],{"class":63},[34,142172,51898],{"class":59},[34,142174,24200],{"class":63},[34,142176,1765],{"class":59},[34,142178,142179],{"class":36,"line":50},[34,142180,2036],{"class":59},[14,142182,140398],{},[25,142184,142185],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,142186,142187,142193,142203],{"__ignoreMap":22},[34,142188,142189,142191],{"class":36,"line":37},[34,142190,130787],{"class":2427},[34,142192,16036],{"class":59},[34,142194,142195,142197,142199,142201],{"class":36,"line":44},[34,142196,131419],{"class":63},[34,142198,51898],{"class":59},[34,142200,24200],{"class":63},[34,142202,1765],{"class":59},[34,142204,142205],{"class":36,"line":50},[34,142206,2036],{"class":59},[14,142208,142209],{},"2号盒子 里面放注册的内容",[1611,142211,142212,142215,142224,142238,142251,142254,142257,142275,142289],{},[570,142213,142214],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[570,142216,142217,142218,142220,142221,142223],{},"里面的内容利用 ",[31,142219,1611],{}," 包含 ",[31,142222,570],{}," 来实现的（不需要用表格）",[570,142225,139453,142226,142228,142229,142231,142232,142234,142235,142237],{},[31,142227,570],{}," 里面，左侧放 ",[31,142230,34070],{}," 标签， 中间放",[31,142233,54282],{}," 标签， 右侧放 ",[31,142236,34],{}," 提示信息",[570,142239,142240,142241,142243,142244,142246,142247,142250],{},"左侧 ",[31,142242,34070],{},"里面的文字都是右对齐，我们可以给",[31,142245,34070],{},"设置一个宽度（88px），然后利用",[31,142248,142249],{},"text-align"," 来设置右对齐",[570,142252,142253],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[570,142255,142256],{},"右侧 span修饰一下文字颜色",[570,142258,142259,142260],{},"提示信息的样式优化",[1611,142261,142262,142265,142268],{},[570,142263,142264],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[570,142266,142267],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[570,142269,142270,142271,142274],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[31,142272,142273],{},"vertical-algin"," 来设置 图片与文字对齐方式",[570,142276,142277,142278],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1611,142279,142280,142286],{},[570,142281,142282,142283,142285],{},"设置 ",[31,142284,24017],{}," 的 左右 12px 的内边距，设置一下文字颜色",[570,142287,142288],{},"分别设置 背景颜色",[570,142290,142291,142292,142294],{},"同意协议 和 完成注册 都是用 ",[31,142293,570],{}," 进行包裹",[14,142296,140309],{},[25,142298,142299],{"className":126939,"code":140882,"language":126941,"meta":22,"style":22},[31,142300,142301,142307,142317],{"__ignoreMap":22},[34,142302,142303,142305],{"class":36,"line":37},[34,142304,52072],{"class":51761},[34,142306,16036],{"class":59},[34,142308,142309,142311,142313,142315],{"class":36,"line":44},[34,142310,71339],{"class":63},[34,142312,51898],{"class":59},[34,142314,140899],{"class":63},[34,142316,1765],{"class":59},[34,142318,142319],{"class":36,"line":50},[34,142320,2036],{"class":59},[14,142322,140398],{},[25,142324,142325],{"className":126939,"code":140882,"language":126941,"meta":22,"style":22},[31,142326,142327,142333,142343],{"__ignoreMap":22},[34,142328,142329,142331],{"class":36,"line":37},[34,142330,52072],{"class":51761},[34,142332,16036],{"class":59},[34,142334,142335,142337,142339,142341],{"class":36,"line":44},[34,142336,71339],{"class":63},[34,142338,51898],{"class":59},[34,142340,140899],{"class":63},[34,142342,1765],{"class":59},[34,142344,142345],{"class":36,"line":50},[34,142346,2036],{"class":59},[584,142348,142350],{"id":142349},"_1634-底部实现","16.3.4 底部实现",[14,142352,140309],{},[25,142354,142355],{"className":126939,"code":140882,"language":126941,"meta":22,"style":22},[31,142356,142357,142363,142373],{"__ignoreMap":22},[34,142358,142359,142361],{"class":36,"line":37},[34,142360,52072],{"class":51761},[34,142362,16036],{"class":59},[34,142364,142365,142367,142369,142371],{"class":36,"line":44},[34,142366,71339],{"class":63},[34,142368,51898],{"class":59},[34,142370,140899],{"class":63},[34,142372,1765],{"class":59},[34,142374,142375],{"class":36,"line":50},[34,142376,2036],{"class":59},[14,142378,140398],{},[25,142380,142381],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,142382,142383,142387,142401,142405],{"__ignoreMap":22},[34,142384,142385],{"class":36,"line":37},[34,142386,131050],{"class":40},[34,142388,142389,142391,142393,142395,142397,142399],{"class":36,"line":44},[34,142390,1515],{"class":59},[34,142392,52072],{"class":51761},[34,142394,53947],{"class":2427},[34,142396,447],{"class":59},[34,142398,131063],{"class":187},[34,142400,51768],{"class":59},[34,142402,142403],{"class":36,"line":50},[34,142404,131070],{"class":59},[34,142406,142407,142409,142411],{"class":36,"line":56},[34,142408,52246],{"class":59},[34,142410,52072],{"class":51761},[34,142412,51768],{"class":59},[555,142414,142416],{"id":142415},"_164-项目总结","16.4 项目总结",[567,142418,142419,142422,142425,142428],{},[570,142420,142421],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[570,142423,142424],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[570,142426,142427],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[570,142429,142430],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[20,142432],{"style":126795,"src":142433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[567,142435,142436],{"start":107},[570,142437,142438],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[20,142440],{"style":126795,"src":142441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[567,142443,142444],{"start":196},[570,142445,142446],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[20,142448],{"style":126795,"src":142449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[25,142451,142452],{"className":127686,"code":137096,"language":127688,"meta":22,"style":22},[31,142453,142454],{"__ignoreMap":22},[34,142455,142456,142458,142460,142462,142464,142466,142468,142470,142472,142474,142476,142478],{"class":36,"line":37},[34,142457,1515],{"class":59},[34,142459,54282],{"class":51761},[34,142461,54285],{"class":2427},[34,142463,447],{"class":59},[34,142465,63160],{"class":187},[34,142467,15384],{"class":2427},[34,142469,447],{"class":59},[34,142471,137117],{"class":187},[34,142473,61481],{"class":2427},[34,142475,447],{"class":59},[34,142477,137124],{"class":187},[34,142479,51768],{"class":59},[567,142481,142482,142485],{"start":202},[570,142483,142484],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[570,142486,142487],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[532,142489,142490],{},"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":22,"searchDepth":44,"depth":44,"links":142492},[142493,142498,142505,142513],{"id":140119,"depth":44,"text":140120,"children":142494},[142495,142496,142497],{"id":140123,"depth":50,"text":140124},{"id":140854,"depth":50,"text":140855},{"id":141167,"depth":50,"text":141168},{"id":141467,"depth":44,"text":141468,"children":142499},[142500,142501,142503],{"id":141471,"depth":50,"text":141472},{"id":141489,"depth":50,"text":142502},"16.2.2 列表页 header 和 nav 修改",{"id":141773,"depth":50,"text":142504},"16.2.3 列表页主体 sk_container",{"id":141965,"depth":44,"text":141966,"children":142506},[142507,142508,142510,142512],{"id":141980,"depth":50,"text":141981},{"id":141992,"depth":50,"text":142509},"16.3.2 header 头部实现",{"id":142071,"depth":50,"text":142511},"16.3.3 registerarea 主体模块实现",{"id":142349,"depth":50,"text":142350},{"id":142415,"depth":44,"text":142416},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140111,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142520,"title":142521,"body":142522,"description":537,"extension":538,"meta":142630,"navigation":540,"path":142631,"seo":142632,"stem":142633,"__hash__":142634},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142523,"toc":142625},[142524,142527,142531,142534,142537,142546,142555,142559,142564,142571,142589,142592,142595,142598,142601,142604,142607,142610,142613,142616,142619,142622],[10,142525,142521],{"id":142526},"_17-web服务器与网站发布",[555,142528,142530],{"id":142529},"_171-web服务器","17.1 Web服务器",[14,142532,142533],{},"把自己网站上传到服务器上，可以让其他人访问",[20,142535],{"style":126795,"src":142536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142538,142539,142542,142543],{},[760,142540,142541],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[760,142544,142545],{},"Web 服务器等",[14,142547,142548,142549,101405,142552,26205],{},"根据服务器在网络中所在的位置不同，又可分为 ",[760,142550,142551],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[760,142553,142554],{},"远程服务器",[584,142556,142558],{"id":142557},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142560,142561],{},[760,142562,142563],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142565,142566,142567],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[847,142568,142569],{"href":142569,"rel":142570},"http:\u002F\u002Ffree.3v.do\u002F",[24329],[1611,142572,142573,142576,142579,142586],{},[570,142574,142575],{},"去免费空间网站注册账号。",[570,142577,142578],{},"记录下主机名、用户名、密码、域名。",[570,142580,142581,142582,142585],{},"利用 ",[31,142583,142584],{},"utftp"," 软件 上传网站到远程服务器",[570,142587,142588],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142590,142591],{},"使用软件上传，对上传软件文件进行解压",[20,142593],{"style":126795,"src":142594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[20,142596],{"style":126795,"src":142597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142599,142600],{},"输入刚刚申请的服务器账号信息：",[20,142602],{"style":126795,"src":142603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[20,142605],{"style":126795,"src":142606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[20,142608],{"style":126795,"src":142609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[20,142611],{"style":126795,"src":142612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142614,142615],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[20,142617],{"style":126795,"src":142618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142620,142621],{},"浏览器输入域名即可访问",[14,142623,142624],{},"首页一定必须是index",{"title":22,"searchDepth":44,"depth":44,"links":142626},[142627],{"id":142529,"depth":44,"text":142530,"children":142628},[142629],{"id":142557,"depth":50,"text":142558},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142521,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142636,"title":142637,"body":142638,"description":537,"extension":538,"meta":143565,"navigation":540,"path":143566,"seo":143567,"stem":143568,"__hash__":143569},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142639,"toc":143548},[142640,142643,142647,142650,142653,142664,142667,142671,142675,142680,142683,142686,142689,142692,142696,142722,142726,142730,142733,142736,142740,142773,142777,142780,142783,142847,142851,142855,142858,142861,142864,142868,142913,142917,142920,142950,142954,142958,142961,142964,142968,142971,143040,143043,143151,143153,143159,143163,143166,143169,143265,143268,143272,143296,143300,143303,143307,143310,143314,143317,143320,143323,143326,143330,143333,143336,143340,143344,143347,143350,143353,143356,143360,143363,143367,143370,143373,143418,143422,143426,143429,143432,143435,143467,143471,143474,143508,143512,143515,143545],[10,142641,142637],{"id":142642},"_18-2d动画与3d转换",[555,142644,142646],{"id":142645},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142648,142649],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142651,142652],{},"转换（transform）你可以简单理解为变形",[1611,142654,142655,142658,142661],{},[570,142656,142657],{},"移动：translate",[570,142659,142660],{},"旋转：rotate",[570,142662,142663],{},"缩放：scale",[20,142665],{"style":126795,"src":142666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[584,142668,142670],{"id":142669},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22462,142672,142674],{"id":142673},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142676,142677,142678],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[760,142679,133598],{},[20,142681],{"style":126795,"src":142682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142684,142685],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142687,142688],{},"对于行内元素无效",[14,142690,142691],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22462,142693,142695],{"id":142694},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[25,142697,142698],{"className":126939,"code":139128,"language":126941,"meta":22,"style":22},[31,142699,142700,142706,142718],{"__ignoreMap":22},[34,142701,142702,142704],{"class":36,"line":37},[34,142703,52072],{"class":51761},[34,142705,16036],{"class":59},[34,142707,142708,142710,142712,142714,142716],{"class":36,"line":44},[34,142709,70931],{"class":63},[34,142711,51898],{"class":59},[34,142713,319],{"class":63},[34,142715,52017],{"class":63},[34,142717,1765],{"class":59},[34,142719,142720],{"class":36,"line":50},[34,142721,2036],{"class":59},[584,142723,142725],{"id":142724},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22462,142727,142729],{"id":142728},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142731,142732],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[20,142734],{"style":126795,"src":142735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22462,142737,142739],{"id":142738},"_18122-旋转效果","18.1.2.2 旋转效果",[25,142741,142743],{"className":126939,"code":142742,"language":126941,"meta":22,"style":22},"div {\n  transform: rotate(45deg);\n}\n",[31,142744,142745,142751,142769],{"__ignoreMap":22},[34,142746,142747,142749],{"class":36,"line":37},[34,142748,52072],{"class":51761},[34,142750,16036],{"class":59},[34,142752,142753,142755,142757,142760,142762,142764,142767],{"class":36,"line":44},[34,142754,136923],{"class":63},[34,142756,51898],{"class":59},[34,142758,142759],{"class":63},"rotate",[34,142761,617],{"class":59},[34,142763,1136],{"class":63},[34,142765,142766],{"class":112},"deg",[34,142768,3183],{"class":59},[34,142770,142771],{"class":36,"line":50},[34,142772,2036],{"class":59},[22462,142774,142776],{"id":142775},"_18123-三角做法","18.1.2.3 三角做法",[14,142778,142779],{},"该下标当经过最外层大盒子时会实现向上反转",[20,142781],{"style":126795,"src":142782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[25,142784,142785],{"className":126939,"code":135459,"language":126941,"meta":22,"style":22},[31,142786,142787,142791,142797,142807,142817,142833,142843],{"__ignoreMap":22},[34,142788,142789],{"class":36,"line":37},[34,142790,135466],{"class":40},[34,142792,142793,142795],{"class":36,"line":44},[34,142794,135471],{"class":2427},[34,142796,16036],{"class":59},[34,142798,142799,142801,142803,142805],{"class":36,"line":50},[34,142800,71029],{"class":63},[34,142802,51898],{"class":59},[34,142804,319],{"class":63},[34,142806,1765],{"class":59},[34,142808,142809,142811,142813,142815],{"class":36,"line":56},[34,142810,71249],{"class":63},[34,142812,51898],{"class":59},[34,142814,319],{"class":63},[34,142816,1765],{"class":59},[34,142818,142819,142821,142823,142825,142827,142829,142831],{"class":36,"line":107},[34,142820,71357],{"class":63},[34,142822,51898],{"class":59},[34,142824,1053],{"class":63},[34,142826,51953],{"class":112},[34,142828,51982],{"class":63},[34,142830,64452],{"class":63},[34,142832,1765],{"class":59},[34,142834,142835,142837,142839,142841],{"class":36,"line":196},[34,142836,135514],{"class":63},[34,142838,51898],{"class":59},[34,142840,62830],{"class":63},[34,142842,1765],{"class":59},[34,142844,142845],{"class":36,"line":202},[34,142846,2036],{"class":59},[584,142848,142850],{"id":142849},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22462,142852,142854],{"id":142853},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142856,142857],{},"设置中心点",[20,142859],{"style":126795,"src":142860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142862,142863],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22462,142865,142867],{"id":142866},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[25,142869,142871],{"className":126939,"code":142870,"language":126941,"meta":22,"style":22},"\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",[31,142872,142873,142878,142884,142899,142904,142909],{"__ignoreMap":22},[34,142874,142875],{"class":36,"line":37},[34,142876,142877],{"class":40},"\u002F* 转换中心点 *\u002F\n",[34,142879,142880,142882],{"class":36,"line":44},[34,142881,52072],{"class":51761},[34,142883,16036],{"class":59},[34,142885,142886,142889,142891,142893,142895,142897],{"class":36,"line":50},[34,142887,142888],{"class":63},"  transform-origin",[34,142890,51898],{"class":59},[34,142892,52053],{"class":63},[34,142894,17608],{"class":63},[34,142896,130802],{"class":59},[34,142898,135612],{"class":40},[34,142900,142901],{"class":36,"line":56},[34,142902,142903],{"class":40},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[34,142905,142906],{"class":36,"line":107},[34,142907,142908],{"class":40},"  \u002F* transform-origin: left top; *\u002F\n",[34,142910,142911],{"class":36,"line":196},[34,142912,2036],{"class":59},[22462,142914,142916],{"id":142915},"_18133-旋转案例","18.1.3.3 旋转案例",[20,142918],{"style":126795,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[25,142921,142922],{"className":126939,"code":142742,"language":126941,"meta":22,"style":22},[31,142923,142924,142930,142946],{"__ignoreMap":22},[34,142925,142926,142928],{"class":36,"line":37},[34,142927,52072],{"class":51761},[34,142929,16036],{"class":59},[34,142931,142932,142934,142936,142938,142940,142942,142944],{"class":36,"line":44},[34,142933,136923],{"class":63},[34,142935,51898],{"class":59},[34,142937,142759],{"class":63},[34,142939,617],{"class":59},[34,142941,1136],{"class":63},[34,142943,142766],{"class":112},[34,142945,3183],{"class":59},[34,142947,142948],{"class":36,"line":50},[34,142949,2036],{"class":59},[584,142951,142953],{"id":142952},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22462,142955,142957],{"id":142956},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142959,142960],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[20,142962],{"style":126795,"src":142963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22462,142965,142967],{"id":142966},"_18142-分页按钮","18.1.4.2 分页按钮",[20,142969],{"style":126795,"src":142970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[25,142972,142974],{"className":126939,"code":142973,"language":126941,"meta":22,"style":22},"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",[31,142975,142976,142982,142998,143002,143006,143011,143017,143031,143036],{"__ignoreMap":22},[34,142977,142978,142980],{"class":36,"line":37},[34,142979,52072],{"class":51761},[34,142981,16036],{"class":59},[34,142983,142984,142986,142988,142991,142993,142996],{"class":36,"line":44},[34,142985,136923],{"class":63},[34,142987,51898],{"class":59},[34,142989,142990],{"class":63},"scale",[34,142992,617],{"class":59},[34,142994,142995],{"class":63},"1.2",[34,142997,3183],{"class":59},[34,142999,143000],{"class":36,"line":50},[34,143001,2036],{"class":59},[34,143003,143004],{"class":36,"line":56},[34,143005,136400],{"class":59},[34,143007,143008],{"class":36,"line":107},[34,143009,143010],{"class":40},"\u002F* 2D 缩放 *\u002F\n",[34,143012,143013,143015],{"class":36,"line":196},[34,143014,52072],{"class":51761},[34,143016,16036],{"class":59},[34,143018,143019,143021,143023,143025,143027,143029],{"class":36,"line":202},[34,143020,136923],{"class":63},[34,143022,51898],{"class":59},[34,143024,142990],{"class":63},[34,143026,617],{"class":59},[34,143028,142995],{"class":63},[34,143030,3183],{"class":59},[34,143032,143033],{"class":36,"line":207},[34,143034,143035],{"class":40},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[34,143037,143038],{"class":36,"line":222},[34,143039,2036],{"class":59},[14,143041,143042],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[25,143044,143046],{"className":126939,"code":143045,"language":126941,"meta":22,"style":22},"\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",[31,143047,143048,143053,143063,143084,143105,143109,143114,143120,143147],{"__ignoreMap":22},[34,143049,143050],{"class":36,"line":37},[34,143051,143052],{"class":40},"\u002F* 定义动画 *\u002F\n",[34,143054,143055,143058,143061],{"class":36,"line":44},[34,143056,143057],{"class":112},"@keyframes",[34,143059,143060],{"class":5680}," move",[34,143062,16036],{"class":59},[34,143064,143065,143068,143070,143072,143074,143077,143079,143081],{"class":36,"line":50},[34,143066,143067],{"class":2427},"  0%",[34,143069,80268],{"class":59},[34,143071,48595],{"class":63},[34,143073,51898],{"class":59},[34,143075,143076],{"class":63},"translateX",[34,143078,617],{"class":59},[34,143080,319],{"class":63},[34,143082,143083],{"class":59},"); }\n",[34,143085,143086,143089,143091,143093,143095,143097,143099,143101,143103],{"class":36,"line":56},[34,143087,143088],{"class":2427},"  100%",[34,143090,80268],{"class":59},[34,143092,48595],{"class":63},[34,143094,51898],{"class":59},[34,143096,143076],{"class":63},[34,143098,617],{"class":59},[34,143100,919],{"class":63},[34,143102,51953],{"class":112},[34,143104,143083],{"class":59},[34,143106,143107],{"class":36,"line":107},[34,143108,2036],{"class":59},[34,143110,143111],{"class":36,"line":196},[34,143112,143113],{"class":40},"\u002F* 调用动画 *\u002F\n",[34,143115,143116,143118],{"class":36,"line":202},[34,143117,52072],{"class":51761},[34,143119,16036],{"class":59},[34,143121,143122,143125,143127,143129,143131,143133,143135,143137,143139,143142,143145],{"class":36,"line":207},[34,143123,143124],{"class":63},"  animation",[34,143126,51898],{"class":59},[34,143128,135625],{"class":63},[34,143130,25583],{"class":63},[34,143132,1301],{"class":112},[34,143134,79141],{"class":63},[34,143136,4557],{"class":63},[34,143138,1301],{"class":112},[34,143140,143141],{"class":63}," infinite",[34,143143,143144],{"class":63}," alternate",[34,143146,1765],{"class":59},[34,143148,143149],{"class":36,"line":222},[34,143150,2036],{"class":59},[14,143152,143042],{},[25,143154,143157],{"className":143155,"code":143156,"language":5651},[5649],"\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",[31,143158,143156],{"__ignoreMap":22},[22462,143160,143162],{"id":143161},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143164,143165],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[20,143167],{"style":126795,"src":143168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[25,143170,143171],{"className":126939,"code":143045,"language":126941,"meta":22,"style":22},[31,143172,143173,143177,143185,143203,143223,143227,143231,143237,143261],{"__ignoreMap":22},[34,143174,143175],{"class":36,"line":37},[34,143176,143052],{"class":40},[34,143178,143179,143181,143183],{"class":36,"line":44},[34,143180,143057],{"class":112},[34,143182,143060],{"class":5680},[34,143184,16036],{"class":59},[34,143186,143187,143189,143191,143193,143195,143197,143199,143201],{"class":36,"line":50},[34,143188,143067],{"class":2427},[34,143190,80268],{"class":59},[34,143192,48595],{"class":63},[34,143194,51898],{"class":59},[34,143196,143076],{"class":63},[34,143198,617],{"class":59},[34,143200,319],{"class":63},[34,143202,143083],{"class":59},[34,143204,143205,143207,143209,143211,143213,143215,143217,143219,143221],{"class":36,"line":56},[34,143206,143088],{"class":2427},[34,143208,80268],{"class":59},[34,143210,48595],{"class":63},[34,143212,51898],{"class":59},[34,143214,143076],{"class":63},[34,143216,617],{"class":59},[34,143218,919],{"class":63},[34,143220,51953],{"class":112},[34,143222,143083],{"class":59},[34,143224,143225],{"class":36,"line":107},[34,143226,2036],{"class":59},[34,143228,143229],{"class":36,"line":196},[34,143230,143113],{"class":40},[34,143232,143233,143235],{"class":36,"line":202},[34,143234,52072],{"class":51761},[34,143236,16036],{"class":59},[34,143238,143239,143241,143243,143245,143247,143249,143251,143253,143255,143257,143259],{"class":36,"line":207},[34,143240,143124],{"class":63},[34,143242,51898],{"class":59},[34,143244,135625],{"class":63},[34,143246,25583],{"class":63},[34,143248,1301],{"class":112},[34,143250,79141],{"class":63},[34,143252,4557],{"class":63},[34,143254,1301],{"class":112},[34,143256,143141],{"class":63},[34,143258,143144],{"class":63},[34,143260,1765],{"class":59},[34,143262,143263],{"class":36,"line":222},[34,143264,2036],{"class":59},[14,143266,143267],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[584,143269,143271],{"id":143270},"_1823-知识点回顾","18.2.3 知识点回顾",[25,143273,143274],{"className":126939,"code":129108,"language":126941,"meta":22,"style":22},[31,143275,143276,143282,143292],{"__ignoreMap":22},[34,143277,143278,143280],{"class":36,"line":37},[34,143279,52072],{"class":51761},[34,143281,16036],{"class":59},[34,143283,143284,143286,143288,143290],{"class":36,"line":44},[34,143285,129121],{"class":63},[34,143287,51898],{"class":59},[34,143289,62197],{"class":63},[34,143291,1765],{"class":59},[34,143293,143294],{"class":36,"line":50},[34,143295,2036],{"class":59},[555,143297,143299],{"id":143298},"_183-3d-转换","18.3 3D 转换",[14,143301,143302],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[584,143304,143306],{"id":143305},"_1831-坐标轴认识","18.3.1 坐标轴认识",[20,143308],{"style":126795,"src":143309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[584,143311,143313],{"id":143312},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[20,143315],{"style":126795,"src":143316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143318,143319],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143321,143322],{},"translate3d的效果需要搭配透视perspective来使用",[20,143324],{"style":126795,"src":143325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[584,143327,143329],{"id":143328},"_1833-透视-perspective","18.3.3 透视 perspective",[20,143331],{"style":126795,"src":143332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143334,143335],{},"透视写在父盒子上，单位为像素",[584,143337,143339],{"id":143338},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22462,143341,143343],{"id":143342},"_18341-分开解释","18.3.4.1 分开解释",[20,143345],{"style":126795,"src":143346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[20,143348],{"style":126795,"src":143349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[20,143351],{"style":126795,"src":143352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143354,143355],{},"总结来说就是左手原则",[22462,143357,143359],{"id":143358},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[20,143361],{"style":126795,"src":143362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[584,143364,143366],{"id":143365},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[20,143368],{"style":126795,"src":143369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[20,143371],{"style":126795,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[25,143374,143376],{"className":126939,"code":143375,"language":126941,"meta":22,"style":22},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[31,143377,143378,143384,143397,143414],{"__ignoreMap":22},[34,143379,143380,143382],{"class":36,"line":37},[34,143381,52072],{"class":51761},[34,143383,16036],{"class":59},[34,143385,143386,143389,143391,143393,143395],{"class":36,"line":44},[34,143387,143388],{"class":63},"  perspective",[34,143390,51898],{"class":59},[34,143392,65535],{"class":63},[34,143394,51953],{"class":112},[34,143396,1765],{"class":59},[34,143398,143399,143401,143403,143406,143408,143410,143412],{"class":36,"line":50},[34,143400,136923],{"class":63},[34,143402,51898],{"class":59},[34,143404,143405],{"class":63},"rotateX",[34,143407,617],{"class":59},[34,143409,1136],{"class":63},[34,143411,142766],{"class":112},[34,143413,3183],{"class":59},[34,143415,143416],{"class":36,"line":56},[34,143417,2036],{"class":59},[584,143419,143421],{"id":143420},"_1836-案例","18.3.6 案例",[22462,143423,143425],{"id":143424},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[20,143427],{"style":126795,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[20,143430],{"style":126795,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[20,143433],{"style":126795,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[25,143436,143438],{"className":126939,"code":143437,"language":126941,"meta":22,"style":22},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[31,143439,143440,143445,143451,143463],{"__ignoreMap":22},[34,143441,143442],{"class":36,"line":37},[34,143443,143444],{"class":40},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[34,143446,143447,143449],{"class":36,"line":44},[34,143448,133936],{"class":2427},[34,143450,16036],{"class":59},[34,143452,143453,143455,143457,143459,143461],{"class":36,"line":50},[34,143454,143388],{"class":63},[34,143456,51898],{"class":59},[34,143458,65535],{"class":63},[34,143460,51953],{"class":112},[34,143462,1765],{"class":59},[34,143464,143465],{"class":36,"line":56},[34,143466,2036],{"class":59},[22462,143468,143470],{"id":143469},"_18362-3d导航栏","18.3.6.2 3D导航栏",[20,143472],{"style":126795,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[25,143475,143476],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,143477,143478,143482,143496,143500],{"__ignoreMap":22},[34,143479,143480],{"class":36,"line":37},[34,143481,131050],{"class":40},[34,143483,143484,143486,143488,143490,143492,143494],{"class":36,"line":44},[34,143485,1515],{"class":59},[34,143487,52072],{"class":51761},[34,143489,53947],{"class":2427},[34,143491,447],{"class":59},[34,143493,131063],{"class":187},[34,143495,51768],{"class":59},[34,143497,143498],{"class":36,"line":50},[34,143499,131070],{"class":59},[34,143501,143502,143504,143506],{"class":36,"line":56},[34,143503,52246],{"class":59},[34,143505,52072],{"class":51761},[34,143507,51768],{"class":59},[22462,143509,143511],{"id":143510},"_18363-旋转木马","18.3.6.3 旋转木马",[20,143513],{"style":126795,"src":143514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[25,143516,143517],{"className":126939,"code":142742,"language":126941,"meta":22,"style":22},[31,143518,143519,143525,143541],{"__ignoreMap":22},[34,143520,143521,143523],{"class":36,"line":37},[34,143522,52072],{"class":51761},[34,143524,16036],{"class":59},[34,143526,143527,143529,143531,143533,143535,143537,143539],{"class":36,"line":44},[34,143528,136923],{"class":63},[34,143530,51898],{"class":59},[34,143532,142759],{"class":63},[34,143534,617],{"class":59},[34,143536,1136],{"class":63},[34,143538,142766],{"class":112},[34,143540,3183],{"class":59},[34,143542,143543],{"class":36,"line":50},[34,143544,2036],{"class":59},[532,143546,143547],{},"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":22,"searchDepth":44,"depth":44,"links":143549},[143550,143557],{"id":142645,"depth":44,"text":142646,"children":143551},[143552,143553,143554,143555,143556],{"id":142669,"depth":50,"text":142670},{"id":142724,"depth":50,"text":142725},{"id":142849,"depth":50,"text":142850},{"id":142952,"depth":50,"text":142953},{"id":143270,"depth":50,"text":143271},{"id":143298,"depth":44,"text":143299,"children":143558},[143559,143560,143561,143562,143563,143564],{"id":143305,"depth":50,"text":143306},{"id":143312,"depth":50,"text":143313},{"id":143328,"depth":50,"text":143329},{"id":143338,"depth":50,"text":143339},{"id":143365,"depth":50,"text":143366},{"id":143420,"depth":50,"text":143421},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142637,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143571,"title":143572,"body":143573,"description":537,"extension":538,"meta":143776,"navigation":540,"path":143777,"seo":143778,"stem":143779,"__hash__":143780},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143574,"toc":143765},[143575,143578,143582,143585,143588,143592,143595,143598,143601,143605,143608,143612,143615,143619,143622,143626,143640,143644,143669,143672,143675,143692,143696,143700,143703,143706,143710,143713,143716,143734,143738,143741,143755,143759,143762],[10,143576,143572],{"id":143577},"_19-移动端基础-前缀现状与视口",[555,143579,143581],{"id":143580},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[20,143583],{"style":126795,"src":143584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143586,143587],{},"意思就是加个前缀，增加兼容性",[555,143589,143591],{"id":143590},"_192-移动端现状认识","19.2 移动端现状认识",[20,143593],{"style":126795,"src":143594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143596,143597],{},"调试方法：",[20,143599],{"style":126795,"src":143600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[555,143602,143604],{"id":143603},"_193-视口","19.3 视口",[14,143606,143607],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[584,143609,143611],{"id":143610},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[20,143613],{"style":126795,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[584,143616,143618],{"id":143617},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[20,143620],{"style":126795,"src":143621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[584,143623,143625],{"id":143624},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1611,143627,143628,143631,143634,143637],{},[570,143629,143630],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[570,143632,143633],{},"理想视口，对设备来讲，是最理想的视口尺寸",[570,143635,143636],{},"需要手动添写meta视口标签通知浏览器操作",[570,143638,143639],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[584,143641,143643],{"id":143642},"_1934-meta视口标签","19.3.4 meta视口标签",[25,143645,143647],{"className":127686,"code":143646,"language":127688,"meta":22,"style":22},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[31,143648,143649],{"__ignoreMap":22},[34,143650,143651,143653,143655,143657,143659,143661,143663,143665,143667],{"class":36,"line":37},[34,143652,1515],{"class":59},[34,143654,51805],{"class":51761},[34,143656,15384],{"class":2427},[34,143658,447],{"class":59},[34,143660,51852],{"class":187},[34,143662,51832],{"class":2427},[34,143664,447],{"class":59},[34,143666,51859],{"class":187},[34,143668,51768],{"class":59},[20,143670],{"style":126795,"src":143671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143673,143674],{},"标准视口设置：",[567,143676,143677,143680,143683,143686,143689],{},[570,143678,143679],{},"视口宽度和设备保持一致",[570,143681,143682],{},"视口的默认缩放比例1.0",[570,143684,143685],{},"不允许用户自行缩放",[570,143687,143688],{},"最大允许的缩放比例1.0",[570,143690,143691],{},"最小允许的缩放比例1.0",[584,143693,143695],{"id":143694},"_1935-二倍图","19.3.5 二倍图",[22462,143697,143699],{"id":143698},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[20,143701],{"style":126795,"src":143702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[20,143704],{"style":126795,"src":143705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22462,143707,143709],{"id":143708},"_19352-多倍图","19.3.5.2 多倍图",[20,143711],{"style":126795,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143714,143715],{},"二倍图法，代码如下：",[25,143717,143719],{"className":126939,"code":143718,"language":126941,"meta":22,"style":22},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[31,143720,143721,143726],{"__ignoreMap":22},[34,143722,143723],{"class":36,"line":37},[34,143724,143725],{"class":40},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[34,143727,143728,143731],{"class":36,"line":44},[34,143729,143730],{"class":51761},"background-size",[34,143732,143733],{"class":59},": 50% 50%;\n",[22462,143735,143737],{"id":143736},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[20,143739],{"style":126795,"src":143740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[567,143742,143743,143746,143749,143752],{},[570,143744,143745],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[570,143747,143748],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[570,143750,143751],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[570,143753,143754],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22462,143756,143758],{"id":143757},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[20,143760],{"style":126795,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[532,143763,143764],{},"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":22,"searchDepth":44,"depth":44,"links":143766},[143767,143768,143769],{"id":143580,"depth":44,"text":143581},{"id":143590,"depth":44,"text":143591},{"id":143603,"depth":44,"text":143604,"children":143770},[143771,143772,143773,143774,143775],{"id":143610,"depth":50,"text":143611},{"id":143617,"depth":50,"text":143618},{"id":143624,"depth":50,"text":143625},{"id":143642,"depth":50,"text":143643},{"id":143694,"depth":50,"text":143695},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143572,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143782,"title":143783,"body":143784,"description":537,"extension":538,"meta":144661,"navigation":540,"path":144662,"seo":144663,"stem":144664,"__hash__":144665},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143785,"toc":144645},[143786,143789,143793,143800,143803,143810,143813,143818,143821,143825,143829,143836,143839,143842,143846,143849,143852,143855,143858,143861,143865,143868,143872,143874,143877,143880,143883,143886,143888,143891,143893,143923,143925,143955,143959,143962,143966,143969,143986,143989,143992,144068,144070,144073,144076,144079,144082,144084,144087,144090,144094,144116,144119,144122,144126,144129,144135,144138,144142,144145,144148,144152,144155,144158,144161,144165,144168,144171,144174,144177,144181,144184,144188,144195,144198,144201,144204,144207,144217,144220,144223,144230,144233,144237,144240,144243,144247,144250,144253,144256,144301,144304,144307,144310,144312,144441,144443,144481,144484,144487,144489,144607,144609,144643],[10,143787,143783],{"id":143788},"_20-移动端布局实战上篇",[555,143790,143792],{"id":143791},"_201-移动端主流方案","20.1 移动端主流方案",[567,143794,143795],{},[570,143796,143797],{},[760,143798,143799],{},"单独移动端页面（主流）",[20,143801],{"style":126795,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[567,143804,143805],{"start":44},[570,143806,143807],{},[760,143808,143809],{},"响应式兼容PC移动端",[20,143811],{"style":126795,"src":143812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[567,143814,143815],{"start":50},[570,143816,143817],{},"两种页面选型布局方式",[20,143819],{"style":126795,"src":143820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[555,143822,143824],{"id":143823},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[584,143826,143828],{"id":143827},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143830,143831,143832],{},"官网地址： ",[847,143833,143834],{"href":143834,"rel":143835},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24329],[20,143837],{"style":126795,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[20,143840],{"style":126795,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[584,143843,143845],{"id":143844},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[20,143847],{"style":126795,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[20,143850],{"style":126795,"src":143851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143853,143854],{},"去除高亮：",[14,143856,143857],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143859,143860],{},"-webkit- tap-highlight-color: transparent;",[555,143862,143864],{"id":143863},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[20,143866],{"style":126795,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[555,143869,143871],{"id":143870},"_204-流式布局案例","20.4 流式布局案例",[14,143873,646],{},[14,143875,143876],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143878,143879],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143881,143882],{},"图片格式：",[20,143884],{"style":126795,"src":143885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143887,135982],{},[20,143889],{"style":126795,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143892,140309],{},[25,143894,143895],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,143896,143897],{"__ignoreMap":22},[34,143898,143899,143901,143903,143905,143907,143909,143911,143913,143915,143917,143919,143921],{"class":36,"line":37},[34,143900,1515],{"class":59},[34,143902,20],{"class":51761},[34,143904,55700],{"class":2427},[34,143906,447],{"class":59},[34,143908,134456],{"class":187},[34,143910,55708],{"class":2427},[34,143912,447],{"class":59},[34,143914,134463],{"class":187},[34,143916,134466],{"class":2427},[34,143918,447],{"class":59},[34,143920,134471],{"class":187},[34,143922,51768],{"class":59},[14,143924,140398],{},[25,143926,143927],{"className":127686,"code":134441,"language":127688,"meta":22,"style":22},[31,143928,143929],{"__ignoreMap":22},[34,143930,143931,143933,143935,143937,143939,143941,143943,143945,143947,143949,143951,143953],{"class":36,"line":37},[34,143932,1515],{"class":59},[34,143934,20],{"class":51761},[34,143936,55700],{"class":2427},[34,143938,447],{"class":59},[34,143940,134456],{"class":187},[34,143942,55708],{"class":2427},[34,143944,447],{"class":59},[34,143946,134463],{"class":187},[34,143948,134466],{"class":2427},[34,143950,447],{"class":59},[34,143952,134471],{"class":187},[34,143954,51768],{"class":59},[555,143956,143958],{"id":143957},"_205-flex布局","20.5 flex布局",[20,143960],{"style":126795,"src":143961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[584,143963,143965],{"id":143964},"_2051-布局原理","20.5.1 布局原理",[14,143967,143968],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1611,143970,143971,143974,143977,143980,143983],{},[570,143972,143973],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[570,143975,143976],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[570,143978,143979],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[570,143981,143982],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[570,143984,143985],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143987,143988],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143990,143991],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[25,143993,143995],{"className":126939,"code":143994,"language":126941,"meta":22,"style":22},"\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",[31,143996,143997,144002,144009,144019,144031,144042,144053,144064],{"__ignoreMap":22},[34,143998,143999],{"class":36,"line":37},[34,144000,144001],{"class":40},"\u002F* Flex 弹性布局 *\u002F\n",[34,144003,144004,144007],{"class":36,"line":44},[34,144005,144006],{"class":2427},".container",[34,144008,16036],{"class":59},[34,144010,144011,144013,144015,144017],{"class":36,"line":50},[34,144012,128555],{"class":63},[34,144014,51898],{"class":59},[34,144016,51938],{"class":63},[34,144018,1765],{"class":59},[34,144020,144021,144024,144026,144029],{"class":36,"line":56},[34,144022,144023],{"class":63},"  flex-direction",[34,144025,51898],{"class":59},[34,144027,144028],{"class":63},"row",[34,144030,1765],{"class":59},[34,144032,144033,144036,144038,144040],{"class":36,"line":107},[34,144034,144035],{"class":63},"  justify-content",[34,144037,51898],{"class":59},[34,144039,52129],{"class":63},[34,144041,1765],{"class":59},[34,144043,144044,144047,144049,144051],{"class":36,"line":196},[34,144045,144046],{"class":63},"  align-items",[34,144048,51898],{"class":59},[34,144050,52053],{"class":63},[34,144052,1765],{"class":59},[34,144054,144055,144058,144060,144062],{"class":36,"line":202},[34,144056,144057],{"class":63},"  flex-wrap",[34,144059,51898],{"class":59},[34,144061,79071],{"class":63},[34,144063,1765],{"class":59},[34,144065,144066],{"class":36,"line":207},[34,144067,2036],{"class":59},[14,144069,70914],{},[14,144071,144072],{},".form-item .male-label {",[14,144074,144075],{},"   margin-right: 20px;",[14,144077,144078],{},"   display: inline-flex;",[14,144080,144081],{},"   align-items: center;",[14,144083,1550],{},[20,144085],{"style":126795,"src":144086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[20,144088],{"style":126795,"src":144089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[584,144091,144093],{"id":144092},"_2052-常见父项属性","20.5.2 常见父项属性",[567,144095,144096,144099,144102,144105,144108,144111,144114],{},[570,144097,144098],{},"flex-direction：设置主轴的方向",[570,144100,144101],{},"justify-content：设置主轴上的子元素排列方式",[570,144103,144104],{},"flex-wrap：设置子元素是否换行",[570,144106,144107],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[570,144109,144110],{},"align-items：设置侧轴上的子元素排列方式（单行）",[570,144112,144113],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[570,144115,144098],{},[20,144117],{"style":126795,"src":144118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[20,144120],{"style":126795,"src":144121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[567,144123,144124],{"start":44},[570,144125,144101],{},[20,144127],{"style":126795,"src":144128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144130,144131,144134],{},[31,144132,144133],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144136,144137],{},"跟着主轴走",[567,144139,144140],{"start":50},[570,144141,144104],{},[20,144143],{"style":126795,"src":144144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144146,144147],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[567,144149,144150],{"start":56},[570,144151,144107],{},[20,144153],{"style":126795,"src":144154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144156,144157],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144159,144160],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[567,144162,144163],{"start":107},[570,144164,144110],{},[20,144166],{"style":126795,"src":144167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144169,144170],{},"align-items与align-content之间的区别：",[14,144172,144173],{},"单找items，多找content",[20,144175],{"style":126795,"src":144176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[567,144178,144179],{"start":196},[570,144180,144113],{},[20,144182],{"style":126795,"src":144183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[584,144185,144187],{"id":144186},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[567,144189,144190],{},[570,144191,144192],{},[760,144193,144194],{},"flex 属性",[14,144196,144197],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[20,144199],{"style":126795,"src":144200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144202,144203],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144205,144206],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[567,144208,144209],{"start":44},[570,144210,144211,14259,144214],{},[760,144212,144213],{},"align-self",[760,144215,144216],{},"控制子项自己在侧轴上的排列方式",[20,144218],{"style":126795,"src":144219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144221,144222],{},"单个子盒子在父盒子侧轴上的排列方式",[567,144224,144225],{"start":50},[570,144226,144227,144229],{},[760,144228,95756],{}," 属性定义项目的排列顺序",[20,144231],{"style":126795,"src":144232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[584,144234,144236],{"id":144235},"_2054-背景线性渐变","20.5.4 背景线性渐变",[20,144238],{"style":126795,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144241,144242],{},"必须要添加浏览器的私有前缀",[584,144244,144246],{"id":144245},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144248,144249],{},"学到最重要的知识：",[14,144251,144252],{},"flex处理这样的布局思路",[20,144254],{"style":126795,"src":144255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[25,144257,144259],{"className":126939,"code":144258,"language":126941,"meta":22,"style":22},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[31,144260,144261,144267,144277,144287,144297],{"__ignoreMap":22},[34,144262,144263,144265],{"class":36,"line":37},[34,144264,144006],{"class":2427},[34,144266,16036],{"class":59},[34,144268,144269,144271,144273,144275],{"class":36,"line":44},[34,144270,128555],{"class":63},[34,144272,51898],{"class":59},[34,144274,51938],{"class":63},[34,144276,1765],{"class":59},[34,144278,144279,144281,144283,144285],{"class":36,"line":50},[34,144280,144035],{"class":63},[34,144282,51898],{"class":59},[34,144284,52053],{"class":63},[34,144286,1765],{"class":59},[34,144288,144289,144291,144293,144295],{"class":36,"line":56},[34,144290,144046],{"class":63},[34,144292,51898],{"class":59},[34,144294,52053],{"class":63},[34,144296,1765],{"class":59},[34,144298,144299],{"class":36,"line":107},[34,144300,2036],{"class":59},[14,144302,144303],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144305,144306],{},"使用属性选择器",[20,144308],{"style":126795,"src":144309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144311,69350],{},[25,144313,144315],{"className":127686,"code":144314,"language":127688,"meta":22,"style":22},"\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",[31,144316,144317,144322,144336,144341,144361,144366,144385,144390,144409,144414,144433],{"__ignoreMap":22},[34,144318,144319],{"class":36,"line":37},[34,144320,144321],{"class":40},"\u003C!-- 携程网移动端案例结构 -->\n",[34,144323,144324,144326,144328,144330,144332,144334],{"class":36,"line":44},[34,144325,1515],{"class":59},[34,144327,52072],{"class":51761},[34,144329,53947],{"class":2427},[34,144331,447],{"class":59},[34,144333,92784],{"class":187},[34,144335,51768],{"class":59},[34,144337,144338],{"class":36,"line":50},[34,144339,144340],{"class":40},"  \u003C!-- 搜索栏 -->\n",[34,144342,144343,144345,144347,144349,144351,144354,144357,144359],{"class":36,"line":56},[34,144344,52605],{"class":59},[34,144346,52072],{"class":51761},[34,144348,53947],{"class":2427},[34,144350,447],{"class":59},[34,144352,144353],{"class":187},"\"search-index\"",[34,144355,144356],{"class":59},">...\u003C\u002F",[34,144358,52072],{"class":51761},[34,144360,51768],{"class":59},[34,144362,144363],{"class":36,"line":107},[34,144364,144365],{"class":40},"  \u003C!-- 焦点图 -->\n",[34,144367,144368,144370,144372,144374,144376,144379,144381,144383],{"class":36,"line":196},[34,144369,52605],{"class":59},[34,144371,52072],{"class":51761},[34,144373,53947],{"class":2427},[34,144375,447],{"class":59},[34,144377,144378],{"class":187},"\"focus\"",[34,144380,144356],{"class":59},[34,144382,52072],{"class":51761},[34,144384,51768],{"class":59},[34,144386,144387],{"class":36,"line":202},[34,144388,144389],{"class":40},"  \u003C!-- 主导航 -->\n",[34,144391,144392,144394,144396,144398,144400,144403,144405,144407],{"class":36,"line":207},[34,144393,52605],{"class":59},[34,144395,52072],{"class":51761},[34,144397,53947],{"class":2427},[34,144399,447],{"class":59},[34,144401,144402],{"class":187},"\"local-nav\"",[34,144404,144356],{"class":59},[34,144406,52072],{"class":51761},[34,144408,51768],{"class":59},[34,144410,144411],{"class":36,"line":222},[34,144412,144413],{"class":40},"  \u003C!-- 子导航 -->\n",[34,144415,144416,144418,144420,144422,144424,144427,144429,144431],{"class":36,"line":227},[34,144417,52605],{"class":59},[34,144419,52072],{"class":51761},[34,144421,53947],{"class":2427},[34,144423,447],{"class":59},[34,144425,144426],{"class":187},"\"nav-common\"",[34,144428,144356],{"class":59},[34,144430,52072],{"class":51761},[34,144432,51768],{"class":59},[34,144434,144435,144437,144439],{"class":36,"line":232},[34,144436,52246],{"class":59},[34,144438,52072],{"class":51761},[34,144440,51768],{"class":59},[14,144442,70914],{},[25,144444,144445],{"className":126939,"code":137391,"language":126941,"meta":22,"style":22},[31,144446,144447,144461,144477],{"__ignoreMap":22},[34,144448,144449,144451,144453,144455,144457,144459],{"class":36,"line":37},[34,144450,54282],{"class":51761},[34,144452,1495],{"class":59},[34,144454,103494],{"class":2427},[34,144456,447],{"class":112},[34,144458,63160],{"class":187},[34,144460,137408],{"class":59},[34,144462,144463,144465,144467,144469,144471,144473,144475],{"class":36,"line":44},[34,144464,71357],{"class":63},[34,144466,51898],{"class":59},[34,144468,64],{"class":63},[34,144470,51953],{"class":112},[34,144472,51982],{"class":63},[34,144474,130519],{"class":63},[34,144476,1765],{"class":59},[34,144478,144479],{"class":36,"line":50},[34,144480,2036],{"class":59},[14,144482,144483],{},"总代码和效果展示：",[20,144485],{"style":126795,"src":144486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144488,69350],{},[25,144490,144491],{"className":127686,"code":144314,"language":127688,"meta":22,"style":22},[31,144492,144493,144497,144511,144515,144533,144537,144555,144559,144577,144581,144599],{"__ignoreMap":22},[34,144494,144495],{"class":36,"line":37},[34,144496,144321],{"class":40},[34,144498,144499,144501,144503,144505,144507,144509],{"class":36,"line":44},[34,144500,1515],{"class":59},[34,144502,52072],{"class":51761},[34,144504,53947],{"class":2427},[34,144506,447],{"class":59},[34,144508,92784],{"class":187},[34,144510,51768],{"class":59},[34,144512,144513],{"class":36,"line":50},[34,144514,144340],{"class":40},[34,144516,144517,144519,144521,144523,144525,144527,144529,144531],{"class":36,"line":56},[34,144518,52605],{"class":59},[34,144520,52072],{"class":51761},[34,144522,53947],{"class":2427},[34,144524,447],{"class":59},[34,144526,144353],{"class":187},[34,144528,144356],{"class":59},[34,144530,52072],{"class":51761},[34,144532,51768],{"class":59},[34,144534,144535],{"class":36,"line":107},[34,144536,144365],{"class":40},[34,144538,144539,144541,144543,144545,144547,144549,144551,144553],{"class":36,"line":196},[34,144540,52605],{"class":59},[34,144542,52072],{"class":51761},[34,144544,53947],{"class":2427},[34,144546,447],{"class":59},[34,144548,144378],{"class":187},[34,144550,144356],{"class":59},[34,144552,52072],{"class":51761},[34,144554,51768],{"class":59},[34,144556,144557],{"class":36,"line":202},[34,144558,144389],{"class":40},[34,144560,144561,144563,144565,144567,144569,144571,144573,144575],{"class":36,"line":207},[34,144562,52605],{"class":59},[34,144564,52072],{"class":51761},[34,144566,53947],{"class":2427},[34,144568,447],{"class":59},[34,144570,144402],{"class":187},[34,144572,144356],{"class":59},[34,144574,52072],{"class":51761},[34,144576,51768],{"class":59},[34,144578,144579],{"class":36,"line":222},[34,144580,144413],{"class":40},[34,144582,144583,144585,144587,144589,144591,144593,144595,144597],{"class":36,"line":227},[34,144584,52605],{"class":59},[34,144586,52072],{"class":51761},[34,144588,53947],{"class":2427},[34,144590,447],{"class":59},[34,144592,144426],{"class":187},[34,144594,144356],{"class":59},[34,144596,52072],{"class":51761},[34,144598,51768],{"class":59},[34,144600,144601,144603,144605],{"class":36,"line":232},[34,144602,52246],{"class":59},[34,144604,52072],{"class":51761},[34,144606,51768],{"class":59},[14,144608,70914],{},[25,144610,144611],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,144612,144613,144617,144631,144635],{"__ignoreMap":22},[34,144614,144615],{"class":36,"line":37},[34,144616,131050],{"class":40},[34,144618,144619,144621,144623,144625,144627,144629],{"class":36,"line":44},[34,144620,1515],{"class":59},[34,144622,52072],{"class":51761},[34,144624,53947],{"class":2427},[34,144626,447],{"class":59},[34,144628,131063],{"class":187},[34,144630,51768],{"class":59},[34,144632,144633],{"class":36,"line":50},[34,144634,131070],{"class":59},[34,144636,144637,144639,144641],{"class":36,"line":56},[34,144638,52246],{"class":59},[34,144640,52072],{"class":51761},[34,144642,51768],{"class":59},[532,144644,138340],{},{"title":22,"searchDepth":44,"depth":44,"links":144646},[144647,144648,144652,144653,144654],{"id":143791,"depth":44,"text":143792},{"id":143823,"depth":44,"text":143824,"children":144649},[144650,144651],{"id":143827,"depth":50,"text":143828},{"id":143844,"depth":50,"text":143845},{"id":143863,"depth":44,"text":143864},{"id":143870,"depth":44,"text":143871},{"id":143957,"depth":44,"text":143958,"children":144655},[144656,144657,144658,144659,144660],{"id":143964,"depth":50,"text":143965},{"id":144092,"depth":50,"text":144093},{"id":144186,"depth":50,"text":144187},{"id":144235,"depth":50,"text":144236},{"id":144245,"depth":50,"text":144246},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143783,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144667,"title":144668,"body":144669,"description":537,"extension":538,"meta":145896,"navigation":540,"path":145897,"seo":145898,"stem":145899,"__hash__":145900},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144670,"toc":145874},[144671,144674,144678,144682,144685,144688,144692,144697,144700,144703,144706,144709,144712,144769,144772,144777,144780,144783,144787,144798,144802,144805,144808,144815,144820,144824,144827,144833,144836,144840,144843,144850,144853,144856,144863,144866,144873,144876,144879,144886,144889,144892,144894,144911,144915,144918,144921,144924,144928,144931,144934,144937,144940,144943,144946,144948,144951,144954,145016,145019,145129,145136,145142,145145,145148,145152,145155,145159,145164,145167,145174,145177,145183,145188,145191,145194,145197,145200,145203,145206,145209,145212,145268,145270,145296,145300,145303,145306,145309,145317,145320,145323,145327,145383,145386,145390,145396,145407,145410,145415,145418,145421,145427,145430,145433,145436,145439,145442,145445,145448,145451,145476,145482,145485,145488,145491,145494,145497,145500,145505,145508,145511,145514,145522,145525,145532,145535,145538,145540,145564,145566,145569,145572,145575,145578,145581,145584,145587,145621,145624,145627,145661,145668,145671,145674,145677,145680,145683,145686,145693,145696,145699,145702,145705,145712,145715,145718,145725,145728,145731,145735,145738,145741,145744,145747,145750,145753,145756,145759,145761,145785,145787,145811,145815,145826,145829,145832,145835,145838,145841,145844,145847,145850,145853,145856,145859,145862,145865,145868,145871],[10,144672,144668],{"id":144673},"_21-移动端布局实战下篇",[555,144675,144677],{"id":144676},"_211-rem适配布局","21.1 rem适配布局",[584,144679,144681],{"id":144680},"_2111-rem单位","21.1.1 rem单位",[20,144683],{"style":126795,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144686,144687],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[584,144689,144691],{"id":144690},"_2112-媒体查询","21.1.2 媒体查询",[567,144693,144694],{},[570,144695,144696],{},"参数介绍",[20,144698],{"style":126795,"src":144699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[20,144701],{"style":126795,"src":144702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[20,144704],{"style":126795,"src":144705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[20,144707],{"style":126795,"src":144708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[20,144710],{"style":126795,"src":144711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[25,144713,144715],{"className":126939,"code":144714,"language":126941,"meta":22,"style":22},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[31,144716,144717,144722,144741,144748,144761,144765],{"__ignoreMap":22},[34,144718,144719],{"class":36,"line":37},[34,144720,144721],{"class":40},"\u002F* 媒体查询 *\u002F\n",[34,144723,144724,144727,144729,144732,144734,144737,144739],{"class":36,"line":44},[34,144725,144726],{"class":112},"@media",[34,144728,2122],{"class":59},[34,144730,144731],{"class":63},"max-width",[34,144733,51898],{"class":59},[34,144735,144736],{"class":63},"768",[34,144738,51953],{"class":112},[34,144740,12906],{"class":59},[34,144742,144743,144746],{"class":36,"line":50},[34,144744,144745],{"class":2427},"  .container",[34,144747,16036],{"class":59},[34,144749,144750,144753,144755,144757,144759],{"class":36,"line":56},[34,144751,144752],{"class":63},"    width",[34,144754,51898],{"class":59},[34,144756,919],{"class":63},[34,144758,936],{"class":112},[34,144760,1765],{"class":59},[34,144762,144763],{"class":36,"line":107},[34,144764,127735],{"class":59},[34,144766,144767],{"class":36,"line":196},[34,144768,2036],{"class":59},[14,144770,144771],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[567,144773,144774],{"start":44},[570,144775,144776],{},"引入资源",[20,144778],{"style":126795,"src":144779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144781,144782],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[584,144784,144786],{"id":144785},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1611,144788,144789,144792,144795],{},[570,144790,144791],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[570,144793,144794],{},"媒体查询可以根据不同设备宽度来修改样式",[570,144796,144797],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[555,144799,144801],{"id":144800},"_212-less基础","21.2 Less基础",[14,144803,144804],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144806,144807],{},"Less可以解决该问题，它是css的扩展语言",[14,144809,144810,144811],{},"Less中文网址： ",[847,144812,144813],{"href":144813,"rel":144814},"http:\u002F\u002Flesscss.cn\u002F",[24329],[14,144816,144817],{},[760,144818,144819],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[584,144821,144823],{"id":144822},"_2121-less安装","21.2.1 less安装",[14,144825,144826],{},"如果使用vscode，则无需进行下方安装步骤",[14,144828,144829],{},[847,144830,144831],{"href":144831,"rel":144832},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24329],[20,144834],{"style":126795,"src":144835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[584,144837,144839],{"id":144838},"_2122-less使用","21.2.2 less使用",[14,144841,144842],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[567,144844,144845],{},[570,144846,144847],{},[760,144848,144849],{},"Less 变量",[20,144851],{"style":126795,"src":144852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[20,144854],{"style":126795,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[567,144857,144858],{"start":44},[570,144859,144860],{},[760,144861,144862],{},"Less 编译",[20,144864],{"style":126795,"src":144865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[567,144867,144868],{"start":50},[570,144869,144870],{},[760,144871,144872],{},"Less 嵌套",[20,144874],{"style":126795,"src":144875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[20,144877],{"style":126795,"src":144878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[567,144880,144881],{"start":56},[570,144882,144883],{},[760,144884,144885],{},"Less 运算",[20,144887],{"style":126795,"src":144888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144890,144891],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144893,646],{},[1611,144895,144896,144899,144902,144905,144908],{},[570,144897,144898],{},"乘号（*）和除号（\u002F）的写法",[570,144900,144901],{},"运算符中间左右有个空格隔开 1px + 5",[570,144903,144904],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[570,144906,144907],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[570,144909,144910],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[555,144912,144914],{"id":144913},"_213-rem-适配方案","21.3 rem 适配方案",[14,144916,144917],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144919,144920],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[20,144922],{"style":126795,"src":144923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[584,144925,144927],{"id":144926},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144929,144930],{},"rem + 媒体查询 + less 技术",[20,144932],{"style":126795,"src":144933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144935,144936],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144938,144939],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[20,144941],{"style":126795,"src":144942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144944,144945],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144947,15097],{},[20,144949],{"style":126795,"src":144950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144952,144953],{},"index.html:",[25,144955,144957],{"className":126939,"code":144956,"language":126941,"meta":22,"style":22},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[31,144958,144959,144964,144970,144986,144990,144996,145012],{"__ignoreMap":22},[34,144960,144961],{"class":36,"line":37},[34,144962,144963],{"class":40},"\u002F* rem 适配方案 *\u002F\n",[34,144965,144966,144968],{"class":36,"line":44},[34,144967,51096],{"class":51761},[34,144969,16036],{"class":59},[34,144971,144972,144974,144976,144979,144981,144983],{"class":36,"line":50},[34,144973,71087],{"class":63},[34,144975,51898],{"class":59},[34,144977,144978],{"class":63},"62.5",[34,144980,936],{"class":112},[34,144982,130802],{"class":59},[34,144984,144985],{"class":40},"\u002F* 1rem = 10px *\u002F\n",[34,144987,144988],{"class":36,"line":56},[34,144989,2036],{"class":59},[34,144991,144992,144994],{"class":36,"line":107},[34,144993,130787],{"class":2427},[34,144995,16036],{"class":59},[34,144997,144998,145000,145002,145004,145007,145009],{"class":36,"line":196},[34,144999,71029],{"class":63},[34,145001,51898],{"class":59},[34,145003,1053],{"class":63},[34,145005,145006],{"class":112},"rem",[34,145008,130802],{"class":59},[34,145010,145011],{"class":40},"\u002F* 100px *\u002F\n",[34,145013,145014],{"class":36,"line":202},[34,145015,2036],{"class":59},[14,145017,145018],{},"common.less",[25,145020,145022],{"className":126939,"code":145021,"language":126941,"meta":22,"style":22},"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",[31,145023,145024,145030,145045,145049,145055,145069,145073,145077,145081,145087,145101,145105,145111,145125],{"__ignoreMap":22},[34,145025,145026,145028],{"class":36,"line":37},[34,145027,51096],{"class":51761},[34,145029,16036],{"class":59},[34,145031,145032,145034,145036,145038,145040,145042],{"class":36,"line":44},[34,145033,71087],{"class":63},[34,145035,51898],{"class":59},[34,145037,144978],{"class":63},[34,145039,936],{"class":112},[34,145041,26532],{"class":59},[34,145043,145044],{"class":40},"\u002F* 10px *\u002F\n",[34,145046,145047],{"class":36,"line":50},[34,145048,2036],{"class":59},[34,145050,145051,145053],{"class":36,"line":56},[34,145052,52072],{"class":51761},[34,145054,16036],{"class":59},[34,145056,145057,145059,145061,145063,145065,145067],{"class":36,"line":107},[34,145058,71029],{"class":63},[34,145060,51898],{"class":59},[34,145062,1053],{"class":63},[34,145064,145006],{"class":112},[34,145066,26532],{"class":59},[34,145068,145011],{"class":40},[34,145070,145071],{"class":36,"line":196},[34,145072,2036],{"class":59},[34,145074,145075],{"class":36,"line":202},[34,145076,136400],{"class":59},[34,145078,145079],{"class":36,"line":207},[34,145080,144963],{"class":40},[34,145082,145083,145085],{"class":36,"line":222},[34,145084,51096],{"class":51761},[34,145086,16036],{"class":59},[34,145088,145089,145091,145093,145095,145097,145099],{"class":36,"line":227},[34,145090,71087],{"class":63},[34,145092,51898],{"class":59},[34,145094,144978],{"class":63},[34,145096,936],{"class":112},[34,145098,130802],{"class":59},[34,145100,144985],{"class":40},[34,145102,145103],{"class":36,"line":232},[34,145104,2036],{"class":59},[34,145106,145107,145109],{"class":36,"line":238},[34,145108,130787],{"class":2427},[34,145110,16036],{"class":59},[34,145112,145113,145115,145117,145119,145121,145123],{"class":36,"line":244},[34,145114,71029],{"class":63},[34,145116,51898],{"class":59},[34,145118,1053],{"class":63},[34,145120,145006],{"class":112},[34,145122,130802],{"class":59},[34,145124,145011],{"class":40},[34,145126,145127],{"class":36,"line":250},[34,145128,2036],{"class":59},[14,145130,145131,145132,145135],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24017,145133,145134],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[25,145137,145140],{"className":145138,"code":145139,"language":5651},[5649],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[31,145141,145139],{"__ignoreMap":22},[14,145143,145144],{},"less保存时会自动变成.css文件",[14,145146,145147],{},"好好搞懂上述代码写法",[584,145149,145151],{"id":145150},"_2132-样式导入样式","21.3.2 样式导入样式",[20,145153],{"style":126795,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[584,145156,145158],{"id":145157},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[567,145160,145161],{},[570,145162,145163],{},"准备工作",[20,145165],{"style":126795,"src":145166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145168,145169,145170],{},"github地址：",[847,145171,145172],{"href":145172,"rel":145173},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24329],[14,145175,145176],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145178,145179,145180],{},"js文件引入到index.html中使用的是",[31,145181,145182],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[567,145184,145185],{"start":44},[570,145186,145187],{},"vscode插件",[20,145189],{"style":126795,"src":145190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145192,145193],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145195,145196],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[20,145198],{"style":126795,"src":145199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145201,145202],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[20,145204],{"style":126795,"src":145205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145207,145208],{},"修改成75就可以，alt+z为快捷键",[14,145210,145211],{},"index.css：",[25,145213,145214],{"className":126939,"code":144956,"language":126941,"meta":22,"style":22},[31,145215,145216,145220,145226,145240,145244,145250,145264],{"__ignoreMap":22},[34,145217,145218],{"class":36,"line":37},[34,145219,144963],{"class":40},[34,145221,145222,145224],{"class":36,"line":44},[34,145223,51096],{"class":51761},[34,145225,16036],{"class":59},[34,145227,145228,145230,145232,145234,145236,145238],{"class":36,"line":50},[34,145229,71087],{"class":63},[34,145231,51898],{"class":59},[34,145233,144978],{"class":63},[34,145235,936],{"class":112},[34,145237,130802],{"class":59},[34,145239,144985],{"class":40},[34,145241,145242],{"class":36,"line":56},[34,145243,2036],{"class":59},[34,145245,145246,145248],{"class":36,"line":107},[34,145247,130787],{"class":2427},[34,145249,16036],{"class":59},[34,145251,145252,145254,145256,145258,145260,145262],{"class":36,"line":196},[34,145253,71029],{"class":63},[34,145255,51898],{"class":59},[34,145257,1053],{"class":63},[34,145259,145006],{"class":112},[34,145261,130802],{"class":59},[34,145263,145011],{"class":40},[34,145265,145266],{"class":36,"line":202},[34,145267,2036],{"class":59},[14,145269,144953],{},[25,145271,145272],{"className":126939,"code":127343,"language":126941,"meta":22,"style":22},[31,145273,145274,145280,145292],{"__ignoreMap":22},[34,145275,145276,145278],{"class":36,"line":37},[34,145277,52261],{"class":51761},[34,145279,16036],{"class":59},[34,145281,145282,145284,145286,145288,145290],{"class":36,"line":44},[34,145283,71087],{"class":63},[34,145285,51898],{"class":59},[34,145287,1207],{"class":63},[34,145289,51953],{"class":112},[34,145291,1765],{"class":59},[34,145293,145294],{"class":36,"line":50},[34,145295,2036],{"class":59},[555,145297,145299],{"id":145298},"_214-响应式开发","21.4 响应式开发",[14,145301,145302],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[20,145304],{"style":126795,"src":145305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145307,145308],{},"做法：",[1611,145310,145311,145314],{},[570,145312,145313],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[570,145315,145316],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[20,145318],{"style":126795,"src":145319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145321,145322],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[584,145324,145326],{"id":145325},"_2141-简单代码示范","21.4.1 简单代码示范",[25,145328,145329],{"className":126939,"code":144956,"language":126941,"meta":22,"style":22},[31,145330,145331,145335,145341,145355,145359,145365,145379],{"__ignoreMap":22},[34,145332,145333],{"class":36,"line":37},[34,145334,144963],{"class":40},[34,145336,145337,145339],{"class":36,"line":44},[34,145338,51096],{"class":51761},[34,145340,16036],{"class":59},[34,145342,145343,145345,145347,145349,145351,145353],{"class":36,"line":50},[34,145344,71087],{"class":63},[34,145346,51898],{"class":59},[34,145348,144978],{"class":63},[34,145350,936],{"class":112},[34,145352,130802],{"class":59},[34,145354,144985],{"class":40},[34,145356,145357],{"class":36,"line":56},[34,145358,2036],{"class":59},[34,145360,145361,145363],{"class":36,"line":107},[34,145362,130787],{"class":2427},[34,145364,16036],{"class":59},[34,145366,145367,145369,145371,145373,145375,145377],{"class":36,"line":196},[34,145368,71029],{"class":63},[34,145370,51898],{"class":59},[34,145372,1053],{"class":63},[34,145374,145006],{"class":112},[34,145376,130802],{"class":59},[34,145378,145011],{"class":40},[34,145380,145381],{"class":36,"line":202},[34,145382,2036],{"class":59},[14,145384,145385],{},"父盒子一般命名为container",[584,145387,145389],{"id":145388},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145391,145392,145393],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[760,145394,145395],{},"使得 Web 开发更加快捷",[1611,145397,145398],{},[570,145399,145400,145401],{},"官网：",[760,145402,145403],{},[847,145404,145405],{"href":145405,"rel":145406},"http:\u002F\u002Fgetbootstrap.com\u002F",[24329],[14,145408,145409],{},"可以直接去官网拿现成的东西",[567,145411,145412],{},[570,145413,145414],{},"Bootstrap的使用",[14,145416,145417],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145419,145420],{},"Bootstrap 使用四步曲：",[14,145422,145423,145426],{},[760,145424,145425],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[20,145428],{"style":126795,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145431,145432],{},"打开Bootstrap官网，然后下载",[20,145434],{"style":126795,"src":145435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[20,145437],{"style":126795,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145440,145441],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145443,145444],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145446,145447],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[20,145449],{"style":126795,"src":145450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[25,145452,145454],{"className":126939,"code":145453,"language":126941,"meta":22,"style":22},".center {\n  color: red;\n}\n",[31,145455,145456,145462,145472],{"__ignoreMap":22},[34,145457,145458,145460],{"class":36,"line":37},[34,145459,127230],{"class":2427},[34,145461,16036],{"class":59},[34,145463,145464,145466,145468,145470],{"class":36,"line":44},[34,145465,71366],{"class":63},[34,145467,51898],{"class":59},[34,145469,57882],{"class":63},[34,145471,1765],{"class":59},[34,145473,145474],{"class":36,"line":50},[34,145475,2036],{"class":59},[14,145477,145478,145481],{},[31,145479,145480],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[20,145483],{"style":126795,"src":145484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[20,145486],{"style":126795,"src":145487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[20,145489],{"style":126795,"src":145490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145492,145493],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[20,145495],{"style":126795,"src":145496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145498,145499],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[567,145501,145502],{"start":44},[570,145503,145504],{},"布局容器",[20,145506],{"style":126795,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145509,145510],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145512,145513],{},"container-fluid用于移动式布局比较方便",[567,145515,145516],{"start":50},[570,145517,145518,145519],{},"bootstrap ",[760,145520,145521],{},"栅格系统原理",[20,145523],{"style":126795,"src":145524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[567,145526,145527],{"start":56},[570,145528,145529],{},[760,145530,145531],{},"栅格选项参数",[20,145533],{"style":126795,"src":145534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145536,145537],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145539,15097],{},[25,145541,145542],{"className":126939,"code":145453,"language":126941,"meta":22,"style":22},[31,145543,145544,145550,145560],{"__ignoreMap":22},[34,145545,145546,145548],{"class":36,"line":37},[34,145547,127230],{"class":2427},[34,145549,16036],{"class":59},[34,145551,145552,145554,145556,145558],{"class":36,"line":44},[34,145553,71366],{"class":63},[34,145555,51898],{"class":59},[34,145557,57882],{"class":63},[34,145559,1765],{"class":59},[34,145561,145562],{"class":36,"line":50},[34,145563,2036],{"class":59},[14,145565,135982],{},[20,145567],{"style":126795,"src":145568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145570,145571],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145573,145574],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145576,145577],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145579,145580],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145582,145583],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145585,145586],{},"汇总展示说明：",[25,145588,145589],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,145590,145591,145595,145609,145613],{"__ignoreMap":22},[34,145592,145593],{"class":36,"line":37},[34,145594,131050],{"class":40},[34,145596,145597,145599,145601,145603,145605,145607],{"class":36,"line":44},[34,145598,1515],{"class":59},[34,145600,52072],{"class":51761},[34,145602,53947],{"class":2427},[34,145604,447],{"class":59},[34,145606,131063],{"class":187},[34,145608,51768],{"class":59},[34,145610,145611],{"class":36,"line":50},[34,145612,131070],{"class":59},[34,145614,145615,145617,145619],{"class":36,"line":56},[34,145616,52246],{"class":59},[34,145618,52072],{"class":51761},[34,145620,51768],{"class":59},[20,145622],{"style":126795,"src":145623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145625,145626],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[25,145628,145629],{"className":127686,"code":131043,"language":127688,"meta":22,"style":22},[31,145630,145631,145635,145649,145653],{"__ignoreMap":22},[34,145632,145633],{"class":36,"line":37},[34,145634,131050],{"class":40},[34,145636,145637,145639,145641,145643,145645,145647],{"class":36,"line":44},[34,145638,1515],{"class":59},[34,145640,52072],{"class":51761},[34,145642,53947],{"class":2427},[34,145644,447],{"class":59},[34,145646,131063],{"class":187},[34,145648,51768],{"class":59},[34,145650,145651],{"class":36,"line":50},[34,145652,131070],{"class":59},[34,145654,145655,145657,145659],{"class":36,"line":56},[34,145656,52246],{"class":59},[34,145658,52072],{"class":51761},[34,145660,51768],{"class":59},[567,145662,145663],{"start":107},[570,145664,145665],{},[760,145666,145667],{},"列嵌套",[20,145669],{"style":126795,"src":145670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145672,145673],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145675,145676],{},"没加row内部这样：",[20,145678],{"style":126795,"src":145679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145681,145682],{},"加上row之后内部为：",[20,145684],{"style":126795,"src":145685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[567,145687,145688],{"start":196},[570,145689,145690],{},[760,145691,145692],{},"列偏移",[20,145694],{"style":126795,"src":145695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145697,145698],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145700,145701],{},"要加偏移量，即偏移份数",[14,145703,145704],{},"偏移的份数=12-两个盒子的份数",[567,145706,145707],{"start":202},[570,145708,145709],{},[760,145710,145711],{},"列排序",[20,145713],{"style":126795,"src":145714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145716,145717],{},"pull拉左；push推右",[567,145719,145720],{"start":207},[570,145721,145722],{},[760,145723,145724],{},"响应式工具",[20,145726],{"style":126795,"src":145727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145729,145730],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[584,145732,145734],{"id":145733},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145736,145737],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145739,145740],{},"ul {",[14,145742,145743],{},"list-style: none;",[14,145745,145746],{},"margin:0;",[14,145748,145749],{},"padding:0; }",[20,145751],{"style":126795,"src":145752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[20,145754],{"style":126795,"src":145755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145757,145758],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145760,69350],{},[25,145762,145763],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,145764,145765,145771,145781],{"__ignoreMap":22},[34,145766,145767,145769],{"class":36,"line":37},[34,145768,130787],{"class":2427},[34,145770,16036],{"class":59},[34,145772,145773,145775,145777,145779],{"class":36,"line":44},[34,145774,131419],{"class":63},[34,145776,51898],{"class":59},[34,145778,24200],{"class":63},[34,145780,1765],{"class":59},[34,145782,145783],{"class":36,"line":50},[34,145784,2036],{"class":59},[14,145786,70914],{},[25,145788,145789],{"className":126939,"code":139609,"language":126941,"meta":22,"style":22},[31,145790,145791,145797,145807],{"__ignoreMap":22},[34,145792,145793,145795],{"class":36,"line":37},[34,145794,130787],{"class":2427},[34,145796,16036],{"class":59},[34,145798,145799,145801,145803,145805],{"class":36,"line":44},[34,145800,131419],{"class":63},[34,145802,51898],{"class":59},[34,145804,24200],{"class":63},[34,145806,1765],{"class":59},[34,145808,145809],{"class":36,"line":50},[34,145810,2036],{"class":59},[555,145812,145814],{"id":145813},"_215-swiper-插件使用","21.5 swiper 插件使用",[1611,145816,145817,145820,145823],{},[570,145818,145819],{},"下载需要的css和js文件html页面中 引入相关文件",[570,145821,145822],{},"官网找到类似案例，复制html结构，css样式 js 语法",[570,145824,145825],{},"根据需求定制修改模块",[20,145827],{"style":126795,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145830,145831],{},"解压后将这两部分放到项目中",[20,145833],{"style":126795,"src":145834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145836,145837],{},"这个插件可以帮助我们实现轮播图效果",[14,145839,145840],{},"用法：",[20,145842],{"style":126795,"src":145843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145845,145846],{},"找到自己喜欢的",[20,145848],{"style":126795,"src":145849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145851,145852],{},"右键，查看网页源代码",[20,145854],{"style":126795,"src":145855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145857,145858],{},"复制人家的结构内容",[14,145860,145861],{},"然后去看API文档：",[20,145863],{"style":126795,"src":145864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145866,145867],{},"可以看看如何修改样式",[14,145869,145870],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[532,145872,145873],{},"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":22,"searchDepth":44,"depth":44,"links":145875},[145876,145881,145885,145890,145895],{"id":144676,"depth":44,"text":144677,"children":145877},[145878,145879,145880],{"id":144680,"depth":50,"text":144681},{"id":144690,"depth":50,"text":144691},{"id":144785,"depth":50,"text":144786},{"id":144800,"depth":44,"text":144801,"children":145882},[145883,145884],{"id":144822,"depth":50,"text":144823},{"id":144838,"depth":50,"text":144839},{"id":144913,"depth":44,"text":144914,"children":145886},[145887,145888,145889],{"id":144926,"depth":50,"text":144927},{"id":145150,"depth":50,"text":145151},{"id":145157,"depth":50,"text":145158},{"id":145298,"depth":44,"text":145299,"children":145891},[145892,145893,145894],{"id":145325,"depth":50,"text":145326},{"id":145388,"depth":50,"text":145389},{"id":145733,"depth":50,"text":145734},{"id":145813,"depth":44,"text":145814},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144668,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145902,"title":145903,"body":145904,"description":537,"extension":538,"meta":146124,"navigation":540,"path":146125,"seo":146126,"stem":146127,"__hash__":146128},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145905,"toc":146120},[145906,145909,145913,145916,145931,145936,145939,145944,145979,145984,145996,146001,146014,146019,146036,146041,146061,146066,146084,146087,146090,146093,146096,146100,146103,146106,146109,146112,146115,146118],[10,145907,145903],{"id":145908},"_22-代码提交与新型相对单位",[555,145910,145912],{"id":145911},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145914,145915],{},"法1：",[567,145917,145918,145925,145928],{},[570,145919,145920,145921],{},"登录网站注册：",[847,145922,145923],{"href":145923,"rel":145924},"https:\u002F\u002Fgitee.com\u002F",[24329],[570,145926,145927],{},"码云创建新的仓库",[570,145929,145930],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1611,145932,145933],{},[570,145934,145935],{},"在网站根目录右键-- Git Bash Here",[20,145937],{"style":126795,"src":145938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1611,145940,145941],{},[570,145942,145943],{},"如果是第一次利用git提交，请配置好全局选项",[25,145945,145947],{"className":117683,"code":145946,"language":117685,"meta":22,"style":22},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[31,145948,145949,145965],{"__ignoreMap":22},[34,145950,145951,145954,145956,145959,145962],{"class":36,"line":37},[34,145952,145953],{"class":2427},"git",[34,145955,120106],{"class":187},[34,145957,145958],{"class":63}," --global",[34,145960,145961],{"class":187}," user.name",[34,145963,145964],{"class":187}," \"你的名字\"\n",[34,145966,145967,145969,145971,145973,145976],{"class":36,"line":44},[34,145968,145953],{"class":2427},[34,145970,120106],{"class":187},[34,145972,145958],{"class":63},[34,145974,145975],{"class":187}," user.email",[34,145977,145978],{"class":187}," \"你的邮箱\"\n",[1611,145980,145981],{},[570,145982,145983],{},"初始化仓库",[25,145985,145987],{"className":117683,"code":145986,"language":117685,"meta":22,"style":22},"git init\n",[31,145988,145989],{"__ignoreMap":22},[34,145990,145991,145993],{"class":36,"line":37},[34,145992,145953],{"class":2427},[34,145994,145995],{"class":187}," init\n",[1611,145997,145998],{},[570,145999,146000],{},"把本地文件放到暂存区",[25,146002,146004],{"className":117683,"code":146003,"language":117685,"meta":22,"style":22},"git add .\n",[31,146005,146006],{"__ignoreMap":22},[34,146007,146008,146010,146012],{"class":36,"line":37},[34,146009,145953],{"class":2427},[34,146011,5673],{"class":187},[34,146013,29206],{"class":187},[1611,146015,146016],{},[570,146017,146018],{},"把本地文件放到本地仓库里面",[25,146020,146022],{"className":117683,"code":146021,"language":117685,"meta":22,"style":22},"git commit -m \"first commit\"\n",[31,146023,146024],{"__ignoreMap":22},[34,146025,146026,146028,146031,146033],{"class":36,"line":37},[34,146027,145953],{"class":2427},[34,146029,146030],{"class":187}," commit",[34,146032,101269],{"class":63},[34,146034,146035],{"class":187}," \"first commit\"\n",[1611,146037,146038],{},[570,146039,146040],{},"链接远程仓库",[25,146042,146044],{"className":117683,"code":146043,"language":117685,"meta":22,"style":22},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[31,146045,146046],{"__ignoreMap":22},[34,146047,146048,146050,146053,146055,146058],{"class":36,"line":37},[34,146049,145953],{"class":2427},[34,146051,146052],{"class":187}," remote",[34,146054,5673],{"class":187},[34,146056,146057],{"class":187}," origin",[34,146059,146060],{"class":187}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1611,146062,146063],{},[570,146064,146065],{},"把本地仓库的文件推送到远程仓库 push",[25,146067,146069],{"className":117683,"code":146068,"language":117685,"meta":22,"style":22},"git push -u origin master\n",[31,146070,146071],{"__ignoreMap":22},[34,146072,146073,146075,146077,146079,146081],{"class":36,"line":37},[34,146074,145953],{"class":2427},[34,146076,29481],{"class":187},[34,146078,28755],{"class":63},[34,146080,146057],{"class":187},[34,146082,146083],{"class":187}," master\n",[20,146085],{"style":126795,"src":146086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146088,146089],{},"上方方法暂未实现，后边学完git后在整",[14,146091,146092],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[20,146094],{"style":126795,"src":146095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[555,146097,146099],{"id":146098},"_222-新型相对单位","22.2 新型相对单位",[20,146101],{"style":126795,"src":146102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[20,146104],{"style":126795,"src":146105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146107,146108],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146110,146111],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[20,146113],{"style":126795,"src":146114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146116,146117],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[532,146119,24422],{},{"title":22,"searchDepth":44,"depth":44,"links":146121},[146122,146123],{"id":145911,"depth":44,"text":145912},{"id":146098,"depth":44,"text":146099},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145903,"description":537},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146130,"title":146131,"body":146132,"description":146136,"extension":538,"meta":146137,"navigation":540,"path":146138,"seo":146139,"stem":146140,"__hash__":146141},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146133,"toc":146134},[],{"title":22,"searchDepth":44,"depth":44,"links":146135},[],"自己正经开始学编程的第一门语言！",{"category":93300},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146131,"description":146136},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146143,"title":146144,"body":146145,"description":537,"extension":538,"meta":147292,"navigation":540,"path":147293,"seo":147294,"stem":147295,"__hash__":147296},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146146,"toc":147268},[146147,146150,146154,146157,146160,146185,146188,146194,146198,146201,146228,146231,146271,146274,146286,146289,146295,146299,146303,146330,146347,146354,146358,146361,146387,146390,146394,146397,146437,146440,146457,146463,146467,146472,146516,146519,146537,146540,146608,146612,146619,146622,146637,146640,146649,146652,146663,146666,146675,146678,146695,146698,146713,146717,146721,146724,146726,146746,146750,146753,146756,146767,146770,146776,146780,146786,146813,146816,146828,146831,146842,146845,146851,146855,146861,146911,146914,146956,146959,146992,146995,147029,147033,147036,147056,147059,147095,147098,147111,147115,147119,147125,147128,147141,147145,147148,147154,147157,147161,147164,147167,147216,147220,147236,147242,147249,147255,147265],[10,146148,146144],{"id":146149},"_1-python环境与第一个程序",[555,146151,146153],{"id":146152},"_11-什么是python","1.1 什么是Python",[14,146155,146156],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146158,146159],{},"理解 Python 时抓住三个关键词：",[567,146161,146162,146165,146168],{},[570,146163,146164],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[570,146166,146167],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[570,146169,146170,146171,822,146174,822,146177,822,146180,822,146182,28850],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[31,146172,146173],{},"os",[31,146175,146176],{},"sys",[31,146178,146179],{},"json",[31,146181,58321],{},[31,146183,146184],{},"datetime",[14,146186,146187],{},"Python 程序的运行链路：",[25,146189,146192],{"className":146190,"code":146191,"language":5651,"meta":22},[5649],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[31,146193,146191],{"__ignoreMap":22},[555,146195,146197],{"id":146196},"_12-python解释器","1.2 Python解释器",[14,146199,146200],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[25,146202,146204],{"className":24286,"code":146203,"language":24288,"meta":22,"style":22},"python --version\npython3 --version\npython\npython3\n",[31,146205,146206,146212,146218,146223],{"__ignoreMap":22},[34,146207,146208,146210],{"class":36,"line":37},[34,146209,29],{"class":2427},[34,146211,26758],{"class":63},[34,146213,146214,146216],{"class":36,"line":44},[34,146215,101266],{"class":2427},[34,146217,26758],{"class":63},[34,146219,146220],{"class":36,"line":50},[34,146221,146222],{"class":2427},"python\n",[34,146224,146225],{"class":36,"line":56},[34,146226,146227],{"class":2427},"python3\n",[14,146229,146230],{},"进入交互模式后，可以直接输入表达式：",[25,146232,146234],{"className":27,"code":146233,"language":29,"meta":22,"style":22},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[31,146235,146236,146247,146252,146266],{"__ignoreMap":22},[34,146237,146238,146241,146243,146245],{"class":36,"line":37},[34,146239,146240],{"class":112},">>>",[34,146242,25583],{"class":63},[34,146244,46027],{"class":112},[34,146246,48184],{"class":63},[34,146248,146249],{"class":36,"line":44},[34,146250,146251],{"class":63},"3\n",[34,146253,146254,146256,146259,146261,146264],{"class":36,"line":50},[34,146255,146240],{"class":112},[34,146257,146258],{"class":63}," print",[34,146260,617],{"class":59},[34,146262,146263],{"class":187},"\"hello python\"",[34,146265,623],{"class":59},[34,146267,146268],{"class":36,"line":56},[34,146269,146270],{"class":59},"hello python\n",[14,146272,146273],{},"退出交互模式：",[25,146275,146277],{"className":27,"code":146276,"language":29,"meta":22,"style":22},"exit()\n",[31,146278,146279],{"__ignoreMap":22},[34,146280,146281,146284],{"class":36,"line":37},[34,146282,146283],{"class":63},"exit",[34,146285,2440],{"class":59},[14,146287,146288],{},"或使用快捷键：",[25,146290,146293],{"className":146291,"code":146292,"language":5651,"meta":22},[5649],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[31,146294,146292],{"__ignoreMap":22},[555,146296,146298],{"id":146297},"_13-安装python","1.3 安装Python",[584,146300,146302],{"id":146301},"_131-windows安装","1.3.1 Windows安装",[567,146304,146305,146312,146315,146321,146327],{},[570,146306,146307,146308],{},"打开 Python 官网：",[847,146309,146310],{"href":146310,"rel":146311},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24329],[570,146313,146314],{},"下载 Windows Installer。",[570,146316,146317,146318,28850],{},"安装时勾选 ",[31,146319,146320],{},"Add Python to PATH",[570,146322,146323,146324,28850],{},"点击 ",[31,146325,146326],{},"Install Now",[570,146328,146329],{},"安装完成后打开命令提示符验证：",[25,146331,146333],{"className":24286,"code":146332,"language":24288,"meta":22,"style":22},"python --version\npip --version\n",[31,146334,146335,146341],{"__ignoreMap":22},[34,146336,146337,146339],{"class":36,"line":37},[34,146338,29],{"class":2427},[34,146340,26758],{"class":63},[34,146342,146343,146345],{"class":36,"line":44},[34,146344,24295],{"class":2427},[34,146346,26758],{"class":63},[14,146348,146349,146350,146353],{},"如果提示 ",[31,146351,146352],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[584,146355,146357],{"id":146356},"_132-macos安装","1.3.2 macOS安装",[14,146359,146360],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[25,146362,146364],{"className":24286,"code":146363,"language":24288,"meta":22,"style":22},"brew install python\npython3 --version\npip3 --version\n",[31,146365,146366,146375,146381],{"__ignoreMap":22},[34,146367,146368,146371,146373],{"class":36,"line":37},[34,146369,146370],{"class":2427},"brew",[34,146372,24298],{"class":187},[34,146374,124705],{"class":187},[34,146376,146377,146379],{"class":36,"line":44},[34,146378,101266],{"class":2427},[34,146380,26758],{"class":63},[34,146382,146383,146385],{"class":36,"line":50},[34,146384,120087],{"class":2427},[34,146386,26758],{"class":63},[14,146388,146389],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[584,146391,146393],{"id":146392},"_133-linux安装","1.3.3 Linux安装",[14,146395,146396],{},"Ubuntu\u002FDebian：",[25,146398,146400],{"className":24286,"code":146399,"language":24288,"meta":22,"style":22},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[31,146401,146402,146410,146425,146431],{"__ignoreMap":22},[34,146403,146404,146406,146408],{"class":36,"line":37},[34,146405,25041],{"class":2427},[34,146407,117704],{"class":187},[34,146409,26707],{"class":187},[34,146411,146412,146414,146416,146418,146420,146422],{"class":36,"line":44},[34,146413,25041],{"class":2427},[34,146415,117704],{"class":187},[34,146417,24298],{"class":187},[34,146419,104790],{"class":187},[34,146421,101185],{"class":187},[34,146423,146424],{"class":187}," python3-venv\n",[34,146426,146427,146429],{"class":36,"line":50},[34,146428,101266],{"class":2427},[34,146430,26758],{"class":63},[34,146432,146433,146435],{"class":36,"line":56},[34,146434,120087],{"class":2427},[34,146436,26758],{"class":63},[14,146438,146439],{},"Fedora：",[25,146441,146443],{"className":24286,"code":146442,"language":24288,"meta":22,"style":22},"sudo dnf install python3 python3-pip\n",[31,146444,146445],{"__ignoreMap":22},[34,146446,146447,146449,146451,146453,146455],{"class":36,"line":37},[34,146448,25041],{"class":2427},[34,146450,26780],{"class":187},[34,146452,24298],{"class":187},[34,146454,104790],{"class":187},[34,146456,120152],{"class":187},[14,146458,146459,146460,146462],{},"Linux 上通常使用 ",[31,146461,101266],{}," 命令，避免和系统旧版本 Python 冲突。",[555,146464,146466],{"id":146465},"_14-pip包管理器","1.4 pip包管理器",[14,146468,146469,146471],{},[31,146470,24295],{}," 用来安装第三方库。",[25,146473,146475],{"className":24286,"code":146474,"language":24288,"meta":22,"style":22},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[31,146476,146477,146486,146495,146503,146509],{"__ignoreMap":22},[34,146478,146479,146481,146483],{"class":36,"line":37},[34,146480,24295],{"class":2427},[34,146482,24298],{"class":187},[34,146484,146485],{"class":187}," requests\n",[34,146487,146488,146490,146493],{"class":36,"line":44},[34,146489,24295],{"class":2427},[34,146491,146492],{"class":187}," uninstall",[34,146494,146485],{"class":187},[34,146496,146497,146499,146501],{"class":36,"line":50},[34,146498,24295],{"class":2427},[34,146500,117961],{"class":187},[34,146502,146485],{"class":187},[34,146504,146505,146507],{"class":36,"line":56},[34,146506,24295],{"class":2427},[34,146508,119342],{"class":187},[34,146510,146511,146513],{"class":36,"line":107},[34,146512,24295],{"class":2427},[34,146514,146515],{"class":187}," freeze\n",[14,146517,146518],{},"国内网络较慢时可以临时使用镜像：",[25,146520,146522],{"className":24286,"code":146521,"language":24288,"meta":22,"style":22},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,146523,146524],{"__ignoreMap":22},[34,146525,146526,146528,146530,146533,146535],{"class":36,"line":37},[34,146527,24295],{"class":2427},[34,146529,24298],{"class":187},[34,146531,146532],{"class":187}," requests",[34,146534,26895],{"class":63},[34,146536,120115],{"class":187},[14,146538,146539],{},"常见第三方库：",[748,146541,146542,146551],{},[751,146543,146544],{},[754,146545,146546,146549],{},[757,146547,146548],{},"库",[757,146550,103083],{},[795,146552,146553,146561,146568,146576,146584,146592,146600],{},[754,146554,146555,146558],{},[800,146556,146557],{},"requests",[800,146559,146560],{},"网络请求",[754,146562,146563,146565],{},[800,146564,101013],{},[800,146566,146567],{},"数值计算",[754,146569,146570,146573],{},[800,146571,146572],{},"pandas",[800,146574,146575],{},"表格数据处理",[754,146577,146578,146581],{},[800,146579,146580],{},"matplotlib",[800,146582,146583],{},"绘图",[754,146585,146586,146589],{},[800,146587,146588],{},"pyecharts",[800,146590,146591],{},"ECharts 图表",[754,146593,146594,146597],{},[800,146595,146596],{},"flask",[800,146598,146599],{},"Web 后端",[754,146601,146602,146605],{},[800,146603,146604],{},"pytest",[800,146606,146607],{},"自动化测试",[555,146609,146611],{"id":146610},"_15-虚拟环境","1.5 虚拟环境",[14,146613,146614,146615,146618],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[31,146616,146617],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146620,146621],{},"创建虚拟环境：",[25,146623,146625],{"className":24286,"code":146624,"language":24288,"meta":22,"style":22},"python -m venv .venv\n",[31,146626,146627],{"__ignoreMap":22},[34,146628,146629,146631,146633,146635],{"class":36,"line":37},[34,146630,29],{"class":2427},[34,146632,101269],{"class":63},[34,146634,101272],{"class":187},[34,146636,101275],{"class":187},[14,146638,146639],{},"Windows 激活：",[25,146641,146643],{"className":24286,"code":146642,"language":24288,"meta":22,"style":22},".venv\\Scripts\\activate\n",[31,146644,146645],{"__ignoreMap":22},[34,146646,146647],{"class":36,"line":37},[34,146648,146642],{"class":2427},[14,146650,146651],{},"macOS\u002FLinux 激活：",[25,146653,146655],{"className":24286,"code":146654,"language":24288,"meta":22,"style":22},"source .venv\u002Fbin\u002Factivate\n",[31,146656,146657],{"__ignoreMap":22},[34,146658,146659,146661],{"class":36,"line":37},[34,146660,101280],{"class":63},[34,146662,101283],{"class":187},[14,146664,146665],{},"退出虚拟环境：",[25,146667,146669],{"className":24286,"code":146668,"language":24288,"meta":22,"style":22},"deactivate\n",[31,146670,146671],{"__ignoreMap":22},[34,146672,146673],{"class":36,"line":37},[34,146674,146668],{"class":2427},[14,146676,146677],{},"保存依赖：",[25,146679,146681],{"className":24286,"code":146680,"language":24288,"meta":22,"style":22},"pip freeze > requirements.txt\n",[31,146682,146683],{"__ignoreMap":22},[34,146684,146685,146687,146690,146692],{"class":36,"line":37},[34,146686,24295],{"class":2427},[34,146688,146689],{"class":187}," freeze",[34,146691,26687],{"class":112},[34,146693,146694],{"class":187}," requirements.txt\n",[14,146696,146697],{},"安装依赖：",[25,146699,146701],{"className":24286,"code":146700,"language":24288,"meta":22,"style":22},"pip install -r requirements.txt\n",[31,146702,146703],{"__ignoreMap":22},[34,146704,146705,146707,146709,146711],{"class":36,"line":37},[34,146706,24295],{"class":2427},[34,146708,24298],{"class":187},[34,146710,120026],{"class":63},[34,146712,146694],{"class":187},[555,146714,146716],{"id":146715},"_16-开发工具","1.6 开发工具",[584,146718,146720],{"id":146719},"_161-pycharm","1.6.1 PyCharm",[14,146722,146723],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146725,122449],{},[567,146727,146728,146731,146734,146740,146743],{},[570,146729,146730],{},"New Project：创建项目。",[570,146732,146733],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[570,146735,146736,146737,126370],{},"New Python File：创建 ",[31,146738,146739],{},".py",[570,146741,146742],{},"Run：运行当前文件。",[570,146744,146745],{},"Debug：断点调试。",[584,146747,146749],{"id":146748},"_162-vs-code","1.6.2 VS Code",[14,146751,146752],{},"VS Code 轻量，适合后续多语言开发。",[14,146754,146755],{},"建议安装插件：",[567,146757,146758,146761,146764],{},[570,146759,146760],{},"Python。",[570,146762,146763],{},"Pylance。",[570,146765,146766],{},"Jupyter。",[14,146768,146769],{},"选择解释器：",[25,146771,146774],{"className":146772,"code":146773,"language":5651,"meta":22},[5649],"Ctrl + Shift + P -> Python: Select Interpreter\n",[31,146775,146773],{"__ignoreMap":22},[555,146777,146779],{"id":146778},"_17-第一个python程序","1.7 第一个Python程序",[14,146781,146782,146783,25083],{},"创建文件 ",[31,146784,146785],{},"hello.py",[25,146787,146789],{"className":27,"code":146788,"language":29,"meta":22,"style":22},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[31,146790,146791,146802],{"__ignoreMap":22},[34,146792,146793,146795,146797,146800],{"class":36,"line":37},[34,146794,30878],{"class":63},[34,146796,617],{"class":59},[34,146798,146799],{"class":187},"\"Hello World\"",[34,146801,623],{"class":59},[34,146803,146804,146806,146808,146811],{"class":36,"line":44},[34,146805,30878],{"class":63},[34,146807,617],{"class":59},[34,146809,146810],{"class":187},"\"你好，Python\"",[34,146812,623],{"class":59},[14,146814,146815],{},"在终端运行：",[25,146817,146819],{"className":24286,"code":146818,"language":24288,"meta":22,"style":22},"python hello.py\n",[31,146820,146821],{"__ignoreMap":22},[34,146822,146823,146825],{"class":36,"line":37},[34,146824,29],{"class":2427},[34,146826,146827],{"class":187}," hello.py\n",[14,146829,146830],{},"或：",[25,146832,146834],{"className":24286,"code":146833,"language":24288,"meta":22,"style":22},"python3 hello.py\n",[31,146835,146836],{"__ignoreMap":22},[34,146837,146838,146840],{"class":36,"line":37},[34,146839,101266],{"class":2427},[34,146841,146827],{"class":187},[14,146843,146844],{},"输出：",[25,146846,146849],{"className":146847,"code":146848,"language":5651,"meta":22},[5649],"Hello World\n你好，Python\n",[31,146850,146848],{"__ignoreMap":22},[555,146852,146854],{"id":146853},"_18-print函数","1.8 print函数",[14,146856,146857,146860],{},[31,146858,146859],{},"print()"," 用来输出内容。",[25,146862,146864],{"className":27,"code":146863,"language":29,"meta":22,"style":22},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[31,146865,146866,146876,146886,146896],{"__ignoreMap":22},[34,146867,146868,146870,146872,146874],{"class":36,"line":37},[34,146869,30878],{"class":63},[34,146871,617],{"class":59},[34,146873,6308],{"class":187},[34,146875,623],{"class":59},[34,146877,146878,146880,146882,146884],{"class":36,"line":44},[34,146879,30878],{"class":63},[34,146881,617],{"class":59},[34,146883,919],{"class":63},[34,146885,623],{"class":59},[34,146887,146888,146890,146892,146894],{"class":36,"line":50},[34,146889,30878],{"class":63},[34,146891,617],{"class":59},[34,146893,664],{"class":63},[34,146895,623],{"class":59},[34,146897,146898,146900,146902,146905,146907,146909],{"class":36,"line":56},[34,146899,30878],{"class":63},[34,146901,617],{"class":59},[34,146903,146904],{"class":187},"\"年龄:\"",[34,146906,12899],{"class":59},[34,146908,1256],{"class":63},[34,146910,623],{"class":59},[14,146912,146913],{},"多个内容用逗号隔开，默认中间加空格：",[25,146915,146917],{"className":27,"code":146916,"language":29,"meta":22,"style":22},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[31,146918,146919,146929,146939],{"__ignoreMap":22},[34,146920,146921,146924,146926],{"class":36,"line":37},[34,146922,146923],{"class":59},"name ",[34,146925,447],{"class":112},[34,146927,146928],{"class":187}," \"张三\"\n",[34,146930,146931,146934,146936],{"class":36,"line":44},[34,146932,146933],{"class":59},"age ",[34,146935,447],{"class":112},[34,146937,146938],{"class":63}," 18\n",[34,146940,146941,146943,146945,146948,146951,146953],{"class":36,"line":50},[34,146942,30878],{"class":63},[34,146944,617],{"class":59},[34,146946,146947],{"class":187},"\"姓名:\"",[34,146949,146950],{"class":59},", name, ",[34,146952,146904],{"class":187},[34,146954,146955],{"class":59},", age)\n",[14,146957,146958],{},"修改分隔符：",[25,146960,146962],{"className":27,"code":146961,"language":29,"meta":22,"style":22},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[31,146963,146964],{"__ignoreMap":22},[34,146965,146966,146968,146970,146973,146975,146977,146979,146981,146983,146986,146988,146990],{"class":36,"line":37},[34,146967,30878],{"class":63},[34,146969,617],{"class":59},[34,146971,146972],{"class":187},"\"2024\"",[34,146974,12899],{"class":59},[34,146976,54777],{"class":187},[34,146978,12899],{"class":59},[34,146980,54777],{"class":187},[34,146982,12899],{"class":59},[34,146984,146985],{"class":5680},"sep",[34,146987,447],{"class":112},[34,146989,32946],{"class":187},[34,146991,623],{"class":59},[14,146993,146994],{},"修改结尾符：",[25,146996,146998],{"className":27,"code":146997,"language":29,"meta":22,"style":22},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[31,146999,147000,147018],{"__ignoreMap":22},[34,147001,147002,147004,147006,147008,147010,147012,147014,147016],{"class":36,"line":37},[34,147003,30878],{"class":63},[34,147005,617],{"class":59},[34,147007,6308],{"class":187},[34,147009,12899],{"class":59},[34,147011,46262],{"class":5680},[34,147013,447],{"class":112},[34,147015,4823],{"class":187},[34,147017,623],{"class":59},[34,147019,147020,147022,147024,147027],{"class":36,"line":44},[34,147021,30878],{"class":63},[34,147023,617],{"class":59},[34,147025,147026],{"class":187},"\"python\"",[34,147028,623],{"class":59},[555,147030,147032],{"id":147031},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147034,147035],{},"交互运行适合临时验证：",[25,147037,147039],{"className":27,"code":147038,"language":29,"meta":22,"style":22},">>> 10 * 3\n30\n",[31,147040,147041,147051],{"__ignoreMap":22},[34,147042,147043,147045,147047,147049],{"class":36,"line":37},[34,147044,146240],{"class":112},[34,147046,2502],{"class":63},[34,147048,6982],{"class":112},[34,147050,120423],{"class":63},[34,147052,147053],{"class":36,"line":44},[34,147054,147055],{"class":63},"30\n",[14,147057,147058],{},"脚本运行适合保存程序：",[25,147060,147062],{"className":27,"code":147061,"language":29,"meta":22,"style":22},"price = 8\ncount = 5\nprint(price * count)\n",[31,147063,147064,147074,147083],{"__ignoreMap":22},[34,147065,147066,147069,147071],{"class":36,"line":37},[34,147067,147068],{"class":59},"price ",[34,147070,447],{"class":112},[34,147072,147073],{"class":63}," 8\n",[34,147075,147076,147079,147081],{"class":36,"line":44},[34,147077,147078],{"class":59},"count ",[34,147080,447],{"class":112},[34,147082,54888],{"class":63},[34,147084,147085,147087,147090,147092],{"class":36,"line":50},[34,147086,30878],{"class":63},[34,147088,147089],{"class":59},"(price ",[34,147091,1062],{"class":112},[34,147093,147094],{"class":59}," count)\n",[14,147096,147097],{},"实际学习中推荐：",[567,147099,147100,147103,147108],{},[570,147101,147102],{},"临时试一个语法，用交互模式。",[570,147104,147105,147106,126370],{},"写完整练习，用 ",[31,147107,146739],{},[570,147109,147110],{},"写项目，用独立目录和虚拟环境。",[555,147112,147114],{"id":147113},"_110-常见错误","1.10 常见错误",[584,147116,147118],{"id":147117},"_1101-命令找不到","1.10.1 命令找不到",[25,147120,147123],{"className":147121,"code":147122,"language":5651,"meta":22},[5649],"python: command not found\n",[31,147124,147122],{"__ignoreMap":22},[14,147126,147127],{},"原因：",[567,147129,147130,147133,147136],{},[570,147131,147132],{},"没安装 Python。",[570,147134,147135],{},"PATH 没配置。",[570,147137,147138,147139,28850],{},"Linux\u002FmacOS 应该使用 ",[31,147140,101266],{},[584,147142,147144],{"id":147143},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147146,147147],{},"不要把文件命名为：",[25,147149,147152],{"className":147150,"code":147151,"language":5651,"meta":22},[5649],"random.py\njson.py\ntime.py\nrequests.py\n",[31,147153,147151],{"__ignoreMap":22},[14,147155,147156],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[584,147158,147160],{"id":147159},"_1103-中文乱码","1.10.3 中文乱码",[14,147162,147163],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147165,147166],{},"如果读写文件出现乱码，要明确指定编码：",[25,147168,147170],{"className":27,"code":147169,"language":29,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[31,147171,147172,147206],{"__ignoreMap":22},[34,147173,147174,147176,147179,147181,147184,147186,147189,147191,147194,147196,147199,147201,147203],{"class":36,"line":37},[34,147175,108220],{"class":112},[34,147177,147178],{"class":63}," open",[34,147180,617],{"class":59},[34,147182,147183],{"class":187},"\"data.txt\"",[34,147185,12899],{"class":59},[34,147187,147188],{"class":187},"\"r\"",[34,147190,12899],{"class":59},[34,147192,147193],{"class":5680},"encoding",[34,147195,447],{"class":112},[34,147197,147198],{"class":187},"\"utf-8\"",[34,147200,14178],{"class":59},[34,147202,31846],{"class":112},[34,147204,147205],{"class":59}," f:\n",[34,147207,147208,147211,147213],{"class":36,"line":44},[34,147209,147210],{"class":59},"    content ",[34,147212,447],{"class":112},[34,147214,147215],{"class":59}," f.read()\n",[555,147217,147219],{"id":147218},"_111-本章练习","1.11 本章练习",[567,147221,147222,147225,147231],{},[570,147223,147224],{},"安装 Python，并在终端输出版本号。",[570,147226,147227,147228,147230],{},"新建 ",[31,147229,146785],{},"，输出自己的姓名、年龄、学习目标。",[570,147232,104753,147233,147235],{},[31,147234,146859],{}," 输出下面格式：",[25,147237,147240],{"className":147238,"code":147239,"language":5651,"meta":22},[5649],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[31,147241,147239],{"__ignoreMap":22},[567,147243,147244],{"start":56},[570,147245,104753,147246,147248],{},[31,147247,146985],{}," 输出日期：",[25,147250,147253],{"className":147251,"code":147252,"language":5651,"meta":22},[5649],"2024-10-10\n",[31,147254,147252],{"__ignoreMap":22},[567,147256,147257],{"start":107},[570,147258,104753,147259,147261,147262,147264],{},[31,147260,46262],{}," 让两次 ",[31,147263,146859],{}," 输出在同一行。",[532,147266,147267],{},"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":22,"searchDepth":44,"depth":44,"links":147269},[147270,147271,147272,147277,147278,147279,147283,147284,147285,147286,147291],{"id":146152,"depth":44,"text":146153},{"id":146196,"depth":44,"text":146197},{"id":146297,"depth":44,"text":146298,"children":147273},[147274,147275,147276],{"id":146301,"depth":50,"text":146302},{"id":146356,"depth":50,"text":146357},{"id":146392,"depth":50,"text":146393},{"id":146465,"depth":44,"text":146466},{"id":146610,"depth":44,"text":146611},{"id":146715,"depth":44,"text":146716,"children":147280},[147281,147282],{"id":146719,"depth":50,"text":146720},{"id":146748,"depth":50,"text":146749},{"id":146778,"depth":44,"text":146779},{"id":146853,"depth":44,"text":146854},{"id":147031,"depth":44,"text":147032},{"id":147113,"depth":44,"text":147114,"children":147287},[147288,147289,147290],{"id":147117,"depth":50,"text":147118},{"id":147143,"depth":50,"text":147144},{"id":147159,"depth":50,"text":147160},{"id":147218,"depth":44,"text":147219},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146144,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147298,"title":147299,"body":147300,"description":537,"extension":538,"meta":149704,"navigation":540,"path":149705,"seo":149706,"stem":149707,"__hash__":149708},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147301,"toc":149689},[147302,147305,147309,147312,147315,147332,147335,147377,147380,147384,147387,147390,147427,147430,147464,147467,147559,147563,147577,147580,147607,147610,147614,147717,147724,147727,147744,147748,147755,147944,147947,148020,148024,148027,148111,148114,148146,148150,148354,148357,148361,148367,148469,148472,148728,148732,148735,148738,148752,148754,148940,148944,149306,149312,149316,149319,149443,149446,149625,149628,149632,149665,149669,149686],[10,147303,147299],{"id":147304},"_10-json与pyecharts折线图",[555,147306,147308],{"id":147307},"_101-数据可视化","10.1 数据可视化",[14,147310,147311],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147313,147314],{},"常见图表：",[567,147316,147317,147320,147323,147326,147329],{},[570,147318,147319],{},"折线图：看趋势。",[570,147321,147322],{},"柱状图：看分类对比。",[570,147324,147325],{},"饼图：看占比。",[570,147327,147328],{},"地图：看地域分布。",[570,147330,147331],{},"散点图：看两个变量之间的关系。",[14,147333,147334],{},"Python 可视化常用库：",[748,147336,147337,147345],{},[751,147338,147339],{},[754,147340,147341,147343],{},[757,147342,146548],{},[757,147344,24204],{},[795,147346,147347,147354,147362,147369],{},[754,147348,147349,147351],{},[800,147350,146580],{},[800,147352,147353],{},"基础、经典、可定制",[754,147355,147356,147359],{},[800,147357,147358],{},"seaborn",[800,147360,147361],{},"统计图表更美观",[754,147363,147364,147366],{},[800,147365,146588],{},[800,147367,147368],{},"生成交互式网页图表",[754,147370,147371,147374],{},[800,147372,147373],{},"plotly",[800,147375,147376],{},"交互图表能力强",[14,147378,147379],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[555,147381,147383],{"id":147382},"_102-json回顾","10.2 JSON回顾",[14,147385,147386],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147388,147389],{},"Python 字典：",[25,147391,147393],{"className":27,"code":147392,"language":29,"meta":22,"style":22},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[31,147394,147395,147403,147414,147423],{"__ignoreMap":22},[34,147396,147397,147399,147401],{"class":36,"line":37},[34,147398,102045],{"class":59},[34,147400,447],{"class":112},[34,147402,16036],{"class":59},[34,147404,147405,147408,147410,147412],{"class":36,"line":44},[34,147406,147407],{"class":187},"    \"name\"",[34,147409,51898],{"class":59},[34,147411,69730],{"class":187},[34,147413,31929],{"class":59},[34,147415,147416,147419,147421],{"class":36,"line":50},[34,147417,147418],{"class":187},"    \"value\"",[34,147420,51898],{"class":59},[34,147422,482],{"class":63},[34,147424,147425],{"class":36,"line":56},[34,147426,2036],{"class":59},[14,147428,147429],{},"JSON 字符串：",[25,147431,147434],{"className":147432,"code":147433,"language":146179,"meta":22,"style":22},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[31,147435,147436,147440,147451,147460],{"__ignoreMap":22},[34,147437,147438],{"class":36,"line":37},[34,147439,2017],{"class":59},[34,147441,147442,147445,147447,147449],{"class":36,"line":44},[34,147443,147444],{"class":63},"  \"name\"",[34,147446,51898],{"class":59},[34,147448,69730],{"class":187},[34,147450,31929],{"class":59},[34,147452,147453,147456,147458],{"class":36,"line":50},[34,147454,147455],{"class":63},"  \"value\"",[34,147457,51898],{"class":59},[34,147459,482],{"class":63},[34,147461,147462],{"class":36,"line":56},[34,147463,2036],{"class":59},[14,147465,147466],{},"Python 与 JSON 的转换：",[25,147468,147470],{"className":27,"code":147469,"language":29,"meta":22,"style":22},"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",[31,147471,147472,147479,147483,147508,147512,147531,147538,147542,147552],{"__ignoreMap":22},[34,147473,147474,147476],{"class":36,"line":37},[34,147475,30855],{"class":112},[34,147477,147478],{"class":59}," json\n",[34,147480,147481],{"class":36,"line":44},[34,147482,2864],{"emptyLinePlaceholder":540},[34,147484,147485,147487,147489,147491,147493,147495,147497,147499,147502,147504,147506],{"class":36,"line":50},[34,147486,102045],{"class":59},[34,147488,447],{"class":112},[34,147490,4912],{"class":59},[34,147492,63140],{"class":187},[34,147494,51898],{"class":59},[34,147496,69730],{"class":187},[34,147498,12899],{"class":59},[34,147500,147501],{"class":187},"\"value\"",[34,147503,51898],{"class":59},[34,147505,919],{"class":63},[34,147507,2036],{"class":59},[34,147509,147510],{"class":36,"line":56},[34,147511,2864],{"emptyLinePlaceholder":540},[34,147513,147514,147517,147519,147522,147525,147527,147529],{"class":36,"line":107},[34,147515,147516],{"class":59},"json_text ",[34,147518,447],{"class":112},[34,147520,147521],{"class":59}," json.dumps(data, ",[34,147523,147524],{"class":5680},"ensure_ascii",[34,147526,447],{"class":112},[34,147528,34449],{"class":63},[34,147530,623],{"class":59},[34,147532,147533,147535],{"class":36,"line":196},[34,147534,30878],{"class":63},[34,147536,147537],{"class":59},"(json_text)\n",[34,147539,147540],{"class":36,"line":202},[34,147541,2864],{"emptyLinePlaceholder":540},[34,147543,147544,147547,147549],{"class":36,"line":207},[34,147545,147546],{"class":59},"new_data ",[34,147548,447],{"class":112},[34,147550,147551],{"class":59}," json.loads(json_text)\n",[34,147553,147554,147556],{"class":36,"line":222},[34,147555,30878],{"class":63},[34,147557,147558],{"class":59},"(new_data)\n",[555,147560,147562],{"id":147561},"_103-安装pyecharts","10.3 安装pyecharts",[25,147564,147566],{"className":24286,"code":147565,"language":24288,"meta":22,"style":22},"pip install pyecharts\n",[31,147567,147568],{"__ignoreMap":22},[34,147569,147570,147572,147574],{"class":36,"line":37},[34,147571,24295],{"class":2427},[34,147573,24298],{"class":187},[34,147575,147576],{"class":187}," pyecharts\n",[14,147578,147579],{},"验证：",[25,147581,147583],{"className":27,"code":147582,"language":29,"meta":22,"style":22},"import pyecharts\n\nprint(pyecharts.__version__)\n",[31,147584,147585,147591,147595],{"__ignoreMap":22},[34,147586,147587,147589],{"class":36,"line":37},[34,147588,30855],{"class":112},[34,147590,147576],{"class":59},[34,147592,147593],{"class":36,"line":44},[34,147594,2864],{"emptyLinePlaceholder":540},[34,147596,147597,147599,147602,147605],{"class":36,"line":50},[34,147598,30878],{"class":63},[34,147600,147601],{"class":59},"(pyecharts.",[34,147603,147604],{"class":63},"__version__",[34,147606,623],{"class":59},[14,147608,147609],{},"如果使用虚拟环境，要先激活环境再安装。",[555,147611,147613],{"id":147612},"_104-第一个折线图","10.4 第一个折线图",[25,147615,147617],{"className":27,"code":147616,"language":29,"meta":22,"style":22},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[31,147618,147619,147631,147635,147645,147675,147707],{"__ignoreMap":22},[34,147620,147621,147623,147626,147628],{"class":36,"line":37},[34,147622,31200],{"class":112},[34,147624,147625],{"class":59}," pyecharts.charts ",[34,147627,30855],{"class":112},[34,147629,147630],{"class":59}," Line\n",[34,147632,147633],{"class":36,"line":44},[34,147634,2864],{"emptyLinePlaceholder":540},[34,147636,147637,147640,147642],{"class":36,"line":50},[34,147638,147639],{"class":59},"line ",[34,147641,447],{"class":112},[34,147643,147644],{"class":59}," Line()\n",[34,147646,147647,147650,147653,147655,147658,147660,147663,147665,147668,147670,147673],{"class":36,"line":56},[34,147648,147649],{"class":59},"line.add_xaxis([",[34,147651,147652],{"class":187},"\"周一\"",[34,147654,12899],{"class":59},[34,147656,147657],{"class":187},"\"周二\"",[34,147659,12899],{"class":59},[34,147661,147662],{"class":187},"\"周三\"",[34,147664,12899],{"class":59},[34,147666,147667],{"class":187},"\"周四\"",[34,147669,12899],{"class":59},[34,147671,147672],{"class":187},"\"周五\"",[34,147674,5121],{"class":59},[34,147676,147677,147680,147683,147685,147687,147689,147691,147693,147695,147697,147700,147702,147705],{"class":36,"line":107},[34,147678,147679],{"class":59},"line.add_yaxis(",[34,147681,147682],{"class":187},"\"销售额\"",[34,147684,77979],{"class":59},[34,147686,919],{"class":63},[34,147688,12899],{"class":59},[34,147690,1423],{"class":63},[34,147692,12899],{"class":59},[34,147694,1467],{"class":63},[34,147696,12899],{"class":59},[34,147698,147699],{"class":63},"150",[34,147701,12899],{"class":59},[34,147703,147704],{"class":63},"180",[34,147706,5121],{"class":59},[34,147708,147709,147712,147715],{"class":36,"line":196},[34,147710,147711],{"class":59},"line.render(",[34,147713,147714],{"class":187},"\"line.html\"",[34,147716,623],{"class":59},[14,147718,147719,147720,147723],{},"运行后会生成 ",[31,147721,147722],{},"line.html","，用浏览器打开即可看到图表。",[14,147725,147726],{},"核心步骤：",[567,147728,147729,147732,147735,147738,147741],{},[570,147730,147731],{},"导入图表类。",[570,147733,147734],{},"创建图表对象。",[570,147736,147737],{},"添加 x 轴数据。",[570,147739,147740],{},"添加 y 轴数据。",[570,147742,147743],{},"渲染为 HTML。",[555,147745,147747],{"id":147746},"_105-全局配置","10.5 全局配置",[14,147749,147750,147751,147754],{},"常用配置在 ",[31,147752,147753],{},"pyecharts.options"," 中。",[25,147756,147758],{"className":27,"code":147757,"language":29,"meta":22,"style":22},"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",[31,147759,147760,147777,147787,147791,147799,147823,147851,147856,147875,147894,147912,147932,147936],{"__ignoreMap":22},[34,147761,147762,147764,147767,147769,147772,147774],{"class":36,"line":37},[34,147763,31200],{"class":112},[34,147765,147766],{"class":59}," pyecharts ",[34,147768,30855],{"class":112},[34,147770,147771],{"class":59}," options ",[34,147773,31846],{"class":112},[34,147775,147776],{"class":59}," opts\n",[34,147778,147779,147781,147783,147785],{"class":36,"line":44},[34,147780,31200],{"class":112},[34,147782,147625],{"class":59},[34,147784,30855],{"class":112},[34,147786,147630],{"class":59},[34,147788,147789],{"class":36,"line":50},[34,147790,2864],{"emptyLinePlaceholder":540},[34,147792,147793,147795,147797],{"class":36,"line":56},[34,147794,147639],{"class":59},[34,147796,447],{"class":112},[34,147798,147644],{"class":59},[34,147800,147801,147803,147805,147807,147809,147811,147813,147815,147817,147819,147821],{"class":36,"line":107},[34,147802,147649],{"class":59},[34,147804,147652],{"class":187},[34,147806,12899],{"class":59},[34,147808,147657],{"class":187},[34,147810,12899],{"class":59},[34,147812,147662],{"class":187},[34,147814,12899],{"class":59},[34,147816,147667],{"class":187},[34,147818,12899],{"class":59},[34,147820,147672],{"class":187},[34,147822,5121],{"class":59},[34,147824,147825,147827,147829,147831,147833,147835,147837,147839,147841,147843,147845,147847,147849],{"class":36,"line":196},[34,147826,147679],{"class":59},[34,147828,147682],{"class":187},[34,147830,77979],{"class":59},[34,147832,919],{"class":63},[34,147834,12899],{"class":59},[34,147836,1423],{"class":63},[34,147838,12899],{"class":59},[34,147840,1467],{"class":63},[34,147842,12899],{"class":59},[34,147844,147699],{"class":63},[34,147846,12899],{"class":59},[34,147848,147704],{"class":63},[34,147850,5121],{"class":59},[34,147852,147853],{"class":36,"line":202},[34,147854,147855],{"class":59},"line.set_global_opts(\n",[34,147857,147858,147861,147863,147866,147868,147870,147873],{"class":36,"line":207},[34,147859,147860],{"class":5680},"    title_opts",[34,147862,447],{"class":112},[34,147864,147865],{"class":59},"opts.TitleOpts(",[34,147867,51868],{"class":5680},[34,147869,447],{"class":112},[34,147871,147872],{"class":187},"\"一周销售额\"",[34,147874,38509],{"class":59},[34,147876,147877,147880,147882,147885,147887,147889,147892],{"class":36,"line":222},[34,147878,147879],{"class":5680},"    xaxis_opts",[34,147881,447],{"class":112},[34,147883,147884],{"class":59},"opts.AxisOpts(",[34,147886,80271],{"class":5680},[34,147888,447],{"class":112},[34,147890,147891],{"class":187},"\"日期\"",[34,147893,38509],{"class":59},[34,147895,147896,147899,147901,147903,147905,147907,147910],{"class":36,"line":227},[34,147897,147898],{"class":5680},"    yaxis_opts",[34,147900,447],{"class":112},[34,147902,147884],{"class":59},[34,147904,80271],{"class":5680},[34,147906,447],{"class":112},[34,147908,147909],{"class":187},"\"金额\"",[34,147911,38509],{"class":59},[34,147913,147914,147917,147919,147922,147925,147927,147930],{"class":36,"line":232},[34,147915,147916],{"class":5680},"    tooltip_opts",[34,147918,447],{"class":112},[34,147920,147921],{"class":59},"opts.TooltipOpts(",[34,147923,147924],{"class":5680},"trigger",[34,147926,447],{"class":112},[34,147928,147929],{"class":187},"\"axis\"",[34,147931,38509],{"class":59},[34,147933,147934],{"class":36,"line":238},[34,147935,623],{"class":59},[34,147937,147938,147940,147942],{"class":36,"line":244},[34,147939,147711],{"class":59},[34,147941,147714],{"class":187},[34,147943,623],{"class":59},[14,147945,147946],{},"常见全局配置：",[748,147948,147949,147958],{},[751,147950,147951],{},[754,147952,147953,147956],{},[757,147954,147955],{},"配置",[757,147957,103083],{},[795,147959,147960,147970,147980,147990,148000,148010],{},[754,147961,147962,147967],{},[800,147963,147964],{},[31,147965,147966],{},"TitleOpts",[800,147968,147969],{},"标题",[754,147971,147972,147977],{},[800,147973,147974],{},[31,147975,147976],{},"LegendOpts",[800,147978,147979],{},"图例",[754,147981,147982,147987],{},[800,147983,147984],{},[31,147985,147986],{},"TooltipOpts",[800,147988,147989],{},"提示框",[754,147991,147992,147997],{},[800,147993,147994],{},[31,147995,147996],{},"AxisOpts",[800,147998,147999],{},"坐标轴",[754,148001,148002,148007],{},[800,148003,148004],{},[31,148005,148006],{},"VisualMapOpts",[800,148008,148009],{},"视觉映射",[754,148011,148012,148017],{},[800,148013,148014],{},[31,148015,148016],{},"DataZoomOpts",[800,148018,148019],{},"区域缩放",[555,148021,148023],{"id":148022},"_106-系列配置","10.6 系列配置",[14,148025,148026],{},"系列配置作用于某一组数据。",[25,148028,148030],{"className":27,"code":148029,"language":29,"meta":22,"style":22},"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",[31,148031,148032,148037,148048,148077,148088,148107],{"__ignoreMap":22},[34,148033,148034],{"class":36,"line":37},[34,148035,148036],{"class":59},"line.add_yaxis(\n",[34,148038,148039,148042,148044,148046],{"class":36,"line":44},[34,148040,148041],{"class":5680},"    series_name",[34,148043,447],{"class":112},[34,148045,147682],{"class":187},[34,148047,31929],{"class":59},[34,148049,148050,148053,148055,148057,148059,148061,148063,148065,148067,148069,148071,148073,148075],{"class":36,"line":50},[34,148051,148052],{"class":5680},"    y_axis",[34,148054,447],{"class":112},[34,148056,1495],{"class":59},[34,148058,919],{"class":63},[34,148060,12899],{"class":59},[34,148062,1423],{"class":63},[34,148064,12899],{"class":59},[34,148066,1467],{"class":63},[34,148068,12899],{"class":59},[34,148070,147699],{"class":63},[34,148072,12899],{"class":59},[34,148074,147704],{"class":63},[34,148076,88297],{"class":59},[34,148078,148079,148082,148084,148086],{"class":36,"line":56},[34,148080,148081],{"class":5680},"    is_smooth",[34,148083,447],{"class":112},[34,148085,31939],{"class":63},[34,148087,31929],{"class":59},[34,148089,148090,148093,148095,148098,148101,148103,148105],{"class":36,"line":107},[34,148091,148092],{"class":5680},"    label_opts",[34,148094,447],{"class":112},[34,148096,148097],{"class":59},"opts.LabelOpts(",[34,148099,148100],{"class":5680},"is_show",[34,148102,447],{"class":112},[34,148104,31939],{"class":63},[34,148106,38509],{"class":59},[34,148108,148109],{"class":36,"line":196},[34,148110,623],{"class":59},[14,148112,148113],{},"常用参数：",[567,148115,148116,148122,148128,148134,148140],{},[570,148117,148118,148121],{},[31,148119,148120],{},"series_name","：系列名称。",[570,148123,148124,148127],{},[31,148125,148126],{},"y_axis","：y 轴数据。",[570,148129,148130,148133],{},[31,148131,148132],{},"is_smooth","：是否平滑曲线。",[570,148135,148136,148139],{},[31,148137,148138],{},"label_opts","：标签配置。",[570,148141,148142,148145],{},[31,148143,148144],{},"symbol_size","：标记点大小。",[555,148147,148149],{"id":148148},"_107-多条折线","10.7 多条折线",[25,148151,148153],{"className":27,"code":148152,"language":29,"meta":22,"style":22},"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",[31,148154,148155,148169,148179,148183,148212,148216,148224,148229,148267,148304,148308,148325,148341,148345],{"__ignoreMap":22},[34,148156,148157,148159,148161,148163,148165,148167],{"class":36,"line":37},[34,148158,31200],{"class":112},[34,148160,147766],{"class":59},[34,148162,30855],{"class":112},[34,148164,147771],{"class":59},[34,148166,31846],{"class":112},[34,148168,147776],{"class":59},[34,148170,148171,148173,148175,148177],{"class":36,"line":44},[34,148172,31200],{"class":112},[34,148174,147625],{"class":59},[34,148176,30855],{"class":112},[34,148178,147630],{"class":59},[34,148180,148181],{"class":36,"line":50},[34,148182,2864],{"emptyLinePlaceholder":540},[34,148184,148185,148188,148190,148192,148194,148196,148198,148200,148202,148204,148206,148208,148210],{"class":36,"line":56},[34,148186,148187],{"class":59},"dates ",[34,148189,447],{"class":112},[34,148191,52687],{"class":59},[34,148193,147652],{"class":187},[34,148195,12899],{"class":59},[34,148197,147657],{"class":187},[34,148199,12899],{"class":59},[34,148201,147662],{"class":187},[34,148203,12899],{"class":59},[34,148205,147667],{"class":187},[34,148207,12899],{"class":59},[34,148209,147672],{"class":187},[34,148211,73],{"class":59},[34,148213,148214],{"class":36,"line":107},[34,148215,2864],{"emptyLinePlaceholder":540},[34,148217,148218,148220,148222],{"class":36,"line":196},[34,148219,147639],{"class":59},[34,148221,447],{"class":112},[34,148223,147644],{"class":59},[34,148225,148226],{"class":36,"line":202},[34,148227,148228],{"class":59},"line.add_xaxis(dates)\n",[34,148230,148231,148233,148236,148238,148240,148242,148245,148247,148249,148251,148253,148255,148257,148259,148261,148263,148265],{"class":36,"line":207},[34,148232,147679],{"class":59},[34,148234,148235],{"class":187},"\"线上销售\"",[34,148237,77979],{"class":59},[34,148239,919],{"class":63},[34,148241,12899],{"class":59},[34,148243,148244],{"class":63},"130",[34,148246,12899],{"class":59},[34,148248,1423],{"class":63},[34,148250,12899],{"class":59},[34,148252,21512],{"class":63},[34,148254,12899],{"class":59},[34,148256,2186],{"class":63},[34,148258,112589],{"class":59},[34,148260,148132],{"class":5680},[34,148262,447],{"class":112},[34,148264,31939],{"class":63},[34,148266,623],{"class":59},[34,148268,148269,148271,148274,148276,148278,148280,148282,148284,148286,148288,148290,148292,148294,148296,148298,148300,148302],{"class":36,"line":222},[34,148270,147679],{"class":59},[34,148272,148273],{"class":187},"\"线下销售\"",[34,148275,77979],{"class":59},[34,148277,1218],{"class":63},[34,148279,12899],{"class":59},[34,148281,1467],{"class":63},[34,148283,12899],{"class":59},[34,148285,919],{"class":63},[34,148287,12899],{"class":59},[34,148289,1423],{"class":63},[34,148291,12899],{"class":59},[34,148293,147699],{"class":63},[34,148295,112589],{"class":59},[34,148297,148132],{"class":5680},[34,148299,447],{"class":112},[34,148301,31939],{"class":63},[34,148303,623],{"class":59},[34,148305,148306],{"class":36,"line":227},[34,148307,147855],{"class":59},[34,148309,148310,148312,148314,148316,148318,148320,148323],{"class":36,"line":232},[34,148311,147860],{"class":5680},[34,148313,447],{"class":112},[34,148315,147865],{"class":59},[34,148317,51868],{"class":5680},[34,148319,447],{"class":112},[34,148321,148322],{"class":187},"\"线上线下销售趋势\"",[34,148324,38509],{"class":59},[34,148326,148327,148329,148331,148333,148335,148337,148339],{"class":36,"line":238},[34,148328,147916],{"class":5680},[34,148330,447],{"class":112},[34,148332,147921],{"class":59},[34,148334,147924],{"class":5680},[34,148336,447],{"class":112},[34,148338,147929],{"class":187},[34,148340,38509],{"class":59},[34,148342,148343],{"class":36,"line":244},[34,148344,623],{"class":59},[34,148346,148347,148349,148352],{"class":36,"line":250},[34,148348,147711],{"class":59},[34,148350,148351],{"class":187},"\"sales.html\"",[34,148353,623],{"class":59},[14,148355,148356],{},"多条折线适合比较不同指标或不同地区。",[555,148358,148360],{"id":148359},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148362,148363,148364,25083],{},"假设 ",[31,148365,148366],{},"sales.json",[25,148368,148370],{"className":147432,"code":148369,"language":146179,"meta":22,"style":22},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[31,148371,148372,148377,148409,148437,148465],{"__ignoreMap":22},[34,148373,148374],{"class":36,"line":37},[34,148375,148376],{"class":59},"[\n",[34,148378,148379,148382,148385,148387,148389,148391,148394,148396,148398,148400,148403,148405,148407],{"class":36,"line":44},[34,148380,148381],{"class":59},"  {",[34,148383,148384],{"class":63},"\"date\"",[34,148386,51898],{"class":59},[34,148388,147652],{"class":187},[34,148390,12899],{"class":59},[34,148392,148393],{"class":63},"\"online\"",[34,148395,51898],{"class":59},[34,148397,919],{"class":63},[34,148399,12899],{"class":59},[34,148401,148402],{"class":63},"\"offline\"",[34,148404,51898],{"class":59},[34,148406,1218],{"class":63},[34,148408,5394],{"class":59},[34,148410,148411,148413,148415,148417,148419,148421,148423,148425,148427,148429,148431,148433,148435],{"class":36,"line":50},[34,148412,148381],{"class":59},[34,148414,148384],{"class":63},[34,148416,51898],{"class":59},[34,148418,147657],{"class":187},[34,148420,12899],{"class":59},[34,148422,148393],{"class":63},[34,148424,51898],{"class":59},[34,148426,148244],{"class":63},[34,148428,12899],{"class":59},[34,148430,148402],{"class":63},[34,148432,51898],{"class":59},[34,148434,1467],{"class":63},[34,148436,5394],{"class":59},[34,148438,148439,148441,148443,148445,148447,148449,148451,148453,148455,148457,148459,148461,148463],{"class":36,"line":56},[34,148440,148381],{"class":59},[34,148442,148384],{"class":63},[34,148444,51898],{"class":59},[34,148446,147662],{"class":187},[34,148448,12899],{"class":59},[34,148450,148393],{"class":63},[34,148452,51898],{"class":59},[34,148454,1423],{"class":63},[34,148456,12899],{"class":59},[34,148458,148402],{"class":63},[34,148460,51898],{"class":59},[34,148462,919],{"class":63},[34,148464,2036],{"class":59},[34,148466,148467],{"class":36,"line":107},[34,148468,73],{"class":59},[14,148470,148471],{},"读取并绘图：",[25,148473,148475],{"className":27,"code":148474,"language":29,"meta":22,"style":22},"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",[31,148476,148477,148483,148497,148507,148511,148543,148556,148560,148568,148577,148586,148590,148602,148611,148620,148629,148633,148641,148645,148662,148679,148683,148700,148716,148720],{"__ignoreMap":22},[34,148478,148479,148481],{"class":36,"line":37},[34,148480,30855],{"class":112},[34,148482,147478],{"class":59},[34,148484,148485,148487,148489,148491,148493,148495],{"class":36,"line":44},[34,148486,31200],{"class":112},[34,148488,147766],{"class":59},[34,148490,30855],{"class":112},[34,148492,147771],{"class":59},[34,148494,31846],{"class":112},[34,148496,147776],{"class":59},[34,148498,148499,148501,148503,148505],{"class":36,"line":50},[34,148500,31200],{"class":112},[34,148502,147625],{"class":59},[34,148504,30855],{"class":112},[34,148506,147630],{"class":59},[34,148508,148509],{"class":36,"line":56},[34,148510,2864],{"emptyLinePlaceholder":540},[34,148512,148513,148515,148517,148519,148522,148524,148526,148528,148530,148532,148534,148536,148538,148541],{"class":36,"line":107},[34,148514,108220],{"class":112},[34,148516,147178],{"class":63},[34,148518,617],{"class":59},[34,148520,148521],{"class":187},"\"sales.json\"",[34,148523,12899],{"class":59},[34,148525,147188],{"class":187},[34,148527,12899],{"class":59},[34,148529,147193],{"class":5680},[34,148531,447],{"class":112},[34,148533,147198],{"class":187},[34,148535,14178],{"class":59},[34,148537,31846],{"class":112},[34,148539,148540],{"class":5680}," file",[34,148542,4203],{"class":59},[34,148544,148545,148547,148549,148552,148554],{"class":36,"line":196},[34,148546,101808],{"class":59},[34,148548,447],{"class":112},[34,148550,148551],{"class":59}," json.load(",[34,148553,45815],{"class":5680},[34,148555,623],{"class":59},[34,148557,148558],{"class":36,"line":202},[34,148559,2864],{"emptyLinePlaceholder":540},[34,148561,148562,148564,148566],{"class":36,"line":207},[34,148563,148187],{"class":59},[34,148565,447],{"class":112},[34,148567,52299],{"class":59},[34,148569,148570,148573,148575],{"class":36,"line":222},[34,148571,148572],{"class":59},"online_sales ",[34,148574,447],{"class":112},[34,148576,52299],{"class":59},[34,148578,148579,148582,148584],{"class":36,"line":227},[34,148580,148581],{"class":59},"offline_sales ",[34,148583,447],{"class":112},[34,148585,52299],{"class":59},[34,148587,148588],{"class":36,"line":232},[34,148589,2864],{"emptyLinePlaceholder":540},[34,148591,148592,148594,148597,148599],{"class":36,"line":238},[34,148593,3489],{"class":112},[34,148595,148596],{"class":59}," item ",[34,148598,26508],{"class":112},[34,148600,148601],{"class":59}," data:\n",[34,148603,148604,148607,148609],{"class":36,"line":244},[34,148605,148606],{"class":59},"    dates.append(item[",[34,148608,148384],{"class":187},[34,148610,5121],{"class":59},[34,148612,148613,148616,148618],{"class":36,"line":250},[34,148614,148615],{"class":59},"    online_sales.append(item[",[34,148617,148393],{"class":187},[34,148619,5121],{"class":59},[34,148621,148622,148625,148627],{"class":36,"line":256},[34,148623,148624],{"class":59},"    offline_sales.append(item[",[34,148626,148402],{"class":187},[34,148628,5121],{"class":59},[34,148630,148631],{"class":36,"line":261},[34,148632,2864],{"emptyLinePlaceholder":540},[34,148634,148635,148637,148639],{"class":36,"line":267},[34,148636,147639],{"class":59},[34,148638,447],{"class":112},[34,148640,147644],{"class":59},[34,148642,148643],{"class":36,"line":2138},[34,148644,148228],{"class":59},[34,148646,148647,148649,148651,148654,148656,148658,148660],{"class":36,"line":2143},[34,148648,147679],{"class":59},[34,148650,148235],{"class":187},[34,148652,148653],{"class":59},", online_sales, ",[34,148655,148132],{"class":5680},[34,148657,447],{"class":112},[34,148659,31939],{"class":63},[34,148661,623],{"class":59},[34,148663,148664,148666,148668,148671,148673,148675,148677],{"class":36,"line":2157},[34,148665,147679],{"class":59},[34,148667,148273],{"class":187},[34,148669,148670],{"class":59},", offline_sales, ",[34,148672,148132],{"class":5680},[34,148674,447],{"class":112},[34,148676,31939],{"class":63},[34,148678,623],{"class":59},[34,148680,148681],{"class":36,"line":2162},[34,148682,147855],{"class":59},[34,148684,148685,148687,148689,148691,148693,148695,148698],{"class":36,"line":2191},[34,148686,147860],{"class":5680},[34,148688,447],{"class":112},[34,148690,147865],{"class":59},[34,148692,51868],{"class":5680},[34,148694,447],{"class":112},[34,148696,148697],{"class":187},"\"销售趋势\"",[34,148699,38509],{"class":59},[34,148701,148702,148704,148706,148708,148710,148712,148714],{"class":36,"line":2196},[34,148703,147916],{"class":5680},[34,148705,447],{"class":112},[34,148707,147921],{"class":59},[34,148709,147924],{"class":5680},[34,148711,447],{"class":112},[34,148713,147929],{"class":187},[34,148715,38509],{"class":59},[34,148717,148718],{"class":36,"line":2213},[34,148719,623],{"class":59},[34,148721,148722,148724,148726],{"class":36,"line":2218},[34,148723,147711],{"class":59},[34,148725,148351],{"class":187},[34,148727,623],{"class":59},[555,148729,148731],{"id":148730},"_109-数据清洗","10.9 数据清洗",[14,148733,148734],{},"真实数据经常不整齐，需要清洗。",[14,148736,148737],{},"常见问题：",[567,148739,148740,148743,148746,148749],{},[570,148741,148742],{},"数字是字符串。",[570,148744,148745],{},"字段缺失。",[570,148747,148748],{},"空值。",[570,148750,148751],{},"日期格式不统一。",[14,148753,15599],{},[25,148755,148757],{"className":27,"code":148756,"language":29,"meta":22,"style":22},"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",[31,148758,148759,148768,148791,148811,148832,148836,148840,148848,148857,148861,148872,148886,148895,148900,148904,148912,148922,148926,148933],{"__ignoreMap":22},[34,148760,148761,148764,148766],{"class":36,"line":37},[34,148762,148763],{"class":59},"raw_data ",[34,148765,447],{"class":112},[34,148767,55908],{"class":59},[34,148769,148770,148773,148775,148777,148779,148781,148784,148786,148789],{"class":36,"line":44},[34,148771,148772],{"class":59},"    {",[34,148774,148384],{"class":187},[34,148776,51898],{"class":59},[34,148778,147652],{"class":187},[34,148780,12899],{"class":59},[34,148782,148783],{"class":187},"\"sales\"",[34,148785,51898],{"class":59},[34,148787,148788],{"class":187},"\"100\"",[34,148790,5394],{"class":59},[34,148792,148793,148795,148797,148799,148801,148803,148805,148807,148809],{"class":36,"line":50},[34,148794,148772],{"class":59},[34,148796,148384],{"class":187},[34,148798,51898],{"class":59},[34,148800,147657],{"class":187},[34,148802,12899],{"class":59},[34,148804,148783],{"class":187},[34,148806,51898],{"class":59},[34,148808,8116],{"class":187},[34,148810,5394],{"class":59},[34,148812,148813,148815,148817,148819,148821,148823,148825,148827,148830],{"class":36,"line":56},[34,148814,148772],{"class":59},[34,148816,148384],{"class":187},[34,148818,51898],{"class":59},[34,148820,147662],{"class":187},[34,148822,12899],{"class":59},[34,148824,148783],{"class":187},[34,148826,51898],{"class":59},[34,148828,148829],{"class":187},"\"120\"",[34,148831,5394],{"class":59},[34,148833,148834],{"class":36,"line":107},[34,148835,73],{"class":59},[34,148837,148838],{"class":36,"line":196},[34,148839,2864],{"emptyLinePlaceholder":540},[34,148841,148842,148844,148846],{"class":36,"line":202},[34,148843,148187],{"class":59},[34,148845,447],{"class":112},[34,148847,52299],{"class":59},[34,148849,148850,148853,148855],{"class":36,"line":207},[34,148851,148852],{"class":59},"sales ",[34,148854,447],{"class":112},[34,148856,52299],{"class":59},[34,148858,148859],{"class":36,"line":222},[34,148860,2864],{"emptyLinePlaceholder":540},[34,148862,148863,148865,148867,148869],{"class":36,"line":227},[34,148864,3489],{"class":112},[34,148866,148596],{"class":59},[34,148868,26508],{"class":112},[34,148870,148871],{"class":59}," raw_data:\n",[34,148873,148874,148877,148879,148882,148884],{"class":36,"line":232},[34,148875,148876],{"class":59},"    value ",[34,148878,447],{"class":112},[34,148880,148881],{"class":59}," item.get(",[34,148883,148783],{"class":187},[34,148885,623],{"class":59},[34,148887,148888,148890,148892],{"class":36,"line":238},[34,148889,3565],{"class":112},[34,148891,39392],{"class":112},[34,148893,148894],{"class":59}," value:\n",[34,148896,148897],{"class":36,"line":244},[34,148898,148899],{"class":112},"        continue\n",[34,148901,148902],{"class":36,"line":250},[34,148903,2864],{"emptyLinePlaceholder":540},[34,148905,148906,148908,148910],{"class":36,"line":256},[34,148907,148606],{"class":59},[34,148909,148384],{"class":187},[34,148911,5121],{"class":59},[34,148913,148914,148917,148919],{"class":36,"line":261},[34,148915,148916],{"class":59},"    sales.append(",[34,148918,620],{"class":63},[34,148920,148921],{"class":59},"(value))\n",[34,148923,148924],{"class":36,"line":267},[34,148925,2864],{"emptyLinePlaceholder":540},[34,148927,148928,148930],{"class":36,"line":2138},[34,148929,30878],{"class":63},[34,148931,148932],{"class":59},"(dates)\n",[34,148934,148935,148937],{"class":36,"line":2143},[34,148936,30878],{"class":63},[34,148938,148939],{"class":59},"(sales)\n",[555,148941,148943],{"id":148942},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[25,148945,148947],{"className":27,"code":148946,"language":29,"meta":22,"style":22},"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",[31,148948,148949,148963,148973,148977,148985,149006,149028,149050,149072,149094,149098,149102,149124,149145,149149,149157,149161,149165,149175,149184,149194,149210,149214,149218,149235,149251,149267,149283,149293,149297],{"__ignoreMap":22},[34,148950,148951,148953,148955,148957,148959,148961],{"class":36,"line":37},[34,148952,31200],{"class":112},[34,148954,147766],{"class":59},[34,148956,30855],{"class":112},[34,148958,147771],{"class":59},[34,148960,31846],{"class":112},[34,148962,147776],{"class":59},[34,148964,148965,148967,148969,148971],{"class":36,"line":44},[34,148966,31200],{"class":112},[34,148968,147625],{"class":59},[34,148970,30855],{"class":112},[34,148972,147630],{"class":59},[34,148974,148975],{"class":36,"line":50},[34,148976,2864],{"emptyLinePlaceholder":540},[34,148978,148979,148981,148983],{"class":36,"line":56},[34,148980,148852],{"class":59},[34,148982,447],{"class":112},[34,148984,55908],{"class":59},[34,148986,148987,148989,148991,148993,148996,148998,149000,149002,149004],{"class":36,"line":107},[34,148988,148772],{"class":59},[34,148990,148384],{"class":187},[34,148992,51898],{"class":59},[34,148994,148995],{"class":187},"\"2024-10-01\"",[34,148997,12899],{"class":59},[34,148999,84545],{"class":187},[34,149001,51898],{"class":59},[34,149003,92484],{"class":63},[34,149005,5394],{"class":59},[34,149007,149008,149010,149012,149014,149017,149019,149021,149023,149026],{"class":36,"line":196},[34,149009,148772],{"class":59},[34,149011,148384],{"class":187},[34,149013,51898],{"class":59},[34,149015,149016],{"class":187},"\"2024-10-02\"",[34,149018,12899],{"class":59},[34,149020,84545],{"class":187},[34,149022,51898],{"class":59},[34,149024,149025],{"class":63},"1800",[34,149027,5394],{"class":59},[34,149029,149030,149032,149034,149036,149039,149041,149043,149045,149048],{"class":36,"line":202},[34,149031,148772],{"class":59},[34,149033,148384],{"class":187},[34,149035,51898],{"class":59},[34,149037,149038],{"class":187},"\"2024-10-03\"",[34,149040,12899],{"class":59},[34,149042,84545],{"class":187},[34,149044,51898],{"class":59},[34,149046,149047],{"class":63},"1500",[34,149049,5394],{"class":59},[34,149051,149052,149054,149056,149058,149061,149063,149065,149067,149070],{"class":36,"line":207},[34,149053,148772],{"class":59},[34,149055,148384],{"class":187},[34,149057,51898],{"class":59},[34,149059,149060],{"class":187},"\"2024-10-04\"",[34,149062,12899],{"class":59},[34,149064,84545],{"class":187},[34,149066,51898],{"class":59},[34,149068,149069],{"class":63},"2100",[34,149071,5394],{"class":59},[34,149073,149074,149076,149078,149080,149083,149085,149087,149089,149092],{"class":36,"line":222},[34,149075,148772],{"class":59},[34,149077,148384],{"class":187},[34,149079,51898],{"class":59},[34,149081,149082],{"class":187},"\"2024-10-05\"",[34,149084,12899],{"class":59},[34,149086,84545],{"class":187},[34,149088,51898],{"class":59},[34,149090,149091],{"class":63},"2600",[34,149093,5394],{"class":59},[34,149095,149096],{"class":36,"line":227},[34,149097,73],{"class":59},[34,149099,149100],{"class":36,"line":232},[34,149101,2864],{"emptyLinePlaceholder":540},[34,149103,149104,149106,149108,149111,149113,149115,149117,149119,149121],{"class":36,"line":238},[34,149105,148187],{"class":59},[34,149107,447],{"class":112},[34,149109,149110],{"class":59}," [item[",[34,149112,148384],{"class":187},[34,149114,4907],{"class":59},[34,149116,3489],{"class":112},[34,149118,148596],{"class":59},[34,149120,26508],{"class":112},[34,149122,149123],{"class":59}," sales]\n",[34,149125,149126,149129,149131,149133,149135,149137,149139,149141,149143],{"class":36,"line":244},[34,149127,149128],{"class":59},"amounts ",[34,149130,447],{"class":112},[34,149132,149110],{"class":59},[34,149134,84545],{"class":187},[34,149136,4907],{"class":59},[34,149138,3489],{"class":112},[34,149140,148596],{"class":59},[34,149142,26508],{"class":112},[34,149144,149123],{"class":59},[34,149146,149147],{"class":36,"line":250},[34,149148,2864],{"emptyLinePlaceholder":540},[34,149150,149151,149153,149155],{"class":36,"line":256},[34,149152,147639],{"class":59},[34,149154,447],{"class":112},[34,149156,147644],{"class":59},[34,149158,149159],{"class":36,"line":261},[34,149160,148228],{"class":59},[34,149162,149163],{"class":36,"line":267},[34,149164,148036],{"class":59},[34,149166,149167,149169,149171,149173],{"class":36,"line":2138},[34,149168,148041],{"class":5680},[34,149170,447],{"class":112},[34,149172,147682],{"class":187},[34,149174,31929],{"class":59},[34,149176,149177,149179,149181],{"class":36,"line":2143},[34,149178,148052],{"class":5680},[34,149180,447],{"class":112},[34,149182,149183],{"class":59},"amounts,\n",[34,149185,149186,149188,149190,149192],{"class":36,"line":2157},[34,149187,148081],{"class":5680},[34,149189,447],{"class":112},[34,149191,31939],{"class":63},[34,149193,31929],{"class":59},[34,149195,149196,149198,149200,149202,149204,149206,149208],{"class":36,"line":2162},[34,149197,148092],{"class":5680},[34,149199,447],{"class":112},[34,149201,148097],{"class":59},[34,149203,148100],{"class":5680},[34,149205,447],{"class":112},[34,149207,31939],{"class":63},[34,149209,38509],{"class":59},[34,149211,149212],{"class":36,"line":2191},[34,149213,623],{"class":59},[34,149215,149216],{"class":36,"line":2196},[34,149217,147855],{"class":59},[34,149219,149220,149222,149224,149226,149228,149230,149233],{"class":36,"line":2213},[34,149221,147860],{"class":5680},[34,149223,447],{"class":112},[34,149225,147865],{"class":59},[34,149227,51868],{"class":5680},[34,149229,447],{"class":112},[34,149231,149232],{"class":187},"\"每日销售额\"",[34,149234,38509],{"class":59},[34,149236,149237,149239,149241,149243,149245,149247,149249],{"class":36,"line":2218},[34,149238,147879],{"class":5680},[34,149240,447],{"class":112},[34,149242,147884],{"class":59},[34,149244,80271],{"class":5680},[34,149246,447],{"class":112},[34,149248,147891],{"class":187},[34,149250,38509],{"class":59},[34,149252,149253,149255,149257,149259,149261,149263,149265],{"class":36,"line":2223},[34,149254,147898],{"class":5680},[34,149256,447],{"class":112},[34,149258,147884],{"class":59},[34,149260,80271],{"class":5680},[34,149262,447],{"class":112},[34,149264,147909],{"class":187},[34,149266,38509],{"class":59},[34,149268,149269,149271,149273,149275,149277,149279,149281],{"class":36,"line":2228},[34,149270,147916],{"class":5680},[34,149272,447],{"class":112},[34,149274,147921],{"class":59},[34,149276,147924],{"class":5680},[34,149278,447],{"class":112},[34,149280,147929],{"class":187},[34,149282,38509],{"class":59},[34,149284,149285,149288,149290],{"class":36,"line":2242},[34,149286,149287],{"class":5680},"    datazoom_opts",[34,149289,447],{"class":112},[34,149291,149292],{"class":59},"[opts.DataZoomOpts()],\n",[34,149294,149295],{"class":36,"line":2247},[34,149296,623],{"class":59},[34,149298,149299,149301,149304],{"class":36,"line":3041},[34,149300,147711],{"class":59},[34,149302,149303],{"class":187},"\"daily_sales.html\"",[34,149305,623],{"class":59},[14,149307,149308,149311],{},[31,149309,149310],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[555,149313,149315],{"id":149314},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149317,149318],{},"如果数据结构如下：",[25,149320,149322],{"className":27,"code":149321,"language":29,"meta":22,"style":22},"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",[31,149323,149324,149332,149340,149362,149383,149388,149395,149415,149435,149439],{"__ignoreMap":22},[34,149325,149326,149328,149330],{"class":36,"line":37},[34,149327,102045],{"class":59},[34,149329,447],{"class":112},[34,149331,16036],{"class":59},[34,149333,149334,149337],{"class":36,"line":44},[34,149335,149336],{"class":187},"    \"北京\"",[34,149338,149339],{"class":59},": [\n",[34,149341,149342,149344,149346,149348,149351,149353,149356,149358,149360],{"class":36,"line":50},[34,149343,5381],{"class":59},[34,149345,148384],{"class":187},[34,149347,51898],{"class":59},[34,149349,149350],{"class":187},"\"2024-01-01\"",[34,149352,12899],{"class":59},[34,149354,149355],{"class":187},"\"confirm\"",[34,149357,51898],{"class":59},[34,149359,1053],{"class":63},[34,149361,5394],{"class":59},[34,149363,149364,149366,149368,149370,149373,149375,149377,149379,149381],{"class":36,"line":56},[34,149365,5381],{"class":59},[34,149367,148384],{"class":187},[34,149369,51898],{"class":59},[34,149371,149372],{"class":187},"\"2024-01-02\"",[34,149374,12899],{"class":59},[34,149376,149355],{"class":187},[34,149378,51898],{"class":59},[34,149380,1105],{"class":63},[34,149382,5394],{"class":59},[34,149384,149385],{"class":36,"line":107},[34,149386,149387],{"class":59},"    ],\n",[34,149389,149390,149393],{"class":36,"line":196},[34,149391,149392],{"class":187},"    \"上海\"",[34,149394,149339],{"class":59},[34,149396,149397,149399,149401,149403,149405,149407,149409,149411,149413],{"class":36,"line":202},[34,149398,5381],{"class":59},[34,149400,148384],{"class":187},[34,149402,51898],{"class":59},[34,149404,149350],{"class":187},[34,149406,12899],{"class":59},[34,149408,149355],{"class":187},[34,149410,51898],{"class":59},[34,149412,1002],{"class":63},[34,149414,5394],{"class":59},[34,149416,149417,149419,149421,149423,149425,149427,149429,149431,149433],{"class":36,"line":207},[34,149418,5381],{"class":59},[34,149420,148384],{"class":187},[34,149422,51898],{"class":59},[34,149424,149372],{"class":187},[34,149426,12899],{"class":59},[34,149428,149355],{"class":187},[34,149430,51898],{"class":59},[34,149432,1130],{"class":63},[34,149434,5394],{"class":59},[34,149436,149437],{"class":36,"line":222},[34,149438,149387],{"class":59},[34,149440,149441],{"class":36,"line":227},[34,149442,2036],{"class":59},[14,149444,149445],{},"绘制多地区趋势：",[25,149447,149449],{"className":27,"code":149448,"language":29,"meta":22,"style":22},"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",[31,149450,149451,149465,149475,149479,149504,149508,149516,149520,149524,149536,149558,149571,149575,149579,149596,149612,149616],{"__ignoreMap":22},[34,149452,149453,149455,149457,149459,149461,149463],{"class":36,"line":37},[34,149454,31200],{"class":112},[34,149456,147766],{"class":59},[34,149458,30855],{"class":112},[34,149460,147771],{"class":59},[34,149462,31846],{"class":112},[34,149464,147776],{"class":59},[34,149466,149467,149469,149471,149473],{"class":36,"line":44},[34,149468,31200],{"class":112},[34,149470,147625],{"class":59},[34,149472,30855],{"class":112},[34,149474,147630],{"class":59},[34,149476,149477],{"class":36,"line":50},[34,149478,2864],{"emptyLinePlaceholder":540},[34,149480,149481,149483,149485,149487,149489,149491,149493,149495,149497,149500,149502],{"class":36,"line":56},[34,149482,148187],{"class":59},[34,149484,447],{"class":112},[34,149486,149110],{"class":59},[34,149488,148384],{"class":187},[34,149490,4907],{"class":59},[34,149492,3489],{"class":112},[34,149494,148596],{"class":59},[34,149496,26508],{"class":112},[34,149498,149499],{"class":59}," data[",[34,149501,69730],{"class":187},[34,149503,77988],{"class":59},[34,149505,149506],{"class":36,"line":107},[34,149507,2864],{"emptyLinePlaceholder":540},[34,149509,149510,149512,149514],{"class":36,"line":196},[34,149511,147639],{"class":59},[34,149513,447],{"class":112},[34,149515,147644],{"class":59},[34,149517,149518],{"class":36,"line":202},[34,149519,148228],{"class":59},[34,149521,149522],{"class":36,"line":207},[34,149523,2864],{"emptyLinePlaceholder":540},[34,149525,149526,149528,149531,149533],{"class":36,"line":222},[34,149527,3489],{"class":112},[34,149529,149530],{"class":59}," city, records ",[34,149532,26508],{"class":112},[34,149534,149535],{"class":59}," data.items():\n",[34,149537,149538,149541,149543,149545,149547,149549,149551,149553,149555],{"class":36,"line":227},[34,149539,149540],{"class":59},"    values ",[34,149542,447],{"class":112},[34,149544,149110],{"class":59},[34,149546,149355],{"class":187},[34,149548,4907],{"class":59},[34,149550,3489],{"class":112},[34,149552,148596],{"class":59},[34,149554,26508],{"class":112},[34,149556,149557],{"class":59}," records]\n",[34,149559,149560,149563,149565,149567,149569],{"class":36,"line":232},[34,149561,149562],{"class":59},"    line.add_yaxis(city, values, ",[34,149564,148132],{"class":5680},[34,149566,447],{"class":112},[34,149568,31939],{"class":63},[34,149570,623],{"class":59},[34,149572,149573],{"class":36,"line":238},[34,149574,2864],{"emptyLinePlaceholder":540},[34,149576,149577],{"class":36,"line":244},[34,149578,147855],{"class":59},[34,149580,149581,149583,149585,149587,149589,149591,149594],{"class":36,"line":250},[34,149582,147860],{"class":5680},[34,149584,447],{"class":112},[34,149586,147865],{"class":59},[34,149588,51868],{"class":5680},[34,149590,447],{"class":112},[34,149592,149593],{"class":187},"\"多地区趋势图\"",[34,149595,38509],{"class":59},[34,149597,149598,149600,149602,149604,149606,149608,149610],{"class":36,"line":256},[34,149599,147916],{"class":5680},[34,149601,447],{"class":112},[34,149603,147921],{"class":59},[34,149605,147924],{"class":5680},[34,149607,447],{"class":112},[34,149609,147929],{"class":187},[34,149611,38509],{"class":59},[34,149613,149614],{"class":36,"line":261},[34,149615,623],{"class":59},[34,149617,149618,149620,149623],{"class":36,"line":267},[34,149619,147711],{"class":59},[34,149621,149622],{"class":187},"\"trend.html\"",[34,149624,623],{"class":59},[14,149626,149627],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[555,149629,149631],{"id":149630},"_1012-易错点","10.12 易错点",[567,149633,149634,149640,149646,149656,149662],{},[570,149635,149636,149639],{},[31,149637,149638],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[570,149641,149642,149645],{},[31,149643,149644],{},"render()"," 生成的是 HTML，不是图片。",[570,149647,149648,149649,149652,149653,28850],{},"JSON 字符串用 ",[31,149650,149651],{},"json.loads()","，JSON 文件用 ",[31,149654,149655],{},"json.load()",[570,149657,149658,149659,28850],{},"中文 JSON 保存时加 ",[31,149660,149661],{},"ensure_ascii=False",[570,149663,149664],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[555,149666,149668],{"id":149667},"_1013-本章练习","10.13 本章练习",[567,149670,149671,149674,149677,149680,149683],{},[570,149672,149673],{},"安装 pyecharts 并生成第一个折线图。",[570,149675,149676],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[570,149678,149679],{},"绘制两条折线，对比线上和线下销售额。",[570,149681,149682],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[570,149684,149685],{},"对含有空值的销售数据进行清洗后再绘图。",[532,149687,149688],{},"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":22,"searchDepth":44,"depth":44,"links":149690},[149691,149692,149693,149694,149695,149696,149697,149698,149699,149700,149701,149702,149703],{"id":147307,"depth":44,"text":147308},{"id":147382,"depth":44,"text":147383},{"id":147561,"depth":44,"text":147562},{"id":147612,"depth":44,"text":147613},{"id":147746,"depth":44,"text":147747},{"id":148022,"depth":44,"text":148023},{"id":148148,"depth":44,"text":148149},{"id":148359,"depth":44,"text":148360},{"id":148730,"depth":44,"text":148731},{"id":148942,"depth":44,"text":148943},{"id":149314,"depth":44,"text":149315},{"id":149630,"depth":44,"text":149631},{"id":149667,"depth":44,"text":149668},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147299,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149710,"title":149711,"body":149712,"description":537,"extension":538,"meta":152072,"navigation":540,"path":152073,"seo":152074,"stem":152075,"__hash__":152076},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149713,"toc":152049},[149714,149717,149721,149724,149727,149803,149806,149897,149900,149904,149907,149951,149964,149968,149971,150038,150041,150045,150048,150132,150140,150144,150149,150290,150293,150304,150310,150316,150430,150434,150437,150440,150693,150696,150700,150703,150807,150810,150814,150965,150969,150976,151089,151093,151096,151202,151205,151209,151212,151243,151246,151351,151354,151358,151362,151372,151440,151444,151451,151515,151518,151522,151528,151624,151633,151637,151961,151970,151974,152002,152006,152046],[10,149715,149711],{"id":149716},"_11-面向对象基础",[555,149718,149720],{"id":149719},"_111-什么是面向对象","11.1 什么是面向对象",[14,149722,149723],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149725,149726],{},"面向过程：",[25,149728,149730],{"className":27,"code":149729,"language":29,"meta":22,"style":22},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[31,149731,149732,149741,149749,149753,149763,149794,149798],{"__ignoreMap":22},[34,149733,149734,149736,149738],{"class":36,"line":37},[34,149735,146923],{"class":59},[34,149737,447],{"class":112},[34,149739,149740],{"class":187}," \"小明\"\n",[34,149742,149743,149745,149747],{"class":36,"line":44},[34,149744,146933],{"class":59},[34,149746,447],{"class":112},[34,149748,146938],{"class":63},[34,149750,149751],{"class":36,"line":50},[34,149752,2864],{"emptyLinePlaceholder":540},[34,149754,149755,149757,149760],{"class":36,"line":56},[34,149756,32410],{"class":112},[34,149758,149759],{"class":2427}," introduce",[34,149761,149762],{"class":59},"(name, age):\n",[34,149764,149765,149767,149769,149771,149774,149776,149778,149780,149783,149785,149787,149789,149792],{"class":36,"line":107},[34,149766,31762],{"class":63},[34,149768,617],{"class":59},[34,149770,667],{"class":112},[34,149772,149773],{"class":187},"\"我叫",[34,149775,1501],{"class":63},[34,149777,80271],{"class":59},[34,149779,1550],{"class":63},[34,149781,149782],{"class":187},"，今年",[34,149784,1501],{"class":63},[34,149786,70682],{"class":59},[34,149788,1550],{"class":63},[34,149790,149791],{"class":187},"岁\"",[34,149793,623],{"class":59},[34,149795,149796],{"class":36,"line":196},[34,149797,2864],{"emptyLinePlaceholder":540},[34,149799,149800],{"class":36,"line":202},[34,149801,149802],{"class":59},"introduce(name, age)\n",[14,149804,149805],{},"面向对象：",[25,149807,149809],{"className":27,"code":149808,"language":29,"meta":22,"style":22},"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",[31,149810,149811,149819,149827,149856,149860,149864,149874,149883,149892],{"__ignoreMap":22},[34,149812,149813,149815,149817],{"class":36,"line":37},[34,149814,15158],{"class":112},[34,149816,8362],{"class":2427},[34,149818,4203],{"class":59},[34,149820,149821,149823,149825],{"class":36,"line":44},[34,149822,31264],{"class":112},[34,149824,149759],{"class":2427},[34,149826,31270],{"class":59},[34,149828,149829,149831,149833,149835,149837,149840,149842,149844,149846,149848,149850,149852,149854],{"class":36,"line":50},[34,149830,32914],{"class":63},[34,149832,617],{"class":59},[34,149834,667],{"class":112},[34,149836,149773],{"class":187},[34,149838,149839],{"class":63},"{self",[34,149841,80762],{"class":59},[34,149843,1550],{"class":63},[34,149845,149782],{"class":187},[34,149847,149839],{"class":63},[34,149849,80774],{"class":59},[34,149851,1550],{"class":63},[34,149853,149791],{"class":187},[34,149855,623],{"class":59},[34,149857,149858],{"class":36,"line":56},[34,149859,2864],{"emptyLinePlaceholder":540},[34,149861,149862],{"class":36,"line":107},[34,149863,2864],{"emptyLinePlaceholder":540},[34,149865,149866,149869,149871],{"class":36,"line":196},[34,149867,149868],{"class":59},"student ",[34,149870,447],{"class":112},[34,149872,149873],{"class":59}," Student()\n",[34,149875,149876,149879,149881],{"class":36,"line":202},[34,149877,149878],{"class":59},"student.name ",[34,149880,447],{"class":112},[34,149882,149740],{"class":187},[34,149884,149885,149888,149890],{"class":36,"line":207},[34,149886,149887],{"class":59},"student.age ",[34,149889,447],{"class":112},[34,149891,146938],{"class":63},[34,149893,149894],{"class":36,"line":222},[34,149895,149896],{"class":59},"student.introduce()\n",[14,149898,149899],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[555,149901,149903],{"id":149902},"_112-类和对象","11.2 类和对象",[14,149905,149906],{},"类是模板，对象是根据模板创建出来的具体实例。",[25,149908,149910],{"className":27,"code":149909,"language":29,"meta":22,"style":22},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[31,149911,149912,149920,149925,149929,149933,149942],{"__ignoreMap":22},[34,149913,149914,149916,149918],{"class":36,"line":37},[34,149915,15158],{"class":112},[34,149917,8362],{"class":2427},[34,149919,4203],{"class":59},[34,149921,149922],{"class":36,"line":44},[34,149923,149924],{"class":112},"    pass\n",[34,149926,149927],{"class":36,"line":50},[34,149928,2864],{"emptyLinePlaceholder":540},[34,149930,149931],{"class":36,"line":56},[34,149932,2864],{"emptyLinePlaceholder":540},[34,149934,149935,149938,149940],{"class":36,"line":107},[34,149936,149937],{"class":59},"student1 ",[34,149939,447],{"class":112},[34,149941,149873],{"class":59},[34,149943,149944,149947,149949],{"class":36,"line":196},[34,149945,149946],{"class":59},"student2 ",[34,149948,447],{"class":112},[34,149950,149873],{"class":59},[14,149952,149953,149956,149957,101405,149960,149963],{},[31,149954,149955],{},"Student"," 是类，",[31,149958,149959],{},"student1",[31,149961,149962],{},"student2"," 是对象。",[555,149965,149967],{"id":149966},"_113-属性","11.3 属性",[14,149969,149970],{},"属性是对象保存的数据。",[25,149972,149974],{"className":27,"code":149973,"language":29,"meta":22,"style":22},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[31,149975,149976,149984,149988,149992,149996,150004,150012,150020,150024,150031],{"__ignoreMap":22},[34,149977,149978,149980,149982],{"class":36,"line":37},[34,149979,15158],{"class":112},[34,149981,8362],{"class":2427},[34,149983,4203],{"class":59},[34,149985,149986],{"class":36,"line":44},[34,149987,149924],{"class":112},[34,149989,149990],{"class":36,"line":50},[34,149991,2864],{"emptyLinePlaceholder":540},[34,149993,149994],{"class":36,"line":56},[34,149995,2864],{"emptyLinePlaceholder":540},[34,149997,149998,150000,150002],{"class":36,"line":107},[34,149999,149868],{"class":59},[34,150001,447],{"class":112},[34,150003,149873],{"class":59},[34,150005,150006,150008,150010],{"class":36,"line":196},[34,150007,149878],{"class":59},[34,150009,447],{"class":112},[34,150011,149740],{"class":187},[34,150013,150014,150016,150018],{"class":36,"line":202},[34,150015,149887],{"class":59},[34,150017,447],{"class":112},[34,150019,146938],{"class":63},[34,150021,150022],{"class":36,"line":207},[34,150023,2864],{"emptyLinePlaceholder":540},[34,150025,150026,150028],{"class":36,"line":222},[34,150027,30878],{"class":63},[34,150029,150030],{"class":59},"(student.name)\n",[34,150032,150033,150035],{"class":36,"line":227},[34,150034,30878],{"class":63},[34,150036,150037],{"class":59},"(student.age)\n",[14,150039,150040],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[555,150042,150044],{"id":150043},"_114-方法","11.4 方法",[14,150046,150047],{},"类中的函数叫方法。",[25,150049,150050],{"className":27,"code":149808,"language":29,"meta":22,"style":22},[31,150051,150052,150060,150068,150096,150100,150104,150112,150120,150128],{"__ignoreMap":22},[34,150053,150054,150056,150058],{"class":36,"line":37},[34,150055,15158],{"class":112},[34,150057,8362],{"class":2427},[34,150059,4203],{"class":59},[34,150061,150062,150064,150066],{"class":36,"line":44},[34,150063,31264],{"class":112},[34,150065,149759],{"class":2427},[34,150067,31270],{"class":59},[34,150069,150070,150072,150074,150076,150078,150080,150082,150084,150086,150088,150090,150092,150094],{"class":36,"line":50},[34,150071,32914],{"class":63},[34,150073,617],{"class":59},[34,150075,667],{"class":112},[34,150077,149773],{"class":187},[34,150079,149839],{"class":63},[34,150081,80762],{"class":59},[34,150083,1550],{"class":63},[34,150085,149782],{"class":187},[34,150087,149839],{"class":63},[34,150089,80774],{"class":59},[34,150091,1550],{"class":63},[34,150093,149791],{"class":187},[34,150095,623],{"class":59},[34,150097,150098],{"class":36,"line":56},[34,150099,2864],{"emptyLinePlaceholder":540},[34,150101,150102],{"class":36,"line":107},[34,150103,2864],{"emptyLinePlaceholder":540},[34,150105,150106,150108,150110],{"class":36,"line":196},[34,150107,149868],{"class":59},[34,150109,447],{"class":112},[34,150111,149873],{"class":59},[34,150113,150114,150116,150118],{"class":36,"line":202},[34,150115,149878],{"class":59},[34,150117,447],{"class":112},[34,150119,149740],{"class":187},[34,150121,150122,150124,150126],{"class":36,"line":207},[34,150123,149887],{"class":59},[34,150125,447],{"class":112},[34,150127,146938],{"class":63},[34,150129,150130],{"class":36,"line":222},[34,150131,149896],{"class":59},[14,150133,150134,150136,150137,150139],{},[31,150135,31286],{}," 表示当前对象。调用方法时不需要手动传入 ",[31,150138,31286],{},"，Python 会自动传。",[555,150141,150143],{"id":150142},"_115-构造方法__init__","11.5 构造方法__init__",[14,150145,150146,150148],{},[31,150147,31292],{}," 在对象创建时自动执行，用于初始化属性。",[25,150150,150152],{"className":27,"code":150151,"language":29,"meta":22,"style":22},"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",[31,150153,150154,150162,150171,150183,150195,150206,150210,150218,150256,150260,150264,150286],{"__ignoreMap":22},[34,150155,150156,150158,150160],{"class":36,"line":37},[34,150157,15158],{"class":112},[34,150159,8362],{"class":2427},[34,150161,4203],{"class":59},[34,150163,150164,150166,150168],{"class":36,"line":44},[34,150165,31264],{"class":112},[34,150167,31267],{"class":63},[34,150169,150170],{"class":59},"(self, name, age, score):\n",[34,150172,150173,150175,150178,150180],{"class":36,"line":50},[34,150174,31308],{"class":63},[34,150176,150177],{"class":59},".name ",[34,150179,447],{"class":112},[34,150181,150182],{"class":59}," name\n",[34,150184,150185,150187,150190,150192],{"class":36,"line":56},[34,150186,31308],{"class":63},[34,150188,150189],{"class":59},".age ",[34,150191,447],{"class":112},[34,150193,150194],{"class":59}," age\n",[34,150196,150197,150199,150202,150204],{"class":36,"line":107},[34,150198,31308],{"class":63},[34,150200,150201],{"class":59},".score ",[34,150203,447],{"class":112},[34,150205,2050],{"class":59},[34,150207,150208],{"class":36,"line":196},[34,150209,2864],{"emptyLinePlaceholder":540},[34,150211,150212,150214,150216],{"class":36,"line":202},[34,150213,31264],{"class":112},[34,150215,149759],{"class":2427},[34,150217,31270],{"class":59},[34,150219,150220,150222,150224,150226,150228,150230,150232,150234,150236,150238,150240,150242,150245,150247,150250,150252,150254],{"class":36,"line":207},[34,150221,32914],{"class":63},[34,150223,617],{"class":59},[34,150225,667],{"class":112},[34,150227,149773],{"class":187},[34,150229,149839],{"class":63},[34,150231,80762],{"class":59},[34,150233,1550],{"class":63},[34,150235,149782],{"class":187},[34,150237,149839],{"class":63},[34,150239,80774],{"class":59},[34,150241,1550],{"class":63},[34,150243,150244],{"class":187},"岁，成绩",[34,150246,149839],{"class":63},[34,150248,150249],{"class":59},".score",[34,150251,1550],{"class":63},[34,150253,860],{"class":187},[34,150255,623],{"class":59},[34,150257,150258],{"class":36,"line":222},[34,150259,2864],{"emptyLinePlaceholder":540},[34,150261,150262],{"class":36,"line":227},[34,150263,2864],{"emptyLinePlaceholder":540},[34,150265,150266,150268,150270,150273,150276,150278,150280,150282,150284],{"class":36,"line":232},[34,150267,149868],{"class":59},[34,150269,447],{"class":112},[34,150271,150272],{"class":59}," Student(",[34,150274,150275],{"class":187},"\"小明\"",[34,150277,12899],{"class":59},[34,150279,1256],{"class":63},[34,150281,12899],{"class":59},[34,150283,1593],{"class":63},[34,150285,623],{"class":59},[34,150287,150288],{"class":36,"line":238},[34,150289,149896],{"class":59},[14,150291,150292],{},"构造方法的好处：",[567,150294,150295,150298,150301],{},[570,150296,150297],{},"创建对象时必须提供必要数据。",[570,150299,150300],{},"属性初始化集中，不容易漏。",[570,150302,150303],{},"对象状态更完整。",[555,150305,150307,150308],{"id":150306},"_116-str","11.6 ",[760,150309,1774],{},[14,150311,150312,150313,28850],{},"直接打印对象时，默认输出不直观。可以定义 ",[31,150314,150315],{},"__str__",[25,150317,150319],{"className":27,"code":150318,"language":29,"meta":22,"style":22},"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",[31,150320,150321,150329,150338,150348,150358,150362,150371,150399,150403,150407,150423],{"__ignoreMap":22},[34,150322,150323,150325,150327],{"class":36,"line":37},[34,150324,15158],{"class":112},[34,150326,8362],{"class":2427},[34,150328,4203],{"class":59},[34,150330,150331,150333,150335],{"class":36,"line":44},[34,150332,31264],{"class":112},[34,150334,31267],{"class":63},[34,150336,150337],{"class":59},"(self, name, age):\n",[34,150339,150340,150342,150344,150346],{"class":36,"line":50},[34,150341,31308],{"class":63},[34,150343,150177],{"class":59},[34,150345,447],{"class":112},[34,150347,150182],{"class":59},[34,150349,150350,150352,150354,150356],{"class":36,"line":56},[34,150351,31308],{"class":63},[34,150353,150189],{"class":59},[34,150355,447],{"class":112},[34,150357,150194],{"class":59},[34,150359,150360],{"class":36,"line":107},[34,150361,2864],{"emptyLinePlaceholder":540},[34,150363,150364,150366,150369],{"class":36,"line":196},[34,150365,31264],{"class":112},[34,150367,150368],{"class":63}," __str__",[34,150370,31270],{"class":59},[34,150372,150373,150375,150378,150381,150383,150385,150387,150390,150392,150394,150396],{"class":36,"line":202},[34,150374,15216],{"class":112},[34,150376,150377],{"class":112}," f",[34,150379,150380],{"class":187},"\"Student(name=",[34,150382,149839],{"class":63},[34,150384,80762],{"class":59},[34,150386,1550],{"class":63},[34,150388,150389],{"class":187},", age=",[34,150391,149839],{"class":63},[34,150393,80774],{"class":59},[34,150395,1550],{"class":63},[34,150397,150398],{"class":187},")\"\n",[34,150400,150401],{"class":36,"line":207},[34,150402,2864],{"emptyLinePlaceholder":540},[34,150404,150405],{"class":36,"line":222},[34,150406,2864],{"emptyLinePlaceholder":540},[34,150408,150409,150411,150413,150415,150417,150419,150421],{"class":36,"line":227},[34,150410,149868],{"class":59},[34,150412,447],{"class":112},[34,150414,150272],{"class":59},[34,150416,150275],{"class":187},[34,150418,12899],{"class":59},[34,150420,1256],{"class":63},[34,150422,623],{"class":59},[34,150424,150425,150427],{"class":36,"line":232},[34,150426,30878],{"class":63},[34,150428,150429],{"class":59},"(student)\n",[555,150431,150433],{"id":150432},"_117-封装","11.7 封装",[14,150435,150436],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150438,150439],{},"Python 中以双下划线开头的属性通常视为私有属性。",[25,150441,150443],{"className":27,"code":150442,"language":29,"meta":22,"style":22},"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",[31,150444,150445,150454,150463,150475,150487,150491,150500,150509,150513,150523,150536,150547,150552,150563,150567,150576,150588,150599,150603,150616,150627,150631,150642,150646,150650,150668,150677,150686],{"__ignoreMap":22},[34,150446,150447,150449,150452],{"class":36,"line":37},[34,150448,15158],{"class":112},[34,150450,150451],{"class":2427}," Account",[34,150453,4203],{"class":59},[34,150455,150456,150458,150460],{"class":36,"line":44},[34,150457,31264],{"class":112},[34,150459,31267],{"class":63},[34,150461,150462],{"class":59},"(self, owner, balance):\n",[34,150464,150465,150467,150470,150472],{"class":36,"line":50},[34,150466,31308],{"class":63},[34,150468,150469],{"class":59},".owner ",[34,150471,447],{"class":112},[34,150473,150474],{"class":59}," owner\n",[34,150476,150477,150479,150482,150484],{"class":36,"line":56},[34,150478,31308],{"class":63},[34,150480,150481],{"class":59},".__balance ",[34,150483,447],{"class":112},[34,150485,150486],{"class":59}," balance\n",[34,150488,150489],{"class":36,"line":107},[34,150490,2864],{"emptyLinePlaceholder":540},[34,150492,150493,150495,150498],{"class":36,"line":196},[34,150494,31264],{"class":112},[34,150496,150497],{"class":2427}," get_balance",[34,150499,31270],{"class":59},[34,150501,150502,150504,150506],{"class":36,"line":202},[34,150503,15216],{"class":112},[34,150505,39335],{"class":63},[34,150507,150508],{"class":59},".__balance\n",[34,150510,150511],{"class":36,"line":207},[34,150512,2864],{"emptyLinePlaceholder":540},[34,150514,150515,150517,150520],{"class":36,"line":222},[34,150516,31264],{"class":112},[34,150518,150519],{"class":2427}," deposit",[34,150521,150522],{"class":59},"(self, money):\n",[34,150524,150525,150527,150530,150532,150534],{"class":36,"line":227},[34,150526,2961],{"class":112},[34,150528,150529],{"class":59}," money ",[34,150531,2059],{"class":112},[34,150533,4557],{"class":63},[34,150535,4203],{"class":59},[34,150537,150538,150540,150542,150545],{"class":36,"line":232},[34,150539,35112],{"class":63},[34,150541,617],{"class":59},[34,150543,150544],{"class":187},"\"存款金额必须大于0\"",[34,150546,623],{"class":59},[34,150548,150549],{"class":36,"line":238},[34,150550,150551],{"class":112},"            return\n",[34,150553,150554,150556,150558,150560],{"class":36,"line":244},[34,150555,31308],{"class":63},[34,150557,150481],{"class":59},[34,150559,9941],{"class":112},[34,150561,150562],{"class":59}," money\n",[34,150564,150565],{"class":36,"line":250},[34,150566,2864],{"emptyLinePlaceholder":540},[34,150568,150569,150571,150574],{"class":36,"line":256},[34,150570,31264],{"class":112},[34,150572,150573],{"class":2427}," withdraw",[34,150575,150522],{"class":59},[34,150577,150578,150580,150582,150584,150586],{"class":36,"line":261},[34,150579,2961],{"class":112},[34,150581,150529],{"class":59},[34,150583,2059],{"class":112},[34,150585,4557],{"class":63},[34,150587,4203],{"class":59},[34,150589,150590,150592,150594,150597],{"class":36,"line":267},[34,150591,35112],{"class":63},[34,150593,617],{"class":59},[34,150595,150596],{"class":187},"\"取款金额必须大于0\"",[34,150598,623],{"class":59},[34,150600,150601],{"class":36,"line":2138},[34,150602,150551],{"class":112},[34,150604,150605,150607,150609,150611,150613],{"class":36,"line":2143},[34,150606,2961],{"class":112},[34,150608,150529],{"class":59},[34,150610,1564],{"class":112},[34,150612,39335],{"class":63},[34,150614,150615],{"class":59},".__balance:\n",[34,150617,150618,150620,150622,150625],{"class":36,"line":2157},[34,150619,35112],{"class":63},[34,150621,617],{"class":59},[34,150623,150624],{"class":187},"\"余额不足\"",[34,150626,623],{"class":59},[34,150628,150629],{"class":36,"line":2162},[34,150630,150551],{"class":112},[34,150632,150633,150635,150637,150640],{"class":36,"line":2191},[34,150634,31308],{"class":63},[34,150636,150481],{"class":59},[34,150638,150639],{"class":112},"-=",[34,150641,150562],{"class":59},[34,150643,150644],{"class":36,"line":2196},[34,150645,2864],{"emptyLinePlaceholder":540},[34,150647,150648],{"class":36,"line":2213},[34,150649,2864],{"emptyLinePlaceholder":540},[34,150651,150652,150655,150657,150660,150662,150664,150666],{"class":36,"line":2218},[34,150653,150654],{"class":59},"account ",[34,150656,447],{"class":112},[34,150658,150659],{"class":59}," Account(",[34,150661,150275],{"class":187},[34,150663,12899],{"class":59},[34,150665,6874],{"class":63},[34,150667,623],{"class":59},[34,150669,150670,150673,150675],{"class":36,"line":2223},[34,150671,150672],{"class":59},"account.deposit(",[34,150674,2186],{"class":63},[34,150676,623],{"class":59},[34,150678,150679,150682,150684],{"class":36,"line":2228},[34,150680,150681],{"class":59},"account.withdraw(",[34,150683,919],{"class":63},[34,150685,623],{"class":59},[34,150687,150688,150690],{"class":36,"line":2242},[34,150689,30878],{"class":63},[34,150691,150692],{"class":59},"(account.get_balance())\n",[14,150694,150695],{},"封装的意义是避免外部随意修改内部状态。",[555,150697,150699],{"id":150698},"_118-继承","11.8 继承",[14,150701,150702],{},"继承可以让子类复用父类的属性和方法。",[25,150704,150706],{"className":27,"code":150705,"language":29,"meta":22,"style":22},"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",[31,150707,150708,150717,150726,150737,150741,150745,150759,150768,150779,150783,150787,150797,150802],{"__ignoreMap":22},[34,150709,150710,150712,150715],{"class":36,"line":37},[34,150711,15158],{"class":112},[34,150713,150714],{"class":2427}," Animal",[34,150716,4203],{"class":59},[34,150718,150719,150721,150724],{"class":36,"line":44},[34,150720,31264],{"class":112},[34,150722,150723],{"class":2427}," eat",[34,150725,31270],{"class":59},[34,150727,150728,150730,150732,150735],{"class":36,"line":50},[34,150729,32914],{"class":63},[34,150731,617],{"class":59},[34,150733,150734],{"class":187},"\"吃东西\"",[34,150736,623],{"class":59},[34,150738,150739],{"class":36,"line":56},[34,150740,2864],{"emptyLinePlaceholder":540},[34,150742,150743],{"class":36,"line":107},[34,150744,2864],{"emptyLinePlaceholder":540},[34,150746,150747,150749,150752,150754,150757],{"class":36,"line":196},[34,150748,15158],{"class":112},[34,150750,150751],{"class":2427}," Dog",[34,150753,617],{"class":59},[34,150755,150756],{"class":2427},"Animal",[34,150758,31249],{"class":59},[34,150760,150761,150763,150766],{"class":36,"line":202},[34,150762,31264],{"class":112},[34,150764,150765],{"class":2427}," bark",[34,150767,31270],{"class":59},[34,150769,150770,150772,150774,150777],{"class":36,"line":207},[34,150771,32914],{"class":63},[34,150773,617],{"class":59},[34,150775,150776],{"class":187},"\"汪汪\"",[34,150778,623],{"class":59},[34,150780,150781],{"class":36,"line":222},[34,150782,2864],{"emptyLinePlaceholder":540},[34,150784,150785],{"class":36,"line":227},[34,150786,2864],{"emptyLinePlaceholder":540},[34,150788,150789,150792,150794],{"class":36,"line":232},[34,150790,150791],{"class":59},"dog ",[34,150793,447],{"class":112},[34,150795,150796],{"class":59}," Dog()\n",[34,150798,150799],{"class":36,"line":238},[34,150800,150801],{"class":59},"dog.eat()\n",[34,150803,150804],{"class":36,"line":244},[34,150805,150806],{"class":59},"dog.bark()\n",[14,150808,150809],{},"子类可以扩展新方法，也可以重写父类方法。",[555,150811,150813],{"id":150812},"_119-方法重写","11.9 方法重写",[25,150815,150817],{"className":27,"code":150816,"language":29,"meta":22,"style":22},"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",[31,150818,150819,150827,150836,150847,150851,150855,150867,150875,150885,150889,150893,150906,150914,150925,150929,150933,150941,150951,150955,150960],{"__ignoreMap":22},[34,150820,150821,150823,150825],{"class":36,"line":37},[34,150822,15158],{"class":112},[34,150824,150714],{"class":2427},[34,150826,4203],{"class":59},[34,150828,150829,150831,150834],{"class":36,"line":44},[34,150830,31264],{"class":112},[34,150832,150833],{"class":2427}," speak",[34,150835,31270],{"class":59},[34,150837,150838,150840,150842,150845],{"class":36,"line":50},[34,150839,32914],{"class":63},[34,150841,617],{"class":59},[34,150843,150844],{"class":187},"\"动物叫\"",[34,150846,623],{"class":59},[34,150848,150849],{"class":36,"line":56},[34,150850,2864],{"emptyLinePlaceholder":540},[34,150852,150853],{"class":36,"line":107},[34,150854,2864],{"emptyLinePlaceholder":540},[34,150856,150857,150859,150861,150863,150865],{"class":36,"line":196},[34,150858,15158],{"class":112},[34,150860,150751],{"class":2427},[34,150862,617],{"class":59},[34,150864,150756],{"class":2427},[34,150866,31249],{"class":59},[34,150868,150869,150871,150873],{"class":36,"line":202},[34,150870,31264],{"class":112},[34,150872,150833],{"class":2427},[34,150874,31270],{"class":59},[34,150876,150877,150879,150881,150883],{"class":36,"line":207},[34,150878,32914],{"class":63},[34,150880,617],{"class":59},[34,150882,150776],{"class":187},[34,150884,623],{"class":59},[34,150886,150887],{"class":36,"line":222},[34,150888,2864],{"emptyLinePlaceholder":540},[34,150890,150891],{"class":36,"line":227},[34,150892,2864],{"emptyLinePlaceholder":540},[34,150894,150895,150897,150900,150902,150904],{"class":36,"line":232},[34,150896,15158],{"class":112},[34,150898,150899],{"class":2427}," Cat",[34,150901,617],{"class":59},[34,150903,150756],{"class":2427},[34,150905,31249],{"class":59},[34,150907,150908,150910,150912],{"class":36,"line":238},[34,150909,31264],{"class":112},[34,150911,150833],{"class":2427},[34,150913,31270],{"class":59},[34,150915,150916,150918,150920,150923],{"class":36,"line":244},[34,150917,32914],{"class":63},[34,150919,617],{"class":59},[34,150921,150922],{"class":187},"\"喵喵\"",[34,150924,623],{"class":59},[34,150926,150927],{"class":36,"line":250},[34,150928,2864],{"emptyLinePlaceholder":540},[34,150930,150931],{"class":36,"line":256},[34,150932,2864],{"emptyLinePlaceholder":540},[34,150934,150935,150937,150939],{"class":36,"line":261},[34,150936,150791],{"class":59},[34,150938,447],{"class":112},[34,150940,150796],{"class":59},[34,150942,150943,150946,150948],{"class":36,"line":267},[34,150944,150945],{"class":59},"cat ",[34,150947,447],{"class":112},[34,150949,150950],{"class":59}," Cat()\n",[34,150952,150953],{"class":36,"line":2138},[34,150954,2864],{"emptyLinePlaceholder":540},[34,150956,150957],{"class":36,"line":2143},[34,150958,150959],{"class":59},"dog.speak()\n",[34,150961,150962],{"class":36,"line":2157},[34,150963,150964],{"class":59},"cat.speak()\n",[555,150966,150968],{"id":150967},"_1110-super","11.10 super",[14,150970,150971,150972,150975],{},"子类可以通过 ",[31,150973,150974],{},"super()"," 调用父类方法。",[25,150977,150979],{"className":27,"code":150978,"language":29,"meta":22,"style":22},"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",[31,150980,150981,150989,150998,151008,151012,151016,151028,151037,151048,151058,151062,151066,151082],{"__ignoreMap":22},[34,150982,150983,150985,150987],{"class":36,"line":37},[34,150984,15158],{"class":112},[34,150986,16033],{"class":2427},[34,150988,4203],{"class":59},[34,150990,150991,150993,150995],{"class":36,"line":44},[34,150992,31264],{"class":112},[34,150994,31267],{"class":63},[34,150996,150997],{"class":59},"(self, name):\n",[34,150999,151000,151002,151004,151006],{"class":36,"line":50},[34,151001,31308],{"class":63},[34,151003,150177],{"class":59},[34,151005,447],{"class":112},[34,151007,150182],{"class":59},[34,151009,151010],{"class":36,"line":56},[34,151011,2864],{"emptyLinePlaceholder":540},[34,151013,151014],{"class":36,"line":107},[34,151015,2864],{"emptyLinePlaceholder":540},[34,151017,151018,151020,151022,151024,151026],{"class":36,"line":196},[34,151019,15158],{"class":112},[34,151021,8362],{"class":2427},[34,151023,617],{"class":59},[34,151025,19510],{"class":2427},[34,151027,31249],{"class":59},[34,151029,151030,151032,151034],{"class":36,"line":202},[34,151031,31264],{"class":112},[34,151033,31267],{"class":63},[34,151035,151036],{"class":59},"(self, name, score):\n",[34,151038,151039,151041,151043,151045],{"class":36,"line":207},[34,151040,31280],{"class":63},[34,151042,17725],{"class":59},[34,151044,31292],{"class":63},[34,151046,151047],{"class":59},"(name)\n",[34,151049,151050,151052,151054,151056],{"class":36,"line":222},[34,151051,31308],{"class":63},[34,151053,150201],{"class":59},[34,151055,447],{"class":112},[34,151057,2050],{"class":59},[34,151059,151060],{"class":36,"line":227},[34,151061,2864],{"emptyLinePlaceholder":540},[34,151063,151064],{"class":36,"line":232},[34,151065,2864],{"emptyLinePlaceholder":540},[34,151067,151068,151070,151072,151074,151076,151078,151080],{"class":36,"line":238},[34,151069,149868],{"class":59},[34,151071,447],{"class":112},[34,151073,150272],{"class":59},[34,151075,150275],{"class":187},[34,151077,12899],{"class":59},[34,151079,1593],{"class":63},[34,151081,623],{"class":59},[34,151083,151084,151086],{"class":36,"line":244},[34,151085,30878],{"class":63},[34,151087,151088],{"class":59},"(student.name, student.score)\n",[555,151090,151092],{"id":151091},"_1111-多态","11.11 多态",[14,151094,151095],{},"多态指不同对象响应同一个方法，表现出不同结果。",[25,151097,151099],{"className":27,"code":151098,"language":29,"meta":22,"style":22},"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",[31,151100,151101,151109,151117,151127,151131,151135,151143,151151,151161,151165,151169,151179,151184,151188,151192,151197],{"__ignoreMap":22},[34,151102,151103,151105,151107],{"class":36,"line":37},[34,151104,15158],{"class":112},[34,151106,150751],{"class":2427},[34,151108,4203],{"class":59},[34,151110,151111,151113,151115],{"class":36,"line":44},[34,151112,31264],{"class":112},[34,151114,150833],{"class":2427},[34,151116,31270],{"class":59},[34,151118,151119,151121,151123,151125],{"class":36,"line":50},[34,151120,32914],{"class":63},[34,151122,617],{"class":59},[34,151124,150776],{"class":187},[34,151126,623],{"class":59},[34,151128,151129],{"class":36,"line":56},[34,151130,2864],{"emptyLinePlaceholder":540},[34,151132,151133],{"class":36,"line":107},[34,151134,2864],{"emptyLinePlaceholder":540},[34,151136,151137,151139,151141],{"class":36,"line":196},[34,151138,15158],{"class":112},[34,151140,150899],{"class":2427},[34,151142,4203],{"class":59},[34,151144,151145,151147,151149],{"class":36,"line":202},[34,151146,31264],{"class":112},[34,151148,150833],{"class":2427},[34,151150,31270],{"class":59},[34,151152,151153,151155,151157,151159],{"class":36,"line":207},[34,151154,32914],{"class":63},[34,151156,617],{"class":59},[34,151158,150922],{"class":187},[34,151160,623],{"class":59},[34,151162,151163],{"class":36,"line":222},[34,151164,2864],{"emptyLinePlaceholder":540},[34,151166,151167],{"class":36,"line":227},[34,151168,2864],{"emptyLinePlaceholder":540},[34,151170,151171,151173,151176],{"class":36,"line":232},[34,151172,32410],{"class":112},[34,151174,151175],{"class":2427}," make_sound",[34,151177,151178],{"class":59},"(animal):\n",[34,151180,151181],{"class":36,"line":238},[34,151182,151183],{"class":59},"    animal.speak()\n",[34,151185,151186],{"class":36,"line":244},[34,151187,2864],{"emptyLinePlaceholder":540},[34,151189,151190],{"class":36,"line":250},[34,151191,2864],{"emptyLinePlaceholder":540},[34,151193,151194],{"class":36,"line":256},[34,151195,151196],{"class":59},"make_sound(Dog())\n",[34,151198,151199],{"class":36,"line":261},[34,151200,151201],{"class":59},"make_sound(Cat())\n",[14,151203,151204],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[555,151206,151208],{"id":151207},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151210,151211],{},"实例属性属于对象：",[25,151213,151215],{"className":27,"code":151214,"language":29,"meta":22,"style":22},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[31,151216,151217,151225,151233],{"__ignoreMap":22},[34,151218,151219,151221,151223],{"class":36,"line":37},[34,151220,15158],{"class":112},[34,151222,8362],{"class":2427},[34,151224,4203],{"class":59},[34,151226,151227,151229,151231],{"class":36,"line":44},[34,151228,31264],{"class":112},[34,151230,31267],{"class":63},[34,151232,150997],{"class":59},[34,151234,151235,151237,151239,151241],{"class":36,"line":50},[34,151236,31308],{"class":63},[34,151238,150177],{"class":59},[34,151240,447],{"class":112},[34,151242,150182],{"class":59},[14,151244,151245],{},"类属性属于类，所有对象共享：",[25,151247,151249],{"className":27,"code":151248,"language":29,"meta":22,"style":22},"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",[31,151250,151251,151259,151269,151273,151281,151291,151295,151299,151312,151326,151330,151337,151344],{"__ignoreMap":22},[34,151252,151253,151255,151257],{"class":36,"line":37},[34,151254,15158],{"class":112},[34,151256,8362],{"class":2427},[34,151258,4203],{"class":59},[34,151260,151261,151264,151266],{"class":36,"line":44},[34,151262,151263],{"class":59},"    school ",[34,151265,447],{"class":112},[34,151267,151268],{"class":187}," \"黑马学校\"\n",[34,151270,151271],{"class":36,"line":50},[34,151272,2864],{"emptyLinePlaceholder":540},[34,151274,151275,151277,151279],{"class":36,"line":56},[34,151276,31264],{"class":112},[34,151278,31267],{"class":63},[34,151280,150997],{"class":59},[34,151282,151283,151285,151287,151289],{"class":36,"line":107},[34,151284,31308],{"class":63},[34,151286,150177],{"class":59},[34,151288,447],{"class":112},[34,151290,150182],{"class":59},[34,151292,151293],{"class":36,"line":196},[34,151294,2864],{"emptyLinePlaceholder":540},[34,151296,151297],{"class":36,"line":202},[34,151298,2864],{"emptyLinePlaceholder":540},[34,151300,151301,151304,151306,151308,151310],{"class":36,"line":207},[34,151302,151303],{"class":59},"s1 ",[34,151305,447],{"class":112},[34,151307,150272],{"class":59},[34,151309,150275],{"class":187},[34,151311,623],{"class":59},[34,151313,151314,151317,151319,151321,151324],{"class":36,"line":222},[34,151315,151316],{"class":59},"s2 ",[34,151318,447],{"class":112},[34,151320,150272],{"class":59},[34,151322,151323],{"class":187},"\"小红\"",[34,151325,623],{"class":59},[34,151327,151328],{"class":36,"line":227},[34,151329,2864],{"emptyLinePlaceholder":540},[34,151331,151332,151334],{"class":36,"line":232},[34,151333,30878],{"class":63},[34,151335,151336],{"class":59},"(s1.school)\n",[34,151338,151339,151341],{"class":36,"line":238},[34,151340,30878],{"class":63},[34,151342,151343],{"class":59},"(s2.school)\n",[34,151345,151346,151348],{"class":36,"line":244},[34,151347,30878],{"class":63},[34,151349,151350],{"class":59},"(Student.school)\n",[14,151352,151353],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[555,151355,151357],{"id":151356},"_1113-类方法和静态方法","11.13 类方法和静态方法",[584,151359,151361],{"id":151360},"_11131-类方法","11.13.1 类方法",[14,151363,151364,151365,151368,151369,28850],{},"类方法使用 ",[31,151366,151367],{},"@classmethod","，第一个参数通常是 ",[31,151370,151371],{},"cls",[25,151373,151375],{"className":27,"code":151374,"language":29,"meta":22,"style":22},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[31,151376,151377,151385,151393,151397,151405,151415,151425,151429,151433],{"__ignoreMap":22},[34,151378,151379,151381,151383],{"class":36,"line":37},[34,151380,15158],{"class":112},[34,151382,8362],{"class":2427},[34,151384,4203],{"class":59},[34,151386,151387,151389,151391],{"class":36,"line":44},[34,151388,151263],{"class":59},[34,151390,447],{"class":112},[34,151392,151268],{"class":187},[34,151394,151395],{"class":36,"line":50},[34,151396,2864],{"emptyLinePlaceholder":540},[34,151398,151399,151402],{"class":36,"line":56},[34,151400,151401],{"class":2427},"    @",[34,151403,151404],{"class":63},"classmethod\n",[34,151406,151407,151409,151412],{"class":36,"line":107},[34,151408,31264],{"class":112},[34,151410,151411],{"class":2427}," get_school",[34,151413,151414],{"class":59},"(cls):\n",[34,151416,151417,151419,151422],{"class":36,"line":196},[34,151418,15216],{"class":112},[34,151420,151421],{"class":63}," cls",[34,151423,151424],{"class":59},".school\n",[34,151426,151427],{"class":36,"line":202},[34,151428,2864],{"emptyLinePlaceholder":540},[34,151430,151431],{"class":36,"line":207},[34,151432,2864],{"emptyLinePlaceholder":540},[34,151434,151435,151437],{"class":36,"line":222},[34,151436,30878],{"class":63},[34,151438,151439],{"class":59},"(Student.get_school())\n",[584,151441,151443],{"id":151442},"_11132-静态方法","11.13.2 静态方法",[14,151445,151446,151447,151450],{},"静态方法使用 ",[31,151448,151449],{},"@staticmethod","，不需要访问实例和类。",[25,151452,151454],{"className":27,"code":151453,"language":29,"meta":22,"style":22},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[31,151455,151456,151465,151472,151481,151492,151496,151500],{"__ignoreMap":22},[34,151457,151458,151460,151463],{"class":36,"line":37},[34,151459,15158],{"class":112},[34,151461,151462],{"class":2427}," MathUtils",[34,151464,4203],{"class":59},[34,151466,151467,151469],{"class":36,"line":44},[34,151468,151401],{"class":2427},[34,151470,151471],{"class":63},"staticmethod\n",[34,151473,151474,151476,151478],{"class":36,"line":50},[34,151475,31264],{"class":112},[34,151477,5673],{"class":2427},[34,151479,151480],{"class":59},"(a, b):\n",[34,151482,151483,151485,151487,151489],{"class":36,"line":56},[34,151484,15216],{"class":112},[34,151486,11333],{"class":59},[34,151488,1088],{"class":112},[34,151490,151491],{"class":59}," b\n",[34,151493,151494],{"class":36,"line":107},[34,151495,2864],{"emptyLinePlaceholder":540},[34,151497,151498],{"class":36,"line":196},[34,151499,2864],{"emptyLinePlaceholder":540},[34,151501,151502,151504,151507,151509,151511,151513],{"class":36,"line":202},[34,151503,30878],{"class":63},[34,151505,151506],{"class":59},"(MathUtils.add(",[34,151508,64],{"class":63},[34,151510,12899],{"class":59},[34,151512,70],{"class":63},[34,151514,30960],{"class":59},[14,151516,151517],{},"静态方法本质上是放在类命名空间里的普通函数。",[555,151519,151521],{"id":151520},"_1114-dataclass","11.14 dataclass",[14,151523,151524,151527],{},[31,151525,151526],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[25,151529,151531],{"className":27,"code":151530,"language":29,"meta":22,"style":22},"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",[31,151532,151533,151545,151549,151553,151558,151566,151574,151582,151590,151594,151598,151618],{"__ignoreMap":22},[34,151534,151535,151537,151540,151542],{"class":36,"line":37},[34,151536,31200],{"class":112},[34,151538,151539],{"class":59}," dataclasses ",[34,151541,30855],{"class":112},[34,151543,151544],{"class":59}," dataclass\n",[34,151546,151547],{"class":36,"line":44},[34,151548,2864],{"emptyLinePlaceholder":540},[34,151550,151551],{"class":36,"line":50},[34,151552,2864],{"emptyLinePlaceholder":540},[34,151554,151555],{"class":36,"line":56},[34,151556,151557],{"class":2427},"@dataclass\n",[34,151559,151560,151562,151564],{"class":36,"line":107},[34,151561,15158],{"class":112},[34,151563,8362],{"class":2427},[34,151565,4203],{"class":59},[34,151567,151568,151571],{"class":36,"line":196},[34,151569,151570],{"class":59},"    name: ",[34,151572,151573],{"class":63},"str\n",[34,151575,151576,151579],{"class":36,"line":202},[34,151577,151578],{"class":59},"    age: ",[34,151580,151581],{"class":63},"int\n",[34,151583,151584,151587],{"class":36,"line":207},[34,151585,151586],{"class":59},"    score: ",[34,151588,151589],{"class":63},"float\n",[34,151591,151592],{"class":36,"line":222},[34,151593,2864],{"emptyLinePlaceholder":540},[34,151595,151596],{"class":36,"line":227},[34,151597,2864],{"emptyLinePlaceholder":540},[34,151599,151600,151602,151604,151606,151608,151610,151612,151614,151616],{"class":36,"line":232},[34,151601,149868],{"class":59},[34,151603,447],{"class":112},[34,151605,150272],{"class":59},[34,151607,150275],{"class":187},[34,151609,12899],{"class":59},[34,151611,1256],{"class":63},[34,151613,12899],{"class":59},[34,151615,1593],{"class":63},[34,151617,623],{"class":59},[34,151619,151620,151622],{"class":36,"line":238},[34,151621,30878],{"class":63},[34,151623,150429],{"class":59},[14,151625,151626,151627,822,151629,151632],{},"它会自动生成 ",[31,151628,31292],{},[31,151630,151631],{},"__repr__"," 等方法。适合数据模型类。",[555,151634,151636],{"id":151635},"_1115-小案例学生类","11.15 小案例：学生类",[25,151638,151640],{"className":27,"code":151639,"language":29,"meta":22,"style":22},"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",[31,151641,151642,151650,151659,151671,151681,151691,151701,151705,151714,151727,151731,151740,151746,151758,151770,151782,151794,151798,151802,151808,151818,151827,151837,151845,151853,151862,151866,151870,151878,151914,151918,151922,151947,151954],{"__ignoreMap":22},[34,151643,151644,151646,151648],{"class":36,"line":37},[34,151645,15158],{"class":112},[34,151647,8362],{"class":2427},[34,151649,4203],{"class":59},[34,151651,151652,151654,151656],{"class":36,"line":44},[34,151653,31264],{"class":112},[34,151655,31267],{"class":63},[34,151657,151658],{"class":59},"(self, student_id, name, age, score):\n",[34,151660,151661,151663,151666,151668],{"class":36,"line":50},[34,151662,31308],{"class":63},[34,151664,151665],{"class":59},".student_id ",[34,151667,447],{"class":112},[34,151669,151670],{"class":59}," student_id\n",[34,151672,151673,151675,151677,151679],{"class":36,"line":56},[34,151674,31308],{"class":63},[34,151676,150177],{"class":59},[34,151678,447],{"class":112},[34,151680,150182],{"class":59},[34,151682,151683,151685,151687,151689],{"class":36,"line":107},[34,151684,31308],{"class":63},[34,151686,150189],{"class":59},[34,151688,447],{"class":112},[34,151690,150194],{"class":59},[34,151692,151693,151695,151697,151699],{"class":36,"line":196},[34,151694,31308],{"class":63},[34,151696,150201],{"class":59},[34,151698,447],{"class":112},[34,151700,2050],{"class":59},[34,151702,151703],{"class":36,"line":202},[34,151704,2864],{"emptyLinePlaceholder":540},[34,151706,151707,151709,151712],{"class":36,"line":207},[34,151708,31264],{"class":112},[34,151710,151711],{"class":2427}," is_passed",[34,151713,31270],{"class":59},[34,151715,151716,151718,151720,151722,151724],{"class":36,"line":222},[34,151717,15216],{"class":112},[34,151719,39335],{"class":63},[34,151721,150201],{"class":59},[34,151723,2174],{"class":112},[34,151725,151726],{"class":63}," 60\n",[34,151728,151729],{"class":36,"line":227},[34,151730,2864],{"emptyLinePlaceholder":540},[34,151732,151733,151735,151738],{"class":36,"line":232},[34,151734,31264],{"class":112},[34,151736,151737],{"class":2427}," to_dict",[34,151739,31270],{"class":59},[34,151741,151742,151744],{"class":36,"line":238},[34,151743,15216],{"class":112},[34,151745,16036],{"class":59},[34,151747,151748,151751,151753,151755],{"class":36,"line":244},[34,151749,151750],{"class":187},"            \"student_id\"",[34,151752,51898],{"class":59},[34,151754,31286],{"class":63},[34,151756,151757],{"class":59},".student_id,\n",[34,151759,151760,151763,151765,151767],{"class":36,"line":250},[34,151761,151762],{"class":187},"            \"name\"",[34,151764,51898],{"class":59},[34,151766,31286],{"class":63},[34,151768,151769],{"class":59},".name,\n",[34,151771,151772,151775,151777,151779],{"class":36,"line":256},[34,151773,151774],{"class":187},"            \"age\"",[34,151776,51898],{"class":59},[34,151778,31286],{"class":63},[34,151780,151781],{"class":59},".age,\n",[34,151783,151784,151787,151789,151791],{"class":36,"line":261},[34,151785,151786],{"class":187},"            \"score\"",[34,151788,51898],{"class":59},[34,151790,31286],{"class":63},[34,151792,151793],{"class":59},".score,\n",[34,151795,151796],{"class":36,"line":267},[34,151797,2993],{"class":59},[34,151799,151800],{"class":36,"line":2138},[34,151801,2864],{"emptyLinePlaceholder":540},[34,151803,151804,151806],{"class":36,"line":2143},[34,151805,151401],{"class":2427},[34,151807,151404],{"class":63},[34,151809,151810,151812,151815],{"class":36,"line":2157},[34,151811,31264],{"class":112},[34,151813,151814],{"class":2427}," from_dict",[34,151816,151817],{"class":59},"(cls, data):\n",[34,151819,151820,151822,151824],{"class":36,"line":2162},[34,151821,15216],{"class":112},[34,151823,151421],{"class":63},[34,151825,151826],{"class":59},"(\n",[34,151828,151829,151832,151835],{"class":36,"line":2191},[34,151830,151831],{"class":59},"            data[",[34,151833,151834],{"class":187},"\"student_id\"",[34,151836,88297],{"class":59},[34,151838,151839,151841,151843],{"class":36,"line":2196},[34,151840,151831],{"class":59},[34,151842,63140],{"class":187},[34,151844,88297],{"class":59},[34,151846,151847,151849,151851],{"class":36,"line":2213},[34,151848,151831],{"class":59},[34,151850,69585],{"class":187},[34,151852,88297],{"class":59},[34,151854,151855,151857,151860],{"class":36,"line":2218},[34,151856,151831],{"class":59},[34,151858,151859],{"class":187},"\"score\"",[34,151861,88297],{"class":59},[34,151863,151864],{"class":36,"line":2223},[34,151865,38588],{"class":59},[34,151867,151868],{"class":36,"line":2228},[34,151869,2864],{"emptyLinePlaceholder":540},[34,151871,151872,151874,151876],{"class":36,"line":2242},[34,151873,31264],{"class":112},[34,151875,150368],{"class":63},[34,151877,31270],{"class":59},[34,151879,151880,151882,151884,151886,151888,151891,151893,151896,151898,151900,151902,151904,151906,151908,151910,151912],{"class":36,"line":2247},[34,151881,15216],{"class":112},[34,151883,150377],{"class":112},[34,151885,860],{"class":187},[34,151887,149839],{"class":63},[34,151889,151890],{"class":59},".student_id",[34,151892,1550],{"class":63},[34,151894,151895],{"class":63}," {self",[34,151897,80762],{"class":59},[34,151899,1550],{"class":63},[34,151901,151895],{"class":63},[34,151903,80774],{"class":59},[34,151905,1550],{"class":63},[34,151907,151895],{"class":63},[34,151909,150249],{"class":59},[34,151911,1550],{"class":63},[34,151913,25598],{"class":187},[34,151915,151916],{"class":36,"line":3041},[34,151917,2864],{"emptyLinePlaceholder":540},[34,151919,151920],{"class":36,"line":3055},[34,151921,2864],{"emptyLinePlaceholder":540},[34,151923,151924,151926,151928,151930,151933,151935,151937,151939,151941,151943,151945],{"class":36,"line":3063},[34,151925,149868],{"class":59},[34,151927,447],{"class":112},[34,151929,150272],{"class":59},[34,151931,151932],{"class":187},"\"001\"",[34,151934,12899],{"class":59},[34,151936,150275],{"class":187},[34,151938,12899],{"class":59},[34,151940,1256],{"class":63},[34,151942,12899],{"class":59},[34,151944,1593],{"class":63},[34,151946,623],{"class":59},[34,151948,151949,151951],{"class":36,"line":3068},[34,151950,30878],{"class":63},[34,151952,151953],{"class":59},"(student.is_passed())\n",[34,151955,151956,151958],{"class":36,"line":3074},[34,151957,30878],{"class":63},[34,151959,151960],{"class":59},"(student.to_dict())\n",[14,151962,151963,101405,151966,151969],{},[31,151964,151965],{},"to_dict()",[31,151967,151968],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[555,151971,151973],{"id":151972},"_1116-易错点","11.16 易错点",[567,151975,151976,151982,151988,151993,151996,151999],{},[570,151977,151978,151979,28850],{},"类名推荐使用大驼峰，如 ",[31,151980,151981],{},"StudentManager",[570,151983,151984,151985,151987],{},"方法第一个参数必须写 ",[31,151986,31286],{},"，调用时不用传。",[570,151989,151990,151992],{},[31,151991,31292],{}," 不是普通方法，它在创建对象时自动执行。",[570,151994,151995],{},"私有属性不是绝对安全，只是约定和名称改写。",[570,151997,151998],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[570,152000,152001],{},"类中方法太多时，说明职责可能过重。",[555,152003,152005],{"id":152004},"_1117-本章练习","11.17 本章练习",[567,152007,152008,152014,152020,152025,152038],{},[570,152009,152010,152011,152013],{},"定义 ",[31,152012,149955],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[570,152015,152010,152016,152019],{},[31,152017,152018],{},"Account"," 类，实现存款、取款、查询余额。",[570,152021,152010,152022,152024],{},[31,152023,17690],{}," 类，计算圆的周长和面积。",[570,152026,152010,152027,822,152030,152033,152034,152037],{},[31,152028,152029],{},"Dog",[31,152031,152032],{},"Cat"," 类，并用同一个函数调用它们的 ",[31,152035,152036],{},"speak()"," 方法。",[570,152039,104753,152040,152042,152043,28850],{},[31,152041,151526],{}," 定义一个商品类 ",[31,152044,152045],{},"Product",[532,152047,152048],{},"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":22,"searchDepth":44,"depth":44,"links":152050},[152051,152052,152053,152054,152055,152056,152058,152059,152060,152061,152062,152063,152064,152068,152069,152070,152071],{"id":149719,"depth":44,"text":149720},{"id":149902,"depth":44,"text":149903},{"id":149966,"depth":44,"text":149967},{"id":150043,"depth":44,"text":150044},{"id":150142,"depth":44,"text":150143},{"id":150306,"depth":44,"text":152057},"11.6 str",{"id":150432,"depth":44,"text":150433},{"id":150698,"depth":44,"text":150699},{"id":150812,"depth":44,"text":150813},{"id":150967,"depth":44,"text":150968},{"id":151091,"depth":44,"text":151092},{"id":151207,"depth":44,"text":151208},{"id":151356,"depth":44,"text":151357,"children":152065},[152066,152067],{"id":151360,"depth":50,"text":151361},{"id":151442,"depth":50,"text":151443},{"id":151520,"depth":44,"text":151521},{"id":151635,"depth":44,"text":151636},{"id":151972,"depth":44,"text":151973},{"id":152004,"depth":44,"text":152005},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149711,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152078,"title":152079,"body":152080,"description":537,"extension":538,"meta":155393,"navigation":540,"path":155394,"seo":155395,"stem":155396,"__hash__":155397},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152081,"toc":155369},[152082,152085,152089,152092,152095,152124,152127,152135,152139,152143,152146,152169,152172,152178,152182,153628,153631,153652,153656,153659,153671,153674,153858,153861,153987,153990,153994,153998,154134,154138,154224,154228,154310,154314,154351,154355,154544,154548,154551,154781,154785,154788,154969,154972,154976,154979,154985,154988,155014,155018,155021,155035,155038,155063,155066,155080,155083,155100,155103,155120,155123,155140,155144,155170,155174,155197,155201,155204,155206,155212,155214,155235,155238,155244,155250,155254,155257,155333,155336,155340,155366],[10,152083,152079],{"id":152084},"_12-综合案例与复习路线",[555,152086,152088],{"id":152087},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152090,152091],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152093,152094],{},"一个合格的入门综合项目最好覆盖：",[567,152096,152097,152100,152103,152106,152109,152112,152115,152118,152121],{},[570,152098,152099],{},"输入输出。",[570,152101,152102],{},"判断和循环。",[570,152104,152105],{},"函数拆分。",[570,152107,152108],{},"列表、字典等容器。",[570,152110,152111],{},"文件持久化。",[570,152113,152114],{},"异常处理。",[570,152116,152117],{},"模块拆分。",[570,152119,152120],{},"可选：面向对象。",[570,152122,152123],{},"可选：数据可视化。",[14,152125,152126],{},"本章整理两个方向：",[567,152128,152129,152132],{},[570,152130,152131],{},"学生管理系统。",[570,152133,152134],{},"销售数据统计和可视化。",[555,152136,152138],{"id":152137},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[584,152140,152142],{"id":152141},"_1221-需求","12.2.1 需求",[14,152144,152145],{},"实现一个命令行学生管理系统：",[567,152147,152148,152151,152154,152157,152160,152163,152166],{},[570,152149,152150],{},"添加学生。",[570,152152,152153],{},"删除学生。",[570,152155,152156],{},"修改学生。",[570,152158,152159],{},"查询学生。",[570,152161,152162],{},"显示所有学生。",[570,152164,152165],{},"保存到 JSON 文件。",[570,152167,152168],{},"程序启动时自动读取 JSON 文件。",[14,152170,152171],{},"学生字段：",[25,152173,152176],{"className":152174,"code":152175,"language":5651,"meta":22},[5649],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[31,152177,152175],{"__ignoreMap":22},[555,152179,152181],{"id":152180},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[25,152183,152185],{"className":27,"code":152184,"language":29,"meta":22,"style":22},"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",[31,152186,152187,152193,152203,152207,152221,152225,152229,152238,152250,152256,152260,152266,152297,152307,152314,152325,152331,152335,152339,152349,152380,152406,152410,152414,152423,152434,152445,152456,152467,152478,152489,152500,152504,152508,152518,152530,152546,152553,152560,152564,152568,152578,152586,152593,152606,152616,152627,152631,152635,152644,152652,152658,152670,152678,152689,152693,152697,152706,152722,152726,152733,152744,152749,152753,152769,152784,152799,152803,152808,152816,152824,152832,152840,152844,152849,152860,152864,152868,152877,152892,152902,152906,152918,152929,152933,152937,152942,152946,152957,152961,152965,152974,152989,152997,153001,153013,153023,153027,153031,153046,153059,153072,153076,153089,153101,153113,153117,153121,153132,153136,153140,153149,153164,153172,153176,153188,153198,153202,153206,153211,153215,153219,153229,153235,153257,153276,153295,153314,153319,153323,153327,153336,153344,153355,153359,153363,153389,153399,153404,153408,153412,153420,153430,153434,153442,153447,153463,153467,153481,153486,153500,153505,153518,153523,153536,153541,153554,153559,153572,153583,153587,153593,153604,153608,153612,153624],{"__ignoreMap":22},[34,152188,152189,152191],{"class":36,"line":37},[34,152190,30855],{"class":112},[34,152192,147478],{"class":59},[34,152194,152195,152197,152199,152201],{"class":36,"line":44},[34,152196,31200],{"class":112},[34,152198,108698],{"class":59},[34,152200,30855],{"class":112},[34,152202,108703],{"class":59},[34,152204,152205],{"class":36,"line":50},[34,152206,2864],{"emptyLinePlaceholder":540},[34,152208,152209,152212,152214,152216,152219],{"class":36,"line":56},[34,152210,152211],{"class":63},"DATA_FILE",[34,152213,14028],{"class":112},[34,152215,108932],{"class":59},[34,152217,152218],{"class":187},"\"students.json\"",[34,152220,623],{"class":59},[34,152222,152223],{"class":36,"line":107},[34,152224,2864],{"emptyLinePlaceholder":540},[34,152226,152227],{"class":36,"line":196},[34,152228,2864],{"emptyLinePlaceholder":540},[34,152230,152231,152233,152236],{"class":36,"line":202},[34,152232,32410],{"class":112},[34,152234,152235],{"class":2427}," load_students",[34,152237,32416],{"class":59},[34,152239,152240,152242,152244,152247],{"class":36,"line":207},[34,152241,3565],{"class":112},[34,152243,39392],{"class":112},[34,152245,152246],{"class":63}," DATA_FILE",[34,152248,152249],{"class":59},".exists():\n",[34,152251,152252,152254],{"class":36,"line":222},[34,152253,15216],{"class":112},[34,152255,52299],{"class":59},[34,152257,152258],{"class":36,"line":227},[34,152259,2864],{"emptyLinePlaceholder":540},[34,152261,152262,152264],{"class":36,"line":232},[34,152263,126171],{"class":112},[34,152265,4203],{"class":59},[34,152267,152268,152271,152273,152275,152277,152279,152281,152283,152285,152287,152289,152291,152293,152295],{"class":36,"line":238},[34,152269,152270],{"class":112},"        with",[34,152272,147178],{"class":63},[34,152274,617],{"class":59},[34,152276,152211],{"class":63},[34,152278,12899],{"class":59},[34,152280,147188],{"class":187},[34,152282,12899],{"class":59},[34,152284,147193],{"class":5680},[34,152286,447],{"class":112},[34,152288,147198],{"class":187},[34,152290,14178],{"class":59},[34,152292,31846],{"class":112},[34,152294,148540],{"class":5680},[34,152296,4203],{"class":59},[34,152298,152299,152301,152303,152305],{"class":36,"line":244},[34,152300,16196],{"class":112},[34,152302,148551],{"class":59},[34,152304,45815],{"class":5680},[34,152306,623],{"class":59},[34,152308,152309,152311],{"class":36,"line":250},[34,152310,126199],{"class":112},[34,152312,152313],{"class":59}," json.JSONDecodeError:\n",[34,152315,152316,152318,152320,152323],{"class":36,"line":256},[34,152317,32914],{"class":63},[34,152319,617],{"class":59},[34,152321,152322],{"class":187},"\"数据文件格式错误，已使用空数据启动\"",[34,152324,623],{"class":59},[34,152326,152327,152329],{"class":36,"line":261},[34,152328,15216],{"class":112},[34,152330,52299],{"class":59},[34,152332,152333],{"class":36,"line":267},[34,152334,2864],{"emptyLinePlaceholder":540},[34,152336,152337],{"class":36,"line":2138},[34,152338,2864],{"emptyLinePlaceholder":540},[34,152340,152341,152343,152346],{"class":36,"line":2143},[34,152342,32410],{"class":112},[34,152344,152345],{"class":2427}," save_students",[34,152347,152348],{"class":59},"(students):\n",[34,152350,152351,152353,152355,152357,152359,152361,152364,152366,152368,152370,152372,152374,152376,152378],{"class":36,"line":2157},[34,152352,34640],{"class":112},[34,152354,147178],{"class":63},[34,152356,617],{"class":59},[34,152358,152211],{"class":63},[34,152360,12899],{"class":59},[34,152362,152363],{"class":187},"\"w\"",[34,152365,12899],{"class":59},[34,152367,147193],{"class":5680},[34,152369,447],{"class":112},[34,152371,147198],{"class":187},[34,152373,14178],{"class":59},[34,152375,31846],{"class":112},[34,152377,148540],{"class":5680},[34,152379,4203],{"class":59},[34,152381,152382,152385,152387,152389,152391,152393,152395,152397,152400,152402,152404],{"class":36,"line":2162},[34,152383,152384],{"class":59},"        json.dump(students, ",[34,152386,45815],{"class":5680},[34,152388,12899],{"class":59},[34,152390,147524],{"class":5680},[34,152392,447],{"class":112},[34,152394,34449],{"class":63},[34,152396,12899],{"class":59},[34,152398,152399],{"class":5680},"indent",[34,152401,447],{"class":112},[34,152403,70],{"class":63},[34,152405,623],{"class":59},[34,152407,152408],{"class":36,"line":2191},[34,152409,2864],{"emptyLinePlaceholder":540},[34,152411,152412],{"class":36,"line":2196},[34,152413,2864],{"emptyLinePlaceholder":540},[34,152415,152416,152418,152421],{"class":36,"line":2213},[34,152417,32410],{"class":112},[34,152419,152420],{"class":2427}," show_menu",[34,152422,32416],{"class":59},[34,152424,152425,152427,152429,152432],{"class":36,"line":2218},[34,152426,31762],{"class":63},[34,152428,617],{"class":59},[34,152430,152431],{"class":187},"\"====== 学生管理系统 ======\"",[34,152433,623],{"class":59},[34,152435,152436,152438,152440,152443],{"class":36,"line":2223},[34,152437,31762],{"class":63},[34,152439,617],{"class":59},[34,152441,152442],{"class":187},"\"1. 添加学生\"",[34,152444,623],{"class":59},[34,152446,152447,152449,152451,152454],{"class":36,"line":2228},[34,152448,31762],{"class":63},[34,152450,617],{"class":59},[34,152452,152453],{"class":187},"\"2. 删除学生\"",[34,152455,623],{"class":59},[34,152457,152458,152460,152462,152465],{"class":36,"line":2242},[34,152459,31762],{"class":63},[34,152461,617],{"class":59},[34,152463,152464],{"class":187},"\"3. 修改学生\"",[34,152466,623],{"class":59},[34,152468,152469,152471,152473,152476],{"class":36,"line":2247},[34,152470,31762],{"class":63},[34,152472,617],{"class":59},[34,152474,152475],{"class":187},"\"4. 查询学生\"",[34,152477,623],{"class":59},[34,152479,152480,152482,152484,152487],{"class":36,"line":3041},[34,152481,31762],{"class":63},[34,152483,617],{"class":59},[34,152485,152486],{"class":187},"\"5. 显示所有学生\"",[34,152488,623],{"class":59},[34,152490,152491,152493,152495,152498],{"class":36,"line":3055},[34,152492,31762],{"class":63},[34,152494,617],{"class":59},[34,152496,152497],{"class":187},"\"0. 退出系统\"",[34,152499,623],{"class":59},[34,152501,152502],{"class":36,"line":3063},[34,152503,2864],{"emptyLinePlaceholder":540},[34,152505,152506],{"class":36,"line":3068},[34,152507,2864],{"emptyLinePlaceholder":540},[34,152509,152510,152512,152515],{"class":36,"line":3074},[34,152511,32410],{"class":112},[34,152513,152514],{"class":2427}," find_student",[34,152516,152517],{"class":59},"(students, student_id):\n",[34,152519,152520,152522,152525,152527],{"class":36,"line":3080},[34,152521,3665],{"class":112},[34,152523,152524],{"class":59}," student ",[34,152526,26508],{"class":112},[34,152528,152529],{"class":59}," students:\n",[34,152531,152532,152534,152537,152539,152541,152543],{"class":36,"line":3085},[34,152533,2961],{"class":112},[34,152535,152536],{"class":59}," student[",[34,152538,151834],{"class":187},[34,152540,4907],{"class":59},[34,152542,3413],{"class":112},[34,152544,152545],{"class":59}," student_id:\n",[34,152547,152548,152550],{"class":36,"line":8412},[34,152549,16196],{"class":112},[34,152551,152552],{"class":59}," student\n",[34,152554,152555,152557],{"class":36,"line":8436},[34,152556,4554],{"class":112},[34,152558,152559],{"class":63}," None\n",[34,152561,152562],{"class":36,"line":8441},[34,152563,2864],{"emptyLinePlaceholder":540},[34,152565,152566],{"class":36,"line":8447},[34,152567,2864],{"emptyLinePlaceholder":540},[34,152569,152570,152572,152575],{"class":36,"line":8474},[34,152571,32410],{"class":112},[34,152573,152574],{"class":2427}," input_int",[34,152576,152577],{"class":59},"(prompt):\n",[34,152579,152580,152582,152584],{"class":36,"line":8479},[34,152581,2715],{"class":112},[34,152583,95751],{"class":63},[34,152585,4203],{"class":59},[34,152587,152588,152591],{"class":36,"line":8485},[34,152589,152590],{"class":112},"        try",[34,152592,4203],{"class":59},[34,152594,152595,152597,152599,152601,152603],{"class":36,"line":8497},[34,152596,16196],{"class":112},[34,152598,2846],{"class":63},[34,152600,617],{"class":59},[34,152602,54282],{"class":63},[34,152604,152605],{"class":59},"(prompt))\n",[34,152607,152608,152611,152614],{"class":36,"line":8509},[34,152609,152610],{"class":112},"        except",[34,152612,152613],{"class":63}," ValueError",[34,152615,4203],{"class":59},[34,152617,152618,152620,152622,152625],{"class":36,"line":8521},[34,152619,35112],{"class":63},[34,152621,617],{"class":59},[34,152623,152624],{"class":187},"\"请输入整数\"",[34,152626,623],{"class":59},[34,152628,152629],{"class":36,"line":10180},[34,152630,2864],{"emptyLinePlaceholder":540},[34,152632,152633],{"class":36,"line":10205},[34,152634,2864],{"emptyLinePlaceholder":540},[34,152636,152637,152639,152642],{"class":36,"line":10228},[34,152638,32410],{"class":112},[34,152640,152641],{"class":2427}," input_float",[34,152643,152577],{"class":59},[34,152645,152646,152648,152650],{"class":36,"line":10252},[34,152647,2715],{"class":112},[34,152649,95751],{"class":63},[34,152651,4203],{"class":59},[34,152653,152654,152656],{"class":36,"line":10257},[34,152655,152590],{"class":112},[34,152657,4203],{"class":59},[34,152659,152660,152662,152664,152666,152668],{"class":36,"line":10262},[34,152661,16196],{"class":112},[34,152663,110184],{"class":63},[34,152665,617],{"class":59},[34,152667,54282],{"class":63},[34,152669,152605],{"class":59},[34,152671,152672,152674,152676],{"class":36,"line":10267},[34,152673,152610],{"class":112},[34,152675,152613],{"class":63},[34,152677,4203],{"class":59},[34,152679,152680,152682,152684,152687],{"class":36,"line":10276},[34,152681,35112],{"class":63},[34,152683,617],{"class":59},[34,152685,152686],{"class":187},"\"请输入数字\"",[34,152688,623],{"class":59},[34,152690,152691],{"class":36,"line":10281},[34,152692,2864],{"emptyLinePlaceholder":540},[34,152694,152695],{"class":36,"line":10287},[34,152696,2864],{"emptyLinePlaceholder":540},[34,152698,152699,152701,152704],{"class":36,"line":10308},[34,152700,32410],{"class":112},[34,152702,152703],{"class":2427}," add_student",[34,152705,152348],{"class":59},[34,152707,152708,152711,152713,152715,152717,152720],{"class":36,"line":10314},[34,152709,152710],{"class":59},"    student_id ",[34,152712,447],{"class":112},[34,152714,61066],{"class":63},[34,152716,617],{"class":59},[34,152718,152719],{"class":187},"\"请输入学号:\"",[34,152721,623],{"class":59},[34,152723,152724],{"class":36,"line":10328},[34,152725,2864],{"emptyLinePlaceholder":540},[34,152727,152728,152730],{"class":36,"line":10334},[34,152729,3565],{"class":112},[34,152731,152732],{"class":59}," find_student(students, student_id):\n",[34,152734,152735,152737,152739,152742],{"class":36,"line":10361},[34,152736,32914],{"class":63},[34,152738,617],{"class":59},[34,152740,152741],{"class":187},"\"学号已存在\"",[34,152743,623],{"class":59},[34,152745,152746],{"class":36,"line":10370},[34,152747,152748],{"class":112},"        return\n",[34,152750,152751],{"class":36,"line":10376},[34,152752,2864],{"emptyLinePlaceholder":540},[34,152754,152755,152758,152760,152762,152764,152767],{"class":36,"line":10384},[34,152756,152757],{"class":59},"    name ",[34,152759,447],{"class":112},[34,152761,61066],{"class":63},[34,152763,617],{"class":59},[34,152765,152766],{"class":187},"\"请输入姓名:\"",[34,152768,623],{"class":59},[34,152770,152771,152774,152776,152779,152782],{"class":36,"line":10389},[34,152772,152773],{"class":59},"    age ",[34,152775,447],{"class":112},[34,152777,152778],{"class":59}," input_int(",[34,152780,152781],{"class":187},"\"请输入年龄:\"",[34,152783,623],{"class":59},[34,152785,152786,152789,152791,152794,152797],{"class":36,"line":17068},[34,152787,152788],{"class":59},"    score ",[34,152790,447],{"class":112},[34,152792,152793],{"class":59}," input_float(",[34,152795,152796],{"class":187},"\"请输入成绩:\"",[34,152798,623],{"class":59},[34,152800,152801],{"class":36,"line":17074},[34,152802,2864],{"emptyLinePlaceholder":540},[34,152804,152805],{"class":36,"line":17097},[34,152806,152807],{"class":59},"    students.append({\n",[34,152809,152810,152813],{"class":36,"line":17103},[34,152811,152812],{"class":187},"        \"student_id\"",[34,152814,152815],{"class":59},": student_id,\n",[34,152817,152818,152821],{"class":36,"line":17126},[34,152819,152820],{"class":187},"        \"name\"",[34,152822,152823],{"class":59},": name,\n",[34,152825,152826,152829],{"class":36,"line":17140},[34,152827,152828],{"class":187},"        \"age\"",[34,152830,152831],{"class":59},": age,\n",[34,152833,152834,152837],{"class":36,"line":17160},[34,152835,152836],{"class":187},"        \"score\"",[34,152838,152839],{"class":59},": score,\n",[34,152841,152842],{"class":36,"line":17166},[34,152843,33923],{"class":59},[34,152845,152846],{"class":36,"line":17177},[34,152847,152848],{"class":59},"    save_students(students)\n",[34,152850,152851,152853,152855,152858],{"class":36,"line":17200},[34,152852,31762],{"class":63},[34,152854,617],{"class":59},[34,152856,152857],{"class":187},"\"添加成功\"",[34,152859,623],{"class":59},[34,152861,152862],{"class":36,"line":17222},[34,152863,2864],{"emptyLinePlaceholder":540},[34,152865,152866],{"class":36,"line":17227},[34,152867,2864],{"emptyLinePlaceholder":540},[34,152869,152870,152872,152875],{"class":36,"line":17233},[34,152871,32410],{"class":112},[34,152873,152874],{"class":2427}," delete_student",[34,152876,152348],{"class":59},[34,152878,152879,152881,152883,152885,152887,152890],{"class":36,"line":17247},[34,152880,152710],{"class":59},[34,152882,447],{"class":112},[34,152884,61066],{"class":63},[34,152886,617],{"class":59},[34,152888,152889],{"class":187},"\"请输入要删除的学号:\"",[34,152891,623],{"class":59},[34,152893,152894,152897,152899],{"class":36,"line":17260},[34,152895,152896],{"class":59},"    student ",[34,152898,447],{"class":112},[34,152900,152901],{"class":59}," find_student(students, student_id)\n",[34,152903,152904],{"class":36,"line":17265},[34,152905,2864],{"emptyLinePlaceholder":540},[34,152907,152908,152910,152912,152914,152916],{"class":36,"line":17279},[34,152909,3565],{"class":112},[34,152911,152524],{"class":59},[34,152913,39389],{"class":112},[34,152915,39395],{"class":63},[34,152917,4203],{"class":59},[34,152919,152920,152922,152924,152927],{"class":36,"line":17284},[34,152921,32914],{"class":63},[34,152923,617],{"class":59},[34,152925,152926],{"class":187},"\"学生不存在\"",[34,152928,623],{"class":59},[34,152930,152931],{"class":36,"line":17290},[34,152932,152748],{"class":112},[34,152934,152935],{"class":36,"line":17295},[34,152936,2864],{"emptyLinePlaceholder":540},[34,152938,152939],{"class":36,"line":17309},[34,152940,152941],{"class":59},"    students.remove(student)\n",[34,152943,152944],{"class":36,"line":17314},[34,152945,152848],{"class":59},[34,152947,152948,152950,152952,152955],{"class":36,"line":17319},[34,152949,31762],{"class":63},[34,152951,617],{"class":59},[34,152953,152954],{"class":187},"\"删除成功\"",[34,152956,623],{"class":59},[34,152958,152959],{"class":36,"line":17333},[34,152960,2864],{"emptyLinePlaceholder":540},[34,152962,152963],{"class":36,"line":17345},[34,152964,2864],{"emptyLinePlaceholder":540},[34,152966,152967,152969,152972],{"class":36,"line":17350},[34,152968,32410],{"class":112},[34,152970,152971],{"class":2427}," update_student",[34,152973,152348],{"class":59},[34,152975,152976,152978,152980,152982,152984,152987],{"class":36,"line":17363},[34,152977,152710],{"class":59},[34,152979,447],{"class":112},[34,152981,61066],{"class":63},[34,152983,617],{"class":59},[34,152985,152986],{"class":187},"\"请输入要修改的学号:\"",[34,152988,623],{"class":59},[34,152990,152991,152993,152995],{"class":36,"line":17368},[34,152992,152896],{"class":59},[34,152994,447],{"class":112},[34,152996,152901],{"class":59},[34,152998,152999],{"class":36,"line":17373},[34,153000,2864],{"emptyLinePlaceholder":540},[34,153002,153003,153005,153007,153009,153011],{"class":36,"line":17378},[34,153004,3565],{"class":112},[34,153006,152524],{"class":59},[34,153008,39389],{"class":112},[34,153010,39395],{"class":63},[34,153012,4203],{"class":59},[34,153014,153015,153017,153019,153021],{"class":36,"line":17391},[34,153016,32914],{"class":63},[34,153018,617],{"class":59},[34,153020,152926],{"class":187},[34,153022,623],{"class":59},[34,153024,153025],{"class":36,"line":17396},[34,153026,152748],{"class":112},[34,153028,153029],{"class":36,"line":33096},[34,153030,2864],{"emptyLinePlaceholder":540},[34,153032,153033,153035,153037,153039,153041,153044],{"class":36,"line":33102},[34,153034,152757],{"class":59},[34,153036,447],{"class":112},[34,153038,61066],{"class":63},[34,153040,617],{"class":59},[34,153042,153043],{"class":187},"\"请输入新姓名:\"",[34,153045,623],{"class":59},[34,153047,153048,153050,153052,153054,153057],{"class":36,"line":33108},[34,153049,152773],{"class":59},[34,153051,447],{"class":112},[34,153053,152778],{"class":59},[34,153055,153056],{"class":187},"\"请输入新年龄:\"",[34,153058,623],{"class":59},[34,153060,153061,153063,153065,153067,153070],{"class":36,"line":33114},[34,153062,152788],{"class":59},[34,153064,447],{"class":112},[34,153066,152793],{"class":59},[34,153068,153069],{"class":187},"\"请输入新成绩:\"",[34,153071,623],{"class":59},[34,153073,153074],{"class":36,"line":33120},[34,153075,2864],{"emptyLinePlaceholder":540},[34,153077,153078,153081,153083,153085,153087],{"class":36,"line":33131},[34,153079,153080],{"class":59},"    student[",[34,153082,63140],{"class":187},[34,153084,4907],{"class":59},[34,153086,447],{"class":112},[34,153088,150182],{"class":59},[34,153090,153091,153093,153095,153097,153099],{"class":36,"line":33137},[34,153092,153080],{"class":59},[34,153094,69585],{"class":187},[34,153096,4907],{"class":59},[34,153098,447],{"class":112},[34,153100,150194],{"class":59},[34,153102,153103,153105,153107,153109,153111],{"class":36,"line":33157},[34,153104,153080],{"class":59},[34,153106,151859],{"class":187},[34,153108,4907],{"class":59},[34,153110,447],{"class":112},[34,153112,2050],{"class":59},[34,153114,153115],{"class":36,"line":33163},[34,153116,2864],{"emptyLinePlaceholder":540},[34,153118,153119],{"class":36,"line":33174},[34,153120,152848],{"class":59},[34,153122,153123,153125,153127,153130],{"class":36,"line":33180},[34,153124,31762],{"class":63},[34,153126,617],{"class":59},[34,153128,153129],{"class":187},"\"修改成功\"",[34,153131,623],{"class":59},[34,153133,153134],{"class":36,"line":33186},[34,153135,2864],{"emptyLinePlaceholder":540},[34,153137,153138],{"class":36,"line":33192},[34,153139,2864],{"emptyLinePlaceholder":540},[34,153141,153142,153144,153147],{"class":36,"line":33198},[34,153143,32410],{"class":112},[34,153145,153146],{"class":2427}," query_student",[34,153148,152348],{"class":59},[34,153150,153151,153153,153155,153157,153159,153162],{"class":36,"line":33204},[34,153152,152710],{"class":59},[34,153154,447],{"class":112},[34,153156,61066],{"class":63},[34,153158,617],{"class":59},[34,153160,153161],{"class":187},"\"请输入要查询的学号:\"",[34,153163,623],{"class":59},[34,153165,153166,153168,153170],{"class":36,"line":33210},[34,153167,152896],{"class":59},[34,153169,447],{"class":112},[34,153171,152901],{"class":59},[34,153173,153174],{"class":36,"line":33216},[34,153175,2864],{"emptyLinePlaceholder":540},[34,153177,153178,153180,153182,153184,153186],{"class":36,"line":33236},[34,153179,3565],{"class":112},[34,153181,152524],{"class":59},[34,153183,39389],{"class":112},[34,153185,39395],{"class":63},[34,153187,4203],{"class":59},[34,153189,153190,153192,153194,153196],{"class":36,"line":33242},[34,153191,32914],{"class":63},[34,153193,617],{"class":59},[34,153195,152926],{"class":187},[34,153197,623],{"class":59},[34,153199,153200],{"class":36,"line":33258},[34,153201,152748],{"class":112},[34,153203,153204],{"class":36,"line":33264},[34,153205,2864],{"emptyLinePlaceholder":540},[34,153207,153208],{"class":36,"line":33278},[34,153209,153210],{"class":59},"    print_student(student)\n",[34,153212,153213],{"class":36,"line":33284},[34,153214,2864],{"emptyLinePlaceholder":540},[34,153216,153217],{"class":36,"line":33299},[34,153218,2864],{"emptyLinePlaceholder":540},[34,153220,153221,153223,153226],{"class":36,"line":33305},[34,153222,32410],{"class":112},[34,153224,153225],{"class":2427}," print_student",[34,153227,153228],{"class":59},"(student):\n",[34,153230,153231,153233],{"class":36,"line":33314},[34,153232,31762],{"class":63},[34,153234,151826],{"class":59},[34,153236,153237,153240,153242,153244,153247,153250,153252,153255],{"class":36,"line":33320},[34,153238,153239],{"class":112},"        f",[34,153241,860],{"class":187},[34,153243,1501],{"class":63},[34,153245,153246],{"class":59},"student[",[34,153248,153249],{"class":187},"'student_id'",[34,153251,477],{"class":59},[34,153253,153254],{"class":63},"}\\t",[34,153256,25598],{"class":187},[34,153258,153259,153261,153263,153265,153267,153270,153272,153274],{"class":36,"line":33329},[34,153260,153239],{"class":112},[34,153262,860],{"class":187},[34,153264,1501],{"class":63},[34,153266,153246],{"class":59},[34,153268,153269],{"class":187},"'name'",[34,153271,477],{"class":59},[34,153273,153254],{"class":63},[34,153275,25598],{"class":187},[34,153277,153278,153280,153282,153284,153286,153289,153291,153293],{"class":36,"line":33335},[34,153279,153239],{"class":112},[34,153281,860],{"class":187},[34,153283,1501],{"class":63},[34,153285,153246],{"class":59},[34,153287,153288],{"class":187},"'age'",[34,153290,477],{"class":59},[34,153292,153254],{"class":63},[34,153294,25598],{"class":187},[34,153296,153297,153299,153301,153303,153305,153308,153310,153312],{"class":36,"line":33341},[34,153298,153239],{"class":112},[34,153300,860],{"class":187},[34,153302,1501],{"class":63},[34,153304,153246],{"class":59},[34,153306,153307],{"class":187},"'score'",[34,153309,477],{"class":59},[34,153311,1550],{"class":63},[34,153313,25598],{"class":187},[34,153315,153316],{"class":36,"line":33350},[34,153317,153318],{"class":59},"    )\n",[34,153320,153321],{"class":36,"line":33356},[34,153322,2864],{"emptyLinePlaceholder":540},[34,153324,153325],{"class":36,"line":33367},[34,153326,2864],{"emptyLinePlaceholder":540},[34,153328,153329,153331,153334],{"class":36,"line":33373},[34,153330,32410],{"class":112},[34,153332,153333],{"class":2427}," show_all_students",[34,153335,152348],{"class":59},[34,153337,153338,153340,153342],{"class":36,"line":33392},[34,153339,3565],{"class":112},[34,153341,39392],{"class":112},[34,153343,152529],{"class":59},[34,153345,153346,153348,153350,153353],{"class":36,"line":33398},[34,153347,32914],{"class":63},[34,153349,617],{"class":59},[34,153351,153352],{"class":187},"\"暂无学生\"",[34,153354,623],{"class":59},[34,153356,153357],{"class":36,"line":33409},[34,153358,152748],{"class":112},[34,153360,153361],{"class":36,"line":33415},[34,153362,2864],{"emptyLinePlaceholder":540},[34,153364,153365,153367,153369,153372,153374,153377,153379,153382,153384,153387],{"class":36,"line":33435},[34,153366,31762],{"class":63},[34,153368,617],{"class":59},[34,153370,153371],{"class":187},"\"学号",[34,153373,1705],{"class":63},[34,153375,153376],{"class":187},"姓名",[34,153378,1705],{"class":63},[34,153380,153381],{"class":187},"年龄",[34,153383,1705],{"class":63},[34,153385,153386],{"class":187},"成绩\"",[34,153388,623],{"class":59},[34,153390,153391,153393,153395,153397],{"class":36,"line":33451},[34,153392,3665],{"class":112},[34,153394,152524],{"class":59},[34,153396,26508],{"class":112},[34,153398,152529],{"class":59},[34,153400,153401],{"class":36,"line":33457},[34,153402,153403],{"class":59},"        print_student(student)\n",[34,153405,153406],{"class":36,"line":33471},[34,153407,2864],{"emptyLinePlaceholder":540},[34,153409,153410],{"class":36,"line":33477},[34,153411,2864],{"emptyLinePlaceholder":540},[34,153413,153414,153416,153418],{"class":36,"line":33483},[34,153415,32410],{"class":112},[34,153417,2437],{"class":2427},[34,153419,32416],{"class":59},[34,153421,153422,153425,153427],{"class":36,"line":33494},[34,153423,153424],{"class":59},"    students ",[34,153426,447],{"class":112},[34,153428,153429],{"class":59}," load_students()\n",[34,153431,153432],{"class":36,"line":33500},[34,153433,2864],{"emptyLinePlaceholder":540},[34,153435,153436,153438,153440],{"class":36,"line":33506},[34,153437,2715],{"class":112},[34,153439,95751],{"class":63},[34,153441,4203],{"class":59},[34,153443,153444],{"class":36,"line":33516},[34,153445,153446],{"class":59},"        show_menu()\n",[34,153448,153449,153452,153454,153456,153458,153461],{"class":36,"line":33522},[34,153450,153451],{"class":59},"        choice ",[34,153453,447],{"class":112},[34,153455,61066],{"class":63},[34,153457,617],{"class":59},[34,153459,153460],{"class":187},"\"请输入操作:\"",[34,153462,623],{"class":59},[34,153464,153465],{"class":36,"line":33533},[34,153466,2864],{"emptyLinePlaceholder":540},[34,153468,153469,153471,153474,153476,153479],{"class":36,"line":33539},[34,153470,2961],{"class":112},[34,153472,153473],{"class":59}," choice ",[34,153475,3413],{"class":112},[34,153477,153478],{"class":187}," \"1\"",[34,153480,4203],{"class":59},[34,153482,153483],{"class":36,"line":33549},[34,153484,153485],{"class":59},"            add_student(students)\n",[34,153487,153488,153491,153493,153495,153498],{"class":36,"line":33554},[34,153489,153490],{"class":112},"        elif",[34,153492,153473],{"class":59},[34,153494,3413],{"class":112},[34,153496,153497],{"class":187}," \"2\"",[34,153499,4203],{"class":59},[34,153501,153502],{"class":36,"line":33560},[34,153503,153504],{"class":59},"            delete_student(students)\n",[34,153506,153507,153509,153511,153513,153516],{"class":36,"line":33609},[34,153508,153490],{"class":112},[34,153510,153473],{"class":59},[34,153512,3413],{"class":112},[34,153514,153515],{"class":187}," \"3\"",[34,153517,4203],{"class":59},[34,153519,153520],{"class":36,"line":33656},[34,153521,153522],{"class":59},"            update_student(students)\n",[34,153524,153525,153527,153529,153531,153534],{"class":36,"line":33661},[34,153526,153490],{"class":112},[34,153528,153473],{"class":59},[34,153530,3413],{"class":112},[34,153532,153533],{"class":187}," \"4\"",[34,153535,4203],{"class":59},[34,153537,153538],{"class":36,"line":33667},[34,153539,153540],{"class":59},"            query_student(students)\n",[34,153542,153543,153545,153547,153549,153552],{"class":36,"line":33686},[34,153544,153490],{"class":112},[34,153546,153473],{"class":59},[34,153548,3413],{"class":112},[34,153550,153551],{"class":187}," \"5\"",[34,153553,4203],{"class":59},[34,153555,153556],{"class":36,"line":33692},[34,153557,153558],{"class":59},"            show_all_students(students)\n",[34,153560,153561,153563,153565,153567,153570],{"class":36,"line":33711},[34,153562,153490],{"class":112},[34,153564,153473],{"class":59},[34,153566,3413],{"class":112},[34,153568,153569],{"class":187}," \"0\"",[34,153571,4203],{"class":59},[34,153573,153574,153576,153578,153581],{"class":36,"line":33717},[34,153575,35112],{"class":63},[34,153577,617],{"class":59},[34,153579,153580],{"class":187},"\"退出系统\"",[34,153582,623],{"class":59},[34,153584,153585],{"class":36,"line":33723},[34,153586,115485],{"class":112},[34,153588,153589,153591],{"class":36,"line":33733},[34,153590,2998],{"class":112},[34,153592,4203],{"class":59},[34,153594,153595,153597,153599,153602],{"class":36,"line":33738},[34,153596,35112],{"class":63},[34,153598,617],{"class":59},[34,153600,153601],{"class":187},"\"输入错误\"",[34,153603,623],{"class":59},[34,153605,153606],{"class":36,"line":33744},[34,153607,2864],{"emptyLinePlaceholder":540},[34,153609,153610],{"class":36,"line":33760},[34,153611,2864],{"emptyLinePlaceholder":540},[34,153613,153614,153616,153618,153620,153622],{"class":36,"line":33805},[34,153615,2002],{"class":112},[34,153617,31683],{"class":63},[34,153619,101946],{"class":112},[34,153621,101949],{"class":187},[34,153623,4203],{"class":59},[34,153625,153626],{"class":36,"line":33811},[34,153627,101956],{"class":59},[14,153629,153630],{},"这个项目串联了：",[567,153632,153633,153636,153639,153642,153645,153647],{},[570,153634,153635],{},"菜单循环。",[570,153637,153638],{},"函数封装。",[570,153640,153641],{},"列表字典。",[570,153643,153644],{},"JSON 读写。",[570,153646,152114],{},[570,153648,153649,28850],{},[31,153650,153651],{},"if __name__ == \"__main__\"",[555,153653,153655],{"id":153654},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153657,153658],{},"可以进一步拆成两个类：",[567,153660,153661,153666],{},[570,153662,153663,153665],{},[31,153664,149955],{},"：表示单个学生。",[570,153667,153668,153670],{},[31,153669,151981],{},"：负责学生增删改查和文件保存。",[14,153672,153673],{},"示意代码：",[25,153675,153677],{"className":27,"code":153676,"language":29,"meta":22,"style":22},"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",[31,153678,153679,153689,153693,153697,153701,153709,153716,153722,153728,153734,153738,153746,153752,153762,153772,153782,153792,153796,153800,153806,153814,153822,153830,153838,153846,153854],{"__ignoreMap":22},[34,153680,153681,153683,153685,153687],{"class":36,"line":37},[34,153682,31200],{"class":112},[34,153684,151539],{"class":59},[34,153686,30855],{"class":112},[34,153688,151544],{"class":59},[34,153690,153691],{"class":36,"line":44},[34,153692,2864],{"emptyLinePlaceholder":540},[34,153694,153695],{"class":36,"line":50},[34,153696,2864],{"emptyLinePlaceholder":540},[34,153698,153699],{"class":36,"line":56},[34,153700,151557],{"class":2427},[34,153702,153703,153705,153707],{"class":36,"line":107},[34,153704,15158],{"class":112},[34,153706,8362],{"class":2427},[34,153708,4203],{"class":59},[34,153710,153711,153714],{"class":36,"line":196},[34,153712,153713],{"class":59},"    student_id: ",[34,153715,151573],{"class":63},[34,153717,153718,153720],{"class":36,"line":202},[34,153719,151570],{"class":59},[34,153721,151573],{"class":63},[34,153723,153724,153726],{"class":36,"line":207},[34,153725,151578],{"class":59},[34,153727,151581],{"class":63},[34,153729,153730,153732],{"class":36,"line":222},[34,153731,151586],{"class":59},[34,153733,151589],{"class":63},[34,153735,153736],{"class":36,"line":227},[34,153737,2864],{"emptyLinePlaceholder":540},[34,153739,153740,153742,153744],{"class":36,"line":232},[34,153741,31264],{"class":112},[34,153743,151737],{"class":2427},[34,153745,31270],{"class":59},[34,153747,153748,153750],{"class":36,"line":238},[34,153749,15216],{"class":112},[34,153751,16036],{"class":59},[34,153753,153754,153756,153758,153760],{"class":36,"line":244},[34,153755,151750],{"class":187},[34,153757,51898],{"class":59},[34,153759,31286],{"class":63},[34,153761,151757],{"class":59},[34,153763,153764,153766,153768,153770],{"class":36,"line":250},[34,153765,151762],{"class":187},[34,153767,51898],{"class":59},[34,153769,31286],{"class":63},[34,153771,151769],{"class":59},[34,153773,153774,153776,153778,153780],{"class":36,"line":256},[34,153775,151774],{"class":187},[34,153777,51898],{"class":59},[34,153779,31286],{"class":63},[34,153781,151781],{"class":59},[34,153783,153784,153786,153788,153790],{"class":36,"line":261},[34,153785,151786],{"class":187},[34,153787,51898],{"class":59},[34,153789,31286],{"class":63},[34,153791,151793],{"class":59},[34,153793,153794],{"class":36,"line":267},[34,153795,2993],{"class":59},[34,153797,153798],{"class":36,"line":2138},[34,153799,2864],{"emptyLinePlaceholder":540},[34,153801,153802,153804],{"class":36,"line":2143},[34,153803,151401],{"class":2427},[34,153805,151404],{"class":63},[34,153807,153808,153810,153812],{"class":36,"line":2157},[34,153809,31264],{"class":112},[34,153811,151814],{"class":2427},[34,153813,151817],{"class":59},[34,153815,153816,153818,153820],{"class":36,"line":2162},[34,153817,15216],{"class":112},[34,153819,151421],{"class":63},[34,153821,151826],{"class":59},[34,153823,153824,153826,153828],{"class":36,"line":2191},[34,153825,151831],{"class":59},[34,153827,151834],{"class":187},[34,153829,88297],{"class":59},[34,153831,153832,153834,153836],{"class":36,"line":2196},[34,153833,151831],{"class":59},[34,153835,63140],{"class":187},[34,153837,88297],{"class":59},[34,153839,153840,153842,153844],{"class":36,"line":2213},[34,153841,151831],{"class":59},[34,153843,69585],{"class":187},[34,153845,88297],{"class":59},[34,153847,153848,153850,153852],{"class":36,"line":2218},[34,153849,151831],{"class":59},[34,153851,151859],{"class":187},[34,153853,88297],{"class":59},[34,153855,153856],{"class":36,"line":2223},[34,153857,38588],{"class":59},[14,153859,153860],{},"管理器示意：",[25,153862,153864],{"className":27,"code":153863,"language":29,"meta":22,"style":22},"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",[31,153865,153866,153875,153883,153894,153898,153908,153921,153932,153939,153945,153949,153958,153967,153973,153980],{"__ignoreMap":22},[34,153867,153868,153870,153873],{"class":36,"line":37},[34,153869,15158],{"class":112},[34,153871,153872],{"class":2427}," StudentManager",[34,153874,4203],{"class":59},[34,153876,153877,153879,153881],{"class":36,"line":44},[34,153878,31264],{"class":112},[34,153880,31267],{"class":63},[34,153882,31270],{"class":59},[34,153884,153885,153887,153890,153892],{"class":36,"line":50},[34,153886,31308],{"class":63},[34,153888,153889],{"class":59},".students ",[34,153891,447],{"class":112},[34,153893,52299],{"class":59},[34,153895,153896],{"class":36,"line":56},[34,153897,2864],{"emptyLinePlaceholder":540},[34,153899,153900,153902,153905],{"class":36,"line":107},[34,153901,31264],{"class":112},[34,153903,153904],{"class":2427}," find_by_id",[34,153906,153907],{"class":59},"(self, student_id):\n",[34,153909,153910,153912,153914,153916,153918],{"class":36,"line":196},[34,153911,3867],{"class":112},[34,153913,152524],{"class":59},[34,153915,26508],{"class":112},[34,153917,39335],{"class":63},[34,153919,153920],{"class":59},".students:\n",[34,153922,153923,153925,153928,153930],{"class":36,"line":202},[34,153924,5106],{"class":112},[34,153926,153927],{"class":59}," student.student_id ",[34,153929,3413],{"class":112},[34,153931,152545],{"class":59},[34,153933,153934,153937],{"class":36,"line":207},[34,153935,153936],{"class":112},"                return",[34,153938,152552],{"class":59},[34,153940,153941,153943],{"class":36,"line":222},[34,153942,15216],{"class":112},[34,153944,152559],{"class":63},[34,153946,153947],{"class":36,"line":227},[34,153948,2864],{"emptyLinePlaceholder":540},[34,153950,153951,153953,153955],{"class":36,"line":232},[34,153952,31264],{"class":112},[34,153954,5673],{"class":2427},[34,153956,153957],{"class":59},"(self, student):\n",[34,153959,153960,153962,153964],{"class":36,"line":238},[34,153961,2961],{"class":112},[34,153963,39335],{"class":63},[34,153965,153966],{"class":59},".find_by_id(student.student_id):\n",[34,153968,153969,153971],{"class":36,"line":244},[34,153970,16196],{"class":112},[34,153972,126194],{"class":63},[34,153974,153975,153977],{"class":36,"line":250},[34,153976,31308],{"class":63},[34,153978,153979],{"class":59},".students.append(student)\n",[34,153981,153982,153984],{"class":36,"line":256},[34,153983,15216],{"class":112},[34,153985,153986],{"class":63}," True\n",[14,153988,153989],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[555,153991,153993],{"id":153992},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[584,153995,153997],{"id":153996},"_1251-数据结构","12.5.1 数据结构",[25,153999,154001],{"className":27,"code":154000,"language":29,"meta":22,"style":22},"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",[31,154002,154003,154011,154042,154072,154101,154130],{"__ignoreMap":22},[34,154004,154005,154007,154009],{"class":36,"line":37},[34,154006,148852],{"class":59},[34,154008,447],{"class":112},[34,154010,55908],{"class":59},[34,154012,154013,154015,154017,154019,154021,154023,154026,154028,154031,154033,154035,154037,154040],{"class":36,"line":44},[34,154014,148772],{"class":59},[34,154016,148384],{"class":187},[34,154018,51898],{"class":59},[34,154020,148995],{"class":187},[34,154022,12899],{"class":59},[34,154024,154025],{"class":187},"\"category\"",[34,154027,51898],{"class":59},[34,154029,154030],{"class":187},"\"手机\"",[34,154032,12899],{"class":59},[34,154034,84545],{"class":187},[34,154036,51898],{"class":59},[34,154038,154039],{"class":63},"12000",[34,154041,5394],{"class":59},[34,154043,154044,154046,154048,154050,154052,154054,154056,154058,154061,154063,154065,154067,154070],{"class":36,"line":50},[34,154045,148772],{"class":59},[34,154047,148384],{"class":187},[34,154049,51898],{"class":59},[34,154051,148995],{"class":187},[34,154053,12899],{"class":59},[34,154055,154025],{"class":187},[34,154057,51898],{"class":59},[34,154059,154060],{"class":187},"\"电脑\"",[34,154062,12899],{"class":59},[34,154064,84545],{"class":187},[34,154066,51898],{"class":59},[34,154068,154069],{"class":63},"18000",[34,154071,5394],{"class":59},[34,154073,154074,154076,154078,154080,154082,154084,154086,154088,154090,154092,154094,154096,154099],{"class":36,"line":56},[34,154075,148772],{"class":59},[34,154077,148384],{"class":187},[34,154079,51898],{"class":59},[34,154081,149016],{"class":187},[34,154083,12899],{"class":59},[34,154085,154025],{"class":187},[34,154087,51898],{"class":59},[34,154089,154030],{"class":187},[34,154091,12899],{"class":59},[34,154093,84545],{"class":187},[34,154095,51898],{"class":59},[34,154097,154098],{"class":63},"15000",[34,154100,5394],{"class":59},[34,154102,154103,154105,154107,154109,154111,154113,154115,154117,154119,154121,154123,154125,154128],{"class":36,"line":107},[34,154104,148772],{"class":59},[34,154106,148384],{"class":187},[34,154108,51898],{"class":59},[34,154110,149016],{"class":187},[34,154112,12899],{"class":59},[34,154114,154025],{"class":187},[34,154116,51898],{"class":59},[34,154118,154060],{"class":187},[34,154120,12899],{"class":59},[34,154122,84545],{"class":187},[34,154124,51898],{"class":59},[34,154126,154127],{"class":63},"16000",[34,154129,5394],{"class":59},[34,154131,154132],{"class":36,"line":196},[34,154133,73],{"class":59},[584,154135,154137],{"id":154136},"_1252-按日期统计","12.5.2 按日期统计",[25,154139,154141],{"className":27,"code":154140,"language":29,"meta":22,"style":22},"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",[31,154142,154143,154152,154156,154167,154181,154194,154213,154217],{"__ignoreMap":22},[34,154144,154145,154148,154150],{"class":36,"line":37},[34,154146,154147],{"class":59},"daily_total ",[34,154149,447],{"class":112},[34,154151,88329],{"class":59},[34,154153,154154],{"class":36,"line":44},[34,154155,2864],{"emptyLinePlaceholder":540},[34,154157,154158,154160,154162,154164],{"class":36,"line":50},[34,154159,3489],{"class":112},[34,154161,148596],{"class":59},[34,154163,26508],{"class":112},[34,154165,154166],{"class":59}," sales:\n",[34,154168,154169,154172,154174,154177,154179],{"class":36,"line":56},[34,154170,154171],{"class":59},"    date ",[34,154173,447],{"class":112},[34,154175,154176],{"class":59}," item[",[34,154178,148384],{"class":187},[34,154180,73],{"class":59},[34,154182,154183,154186,154188,154190,154192],{"class":36,"line":107},[34,154184,154185],{"class":59},"    amount ",[34,154187,447],{"class":112},[34,154189,154176],{"class":59},[34,154191,84545],{"class":187},[34,154193,73],{"class":59},[34,154195,154196,154199,154201,154204,154206,154208,154210],{"class":36,"line":196},[34,154197,154198],{"class":59},"    daily_total[date] ",[34,154200,447],{"class":112},[34,154202,154203],{"class":59}," daily_total.get(date, ",[34,154205,319],{"class":63},[34,154207,14178],{"class":59},[34,154209,1088],{"class":112},[34,154211,154212],{"class":59}," amount\n",[34,154214,154215],{"class":36,"line":202},[34,154216,2864],{"emptyLinePlaceholder":540},[34,154218,154219,154221],{"class":36,"line":207},[34,154220,30878],{"class":63},[34,154222,154223],{"class":59},"(daily_total)\n",[584,154225,154227],{"id":154226},"_1253-按类别统计","12.5.3 按类别统计",[25,154229,154231],{"className":27,"code":154230,"language":29,"meta":22,"style":22},"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",[31,154232,154233,154242,154246,154256,154269,154281,154299,154303],{"__ignoreMap":22},[34,154234,154235,154238,154240],{"class":36,"line":37},[34,154236,154237],{"class":59},"category_total ",[34,154239,447],{"class":112},[34,154241,88329],{"class":59},[34,154243,154244],{"class":36,"line":44},[34,154245,2864],{"emptyLinePlaceholder":540},[34,154247,154248,154250,154252,154254],{"class":36,"line":50},[34,154249,3489],{"class":112},[34,154251,148596],{"class":59},[34,154253,26508],{"class":112},[34,154255,154166],{"class":59},[34,154257,154258,154261,154263,154265,154267],{"class":36,"line":56},[34,154259,154260],{"class":59},"    category ",[34,154262,447],{"class":112},[34,154264,154176],{"class":59},[34,154266,154025],{"class":187},[34,154268,73],{"class":59},[34,154270,154271,154273,154275,154277,154279],{"class":36,"line":107},[34,154272,154185],{"class":59},[34,154274,447],{"class":112},[34,154276,154176],{"class":59},[34,154278,84545],{"class":187},[34,154280,73],{"class":59},[34,154282,154283,154286,154288,154291,154293,154295,154297],{"class":36,"line":196},[34,154284,154285],{"class":59},"    category_total[category] ",[34,154287,447],{"class":112},[34,154289,154290],{"class":59}," category_total.get(category, ",[34,154292,319],{"class":63},[34,154294,14178],{"class":59},[34,154296,1088],{"class":112},[34,154298,154212],{"class":59},[34,154300,154301],{"class":36,"line":202},[34,154302,2864],{"emptyLinePlaceholder":540},[34,154304,154305,154307],{"class":36,"line":207},[34,154306,30878],{"class":63},[34,154308,154309],{"class":59},"(category_total)\n",[584,154311,154313],{"id":154312},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[25,154315,154317],{"className":27,"code":154316,"language":29,"meta":22,"style":22},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[31,154318,154319,154344],{"__ignoreMap":22},[34,154320,154321,154324,154326,154328,154331,154334,154337,154340,154342],{"class":36,"line":37},[34,154322,154323],{"class":59},"top_date, top_amount ",[34,154325,447],{"class":112},[34,154327,6415],{"class":63},[34,154329,154330],{"class":59},"(daily_total.items(), ",[34,154332,154333],{"class":5680},"key",[34,154335,154336],{"class":112},"=lambda",[34,154338,154339],{"class":59}," item: item[",[34,154341,64],{"class":63},[34,154343,5121],{"class":59},[34,154345,154346,154348],{"class":36,"line":44},[34,154347,30878],{"class":63},[34,154349,154350],{"class":59},"(top_date, top_amount)\n",[555,154352,154354],{"id":154353},"_126-绘制柱状图","12.6 绘制柱状图",[25,154356,154358],{"className":27,"code":154357,"language":29,"meta":22,"style":22},"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",[31,154359,154360,154374,154385,154389,154397,154409,154421,154432,154436,154440,154450,154461,154475,154480,154497,154514,154530,154534],{"__ignoreMap":22},[34,154361,154362,154364,154366,154368,154370,154372],{"class":36,"line":37},[34,154363,31200],{"class":112},[34,154365,147766],{"class":59},[34,154367,30855],{"class":112},[34,154369,147771],{"class":59},[34,154371,31846],{"class":112},[34,154373,147776],{"class":59},[34,154375,154376,154378,154380,154382],{"class":36,"line":44},[34,154377,31200],{"class":112},[34,154379,147625],{"class":59},[34,154381,30855],{"class":112},[34,154383,154384],{"class":59}," Bar\n",[34,154386,154387],{"class":36,"line":50},[34,154388,2864],{"emptyLinePlaceholder":540},[34,154390,154391,154393,154395],{"class":36,"line":56},[34,154392,154237],{"class":59},[34,154394,447],{"class":112},[34,154396,16036],{"class":59},[34,154398,154399,154402,154404,154407],{"class":36,"line":107},[34,154400,154401],{"class":187},"    \"手机\"",[34,154403,51898],{"class":59},[34,154405,154406],{"class":63},"27000",[34,154408,31929],{"class":59},[34,154410,154411,154414,154416,154419],{"class":36,"line":196},[34,154412,154413],{"class":187},"    \"电脑\"",[34,154415,51898],{"class":59},[34,154417,154418],{"class":63},"34000",[34,154420,31929],{"class":59},[34,154422,154423,154426,154428,154430],{"class":36,"line":202},[34,154424,154425],{"class":187},"    \"耳机\"",[34,154427,51898],{"class":59},[34,154429,124786],{"class":63},[34,154431,31929],{"class":59},[34,154433,154434],{"class":36,"line":207},[34,154435,2036],{"class":59},[34,154437,154438],{"class":36,"line":222},[34,154439,2864],{"emptyLinePlaceholder":540},[34,154441,154442,154445,154447],{"class":36,"line":227},[34,154443,154444],{"class":59},"bar ",[34,154446,447],{"class":112},[34,154448,154449],{"class":59}," Bar()\n",[34,154451,154452,154455,154458],{"class":36,"line":232},[34,154453,154454],{"class":59},"bar.add_xaxis(",[34,154456,154457],{"class":63},"list",[34,154459,154460],{"class":59},"(category_total.keys()))\n",[34,154462,154463,154466,154468,154470,154472],{"class":36,"line":238},[34,154464,154465],{"class":59},"bar.add_yaxis(",[34,154467,147682],{"class":187},[34,154469,12899],{"class":59},[34,154471,154457],{"class":63},[34,154473,154474],{"class":59},"(category_total.values()))\n",[34,154476,154477],{"class":36,"line":244},[34,154478,154479],{"class":59},"bar.set_global_opts(\n",[34,154481,154482,154484,154486,154488,154490,154492,154495],{"class":36,"line":250},[34,154483,147860],{"class":5680},[34,154485,447],{"class":112},[34,154487,147865],{"class":59},[34,154489,51868],{"class":5680},[34,154491,447],{"class":112},[34,154493,154494],{"class":187},"\"品类销售额\"",[34,154496,38509],{"class":59},[34,154498,154499,154501,154503,154505,154507,154509,154512],{"class":36,"line":256},[34,154500,147879],{"class":5680},[34,154502,447],{"class":112},[34,154504,147884],{"class":59},[34,154506,80271],{"class":5680},[34,154508,447],{"class":112},[34,154510,154511],{"class":187},"\"品类\"",[34,154513,38509],{"class":59},[34,154515,154516,154518,154520,154522,154524,154526,154528],{"class":36,"line":261},[34,154517,147898],{"class":5680},[34,154519,447],{"class":112},[34,154521,147884],{"class":59},[34,154523,80271],{"class":5680},[34,154525,447],{"class":112},[34,154527,147682],{"class":187},[34,154529,38509],{"class":59},[34,154531,154532],{"class":36,"line":267},[34,154533,623],{"class":59},[34,154535,154536,154539,154542],{"class":36,"line":2138},[34,154537,154538],{"class":59},"bar.render(",[34,154540,154541],{"class":187},"\"category_sales.html\"",[34,154543,623],{"class":59},[555,154545,154547],{"id":154546},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154549,154550],{},"时间线适合展示不同日期、月份、年份的数据变化。",[25,154552,154554],{"className":27,"code":154553,"language":29,"meta":22,"style":22},"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",[31,154555,154556,154570,154581,154585,154593,154617,154640,154665,154669,154673,154683,154687,154698,154707,154717,154731,154762,154767,154771],{"__ignoreMap":22},[34,154557,154558,154560,154562,154564,154566,154568],{"class":36,"line":37},[34,154559,31200],{"class":112},[34,154561,147766],{"class":59},[34,154563,30855],{"class":112},[34,154565,147771],{"class":59},[34,154567,31846],{"class":112},[34,154569,147776],{"class":59},[34,154571,154572,154574,154576,154578],{"class":36,"line":44},[34,154573,31200],{"class":112},[34,154575,147625],{"class":59},[34,154577,30855],{"class":112},[34,154579,154580],{"class":59}," Bar, Timeline\n",[34,154582,154583],{"class":36,"line":50},[34,154584,2864],{"emptyLinePlaceholder":540},[34,154586,154587,154589,154591],{"class":36,"line":56},[34,154588,102045],{"class":59},[34,154590,447],{"class":112},[34,154592,16036],{"class":59},[34,154594,154595,154598,154601,154603,154605,154607,154609,154611,154613,154615],{"class":36,"line":107},[34,154596,154597],{"class":187},"    \"2024-10-01\"",[34,154599,154600],{"class":59},": {",[34,154602,154030],{"class":187},[34,154604,51898],{"class":59},[34,154606,154039],{"class":63},[34,154608,12899],{"class":59},[34,154610,154060],{"class":187},[34,154612,51898],{"class":59},[34,154614,154069],{"class":63},[34,154616,5394],{"class":59},[34,154618,154619,154622,154624,154626,154628,154630,154632,154634,154636,154638],{"class":36,"line":196},[34,154620,154621],{"class":187},"    \"2024-10-02\"",[34,154623,154600],{"class":59},[34,154625,154030],{"class":187},[34,154627,51898],{"class":59},[34,154629,154098],{"class":63},[34,154631,12899],{"class":59},[34,154633,154060],{"class":187},[34,154635,51898],{"class":59},[34,154637,154127],{"class":63},[34,154639,5394],{"class":59},[34,154641,154642,154645,154647,154649,154651,154654,154656,154658,154660,154663],{"class":36,"line":202},[34,154643,154644],{"class":187},"    \"2024-10-03\"",[34,154646,154600],{"class":59},[34,154648,154030],{"class":187},[34,154650,51898],{"class":59},[34,154652,154653],{"class":63},"17000",[34,154655,12899],{"class":59},[34,154657,154060],{"class":187},[34,154659,51898],{"class":59},[34,154661,154662],{"class":63},"19000",[34,154664,5394],{"class":59},[34,154666,154667],{"class":36,"line":207},[34,154668,2036],{"class":59},[34,154670,154671],{"class":36,"line":222},[34,154672,2864],{"emptyLinePlaceholder":540},[34,154674,154675,154678,154680],{"class":36,"line":227},[34,154676,154677],{"class":59},"timeline ",[34,154679,447],{"class":112},[34,154681,154682],{"class":59}," Timeline()\n",[34,154684,154685],{"class":36,"line":232},[34,154686,2864],{"emptyLinePlaceholder":540},[34,154688,154689,154691,154694,154696],{"class":36,"line":238},[34,154690,3489],{"class":112},[34,154692,154693],{"class":59}," date, category_data ",[34,154695,26508],{"class":112},[34,154697,149535],{"class":59},[34,154699,154700,154703,154705],{"class":36,"line":244},[34,154701,154702],{"class":59},"    bar ",[34,154704,447],{"class":112},[34,154706,154449],{"class":59},[34,154708,154709,154712,154714],{"class":36,"line":250},[34,154710,154711],{"class":59},"    bar.add_xaxis(",[34,154713,154457],{"class":63},[34,154715,154716],{"class":59},"(category_data.keys()))\n",[34,154718,154719,154722,154724,154726,154728],{"class":36,"line":256},[34,154720,154721],{"class":59},"    bar.add_yaxis(",[34,154723,147682],{"class":187},[34,154725,12899],{"class":59},[34,154727,154457],{"class":63},[34,154729,154730],{"class":59},"(category_data.values()))\n",[34,154732,154733,154736,154739,154741,154743,154745,154747,154749,154751,154753,154755,154757,154760],{"class":36,"line":261},[34,154734,154735],{"class":59},"    bar.set_global_opts(",[34,154737,154738],{"class":5680},"title_opts",[34,154740,447],{"class":112},[34,154742,147865],{"class":59},[34,154744,51868],{"class":5680},[34,154746,447],{"class":112},[34,154748,667],{"class":112},[34,154750,860],{"class":187},[34,154752,1501],{"class":63},[34,154754,74387],{"class":59},[34,154756,1550],{"class":63},[34,154758,154759],{"class":187},"销售额\"",[34,154761,30960],{"class":59},[34,154763,154764],{"class":36,"line":267},[34,154765,154766],{"class":59},"    timeline.add(bar, date)\n",[34,154768,154769],{"class":36,"line":2138},[34,154770,2864],{"emptyLinePlaceholder":540},[34,154772,154773,154776,154779],{"class":36,"line":2143},[34,154774,154775],{"class":59},"timeline.render(",[34,154777,154778],{"class":187},"\"timeline_sales.html\"",[34,154780,623],{"class":59},[555,154782,154784],{"id":154783},"_128-绘制地图","12.8 绘制地图",[14,154786,154787],{},"地图适合展示地区数据。",[25,154789,154791],{"className":27,"code":154790,"language":29,"meta":22,"style":22},"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",[31,154792,154793,154807,154818,154822,154830,154843,154855,154868,154881,154885,154889,154899,154914,154919,154936,154955,154959],{"__ignoreMap":22},[34,154794,154795,154797,154799,154801,154803,154805],{"class":36,"line":37},[34,154796,31200],{"class":112},[34,154798,147766],{"class":59},[34,154800,30855],{"class":112},[34,154802,147771],{"class":59},[34,154804,31846],{"class":112},[34,154806,147776],{"class":59},[34,154808,154809,154811,154813,154815],{"class":36,"line":44},[34,154810,31200],{"class":112},[34,154812,147625],{"class":59},[34,154814,30855],{"class":112},[34,154816,154817],{"class":59}," Map\n",[34,154819,154820],{"class":36,"line":50},[34,154821,2864],{"emptyLinePlaceholder":540},[34,154823,154824,154826,154828],{"class":36,"line":56},[34,154825,102045],{"class":59},[34,154827,447],{"class":112},[34,154829,55908],{"class":59},[34,154831,154832,154835,154837,154839,154841],{"class":36,"line":107},[34,154833,154834],{"class":59},"    (",[34,154836,69730],{"class":187},[34,154838,12899],{"class":59},[34,154840,1423],{"class":63},[34,154842,38509],{"class":59},[34,154844,154845,154847,154849,154851,154853],{"class":36,"line":196},[34,154846,154834],{"class":59},[34,154848,69750],{"class":187},[34,154850,12899],{"class":59},[34,154852,147699],{"class":63},[34,154854,38509],{"class":59},[34,154856,154857,154859,154862,154864,154866],{"class":36,"line":202},[34,154858,154834],{"class":59},[34,154860,154861],{"class":187},"\"广东\"",[34,154863,12899],{"class":59},[34,154865,2186],{"class":63},[34,154867,38509],{"class":59},[34,154869,154870,154872,154875,154877,154879],{"class":36,"line":207},[34,154871,154834],{"class":59},[34,154873,154874],{"class":187},"\"浙江\"",[34,154876,12899],{"class":59},[34,154878,147704],{"class":63},[34,154880,38509],{"class":59},[34,154882,154883],{"class":36,"line":222},[34,154884,73],{"class":59},[34,154886,154887],{"class":36,"line":227},[34,154888,2864],{"emptyLinePlaceholder":540},[34,154890,154891,154894,154896],{"class":36,"line":232},[34,154892,154893],{"class":59},"map_chart ",[34,154895,447],{"class":112},[34,154897,154898],{"class":59}," Map()\n",[34,154900,154901,154904,154906,154909,154912],{"class":36,"line":238},[34,154902,154903],{"class":59},"map_chart.add(",[34,154905,147682],{"class":187},[34,154907,154908],{"class":59},", data, ",[34,154910,154911],{"class":187},"\"china\"",[34,154913,623],{"class":59},[34,154915,154916],{"class":36,"line":244},[34,154917,154918],{"class":59},"map_chart.set_global_opts(\n",[34,154920,154921,154923,154925,154927,154929,154931,154934],{"class":36,"line":250},[34,154922,147860],{"class":5680},[34,154924,447],{"class":112},[34,154926,147865],{"class":59},[34,154928,51868],{"class":5680},[34,154930,447],{"class":112},[34,154932,154933],{"class":187},"\"地区销售额\"",[34,154935,38509],{"class":59},[34,154937,154938,154941,154943,154946,154949,154951,154953],{"class":36,"line":256},[34,154939,154940],{"class":5680},"    visualmap_opts",[34,154942,447],{"class":112},[34,154944,154945],{"class":59},"opts.VisualMapOpts(",[34,154947,154948],{"class":5680},"max_",[34,154950,447],{"class":112},[34,154952,2186],{"class":63},[34,154954,38509],{"class":59},[34,154956,154957],{"class":36,"line":261},[34,154958,623],{"class":59},[34,154960,154961,154964,154967],{"class":36,"line":267},[34,154962,154963],{"class":59},"map_chart.render(",[34,154965,154966],{"class":187},"\"map_sales.html\"",[34,154968,623],{"class":59},[14,154970,154971],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[555,154973,154975],{"id":154974},"_129-项目拆分建议","12.9 项目拆分建议",[14,154977,154978],{},"当代码超过一个文件时，可以这样组织：",[25,154980,154983],{"className":154981,"code":154982,"language":5651,"meta":22},[5649],"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",[31,154984,154982],{"__ignoreMap":22},[14,154986,154987],{},"职责：",[567,154989,154990,154996,155002,155008],{},[570,154991,154992,154995],{},[31,154993,154994],{},"main.py","：程序入口。",[570,154997,154998,155001],{},[31,154999,155000],{},"file_utils.py","：读写 JSON。",[570,155003,155004,155007],{},[31,155005,155006],{},"sales_service.py","：统计销售数据。",[570,155009,155010,155013],{},[31,155011,155012],{},"chart_builder.py","：生成图表。",[555,155015,155017],{"id":155016},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155019,155020],{},"语法基础：",[567,155022,155023,155026,155029,155032],{},[570,155024,155025],{},"会写变量、注释、输入输出。",[570,155027,155028],{},"会使用 int、float、str、bool。",[570,155030,155031],{},"会做类型转换。",[570,155033,155034],{},"会使用 f-string 格式化输出。",[14,155036,155037],{},"流程控制：",[567,155039,155040,155046,155052,155060],{},[570,155041,155042,155043,28850],{},"会写 ",[31,155044,155045],{},"if elif else",[570,155047,155042,155048,101405,155050,28850],{},[31,155049,109050],{},[31,155051,3489],{},[570,155053,155054,155055,101405,155057,28850],{},"理解 ",[31,155056,2517],{},[31,155058,155059],{},"continue",[570,155061,155062],{},"能写嵌套循环。",[14,155064,155065],{},"函数：",[567,155067,155068,155071,155074,155077],{},[570,155069,155070],{},"会定义和调用函数。",[570,155072,155073],{},"理解参数和返回值。",[570,155075,155076],{},"知道局部变量和全局变量。",[570,155078,155079],{},"会使用默认参数、关键字参数、不定长参数。",[14,155081,155082],{},"容器：",[567,155084,155085,155088,155091,155094,155097],{},[570,155086,155087],{},"会使用列表增删改查。",[570,155089,155090],{},"会遍历列表、字典。",[570,155092,155093],{},"会使用切片。",[570,155095,155096],{},"会用集合去重。",[570,155098,155099],{},"会处理列表嵌套字典。",[14,155101,155102],{},"文件和模块：",[567,155104,155105,155108,155111,155114,155117],{},[570,155106,155107],{},"会读写文本文件。",[570,155109,155110],{},"会读写 JSON。",[570,155112,155113],{},"会捕获常见异常。",[570,155115,155116],{},"会导入模块和第三方包。",[570,155118,155119],{},"会创建简单包结构。",[14,155121,155122],{},"项目能力：",[567,155124,155125,155128,155131,155134,155137],{},[570,155126,155127],{},"能把代码拆成函数。",[570,155129,155130],{},"能把数据保存到文件。",[570,155132,155133],{},"能处理用户输入错误。",[570,155135,155136],{},"能写一个完整菜单程序。",[570,155138,155139],{},"能用 pyecharts 生成图表。",[555,155141,155143],{"id":155142},"_1211-推荐练习顺序","12.11 推荐练习顺序",[567,155145,155146,155149,155152,155155,155158,155161,155164,155167],{},[570,155147,155148],{},"猜数字游戏。",[570,155150,155151],{},"ATM 菜单程序。",[570,155153,155154],{},"学生成绩统计。",[570,155156,155157],{},"学生管理系统函数版。",[570,155159,155160],{},"学生管理系统文件持久化版。",[570,155162,155163],{},"学生管理系统面向对象版。",[570,155165,155166],{},"销售数据统计。",[570,155168,155169],{},"销售数据可视化。",[555,155171,155173],{"id":155172},"_1212-常见学习误区","12.12 常见学习误区",[567,155175,155176,155179,155182,155185,155188,155191,155194],{},[570,155177,155178],{},"只看视频不敲代码。",[570,155180,155181],{},"一报错就复制错误去搜，不先读报错位置。",[570,155183,155184],{},"变量名随便写，后续自己看不懂。",[570,155186,155187],{},"所有代码都写在一个文件一个函数里。",[570,155189,155190],{},"不保存练习代码，复习时没有材料。",[570,155192,155193],{},"还没掌握列表字典就急着学框架。",[570,155195,155196],{},"不会读官方文档，只依赖教程。",[555,155198,155200],{"id":155199},"_1213-如何读报错","12.13 如何读报错",[14,155202,155203],{},"报错通常从下往上看最后几行。",[14,155205,15599],{},[25,155207,155210],{"className":155208,"code":155209,"language":5651,"meta":22},[5649],"ValueError: invalid literal for int() with base 10: 'abc'\n",[31,155211,155209],{"__ignoreMap":22},[14,155213,25064],{},[567,155215,155216,155222,155232],{},[570,155217,155218,155219,28850],{},"异常类型是 ",[31,155220,155221],{},"ValueError",[570,155223,107732,155224,155227,155228,155231],{},[31,155225,155226],{},"int()"," 无法把 ",[31,155229,155230],{},"'abc'"," 转成整数。",[570,155233,155234],{},"应该检查输入内容或增加异常处理。",[14,155236,155237],{},"再看文件名和行号：",[25,155239,155242],{"className":155240,"code":155241,"language":5651,"meta":22},[5649],"File \"main.py\", line 10, in \u003Cmodule>\n",[31,155243,155241],{"__ignoreMap":22},[14,155245,155246,155247,155249],{},"表示错误发生在 ",[31,155248,154994],{}," 第 10 行。",[555,155251,155253],{"id":155252},"_1214-后续学习方向","12.14 后续学习方向",[14,155255,155256],{},"Python 基础完成后，可以按兴趣选择方向：",[567,155258,155259,155271,155280,155292,155303,155312,155322],{},[570,155260,155261,155262,822,155265,822,155268,28850],{},"自动化办公：",[31,155263,155264],{},"openpyxl",[31,155266,155267],{},"python-docx",[31,155269,155270],{},"pdfplumber",[570,155272,155273,155274,822,155276,822,155278,28850],{},"数据分析：",[31,155275,101013],{},[31,155277,146572],{},[31,155279,146580],{},[570,155281,155282,155283,822,155286,822,155289,28850],{},"Web 后端：",[31,155284,155285],{},"Flask",[31,155287,155288],{},"FastAPI",[31,155290,155291],{},"Django",[570,155293,155294,155295,822,155297,822,155300,28850],{},"爬虫：",[31,155296,146557],{},[31,155298,155299],{},"BeautifulSoup",[31,155301,155302],{},"Scrapy",[570,155304,155305,155306,822,155308,155311],{},"测试开发：",[31,155307,146604],{},[31,155309,155310],{},"selenium","、接口测试。",[570,155313,155314,155315,822,155317,822,155319,28850],{},"人工智能：",[31,155316,101013],{},[31,155318,146572],{},[31,155320,155321],{},"pytorch",[570,155323,155324,155325,822,155327,822,155330,28850],{},"运维脚本：",[31,155326,146173],{},[31,155328,155329],{},"subprocess",[31,155331,155332],{},"paramiko",[14,155334,155335],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[555,155337,155339],{"id":155338},"_1215-结课练习","12.15 结课练习",[567,155341,155342,155345,155348,155351,155354,155357,155360,155363],{},[570,155343,155344],{},"完成函数版学生管理系统。",[570,155346,155347],{},"给学生管理系统增加 JSON 持久化。",[570,155349,155350],{},"给学生管理系统增加异常处理。",[570,155352,155353],{},"把学生管理系统改成面向对象版。",[570,155355,155356],{},"使用 pyecharts 绘制学生成绩柱状图。",[570,155358,155359],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[570,155361,155362],{},"按品类统计销售额并绘制柱状图。",[570,155364,155365],{},"写一份自己的 Python 学习路线图。",[532,155367,155368],{},"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":22,"searchDepth":44,"depth":44,"links":155370},[155371,155372,155375,155376,155377,155383,155384,155385,155386,155387,155388,155389,155390,155391,155392],{"id":152087,"depth":44,"text":152088},{"id":152137,"depth":44,"text":152138,"children":155373},[155374],{"id":152141,"depth":50,"text":152142},{"id":152180,"depth":44,"text":152181},{"id":153654,"depth":44,"text":153655},{"id":153992,"depth":44,"text":153993,"children":155378},[155379,155380,155381,155382],{"id":153996,"depth":50,"text":153997},{"id":154136,"depth":50,"text":154137},{"id":154226,"depth":50,"text":154227},{"id":154312,"depth":50,"text":154313},{"id":154353,"depth":44,"text":154354},{"id":154546,"depth":44,"text":154547},{"id":154783,"depth":44,"text":154784},{"id":154974,"depth":44,"text":154975},{"id":155016,"depth":44,"text":155017},{"id":155142,"depth":44,"text":155143},{"id":155172,"depth":44,"text":155173},{"id":155199,"depth":44,"text":155200},{"id":155252,"depth":44,"text":155253},{"id":155338,"depth":44,"text":155339},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152079,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155399,"title":155400,"body":155401,"description":537,"extension":538,"meta":157870,"navigation":540,"path":157871,"seo":157872,"stem":157873,"__hash__":157874},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155402,"toc":157845},[155403,155406,155410,155413,155416,155436,155439,155462,155465,155468,155490,155493,155515,155519,155522,155562,155565,155686,155690,155693,155733,155736,155760,155763,155767,155770,155784,155817,155820,155855,155858,155881,155884,155917,155920,155922,155928,156003,156006,156012,156029,156069,156073,156076,156122,156124,156162,156165,156200,156203,156238,156241,156273,156276,156295,156299,156303,156416,156418,156493,156497,156543,156546,156572,156581,156585,156588,156651,156659,156687,156691,156731,156796,156800,156803,156842,156845,156890,156893,156954,156958,156985,156988,157016,157019,157023,157027,157092,157095,157133,157136,157168,157172,157271,157275,157278,157351,157354,157402,157406,157412,157452,157455,157502,157505,157554,157558,157560,157574,157576,157757,157761,157788,157808,157815,157819,157836,157842],[10,155404,155400],{"id":155405},"_2-基础语法变量与字符串",[555,155407,155409],{"id":155408},"_21-注释","2.1 注释",[14,155411,155412],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155414,155415],{},"单行注释：",[25,155417,155419],{"className":27,"code":155418,"language":29,"meta":22,"style":22},"# 这是单行注释\nprint(\"hello\")\n",[31,155420,155421,155426],{"__ignoreMap":22},[34,155422,155423],{"class":36,"line":37},[34,155424,155425],{"class":40},"# 这是单行注释\n",[34,155427,155428,155430,155432,155434],{"class":36,"line":44},[34,155429,30878],{"class":63},[34,155431,617],{"class":59},[34,155433,6308],{"class":187},[34,155435,623],{"class":59},[14,155437,155438],{},"多行说明常用三引号：",[25,155440,155442],{"className":27,"code":155441,"language":29,"meta":22,"style":22},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[31,155443,155444,155448,155453,155458],{"__ignoreMap":22},[34,155445,155446],{"class":36,"line":37},[34,155447,96157],{"class":187},[34,155449,155450],{"class":36,"line":44},[34,155451,155452],{"class":187},"这是多行说明。\n",[34,155454,155455],{"class":36,"line":50},[34,155456,155457],{"class":187},"常用于文件顶部说明、函数说明等。\n",[34,155459,155460],{"class":36,"line":56},[34,155461,96157],{"class":187},[14,155463,155464],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155466,155467],{},"不好：",[25,155469,155471],{"className":27,"code":155470,"language":29,"meta":22,"style":22},"# age 加 1\nage = age + 1\n",[31,155472,155473,155478],{"__ignoreMap":22},[34,155474,155475],{"class":36,"line":37},[34,155476,155477],{"class":40},"# age 加 1\n",[34,155479,155480,155482,155484,155486,155488],{"class":36,"line":44},[34,155481,146933],{"class":59},[34,155483,447],{"class":112},[34,155485,16171],{"class":59},[34,155487,1088],{"class":112},[34,155489,56160],{"class":63},[14,155491,155492],{},"较好：",[25,155494,155496],{"className":27,"code":155495,"language":29,"meta":22,"style":22},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[31,155497,155498,155503],{"__ignoreMap":22},[34,155499,155500],{"class":36,"line":37},[34,155501,155502],{"class":40},"# 用户过完生日后，年龄增加一岁\n",[34,155504,155505,155507,155509,155511,155513],{"class":36,"line":44},[34,155506,146933],{"class":59},[34,155508,447],{"class":112},[34,155510,16171],{"class":59},[34,155512,1088],{"class":112},[34,155514,56160],{"class":63},[555,155516,155518],{"id":155517},"_22-字面量","2.2 字面量",[14,155520,155521],{},"字面量就是代码中直接写出来的数据。",[25,155523,155525],{"className":27,"code":155524,"language":29,"meta":22,"style":22},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[31,155526,155527,155534,155541,155548,155555],{"__ignoreMap":22},[34,155528,155529,155531],{"class":36,"line":37},[34,155530,919],{"class":63},[34,155532,155533],{"class":40},"          # 整数\n",[34,155535,155536,155538],{"class":36,"line":44},[34,155537,664],{"class":63},[34,155539,155540],{"class":40},"         # 小数\n",[34,155542,155543,155545],{"class":36,"line":50},[34,155544,6308],{"class":187},[34,155546,155547],{"class":40},"      # 字符串\n",[34,155549,155550,155552],{"class":36,"line":56},[34,155551,31939],{"class":63},[34,155553,155554],{"class":40},"         # 布尔值\n",[34,155556,155557,155559],{"class":36,"line":107},[34,155558,96145],{"class":63},[34,155560,155561],{"class":40},"         # 空值\n",[14,155563,155564],{},"常见字面量类型：",[748,155566,155567,155577],{},[751,155568,155569],{},[754,155570,155571,155573,155575],{},[757,155572,24201],{},[757,155574,27957],{},[757,155576,26334],{},[795,155578,155579,155590,155601,155612,155624,155636,155648,155661,155673],{},[754,155580,155581,155583,155587],{},[800,155582,620],{},[800,155584,155585],{},[31,155586,919],{},[800,155588,155589],{},"整数",[754,155591,155592,155594,155598],{},[800,155593,656],{},[800,155595,155596],{},[31,155597,664],{},[800,155599,155600],{},"浮点数",[754,155602,155603,155605,155609],{},[800,155604,1774],{},[800,155606,155607],{},[31,155608,6308],{},[800,155610,155611],{},"字符串",[754,155613,155614,155616,155622],{},[800,155615,1826],{},[800,155617,155618,822,155620],{},[31,155619,31939],{},[31,155621,34449],{},[800,155623,66476],{},[754,155625,155626,155629,155633],{},[800,155627,155628],{},"NoneType",[800,155630,155631],{},[31,155632,96145],{},[800,155634,155635],{},"空值",[754,155637,155638,155640,155645],{},[800,155639,154457],{},[800,155641,155642],{},[31,155643,155644],{},"[1, 2, 3]",[800,155646,155647],{},"列表",[754,155649,155650,155653,155658],{},[800,155651,155652],{},"tuple",[800,155654,155655],{},[31,155656,155657],{},"(1, 2, 3)",[800,155659,155660],{},"元组",[754,155662,155663,155665,155670],{},[800,155664,114933],{},[800,155666,155667],{},[31,155668,155669],{},"{\"name\": \"张三\"}",[800,155671,155672],{},"字典",[754,155674,155675,155678,155683],{},[800,155676,155677],{},"set",[800,155679,155680],{},[31,155681,155682],{},"{1, 2, 3}",[800,155684,155685],{},"集合",[555,155687,155689],{"id":155688},"_23-变量","2.3 变量",[14,155691,155692],{},"变量是保存数据的名字。",[25,155694,155696],{"className":27,"code":155695,"language":29,"meta":22,"style":22},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[31,155697,155698,155706,155714,155724],{"__ignoreMap":22},[34,155699,155700,155702,155704],{"class":36,"line":37},[34,155701,146923],{"class":59},[34,155703,447],{"class":112},[34,155705,149740],{"class":187},[34,155707,155708,155710,155712],{"class":36,"line":44},[34,155709,146933],{"class":59},[34,155711,447],{"class":112},[34,155713,146938],{"class":63},[34,155715,155716,155719,155721],{"class":36,"line":50},[34,155717,155718],{"class":59},"height ",[34,155720,447],{"class":112},[34,155722,155723],{"class":63}," 1.75\n",[34,155725,155726,155729,155731],{"class":36,"line":56},[34,155727,155728],{"class":59},"is_student ",[34,155730,447],{"class":112},[34,155732,153986],{"class":63},[14,155734,155735],{},"Python 的变量不需要提前声明类型：",[25,155737,155739],{"className":27,"code":155738,"language":29,"meta":22,"style":22},"score = 100\nscore = \"满分\"\n",[31,155740,155741,155751],{"__ignoreMap":22},[34,155742,155743,155746,155748],{"class":36,"line":37},[34,155744,155745],{"class":59},"score ",[34,155747,447],{"class":112},[34,155749,155750],{"class":63}," 100\n",[34,155752,155753,155755,155757],{"class":36,"line":44},[34,155754,155745],{"class":59},[34,155756,447],{"class":112},[34,155758,155759],{"class":187}," \"满分\"\n",[14,155761,155762],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[555,155764,155766],{"id":155765},"_24-变量命名规则","2.4 变量命名规则",[14,155768,155769],{},"硬性规则：",[567,155771,155772,155775,155778,155781],{},[570,155773,155774],{},"只能由字母、数字、下划线组成。",[570,155776,155777],{},"不能以数字开头。",[570,155779,155780],{},"不能使用 Python 关键字。",[570,155782,155783],{},"区分大小写。",[25,155785,155787],{"className":27,"code":155786,"language":29,"meta":22,"style":22},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[31,155788,155789,155798,155807],{"__ignoreMap":22},[34,155790,155791,155794,155796],{"class":36,"line":37},[34,155792,155793],{"class":59},"user_name ",[34,155795,447],{"class":112},[34,155797,146928],{"class":187},[34,155799,155800,155803,155805],{"class":36,"line":44},[34,155801,155802],{"class":59},"age2 ",[34,155804,447],{"class":112},[34,155806,146938],{"class":63},[34,155808,155809,155812,155814],{"class":36,"line":50},[34,155810,155811],{"class":59},"_token ",[34,155813,447],{"class":112},[34,155815,155816],{"class":187}," \"abc\"\n",[14,155818,155819],{},"错误写法：",[25,155821,155823],{"className":27,"code":155822,"language":29,"meta":22,"style":22},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[31,155824,155825,155834,155846],{"__ignoreMap":22},[34,155826,155827,155830,155832],{"class":36,"line":37},[34,155828,155829],{"class":77864},"2age",[34,155831,14028],{"class":112},[34,155833,146938],{"class":63},[34,155835,155836,155838,155840,155842,155844],{"class":36,"line":44},[34,155837,131971],{"class":59},[34,155839,113],{"class":112},[34,155841,146923],{"class":59},[34,155843,447],{"class":112},[34,155845,146928],{"class":187},[34,155847,155848,155850,155852],{"class":36,"line":50},[34,155849,15158],{"class":112},[34,155851,14028],{"class":112},[34,155853,155854],{"class":187}," \"一班\"\n",[14,155856,155857],{},"查看关键字：",[25,155859,155861],{"className":27,"code":155860,"language":29,"meta":22,"style":22},"import keyword\n\nprint(keyword.kwlist)\n",[31,155862,155863,155870,155874],{"__ignoreMap":22},[34,155864,155865,155867],{"class":36,"line":37},[34,155866,30855],{"class":112},[34,155868,155869],{"class":59}," keyword\n",[34,155871,155872],{"class":36,"line":44},[34,155873,2864],{"emptyLinePlaceholder":540},[34,155875,155876,155878],{"class":36,"line":50},[34,155877,30878],{"class":63},[34,155879,155880],{"class":59},"(keyword.kwlist)\n",[14,155882,155883],{},"推荐命名风格：",[25,155885,155887],{"className":27,"code":155886,"language":29,"meta":22,"style":22},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[31,155888,155889,155898,155908],{"__ignoreMap":22},[34,155890,155891,155894,155896],{"class":36,"line":37},[34,155892,155893],{"class":59},"student_name ",[34,155895,447],{"class":112},[34,155897,149740],{"class":187},[34,155899,155900,155903,155905],{"class":36,"line":44},[34,155901,155902],{"class":59},"total_price ",[34,155904,447],{"class":112},[34,155906,155907],{"class":63}," 99.8\n",[34,155909,155910,155913,155915],{"class":36,"line":50},[34,155911,155912],{"class":59},"is_finished ",[34,155914,447],{"class":112},[34,155916,126194],{"class":63},[14,155918,155919],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[555,155921,51193],{"id":51192},[14,155923,104753,155924,155927],{},[31,155925,155926],{},"type()"," 查看数据类型：",[25,155929,155931],{"className":27,"code":155930,"language":29,"meta":22,"style":22},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[31,155932,155933,155947,155961,155975,155989],{"__ignoreMap":22},[34,155934,155935,155937,155939,155941,155943,155945],{"class":36,"line":37},[34,155936,30878],{"class":63},[34,155938,617],{"class":59},[34,155940,103494],{"class":63},[34,155942,617],{"class":59},[34,155944,919],{"class":63},[34,155946,30960],{"class":59},[34,155948,155949,155951,155953,155955,155957,155959],{"class":36,"line":44},[34,155950,30878],{"class":63},[34,155952,617],{"class":59},[34,155954,103494],{"class":63},[34,155956,617],{"class":59},[34,155958,664],{"class":63},[34,155960,30960],{"class":59},[34,155962,155963,155965,155967,155969,155971,155973],{"class":36,"line":50},[34,155964,30878],{"class":63},[34,155966,617],{"class":59},[34,155968,103494],{"class":63},[34,155970,617],{"class":59},[34,155972,6308],{"class":187},[34,155974,30960],{"class":59},[34,155976,155977,155979,155981,155983,155985,155987],{"class":36,"line":56},[34,155978,30878],{"class":63},[34,155980,617],{"class":59},[34,155982,103494],{"class":63},[34,155984,617],{"class":59},[34,155986,31939],{"class":63},[34,155988,30960],{"class":59},[34,155990,155991,155993,155995,155997,155999,156001],{"class":36,"line":107},[34,155992,30878],{"class":63},[34,155994,617],{"class":59},[34,155996,103494],{"class":63},[34,155998,617],{"class":59},[34,156000,96145],{"class":63},[34,156002,30960],{"class":59},[14,156004,156005],{},"输出类似：",[25,156007,156010],{"className":156008,"code":156009,"language":5651,"meta":22},[5649],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[31,156011,156009],{"__ignoreMap":22},[14,156013,9489,156014,107670,156016,156018,156019,156021,156022,21964,156024,156021,156026,156028],{},[31,156015,1826],{},[31,156017,620],{}," 的子类，",[31,156020,31939],{}," 可以当作 ",[31,156023,64],{},[31,156025,34449],{},[31,156027,319],{},"，但业务代码中不要滥用。",[25,156030,156032],{"className":27,"code":156031,"language":29,"meta":22,"style":22},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[31,156033,156034,156052],{"__ignoreMap":22},[34,156035,156036,156038,156040,156042,156044,156046,156049],{"class":36,"line":37},[34,156037,30878],{"class":63},[34,156039,617],{"class":59},[34,156041,31939],{"class":63},[34,156043,46027],{"class":112},[34,156045,25583],{"class":63},[34,156047,156048],{"class":59},")   ",[34,156050,156051],{"class":40},"# 2\n",[34,156053,156054,156056,156058,156060,156062,156064,156066],{"class":36,"line":44},[34,156055,30878],{"class":63},[34,156057,617],{"class":59},[34,156059,34449],{"class":63},[34,156061,46027],{"class":112},[34,156063,25583],{"class":63},[34,156065,46269],{"class":59},[34,156067,156068],{"class":40},"# 1\n",[555,156070,156072],{"id":156071},"_26-类型转换","2.6 类型转换",[14,156074,156075],{},"常用转换函数：",[25,156077,156079],{"className":27,"code":156078,"language":29,"meta":22,"style":22},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[31,156080,156081,156091,156102,156112],{"__ignoreMap":22},[34,156082,156083,156085,156087,156089],{"class":36,"line":37},[34,156084,620],{"class":63},[34,156086,617],{"class":59},[34,156088,54777],{"class":187},[34,156090,623],{"class":59},[34,156092,156093,156095,156097,156100],{"class":36,"line":44},[34,156094,656],{"class":63},[34,156096,617],{"class":59},[34,156098,156099],{"class":187},"\"3.14\"",[34,156101,623],{"class":59},[34,156103,156104,156106,156108,156110],{"class":36,"line":50},[34,156105,1774],{"class":63},[34,156107,617],{"class":59},[34,156109,919],{"class":63},[34,156111,623],{"class":59},[34,156113,156114,156116,156118,156120],{"class":36,"line":56},[34,156115,1826],{"class":63},[34,156117,617],{"class":59},[34,156119,64],{"class":63},[34,156121,623],{"class":59},[14,156123,15599],{},[25,156125,156127],{"className":27,"code":156126,"language":29,"meta":22,"style":22},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[31,156128,156129,156138,156149],{"__ignoreMap":22},[34,156130,156131,156133,156135],{"class":36,"line":37},[34,156132,146933],{"class":59},[34,156134,447],{"class":112},[34,156136,156137],{"class":187}," \"18\"\n",[34,156139,156140,156142,156144,156146],{"class":36,"line":44},[34,156141,146933],{"class":59},[34,156143,447],{"class":112},[34,156145,2846],{"class":63},[34,156147,156148],{"class":59},"(age)\n",[34,156150,156151,156153,156156,156158,156160],{"class":36,"line":50},[34,156152,30878],{"class":63},[34,156154,156155],{"class":59},"(age ",[34,156157,1088],{"class":112},[34,156159,25583],{"class":63},[34,156161,623],{"class":59},[14,156163,156164],{},"输入得到的内容永远是字符串：",[25,156166,156168],{"className":27,"code":156167,"language":29,"meta":22,"style":22},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[31,156169,156170,156186],{"__ignoreMap":22},[34,156171,156172,156175,156177,156179,156181,156184],{"class":36,"line":37},[34,156173,156174],{"class":59},"num ",[34,156176,447],{"class":112},[34,156178,61066],{"class":63},[34,156180,617],{"class":59},[34,156182,156183],{"class":187},"\"请输入数字:\"",[34,156185,623],{"class":59},[34,156187,156188,156190,156192,156194,156197],{"class":36,"line":44},[34,156189,30878],{"class":63},[34,156191,617],{"class":59},[34,156193,103494],{"class":63},[34,156195,156196],{"class":59},"(num))  ",[34,156198,156199],{"class":40},"# str\n",[14,156201,156202],{},"如果要做数学运算，必须转换：",[25,156204,156206],{"className":27,"code":156205,"language":29,"meta":22,"style":22},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[31,156207,156208,156226],{"__ignoreMap":22},[34,156209,156210,156212,156214,156216,156218,156220,156222,156224],{"class":36,"line":37},[34,156211,156174],{"class":59},[34,156213,447],{"class":112},[34,156215,2846],{"class":63},[34,156217,617],{"class":59},[34,156219,54282],{"class":63},[34,156221,617],{"class":59},[34,156223,156183],{"class":187},[34,156225,30960],{"class":59},[34,156227,156228,156230,156232,156234,156236],{"class":36,"line":44},[34,156229,30878],{"class":63},[34,156231,46080],{"class":59},[34,156233,1088],{"class":112},[34,156235,2502],{"class":63},[34,156237,623],{"class":59},[14,156239,156240],{},"常见错误：",[25,156242,156244],{"className":27,"code":156243,"language":29,"meta":22,"style":22},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[31,156245,156246,156259],{"__ignoreMap":22},[34,156247,156248,156250,156252,156254,156256],{"class":36,"line":37},[34,156249,620],{"class":63},[34,156251,617],{"class":59},[34,156253,156099],{"class":187},[34,156255,156048],{"class":59},[34,156257,156258],{"class":40},"# 错误\n",[34,156260,156261,156263,156265,156268,156271],{"class":36,"line":44},[34,156262,620],{"class":63},[34,156264,617],{"class":59},[34,156266,156267],{"class":187},"\"abc\"",[34,156269,156270],{"class":59},")    ",[34,156272,156258],{"class":40},[14,156274,156275],{},"正确写法：",[25,156277,156279],{"className":27,"code":156278,"language":29,"meta":22,"style":22},"num = float(\"3.14\")\n",[31,156280,156281],{"__ignoreMap":22},[34,156282,156283,156285,156287,156289,156291,156293],{"class":36,"line":37},[34,156284,156174],{"class":59},[34,156286,447],{"class":112},[34,156288,110184],{"class":63},[34,156290,617],{"class":59},[34,156292,156099],{"class":187},[34,156294,623],{"class":59},[555,156296,156298],{"id":156297},"_27-运算符","2.7 运算符",[584,156300,156302],{"id":156301},"_271-算术运算符","2.7.1 算术运算符",[748,156304,156305,156316],{},[751,156306,156307],{},[754,156308,156309,156312,156314],{},[757,156310,156311],{},"运算符",[757,156313,26334],{},[757,156315,27957],{},[795,156317,156318,156332,156346,156360,156374,156388,156402],{},[754,156319,156320,156324,156327],{},[800,156321,156322],{},[31,156323,1088],{},[800,156325,156326],{},"加法",[800,156328,156329],{},[31,156330,156331],{},"1 + 2",[754,156333,156334,156338,156341],{},[800,156335,156336],{},[31,156337,113],{},[800,156339,156340],{},"减法",[800,156342,156343],{},[31,156344,156345],{},"5 - 3",[754,156347,156348,156352,156355],{},[800,156349,156350],{},[31,156351,1062],{},[800,156353,156354],{},"乘法",[800,156356,156357],{},[31,156358,156359],{},"2 * 3",[754,156361,156362,156366,156369],{},[800,156363,156364],{},[31,156365,1190],{},[800,156367,156368],{},"除法，结果是浮点数",[800,156370,156371],{},[31,156372,156373],{},"5 \u002F 2",[754,156375,156376,156380,156383],{},[800,156377,156378],{},[31,156379,33791],{},[800,156381,156382],{},"整除",[800,156384,156385],{},[31,156386,156387],{},"5 \u002F\u002F 2",[754,156389,156390,156394,156397],{},[800,156391,156392],{},[31,156393,936],{},[800,156395,156396],{},"取余",[800,156398,156399],{},[31,156400,156401],{},"5 % 2",[754,156403,156404,156408,156411],{},[800,156405,156406],{},[31,156407,11125],{},[800,156409,156410],{},"幂运算",[800,156412,156413],{},[31,156414,156415],{},"2 ** 3",[14,156417,15599],{},[25,156419,156421],{"className":27,"code":156420,"language":29,"meta":22,"style":22},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[31,156422,156423,156441,156458,156475],{"__ignoreMap":22},[34,156424,156425,156427,156429,156431,156434,156436,156438],{"class":36,"line":37},[34,156426,30878],{"class":63},[34,156428,617],{"class":59},[34,156430,927],{"class":63},[34,156432,156433],{"class":112}," \u002F",[34,156435,15219],{"class":63},[34,156437,156048],{"class":59},[34,156439,156440],{"class":40},"# 2.5\n",[34,156442,156443,156445,156447,156449,156452,156454,156456],{"class":36,"line":44},[34,156444,30878],{"class":63},[34,156446,617],{"class":59},[34,156448,927],{"class":63},[34,156450,156451],{"class":112}," \u002F\u002F",[34,156453,15219],{"class":63},[34,156455,46269],{"class":59},[34,156457,156051],{"class":40},[34,156459,156460,156462,156464,156466,156469,156471,156473],{"class":36,"line":50},[34,156461,30878],{"class":63},[34,156463,617],{"class":59},[34,156465,927],{"class":63},[34,156467,156468],{"class":112}," %",[34,156470,15219],{"class":63},[34,156472,156048],{"class":59},[34,156474,156068],{"class":40},[34,156476,156477,156479,156481,156483,156486,156488,156490],{"class":36,"line":56},[34,156478,30878],{"class":63},[34,156480,617],{"class":59},[34,156482,70],{"class":63},[34,156484,156485],{"class":112}," **",[34,156487,78531],{"class":63},[34,156489,46269],{"class":59},[34,156491,156492],{"class":40},"# 8\n",[584,156494,156496],{"id":156495},"_272-赋值运算符","2.7.2 赋值运算符",[25,156498,156500],{"className":27,"code":156499,"language":29,"meta":22,"style":22},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[31,156501,156502,156510,156518,156526,156534],{"__ignoreMap":22},[34,156503,156504,156506,156508],{"class":36,"line":37},[34,156505,156174],{"class":59},[34,156507,447],{"class":112},[34,156509,58889],{"class":63},[34,156511,156512,156514,156516],{"class":36,"line":44},[34,156513,156174],{"class":59},[34,156515,9941],{"class":112},[34,156517,54888],{"class":63},[34,156519,156520,156522,156524],{"class":36,"line":50},[34,156521,156174],{"class":59},[34,156523,150639],{"class":112},[34,156525,48184],{"class":63},[34,156527,156528,156530,156532],{"class":36,"line":56},[34,156529,156174],{"class":59},[34,156531,137535],{"class":112},[34,156533,120423],{"class":63},[34,156535,156536,156538,156541],{"class":36,"line":107},[34,156537,156174],{"class":59},[34,156539,156540],{"class":112},"\u002F=",[34,156542,48184],{"class":63},[14,156544,156545],{},"等价关系：",[25,156547,156549],{"className":27,"code":156548,"language":29,"meta":22,"style":22},"num += 1\nnum = num + 1\n",[31,156550,156551,156559],{"__ignoreMap":22},[34,156552,156553,156555,156557],{"class":36,"line":37},[34,156554,156174],{"class":59},[34,156556,9941],{"class":112},[34,156558,56160],{"class":63},[34,156560,156561,156563,156565,156568,156570],{"class":36,"line":44},[34,156562,156174],{"class":59},[34,156564,447],{"class":112},[34,156566,156567],{"class":59}," num ",[34,156569,1088],{"class":112},[34,156571,56160],{"class":63},[14,156573,156574,156575,101405,156578,28850],{},"Python 没有 ",[31,156576,156577],{},"num++",[31,156579,156580],{},"num--",[584,156582,156584],{"id":156583},"_273-比较运算符","2.7.3 比较运算符",[14,156586,156587],{},"比较运算结果是布尔值。",[25,156589,156591],{"className":27,"code":156590,"language":29,"meta":22,"style":22},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[31,156592,156593,156607,156622,156636],{"__ignoreMap":22},[34,156594,156595,156597,156599,156601,156603,156605],{"class":36,"line":37},[34,156596,30878],{"class":63},[34,156598,617],{"class":59},[34,156600,1053],{"class":63},[34,156602,26687],{"class":112},[34,156604,2612],{"class":63},[34,156606,623],{"class":59},[34,156608,156609,156611,156613,156615,156618,156620],{"class":36,"line":44},[34,156610,30878],{"class":63},[34,156612,617],{"class":59},[34,156614,1053],{"class":63},[34,156616,156617],{"class":112}," >=",[34,156619,2502],{"class":63},[34,156621,623],{"class":59},[34,156623,156624,156626,156628,156630,156632,156634],{"class":36,"line":50},[34,156625,30878],{"class":63},[34,156627,617],{"class":59},[34,156629,1053],{"class":63},[34,156631,101946],{"class":112},[34,156633,2547],{"class":63},[34,156635,623],{"class":59},[34,156637,156638,156640,156642,156644,156647,156649],{"class":36,"line":56},[34,156639,30878],{"class":63},[34,156641,617],{"class":59},[34,156643,1053],{"class":63},[34,156645,156646],{"class":112}," !=",[34,156648,2547],{"class":63},[34,156650,623],{"class":59},[14,156652,156653,156654,156656,156657,28850],{},"注意：判断相等用 ",[31,156655,3413],{},"，赋值用 ",[31,156658,447],{},[25,156660,156662],{"className":27,"code":156661,"language":29,"meta":22,"style":22},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[31,156663,156664,156676],{"__ignoreMap":22},[34,156665,156666,156668,156670,156673],{"class":36,"line":37},[34,156667,146933],{"class":59},[34,156669,447],{"class":112},[34,156671,156672],{"class":63}," 18",[34,156674,156675],{"class":40},"       # 赋值\n",[34,156677,156678,156680,156682,156684],{"class":36,"line":44},[34,156679,146933],{"class":59},[34,156681,3413],{"class":112},[34,156683,156672],{"class":63},[34,156685,156686],{"class":40},"      # 判断是否相等\n",[584,156688,156690],{"id":156689},"_274-逻辑运算符","2.7.4 逻辑运算符",[748,156692,156693,156701],{},[751,156694,156695],{},[754,156696,156697,156699],{},[757,156698,156311],{},[757,156700,26334],{},[795,156702,156703,156712,156721],{},[754,156704,156705,156709],{},[800,156706,156707],{},[31,156708,30925],{},[800,156710,156711],{},"并且",[754,156713,156714,156718],{},[800,156715,156716],{},[31,156717,115477],{},[800,156719,156720],{},"或者",[754,156722,156723,156728],{},[800,156724,156725],{},[31,156726,156727],{},"not",[800,156729,156730],{},"取反",[25,156732,156734],{"className":27,"code":156733,"language":29,"meta":22,"style":22},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[31,156735,156736,156744,156753,156757,156772,156786],{"__ignoreMap":22},[34,156737,156738,156740,156742],{"class":36,"line":37},[34,156739,146933],{"class":59},[34,156741,447],{"class":112},[34,156743,88526],{"class":63},[34,156745,156746,156749,156751],{"class":36,"line":44},[34,156747,156748],{"class":59},"has_ticket ",[34,156750,447],{"class":112},[34,156752,153986],{"class":63},[34,156754,156755],{"class":36,"line":50},[34,156756,2864],{"emptyLinePlaceholder":540},[34,156758,156759,156761,156763,156765,156767,156769],{"class":36,"line":56},[34,156760,30878],{"class":63},[34,156762,156155],{"class":59},[34,156764,2174],{"class":112},[34,156766,156672],{"class":63},[34,156768,120816],{"class":112},[34,156770,156771],{"class":59}," has_ticket)\n",[34,156773,156774,156776,156778,156780,156782,156784],{"class":36,"line":107},[34,156775,30878],{"class":63},[34,156777,156155],{"class":59},[34,156779,1515],{"class":112},[34,156781,156672],{"class":63},[34,156783,114588],{"class":112},[34,156785,156771],{"class":59},[34,156787,156788,156790,156792,156794],{"class":36,"line":196},[34,156789,30878],{"class":63},[34,156791,617],{"class":59},[34,156793,156727],{"class":112},[34,156795,156771],{"class":59},[555,156797,156799],{"id":156798},"_28-字符串定义","2.8 字符串定义",[14,156801,156802],{},"三种常见写法：",[25,156804,156806],{"className":27,"code":156805,"language":29,"meta":22,"style":22},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[31,156807,156808,156818,156827,156837],{"__ignoreMap":22},[34,156809,156810,156813,156815],{"class":36,"line":37},[34,156811,156812],{"class":59},"name1 ",[34,156814,447],{"class":112},[34,156816,156817],{"class":187}," '小明'\n",[34,156819,156820,156823,156825],{"class":36,"line":44},[34,156821,156822],{"class":59},"name2 ",[34,156824,447],{"class":112},[34,156826,149740],{"class":187},[34,156828,156829,156832,156834],{"class":36,"line":50},[34,156830,156831],{"class":59},"text ",[34,156833,447],{"class":112},[34,156835,156836],{"class":187}," \"\"\"这是多行字符串\n",[34,156838,156839],{"class":36,"line":56},[34,156840,156841],{"class":187},"可以换行\"\"\"\n",[14,156843,156844],{},"字符串中包含引号：",[25,156846,156848],{"className":27,"code":156847,"language":29,"meta":22,"style":22},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[31,156849,156850,156860,156870],{"__ignoreMap":22},[34,156851,156852,156855,156857],{"class":36,"line":37},[34,156853,156854],{"class":59},"msg ",[34,156856,447],{"class":112},[34,156858,156859],{"class":187}," \"他说:'你好'\"\n",[34,156861,156862,156865,156867],{"class":36,"line":44},[34,156863,156864],{"class":59},"msg2 ",[34,156866,447],{"class":112},[34,156868,156869],{"class":187}," '他说:\"你好\"'\n",[34,156871,156872,156875,156877,156880,156883,156886,156888],{"class":36,"line":50},[34,156873,156874],{"class":59},"msg3 ",[34,156876,447],{"class":112},[34,156878,156879],{"class":187}," \"他说:",[34,156881,156882],{"class":63},"\\\"",[34,156884,156885],{"class":187},"你好",[34,156887,156882],{"class":63},[34,156889,25598],{"class":187},[14,156891,156892],{},"常见转义字符：",[748,156894,156895,156904],{},[751,156896,156897],{},[754,156898,156899,156902],{},[757,156900,156901],{},"写法",[757,156903,101087],{},[795,156905,156906,156916,156925,156935,156944],{},[754,156907,156908,156913],{},[800,156909,156910],{},[31,156911,156912],{},"\\n",[800,156914,156915],{},"换行",[754,156917,156918,156922],{},[800,156919,156920],{},[31,156921,1705],{},[800,156923,156924],{},"制表符",[754,156926,156927,156932],{},[800,156928,156929],{},[31,156930,156931],{},"\\\\",[800,156933,156934],{},"反斜杠",[754,156936,156937,156941],{},[800,156938,156939],{},[31,156940,156882],{},[800,156942,156943],{},"双引号",[754,156945,156946,156951],{},[800,156947,156948],{},[31,156949,156950],{},"\\'",[800,156952,156953],{},"单引号",[555,156955,156957],{"id":156956},"_29-字符串拼接","2.9 字符串拼接",[25,156959,156961],{"className":27,"code":156960,"language":29,"meta":22,"style":22},"name = \"小明\"\nprint(\"你好，\" + name)\n",[31,156962,156963,156971],{"__ignoreMap":22},[34,156964,156965,156967,156969],{"class":36,"line":37},[34,156966,146923],{"class":59},[34,156968,447],{"class":112},[34,156970,149740],{"class":187},[34,156972,156973,156975,156977,156980,156982],{"class":36,"line":44},[34,156974,30878],{"class":63},[34,156976,617],{"class":59},[34,156978,156979],{"class":187},"\"你好，\"",[34,156981,46027],{"class":112},[34,156983,156984],{"class":59}," name)\n",[14,156986,156987],{},"字符串只能和字符串拼接：",[25,156989,156991],{"className":27,"code":156990,"language":29,"meta":22,"style":22},"age = 18\nprint(\"年龄:\" + str(age))\n",[31,156992,156993,157001],{"__ignoreMap":22},[34,156994,156995,156997,156999],{"class":36,"line":37},[34,156996,146933],{"class":59},[34,156998,447],{"class":112},[34,157000,146938],{"class":63},[34,157002,157003,157005,157007,157009,157011,157013],{"class":36,"line":44},[34,157004,30878],{"class":63},[34,157006,617],{"class":59},[34,157008,146904],{"class":187},[34,157010,46027],{"class":112},[34,157012,74380],{"class":63},[34,157014,157015],{"class":59},"(age))\n",[14,157017,157018],{},"更推荐使用格式化字符串。",[555,157020,157022],{"id":157021},"_210-字符串格式化","2.10 字符串格式化",[584,157024,157026],{"id":157025},"_2101-百分号格式化","2.10.1 百分号格式化",[25,157028,157030],{"className":27,"code":157029,"language":29,"meta":22,"style":22},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[31,157031,157032,157040,157048,157057,157061],{"__ignoreMap":22},[34,157033,157034,157036,157038],{"class":36,"line":37},[34,157035,146923],{"class":59},[34,157037,447],{"class":112},[34,157039,149740],{"class":187},[34,157041,157042,157044,157046],{"class":36,"line":44},[34,157043,146933],{"class":59},[34,157045,447],{"class":112},[34,157047,146938],{"class":63},[34,157049,157050,157052,157054],{"class":36,"line":50},[34,157051,155745],{"class":59},[34,157053,447],{"class":112},[34,157055,157056],{"class":63}," 95.5\n",[34,157058,157059],{"class":36,"line":56},[34,157060,2864],{"emptyLinePlaceholder":540},[34,157062,157063,157065,157067,157070,157073,157076,157079,157082,157085,157087,157089],{"class":36,"line":107},[34,157064,30878],{"class":63},[34,157066,617],{"class":59},[34,157068,157069],{"class":187},"\"姓名:",[34,157071,157072],{"class":63},"%s",[34,157074,157075],{"class":187}," 年龄:",[34,157077,157078],{"class":63},"%d",[34,157080,157081],{"class":187}," 分数:",[34,157083,157084],{"class":63},"%.1f",[34,157086,860],{"class":187},[34,157088,156468],{"class":112},[34,157090,157091],{"class":59}," (name, age, score))\n",[14,157093,157094],{},"常用占位符：",[748,157096,157097,157106],{},[751,157098,157099],{},[754,157100,157101,157104],{},[757,157102,157103],{},"占位符",[757,157105,26334],{},[795,157107,157108,157116,157124],{},[754,157109,157110,157114],{},[800,157111,157112],{},[31,157113,157072],{},[800,157115,155611],{},[754,157117,157118,157122],{},[800,157119,157120],{},[31,157121,157078],{},[800,157123,155589],{},[754,157125,157126,157131],{},[800,157127,157128],{},[31,157129,157130],{},"%f",[800,157132,155600],{},[14,157134,157135],{},"精度控制：",[25,157137,157139],{"className":27,"code":157138,"language":29,"meta":22,"style":22},"price = 12.3456\nprint(\"%.2f\" % price)\n",[31,157140,157141,157150],{"__ignoreMap":22},[34,157142,157143,157145,157147],{"class":36,"line":37},[34,157144,147068],{"class":59},[34,157146,447],{"class":112},[34,157148,157149],{"class":63}," 12.3456\n",[34,157151,157152,157154,157156,157158,157161,157163,157165],{"class":36,"line":44},[34,157153,30878],{"class":63},[34,157155,617],{"class":59},[34,157157,860],{"class":187},[34,157159,157160],{"class":63},"%.2f",[34,157162,860],{"class":187},[34,157164,156468],{"class":112},[34,157166,157167],{"class":59}," price)\n",[584,157169,157171],{"id":157170},"_2102-format方法","2.10.2 format方法",[25,157173,157175],{"className":27,"code":157174,"language":29,"meta":22,"style":22},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[31,157176,157177,157185,157193,157197,157216,157236],{"__ignoreMap":22},[34,157178,157179,157181,157183],{"class":36,"line":37},[34,157180,146923],{"class":59},[34,157182,447],{"class":112},[34,157184,149740],{"class":187},[34,157186,157187,157189,157191],{"class":36,"line":44},[34,157188,146933],{"class":59},[34,157190,447],{"class":112},[34,157192,146938],{"class":63},[34,157194,157195],{"class":36,"line":50},[34,157196,2864],{"emptyLinePlaceholder":540},[34,157198,157199,157201,157203,157205,157207,157209,157211,157213],{"class":36,"line":56},[34,157200,30878],{"class":63},[34,157202,617],{"class":59},[34,157204,157069],{"class":187},[34,157206,32922],{"class":63},[34,157208,157075],{"class":187},[34,157210,32922],{"class":63},[34,157212,860],{"class":187},[34,157214,157215],{"class":59},".format(name, age))\n",[34,157217,157218,157220,157222,157224,157227,157229,157232,157234],{"class":36,"line":107},[34,157219,30878],{"class":63},[34,157221,617],{"class":59},[34,157223,157069],{"class":187},[34,157225,157226],{"class":63},"{0}",[34,157228,157075],{"class":187},[34,157230,157231],{"class":63},"{1}",[34,157233,860],{"class":187},[34,157235,157215],{"class":59},[34,157237,157238,157240,157242,157244,157247,157249,157252,157254,157257,157259,157261,157264,157266,157268],{"class":36,"line":196},[34,157239,30878],{"class":63},[34,157241,617],{"class":59},[34,157243,157069],{"class":187},[34,157245,157246],{"class":63},"{name}",[34,157248,157075],{"class":187},[34,157250,157251],{"class":63},"{age}",[34,157253,860],{"class":187},[34,157255,157256],{"class":59},".format(",[34,157258,80271],{"class":5680},[34,157260,447],{"class":112},[34,157262,157263],{"class":59},"name, ",[34,157265,70682],{"class":5680},[34,157267,447],{"class":112},[34,157269,157270],{"class":59},"age))\n",[584,157272,157274],{"id":157273},"_2103-f-string","2.10.3 f-string",[14,157276,157277],{},"推荐写法：",[25,157279,157281],{"className":27,"code":157280,"language":29,"meta":22,"style":22},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[31,157282,157283,157291,157299,157307,157311],{"__ignoreMap":22},[34,157284,157285,157287,157289],{"class":36,"line":37},[34,157286,146923],{"class":59},[34,157288,447],{"class":112},[34,157290,149740],{"class":187},[34,157292,157293,157295,157297],{"class":36,"line":44},[34,157294,146933],{"class":59},[34,157296,447],{"class":112},[34,157298,146938],{"class":63},[34,157300,157301,157303,157305],{"class":36,"line":50},[34,157302,155745],{"class":59},[34,157304,447],{"class":112},[34,157306,157056],{"class":63},[34,157308,157309],{"class":36,"line":56},[34,157310,2864],{"emptyLinePlaceholder":540},[34,157312,157313,157315,157317,157319,157321,157323,157325,157327,157329,157331,157333,157335,157337,157339,157342,157345,157347,157349],{"class":36,"line":107},[34,157314,30878],{"class":63},[34,157316,617],{"class":59},[34,157318,667],{"class":112},[34,157320,157069],{"class":187},[34,157322,1501],{"class":63},[34,157324,80271],{"class":59},[34,157326,1550],{"class":63},[34,157328,157075],{"class":187},[34,157330,1501],{"class":63},[34,157332,70682],{"class":59},[34,157334,1550],{"class":63},[34,157336,157081],{"class":187},[34,157338,1501],{"class":63},[34,157340,157341],{"class":59},"score",[34,157343,157344],{"class":112},":.1f",[34,157346,1550],{"class":63},[34,157348,860],{"class":187},[34,157350,623],{"class":59},[14,157352,157353],{},"表达式也可以放进去：",[25,157355,157357],{"className":27,"code":157356,"language":29,"meta":22,"style":22},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[31,157358,157359,157367,157375],{"__ignoreMap":22},[34,157360,157361,157363,157365],{"class":36,"line":37},[34,157362,147068],{"class":59},[34,157364,447],{"class":112},[34,157366,147073],{"class":63},[34,157368,157369,157371,157373],{"class":36,"line":44},[34,157370,147078],{"class":59},[34,157372,447],{"class":112},[34,157374,54888],{"class":63},[34,157376,157377,157379,157381,157383,157386,157388,157390,157392,157395,157397,157400],{"class":36,"line":50},[34,157378,30878],{"class":63},[34,157380,617],{"class":59},[34,157382,667],{"class":112},[34,157384,157385],{"class":187},"\"总价:",[34,157387,1501],{"class":63},[34,157389,147068],{"class":59},[34,157391,1062],{"class":112},[34,157393,157394],{"class":59}," count",[34,157396,1550],{"class":63},[34,157398,157399],{"class":187},"元\"",[34,157401,623],{"class":59},[555,157403,157405],{"id":157404},"_211-input输入","2.11 input输入",[14,157407,157408,157411],{},[31,157409,157410],{},"input()"," 会暂停程序，等待用户输入。",[25,157413,157415],{"className":27,"code":157414,"language":29,"meta":22,"style":22},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[31,157416,157417,157431],{"__ignoreMap":22},[34,157418,157419,157421,157423,157425,157427,157429],{"class":36,"line":37},[34,157420,146923],{"class":59},[34,157422,447],{"class":112},[34,157424,61066],{"class":63},[34,157426,617],{"class":59},[34,157428,152766],{"class":187},[34,157430,623],{"class":59},[34,157432,157433,157435,157437,157439,157442,157444,157446,157448,157450],{"class":36,"line":44},[34,157434,30878],{"class":63},[34,157436,617],{"class":59},[34,157438,667],{"class":112},[34,157440,157441],{"class":187},"\"你好，",[34,157443,1501],{"class":63},[34,157445,80271],{"class":59},[34,157447,1550],{"class":63},[34,157449,860],{"class":187},[34,157451,623],{"class":59},[14,157453,157454],{},"输入整数：",[25,157456,157458],{"className":27,"code":157457,"language":29,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[31,157459,157460,157478],{"__ignoreMap":22},[34,157461,157462,157464,157466,157468,157470,157472,157474,157476],{"class":36,"line":37},[34,157463,146933],{"class":59},[34,157465,447],{"class":112},[34,157467,2846],{"class":63},[34,157469,617],{"class":59},[34,157471,54282],{"class":63},[34,157473,617],{"class":59},[34,157475,152781],{"class":187},[34,157477,30960],{"class":59},[34,157479,157480,157482,157484,157486,157489,157491,157493,157495,157498,157500],{"class":36,"line":44},[34,157481,30878],{"class":63},[34,157483,617],{"class":59},[34,157485,667],{"class":112},[34,157487,157488],{"class":187},"\"明年你",[34,157490,1501],{"class":63},[34,157492,146933],{"class":59},[34,157494,1088],{"class":112},[34,157496,157497],{"class":63}," 1}",[34,157499,149791],{"class":187},[34,157501,623],{"class":59},[14,157503,157504],{},"输入小数：",[25,157506,157508],{"className":27,"code":157507,"language":29,"meta":22,"style":22},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[31,157509,157510,157529],{"__ignoreMap":22},[34,157511,157512,157514,157516,157518,157520,157522,157524,157527],{"class":36,"line":37},[34,157513,155718],{"class":59},[34,157515,447],{"class":112},[34,157517,110184],{"class":63},[34,157519,617],{"class":59},[34,157521,54282],{"class":63},[34,157523,617],{"class":59},[34,157525,157526],{"class":187},"\"请输入身高:\"",[34,157528,30960],{"class":59},[34,157530,157531,157533,157535,157537,157540,157542,157544,157547,157549,157552],{"class":36,"line":44},[34,157532,30878],{"class":63},[34,157534,617],{"class":59},[34,157536,667],{"class":112},[34,157538,157539],{"class":187},"\"身高:",[34,157541,1501],{"class":63},[34,157543,25446],{"class":59},[34,157545,157546],{"class":112},":.2f",[34,157548,1550],{"class":63},[34,157550,157551],{"class":187},"米\"",[34,157553,623],{"class":59},[555,157555,157557],{"id":157556},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157559,123679],{},[567,157561,157562,157565,157568,157571],{},[570,157563,157564],{},"输入商品单价。",[570,157566,157567],{},"输入购买数量。",[570,157569,157570],{},"输入折扣，例如 0.8 表示八折。",[570,157572,157573],{},"输出最终金额，保留两位小数。",[14,157575,10499],{},[25,157577,157579],{"className":27,"code":157578,"language":29,"meta":22,"style":22},"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",[31,157580,157581,157600,157619,157639,157643,157663,157667,157690,157711,157733],{"__ignoreMap":22},[34,157582,157583,157585,157587,157589,157591,157593,157595,157598],{"class":36,"line":37},[34,157584,147068],{"class":59},[34,157586,447],{"class":112},[34,157588,110184],{"class":63},[34,157590,617],{"class":59},[34,157592,54282],{"class":63},[34,157594,617],{"class":59},[34,157596,157597],{"class":187},"\"请输入商品单价:\"",[34,157599,30960],{"class":59},[34,157601,157602,157604,157606,157608,157610,157612,157614,157617],{"class":36,"line":44},[34,157603,147078],{"class":59},[34,157605,447],{"class":112},[34,157607,2846],{"class":63},[34,157609,617],{"class":59},[34,157611,54282],{"class":63},[34,157613,617],{"class":59},[34,157615,157616],{"class":187},"\"请输入购买数量:\"",[34,157618,30960],{"class":59},[34,157620,157621,157624,157626,157628,157630,157632,157634,157637],{"class":36,"line":50},[34,157622,157623],{"class":59},"discount ",[34,157625,447],{"class":112},[34,157627,110184],{"class":63},[34,157629,617],{"class":59},[34,157631,54282],{"class":63},[34,157633,617],{"class":59},[34,157635,157636],{"class":187},"\"请输入折扣:\"",[34,157638,30960],{"class":59},[34,157640,157641],{"class":36,"line":56},[34,157642,2864],{"emptyLinePlaceholder":540},[34,157644,157645,157648,157650,157653,157655,157658,157660],{"class":36,"line":107},[34,157646,157647],{"class":59},"total ",[34,157649,447],{"class":112},[34,157651,157652],{"class":59}," price ",[34,157654,1062],{"class":112},[34,157656,157657],{"class":59}," count ",[34,157659,1062],{"class":112},[34,157661,157662],{"class":59}," discount\n",[34,157664,157665],{"class":36,"line":196},[34,157666,2864],{"emptyLinePlaceholder":540},[34,157668,157669,157671,157673,157675,157678,157680,157682,157684,157686,157688],{"class":36,"line":202},[34,157670,30878],{"class":63},[34,157672,617],{"class":59},[34,157674,667],{"class":112},[34,157676,157677],{"class":187},"\"商品单价:",[34,157679,1501],{"class":63},[34,157681,80276],{"class":59},[34,157683,157546],{"class":112},[34,157685,1550],{"class":63},[34,157687,860],{"class":187},[34,157689,623],{"class":59},[34,157691,157692,157694,157696,157698,157701,157703,157705,157707,157709],{"class":36,"line":207},[34,157693,30878],{"class":63},[34,157695,617],{"class":59},[34,157697,667],{"class":112},[34,157699,157700],{"class":187},"\"购买数量:",[34,157702,1501],{"class":63},[34,157704,84895],{"class":59},[34,157706,1550],{"class":63},[34,157708,860],{"class":187},[34,157710,623],{"class":59},[34,157712,157713,157715,157717,157719,157722,157724,157727,157729,157731],{"class":36,"line":222},[34,157714,30878],{"class":63},[34,157716,617],{"class":59},[34,157718,667],{"class":112},[34,157720,157721],{"class":187},"\"折扣:",[34,157723,1501],{"class":63},[34,157725,157726],{"class":59},"discount",[34,157728,1550],{"class":63},[34,157730,860],{"class":187},[34,157732,623],{"class":59},[34,157734,157735,157737,157739,157741,157744,157746,157749,157751,157753,157755],{"class":36,"line":227},[34,157736,30878],{"class":63},[34,157738,617],{"class":59},[34,157740,667],{"class":112},[34,157742,157743],{"class":187},"\"应付金额:",[34,157745,1501],{"class":63},[34,157747,157748],{"class":59},"total",[34,157750,157546],{"class":112},[34,157752,1550],{"class":63},[34,157754,157399],{"class":187},[34,157756,623],{"class":59},[555,157758,157760],{"id":157759},"_213-易错点","2.13 易错点",[567,157762,157763,157768,157774,157782,157785],{},[570,157764,157765,157767],{},[31,157766,157410],{}," 的结果是字符串，做运算前要转换。",[570,157769,157770,157771,28850],{},"字符串拼接时，数字要先 ",[31,157772,157773],{},"str()",[570,157775,157776,157778,157779,157781],{},[31,157777,447],{}," 是赋值，",[31,157780,3413],{}," 是比较。",[570,157783,157784],{},"Python 没有自增自减运算符。",[570,157786,157787],{},"浮点数计算可能有精度误差：",[25,157789,157791],{"className":27,"code":157790,"language":29,"meta":22,"style":22},"print(0.1 + 0.2)\n",[31,157792,157793],{"__ignoreMap":22},[34,157794,157795,157797,157799,157801,157803,157806],{"class":36,"line":37},[34,157796,30878],{"class":63},[34,157798,617],{"class":59},[34,157800,86671],{"class":63},[34,157802,46027],{"class":112},[34,157804,157805],{"class":63}," 0.2",[34,157807,623],{"class":59},[14,157809,157810,157811,157814],{},"金额计算如果要求严格，可以后续学习 ",[31,157812,157813],{},"decimal"," 模块。",[555,157816,157818],{"id":157817},"_214-本章练习","2.14 本章练习",[567,157820,157821,157824,157827,157830,157833],{},[570,157822,157823],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[570,157825,157826],{},"输入圆的半径，计算面积，保留两位小数。",[570,157828,157829],{},"输入工资和奖金，计算总收入。",[570,157831,157832],{},"输入摄氏温度，转换为华氏温度。",[570,157834,157835],{},"写一个 BMI 计算程序：",[25,157837,157840],{"className":157838,"code":157839,"language":5651,"meta":22},[5649],"BMI = 体重kg \u002F 身高m ** 2\n",[31,157841,157839],{"__ignoreMap":22},[532,157843,157844],{},"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":22,"searchDepth":44,"depth":44,"links":157846},[157847,157848,157849,157850,157851,157852,157853,157859,157860,157861,157866,157867,157868,157869],{"id":155408,"depth":44,"text":155409},{"id":155517,"depth":44,"text":155518},{"id":155688,"depth":44,"text":155689},{"id":155765,"depth":44,"text":155766},{"id":51192,"depth":44,"text":51193},{"id":156071,"depth":44,"text":156072},{"id":156297,"depth":44,"text":156298,"children":157854},[157855,157856,157857,157858],{"id":156301,"depth":50,"text":156302},{"id":156495,"depth":50,"text":156496},{"id":156583,"depth":50,"text":156584},{"id":156689,"depth":50,"text":156690},{"id":156798,"depth":44,"text":156799},{"id":156956,"depth":44,"text":156957},{"id":157021,"depth":44,"text":157022,"children":157862},[157863,157864,157865],{"id":157025,"depth":50,"text":157026},{"id":157170,"depth":50,"text":157171},{"id":157273,"depth":50,"text":157274},{"id":157404,"depth":44,"text":157405},{"id":157556,"depth":44,"text":157557},{"id":157759,"depth":44,"text":157760},{"id":157817,"depth":44,"text":157818},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155400,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157876,"title":157877,"body":157878,"description":537,"extension":538,"meta":159514,"navigation":540,"path":159515,"seo":159516,"stem":159517,"__hash__":159518},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157879,"toc":159495},[157880,157883,157887,157890,157905,157908,157936,157940,157990,157992,158008,158011,158037,158040,158044,158111,158114,158130,158134,158137,158255,158258,158265,158314,158320,158324,158327,158440,158443,158447,158451,158454,158504,158508,158511,158561,158565,158568,158606,158610,158613,158659,158662,158697,158701,158706,158709,158755,158757,158824,158828,158834,158945,158954,158958,158960,158971,158973,159139,159143,159145,159159,159161,159375,159379,159398,159415,159418,159464,159468,159492],[10,157881,157877],{"id":157882},"_3-判断语句",[555,157884,157886],{"id":157885},"_31-布尔值","3.1 布尔值",[14,157888,157889],{},"判断语句依赖布尔值：",[25,157891,157893],{"className":27,"code":157892,"language":29,"meta":22,"style":22},"True\nFalse\n",[31,157894,157895,157900],{"__ignoreMap":22},[34,157896,157897],{"class":36,"line":37},[34,157898,157899],{"class":63},"True\n",[34,157901,157902],{"class":36,"line":44},[34,157903,157904],{"class":63},"False\n",[14,157906,157907],{},"比较表达式会产生布尔值：",[25,157909,157911],{"className":27,"code":157910,"language":29,"meta":22,"style":22},"age = 18\nprint(age >= 18)  # True\n",[31,157912,157913,157921],{"__ignoreMap":22},[34,157914,157915,157917,157919],{"class":36,"line":37},[34,157916,146933],{"class":59},[34,157918,447],{"class":112},[34,157920,146938],{"class":63},[34,157922,157923,157925,157927,157929,157931,157933],{"class":36,"line":44},[34,157924,30878],{"class":63},[34,157926,156155],{"class":59},[34,157928,2174],{"class":112},[34,157930,156672],{"class":63},[34,157932,46269],{"class":59},[34,157934,157935],{"class":40},"# True\n",[555,157937,157939],{"id":157938},"_32-if基础语法","3.2 if基础语法",[25,157941,157943],{"className":27,"code":157942,"language":29,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[31,157944,157945,157963,157967,157979],{"__ignoreMap":22},[34,157946,157947,157949,157951,157953,157955,157957,157959,157961],{"class":36,"line":37},[34,157948,146933],{"class":59},[34,157950,447],{"class":112},[34,157952,2846],{"class":63},[34,157954,617],{"class":59},[34,157956,54282],{"class":63},[34,157958,617],{"class":59},[34,157960,152781],{"class":187},[34,157962,30960],{"class":59},[34,157964,157965],{"class":36,"line":44},[34,157966,2864],{"emptyLinePlaceholder":540},[34,157968,157969,157971,157973,157975,157977],{"class":36,"line":50},[34,157970,2002],{"class":112},[34,157972,16171],{"class":59},[34,157974,2174],{"class":112},[34,157976,156672],{"class":63},[34,157978,4203],{"class":59},[34,157980,157981,157983,157985,157988],{"class":36,"line":56},[34,157982,31762],{"class":63},[34,157984,617],{"class":59},[34,157986,157987],{"class":187},"\"可以进入网吧\"",[34,157989,623],{"class":59},[14,157991,9489],{},[567,157993,157994,157999,158002,158005],{},[570,157995,157996,157998],{},[31,157997,2002],{}," 后面是条件表达式。",[570,158000,158001],{},"条件后面必须写冒号。",[570,158003,158004],{},"条件成立时执行缩进代码块。",[570,158006,158007],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,158009,158010],{},"错误示例：",[25,158012,158014],{"className":27,"code":158013,"language":29,"meta":22,"style":22},"if age >= 18\n    print(\"可以进入\")\n",[31,158015,158016,158026],{"__ignoreMap":22},[34,158017,158018,158020,158022,158024],{"class":36,"line":37},[34,158019,2002],{"class":112},[34,158021,16171],{"class":59},[34,158023,2174],{"class":112},[34,158025,146938],{"class":63},[34,158027,158028,158030,158032,158035],{"class":36,"line":44},[34,158029,31762],{"class":63},[34,158031,617],{"class":59},[34,158033,158034],{"class":187},"\"可以进入\"",[34,158036,623],{"class":59},[14,158038,158039],{},"缺少冒号。",[555,158041,158043],{"id":158042},"_33-if-else","3.3 if else",[25,158045,158047],{"className":27,"code":158046,"language":29,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[31,158048,158049,158067,158071,158083,158094,158100],{"__ignoreMap":22},[34,158050,158051,158053,158055,158057,158059,158061,158063,158065],{"class":36,"line":37},[34,158052,146933],{"class":59},[34,158054,447],{"class":112},[34,158056,2846],{"class":63},[34,158058,617],{"class":59},[34,158060,54282],{"class":63},[34,158062,617],{"class":59},[34,158064,152781],{"class":187},[34,158066,30960],{"class":59},[34,158068,158069],{"class":36,"line":44},[34,158070,2864],{"emptyLinePlaceholder":540},[34,158072,158073,158075,158077,158079,158081],{"class":36,"line":50},[34,158074,2002],{"class":112},[34,158076,16171],{"class":59},[34,158078,2174],{"class":112},[34,158080,156672],{"class":63},[34,158082,4203],{"class":59},[34,158084,158085,158087,158089,158092],{"class":36,"line":56},[34,158086,31762],{"class":63},[34,158088,617],{"class":59},[34,158090,158091],{"class":187},"\"成年人\"",[34,158093,623],{"class":59},[34,158095,158096,158098],{"class":36,"line":107},[34,158097,2165],{"class":112},[34,158099,4203],{"class":59},[34,158101,158102,158104,158106,158109],{"class":36,"line":196},[34,158103,31762],{"class":63},[34,158105,617],{"class":59},[34,158107,158108],{"class":187},"\"未成年人\"",[34,158110,623],{"class":59},[14,158112,158113],{},"执行逻辑：",[567,158115,158116,158122,158127],{},[570,158117,158118,158119,158121],{},"条件成立，执行 ",[31,158120,2002],{}," 代码块。",[570,158123,158124,158125,158121],{},"条件不成立，执行 ",[31,158126,2165],{},[570,158128,158129],{},"两个代码块只会执行其中一个。",[555,158131,158133],{"id":158132},"_34-if-elif-else","3.4 if elif else",[14,158135,158136],{},"多条件判断：",[25,158138,158140],{"className":27,"code":158139,"language":29,"meta":22,"style":22},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[31,158141,158142,158160,158164,158178,158189,158203,158214,158227,158238,158244],{"__ignoreMap":22},[34,158143,158144,158146,158148,158150,158152,158154,158156,158158],{"class":36,"line":37},[34,158145,155745],{"class":59},[34,158147,447],{"class":112},[34,158149,2846],{"class":63},[34,158151,617],{"class":59},[34,158153,54282],{"class":63},[34,158155,617],{"class":59},[34,158157,152796],{"class":187},[34,158159,30960],{"class":59},[34,158161,158162],{"class":36,"line":44},[34,158163,2864],{"emptyLinePlaceholder":540},[34,158165,158166,158168,158171,158173,158176],{"class":36,"line":50},[34,158167,2002],{"class":112},[34,158169,158170],{"class":59}," score ",[34,158172,2174],{"class":112},[34,158174,158175],{"class":63}," 90",[34,158177,4203],{"class":59},[34,158179,158180,158182,158184,158187],{"class":36,"line":56},[34,158181,31762],{"class":63},[34,158183,617],{"class":59},[34,158185,158186],{"class":187},"\"优秀\"",[34,158188,623],{"class":59},[34,158190,158191,158194,158196,158198,158201],{"class":36,"line":107},[34,158192,158193],{"class":112},"elif",[34,158195,158170],{"class":59},[34,158197,2174],{"class":112},[34,158199,158200],{"class":63}," 80",[34,158202,4203],{"class":59},[34,158204,158205,158207,158209,158212],{"class":36,"line":196},[34,158206,31762],{"class":63},[34,158208,617],{"class":59},[34,158210,158211],{"class":187},"\"良好\"",[34,158213,623],{"class":59},[34,158215,158216,158218,158220,158222,158225],{"class":36,"line":202},[34,158217,158193],{"class":112},[34,158219,158170],{"class":59},[34,158221,2174],{"class":112},[34,158223,158224],{"class":63}," 60",[34,158226,4203],{"class":59},[34,158228,158229,158231,158233,158236],{"class":36,"line":207},[34,158230,31762],{"class":63},[34,158232,617],{"class":59},[34,158234,158235],{"class":187},"\"及格\"",[34,158237,623],{"class":59},[34,158239,158240,158242],{"class":36,"line":222},[34,158241,2165],{"class":112},[34,158243,4203],{"class":59},[34,158245,158246,158248,158250,158253],{"class":36,"line":227},[34,158247,31762],{"class":63},[34,158249,617],{"class":59},[34,158251,158252],{"class":187},"\"不及格\"",[34,158254,623],{"class":59},[14,158256,158257],{},"注意判断顺序很重要。",[14,158259,158260,158261,158264],{},"如果把 ",[31,158262,158263],{},"score >= 60"," 放在最前面：",[25,158266,158268],{"className":27,"code":158267,"language":29,"meta":22,"style":22},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[31,158269,158270,158282,158292,158304],{"__ignoreMap":22},[34,158271,158272,158274,158276,158278,158280],{"class":36,"line":37},[34,158273,2002],{"class":112},[34,158275,158170],{"class":59},[34,158277,2174],{"class":112},[34,158279,158224],{"class":63},[34,158281,4203],{"class":59},[34,158283,158284,158286,158288,158290],{"class":36,"line":44},[34,158285,31762],{"class":63},[34,158287,617],{"class":59},[34,158289,158235],{"class":187},[34,158291,623],{"class":59},[34,158293,158294,158296,158298,158300,158302],{"class":36,"line":50},[34,158295,158193],{"class":112},[34,158297,158170],{"class":59},[34,158299,2174],{"class":112},[34,158301,158175],{"class":63},[34,158303,4203],{"class":59},[34,158305,158306,158308,158310,158312],{"class":36,"line":56},[34,158307,31762],{"class":63},[34,158309,617],{"class":59},[34,158311,158186],{"class":187},[34,158313,623],{"class":59},[14,158315,158316,158317,158319],{},"成绩 95 会先满足 ",[31,158318,158263],{},"，后面的优秀分支就不会执行。",[555,158321,158323],{"id":158322},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158325,158326],{},"嵌套判断就是在一个判断内部再写判断。",[25,158328,158330],{"className":27,"code":158329,"language":29,"meta":22,"style":22},"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",[31,158331,158332,158350,158365,158369,158381,158395,158405,158412,158423,158429],{"__ignoreMap":22},[34,158333,158334,158336,158338,158340,158342,158344,158346,158348],{"class":36,"line":37},[34,158335,146933],{"class":59},[34,158337,447],{"class":112},[34,158339,2846],{"class":63},[34,158341,617],{"class":59},[34,158343,54282],{"class":63},[34,158345,617],{"class":59},[34,158347,152781],{"class":187},[34,158349,30960],{"class":59},[34,158351,158352,158354,158356,158358,158360,158363],{"class":36,"line":44},[34,158353,156748],{"class":59},[34,158355,447],{"class":112},[34,158357,61066],{"class":63},[34,158359,617],{"class":59},[34,158361,158362],{"class":187},"\"是否有票(y\u002Fn):\"",[34,158364,623],{"class":59},[34,158366,158367],{"class":36,"line":50},[34,158368,2864],{"emptyLinePlaceholder":540},[34,158370,158371,158373,158375,158377,158379],{"class":36,"line":56},[34,158372,2002],{"class":112},[34,158374,16171],{"class":59},[34,158376,2174],{"class":112},[34,158378,156672],{"class":63},[34,158380,4203],{"class":59},[34,158382,158383,158385,158388,158390,158393],{"class":36,"line":107},[34,158384,3565],{"class":112},[34,158386,158387],{"class":59}," has_ticket ",[34,158389,3413],{"class":112},[34,158391,158392],{"class":187}," \"y\"",[34,158394,4203],{"class":59},[34,158396,158397,158399,158401,158403],{"class":36,"line":196},[34,158398,32914],{"class":63},[34,158400,617],{"class":59},[34,158402,158034],{"class":187},[34,158404,623],{"class":59},[34,158406,158407,158410],{"class":36,"line":202},[34,158408,158409],{"class":112},"    else",[34,158411,4203],{"class":59},[34,158413,158414,158416,158418,158421],{"class":36,"line":207},[34,158415,32914],{"class":63},[34,158417,617],{"class":59},[34,158419,158420],{"class":187},"\"请先买票\"",[34,158422,623],{"class":59},[34,158424,158425,158427],{"class":36,"line":222},[34,158426,2165],{"class":112},[34,158428,4203],{"class":59},[34,158430,158431,158433,158435,158438],{"class":36,"line":227},[34,158432,31762],{"class":63},[34,158434,617],{"class":59},[34,158436,158437],{"class":187},"\"未成年人禁止进入\"",[34,158439,623],{"class":59},[14,158441,158442],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[555,158444,158446],{"id":158445},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[584,158448,158450],{"id":158449},"_361-and","3.6.1 and",[14,158452,158453],{},"两个条件都成立才成立。",[25,158455,158457],{"className":27,"code":158456,"language":29,"meta":22,"style":22},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[31,158458,158459,158467,158475,158479,158494],{"__ignoreMap":22},[34,158460,158461,158463,158465],{"class":36,"line":37},[34,158462,146933],{"class":59},[34,158464,447],{"class":112},[34,158466,88526],{"class":63},[34,158468,158469,158471,158473],{"class":36,"line":44},[34,158470,156748],{"class":59},[34,158472,447],{"class":112},[34,158474,153986],{"class":63},[34,158476,158477],{"class":36,"line":50},[34,158478,2864],{"emptyLinePlaceholder":540},[34,158480,158481,158483,158485,158487,158489,158491],{"class":36,"line":56},[34,158482,2002],{"class":112},[34,158484,16171],{"class":59},[34,158486,2174],{"class":112},[34,158488,156672],{"class":63},[34,158490,120816],{"class":112},[34,158492,158493],{"class":59}," has_ticket:\n",[34,158495,158496,158498,158500,158502],{"class":36,"line":107},[34,158497,31762],{"class":63},[34,158499,617],{"class":59},[34,158501,158034],{"class":187},[34,158503,623],{"class":59},[584,158505,158507],{"id":158506},"_362-or","3.6.2 or",[14,158509,158510],{},"只要一个条件成立就成立。",[25,158512,158514],{"className":27,"code":158513,"language":29,"meta":22,"style":22},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[31,158515,158516,158525,158534,158538,158550],{"__ignoreMap":22},[34,158517,158518,158521,158523],{"class":36,"line":37},[34,158519,158520],{"class":59},"is_vip ",[34,158522,447],{"class":112},[34,158524,126194],{"class":63},[34,158526,158527,158530,158532],{"class":36,"line":44},[34,158528,158529],{"class":59},"coupon ",[34,158531,447],{"class":112},[34,158533,153986],{"class":63},[34,158535,158536],{"class":36,"line":50},[34,158537,2864],{"emptyLinePlaceholder":540},[34,158539,158540,158542,158545,158547],{"class":36,"line":56},[34,158541,2002],{"class":112},[34,158543,158544],{"class":59}," is_vip ",[34,158546,115477],{"class":112},[34,158548,158549],{"class":59}," coupon:\n",[34,158551,158552,158554,158556,158559],{"class":36,"line":107},[34,158553,31762],{"class":63},[34,158555,617],{"class":59},[34,158557,158558],{"class":187},"\"可以享受优惠\"",[34,158560,623],{"class":59},[584,158562,158564],{"id":158563},"_363-not","3.6.3 not",[14,158566,158567],{},"取反。",[25,158569,158571],{"className":27,"code":158570,"language":29,"meta":22,"style":22},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[31,158572,158573,158582,158586,158595],{"__ignoreMap":22},[34,158574,158575,158578,158580],{"class":36,"line":37},[34,158576,158577],{"class":59},"is_closed ",[34,158579,447],{"class":112},[34,158581,126194],{"class":63},[34,158583,158584],{"class":36,"line":44},[34,158585,2864],{"emptyLinePlaceholder":540},[34,158587,158588,158590,158592],{"class":36,"line":50},[34,158589,2002],{"class":112},[34,158591,39392],{"class":112},[34,158593,158594],{"class":59}," is_closed:\n",[34,158596,158597,158599,158601,158604],{"class":36,"line":56},[34,158598,31762],{"class":63},[34,158600,617],{"class":59},[34,158602,158603],{"class":187},"\"店铺营业中\"",[34,158605,623],{"class":59},[555,158607,158609],{"id":158608},"_37-链式比较","3.7 链式比较",[14,158611,158612],{},"Python 支持链式比较：",[25,158614,158616],{"className":27,"code":158615,"language":29,"meta":22,"style":22},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[31,158617,158618,158627,158631,158648],{"__ignoreMap":22},[34,158619,158620,158622,158624],{"class":36,"line":37},[34,158621,155745],{"class":59},[34,158623,447],{"class":112},[34,158625,158626],{"class":63}," 85\n",[34,158628,158629],{"class":36,"line":44},[34,158630,2864],{"emptyLinePlaceholder":540},[34,158632,158633,158635,158637,158640,158642,158644,158646],{"class":36,"line":50},[34,158634,2002],{"class":112},[34,158636,4557],{"class":63},[34,158638,158639],{"class":112}," \u003C=",[34,158641,158170],{"class":59},[34,158643,2059],{"class":112},[34,158645,6218],{"class":63},[34,158647,4203],{"class":59},[34,158649,158650,158652,158654,158657],{"class":36,"line":56},[34,158651,31762],{"class":63},[34,158653,617],{"class":59},[34,158655,158656],{"class":187},"\"成绩合法\"",[34,158658,623],{"class":59},[14,158660,158661],{},"等价于：",[25,158663,158665],{"className":27,"code":158664,"language":29,"meta":22,"style":22},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[31,158666,158667,158687],{"__ignoreMap":22},[34,158668,158669,158671,158673,158675,158677,158679,158681,158683,158685],{"class":36,"line":37},[34,158670,2002],{"class":112},[34,158672,158170],{"class":59},[34,158674,2174],{"class":112},[34,158676,4557],{"class":63},[34,158678,120816],{"class":112},[34,158680,158170],{"class":59},[34,158682,2059],{"class":112},[34,158684,6218],{"class":63},[34,158686,4203],{"class":59},[34,158688,158689,158691,158693,158695],{"class":36,"line":44},[34,158690,31762],{"class":63},[34,158692,617],{"class":59},[34,158694,158656],{"class":187},[34,158696,623],{"class":59},[555,158698,158700],{"id":158699},"_38-真值和假值","3.8 真值和假值",[14,158702,116854,158703,158705],{},[31,158704,2002],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158707,158708],{},"假值：",[25,158710,158712],{"className":27,"code":158711,"language":29,"meta":22,"style":22},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[31,158713,158714,158718,158723,158727,158731,158736,158740,158744,158749],{"__ignoreMap":22},[34,158715,158716],{"class":36,"line":37},[34,158717,157904],{"class":63},[34,158719,158720],{"class":36,"line":44},[34,158721,158722],{"class":63},"None\n",[34,158724,158725],{"class":36,"line":50},[34,158726,3549],{"class":63},[34,158728,158729],{"class":36,"line":56},[34,158730,32805],{"class":63},[34,158732,158733],{"class":36,"line":107},[34,158734,158735],{"class":187},"\"\"\n",[34,158737,158738],{"class":36,"line":196},[34,158739,32820],{"class":59},[34,158741,158742],{"class":36,"line":202},[34,158743,2440],{"class":59},[34,158745,158746],{"class":36,"line":207},[34,158747,158748],{"class":59},"{}\n",[34,158750,158751,158753],{"class":36,"line":222},[34,158752,155677],{"class":63},[34,158754,2440],{"class":59},[14,158756,15599],{},[25,158758,158760],{"className":27,"code":158759,"language":29,"meta":22,"style":22},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[31,158761,158762,158776,158780,158787,158807,158813],{"__ignoreMap":22},[34,158763,158764,158766,158768,158770,158772,158774],{"class":36,"line":37},[34,158765,146923],{"class":59},[34,158767,447],{"class":112},[34,158769,61066],{"class":63},[34,158771,617],{"class":59},[34,158773,152766],{"class":187},[34,158775,623],{"class":59},[34,158777,158778],{"class":36,"line":44},[34,158779,2864],{"emptyLinePlaceholder":540},[34,158781,158782,158784],{"class":36,"line":50},[34,158783,2002],{"class":112},[34,158785,158786],{"class":59}," name:\n",[34,158788,158789,158791,158793,158795,158797,158799,158801,158803,158805],{"class":36,"line":56},[34,158790,31762],{"class":63},[34,158792,617],{"class":59},[34,158794,667],{"class":112},[34,158796,157441],{"class":187},[34,158798,1501],{"class":63},[34,158800,80271],{"class":59},[34,158802,1550],{"class":63},[34,158804,860],{"class":187},[34,158806,623],{"class":59},[34,158808,158809,158811],{"class":36,"line":107},[34,158810,2165],{"class":112},[34,158812,4203],{"class":59},[34,158814,158815,158817,158819,158822],{"class":36,"line":196},[34,158816,31762],{"class":63},[34,158818,617],{"class":59},[34,158820,158821],{"class":187},"\"姓名不能为空\"",[34,158823,623],{"class":59},[555,158825,158827],{"id":158826},"_39-match语句","3.9 match语句",[14,158829,158830,158831,158833],{},"Python 3.10 开始支持 ",[31,158832,71726],{},"。它适合处理固定选项。",[25,158835,158837],{"className":27,"code":158836,"language":29,"meta":22,"style":22},"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",[31,158838,158839,158855,158859,158866,158876,158887,158896,158907,158916,158927,158934],{"__ignoreMap":22},[34,158840,158841,158844,158846,158848,158850,158853],{"class":36,"line":37},[34,158842,158843],{"class":59},"command ",[34,158845,447],{"class":112},[34,158847,61066],{"class":63},[34,158849,617],{"class":59},[34,158851,158852],{"class":187},"\"请输入命令:\"",[34,158854,623],{"class":59},[34,158856,158857],{"class":36,"line":44},[34,158858,2864],{"emptyLinePlaceholder":540},[34,158860,158861,158863],{"class":36,"line":50},[34,158862,71726],{"class":112},[34,158864,158865],{"class":59}," command:\n",[34,158867,158868,158871,158874],{"class":36,"line":56},[34,158869,158870],{"class":112},"    case",[34,158872,158873],{"class":187}," \"start\"",[34,158875,4203],{"class":59},[34,158877,158878,158880,158882,158885],{"class":36,"line":107},[34,158879,32914],{"class":63},[34,158881,617],{"class":59},[34,158883,158884],{"class":187},"\"启动\"",[34,158886,623],{"class":59},[34,158888,158889,158891,158894],{"class":36,"line":196},[34,158890,158870],{"class":112},[34,158892,158893],{"class":187}," \"stop\"",[34,158895,4203],{"class":59},[34,158897,158898,158900,158902,158905],{"class":36,"line":202},[34,158899,32914],{"class":63},[34,158901,617],{"class":59},[34,158903,158904],{"class":187},"\"停止\"",[34,158906,623],{"class":59},[34,158908,158909,158911,158914],{"class":36,"line":207},[34,158910,158870],{"class":112},[34,158912,158913],{"class":187}," \"restart\"",[34,158915,4203],{"class":59},[34,158917,158918,158920,158922,158925],{"class":36,"line":222},[34,158919,32914],{"class":63},[34,158921,617],{"class":59},[34,158923,158924],{"class":187},"\"重启\"",[34,158926,623],{"class":59},[34,158928,158929,158931],{"class":36,"line":227},[34,158930,158870],{"class":112},[34,158932,158933],{"class":59}," _:\n",[34,158935,158936,158938,158940,158943],{"class":36,"line":232},[34,158937,32914],{"class":63},[34,158939,617],{"class":59},[34,158941,158942],{"class":187},"\"未知命令\"",[34,158944,623],{"class":59},[14,158946,158947,158948,158950,158951,158953],{},"入门阶段掌握 ",[31,158949,155045],{}," 更重要，",[31,158952,71726],{}," 可以作为补充。",[555,158955,158957],{"id":158956},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158959,123679],{},[567,158961,158962,158965,158968],{},[570,158963,158964],{},"输入成绩。",[570,158966,158967],{},"判断成绩是否合法。",[570,158969,158970],{},"输出等级。",[14,158972,10499],{},[25,158974,158976],{"className":27,"code":158975,"language":29,"meta":22,"style":22},"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",[31,158977,158978,158996,159000,159018,159029,159041,159052,159064,159075,159088,159099,159111,159122,159128],{"__ignoreMap":22},[34,158979,158980,158982,158984,158986,158988,158990,158992,158994],{"class":36,"line":37},[34,158981,155745],{"class":59},[34,158983,447],{"class":112},[34,158985,110184],{"class":63},[34,158987,617],{"class":59},[34,158989,54282],{"class":63},[34,158991,617],{"class":59},[34,158993,152796],{"class":187},[34,158995,30960],{"class":59},[34,158997,158998],{"class":36,"line":44},[34,158999,2864],{"emptyLinePlaceholder":540},[34,159001,159002,159004,159006,159008,159010,159012,159014,159016],{"class":36,"line":50},[34,159003,2002],{"class":112},[34,159005,39392],{"class":112},[34,159007,4557],{"class":63},[34,159009,158639],{"class":112},[34,159011,158170],{"class":59},[34,159013,2059],{"class":112},[34,159015,6218],{"class":63},[34,159017,4203],{"class":59},[34,159019,159020,159022,159024,159027],{"class":36,"line":56},[34,159021,31762],{"class":63},[34,159023,617],{"class":59},[34,159025,159026],{"class":187},"\"成绩不合法\"",[34,159028,623],{"class":59},[34,159030,159031,159033,159035,159037,159039],{"class":36,"line":107},[34,159032,158193],{"class":112},[34,159034,158170],{"class":59},[34,159036,2174],{"class":112},[34,159038,158175],{"class":63},[34,159040,4203],{"class":59},[34,159042,159043,159045,159047,159050],{"class":36,"line":196},[34,159044,31762],{"class":63},[34,159046,617],{"class":59},[34,159048,159049],{"class":187},"\"等级:A\"",[34,159051,623],{"class":59},[34,159053,159054,159056,159058,159060,159062],{"class":36,"line":202},[34,159055,158193],{"class":112},[34,159057,158170],{"class":59},[34,159059,2174],{"class":112},[34,159061,158200],{"class":63},[34,159063,4203],{"class":59},[34,159065,159066,159068,159070,159073],{"class":36,"line":207},[34,159067,31762],{"class":63},[34,159069,617],{"class":59},[34,159071,159072],{"class":187},"\"等级:B\"",[34,159074,623],{"class":59},[34,159076,159077,159079,159081,159083,159086],{"class":36,"line":222},[34,159078,158193],{"class":112},[34,159080,158170],{"class":59},[34,159082,2174],{"class":112},[34,159084,159085],{"class":63}," 70",[34,159087,4203],{"class":59},[34,159089,159090,159092,159094,159097],{"class":36,"line":227},[34,159091,31762],{"class":63},[34,159093,617],{"class":59},[34,159095,159096],{"class":187},"\"等级:C\"",[34,159098,623],{"class":59},[34,159100,159101,159103,159105,159107,159109],{"class":36,"line":232},[34,159102,158193],{"class":112},[34,159104,158170],{"class":59},[34,159106,2174],{"class":112},[34,159108,158224],{"class":63},[34,159110,4203],{"class":59},[34,159112,159113,159115,159117,159120],{"class":36,"line":238},[34,159114,31762],{"class":63},[34,159116,617],{"class":59},[34,159118,159119],{"class":187},"\"等级:D\"",[34,159121,623],{"class":59},[34,159123,159124,159126],{"class":36,"line":244},[34,159125,2165],{"class":112},[34,159127,4203],{"class":59},[34,159129,159130,159132,159134,159137],{"class":36,"line":250},[34,159131,31762],{"class":63},[34,159133,617],{"class":59},[34,159135,159136],{"class":187},"\"等级:E\"",[34,159138,623],{"class":59},[555,159140,159142],{"id":159141},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159144,123679],{},[567,159146,159147,159150,159153,159156],{},[570,159148,159149],{},"输入消费金额。",[570,159151,159152],{},"输入会员等级，普通、银卡、金卡。",[570,159154,159155],{},"普通不打折，银卡 9 折，金卡 8 折。",[570,159157,159158],{},"满 500 再减 50。",[14,159160,10499],{},[25,159162,159164],{"className":27,"code":159163,"language":29,"meta":22,"style":22},"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",[31,159165,159166,159186,159202,159206,159214,159218,159232,159242,159255,159264,159277,159285,159291,159302,159306,159320,159324,159338,159348,159352],{"__ignoreMap":22},[34,159167,159168,159171,159173,159175,159177,159179,159181,159184],{"class":36,"line":37},[34,159169,159170],{"class":59},"amount ",[34,159172,447],{"class":112},[34,159174,110184],{"class":63},[34,159176,617],{"class":59},[34,159178,54282],{"class":63},[34,159180,617],{"class":59},[34,159182,159183],{"class":187},"\"请输入消费金额:\"",[34,159185,30960],{"class":59},[34,159187,159188,159191,159193,159195,159197,159200],{"class":36,"line":44},[34,159189,159190],{"class":59},"level ",[34,159192,447],{"class":112},[34,159194,61066],{"class":63},[34,159196,617],{"class":59},[34,159198,159199],{"class":187},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[34,159201,623],{"class":59},[34,159203,159204],{"class":36,"line":50},[34,159205,2864],{"emptyLinePlaceholder":540},[34,159207,159208,159210,159212],{"class":36,"line":56},[34,159209,157623],{"class":59},[34,159211,447],{"class":112},[34,159213,56160],{"class":63},[34,159215,159216],{"class":36,"line":107},[34,159217,2864],{"emptyLinePlaceholder":540},[34,159219,159220,159222,159225,159227,159230],{"class":36,"line":196},[34,159221,2002],{"class":112},[34,159223,159224],{"class":59}," level ",[34,159226,3413],{"class":112},[34,159228,159229],{"class":187}," \"银卡\"",[34,159231,4203],{"class":59},[34,159233,159234,159237,159239],{"class":36,"line":202},[34,159235,159236],{"class":59},"    discount ",[34,159238,447],{"class":112},[34,159240,159241],{"class":63}," 0.9\n",[34,159243,159244,159246,159248,159250,159253],{"class":36,"line":207},[34,159245,158193],{"class":112},[34,159247,159224],{"class":59},[34,159249,3413],{"class":112},[34,159251,159252],{"class":187}," \"金卡\"",[34,159254,4203],{"class":59},[34,159256,159257,159259,159261],{"class":36,"line":222},[34,159258,159236],{"class":59},[34,159260,447],{"class":112},[34,159262,159263],{"class":63}," 0.8\n",[34,159265,159266,159268,159270,159272,159275],{"class":36,"line":227},[34,159267,158193],{"class":112},[34,159269,159224],{"class":59},[34,159271,3413],{"class":112},[34,159273,159274],{"class":187}," \"普通\"",[34,159276,4203],{"class":59},[34,159278,159279,159281,159283],{"class":36,"line":232},[34,159280,159236],{"class":59},[34,159282,447],{"class":112},[34,159284,56160],{"class":63},[34,159286,159287,159289],{"class":36,"line":238},[34,159288,2165],{"class":112},[34,159290,4203],{"class":59},[34,159292,159293,159295,159297,159300],{"class":36,"line":244},[34,159294,31762],{"class":63},[34,159296,617],{"class":59},[34,159298,159299],{"class":187},"\"会员等级输入错误，按普通会员计算\"",[34,159301,623],{"class":59},[34,159303,159304],{"class":36,"line":250},[34,159305,2864],{"emptyLinePlaceholder":540},[34,159307,159308,159311,159313,159316,159318],{"class":36,"line":256},[34,159309,159310],{"class":59},"pay ",[34,159312,447],{"class":112},[34,159314,159315],{"class":59}," amount ",[34,159317,1062],{"class":112},[34,159319,157662],{"class":59},[34,159321,159322],{"class":36,"line":261},[34,159323,2864],{"emptyLinePlaceholder":540},[34,159325,159326,159328,159331,159333,159336],{"class":36,"line":267},[34,159327,2002],{"class":112},[34,159329,159330],{"class":59}," pay ",[34,159332,2174],{"class":112},[34,159334,159335],{"class":63}," 500",[34,159337,4203],{"class":59},[34,159339,159340,159343,159345],{"class":36,"line":2138},[34,159341,159342],{"class":59},"    pay ",[34,159344,150639],{"class":112},[34,159346,159347],{"class":63}," 50\n",[34,159349,159350],{"class":36,"line":2143},[34,159351,2864],{"emptyLinePlaceholder":540},[34,159353,159354,159356,159358,159360,159362,159364,159367,159369,159371,159373],{"class":36,"line":2157},[34,159355,30878],{"class":63},[34,159357,617],{"class":59},[34,159359,667],{"class":112},[34,159361,157743],{"class":187},[34,159363,1501],{"class":63},[34,159365,159366],{"class":59},"pay",[34,159368,157546],{"class":112},[34,159370,1550],{"class":63},[34,159372,157399],{"class":187},[34,159374,623],{"class":59},[555,159376,159378],{"id":159377},"_312-易错点","3.12 易错点",[567,159380,159381,159384,159387,159390,159395],{},[570,159382,159383],{},"冒号不能漏。",[570,159385,159386],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[570,159388,159389],{},"多分支判断要注意顺序。",[570,159391,159392,159393,28850],{},"判断相等用 ",[31,159394,3413],{},[570,159396,159397],{},"字符串比较区分大小写：",[25,159399,159401],{"className":27,"code":159400,"language":29,"meta":22,"style":22},"\"Y\" == \"y\"  # False\n",[31,159402,159403],{"__ignoreMap":22},[34,159404,159405,159408,159410,159412],{"class":36,"line":37},[34,159406,159407],{"class":187},"\"Y\"",[34,159409,101946],{"class":112},[34,159411,158392],{"class":187},[34,159413,159414],{"class":40},"  # False\n",[14,159416,159417],{},"可转换后再判断：",[25,159419,159421],{"className":27,"code":159420,"language":29,"meta":22,"style":22},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[31,159422,159423,159440,159453],{"__ignoreMap":22},[34,159424,159425,159428,159430,159432,159434,159437],{"class":36,"line":37},[34,159426,159427],{"class":59},"answer ",[34,159429,447],{"class":112},[34,159431,61066],{"class":63},[34,159433,617],{"class":59},[34,159435,159436],{"class":187},"\"是否继续(y\u002Fn):\"",[34,159438,159439],{"class":59},").lower()\n",[34,159441,159442,159444,159447,159449,159451],{"class":36,"line":44},[34,159443,2002],{"class":112},[34,159445,159446],{"class":59}," answer ",[34,159448,3413],{"class":112},[34,159450,158392],{"class":187},[34,159452,4203],{"class":59},[34,159454,159455,159457,159459,159462],{"class":36,"line":50},[34,159456,31762],{"class":63},[34,159458,617],{"class":59},[34,159460,159461],{"class":187},"\"继续\"",[34,159463,623],{"class":59},[555,159465,159467],{"id":159466},"_313-本章练习","3.13 本章练习",[567,159469,159470,159473,159476,159479,159489],{},[570,159471,159472],{},"输入年龄，判断是否成年。",[570,159474,159475],{},"输入年份，判断是否为闰年。",[570,159477,159478],{},"输入三个数字，输出最大值。",[570,159480,159481,159482,159485,159486,159488],{},"写登录判断：用户名是 ",[31,159483,159484],{},"admin"," 且密码是 ",[31,159487,15548],{}," 才登录成功。",[570,159490,159491],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[532,159493,159494],{},"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":22,"searchDepth":44,"depth":44,"links":159496},[159497,159498,159499,159500,159501,159502,159507,159508,159509,159510,159511,159512,159513],{"id":157885,"depth":44,"text":157886},{"id":157938,"depth":44,"text":157939},{"id":158042,"depth":44,"text":158043},{"id":158132,"depth":44,"text":158133},{"id":158322,"depth":44,"text":158323},{"id":158445,"depth":44,"text":158446,"children":159503},[159504,159505,159506],{"id":158449,"depth":50,"text":158450},{"id":158506,"depth":50,"text":158507},{"id":158563,"depth":50,"text":158564},{"id":158608,"depth":44,"text":158609},{"id":158699,"depth":44,"text":158700},{"id":158826,"depth":44,"text":158827},{"id":158956,"depth":44,"text":158957},{"id":159141,"depth":44,"text":159142},{"id":159377,"depth":44,"text":159378},{"id":159466,"depth":44,"text":159467},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157877,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159520,"title":159521,"body":159522,"description":537,"extension":538,"meta":161291,"navigation":540,"path":161292,"seo":161293,"stem":161294,"__hash__":161295},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159523,"toc":161271},[159524,159527,159531,159537,159540,159557,159561,159563,159580,159582,159627,159629,159646,159650,159653,159719,159722,159740,159744,159905,159914,159918,159922,159927,159974,159976,159982,159986,159991,160038,160040,160046,160050,160055,160091,160094,160141,160145,160151,160209,160214,160245,160250,160254,160309,160312,160384,160387,160446,160450,160453,160528,160531,160535,160641,160644,160670,160674,160686,160755,160758,160850,160854,160856,160867,160869,160999,161003,161205,161213,161217,161247,161251,161268],[10,159525,159521],{"id":159526},"_4-循环语句",[555,159528,159530],{"id":159529},"_41-为什么需要循环","4.1 为什么需要循环",[14,159532,159533,159534,159536],{},"如果要输出 1 到 100，不应该写 100 行 ",[31,159535,146859],{},"，而应该用循环。",[14,159538,159539],{},"循环适合处理重复任务：",[567,159541,159542,159545,159548,159551,159554],{},[570,159543,159544],{},"重复输出。",[570,159546,159547],{},"重复输入。",[570,159549,159550],{},"遍历数据。",[570,159552,159553],{},"持续执行菜单。",[570,159555,159556],{},"批量处理文件或数据。",[555,159558,159560],{"id":159559},"_42-while循环","4.2 while循环",[14,159562,5645],{},[25,159564,159566],{"className":27,"code":159565,"language":29,"meta":22,"style":22},"while 条件:\n    循环体\n",[31,159567,159568,159575],{"__ignoreMap":22},[34,159569,159570,159572],{"class":36,"line":37},[34,159571,109050],{"class":112},[34,159573,159574],{"class":59}," 条件:\n",[34,159576,159577],{"class":36,"line":44},[34,159578,159579],{"class":59},"    循环体\n",[14,159581,15599],{},[25,159583,159585],{"className":27,"code":159584,"language":29,"meta":22,"style":22},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[31,159586,159587,159595,159599,159611,159618],{"__ignoreMap":22},[34,159588,159589,159591,159593],{"class":36,"line":37},[34,159590,100535],{"class":59},[34,159592,447],{"class":112},[34,159594,56160],{"class":63},[34,159596,159597],{"class":36,"line":44},[34,159598,2864],{"emptyLinePlaceholder":540},[34,159600,159601,159603,159605,159607,159609],{"class":36,"line":50},[34,159602,109050],{"class":112},[34,159604,9902],{"class":59},[34,159606,2059],{"class":112},[34,159608,2612],{"class":63},[34,159610,4203],{"class":59},[34,159612,159613,159615],{"class":36,"line":56},[34,159614,31762],{"class":63},[34,159616,159617],{"class":59},"(i)\n",[34,159619,159620,159623,159625],{"class":36,"line":107},[34,159621,159622],{"class":59},"    i ",[34,159624,9941],{"class":112},[34,159626,56160],{"class":63},[14,159628,81390],{},[567,159630,159631,159637,159640,159643],{},[570,159632,159633,159634,28850],{},"判断条件 ",[31,159635,159636],{},"i \u003C= 5",[570,159638,159639],{},"条件成立，执行循环体。",[570,159641,159642],{},"执行完后回到条件判断。",[570,159644,159645],{},"条件不成立，退出循环。",[555,159647,159649],{"id":159648},"_43-while累加","4.3 while累加",[14,159651,159652],{},"计算 1 到 100 的和：",[25,159654,159656],{"className":27,"code":159655,"language":29,"meta":22,"style":22},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[31,159657,159658,159666,159674,159678,159690,159700,159708,159712],{"__ignoreMap":22},[34,159659,159660,159662,159664],{"class":36,"line":37},[34,159661,100535],{"class":59},[34,159663,447],{"class":112},[34,159665,56160],{"class":63},[34,159667,159668,159670,159672],{"class":36,"line":44},[34,159669,157647],{"class":59},[34,159671,447],{"class":112},[34,159673,47794],{"class":63},[34,159675,159676],{"class":36,"line":50},[34,159677,2864],{"emptyLinePlaceholder":540},[34,159679,159680,159682,159684,159686,159688],{"class":36,"line":56},[34,159681,109050],{"class":112},[34,159683,9902],{"class":59},[34,159685,2059],{"class":112},[34,159687,6218],{"class":63},[34,159689,4203],{"class":59},[34,159691,159692,159695,159697],{"class":36,"line":107},[34,159693,159694],{"class":59},"    total ",[34,159696,9941],{"class":112},[34,159698,159699],{"class":59}," i\n",[34,159701,159702,159704,159706],{"class":36,"line":196},[34,159703,159622],{"class":59},[34,159705,9941],{"class":112},[34,159707,56160],{"class":63},[34,159709,159710],{"class":36,"line":202},[34,159711,2864],{"emptyLinePlaceholder":540},[34,159713,159714,159716],{"class":36,"line":207},[34,159715,30878],{"class":63},[34,159717,159718],{"class":59},"(total)\n",[14,159720,159721],{},"核心思想：",[567,159723,159724,159729,159734],{},[570,159725,159726,159728],{},[31,159727,1048],{}," 控制循环次数。",[570,159730,159731,159733],{},[31,159732,157748],{}," 保存累加结果。",[570,159735,159736,159737,159739],{},"每轮循环都要更新 ",[31,159738,1048],{},"，否则可能死循环。",[555,159741,159743],{"id":159742},"_44-while猜数字","4.4 while猜数字",[25,159745,159747],{"className":27,"code":159746,"language":29,"meta":22,"style":22},"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",[31,159748,159749,159755,159759,159776,159784,159788,159796,159816,159825,159829,159841,159852,159862,159873,159879,159901],{"__ignoreMap":22},[34,159750,159751,159753],{"class":36,"line":37},[34,159752,30855],{"class":112},[34,159754,45789],{"class":59},[34,159756,159757],{"class":36,"line":44},[34,159758,2864],{"emptyLinePlaceholder":540},[34,159760,159761,159763,159765,159768,159770,159772,159774],{"class":36,"line":50},[34,159762,159427],{"class":59},[34,159764,447],{"class":112},[34,159766,159767],{"class":59}," random.randint(",[34,159769,64],{"class":63},[34,159771,12899],{"class":59},[34,159773,919],{"class":63},[34,159775,623],{"class":59},[34,159777,159778,159780,159782],{"class":36,"line":56},[34,159779,147078],{"class":59},[34,159781,447],{"class":112},[34,159783,47794],{"class":63},[34,159785,159786],{"class":36,"line":107},[34,159787,2864],{"emptyLinePlaceholder":540},[34,159789,159790,159792,159794],{"class":36,"line":196},[34,159791,109050],{"class":112},[34,159793,95751],{"class":63},[34,159795,4203],{"class":59},[34,159797,159798,159801,159803,159805,159807,159809,159811,159814],{"class":36,"line":202},[34,159799,159800],{"class":59},"    guess ",[34,159802,447],{"class":112},[34,159804,2846],{"class":63},[34,159806,617],{"class":59},[34,159808,54282],{"class":63},[34,159810,617],{"class":59},[34,159812,159813],{"class":187},"\"请输入1到100之间的数字:\"",[34,159815,30960],{"class":59},[34,159817,159818,159821,159823],{"class":36,"line":207},[34,159819,159820],{"class":59},"    count ",[34,159822,9941],{"class":112},[34,159824,56160],{"class":63},[34,159826,159827],{"class":36,"line":222},[34,159828,2864],{"emptyLinePlaceholder":540},[34,159830,159831,159833,159836,159838],{"class":36,"line":227},[34,159832,3565],{"class":112},[34,159834,159835],{"class":59}," guess ",[34,159837,1564],{"class":112},[34,159839,159840],{"class":59}," answer:\n",[34,159842,159843,159845,159847,159850],{"class":36,"line":232},[34,159844,32914],{"class":63},[34,159846,617],{"class":59},[34,159848,159849],{"class":187},"\"猜大了\"",[34,159851,623],{"class":59},[34,159853,159854,159856,159858,159860],{"class":36,"line":238},[34,159855,39755],{"class":112},[34,159857,159835],{"class":59},[34,159859,1515],{"class":112},[34,159861,159840],{"class":59},[34,159863,159864,159866,159868,159871],{"class":36,"line":244},[34,159865,32914],{"class":63},[34,159867,617],{"class":59},[34,159869,159870],{"class":187},"\"猜小了\"",[34,159872,623],{"class":59},[34,159874,159875,159877],{"class":36,"line":250},[34,159876,158409],{"class":112},[34,159878,4203],{"class":59},[34,159880,159881,159883,159885,159887,159890,159892,159894,159896,159899],{"class":36,"line":256},[34,159882,32914],{"class":63},[34,159884,617],{"class":59},[34,159886,667],{"class":112},[34,159888,159889],{"class":187},"\"猜对了，一共猜了",[34,159891,1501],{"class":63},[34,159893,84895],{"class":59},[34,159895,1550],{"class":63},[34,159897,159898],{"class":187},"次\"",[34,159900,623],{"class":59},[34,159902,159903],{"class":36,"line":261},[34,159904,32090],{"class":112},[14,159906,159907,159910,159911,159913],{},[31,159908,159909],{},"while True"," 表示无限循环，通常配合 ",[31,159912,2517],{}," 使用。",[555,159915,159917],{"id":159916},"_45-break和continue","4.5 break和continue",[584,159919,159921],{"id":159920},"_451-break","4.5.1 break",[14,159923,159924,159926],{},[31,159925,2517],{}," 直接结束整个循环。",[25,159928,159930],{"className":27,"code":159929,"language":29,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[31,159931,159932,159952,159964,159968],{"__ignoreMap":22},[34,159933,159934,159936,159938,159940,159942,159944,159946,159948,159950],{"class":36,"line":37},[34,159935,3489],{"class":112},[34,159937,9902],{"class":59},[34,159939,26508],{"class":112},[34,159941,32906],{"class":63},[34,159943,617],{"class":59},[34,159945,64],{"class":63},[34,159947,12899],{"class":59},[34,159949,952],{"class":63},[34,159951,31249],{"class":59},[34,159953,159954,159956,159958,159960,159962],{"class":36,"line":44},[34,159955,3565],{"class":112},[34,159957,9902],{"class":59},[34,159959,3413],{"class":112},[34,159961,78531],{"class":63},[34,159963,4203],{"class":59},[34,159965,159966],{"class":36,"line":50},[34,159967,32090],{"class":112},[34,159969,159970,159972],{"class":36,"line":56},[34,159971,31762],{"class":63},[34,159973,159617],{"class":59},[14,159975,146844],{},[25,159977,159980],{"className":159978,"code":159979,"language":5651,"meta":22},[5649],"1\n2\n",[31,159981,159979],{"__ignoreMap":22},[584,159983,159985],{"id":159984},"_452-continue","4.5.2 continue",[14,159987,159988,159990],{},[31,159989,155059],{}," 跳过本轮剩余代码，进入下一轮循环。",[25,159992,159994],{"className":27,"code":159993,"language":29,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[31,159995,159996,160016,160028,160032],{"__ignoreMap":22},[34,159997,159998,160000,160002,160004,160006,160008,160010,160012,160014],{"class":36,"line":37},[34,159999,3489],{"class":112},[34,160001,9902],{"class":59},[34,160003,26508],{"class":112},[34,160005,32906],{"class":63},[34,160007,617],{"class":59},[34,160009,64],{"class":63},[34,160011,12899],{"class":59},[34,160013,952],{"class":63},[34,160015,31249],{"class":59},[34,160017,160018,160020,160022,160024,160026],{"class":36,"line":44},[34,160019,3565],{"class":112},[34,160021,9902],{"class":59},[34,160023,3413],{"class":112},[34,160025,78531],{"class":63},[34,160027,4203],{"class":59},[34,160029,160030],{"class":36,"line":50},[34,160031,148899],{"class":112},[34,160033,160034,160036],{"class":36,"line":56},[34,160035,31762],{"class":63},[34,160037,159617],{"class":59},[14,160039,146844],{},[25,160041,160044],{"className":160042,"code":160043,"language":5651,"meta":22},[5649],"1\n2\n4\n5\n",[31,160045,160043],{"__ignoreMap":22},[555,160047,160049],{"id":160048},"_46-for循环","4.6 for循环",[14,160051,160052,160054],{},[31,160053,3489],{}," 常用于遍历序列。",[25,160056,160058],{"className":27,"code":160057,"language":29,"meta":22,"style":22},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[31,160059,160060,160069,160073,160084],{"__ignoreMap":22},[34,160061,160062,160064,160066],{"class":36,"line":37},[34,160063,146923],{"class":59},[34,160065,447],{"class":112},[34,160067,160068],{"class":187}," \"python\"\n",[34,160070,160071],{"class":36,"line":44},[34,160072,2864],{"emptyLinePlaceholder":540},[34,160074,160075,160077,160080,160082],{"class":36,"line":50},[34,160076,3489],{"class":112},[34,160078,160079],{"class":59}," ch ",[34,160081,26508],{"class":112},[34,160083,158786],{"class":59},[34,160085,160086,160088],{"class":36,"line":56},[34,160087,31762],{"class":63},[34,160089,160090],{"class":59},"(ch)\n",[14,160092,160093],{},"遍历列表：",[25,160095,160097],{"className":27,"code":160096,"language":29,"meta":22,"style":22},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[31,160098,160099,160121,160125,160135],{"__ignoreMap":22},[34,160100,160101,160104,160106,160108,160110,160112,160114,160116,160119],{"class":36,"line":37},[34,160102,160103],{"class":59},"students ",[34,160105,447],{"class":112},[34,160107,52687],{"class":59},[34,160109,150275],{"class":187},[34,160111,12899],{"class":59},[34,160113,151323],{"class":187},[34,160115,12899],{"class":59},[34,160117,160118],{"class":187},"\"小刚\"",[34,160120,73],{"class":59},[34,160122,160123],{"class":36,"line":44},[34,160124,2864],{"emptyLinePlaceholder":540},[34,160126,160127,160129,160131,160133],{"class":36,"line":50},[34,160128,3489],{"class":112},[34,160130,152524],{"class":59},[34,160132,26508],{"class":112},[34,160134,152529],{"class":59},[34,160136,160137,160139],{"class":36,"line":56},[34,160138,31762],{"class":63},[34,160140,150429],{"class":59},[555,160142,160144],{"id":160143},"_47-range函数","4.7 range函数",[14,160146,160147,160150],{},[31,160148,160149],{},"range()"," 用于生成整数序列。",[25,160152,160154],{"className":27,"code":160153,"language":29,"meta":22,"style":22},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[31,160155,160156,160170,160188],{"__ignoreMap":22},[34,160157,160158,160160,160162,160164,160167],{"class":36,"line":37},[34,160159,33878],{"class":63},[34,160161,617],{"class":59},[34,160163,927],{"class":63},[34,160165,160166],{"class":59},")          ",[34,160168,160169],{"class":40},"# 0,1,2,3,4\n",[34,160171,160172,160174,160176,160178,160180,160182,160185],{"class":36,"line":44},[34,160173,33878],{"class":63},[34,160175,617],{"class":59},[34,160177,64],{"class":63},[34,160179,12899],{"class":59},[34,160181,927],{"class":63},[34,160183,160184],{"class":59},")       ",[34,160186,160187],{"class":40},"# 1,2,3,4\n",[34,160189,160190,160192,160194,160196,160198,160200,160202,160204,160206],{"class":36,"line":50},[34,160191,33878],{"class":63},[34,160193,617],{"class":59},[34,160195,64],{"class":63},[34,160197,12899],{"class":59},[34,160199,1053],{"class":63},[34,160201,12899],{"class":59},[34,160203,70],{"class":63},[34,160205,156048],{"class":59},[34,160207,160208],{"class":40},"# 1,3,5,7,9\n",[14,160210,160211,160212,25083],{},"配合 ",[31,160213,3489],{},[25,160215,160217],{"className":27,"code":160216,"language":29,"meta":22,"style":22},"for i in range(1, 6):\n    print(i)\n",[31,160218,160219,160239],{"__ignoreMap":22},[34,160220,160221,160223,160225,160227,160229,160231,160233,160235,160237],{"class":36,"line":37},[34,160222,3489],{"class":112},[34,160224,9902],{"class":59},[34,160226,26508],{"class":112},[34,160228,32906],{"class":63},[34,160230,617],{"class":59},[34,160232,64],{"class":63},[34,160234,12899],{"class":59},[34,160236,952],{"class":63},[34,160238,31249],{"class":59},[34,160240,160241,160243],{"class":36,"line":44},[34,160242,31762],{"class":63},[34,160244,159617],{"class":59},[14,160246,9489,160247,160249],{},[31,160248,33878],{}," 的结束值不包含在内。",[555,160251,160253],{"id":160252},"_48-for循环求和","4.8 for循环求和",[25,160255,160257],{"className":27,"code":160256,"language":29,"meta":22,"style":22},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[31,160258,160259,160267,160271,160291,160299,160303],{"__ignoreMap":22},[34,160260,160261,160263,160265],{"class":36,"line":37},[34,160262,157647],{"class":59},[34,160264,447],{"class":112},[34,160266,47794],{"class":63},[34,160268,160269],{"class":36,"line":44},[34,160270,2864],{"emptyLinePlaceholder":540},[34,160272,160273,160275,160277,160279,160281,160283,160285,160287,160289],{"class":36,"line":50},[34,160274,3489],{"class":112},[34,160276,9902],{"class":59},[34,160278,26508],{"class":112},[34,160280,32906],{"class":63},[34,160282,617],{"class":59},[34,160284,64],{"class":63},[34,160286,12899],{"class":59},[34,160288,945],{"class":63},[34,160290,31249],{"class":59},[34,160292,160293,160295,160297],{"class":36,"line":56},[34,160294,159694],{"class":59},[34,160296,9941],{"class":112},[34,160298,159699],{"class":59},[34,160300,160301],{"class":36,"line":107},[34,160302,2864],{"emptyLinePlaceholder":540},[34,160304,160305,160307],{"class":36,"line":196},[34,160306,30878],{"class":63},[34,160308,159718],{"class":59},[14,160310,160311],{},"求偶数和：",[25,160313,160315],{"className":27,"code":160314,"language":29,"meta":22,"style":22},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[31,160316,160317,160325,160329,160349,160365,160374,160378],{"__ignoreMap":22},[34,160318,160319,160321,160323],{"class":36,"line":37},[34,160320,157647],{"class":59},[34,160322,447],{"class":112},[34,160324,47794],{"class":63},[34,160326,160327],{"class":36,"line":44},[34,160328,2864],{"emptyLinePlaceholder":540},[34,160330,160331,160333,160335,160337,160339,160341,160343,160345,160347],{"class":36,"line":50},[34,160332,3489],{"class":112},[34,160334,9902],{"class":59},[34,160336,26508],{"class":112},[34,160338,32906],{"class":63},[34,160340,617],{"class":59},[34,160342,64],{"class":63},[34,160344,12899],{"class":59},[34,160346,945],{"class":63},[34,160348,31249],{"class":59},[34,160350,160351,160353,160355,160357,160359,160361,160363],{"class":36,"line":56},[34,160352,3565],{"class":112},[34,160354,9902],{"class":59},[34,160356,936],{"class":112},[34,160358,15219],{"class":63},[34,160360,101946],{"class":112},[34,160362,4557],{"class":63},[34,160364,4203],{"class":59},[34,160366,160367,160370,160372],{"class":36,"line":107},[34,160368,160369],{"class":59},"        total ",[34,160371,9941],{"class":112},[34,160373,159699],{"class":59},[34,160375,160376],{"class":36,"line":196},[34,160377,2864],{"emptyLinePlaceholder":540},[34,160379,160380,160382],{"class":36,"line":202},[34,160381,30878],{"class":63},[34,160383,159718],{"class":59},[14,160385,160386],{},"也可以：",[25,160388,160390],{"className":27,"code":160389,"language":29,"meta":22,"style":22},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[31,160391,160392,160400,160404,160428,160436,160440],{"__ignoreMap":22},[34,160393,160394,160396,160398],{"class":36,"line":37},[34,160395,157647],{"class":59},[34,160397,447],{"class":112},[34,160399,47794],{"class":63},[34,160401,160402],{"class":36,"line":44},[34,160403,2864],{"emptyLinePlaceholder":540},[34,160405,160406,160408,160410,160412,160414,160416,160418,160420,160422,160424,160426],{"class":36,"line":50},[34,160407,3489],{"class":112},[34,160409,9902],{"class":59},[34,160411,26508],{"class":112},[34,160413,32906],{"class":63},[34,160415,617],{"class":59},[34,160417,70],{"class":63},[34,160419,12899],{"class":59},[34,160421,945],{"class":63},[34,160423,12899],{"class":59},[34,160425,70],{"class":63},[34,160427,31249],{"class":59},[34,160429,160430,160432,160434],{"class":36,"line":56},[34,160431,159694],{"class":59},[34,160433,9941],{"class":112},[34,160435,159699],{"class":59},[34,160437,160438],{"class":36,"line":107},[34,160439,2864],{"emptyLinePlaceholder":540},[34,160441,160442,160444],{"class":36,"line":196},[34,160443,30878],{"class":63},[34,160445,159718],{"class":59},[555,160447,160449],{"id":160448},"_49-循环嵌套","4.9 循环嵌套",[14,160451,160452],{},"嵌套循环就是循环里面再写循环。",[25,160454,160456],{"className":27,"code":160455,"language":29,"meta":22,"style":22},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[31,160457,160458,160478,160498],{"__ignoreMap":22},[34,160459,160460,160462,160464,160466,160468,160470,160472,160474,160476],{"class":36,"line":37},[34,160461,3489],{"class":112},[34,160463,9902],{"class":59},[34,160465,26508],{"class":112},[34,160467,32906],{"class":63},[34,160469,617],{"class":59},[34,160471,64],{"class":63},[34,160473,12899],{"class":59},[34,160475,217],{"class":63},[34,160477,31249],{"class":59},[34,160479,160480,160482,160484,160486,160488,160490,160492,160494,160496],{"class":36,"line":44},[34,160481,3665],{"class":112},[34,160483,9964],{"class":59},[34,160485,26508],{"class":112},[34,160487,32906],{"class":63},[34,160489,617],{"class":59},[34,160491,64],{"class":63},[34,160493,12899],{"class":59},[34,160495,217],{"class":63},[34,160497,31249],{"class":59},[34,160499,160500,160502,160504,160506,160509,160511,160513,160515,160518,160520,160522,160524,160526],{"class":36,"line":50},[34,160501,32914],{"class":63},[34,160503,617],{"class":59},[34,160505,667],{"class":112},[34,160507,160508],{"class":187},"\"i=",[34,160510,1501],{"class":63},[34,160512,1048],{"class":59},[34,160514,1550],{"class":63},[34,160516,160517],{"class":187},", j=",[34,160519,1501],{"class":63},[34,160521,1074],{"class":59},[34,160523,1550],{"class":63},[34,160525,860],{"class":187},[34,160527,623],{"class":59},[14,160529,160530],{},"外层循环执行一次，内层循环执行完整一轮。",[555,160532,160534],{"id":160533},"_410-九九乘法表","4.10 九九乘法表",[25,160536,160538],{"className":27,"code":160537,"language":29,"meta":22,"style":22},"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",[31,160539,160540,160560,160583,160635],{"__ignoreMap":22},[34,160541,160542,160544,160546,160548,160550,160552,160554,160556,160558],{"class":36,"line":37},[34,160543,3489],{"class":112},[34,160545,9902],{"class":59},[34,160547,26508],{"class":112},[34,160549,32906],{"class":63},[34,160551,617],{"class":59},[34,160553,64],{"class":63},[34,160555,12899],{"class":59},[34,160557,1053],{"class":63},[34,160559,31249],{"class":59},[34,160561,160562,160564,160566,160568,160570,160572,160574,160577,160579,160581],{"class":36,"line":44},[34,160563,3665],{"class":112},[34,160565,9964],{"class":59},[34,160567,26508],{"class":112},[34,160569,32906],{"class":63},[34,160571,617],{"class":59},[34,160573,64],{"class":63},[34,160575,160576],{"class":59},", i ",[34,160578,1088],{"class":112},[34,160580,25583],{"class":63},[34,160582,31249],{"class":59},[34,160584,160585,160587,160589,160591,160593,160595,160597,160599,160601,160603,160605,160607,160609,160611,160613,160615,160617,160619,160621,160623,160625,160627,160629,160631,160633],{"class":36,"line":50},[34,160586,32914],{"class":63},[34,160588,617],{"class":59},[34,160590,667],{"class":112},[34,160592,860],{"class":187},[34,160594,1501],{"class":63},[34,160596,1074],{"class":59},[34,160598,1550],{"class":63},[34,160600,1062],{"class":187},[34,160602,1501],{"class":63},[34,160604,1048],{"class":59},[34,160606,1550],{"class":63},[34,160608,447],{"class":187},[34,160610,1501],{"class":63},[34,160612,100535],{"class":59},[34,160614,1062],{"class":112},[34,160616,3874],{"class":59},[34,160618,1550],{"class":63},[34,160620,860],{"class":187},[34,160622,12899],{"class":59},[34,160624,46262],{"class":5680},[34,160626,447],{"class":112},[34,160628,860],{"class":187},[34,160630,1705],{"class":63},[34,160632,860],{"class":187},[34,160634,623],{"class":59},[34,160636,160637,160639],{"class":36,"line":56},[34,160638,31762],{"class":63},[34,160640,2440],{"class":59},[14,160642,160643],{},"关键点：",[567,160645,160646,160652,160658,160664],{},[570,160647,160648,160649,160651],{},"外层 ",[31,160650,1048],{}," 控制行。",[570,160653,160654,160655,160657],{},"内层 ",[31,160656,1074],{}," 控制列。",[570,160659,160660,160661,160663],{},"每行结束后用 ",[31,160662,146859],{}," 换行。",[570,160665,160666,160669],{},[31,160667,160668],{},"end=\"\\t\""," 让同一行的内容横向排列。",[555,160671,160673],{"id":160672},"_411-循环else","4.11 循环else",[14,160675,160676,160677,160679,160680,160682,160683,160685],{},"Python 的循环可以带 ",[31,160678,2165],{},"。当循环正常结束时执行 ",[31,160681,2165],{},"，如果被 ",[31,160684,2517],{}," 打断，则不执行。",[25,160687,160689],{"className":27,"code":160688,"language":29,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[31,160690,160691,160711,160723,160734,160738,160744],{"__ignoreMap":22},[34,160692,160693,160695,160697,160699,160701,160703,160705,160707,160709],{"class":36,"line":37},[34,160694,3489],{"class":112},[34,160696,9902],{"class":59},[34,160698,26508],{"class":112},[34,160700,32906],{"class":63},[34,160702,617],{"class":59},[34,160704,64],{"class":63},[34,160706,12899],{"class":59},[34,160708,952],{"class":63},[34,160710,31249],{"class":59},[34,160712,160713,160715,160717,160719,160721],{"class":36,"line":44},[34,160714,3565],{"class":112},[34,160716,9902],{"class":59},[34,160718,3413],{"class":112},[34,160720,2502],{"class":63},[34,160722,4203],{"class":59},[34,160724,160725,160727,160729,160732],{"class":36,"line":50},[34,160726,32914],{"class":63},[34,160728,617],{"class":59},[34,160730,160731],{"class":187},"\"找到了\"",[34,160733,623],{"class":59},[34,160735,160736],{"class":36,"line":56},[34,160737,32090],{"class":112},[34,160739,160740,160742],{"class":36,"line":107},[34,160741,2165],{"class":112},[34,160743,4203],{"class":59},[34,160745,160746,160748,160750,160753],{"class":36,"line":196},[34,160747,31762],{"class":63},[34,160749,617],{"class":59},[34,160751,160752],{"class":187},"\"没找到\"",[34,160754,623],{"class":59},[14,160756,160757],{},"常用于搜索。",[25,160759,160761],{"className":27,"code":160760,"language":29,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[31,160762,160763,160784,160793,160797,160809,160820,160830,160834,160840],{"__ignoreMap":22},[34,160764,160765,160768,160770,160772,160774,160776,160778,160780,160782],{"class":36,"line":37},[34,160766,160767],{"class":59},"names ",[34,160769,447],{"class":112},[34,160771,52687],{"class":59},[34,160773,150275],{"class":187},[34,160775,12899],{"class":59},[34,160777,151323],{"class":187},[34,160779,12899],{"class":59},[34,160781,160118],{"class":187},[34,160783,73],{"class":59},[34,160785,160786,160788,160790],{"class":36,"line":44},[34,160787,111965],{"class":59},[34,160789,447],{"class":112},[34,160791,160792],{"class":187}," \"小李\"\n",[34,160794,160795],{"class":36,"line":50},[34,160796,2864],{"emptyLinePlaceholder":540},[34,160798,160799,160801,160804,160806],{"class":36,"line":56},[34,160800,3489],{"class":112},[34,160802,160803],{"class":59}," name ",[34,160805,26508],{"class":112},[34,160807,160808],{"class":59}," names:\n",[34,160810,160811,160813,160815,160817],{"class":36,"line":107},[34,160812,3565],{"class":112},[34,160814,160803],{"class":59},[34,160816,3413],{"class":112},[34,160818,160819],{"class":59}," target:\n",[34,160821,160822,160824,160826,160828],{"class":36,"line":196},[34,160823,32914],{"class":63},[34,160825,617],{"class":59},[34,160827,160731],{"class":187},[34,160829,623],{"class":59},[34,160831,160832],{"class":36,"line":202},[34,160833,32090],{"class":112},[34,160835,160836,160838],{"class":36,"line":207},[34,160837,2165],{"class":112},[34,160839,4203],{"class":59},[34,160841,160842,160844,160846,160848],{"class":36,"line":222},[34,160843,31762],{"class":63},[34,160845,617],{"class":59},[34,160847,160752],{"class":187},[34,160849,623],{"class":59},[555,160851,160853],{"id":160852},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160855,123679],{},[567,160857,160858,160861,160864],{},[570,160859,160860],{},"用户最多输入 3 次密码。",[570,160862,160863],{},"密码正确则登录成功。",[570,160865,160866],{},"3 次都错误则锁定账号。",[14,160868,10499],{},[25,160870,160872],{"className":27,"code":160871,"language":29,"meta":22,"style":22},"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",[31,160873,160874,160884,160888,160904,160920,160924,160936,160947,160951,160957,160982,160988],{"__ignoreMap":22},[34,160875,160876,160879,160881],{"class":36,"line":37},[34,160877,160878],{"class":59},"password ",[34,160880,447],{"class":112},[34,160882,160883],{"class":187}," \"123456\"\n",[34,160885,160886],{"class":36,"line":44},[34,160887,2864],{"emptyLinePlaceholder":540},[34,160889,160890,160892,160894,160896,160898,160900,160902],{"class":36,"line":50},[34,160891,3489],{"class":112},[34,160893,9902],{"class":59},[34,160895,26508],{"class":112},[34,160897,32906],{"class":63},[34,160899,617],{"class":59},[34,160901,309],{"class":63},[34,160903,31249],{"class":59},[34,160905,160906,160909,160911,160913,160915,160918],{"class":36,"line":56},[34,160907,160908],{"class":59},"    user_password ",[34,160910,447],{"class":112},[34,160912,61066],{"class":63},[34,160914,617],{"class":59},[34,160916,160917],{"class":187},"\"请输入密码:\"",[34,160919,623],{"class":59},[34,160921,160922],{"class":36,"line":107},[34,160923,2864],{"emptyLinePlaceholder":540},[34,160925,160926,160928,160931,160933],{"class":36,"line":196},[34,160927,3565],{"class":112},[34,160929,160930],{"class":59}," user_password ",[34,160932,3413],{"class":112},[34,160934,160935],{"class":59}," password:\n",[34,160937,160938,160940,160942,160945],{"class":36,"line":202},[34,160939,32914],{"class":63},[34,160941,617],{"class":59},[34,160943,160944],{"class":187},"\"登录成功\"",[34,160946,623],{"class":59},[34,160948,160949],{"class":36,"line":207},[34,160950,32090],{"class":112},[34,160952,160953,160955],{"class":36,"line":222},[34,160954,158409],{"class":112},[34,160956,4203],{"class":59},[34,160958,160959,160961,160963,160965,160968,160971,160973,160975,160977,160980],{"class":36,"line":227},[34,160960,32914],{"class":63},[34,160962,617],{"class":59},[34,160964,667],{"class":112},[34,160966,160967],{"class":187},"\"密码错误，还剩",[34,160969,160970],{"class":63},"{2",[34,160972,52732],{"class":112},[34,160974,3496],{"class":59},[34,160976,1550],{"class":63},[34,160978,160979],{"class":187},"次机会\"",[34,160981,623],{"class":59},[34,160983,160984,160986],{"class":36,"line":232},[34,160985,2165],{"class":112},[34,160987,4203],{"class":59},[34,160989,160990,160992,160994,160997],{"class":36,"line":238},[34,160991,31762],{"class":63},[34,160993,617],{"class":59},[34,160995,160996],{"class":187},"\"账号已锁定\"",[34,160998,623],{"class":59},[555,161000,161002],{"id":161001},"_413-小案例菜单程序","4.13 小案例：菜单程序",[25,161004,161006],{"className":27,"code":161005,"language":29,"meta":22,"style":22},"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",[31,161007,161008,161016,161027,161038,161049,161060,161071,161075,161090,161094,161106,161117,161129,161140,161152,161163,161175,161185,161189,161195],{"__ignoreMap":22},[34,161009,161010,161012,161014],{"class":36,"line":37},[34,161011,109050],{"class":112},[34,161013,95751],{"class":63},[34,161015,4203],{"class":59},[34,161017,161018,161020,161022,161025],{"class":36,"line":44},[34,161019,31762],{"class":63},[34,161021,617],{"class":59},[34,161023,161024],{"class":187},"\"====== 菜单 ======\"",[34,161026,623],{"class":59},[34,161028,161029,161031,161033,161036],{"class":36,"line":50},[34,161030,31762],{"class":63},[34,161032,617],{"class":59},[34,161034,161035],{"class":187},"\"1. 查询余额\"",[34,161037,623],{"class":59},[34,161039,161040,161042,161044,161047],{"class":36,"line":56},[34,161041,31762],{"class":63},[34,161043,617],{"class":59},[34,161045,161046],{"class":187},"\"2. 存款\"",[34,161048,623],{"class":59},[34,161050,161051,161053,161055,161058],{"class":36,"line":107},[34,161052,31762],{"class":63},[34,161054,617],{"class":59},[34,161056,161057],{"class":187},"\"3. 取款\"",[34,161059,623],{"class":59},[34,161061,161062,161064,161066,161069],{"class":36,"line":196},[34,161063,31762],{"class":63},[34,161065,617],{"class":59},[34,161067,161068],{"class":187},"\"0. 退出\"",[34,161070,623],{"class":59},[34,161072,161073],{"class":36,"line":202},[34,161074,2864],{"emptyLinePlaceholder":540},[34,161076,161077,161080,161082,161084,161086,161088],{"class":36,"line":207},[34,161078,161079],{"class":59},"    choice ",[34,161081,447],{"class":112},[34,161083,61066],{"class":63},[34,161085,617],{"class":59},[34,161087,153460],{"class":187},[34,161089,623],{"class":59},[34,161091,161092],{"class":36,"line":222},[34,161093,2864],{"emptyLinePlaceholder":540},[34,161095,161096,161098,161100,161102,161104],{"class":36,"line":227},[34,161097,3565],{"class":112},[34,161099,153473],{"class":59},[34,161101,3413],{"class":112},[34,161103,153478],{"class":187},[34,161105,4203],{"class":59},[34,161107,161108,161110,161112,161115],{"class":36,"line":232},[34,161109,32914],{"class":63},[34,161111,617],{"class":59},[34,161113,161114],{"class":187},"\"余额为1000元\"",[34,161116,623],{"class":59},[34,161118,161119,161121,161123,161125,161127],{"class":36,"line":238},[34,161120,39755],{"class":112},[34,161122,153473],{"class":59},[34,161124,3413],{"class":112},[34,161126,153497],{"class":187},[34,161128,4203],{"class":59},[34,161130,161131,161133,161135,161138],{"class":36,"line":244},[34,161132,32914],{"class":63},[34,161134,617],{"class":59},[34,161136,161137],{"class":187},"\"存款功能\"",[34,161139,623],{"class":59},[34,161141,161142,161144,161146,161148,161150],{"class":36,"line":250},[34,161143,39755],{"class":112},[34,161145,153473],{"class":59},[34,161147,3413],{"class":112},[34,161149,153515],{"class":187},[34,161151,4203],{"class":59},[34,161153,161154,161156,161158,161161],{"class":36,"line":256},[34,161155,32914],{"class":63},[34,161157,617],{"class":59},[34,161159,161160],{"class":187},"\"取款功能\"",[34,161162,623],{"class":59},[34,161164,161165,161167,161169,161171,161173],{"class":36,"line":261},[34,161166,39755],{"class":112},[34,161168,153473],{"class":59},[34,161170,3413],{"class":112},[34,161172,153569],{"class":187},[34,161174,4203],{"class":59},[34,161176,161177,161179,161181,161183],{"class":36,"line":267},[34,161178,32914],{"class":63},[34,161180,617],{"class":59},[34,161182,153580],{"class":187},[34,161184,623],{"class":59},[34,161186,161187],{"class":36,"line":2138},[34,161188,32090],{"class":112},[34,161190,161191,161193],{"class":36,"line":2143},[34,161192,158409],{"class":112},[34,161194,4203],{"class":59},[34,161196,161197,161199,161201,161203],{"class":36,"line":2157},[34,161198,32914],{"class":63},[34,161200,617],{"class":59},[34,161202,153601],{"class":187},[34,161204,623],{"class":59},[14,161206,161207,161208,161210,161211,28850],{},"菜单类程序通常使用 ",[31,161209,159909],{},"，用户选择退出时 ",[31,161212,2517],{},[555,161214,161216],{"id":161215},"_414-易错点","4.14 易错点",[567,161218,161219,161224,161230,161238,161244],{},[570,161220,161221,161223],{},[31,161222,109050],{}," 循环必须更新控制变量。",[570,161225,161226,161229],{},[31,161227,161228],{},"range(1, 10)"," 不包含 10。",[570,161231,161232,161234,161235,161237],{},[31,161233,2517],{}," 结束整个循环，",[31,161236,155059],{}," 只跳过本轮。",[570,161239,161240,161241,161243],{},"嵌套循环中，",[31,161242,2517],{}," 只跳出当前所在的一层循环。",[570,161245,161246],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[555,161248,161250],{"id":161249},"_415-本章练习","4.15 本章练习",[567,161252,161253,161256,161259,161262,161265],{},[570,161254,161255],{},"输出 1 到 100。",[570,161257,161258],{},"计算 1 到 100 的偶数和。",[570,161260,161261],{},"输出 100 以内能被 3 和 5 同时整除的数。",[570,161263,161264],{},"编写猜数字游戏，限制最多猜 7 次。",[570,161266,161267],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[532,161269,161270],{},"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":22,"searchDepth":44,"depth":44,"links":161272},[161273,161274,161275,161276,161277,161281,161282,161283,161284,161285,161286,161287,161288,161289,161290],{"id":159529,"depth":44,"text":159530},{"id":159559,"depth":44,"text":159560},{"id":159648,"depth":44,"text":159649},{"id":159742,"depth":44,"text":159743},{"id":159916,"depth":44,"text":159917,"children":161278},[161279,161280],{"id":159920,"depth":50,"text":159921},{"id":159984,"depth":50,"text":159985},{"id":160048,"depth":44,"text":160049},{"id":160143,"depth":44,"text":160144},{"id":160252,"depth":44,"text":160253},{"id":160448,"depth":44,"text":160449},{"id":160533,"depth":44,"text":160534},{"id":160672,"depth":44,"text":160673},{"id":160852,"depth":44,"text":160853},{"id":161001,"depth":44,"text":161002},{"id":161215,"depth":44,"text":161216},{"id":161249,"depth":44,"text":161250},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159521,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161297,"title":161298,"body":161299,"description":537,"extension":538,"meta":163304,"navigation":540,"path":163305,"seo":163306,"stem":163307,"__hash__":163308},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161300,"toc":163284},[161301,161304,161308,161311,161314,161328,161331,161345,161349,161351,161370,161372,161419,161421,161435,161439,161513,161516,161520,161523,161582,161590,161593,161646,161649,161653,161658,161713,161721,161771,161775,161780,161788,161887,161893,161897,161902,161905,161916,161957,161970,161974,161977,162013,162016,162029,162032,162092,162096,162100,162103,162154,162158,162161,162208,162214,162280,162283,162287,162290,162406,162409,162413,162416,162522,162526,162529,162567,162570,162612,162615,162675,162678,162682,163146,163149,163153,163180,163186,163247,163251,163281],[10,161302,161298],{"id":161303},"_5-函数基础",[555,161305,161307],{"id":161306},"_51-为什么需要函数","5.1 为什么需要函数",[14,161309,161310],{},"函数用于封装一段可以重复使用的代码。",[14,161312,161313],{},"不使用函数的问题：",[567,161315,161316,161319,161322,161325],{},[570,161317,161318],{},"重复代码多。",[570,161320,161321],{},"修改逻辑时容易漏改。",[570,161323,161324],{},"主流程不清晰。",[570,161326,161327],{},"程序越写越长，难以维护。",[14,161329,161330],{},"使用函数后的好处：",[567,161332,161333,161336,161339,161342],{},[570,161334,161335],{},"提高复用性。",[570,161337,161338],{},"提高可读性。",[570,161340,161341],{},"便于调试。",[570,161343,161344],{},"便于分工。",[555,161346,161348],{"id":161347},"_52-函数定义","5.2 函数定义",[14,161350,5645],{},[25,161352,161354],{"className":27,"code":161353,"language":29,"meta":22,"style":22},"def 函数名():\n    函数体\n",[31,161355,161356,161365],{"__ignoreMap":22},[34,161357,161358,161360,161363],{"class":36,"line":37},[34,161359,32410],{"class":112},[34,161361,161362],{"class":2427}," 函数名",[34,161364,32416],{"class":59},[34,161366,161367],{"class":36,"line":44},[34,161368,161369],{"class":59},"    函数体\n",[14,161371,15599],{},[25,161373,161375],{"className":27,"code":161374,"language":29,"meta":22,"style":22},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[31,161376,161377,161386,161396,161406,161410,161414],{"__ignoreMap":22},[34,161378,161379,161381,161384],{"class":36,"line":37},[34,161380,32410],{"class":112},[34,161382,161383],{"class":2427}," say_hello",[34,161385,32416],{"class":59},[34,161387,161388,161390,161392,161394],{"class":36,"line":44},[34,161389,31762],{"class":63},[34,161391,617],{"class":59},[34,161393,6308],{"class":187},[34,161395,623],{"class":59},[34,161397,161398,161400,161402,161404],{"class":36,"line":50},[34,161399,31762],{"class":63},[34,161401,617],{"class":59},[34,161403,147026],{"class":187},[34,161405,623],{"class":59},[34,161407,161408],{"class":36,"line":56},[34,161409,2864],{"emptyLinePlaceholder":540},[34,161411,161412],{"class":36,"line":107},[34,161413,2864],{"emptyLinePlaceholder":540},[34,161415,161416],{"class":36,"line":196},[34,161417,161418],{"class":59},"say_hello()\n",[14,161420,9489],{},[567,161422,161423,161426,161429,161432],{},[570,161424,161425],{},"函数必须先定义，再调用。",[570,161427,161428],{},"函数名遵循变量命名规则。",[570,161430,161431],{},"函数体需要缩进。",[570,161433,161434],{},"函数不调用就不会执行。",[555,161436,161438],{"id":161437},"_53-函数调用","5.3 函数调用",[25,161440,161442],{"className":27,"code":161441,"language":29,"meta":22,"style":22},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[31,161443,161444,161453,161464,161475,161486,161496,161500,161504,161509],{"__ignoreMap":22},[34,161445,161446,161448,161451],{"class":36,"line":37},[34,161447,32410],{"class":112},[34,161449,161450],{"class":2427}," print_menu",[34,161452,32416],{"class":59},[34,161454,161455,161457,161459,161462],{"class":36,"line":44},[34,161456,31762],{"class":63},[34,161458,617],{"class":59},[34,161460,161461],{"class":187},"\"1. 查询\"",[34,161463,623],{"class":59},[34,161465,161466,161468,161470,161473],{"class":36,"line":50},[34,161467,31762],{"class":63},[34,161469,617],{"class":59},[34,161471,161472],{"class":187},"\"2. 添加\"",[34,161474,623],{"class":59},[34,161476,161477,161479,161481,161484],{"class":36,"line":56},[34,161478,31762],{"class":63},[34,161480,617],{"class":59},[34,161482,161483],{"class":187},"\"3. 删除\"",[34,161485,623],{"class":59},[34,161487,161488,161490,161492,161494],{"class":36,"line":107},[34,161489,31762],{"class":63},[34,161491,617],{"class":59},[34,161493,161068],{"class":187},[34,161495,623],{"class":59},[34,161497,161498],{"class":36,"line":196},[34,161499,2864],{"emptyLinePlaceholder":540},[34,161501,161502],{"class":36,"line":202},[34,161503,2864],{"emptyLinePlaceholder":540},[34,161505,161506],{"class":36,"line":207},[34,161507,161508],{"class":59},"print_menu()\n",[34,161510,161511],{"class":36,"line":222},[34,161512,161508],{"class":59},[14,161514,161515],{},"函数可以多次调用，每次调用都会执行函数体。",[555,161517,161519],{"id":161518},"_54-参数","5.4 参数",[14,161521,161522],{},"参数用于向函数传递数据。",[25,161524,161526],{"className":27,"code":161525,"language":29,"meta":22,"style":22},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[31,161527,161528,161537,161557,161561,161565,161574],{"__ignoreMap":22},[34,161529,161530,161532,161534],{"class":36,"line":37},[34,161531,32410],{"class":112},[34,161533,161383],{"class":2427},[34,161535,161536],{"class":59},"(name):\n",[34,161538,161539,161541,161543,161545,161547,161549,161551,161553,161555],{"class":36,"line":44},[34,161540,31762],{"class":63},[34,161542,617],{"class":59},[34,161544,667],{"class":112},[34,161546,157441],{"class":187},[34,161548,1501],{"class":63},[34,161550,80271],{"class":59},[34,161552,1550],{"class":63},[34,161554,860],{"class":187},[34,161556,623],{"class":59},[34,161558,161559],{"class":36,"line":50},[34,161560,2864],{"emptyLinePlaceholder":540},[34,161562,161563],{"class":36,"line":56},[34,161564,2864],{"emptyLinePlaceholder":540},[34,161566,161567,161570,161572],{"class":36,"line":107},[34,161568,161569],{"class":59},"say_hello(",[34,161571,150275],{"class":187},[34,161573,623],{"class":59},[34,161575,161576,161578,161580],{"class":36,"line":196},[34,161577,161569],{"class":59},[34,161579,151323],{"class":187},[34,161581,623],{"class":59},[14,161583,161584,161586,161587,161589],{},[31,161585,80271],{}," 是形参，",[31,161588,150275],{}," 是实参。",[14,161591,161592],{},"多个参数：",[25,161594,161596],{"className":27,"code":161595,"language":29,"meta":22,"style":22},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[31,161597,161598,161606,161619,161625,161629,161633],{"__ignoreMap":22},[34,161599,161600,161602,161604],{"class":36,"line":37},[34,161601,32410],{"class":112},[34,161603,5673],{"class":2427},[34,161605,151480],{"class":59},[34,161607,161608,161611,161613,161615,161617],{"class":36,"line":44},[34,161609,161610],{"class":59},"    result ",[34,161612,447],{"class":112},[34,161614,11333],{"class":59},[34,161616,1088],{"class":112},[34,161618,151491],{"class":59},[34,161620,161621,161623],{"class":36,"line":50},[34,161622,31762],{"class":63},[34,161624,77046],{"class":59},[34,161626,161627],{"class":36,"line":56},[34,161628,2864],{"emptyLinePlaceholder":540},[34,161630,161631],{"class":36,"line":107},[34,161632,2864],{"emptyLinePlaceholder":540},[34,161634,161635,161638,161640,161642,161644],{"class":36,"line":196},[34,161636,161637],{"class":59},"add(",[34,161639,1053],{"class":63},[34,161641,12899],{"class":59},[34,161643,1306],{"class":63},[34,161645,623],{"class":59},[14,161647,161648],{},"调用时参数数量必须匹配。",[555,161650,161652],{"id":161651},"_55-返回值","5.5 返回值",[14,161654,161655,161657],{},[31,161656,17510],{}," 用于把函数内部的结果返回给调用者。",[25,161659,161661],{"className":27,"code":161660,"language":29,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[31,161662,161663,161671,161681,161685,161689,161707],{"__ignoreMap":22},[34,161664,161665,161667,161669],{"class":36,"line":37},[34,161666,32410],{"class":112},[34,161668,5673],{"class":2427},[34,161670,151480],{"class":59},[34,161672,161673,161675,161677,161679],{"class":36,"line":44},[34,161674,4554],{"class":112},[34,161676,11333],{"class":59},[34,161678,1088],{"class":112},[34,161680,151491],{"class":59},[34,161682,161683],{"class":36,"line":50},[34,161684,2864],{"emptyLinePlaceholder":540},[34,161686,161687],{"class":36,"line":56},[34,161688,2864],{"emptyLinePlaceholder":540},[34,161690,161691,161694,161696,161699,161701,161703,161705],{"class":36,"line":107},[34,161692,161693],{"class":59},"result ",[34,161695,447],{"class":112},[34,161697,161698],{"class":59}," add(",[34,161700,1053],{"class":63},[34,161702,12899],{"class":59},[34,161704,1306],{"class":63},[34,161706,623],{"class":59},[34,161708,161709,161711],{"class":36,"line":196},[34,161710,30878],{"class":63},[34,161712,77046],{"class":59},[14,161714,161715,161716,161718,161719,28850],{},"如果函数没有写 ",[31,161717,17510],{},"，默认返回 ",[31,161720,96145],{},[25,161722,161724],{"className":27,"code":161723,"language":29,"meta":22,"style":22},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[31,161725,161726,161734,161744,161748,161752,161761],{"__ignoreMap":22},[34,161727,161728,161730,161732],{"class":36,"line":37},[34,161729,32410],{"class":112},[34,161731,161383],{"class":2427},[34,161733,32416],{"class":59},[34,161735,161736,161738,161740,161742],{"class":36,"line":44},[34,161737,31762],{"class":63},[34,161739,617],{"class":59},[34,161741,6308],{"class":187},[34,161743,623],{"class":59},[34,161745,161746],{"class":36,"line":50},[34,161747,2864],{"emptyLinePlaceholder":540},[34,161749,161750],{"class":36,"line":56},[34,161751,2864],{"emptyLinePlaceholder":540},[34,161753,161754,161756,161758],{"class":36,"line":107},[34,161755,161693],{"class":59},[34,161757,447],{"class":112},[34,161759,161760],{"class":59}," say_hello()\n",[34,161762,161763,161765,161768],{"class":36,"line":196},[34,161764,30878],{"class":63},[34,161766,161767],{"class":59},"(result)  ",[34,161769,161770],{"class":40},"# None\n",[555,161772,161774],{"id":161773},"_56-return的作用","5.6 return的作用",[14,161776,161777,161779],{},[31,161778,17510],{}," 有两个作用：",[567,161781,161782,161785],{},[570,161783,161784],{},"返回结果。",[570,161786,161787],{},"结束函数。",[25,161789,161791],{"className":27,"code":161790,"language":29,"meta":22,"style":22},"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",[31,161792,161793,161803,161815,161822,161826,161838,161845,161849,161856,161860,161864,161875],{"__ignoreMap":22},[34,161794,161795,161797,161800],{"class":36,"line":37},[34,161796,32410],{"class":112},[34,161798,161799],{"class":2427}," check_age",[34,161801,161802],{"class":59},"(age):\n",[34,161804,161805,161807,161809,161811,161813],{"class":36,"line":44},[34,161806,3565],{"class":112},[34,161808,16171],{"class":59},[34,161810,1515],{"class":112},[34,161812,4557],{"class":63},[34,161814,4203],{"class":59},[34,161816,161817,161819],{"class":36,"line":50},[34,161818,15216],{"class":112},[34,161820,161821],{"class":187}," \"年龄不合法\"\n",[34,161823,161824],{"class":36,"line":56},[34,161825,2864],{"emptyLinePlaceholder":540},[34,161827,161828,161830,161832,161834,161836],{"class":36,"line":107},[34,161829,3565],{"class":112},[34,161831,16171],{"class":59},[34,161833,2174],{"class":112},[34,161835,156672],{"class":63},[34,161837,4203],{"class":59},[34,161839,161840,161842],{"class":36,"line":196},[34,161841,15216],{"class":112},[34,161843,161844],{"class":187}," \"成年人\"\n",[34,161846,161847],{"class":36,"line":202},[34,161848,2864],{"emptyLinePlaceholder":540},[34,161850,161851,161853],{"class":36,"line":207},[34,161852,4554],{"class":112},[34,161854,161855],{"class":187}," \"未成年人\"\n",[34,161857,161858],{"class":36,"line":222},[34,161859,2864],{"emptyLinePlaceholder":540},[34,161861,161862],{"class":36,"line":227},[34,161863,2864],{"emptyLinePlaceholder":540},[34,161865,161866,161868,161871,161873],{"class":36,"line":232},[34,161867,30878],{"class":63},[34,161869,161870],{"class":59},"(check_age(",[34,161872,1306],{"class":63},[34,161874,30960],{"class":59},[34,161876,161877,161879,161881,161883,161885],{"class":36,"line":238},[34,161878,30878],{"class":63},[34,161880,161870],{"class":59},[34,161882,113],{"class":112},[34,161884,64],{"class":63},[34,161886,30960],{"class":59},[14,161888,161889,161890,161892],{},"函数执行到 ",[31,161891,17510],{}," 后，后面的代码不会继续执行。",[555,161894,161896],{"id":161895},"_57-none","5.7 None",[14,161898,161899,161901],{},[31,161900,96145],{}," 表示空值或没有结果。",[14,161903,161904],{},"常见使用场景：",[567,161906,161907,161910,161913],{},[570,161908,161909],{},"函数没有返回值。",[570,161911,161912],{},"变量暂时没有具体值。",[570,161914,161915],{},"表示查询不到结果。",[25,161917,161919],{"className":27,"code":161918,"language":29,"meta":22,"style":22},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[31,161920,161921,161929,161933,161946],{"__ignoreMap":22},[34,161922,161923,161925,161927],{"class":36,"line":37},[34,161924,161693],{"class":59},[34,161926,447],{"class":112},[34,161928,152559],{"class":63},[34,161930,161931],{"class":36,"line":44},[34,161932,2864],{"emptyLinePlaceholder":540},[34,161934,161935,161937,161940,161942,161944],{"class":36,"line":50},[34,161936,2002],{"class":112},[34,161938,161939],{"class":59}," result ",[34,161941,39389],{"class":112},[34,161943,39395],{"class":63},[34,161945,4203],{"class":59},[34,161947,161948,161950,161952,161955],{"class":36,"line":56},[34,161949,31762],{"class":63},[34,161951,617],{"class":59},[34,161953,161954],{"class":187},"\"没有数据\"",[34,161956,623],{"class":59},[14,161958,161959,161960,161962,161963,161966,161967,28850],{},"判断 ",[31,161961,96145],{}," 推荐使用 ",[31,161964,161965],{},"is None","，不要写成 ",[31,161968,161969],{},"== None",[555,161971,161973],{"id":161972},"_58-函数文档字符串","5.8 函数文档字符串",[14,161975,161976],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[25,161978,161980],{"className":27,"code":161979,"language":29,"meta":22,"style":22},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[31,161981,161982,161992,161997],{"__ignoreMap":22},[34,161983,161984,161986,161989],{"class":36,"line":37},[34,161985,32410],{"class":112},[34,161987,161988],{"class":2427}," calculate_bmi",[34,161990,161991],{"class":59},"(weight, height):\n",[34,161993,161994],{"class":36,"line":44},[34,161995,161996],{"class":187},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[34,161998,161999,162001,162004,162006,162009,162011],{"class":36,"line":50},[34,162000,4554],{"class":112},[34,162002,162003],{"class":59}," weight ",[34,162005,1190],{"class":112},[34,162007,162008],{"class":59}," height ",[34,162010,11125],{"class":112},[34,162012,48184],{"class":63},[14,162014,162015],{},"查看说明：",[25,162017,162019],{"className":27,"code":162018,"language":29,"meta":22,"style":22},"help(calculate_bmi)\n",[31,162020,162021],{"__ignoreMap":22},[34,162022,162023,162026],{"class":36,"line":37},[34,162024,162025],{"class":63},"help",[34,162027,162028],{"class":59},"(calculate_bmi)\n",[14,162030,162031],{},"较完整的写法：",[25,162033,162035],{"className":27,"code":162034,"language":29,"meta":22,"style":22},"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",[31,162036,162037,162045,162050,162055,162059,162064,162069,162074,162078],{"__ignoreMap":22},[34,162038,162039,162041,162043],{"class":36,"line":37},[34,162040,32410],{"class":112},[34,162042,161988],{"class":2427},[34,162044,161991],{"class":59},[34,162046,162047],{"class":36,"line":44},[34,162048,162049],{"class":187},"    \"\"\"\n",[34,162051,162052],{"class":36,"line":50},[34,162053,162054],{"class":187},"    计算BMI。\n",[34,162056,162057],{"class":36,"line":56},[34,162058,2864],{"emptyLinePlaceholder":540},[34,162060,162061],{"class":36,"line":107},[34,162062,162063],{"class":187},"    :param weight: 体重，单位kg\n",[34,162065,162066],{"class":36,"line":196},[34,162067,162068],{"class":187},"    :param height: 身高，单位m\n",[34,162070,162071],{"class":36,"line":202},[34,162072,162073],{"class":187},"    :return: BMI数值\n",[34,162075,162076],{"class":36,"line":207},[34,162077,162049],{"class":187},[34,162079,162080,162082,162084,162086,162088,162090],{"class":36,"line":222},[34,162081,4554],{"class":112},[34,162083,162003],{"class":59},[34,162085,1190],{"class":112},[34,162087,162008],{"class":59},[34,162089,11125],{"class":112},[34,162091,48184],{"class":63},[555,162093,162095],{"id":162094},"_59-变量作用域","5.9 变量作用域",[584,162097,162099],{"id":162098},"_591-局部变量","5.9.1 局部变量",[14,162101,162102],{},"在函数内部定义的变量，只能在函数内部使用。",[25,162104,162106],{"className":27,"code":162105,"language":29,"meta":22,"style":22},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[31,162107,162108,162117,162125,162131,162135,162139,162144],{"__ignoreMap":22},[34,162109,162110,162112,162115],{"class":36,"line":37},[34,162111,32410],{"class":112},[34,162113,162114],{"class":2427}," test",[34,162116,32416],{"class":59},[34,162118,162119,162121,162123],{"class":36,"line":44},[34,162120,46054],{"class":59},[34,162122,447],{"class":112},[34,162124,58889],{"class":63},[34,162126,162127,162129],{"class":36,"line":50},[34,162128,31762],{"class":63},[34,162130,630],{"class":59},[34,162132,162133],{"class":36,"line":56},[34,162134,2864],{"emptyLinePlaceholder":540},[34,162136,162137],{"class":36,"line":107},[34,162138,2864],{"emptyLinePlaceholder":540},[34,162140,162141],{"class":36,"line":196},[34,162142,162143],{"class":59},"test()\n",[34,162145,162146,162148,162151],{"class":36,"line":202},[34,162147,30878],{"class":63},[34,162149,162150],{"class":59},"(num)  ",[34,162152,162153],{"class":40},"# 报错\n",[584,162155,162157],{"id":162156},"_592-全局变量","5.9.2 全局变量",[14,162159,162160],{},"在函数外部定义的变量，可以在函数内部读取。",[25,162162,162164],{"className":27,"code":162163,"language":29,"meta":22,"style":22},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[31,162165,162166,162174,162178,162182,162190,162196,162200,162204],{"__ignoreMap":22},[34,162167,162168,162170,162172],{"class":36,"line":37},[34,162169,146923],{"class":59},[34,162171,447],{"class":112},[34,162173,149740],{"class":187},[34,162175,162176],{"class":36,"line":44},[34,162177,2864],{"emptyLinePlaceholder":540},[34,162179,162180],{"class":36,"line":50},[34,162181,2864],{"emptyLinePlaceholder":540},[34,162183,162184,162186,162188],{"class":36,"line":56},[34,162185,32410],{"class":112},[34,162187,161383],{"class":2427},[34,162189,32416],{"class":59},[34,162191,162192,162194],{"class":36,"line":107},[34,162193,31762],{"class":63},[34,162195,151047],{"class":59},[34,162197,162198],{"class":36,"line":196},[34,162199,2864],{"emptyLinePlaceholder":540},[34,162201,162202],{"class":36,"line":202},[34,162203,2864],{"emptyLinePlaceholder":540},[34,162205,162206],{"class":36,"line":207},[34,162207,161418],{"class":59},[14,162209,162210,162211,28850],{},"如果要在函数内部修改全局变量，需要 ",[31,162212,162213],{},"global",[25,162215,162217],{"className":27,"code":162216,"language":29,"meta":22,"style":22},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[31,162218,162219,162227,162231,162235,162244,162252,162260,162264,162268,162273],{"__ignoreMap":22},[34,162220,162221,162223,162225],{"class":36,"line":37},[34,162222,147078],{"class":59},[34,162224,447],{"class":112},[34,162226,47794],{"class":63},[34,162228,162229],{"class":36,"line":44},[34,162230,2864],{"emptyLinePlaceholder":540},[34,162232,162233],{"class":36,"line":50},[34,162234,2864],{"emptyLinePlaceholder":540},[34,162236,162237,162239,162242],{"class":36,"line":56},[34,162238,32410],{"class":112},[34,162240,162241],{"class":2427}," add_count",[34,162243,32416],{"class":59},[34,162245,162246,162249],{"class":36,"line":107},[34,162247,162248],{"class":112},"    global",[34,162250,162251],{"class":59}," count\n",[34,162253,162254,162256,162258],{"class":36,"line":196},[34,162255,159820],{"class":59},[34,162257,9941],{"class":112},[34,162259,56160],{"class":63},[34,162261,162262],{"class":36,"line":202},[34,162263,2864],{"emptyLinePlaceholder":540},[34,162265,162266],{"class":36,"line":207},[34,162267,2864],{"emptyLinePlaceholder":540},[34,162269,162270],{"class":36,"line":222},[34,162271,162272],{"class":59},"add_count()\n",[34,162274,162275,162277],{"class":36,"line":227},[34,162276,30878],{"class":63},[34,162278,162279],{"class":59},"(count)\n",[14,162281,162282],{},"不建议大量使用全局变量，项目变大后很难维护。",[555,162284,162286],{"id":162285},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162288,162289],{},"一个函数中可以调用另一个函数。",[25,162291,162293],{"className":27,"code":162292,"language":29,"meta":22,"style":22},"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",[31,162294,162295,162304,162318,162322,162326,162335,162340,162360,162381,162385,162389,162393],{"__ignoreMap":22},[34,162296,162297,162299,162302],{"class":36,"line":37},[34,162298,32410],{"class":112},[34,162300,162301],{"class":2427}," print_line",[34,162303,32416],{"class":59},[34,162305,162306,162308,162310,162312,162314,162316],{"class":36,"line":44},[34,162307,31762],{"class":63},[34,162309,617],{"class":59},[34,162311,32946],{"class":187},[34,162313,6982],{"class":112},[34,162315,79126],{"class":63},[34,162317,623],{"class":59},[34,162319,162320],{"class":36,"line":50},[34,162321,2864],{"emptyLinePlaceholder":540},[34,162323,162324],{"class":36,"line":56},[34,162325,2864],{"emptyLinePlaceholder":540},[34,162327,162328,162330,162333],{"class":36,"line":107},[34,162329,32410],{"class":112},[34,162331,162332],{"class":2427}," print_info",[34,162334,149762],{"class":59},[34,162336,162337],{"class":36,"line":196},[34,162338,162339],{"class":59},"    print_line()\n",[34,162341,162342,162344,162346,162348,162350,162352,162354,162356,162358],{"class":36,"line":202},[34,162343,31762],{"class":63},[34,162345,617],{"class":59},[34,162347,667],{"class":112},[34,162349,157069],{"class":187},[34,162351,1501],{"class":63},[34,162353,80271],{"class":59},[34,162355,1550],{"class":63},[34,162357,860],{"class":187},[34,162359,623],{"class":59},[34,162361,162362,162364,162366,162368,162371,162373,162375,162377,162379],{"class":36,"line":207},[34,162363,31762],{"class":63},[34,162365,617],{"class":59},[34,162367,667],{"class":112},[34,162369,162370],{"class":187},"\"年龄:",[34,162372,1501],{"class":63},[34,162374,70682],{"class":59},[34,162376,1550],{"class":63},[34,162378,860],{"class":187},[34,162380,623],{"class":59},[34,162382,162383],{"class":36,"line":222},[34,162384,162339],{"class":59},[34,162386,162387],{"class":36,"line":227},[34,162388,2864],{"emptyLinePlaceholder":540},[34,162390,162391],{"class":36,"line":232},[34,162392,2864],{"emptyLinePlaceholder":540},[34,162394,162395,162398,162400,162402,162404],{"class":36,"line":238},[34,162396,162397],{"class":59},"print_info(",[34,162399,150275],{"class":187},[34,162401,12899],{"class":59},[34,162403,1256],{"class":63},[34,162405,623],{"class":59},[14,162407,162408],{},"这种方式可以把小功能组合成大功能。",[555,162410,162412],{"id":162411},"_511-参数检查","5.11 参数检查",[14,162414,162415],{},"函数内部可以检查参数是否合法。",[25,162417,162419],{"className":27,"code":162418,"language":29,"meta":22,"style":22},"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",[31,162420,162421,162430,162442,162448,162458,162462,162466,162483,162487,162499,162510,162516],{"__ignoreMap":22},[34,162422,162423,162425,162428],{"class":36,"line":37},[34,162424,32410],{"class":112},[34,162426,162427],{"class":2427}," divide",[34,162429,151480],{"class":59},[34,162431,162432,162434,162436,162438,162440],{"class":36,"line":44},[34,162433,3565],{"class":112},[34,162435,11346],{"class":59},[34,162437,3413],{"class":112},[34,162439,4557],{"class":63},[34,162441,4203],{"class":59},[34,162443,162444,162446],{"class":36,"line":50},[34,162445,15216],{"class":112},[34,162447,152559],{"class":63},[34,162449,162450,162452,162454,162456],{"class":36,"line":56},[34,162451,4554],{"class":112},[34,162453,11333],{"class":59},[34,162455,1190],{"class":112},[34,162457,151491],{"class":59},[34,162459,162460],{"class":36,"line":107},[34,162461,2864],{"emptyLinePlaceholder":540},[34,162463,162464],{"class":36,"line":196},[34,162465,2864],{"emptyLinePlaceholder":540},[34,162467,162468,162470,162472,162475,162477,162479,162481],{"class":36,"line":202},[34,162469,161693],{"class":59},[34,162471,447],{"class":112},[34,162473,162474],{"class":59}," divide(",[34,162476,1053],{"class":63},[34,162478,12899],{"class":59},[34,162480,319],{"class":63},[34,162482,623],{"class":59},[34,162484,162485],{"class":36,"line":207},[34,162486,2864],{"emptyLinePlaceholder":540},[34,162488,162489,162491,162493,162495,162497],{"class":36,"line":222},[34,162490,2002],{"class":112},[34,162492,161939],{"class":59},[34,162494,39389],{"class":112},[34,162496,39395],{"class":63},[34,162498,4203],{"class":59},[34,162500,162501,162503,162505,162508],{"class":36,"line":227},[34,162502,31762],{"class":63},[34,162504,617],{"class":59},[34,162506,162507],{"class":187},"\"除数不能为0\"",[34,162509,623],{"class":59},[34,162511,162512,162514],{"class":36,"line":232},[34,162513,2165],{"class":112},[34,162515,4203],{"class":59},[34,162517,162518,162520],{"class":36,"line":238},[34,162519,31762],{"class":63},[34,162521,77046],{"class":59},[555,162523,162525],{"id":162524},"_512-类型提示","5.12 类型提示",[14,162527,162528],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[25,162530,162532],{"className":27,"code":162531,"language":29,"meta":22,"style":22},"def add(a: int, b: int) -> int:\n    return a + b\n",[31,162533,162534,162557],{"__ignoreMap":22},[34,162535,162536,162538,162540,162543,162545,162548,162550,162553,162555],{"class":36,"line":37},[34,162537,32410],{"class":112},[34,162539,5673],{"class":2427},[34,162541,162542],{"class":59},"(a: ",[34,162544,620],{"class":63},[34,162546,162547],{"class":59},", b: ",[34,162549,620],{"class":63},[34,162551,162552],{"class":59},") -> ",[34,162554,620],{"class":63},[34,162556,4203],{"class":59},[34,162558,162559,162561,162563,162565],{"class":36,"line":44},[34,162560,4554],{"class":112},[34,162562,11333],{"class":59},[34,162564,1088],{"class":112},[34,162566,151491],{"class":59},[14,162568,162569],{},"字符串参数：",[25,162571,162573],{"className":27,"code":162572,"language":29,"meta":22,"style":22},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[31,162574,162575,162592],{"__ignoreMap":22},[34,162576,162577,162579,162581,162584,162586,162588,162590],{"class":36,"line":37},[34,162578,32410],{"class":112},[34,162580,161383],{"class":2427},[34,162582,162583],{"class":59},"(name: ",[34,162585,1774],{"class":63},[34,162587,162552],{"class":59},[34,162589,96145],{"class":63},[34,162591,4203],{"class":59},[34,162593,162594,162596,162598,162600,162602,162604,162606,162608,162610],{"class":36,"line":44},[34,162595,31762],{"class":63},[34,162597,617],{"class":59},[34,162599,667],{"class":112},[34,162601,157441],{"class":187},[34,162603,1501],{"class":63},[34,162605,80271],{"class":59},[34,162607,1550],{"class":63},[34,162609,860],{"class":187},[34,162611,623],{"class":59},[14,162613,162614],{},"列表参数：",[25,162616,162618],{"className":27,"code":162617,"language":29,"meta":22,"style":22},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[31,162619,162620,162639,162647,162659,162668],{"__ignoreMap":22},[34,162621,162622,162624,162627,162630,162632,162635,162637],{"class":36,"line":37},[34,162623,32410],{"class":112},[34,162625,162626],{"class":2427}," get_total",[34,162628,162629],{"class":59},"(numbers: list[",[34,162631,620],{"class":63},[34,162633,162634],{"class":59},"]) -> ",[34,162636,620],{"class":63},[34,162638,4203],{"class":59},[34,162640,162641,162643,162645],{"class":36,"line":44},[34,162642,159694],{"class":59},[34,162644,447],{"class":112},[34,162646,47794],{"class":63},[34,162648,162649,162651,162654,162656],{"class":36,"line":50},[34,162650,3665],{"class":112},[34,162652,162653],{"class":59}," number ",[34,162655,26508],{"class":112},[34,162657,162658],{"class":59}," numbers:\n",[34,162660,162661,162663,162665],{"class":36,"line":56},[34,162662,160369],{"class":59},[34,162664,9941],{"class":112},[34,162666,162667],{"class":59}," number\n",[34,162669,162670,162672],{"class":36,"line":107},[34,162671,4554],{"class":112},[34,162673,162674],{"class":59}," total\n",[14,162676,162677],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[555,162679,162681],{"id":162680},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[25,162683,162685],{"className":27,"code":162684,"language":29,"meta":22,"style":22},"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",[31,162686,162687,162697,162701,162705,162713,162724,162734,162744,162754,162764,162768,162772,162781,162803,162807,162811,162820,162826,162846,162858,162869,162873,162882,162893,162898,162902,162906,162915,162921,162940,162952,162962,162966,162977,162987,162991,162999,163010,163014,163018,163022,163030,163035,163049,163053,163065,163070,163082,163087,163099,163104,163116,163126,163130,163136],{"__ignoreMap":22},[34,162688,162689,162692,162694],{"class":36,"line":37},[34,162690,162691],{"class":59},"balance ",[34,162693,447],{"class":112},[34,162695,162696],{"class":63}," 1000\n",[34,162698,162699],{"class":36,"line":44},[34,162700,2864],{"emptyLinePlaceholder":540},[34,162702,162703],{"class":36,"line":50},[34,162704,2864],{"emptyLinePlaceholder":540},[34,162706,162707,162709,162711],{"class":36,"line":56},[34,162708,32410],{"class":112},[34,162710,152420],{"class":2427},[34,162712,32416],{"class":59},[34,162714,162715,162717,162719,162722],{"class":36,"line":107},[34,162716,31762],{"class":63},[34,162718,617],{"class":59},[34,162720,162721],{"class":187},"\"====== ATM ======\"",[34,162723,623],{"class":59},[34,162725,162726,162728,162730,162732],{"class":36,"line":196},[34,162727,31762],{"class":63},[34,162729,617],{"class":59},[34,162731,161035],{"class":187},[34,162733,623],{"class":59},[34,162735,162736,162738,162740,162742],{"class":36,"line":202},[34,162737,31762],{"class":63},[34,162739,617],{"class":59},[34,162741,161046],{"class":187},[34,162743,623],{"class":59},[34,162745,162746,162748,162750,162752],{"class":36,"line":207},[34,162747,31762],{"class":63},[34,162749,617],{"class":59},[34,162751,161057],{"class":187},[34,162753,623],{"class":59},[34,162755,162756,162758,162760,162762],{"class":36,"line":222},[34,162757,31762],{"class":63},[34,162759,617],{"class":59},[34,162761,161068],{"class":187},[34,162763,623],{"class":59},[34,162765,162766],{"class":36,"line":227},[34,162767,2864],{"emptyLinePlaceholder":540},[34,162769,162770],{"class":36,"line":232},[34,162771,2864],{"emptyLinePlaceholder":540},[34,162773,162774,162776,162779],{"class":36,"line":238},[34,162775,32410],{"class":112},[34,162777,162778],{"class":2427}," show_balance",[34,162780,32416],{"class":59},[34,162782,162783,162785,162787,162789,162792,162794,162797,162799,162801],{"class":36,"line":244},[34,162784,31762],{"class":63},[34,162786,617],{"class":59},[34,162788,667],{"class":112},[34,162790,162791],{"class":187},"\"当前余额:",[34,162793,1501],{"class":63},[34,162795,162796],{"class":59},"balance",[34,162798,1550],{"class":63},[34,162800,157399],{"class":187},[34,162802,623],{"class":59},[34,162804,162805],{"class":36,"line":250},[34,162806,2864],{"emptyLinePlaceholder":540},[34,162808,162809],{"class":36,"line":256},[34,162810,2864],{"emptyLinePlaceholder":540},[34,162812,162813,162815,162818],{"class":36,"line":261},[34,162814,32410],{"class":112},[34,162816,162817],{"class":2427}," save_money",[34,162819,32416],{"class":59},[34,162821,162822,162824],{"class":36,"line":267},[34,162823,162248],{"class":112},[34,162825,150486],{"class":59},[34,162827,162828,162831,162833,162835,162837,162839,162841,162844],{"class":36,"line":2138},[34,162829,162830],{"class":59},"    money ",[34,162832,447],{"class":112},[34,162834,110184],{"class":63},[34,162836,617],{"class":59},[34,162838,54282],{"class":63},[34,162840,617],{"class":59},[34,162842,162843],{"class":187},"\"请输入存款金额:\"",[34,162845,30960],{"class":59},[34,162847,162848,162850,162852,162854,162856],{"class":36,"line":2143},[34,162849,3565],{"class":112},[34,162851,150529],{"class":59},[34,162853,2059],{"class":112},[34,162855,4557],{"class":63},[34,162857,4203],{"class":59},[34,162859,162860,162862,162864,162867],{"class":36,"line":2157},[34,162861,32914],{"class":63},[34,162863,617],{"class":59},[34,162865,162866],{"class":187},"\"金额必须大于0\"",[34,162868,623],{"class":59},[34,162870,162871],{"class":36,"line":2162},[34,162872,152748],{"class":112},[34,162874,162875,162878,162880],{"class":36,"line":2191},[34,162876,162877],{"class":59},"    balance ",[34,162879,9941],{"class":112},[34,162881,150562],{"class":59},[34,162883,162884,162886,162888,162891],{"class":36,"line":2196},[34,162885,31762],{"class":63},[34,162887,617],{"class":59},[34,162889,162890],{"class":187},"\"存款成功\"",[34,162892,623],{"class":59},[34,162894,162895],{"class":36,"line":2213},[34,162896,162897],{"class":59},"    show_balance()\n",[34,162899,162900],{"class":36,"line":2218},[34,162901,2864],{"emptyLinePlaceholder":540},[34,162903,162904],{"class":36,"line":2223},[34,162905,2864],{"emptyLinePlaceholder":540},[34,162907,162908,162910,162913],{"class":36,"line":2228},[34,162909,32410],{"class":112},[34,162911,162912],{"class":2427}," withdraw_money",[34,162914,32416],{"class":59},[34,162916,162917,162919],{"class":36,"line":2242},[34,162918,162248],{"class":112},[34,162920,150486],{"class":59},[34,162922,162923,162925,162927,162929,162931,162933,162935,162938],{"class":36,"line":2247},[34,162924,162830],{"class":59},[34,162926,447],{"class":112},[34,162928,110184],{"class":63},[34,162930,617],{"class":59},[34,162932,54282],{"class":63},[34,162934,617],{"class":59},[34,162936,162937],{"class":187},"\"请输入取款金额:\"",[34,162939,30960],{"class":59},[34,162941,162942,162944,162946,162948,162950],{"class":36,"line":3041},[34,162943,3565],{"class":112},[34,162945,150529],{"class":59},[34,162947,2059],{"class":112},[34,162949,4557],{"class":63},[34,162951,4203],{"class":59},[34,162953,162954,162956,162958,162960],{"class":36,"line":3055},[34,162955,32914],{"class":63},[34,162957,617],{"class":59},[34,162959,162866],{"class":187},[34,162961,623],{"class":59},[34,162963,162964],{"class":36,"line":3063},[34,162965,152748],{"class":112},[34,162967,162968,162970,162972,162974],{"class":36,"line":3068},[34,162969,3565],{"class":112},[34,162971,150529],{"class":59},[34,162973,1564],{"class":112},[34,162975,162976],{"class":59}," balance:\n",[34,162978,162979,162981,162983,162985],{"class":36,"line":3074},[34,162980,32914],{"class":63},[34,162982,617],{"class":59},[34,162984,150624],{"class":187},[34,162986,623],{"class":59},[34,162988,162989],{"class":36,"line":3080},[34,162990,152748],{"class":112},[34,162992,162993,162995,162997],{"class":36,"line":3085},[34,162994,162877],{"class":59},[34,162996,150639],{"class":112},[34,162998,150562],{"class":59},[34,163000,163001,163003,163005,163008],{"class":36,"line":8412},[34,163002,31762],{"class":63},[34,163004,617],{"class":59},[34,163006,163007],{"class":187},"\"取款成功\"",[34,163009,623],{"class":59},[34,163011,163012],{"class":36,"line":8436},[34,163013,162897],{"class":59},[34,163015,163016],{"class":36,"line":8441},[34,163017,2864],{"emptyLinePlaceholder":540},[34,163019,163020],{"class":36,"line":8447},[34,163021,2864],{"emptyLinePlaceholder":540},[34,163023,163024,163026,163028],{"class":36,"line":8474},[34,163025,109050],{"class":112},[34,163027,95751],{"class":63},[34,163029,4203],{"class":59},[34,163031,163032],{"class":36,"line":8479},[34,163033,163034],{"class":59},"    show_menu()\n",[34,163036,163037,163039,163041,163043,163045,163047],{"class":36,"line":8485},[34,163038,161079],{"class":59},[34,163040,447],{"class":112},[34,163042,61066],{"class":63},[34,163044,617],{"class":59},[34,163046,153460],{"class":187},[34,163048,623],{"class":59},[34,163050,163051],{"class":36,"line":8497},[34,163052,2864],{"emptyLinePlaceholder":540},[34,163054,163055,163057,163059,163061,163063],{"class":36,"line":8509},[34,163056,3565],{"class":112},[34,163058,153473],{"class":59},[34,163060,3413],{"class":112},[34,163062,153478],{"class":187},[34,163064,4203],{"class":59},[34,163066,163067],{"class":36,"line":8521},[34,163068,163069],{"class":59},"        show_balance()\n",[34,163071,163072,163074,163076,163078,163080],{"class":36,"line":10180},[34,163073,39755],{"class":112},[34,163075,153473],{"class":59},[34,163077,3413],{"class":112},[34,163079,153497],{"class":187},[34,163081,4203],{"class":59},[34,163083,163084],{"class":36,"line":10205},[34,163085,163086],{"class":59},"        save_money()\n",[34,163088,163089,163091,163093,163095,163097],{"class":36,"line":10228},[34,163090,39755],{"class":112},[34,163092,153473],{"class":59},[34,163094,3413],{"class":112},[34,163096,153515],{"class":187},[34,163098,4203],{"class":59},[34,163100,163101],{"class":36,"line":10252},[34,163102,163103],{"class":59},"        withdraw_money()\n",[34,163105,163106,163108,163110,163112,163114],{"class":36,"line":10257},[34,163107,39755],{"class":112},[34,163109,153473],{"class":59},[34,163111,3413],{"class":112},[34,163113,153569],{"class":187},[34,163115,4203],{"class":59},[34,163117,163118,163120,163122,163124],{"class":36,"line":10262},[34,163119,32914],{"class":63},[34,163121,617],{"class":59},[34,163123,153580],{"class":187},[34,163125,623],{"class":59},[34,163127,163128],{"class":36,"line":10267},[34,163129,32090],{"class":112},[34,163131,163132,163134],{"class":36,"line":10276},[34,163133,158409],{"class":112},[34,163135,4203],{"class":59},[34,163137,163138,163140,163142,163144],{"class":36,"line":10281},[34,163139,32914],{"class":63},[34,163141,617],{"class":59},[34,163143,153601],{"class":187},[34,163145,623],{"class":59},[14,163147,163148],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[555,163150,163152],{"id":163151},"_514-易错点","5.14 易错点",[567,163154,163155,163158,163161,163166,163171,163174],{},[570,163156,163157],{},"函数定义后必须调用才会执行。",[570,163159,163160],{},"函数名后面有括号才是调用。",[570,163162,163163,163165],{},[31,163164,17510],{}," 后面的代码不会执行。",[570,163167,163168,163169,28850],{},"没有返回值的函数默认返回 ",[31,163170,96145],{},[570,163172,163173],{},"局部变量不能在函数外部访问。",[570,163175,163176,163177,163179],{},"不要滥用 ",[31,163178,162213],{},"，更好的方式是让函数返回新值。",[14,163181,163182,163183,163185],{},"例如不用 ",[31,163184,162213],{}," 改写存款：",[25,163187,163189],{"className":27,"code":163188,"language":29,"meta":22,"style":22},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[31,163190,163191,163200,163211,163215,163219,163227,163240],{"__ignoreMap":22},[34,163192,163193,163195,163197],{"class":36,"line":37},[34,163194,32410],{"class":112},[34,163196,162817],{"class":2427},[34,163198,163199],{"class":59},"(balance, money):\n",[34,163201,163202,163204,163207,163209],{"class":36,"line":44},[34,163203,4554],{"class":112},[34,163205,163206],{"class":59}," balance ",[34,163208,1088],{"class":112},[34,163210,150562],{"class":59},[34,163212,163213],{"class":36,"line":50},[34,163214,2864],{"emptyLinePlaceholder":540},[34,163216,163217],{"class":36,"line":56},[34,163218,2864],{"emptyLinePlaceholder":540},[34,163220,163221,163223,163225],{"class":36,"line":107},[34,163222,162691],{"class":59},[34,163224,447],{"class":112},[34,163226,162696],{"class":63},[34,163228,163229,163231,163233,163236,163238],{"class":36,"line":196},[34,163230,162691],{"class":59},[34,163232,447],{"class":112},[34,163234,163235],{"class":59}," save_money(balance, ",[34,163237,2186],{"class":63},[34,163239,623],{"class":59},[34,163241,163242,163244],{"class":36,"line":202},[34,163243,30878],{"class":63},[34,163245,163246],{"class":59},"(balance)\n",[555,163248,163250],{"id":163249},"_515-本章练习","5.15 本章练习",[567,163252,163253,163260,163266,163272,163278],{},[570,163254,163255,163256,163259],{},"定义函数 ",[31,163257,163258],{},"print_student(name, age)","，输出学生信息。",[570,163261,163255,163262,163265],{},[31,163263,163264],{},"get_max(a, b, c)","，返回三个数中的最大值。",[570,163267,163255,163268,163271],{},[31,163269,163270],{},"is_even(num)","，判断一个数是否为偶数。",[570,163273,163255,163274,163277],{},[31,163275,163276],{},"calculate_bmi(weight, height)","，返回 BMI。",[570,163279,163280],{},"把第 4 章的菜单程序拆分成多个函数。",[532,163282,163283],{},"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":22,"searchDepth":44,"depth":44,"links":163285},[163286,163287,163288,163289,163290,163291,163292,163293,163294,163298,163299,163300,163301,163302,163303],{"id":161306,"depth":44,"text":161307},{"id":161347,"depth":44,"text":161348},{"id":161437,"depth":44,"text":161438},{"id":161518,"depth":44,"text":161519},{"id":161651,"depth":44,"text":161652},{"id":161773,"depth":44,"text":161774},{"id":161895,"depth":44,"text":161896},{"id":161972,"depth":44,"text":161973},{"id":162094,"depth":44,"text":162095,"children":163295},[163296,163297],{"id":162098,"depth":50,"text":162099},{"id":162156,"depth":50,"text":162157},{"id":162285,"depth":44,"text":162286},{"id":162411,"depth":44,"text":162412},{"id":162524,"depth":44,"text":162525},{"id":162680,"depth":44,"text":162681},{"id":163151,"depth":44,"text":163152},{"id":163249,"depth":44,"text":163250},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161298,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163310,"title":163311,"body":163312,"description":537,"extension":538,"meta":166356,"navigation":540,"path":166357,"seo":166358,"stem":166359,"__hash__":166360},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163313,"toc":166337},[163314,163317,163321,163324,163327,163431,163434,163438,163441,163521,163524,163528,163531,163591,163594,163630,163633,163648,163652,163725,163728,163783,163786,163856,163859,163943,163953,164011,164015,164060,164063,164089,164092,164198,164202,164205,164247,164250,164314,164317,164321,164324,164385,164388,164418,164421,164459,164463,164466,164475,164478,164602,164605,164646,164650,164653,164664,164704,164707,164722,164727,164730,164797,164800,164890,164894,164897,164945,164948,164975,164977,165007,165010,165030,165033,165064,165067,165100,165104,165107,165131,165134,165158,165161,165185,165189,165192,165322,165325,165405,165408,165483,165487,165490,165540,165543,165585,165588,165612,165614,165638,165641,165696,165699,165765,165769,165772,165775,165813,165816,165869,165872,165918,165921,165954,165957,165961,166280,166284,166313,166317,166334],[10,163315,163311],{"id":163316},"_6-数据容器",[555,163318,163320],{"id":163319},"_61-什么是数据容器","6.1 什么是数据容器",[14,163322,163323],{},"数据容器用于一次保存多个数据。",[14,163325,163326],{},"常见容器：",[748,163328,163329,163346],{},[751,163330,163331],{},[754,163332,163333,163335,163338,163341,163344],{},[757,163334,26236],{},[757,163336,163337],{},"是否有序",[757,163339,163340],{},"是否可变",[757,163342,163343],{},"是否允许重复",[757,163345,27957],{},[795,163347,163348,163366,163382,163397,163414],{},[754,163349,163350,163353,163356,163359,163362],{},[800,163351,163352],{},"list列表",[800,163354,163355],{},"有序",[800,163357,163358],{},"可变",[800,163360,163361],{},"允许",[800,163363,163364],{},[31,163365,155644],{},[754,163367,163368,163371,163373,163376,163378],{},[800,163369,163370],{},"tuple元组",[800,163372,163355],{},[800,163374,163375],{},"不可变",[800,163377,163361],{},[800,163379,163380],{},[31,163381,155657],{},[754,163383,163384,163387,163389,163391,163393],{},[800,163385,163386],{},"str字符串",[800,163388,163355],{},[800,163390,163375],{},[800,163392,163361],{},[800,163394,163395],{},[31,163396,156267],{},[754,163398,163399,163402,163405,163407,163410],{},[800,163400,163401],{},"set集合",[800,163403,163404],{},"无序",[800,163406,163358],{},[800,163408,163409],{},"不允许",[800,163411,163412],{},[31,163413,155682],{},[754,163415,163416,163419,163421,163423,163426],{},[800,163417,163418],{},"dict字典",[800,163420,163355],{},[800,163422,163358],{},[800,163424,163425],{},"key不允许重复",[800,163427,163428],{},[31,163429,163430],{},"{\"name\": \"小明\"}",[14,163432,163433],{},"Python 3.7 之后，字典保持插入顺序。",[555,163435,163437],{"id":163436},"_62-列表list","6.2 列表list",[14,163439,163440],{},"列表用于保存一组有顺序的数据。",[25,163442,163444],{"className":27,"code":163443,"language":29,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[31,163445,163446,163466,163491,163512],{"__ignoreMap":22},[34,163447,163448,163450,163452,163454,163456,163458,163460,163462,163464],{"class":36,"line":37},[34,163449,160767],{"class":59},[34,163451,447],{"class":112},[34,163453,52687],{"class":59},[34,163455,150275],{"class":187},[34,163457,12899],{"class":59},[34,163459,151323],{"class":187},[34,163461,12899],{"class":59},[34,163463,160118],{"class":187},[34,163465,73],{"class":59},[34,163467,163468,163471,163473,163475,163477,163479,163481,163483,163485,163487,163489],{"class":36,"line":44},[34,163469,163470],{"class":59},"numbers ",[34,163472,447],{"class":112},[34,163474,52687],{"class":59},[34,163476,64],{"class":63},[34,163478,12899],{"class":59},[34,163480,70],{"class":63},[34,163482,12899],{"class":59},[34,163484,309],{"class":63},[34,163486,12899],{"class":59},[34,163488,217],{"class":63},[34,163490,73],{"class":59},[34,163492,163493,163496,163498,163500,163502,163504,163506,163508,163510],{"class":36,"line":50},[34,163494,163495],{"class":59},"mixed ",[34,163497,447],{"class":112},[34,163499,52687],{"class":59},[34,163501,150275],{"class":187},[34,163503,12899],{"class":59},[34,163505,1256],{"class":63},[34,163507,12899],{"class":59},[34,163509,31939],{"class":63},[34,163511,73],{"class":59},[34,163513,163514,163517,163519],{"class":36,"line":56},[34,163515,163516],{"class":59},"empty ",[34,163518,447],{"class":112},[34,163520,52299],{"class":59},[14,163522,163523],{},"推荐一个列表中保存同类数据，代码更清晰。",[555,163525,163527],{"id":163526},"_63-列表索引","6.3 列表索引",[14,163529,163530],{},"正向索引从 0 开始：",[25,163532,163534],{"className":27,"code":163533,"language":29,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[31,163535,163536,163556,163560,163571,163581],{"__ignoreMap":22},[34,163537,163538,163540,163542,163544,163546,163548,163550,163552,163554],{"class":36,"line":37},[34,163539,160767],{"class":59},[34,163541,447],{"class":112},[34,163543,52687],{"class":59},[34,163545,150275],{"class":187},[34,163547,12899],{"class":59},[34,163549,151323],{"class":187},[34,163551,12899],{"class":59},[34,163553,160118],{"class":187},[34,163555,73],{"class":59},[34,163557,163558],{"class":36,"line":44},[34,163559,2864],{"emptyLinePlaceholder":540},[34,163561,163562,163564,163567,163569],{"class":36,"line":50},[34,163563,30878],{"class":63},[34,163565,163566],{"class":59},"(names[",[34,163568,319],{"class":63},[34,163570,5121],{"class":59},[34,163572,163573,163575,163577,163579],{"class":36,"line":56},[34,163574,30878],{"class":63},[34,163576,163566],{"class":59},[34,163578,64],{"class":63},[34,163580,5121],{"class":59},[34,163582,163583,163585,163587,163589],{"class":36,"line":107},[34,163584,30878],{"class":63},[34,163586,163566],{"class":59},[34,163588,70],{"class":63},[34,163590,5121],{"class":59},[14,163592,163593],{},"反向索引从 -1 开始：",[25,163595,163597],{"className":27,"code":163596,"language":29,"meta":22,"style":22},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[31,163598,163599,163615],{"__ignoreMap":22},[34,163600,163601,163603,163605,163607,163609,163612],{"class":36,"line":37},[34,163602,30878],{"class":63},[34,163604,163566],{"class":59},[34,163606,113],{"class":112},[34,163608,64],{"class":63},[34,163610,163611],{"class":59},"])  ",[34,163613,163614],{"class":40},"# 小刚\n",[34,163616,163617,163619,163621,163623,163625,163627],{"class":36,"line":44},[34,163618,30878],{"class":63},[34,163620,163566],{"class":59},[34,163622,113],{"class":112},[34,163624,70],{"class":63},[34,163626,163611],{"class":59},[34,163628,163629],{"class":40},"# 小红\n",[14,163631,163632],{},"索引越界会报错：",[25,163634,163636],{"className":27,"code":163635,"language":29,"meta":22,"style":22},"print(names[3])\n",[31,163637,163638],{"__ignoreMap":22},[34,163639,163640,163642,163644,163646],{"class":36,"line":37},[34,163641,30878],{"class":63},[34,163643,163566],{"class":59},[34,163645,309],{"class":63},[34,163647,5121],{"class":59},[555,163649,163651],{"id":163650},"_64-列表常用方法","6.4 列表常用方法",[25,163653,163655],{"className":27,"code":163654,"language":29,"meta":22,"style":22},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[31,163656,163657,163673,163677,163686,163700,163714,163718],{"__ignoreMap":22},[34,163658,163659,163661,163663,163665,163667,163669,163671],{"class":36,"line":37},[34,163660,160767],{"class":59},[34,163662,447],{"class":112},[34,163664,52687],{"class":59},[34,163666,150275],{"class":187},[34,163668,12899],{"class":59},[34,163670,151323],{"class":187},[34,163672,73],{"class":59},[34,163674,163675],{"class":36,"line":44},[34,163676,2864],{"emptyLinePlaceholder":540},[34,163678,163679,163682,163684],{"class":36,"line":50},[34,163680,163681],{"class":59},"names.append(",[34,163683,160118],{"class":187},[34,163685,623],{"class":59},[34,163687,163688,163691,163693,163695,163698],{"class":36,"line":56},[34,163689,163690],{"class":59},"names.insert(",[34,163692,64],{"class":63},[34,163694,12899],{"class":59},[34,163696,163697],{"class":187},"\"小李\"",[34,163699,623],{"class":59},[34,163701,163702,163705,163707,163709,163712],{"class":36,"line":107},[34,163703,163704],{"class":59},"names.extend([",[34,163706,9147],{"class":187},[34,163708,12899],{"class":59},[34,163710,163711],{"class":187},"\"小赵\"",[34,163713,5121],{"class":59},[34,163715,163716],{"class":36,"line":196},[34,163717,2864],{"emptyLinePlaceholder":540},[34,163719,163720,163722],{"class":36,"line":202},[34,163721,30878],{"class":63},[34,163723,163724],{"class":59},"(names)\n",[14,163726,163727],{},"删除元素：",[25,163729,163731],{"className":27,"code":163730,"language":29,"meta":22,"style":22},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[31,163732,163733,163742,163752,163766,163778],{"__ignoreMap":22},[34,163734,163735,163738,163740],{"class":36,"line":37},[34,163736,163737],{"class":59},"names.remove(",[34,163739,151323],{"class":187},[34,163741,623],{"class":59},[34,163743,163744,163747,163749],{"class":36,"line":44},[34,163745,163746],{"class":59},"last ",[34,163748,447],{"class":112},[34,163750,163751],{"class":59}," names.pop()\n",[34,163753,163754,163757,163759,163762,163764],{"class":36,"line":50},[34,163755,163756],{"class":59},"first ",[34,163758,447],{"class":112},[34,163760,163761],{"class":59}," names.pop(",[34,163763,319],{"class":63},[34,163765,623],{"class":59},[34,163767,163768,163771,163774,163776],{"class":36,"line":56},[34,163769,163770],{"class":112},"del",[34,163772,163773],{"class":59}," names[",[34,163775,319],{"class":63},[34,163777,73],{"class":59},[34,163779,163780],{"class":36,"line":107},[34,163781,163782],{"class":59},"names.clear()\n",[14,163784,163785],{},"查询和统计：",[25,163787,163789],{"className":27,"code":163788,"language":29,"meta":22,"style":22},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[31,163790,163791,163819,163823,163834,163845],{"__ignoreMap":22},[34,163792,163793,163795,163797,163799,163801,163803,163805,163807,163809,163811,163813,163815,163817],{"class":36,"line":37},[34,163794,163470],{"class":59},[34,163796,447],{"class":112},[34,163798,52687],{"class":59},[34,163800,64],{"class":63},[34,163802,12899],{"class":59},[34,163804,70],{"class":63},[34,163806,12899],{"class":59},[34,163808,309],{"class":63},[34,163810,12899],{"class":59},[34,163812,70],{"class":63},[34,163814,12899],{"class":59},[34,163816,217],{"class":63},[34,163818,73],{"class":59},[34,163820,163821],{"class":36,"line":44},[34,163822,2864],{"emptyLinePlaceholder":540},[34,163824,163825,163827,163830,163832],{"class":36,"line":50},[34,163826,30878],{"class":63},[34,163828,163829],{"class":59},"(numbers.index(",[34,163831,309],{"class":63},[34,163833,30960],{"class":59},[34,163835,163836,163838,163841,163843],{"class":36,"line":56},[34,163837,30878],{"class":63},[34,163839,163840],{"class":59},"(numbers.count(",[34,163842,70],{"class":63},[34,163844,30960],{"class":59},[34,163846,163847,163849,163851,163853],{"class":36,"line":107},[34,163848,30878],{"class":63},[34,163850,617],{"class":59},[34,163852,7822],{"class":63},[34,163854,163855],{"class":59},"(numbers))\n",[14,163857,163858],{},"排序：",[25,163860,163862],{"className":27,"code":163861,"language":29,"meta":22,"style":22},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[31,163863,163864,163888,163892,163897,163904,163908,163922,163928,163932,163937],{"__ignoreMap":22},[34,163865,163866,163868,163870,163872,163874,163876,163878,163880,163882,163884,163886],{"class":36,"line":37},[34,163867,163470],{"class":59},[34,163869,447],{"class":112},[34,163871,52687],{"class":59},[34,163873,309],{"class":63},[34,163875,12899],{"class":59},[34,163877,64],{"class":63},[34,163879,12899],{"class":59},[34,163881,927],{"class":63},[34,163883,12899],{"class":59},[34,163885,70],{"class":63},[34,163887,73],{"class":59},[34,163889,163890],{"class":36,"line":44},[34,163891,2864],{"emptyLinePlaceholder":540},[34,163893,163894],{"class":36,"line":50},[34,163895,163896],{"class":59},"numbers.sort()\n",[34,163898,163899,163901],{"class":36,"line":56},[34,163900,30878],{"class":63},[34,163902,163903],{"class":59},"(numbers)\n",[34,163905,163906],{"class":36,"line":107},[34,163907,2864],{"emptyLinePlaceholder":540},[34,163909,163910,163913,163916,163918,163920],{"class":36,"line":196},[34,163911,163912],{"class":59},"numbers.sort(",[34,163914,163915],{"class":5680},"reverse",[34,163917,447],{"class":112},[34,163919,31939],{"class":63},[34,163921,623],{"class":59},[34,163923,163924,163926],{"class":36,"line":202},[34,163925,30878],{"class":63},[34,163927,163903],{"class":59},[34,163929,163930],{"class":36,"line":207},[34,163931,2864],{"emptyLinePlaceholder":540},[34,163933,163934],{"class":36,"line":222},[34,163935,163936],{"class":59},"numbers.reverse()\n",[34,163938,163939,163941],{"class":36,"line":227},[34,163940,30878],{"class":63},[34,163942,163903],{"class":59},[14,163944,163945,163948,163949,163952],{},[31,163946,163947],{},"sort()"," 会修改原列表，",[31,163950,163951],{},"sorted()"," 返回新列表。",[25,163954,163956],{"className":27,"code":163955,"language":29,"meta":22,"style":22},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[31,163957,163958,163982,163994,163998,164004],{"__ignoreMap":22},[34,163959,163960,163962,163964,163966,163968,163970,163972,163974,163976,163978,163980],{"class":36,"line":37},[34,163961,163470],{"class":59},[34,163963,447],{"class":112},[34,163965,52687],{"class":59},[34,163967,309],{"class":63},[34,163969,12899],{"class":59},[34,163971,64],{"class":63},[34,163973,12899],{"class":59},[34,163975,927],{"class":63},[34,163977,12899],{"class":59},[34,163979,70],{"class":63},[34,163981,73],{"class":59},[34,163983,163984,163987,163989,163992],{"class":36,"line":44},[34,163985,163986],{"class":59},"new_numbers ",[34,163988,447],{"class":112},[34,163990,163991],{"class":63}," sorted",[34,163993,163903],{"class":59},[34,163995,163996],{"class":36,"line":50},[34,163997,2864],{"emptyLinePlaceholder":540},[34,163999,164000,164002],{"class":36,"line":56},[34,164001,30878],{"class":63},[34,164003,163903],{"class":59},[34,164005,164006,164008],{"class":36,"line":107},[34,164007,30878],{"class":63},[34,164009,164010],{"class":59},"(new_numbers)\n",[555,164012,164014],{"id":164013},"_65-列表遍历","6.5 列表遍历",[25,164016,164018],{"className":27,"code":164017,"language":29,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[31,164019,164020,164040,164044,164054],{"__ignoreMap":22},[34,164021,164022,164024,164026,164028,164030,164032,164034,164036,164038],{"class":36,"line":37},[34,164023,160767],{"class":59},[34,164025,447],{"class":112},[34,164027,52687],{"class":59},[34,164029,150275],{"class":187},[34,164031,12899],{"class":59},[34,164033,151323],{"class":187},[34,164035,12899],{"class":59},[34,164037,160118],{"class":187},[34,164039,73],{"class":59},[34,164041,164042],{"class":36,"line":44},[34,164043,2864],{"emptyLinePlaceholder":540},[34,164045,164046,164048,164050,164052],{"class":36,"line":50},[34,164047,3489],{"class":112},[34,164049,160803],{"class":59},[34,164051,26508],{"class":112},[34,164053,160808],{"class":59},[34,164055,164056,164058],{"class":36,"line":56},[34,164057,31762],{"class":63},[34,164059,151047],{"class":59},[14,164061,164062],{},"需要索引时：",[25,164064,164066],{"className":27,"code":164065,"language":29,"meta":22,"style":22},"for index, name in enumerate(names):\n    print(index, name)\n",[31,164067,164068,164082],{"__ignoreMap":22},[34,164069,164070,164072,164075,164077,164079],{"class":36,"line":37},[34,164071,3489],{"class":112},[34,164073,164074],{"class":59}," index, name ",[34,164076,26508],{"class":112},[34,164078,32069],{"class":63},[34,164080,164081],{"class":59},"(names):\n",[34,164083,164084,164086],{"class":36,"line":44},[34,164085,31762],{"class":63},[34,164087,164088],{"class":59},"(index, name)\n",[14,164090,164091],{},"统计总分：",[25,164093,164095],{"className":27,"code":164094,"language":29,"meta":22,"style":22},"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",[31,164096,164097,164122,164130,164134,164145,164153,164157,164174],{"__ignoreMap":22},[34,164098,164099,164102,164104,164106,164108,164110,164112,164114,164116,164118,164120],{"class":36,"line":37},[34,164100,164101],{"class":59},"scores ",[34,164103,447],{"class":112},[34,164105,52687],{"class":59},[34,164107,1467],{"class":63},[34,164109,12899],{"class":59},[34,164111,1342],{"class":63},[34,164113,12899],{"class":59},[34,164115,863],{"class":63},[34,164117,12899],{"class":59},[34,164119,1167],{"class":63},[34,164121,73],{"class":59},[34,164123,164124,164126,164128],{"class":36,"line":44},[34,164125,157647],{"class":59},[34,164127,447],{"class":112},[34,164129,47794],{"class":63},[34,164131,164132],{"class":36,"line":50},[34,164133,2864],{"emptyLinePlaceholder":540},[34,164135,164136,164138,164140,164142],{"class":36,"line":56},[34,164137,3489],{"class":112},[34,164139,158170],{"class":59},[34,164141,26508],{"class":112},[34,164143,164144],{"class":59}," scores:\n",[34,164146,164147,164149,164151],{"class":36,"line":107},[34,164148,159694],{"class":59},[34,164150,9941],{"class":112},[34,164152,2050],{"class":59},[34,164154,164155],{"class":36,"line":196},[34,164156,2864],{"emptyLinePlaceholder":540},[34,164158,164159,164162,164164,164167,164169,164171],{"class":36,"line":202},[34,164160,164161],{"class":59},"avg ",[34,164163,447],{"class":112},[34,164165,164166],{"class":59}," total ",[34,164168,1190],{"class":112},[34,164170,7795],{"class":63},[34,164172,164173],{"class":59},"(scores)\n",[34,164175,164176,164178,164180,164182,164185,164187,164190,164192,164194,164196],{"class":36,"line":207},[34,164177,30878],{"class":63},[34,164179,617],{"class":59},[34,164181,667],{"class":112},[34,164183,164184],{"class":187},"\"平均分:",[34,164186,1501],{"class":63},[34,164188,164189],{"class":59},"avg",[34,164191,157546],{"class":112},[34,164193,1550],{"class":63},[34,164195,860],{"class":187},[34,164197,623],{"class":59},[555,164199,164201],{"id":164200},"_66-元组tuple","6.6 元组tuple",[14,164203,164204],{},"元组和列表类似，但不可修改。",[25,164206,164208],{"className":27,"code":164207,"language":29,"meta":22,"style":22},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[31,164209,164210,164227],{"__ignoreMap":22},[34,164211,164212,164215,164217,164219,164221,164223,164225],{"class":36,"line":37},[34,164213,164214],{"class":59},"point ",[34,164216,447],{"class":112},[34,164218,2122],{"class":59},[34,164220,1053],{"class":63},[34,164222,12899],{"class":59},[34,164224,1306],{"class":63},[34,164226,623],{"class":59},[34,164228,164229,164231,164233,164235,164237,164239,164241,164243,164245],{"class":36,"line":44},[34,164230,116701],{"class":59},[34,164232,447],{"class":112},[34,164234,2122],{"class":59},[34,164236,150275],{"class":187},[34,164238,12899],{"class":59},[34,164240,1256],{"class":63},[34,164242,12899],{"class":59},[34,164244,69730],{"class":187},[34,164246,623],{"class":59},[14,164248,164249],{},"单元素元组必须加逗号：",[25,164251,164253],{"className":27,"code":164252,"language":29,"meta":22,"style":22},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[31,164254,164255,164269,164282,164286,164300],{"__ignoreMap":22},[34,164256,164257,164260,164262,164264,164266],{"class":36,"line":37},[34,164258,164259],{"class":59},"t1 ",[34,164261,447],{"class":112},[34,164263,2122],{"class":59},[34,164265,1053],{"class":63},[34,164267,164268],{"class":59},",)\n",[34,164270,164271,164274,164276,164278,164280],{"class":36,"line":44},[34,164272,164273],{"class":59},"t2 ",[34,164275,447],{"class":112},[34,164277,2122],{"class":59},[34,164279,1053],{"class":63},[34,164281,623],{"class":59},[34,164283,164284],{"class":36,"line":50},[34,164285,2864],{"emptyLinePlaceholder":540},[34,164287,164288,164290,164292,164294,164297],{"class":36,"line":56},[34,164289,30878],{"class":63},[34,164291,617],{"class":59},[34,164293,103494],{"class":63},[34,164295,164296],{"class":59},"(t1))  ",[34,164298,164299],{"class":40},"# tuple\n",[34,164301,164302,164304,164306,164308,164311],{"class":36,"line":107},[34,164303,30878],{"class":63},[34,164305,617],{"class":59},[34,164307,103494],{"class":63},[34,164309,164310],{"class":59},"(t2))  ",[34,164312,164313],{"class":40},"# int\n",[14,164315,164316],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[555,164318,164320],{"id":164319},"_67-字符串str","6.7 字符串str",[14,164322,164323],{},"字符串也是序列，可以索引、切片和遍历。",[25,164325,164327],{"className":27,"code":164326,"language":29,"meta":22,"style":22},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[31,164328,164329,164337,164341,164352,164364,164368,164379],{"__ignoreMap":22},[34,164330,164331,164333,164335],{"class":36,"line":37},[34,164332,156831],{"class":59},[34,164334,447],{"class":112},[34,164336,160068],{"class":187},[34,164338,164339],{"class":36,"line":44},[34,164340,2864],{"emptyLinePlaceholder":540},[34,164342,164343,164345,164348,164350],{"class":36,"line":50},[34,164344,30878],{"class":63},[34,164346,164347],{"class":59},"(text[",[34,164349,319],{"class":63},[34,164351,5121],{"class":59},[34,164353,164354,164356,164358,164360,164362],{"class":36,"line":56},[34,164355,30878],{"class":63},[34,164357,164347],{"class":59},[34,164359,113],{"class":112},[34,164361,64],{"class":63},[34,164363,5121],{"class":59},[34,164365,164366],{"class":36,"line":107},[34,164367,2864],{"emptyLinePlaceholder":540},[34,164369,164370,164372,164374,164376],{"class":36,"line":196},[34,164371,3489],{"class":112},[34,164373,160079],{"class":59},[34,164375,26508],{"class":112},[34,164377,164378],{"class":59}," text:\n",[34,164380,164381,164383],{"class":36,"line":202},[34,164382,31762],{"class":63},[34,164384,160090],{"class":59},[14,164386,164387],{},"字符串不可变：",[25,164389,164391],{"className":27,"code":164390,"language":29,"meta":22,"style":22},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[31,164392,164393,164401],{"__ignoreMap":22},[34,164394,164395,164397,164399],{"class":36,"line":37},[34,164396,156831],{"class":59},[34,164398,447],{"class":112},[34,164400,160068],{"class":187},[34,164402,164403,164406,164408,164410,164412,164415],{"class":36,"line":44},[34,164404,164405],{"class":59},"text[",[34,164407,319],{"class":63},[34,164409,4907],{"class":59},[34,164411,447],{"class":112},[34,164413,164414],{"class":187}," \"P\"",[34,164416,164417],{"class":40},"  # 报错\n",[14,164419,164420],{},"如果要得到新字符串：",[25,164422,164424],{"className":27,"code":164423,"language":29,"meta":22,"style":22},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[31,164425,164426,164434,164452],{"__ignoreMap":22},[34,164427,164428,164430,164432],{"class":36,"line":37},[34,164429,156831],{"class":59},[34,164431,447],{"class":112},[34,164433,160068],{"class":187},[34,164435,164436,164438,164440,164442,164444,164447,164449],{"class":36,"line":44},[34,164437,156831],{"class":59},[34,164439,447],{"class":112},[34,164441,164414],{"class":187},[34,164443,46027],{"class":112},[34,164445,164446],{"class":59}," text[",[34,164448,64],{"class":63},[34,164450,164451],{"class":59},":]\n",[34,164453,164454,164456],{"class":36,"line":50},[34,164455,30878],{"class":63},[34,164457,164458],{"class":59},"(text)\n",[555,164460,164462],{"id":164461},"_68-切片","6.8 切片",[14,164464,164465],{},"切片用于从序列中取一部分。",[25,164467,164469],{"className":27,"code":164468,"language":29,"meta":22,"style":22},"序列[开始:结束:步长]\n",[31,164470,164471],{"__ignoreMap":22},[34,164472,164473],{"class":36,"line":37},[34,164474,164468],{"class":59},[14,164476,164477],{},"结束位置不包含。",[25,164479,164481],{"className":27,"code":164480,"language":29,"meta":22,"style":22},"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",[31,164482,164483,164520,164524,164543,164558,164572,164586],{"__ignoreMap":22},[34,164484,164485,164488,164490,164492,164494,164496,164498,164500,164502,164504,164506,164508,164510,164512,164514,164516,164518],{"class":36,"line":37},[34,164486,164487],{"class":59},"nums ",[34,164489,447],{"class":112},[34,164491,52687],{"class":59},[34,164493,319],{"class":63},[34,164495,12899],{"class":59},[34,164497,64],{"class":63},[34,164499,12899],{"class":59},[34,164501,70],{"class":63},[34,164503,12899],{"class":59},[34,164505,309],{"class":63},[34,164507,12899],{"class":59},[34,164509,217],{"class":63},[34,164511,12899],{"class":59},[34,164513,927],{"class":63},[34,164515,12899],{"class":59},[34,164517,952],{"class":63},[34,164519,73],{"class":59},[34,164521,164522],{"class":36,"line":44},[34,164523,2864],{"emptyLinePlaceholder":540},[34,164525,164526,164528,164531,164533,164535,164537,164540],{"class":36,"line":50},[34,164527,30878],{"class":63},[34,164529,164530],{"class":59},"(nums[",[34,164532,64],{"class":63},[34,164534,214],{"class":59},[34,164536,217],{"class":63},[34,164538,164539],{"class":59},"])    ",[34,164541,164542],{"class":40},"# [1, 2, 3]\n",[34,164544,164545,164547,164550,164552,164555],{"class":36,"line":56},[34,164546,30878],{"class":63},[34,164548,164549],{"class":59},"(nums[:",[34,164551,309],{"class":63},[34,164553,164554],{"class":59},"])     ",[34,164556,164557],{"class":40},"# [0, 1, 2]\n",[34,164559,164560,164562,164564,164566,164569],{"class":36,"line":107},[34,164561,30878],{"class":63},[34,164563,164530],{"class":59},[34,164565,309],{"class":63},[34,164567,164568],{"class":59},":])     ",[34,164570,164571],{"class":40},"# [3, 4, 5, 6]\n",[34,164573,164574,164576,164579,164581,164583],{"class":36,"line":196},[34,164575,30878],{"class":63},[34,164577,164578],{"class":59},"(nums[::",[34,164580,70],{"class":63},[34,164582,164539],{"class":59},[34,164584,164585],{"class":40},"# [0, 2, 4, 6]\n",[34,164587,164588,164590,164592,164594,164596,164599],{"class":36,"line":202},[34,164589,30878],{"class":63},[34,164591,164578],{"class":59},[34,164593,113],{"class":112},[34,164595,64],{"class":63},[34,164597,164598],{"class":59},"])   ",[34,164600,164601],{"class":40},"# 反转\n",[14,164603,164604],{},"字符串切片：",[25,164606,164608],{"className":27,"code":164607,"language":29,"meta":22,"style":22},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[31,164609,164610,164619,164633],{"__ignoreMap":22},[34,164611,164612,164614,164616],{"class":36,"line":37},[34,164613,156831],{"class":59},[34,164615,447],{"class":112},[34,164617,164618],{"class":187}," \"abcdef\"\n",[34,164620,164621,164623,164625,164627,164629,164631],{"class":36,"line":44},[34,164622,30878],{"class":63},[34,164624,164347],{"class":59},[34,164626,64],{"class":63},[34,164628,214],{"class":59},[34,164630,217],{"class":63},[34,164632,5121],{"class":59},[34,164634,164635,164637,164640,164642,164644],{"class":36,"line":50},[34,164636,30878],{"class":63},[34,164638,164639],{"class":59},"(text[::",[34,164641,113],{"class":112},[34,164643,64],{"class":63},[34,164645,5121],{"class":59},[555,164647,164649],{"id":164648},"_69-集合set","6.9 集合set",[14,164651,164652],{},"集合特点：",[567,164654,164655,164658,164661],{},[570,164656,164657],{},"无序。",[570,164659,164660],{},"元素不重复。",[570,164662,164663],{},"可以做交集、并集、差集。",[25,164665,164667],{"className":27,"code":164666,"language":29,"meta":22,"style":22},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[31,164668,164669,164697],{"__ignoreMap":22},[34,164670,164671,164673,164675,164677,164679,164681,164683,164685,164687,164689,164691,164693,164695],{"class":36,"line":37},[34,164672,164487],{"class":59},[34,164674,447],{"class":112},[34,164676,4912],{"class":59},[34,164678,64],{"class":63},[34,164680,12899],{"class":59},[34,164682,70],{"class":63},[34,164684,12899],{"class":59},[34,164686,309],{"class":63},[34,164688,12899],{"class":59},[34,164690,309],{"class":63},[34,164692,12899],{"class":59},[34,164694,217],{"class":63},[34,164696,2036],{"class":59},[34,164698,164699,164701],{"class":36,"line":44},[34,164700,30878],{"class":63},[34,164702,164703],{"class":59},"(nums)\n",[14,164705,164706],{},"创建空集合：",[25,164708,164710],{"className":27,"code":164709,"language":29,"meta":22,"style":22},"s = set()\n",[31,164711,164712],{"__ignoreMap":22},[34,164713,164714,164716,164718,164720],{"class":36,"line":37},[34,164715,11043],{"class":59},[34,164717,447],{"class":112},[34,164719,120109],{"class":63},[34,164721,2440],{"class":59},[14,164723,9489,164724,164726],{},[31,164725,32922],{}," 是空字典，不是空集合。",[14,164728,164729],{},"集合常用操作：",[25,164731,164733],{"className":27,"code":164732,"language":29,"meta":22,"style":22},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[31,164734,164735,164755,164759,164768,164777,164786],{"__ignoreMap":22},[34,164736,164737,164739,164741,164743,164745,164747,164749,164751,164753],{"class":36,"line":37},[34,164738,11043],{"class":59},[34,164740,447],{"class":112},[34,164742,4912],{"class":59},[34,164744,64],{"class":63},[34,164746,12899],{"class":59},[34,164748,70],{"class":63},[34,164750,12899],{"class":59},[34,164752,309],{"class":63},[34,164754,2036],{"class":59},[34,164756,164757],{"class":36,"line":44},[34,164758,2864],{"emptyLinePlaceholder":540},[34,164760,164761,164764,164766],{"class":36,"line":50},[34,164762,164763],{"class":59},"s.add(",[34,164765,217],{"class":63},[34,164767,623],{"class":59},[34,164769,164770,164773,164775],{"class":36,"line":56},[34,164771,164772],{"class":59},"s.remove(",[34,164774,70],{"class":63},[34,164776,623],{"class":59},[34,164778,164779,164782,164784],{"class":36,"line":107},[34,164780,164781],{"class":59},"s.discard(",[34,164783,1053],{"class":63},[34,164785,623],{"class":59},[34,164787,164788,164790,164792,164794],{"class":36,"line":196},[34,164789,30878],{"class":63},[34,164791,617],{"class":59},[34,164793,7822],{"class":63},[34,164795,164796],{"class":59},"(s))\n",[14,164798,164799],{},"交并差：",[25,164801,164803],{"className":27,"code":164802,"language":29,"meta":22,"style":22},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[31,164804,164805,164825,164845,164849,164864,164877],{"__ignoreMap":22},[34,164806,164807,164809,164811,164813,164815,164817,164819,164821,164823],{"class":36,"line":37},[34,164808,11383],{"class":59},[34,164810,447],{"class":112},[34,164812,4912],{"class":59},[34,164814,64],{"class":63},[34,164816,12899],{"class":59},[34,164818,70],{"class":63},[34,164820,12899],{"class":59},[34,164822,309],{"class":63},[34,164824,2036],{"class":59},[34,164826,164827,164829,164831,164833,164835,164837,164839,164841,164843],{"class":36,"line":44},[34,164828,11409],{"class":59},[34,164830,447],{"class":112},[34,164832,4912],{"class":59},[34,164834,309],{"class":63},[34,164836,12899],{"class":59},[34,164838,217],{"class":63},[34,164840,12899],{"class":59},[34,164842,927],{"class":63},[34,164844,2036],{"class":59},[34,164846,164847],{"class":36,"line":50},[34,164848,2864],{"emptyLinePlaceholder":540},[34,164850,164851,164853,164856,164858,164861],{"class":36,"line":56},[34,164852,30878],{"class":63},[34,164854,164855],{"class":59},"(a ",[34,164857,961],{"class":112},[34,164859,164860],{"class":59}," b)  ",[34,164862,164863],{"class":40},"# 交集\n",[34,164865,164866,164868,164870,164872,164874],{"class":36,"line":107},[34,164867,30878],{"class":63},[34,164869,164855],{"class":59},[34,164871,1526],{"class":112},[34,164873,164860],{"class":59},[34,164875,164876],{"class":40},"# 并集\n",[34,164878,164879,164881,164883,164885,164887],{"class":36,"line":196},[34,164880,30878],{"class":63},[34,164882,164855],{"class":59},[34,164884,113],{"class":112},[34,164886,164860],{"class":59},[34,164888,164889],{"class":40},"# 差集\n",[555,164891,164893],{"id":164892},"_610-字典dict","6.10 字典dict",[14,164895,164896],{},"字典通过 key-value 保存数据。",[25,164898,164900],{"className":27,"code":164899,"language":29,"meta":22,"style":22},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[31,164901,164902,164910,164920,164931,164941],{"__ignoreMap":22},[34,164903,164904,164906,164908],{"class":36,"line":37},[34,164905,149868],{"class":59},[34,164907,447],{"class":112},[34,164909,16036],{"class":59},[34,164911,164912,164914,164916,164918],{"class":36,"line":44},[34,164913,147407],{"class":187},[34,164915,51898],{"class":59},[34,164917,150275],{"class":187},[34,164919,31929],{"class":59},[34,164921,164922,164925,164927,164929],{"class":36,"line":50},[34,164923,164924],{"class":187},"    \"age\"",[34,164926,51898],{"class":59},[34,164928,1256],{"class":63},[34,164930,31929],{"class":59},[34,164932,164933,164936,164938],{"class":36,"line":56},[34,164934,164935],{"class":187},"    \"score\"",[34,164937,51898],{"class":59},[34,164939,164940],{"class":63},"95\n",[34,164942,164943],{"class":36,"line":107},[34,164944,2036],{"class":59},[14,164946,164947],{},"获取值：",[25,164949,164951],{"className":27,"code":164950,"language":29,"meta":22,"style":22},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[31,164952,164953,164964],{"__ignoreMap":22},[34,164954,164955,164957,164960,164962],{"class":36,"line":37},[34,164956,30878],{"class":63},[34,164958,164959],{"class":59},"(student[",[34,164961,63140],{"class":187},[34,164963,5121],{"class":59},[34,164965,164966,164968,164971,164973],{"class":36,"line":44},[34,164967,30878],{"class":63},[34,164969,164970],{"class":59},"(student.get(",[34,164972,63140],{"class":187},[34,164974,30960],{"class":59},[14,164976,15852],{},[25,164978,164980],{"className":27,"code":164979,"language":29,"meta":22,"style":22},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[31,164981,164982,164995],{"__ignoreMap":22},[34,164983,164984,164986,164989,164992],{"class":36,"line":37},[34,164985,153246],{"class":59},[34,164987,164988],{"class":187},"\"address\"",[34,164990,164991],{"class":59},"]     ",[34,164993,164994],{"class":40},"# key不存在会报错\n",[34,164996,164997,165000,165002,165004],{"class":36,"line":44},[34,164998,164999],{"class":59},"student.get(",[34,165001,164988],{"class":187},[34,165003,14178],{"class":59},[34,165005,165006],{"class":40},"# key不存在返回None\n",[14,165008,165009],{},"设置默认值：",[25,165011,165013],{"className":27,"code":165012,"language":29,"meta":22,"style":22},"print(student.get(\"address\", \"未知\"))\n",[31,165014,165015],{"__ignoreMap":22},[34,165016,165017,165019,165021,165023,165025,165028],{"class":36,"line":37},[34,165018,30878],{"class":63},[34,165020,164970],{"class":59},[34,165022,164988],{"class":187},[34,165024,12899],{"class":59},[34,165026,165027],{"class":187},"\"未知\"",[34,165029,30960],{"class":59},[14,165031,165032],{},"新增和修改：",[25,165034,165036],{"className":27,"code":165035,"language":29,"meta":22,"style":22},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[31,165037,165038,165051],{"__ignoreMap":22},[34,165039,165040,165042,165044,165046,165048],{"class":36,"line":37},[34,165041,153246],{"class":59},[34,165043,69585],{"class":187},[34,165045,4907],{"class":59},[34,165047,447],{"class":112},[34,165049,165050],{"class":63}," 19\n",[34,165052,165053,165055,165057,165059,165061],{"class":36,"line":44},[34,165054,153246],{"class":59},[34,165056,164988],{"class":187},[34,165058,4907],{"class":59},[34,165060,447],{"class":112},[34,165062,165063],{"class":187}," \"北京\"\n",[14,165065,165066],{},"删除：",[25,165068,165070],{"className":27,"code":165069,"language":29,"meta":22,"style":22},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[31,165071,165072,165085,165095],{"__ignoreMap":22},[34,165073,165074,165076,165078,165081,165083],{"class":36,"line":37},[34,165075,155745],{"class":59},[34,165077,447],{"class":112},[34,165079,165080],{"class":59}," student.pop(",[34,165082,151859],{"class":187},[34,165084,623],{"class":59},[34,165086,165087,165089,165091,165093],{"class":36,"line":44},[34,165088,163770],{"class":112},[34,165090,152536],{"class":59},[34,165092,69585],{"class":187},[34,165094,73],{"class":59},[34,165096,165097],{"class":36,"line":50},[34,165098,165099],{"class":59},"student.clear()\n",[555,165101,165103],{"id":165102},"_611-字典遍历","6.11 字典遍历",[14,165105,165106],{},"遍历 key：",[25,165108,165110],{"className":27,"code":165109,"language":29,"meta":22,"style":22},"for key in student:\n    print(key, student[key])\n",[31,165111,165112,165124],{"__ignoreMap":22},[34,165113,165114,165116,165119,165121],{"class":36,"line":37},[34,165115,3489],{"class":112},[34,165117,165118],{"class":59}," key ",[34,165120,26508],{"class":112},[34,165122,165123],{"class":59}," student:\n",[34,165125,165126,165128],{"class":36,"line":44},[34,165127,31762],{"class":63},[34,165129,165130],{"class":59},"(key, student[key])\n",[14,165132,165133],{},"遍历 value：",[25,165135,165137],{"className":27,"code":165136,"language":29,"meta":22,"style":22},"for value in student.values():\n    print(value)\n",[31,165138,165139,165151],{"__ignoreMap":22},[34,165140,165141,165143,165146,165148],{"class":36,"line":37},[34,165142,3489],{"class":112},[34,165144,165145],{"class":59}," value ",[34,165147,26508],{"class":112},[34,165149,165150],{"class":59}," student.values():\n",[34,165152,165153,165155],{"class":36,"line":44},[34,165154,31762],{"class":63},[34,165156,165157],{"class":59},"(value)\n",[14,165159,165160],{},"遍历 key 和 value：",[25,165162,165164],{"className":27,"code":165163,"language":29,"meta":22,"style":22},"for key, value in student.items():\n    print(key, value)\n",[31,165165,165166,165178],{"__ignoreMap":22},[34,165167,165168,165170,165173,165175],{"class":36,"line":37},[34,165169,3489],{"class":112},[34,165171,165172],{"class":59}," key, value ",[34,165174,26508],{"class":112},[34,165176,165177],{"class":59}," student.items():\n",[34,165179,165180,165182],{"class":36,"line":44},[34,165181,31762],{"class":63},[34,165183,165184],{"class":59},"(key, value)\n",[555,165186,165188],{"id":165187},"_612-嵌套容器","6.12 嵌套容器",[14,165190,165191],{},"列表中保存字典，是项目中最常见的结构之一。",[25,165193,165195],{"className":27,"code":165194,"language":29,"meta":22,"style":22},"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",[31,165196,165197,165205,165233,165261,165289,165293,165297,165307],{"__ignoreMap":22},[34,165198,165199,165201,165203],{"class":36,"line":37},[34,165200,160103],{"class":59},[34,165202,447],{"class":112},[34,165204,55908],{"class":59},[34,165206,165207,165209,165211,165213,165215,165217,165219,165221,165223,165225,165227,165229,165231],{"class":36,"line":44},[34,165208,148772],{"class":59},[34,165210,63140],{"class":187},[34,165212,51898],{"class":59},[34,165214,150275],{"class":187},[34,165216,12899],{"class":59},[34,165218,69585],{"class":187},[34,165220,51898],{"class":59},[34,165222,1256],{"class":63},[34,165224,12899],{"class":59},[34,165226,151859],{"class":187},[34,165228,51898],{"class":59},[34,165230,1593],{"class":63},[34,165232,5394],{"class":59},[34,165234,165235,165237,165239,165241,165243,165245,165247,165249,165251,165253,165255,165257,165259],{"class":36,"line":50},[34,165236,148772],{"class":59},[34,165238,63140],{"class":187},[34,165240,51898],{"class":59},[34,165242,151323],{"class":187},[34,165244,12899],{"class":59},[34,165246,69585],{"class":187},[34,165248,51898],{"class":59},[34,165250,1231],{"class":63},[34,165252,12899],{"class":59},[34,165254,151859],{"class":187},[34,165256,51898],{"class":59},[34,165258,1417],{"class":63},[34,165260,5394],{"class":59},[34,165262,165263,165265,165267,165269,165271,165273,165275,165277,165279,165281,165283,165285,165287],{"class":36,"line":56},[34,165264,148772],{"class":59},[34,165266,63140],{"class":187},[34,165268,51898],{"class":59},[34,165270,160118],{"class":187},[34,165272,12899],{"class":59},[34,165274,69585],{"class":187},[34,165276,51898],{"class":59},[34,165278,1281],{"class":63},[34,165280,12899],{"class":59},[34,165282,151859],{"class":187},[34,165284,51898],{"class":59},[34,165286,1013],{"class":63},[34,165288,5394],{"class":59},[34,165290,165291],{"class":36,"line":107},[34,165292,73],{"class":59},[34,165294,165295],{"class":36,"line":196},[34,165296,2864],{"emptyLinePlaceholder":540},[34,165298,165299,165301,165303,165305],{"class":36,"line":202},[34,165300,3489],{"class":112},[34,165302,152524],{"class":59},[34,165304,26508],{"class":112},[34,165306,152529],{"class":59},[34,165308,165309,165311,165313,165315,165318,165320],{"class":36,"line":207},[34,165310,31762],{"class":63},[34,165312,164959],{"class":59},[34,165314,63140],{"class":187},[34,165316,165317],{"class":59},"], student[",[34,165319,151859],{"class":187},[34,165321,5121],{"class":59},[14,165323,165324],{},"统计平均分：",[25,165326,165328],{"className":27,"code":165327,"language":29,"meta":22,"style":22},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[31,165329,165330,165338,165342,165352,165364,165368,165383],{"__ignoreMap":22},[34,165331,165332,165334,165336],{"class":36,"line":37},[34,165333,157647],{"class":59},[34,165335,447],{"class":112},[34,165337,47794],{"class":63},[34,165339,165340],{"class":36,"line":44},[34,165341,2864],{"emptyLinePlaceholder":540},[34,165343,165344,165346,165348,165350],{"class":36,"line":50},[34,165345,3489],{"class":112},[34,165347,152524],{"class":59},[34,165349,26508],{"class":112},[34,165351,152529],{"class":59},[34,165353,165354,165356,165358,165360,165362],{"class":36,"line":56},[34,165355,159694],{"class":59},[34,165357,9941],{"class":112},[34,165359,152536],{"class":59},[34,165361,151859],{"class":187},[34,165363,73],{"class":59},[34,165365,165366],{"class":36,"line":107},[34,165367,2864],{"emptyLinePlaceholder":540},[34,165369,165370,165372,165374,165376,165378,165380],{"class":36,"line":196},[34,165371,164161],{"class":59},[34,165373,447],{"class":112},[34,165375,164166],{"class":59},[34,165377,1190],{"class":112},[34,165379,7795],{"class":63},[34,165381,165382],{"class":59},"(students)\n",[34,165384,165385,165387,165389,165391,165393,165395,165397,165399,165401,165403],{"class":36,"line":202},[34,165386,30878],{"class":63},[34,165388,617],{"class":59},[34,165390,667],{"class":112},[34,165392,164184],{"class":187},[34,165394,1501],{"class":63},[34,165396,164189],{"class":59},[34,165398,157546],{"class":112},[34,165400,1550],{"class":63},[34,165402,860],{"class":187},[34,165404,623],{"class":59},[14,165406,165407],{},"查找学生：",[25,165409,165411],{"className":27,"code":165410,"language":29,"meta":22,"style":22},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[31,165412,165413,165428,165432,165442,165456,165462,165466,165472],{"__ignoreMap":22},[34,165414,165415,165417,165419,165421,165423,165426],{"class":36,"line":37},[34,165416,111965],{"class":59},[34,165418,447],{"class":112},[34,165420,61066],{"class":63},[34,165422,617],{"class":59},[34,165424,165425],{"class":187},"\"请输入学生姓名:\"",[34,165427,623],{"class":59},[34,165429,165430],{"class":36,"line":44},[34,165431,2864],{"emptyLinePlaceholder":540},[34,165433,165434,165436,165438,165440],{"class":36,"line":50},[34,165435,3489],{"class":112},[34,165437,152524],{"class":59},[34,165439,26508],{"class":112},[34,165441,152529],{"class":59},[34,165443,165444,165446,165448,165450,165452,165454],{"class":36,"line":56},[34,165445,3565],{"class":112},[34,165447,152536],{"class":59},[34,165449,63140],{"class":187},[34,165451,4907],{"class":59},[34,165453,3413],{"class":112},[34,165455,160819],{"class":59},[34,165457,165458,165460],{"class":36,"line":107},[34,165459,32914],{"class":63},[34,165461,150429],{"class":59},[34,165463,165464],{"class":36,"line":196},[34,165465,32090],{"class":112},[34,165467,165468,165470],{"class":36,"line":202},[34,165469,2165],{"class":112},[34,165471,4203],{"class":59},[34,165473,165474,165476,165478,165481],{"class":36,"line":207},[34,165475,31762],{"class":63},[34,165477,617],{"class":59},[34,165479,165480],{"class":187},"\"没有找到\"",[34,165482,623],{"class":59},[555,165484,165486],{"id":165485},"_613-容器通用操作","6.13 容器通用操作",[14,165488,165489],{},"长度：",[25,165491,165493],{"className":27,"code":165492,"language":29,"meta":22,"style":22},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[31,165494,165495,165514,165524],{"__ignoreMap":22},[34,165496,165497,165499,165502,165504,165506,165508,165510,165512],{"class":36,"line":37},[34,165498,7822],{"class":63},[34,165500,165501],{"class":59},"([",[34,165503,64],{"class":63},[34,165505,12899],{"class":59},[34,165507,70],{"class":63},[34,165509,12899],{"class":59},[34,165511,309],{"class":63},[34,165513,5121],{"class":59},[34,165515,165516,165518,165520,165522],{"class":36,"line":44},[34,165517,7822],{"class":63},[34,165519,617],{"class":59},[34,165521,156267],{"class":187},[34,165523,623],{"class":59},[34,165525,165526,165528,165531,165533,165535,165537],{"class":36,"line":50},[34,165527,7822],{"class":63},[34,165529,165530],{"class":59},"({",[34,165532,63140],{"class":187},[34,165534,51898],{"class":59},[34,165536,150275],{"class":187},[34,165538,165539],{"class":59},"})\n",[14,165541,165542],{},"最大最小：",[25,165544,165546],{"className":27,"code":165545,"language":29,"meta":22,"style":22},"max([1, 2, 3])\nmin([1, 2, 3])\n",[31,165547,165548,165566],{"__ignoreMap":22},[34,165549,165550,165552,165554,165556,165558,165560,165562,165564],{"class":36,"line":37},[34,165551,6479],{"class":63},[34,165553,165501],{"class":59},[34,165555,64],{"class":63},[34,165557,12899],{"class":59},[34,165559,70],{"class":63},[34,165561,12899],{"class":59},[34,165563,309],{"class":63},[34,165565,5121],{"class":59},[34,165567,165568,165571,165573,165575,165577,165579,165581,165583],{"class":36,"line":44},[34,165569,165570],{"class":63},"min",[34,165572,165501],{"class":59},[34,165574,64],{"class":63},[34,165576,12899],{"class":59},[34,165578,70],{"class":63},[34,165580,12899],{"class":59},[34,165582,309],{"class":63},[34,165584,5121],{"class":59},[14,165586,165587],{},"求和：",[25,165589,165591],{"className":27,"code":165590,"language":29,"meta":22,"style":22},"sum([1, 2, 3])\n",[31,165592,165593],{"__ignoreMap":22},[34,165594,165595,165598,165600,165602,165604,165606,165608,165610],{"class":36,"line":37},[34,165596,165597],{"class":63},"sum",[34,165599,165501],{"class":59},[34,165601,64],{"class":63},[34,165603,12899],{"class":59},[34,165605,70],{"class":63},[34,165607,12899],{"class":59},[34,165609,309],{"class":63},[34,165611,5121],{"class":59},[14,165613,163858],{},[25,165615,165617],{"className":27,"code":165616,"language":29,"meta":22,"style":22},"sorted([3, 1, 2])\n",[31,165618,165619],{"__ignoreMap":22},[34,165620,165621,165624,165626,165628,165630,165632,165634,165636],{"class":36,"line":37},[34,165622,165623],{"class":63},"sorted",[34,165625,165501],{"class":59},[34,165627,309],{"class":63},[34,165629,12899],{"class":59},[34,165631,64],{"class":63},[34,165633,12899],{"class":59},[34,165635,70],{"class":63},[34,165637,5121],{"class":59},[14,165639,165640],{},"类型转换：",[25,165642,165644],{"className":27,"code":165643,"language":29,"meta":22,"style":22},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[31,165645,165646,165656,165674],{"__ignoreMap":22},[34,165647,165648,165650,165652,165654],{"class":36,"line":37},[34,165649,154457],{"class":63},[34,165651,617],{"class":59},[34,165653,156267],{"class":187},[34,165655,623],{"class":59},[34,165657,165658,165660,165662,165664,165666,165668,165670,165672],{"class":36,"line":44},[34,165659,155652],{"class":63},[34,165661,165501],{"class":59},[34,165663,64],{"class":63},[34,165665,12899],{"class":59},[34,165667,70],{"class":63},[34,165669,12899],{"class":59},[34,165671,309],{"class":63},[34,165673,5121],{"class":59},[34,165675,165676,165678,165680,165682,165684,165686,165688,165690,165692,165694],{"class":36,"line":50},[34,165677,155677],{"class":63},[34,165679,165501],{"class":59},[34,165681,64],{"class":63},[34,165683,12899],{"class":59},[34,165685,64],{"class":63},[34,165687,12899],{"class":59},[34,165689,70],{"class":63},[34,165691,12899],{"class":59},[34,165693,309],{"class":63},[34,165695,5121],{"class":59},[14,165697,165698],{},"成员判断：",[25,165700,165702],{"className":27,"code":165701,"language":29,"meta":22,"style":22},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[31,165703,165704,165721,165745],{"__ignoreMap":22},[34,165705,165706,165708,165710,165713,165716,165719],{"class":36,"line":37},[34,165707,30878],{"class":63},[34,165709,617],{"class":59},[34,165711,165712],{"class":187},"\"a\"",[34,165714,165715],{"class":112}," in",[34,165717,165718],{"class":187}," \"abc\"",[34,165720,623],{"class":59},[34,165722,165723,165725,165727,165729,165731,165733,165735,165737,165739,165741,165743],{"class":36,"line":44},[34,165724,30878],{"class":63},[34,165726,617],{"class":59},[34,165728,64],{"class":63},[34,165730,165715],{"class":112},[34,165732,52687],{"class":59},[34,165734,64],{"class":63},[34,165736,12899],{"class":59},[34,165738,70],{"class":63},[34,165740,12899],{"class":59},[34,165742,309],{"class":63},[34,165744,5121],{"class":59},[34,165746,165747,165749,165751,165753,165755,165757,165759,165761,165763],{"class":36,"line":50},[34,165748,30878],{"class":63},[34,165750,617],{"class":59},[34,165752,63140],{"class":187},[34,165754,165715],{"class":112},[34,165756,4912],{"class":59},[34,165758,63140],{"class":187},[34,165760,51898],{"class":59},[34,165762,150275],{"class":187},[34,165764,165539],{"class":59},[555,165766,165768],{"id":165767},"_614-推导式","6.14 推导式",[14,165770,165771],{},"推导式用于快速生成容器。",[14,165773,165774],{},"列表推导式：",[25,165776,165778],{"className":27,"code":165777,"language":29,"meta":22,"style":22},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[31,165779,165780,165807],{"__ignoreMap":22},[34,165781,165782,165784,165786,165789,165791,165793,165795,165797,165799,165801,165803,165805],{"class":36,"line":37},[34,165783,164487],{"class":59},[34,165785,447],{"class":112},[34,165787,165788],{"class":59}," [i ",[34,165790,3489],{"class":112},[34,165792,9902],{"class":59},[34,165794,26508],{"class":112},[34,165796,32906],{"class":63},[34,165798,617],{"class":59},[34,165800,64],{"class":63},[34,165802,12899],{"class":59},[34,165804,952],{"class":63},[34,165806,322],{"class":59},[34,165808,165809,165811],{"class":36,"line":44},[34,165810,30878],{"class":63},[34,165812,164703],{"class":59},[14,165814,165815],{},"带条件：",[25,165817,165819],{"className":27,"code":165818,"language":29,"meta":22,"style":22},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[31,165820,165821,165862],{"__ignoreMap":22},[34,165822,165823,165826,165828,165830,165832,165834,165836,165838,165840,165842,165844,165846,165848,165850,165852,165854,165856,165858,165860],{"class":36,"line":37},[34,165824,165825],{"class":59},"even_nums ",[34,165827,447],{"class":112},[34,165829,165788],{"class":59},[34,165831,3489],{"class":112},[34,165833,9902],{"class":59},[34,165835,26508],{"class":112},[34,165837,32906],{"class":63},[34,165839,617],{"class":59},[34,165841,64],{"class":63},[34,165843,12899],{"class":59},[34,165845,945],{"class":63},[34,165847,14178],{"class":59},[34,165849,2002],{"class":112},[34,165851,9902],{"class":59},[34,165853,936],{"class":112},[34,165855,15219],{"class":63},[34,165857,101946],{"class":112},[34,165859,4557],{"class":63},[34,165861,73],{"class":59},[34,165863,165864,165866],{"class":36,"line":44},[34,165865,30878],{"class":63},[34,165867,165868],{"class":59},"(even_nums)\n",[14,165870,165871],{},"字典推导式：",[25,165873,165875],{"className":27,"code":165874,"language":29,"meta":22,"style":22},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[31,165876,165877,165911],{"__ignoreMap":22},[34,165878,165879,165882,165884,165887,165889,165891,165894,165896,165898,165900,165902,165904,165906,165908],{"class":36,"line":37},[34,165880,165881],{"class":59},"squares ",[34,165883,447],{"class":112},[34,165885,165886],{"class":59}," {i: i ",[34,165888,11125],{"class":112},[34,165890,15219],{"class":63},[34,165892,165893],{"class":112}," for",[34,165895,9902],{"class":59},[34,165897,26508],{"class":112},[34,165899,32906],{"class":63},[34,165901,617],{"class":59},[34,165903,64],{"class":63},[34,165905,12899],{"class":59},[34,165907,952],{"class":63},[34,165909,165910],{"class":59},")}\n",[34,165912,165913,165915],{"class":36,"line":44},[34,165914,30878],{"class":63},[34,165916,165917],{"class":59},"(squares)\n",[14,165919,165920],{},"集合推导式：",[25,165922,165924],{"className":27,"code":165923,"language":29,"meta":22,"style":22},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[31,165925,165926,165947],{"__ignoreMap":22},[34,165927,165928,165931,165933,165936,165938,165940,165942,165945],{"class":36,"line":37},[34,165929,165930],{"class":59},"chars ",[34,165932,447],{"class":112},[34,165934,165935],{"class":59}," {ch ",[34,165937,3489],{"class":112},[34,165939,160079],{"class":59},[34,165941,26508],{"class":112},[34,165943,165944],{"class":187}," \"hello\"",[34,165946,2036],{"class":59},[34,165948,165949,165951],{"class":36,"line":44},[34,165950,30878],{"class":63},[34,165952,165953],{"class":59},"(chars)\n",[14,165955,165956],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[555,165958,165960],{"id":165959},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[25,165962,165964],{"className":27,"code":165963,"language":29,"meta":22,"style":22},"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",[31,165965,165966,165974,165994,166014,166034,166054,166058,166062,166070,166084,166093,166097,166107,166119,166123,166143,166152,166156,166172,166177,166181,166195,166199,166221,166257],{"__ignoreMap":22},[34,165967,165968,165970,165972],{"class":36,"line":37},[34,165969,160103],{"class":59},[34,165971,447],{"class":112},[34,165973,55908],{"class":59},[34,165975,165976,165978,165980,165982,165984,165986,165988,165990,165992],{"class":36,"line":44},[34,165977,148772],{"class":59},[34,165979,63140],{"class":187},[34,165981,51898],{"class":59},[34,165983,150275],{"class":187},[34,165985,12899],{"class":59},[34,165987,151859],{"class":187},[34,165989,51898],{"class":59},[34,165991,1593],{"class":63},[34,165993,5394],{"class":59},[34,165995,165996,165998,166000,166002,166004,166006,166008,166010,166012],{"class":36,"line":50},[34,165997,148772],{"class":59},[34,165999,63140],{"class":187},[34,166001,51898],{"class":59},[34,166003,151323],{"class":187},[34,166005,12899],{"class":59},[34,166007,151859],{"class":187},[34,166009,51898],{"class":59},[34,166011,1417],{"class":63},[34,166013,5394],{"class":59},[34,166015,166016,166018,166020,166022,166024,166026,166028,166030,166032],{"class":36,"line":56},[34,166017,148772],{"class":59},[34,166019,63140],{"class":187},[34,166021,51898],{"class":59},[34,166023,160118],{"class":187},[34,166025,12899],{"class":59},[34,166027,151859],{"class":187},[34,166029,51898],{"class":59},[34,166031,1013],{"class":63},[34,166033,5394],{"class":59},[34,166035,166036,166038,166040,166042,166044,166046,166048,166050,166052],{"class":36,"line":107},[34,166037,148772],{"class":59},[34,166039,63140],{"class":187},[34,166041,51898],{"class":59},[34,166043,163697],{"class":187},[34,166045,12899],{"class":59},[34,166047,151859],{"class":187},[34,166049,51898],{"class":59},[34,166051,1487],{"class":63},[34,166053,5394],{"class":59},[34,166055,166056],{"class":36,"line":196},[34,166057,73],{"class":59},[34,166059,166060],{"class":36,"line":202},[34,166061,2864],{"emptyLinePlaceholder":540},[34,166063,166064,166066,166068],{"class":36,"line":207},[34,166065,157647],{"class":59},[34,166067,447],{"class":112},[34,166069,47794],{"class":63},[34,166071,166072,166075,166077,166080,166082],{"class":36,"line":222},[34,166073,166074],{"class":59},"max_student ",[34,166076,447],{"class":112},[34,166078,166079],{"class":59}," students[",[34,166081,319],{"class":63},[34,166083,73],{"class":59},[34,166085,166086,166089,166091],{"class":36,"line":227},[34,166087,166088],{"class":59},"passed ",[34,166090,447],{"class":112},[34,166092,52299],{"class":59},[34,166094,166095],{"class":36,"line":232},[34,166096,2864],{"emptyLinePlaceholder":540},[34,166098,166099,166101,166103,166105],{"class":36,"line":238},[34,166100,3489],{"class":112},[34,166102,152524],{"class":59},[34,166104,26508],{"class":112},[34,166106,152529],{"class":59},[34,166108,166109,166111,166113,166115,166117],{"class":36,"line":244},[34,166110,159694],{"class":59},[34,166112,9941],{"class":112},[34,166114,152536],{"class":59},[34,166116,151859],{"class":187},[34,166118,73],{"class":59},[34,166120,166121],{"class":36,"line":250},[34,166122,2864],{"emptyLinePlaceholder":540},[34,166124,166125,166127,166129,166131,166133,166135,166138,166140],{"class":36,"line":256},[34,166126,3565],{"class":112},[34,166128,152536],{"class":59},[34,166130,151859],{"class":187},[34,166132,4907],{"class":59},[34,166134,1564],{"class":112},[34,166136,166137],{"class":59}," max_student[",[34,166139,151859],{"class":187},[34,166141,166142],{"class":59},"]:\n",[34,166144,166145,166148,166150],{"class":36,"line":261},[34,166146,166147],{"class":59},"        max_student ",[34,166149,447],{"class":112},[34,166151,152552],{"class":59},[34,166153,166154],{"class":36,"line":267},[34,166155,2864],{"emptyLinePlaceholder":540},[34,166157,166158,166160,166162,166164,166166,166168,166170],{"class":36,"line":2138},[34,166159,3565],{"class":112},[34,166161,152536],{"class":59},[34,166163,151859],{"class":187},[34,166165,4907],{"class":59},[34,166167,2174],{"class":112},[34,166169,158224],{"class":63},[34,166171,4203],{"class":59},[34,166173,166174],{"class":36,"line":2143},[34,166175,166176],{"class":59},"        passed.append(student)\n",[34,166178,166179],{"class":36,"line":2157},[34,166180,2864],{"emptyLinePlaceholder":540},[34,166182,166183,166185,166187,166189,166191,166193],{"class":36,"line":2162},[34,166184,164161],{"class":59},[34,166186,447],{"class":112},[34,166188,164166],{"class":59},[34,166190,1190],{"class":112},[34,166192,7795],{"class":63},[34,166194,165382],{"class":59},[34,166196,166197],{"class":36,"line":2191},[34,166198,2864],{"emptyLinePlaceholder":540},[34,166200,166201,166203,166205,166207,166209,166211,166213,166215,166217,166219],{"class":36,"line":2196},[34,166202,30878],{"class":63},[34,166204,617],{"class":59},[34,166206,667],{"class":112},[34,166208,164184],{"class":187},[34,166210,1501],{"class":63},[34,166212,164189],{"class":59},[34,166214,157546],{"class":112},[34,166216,1550],{"class":63},[34,166218,860],{"class":187},[34,166220,623],{"class":59},[34,166222,166223,166225,166227,166229,166232,166234,166237,166239,166241,166243,166245,166247,166249,166251,166253,166255],{"class":36,"line":2213},[34,166224,30878],{"class":63},[34,166226,617],{"class":59},[34,166228,667],{"class":112},[34,166230,166231],{"class":187},"\"最高分学生:",[34,166233,1501],{"class":63},[34,166235,166236],{"class":59},"max_student[",[34,166238,153269],{"class":187},[34,166240,477],{"class":59},[34,166242,1550],{"class":63},[34,166244,4912],{"class":63},[34,166246,166236],{"class":59},[34,166248,153307],{"class":187},[34,166250,477],{"class":59},[34,166252,1550],{"class":63},[34,166254,860],{"class":187},[34,166256,623],{"class":59},[34,166258,166259,166261,166263,166265,166268,166271,166274,166276,166278],{"class":36,"line":2218},[34,166260,30878],{"class":63},[34,166262,617],{"class":59},[34,166264,667],{"class":112},[34,166266,166267],{"class":187},"\"及格人数:",[34,166269,166270],{"class":63},"{len",[34,166272,166273],{"class":59},"(passed)",[34,166275,1550],{"class":63},[34,166277,860],{"class":187},[34,166279,623],{"class":59},[555,166281,166283],{"id":166282},"_616-易错点","6.16 易错点",[567,166285,166286,166289,166292,166295,166301,166310],{},[570,166287,166288],{},"列表可变，元组和字符串不可变。",[570,166290,166291],{},"切片结束位置不包含。",[570,166293,166294],{},"字典通过 key 取值，不是通过索引。",[570,166296,166297,166298,28850],{},"空集合要用 ",[31,166299,166300],{},"set()",[570,166302,104753,166303,166306,166307,28850],{},[31,166304,166305],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[31,166308,166309],{},"get()",[570,166311,166312],{},"嵌套容器要先看清楚每一层是什么类型。",[555,166314,166316],{"id":166315},"_617-本章练习","6.17 本章练习",[567,166318,166319,166322,166325,166328,166331],{},[570,166320,166321],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[570,166323,166324],{},"输入一句话，统计每个字符出现次数。",[570,166326,166327],{},"使用集合去除列表中的重复元素。",[570,166329,166330],{},"使用字典保存一个学生的信息，并实现修改成绩。",[570,166332,166333],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[532,166335,166336],{},"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":22,"searchDepth":44,"depth":44,"links":166338},[166339,166340,166341,166342,166343,166344,166345,166346,166347,166348,166349,166350,166351,166352,166353,166354,166355],{"id":163319,"depth":44,"text":163320},{"id":163436,"depth":44,"text":163437},{"id":163526,"depth":44,"text":163527},{"id":163650,"depth":44,"text":163651},{"id":164013,"depth":44,"text":164014},{"id":164200,"depth":44,"text":164201},{"id":164319,"depth":44,"text":164320},{"id":164461,"depth":44,"text":164462},{"id":164648,"depth":44,"text":164649},{"id":164892,"depth":44,"text":164893},{"id":165102,"depth":44,"text":165103},{"id":165187,"depth":44,"text":165188},{"id":165485,"depth":44,"text":165486},{"id":165767,"depth":44,"text":165768},{"id":165959,"depth":44,"text":165960},{"id":166282,"depth":44,"text":166283},{"id":166315,"depth":44,"text":166316},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163311,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166362,"title":166363,"body":166364,"description":537,"extension":538,"meta":168536,"navigation":540,"path":168537,"seo":168538,"stem":168539,"__hash__":168540},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166365,"toc":168511},[166366,166369,166373,166376,166456,166459,166480,166483,166487,166490,166552,166555,166572,166576,166579,166624,166626,166634,166638,166641,166723,166726,166729,166754,166757,166780,166784,166787,166789,166851,166854,166856,166907,166911,166915,166921,167026,167030,167036,167107,167111,167114,167182,167185,167265,167269,167275,167311,167314,167317,167427,167433,167437,167440,167512,167515,167519,167523,167528,167590,167594,167599,167667,167671,167676,167792,167796,167799,167879,167882,167886,167889,167993,167995,168010,168013,168017,168155,168163,168167,168169,168180,168182,168440,168444,168476,168480,168508],[10,166367,166363],{"id":166368},"_7-函数进阶",[555,166370,166372],{"id":166371},"_71-多返回值","7.1 多返回值",[14,166374,166375],{},"Python 函数可以返回多个值，本质上返回的是元组。",[25,166377,166379],{"className":27,"code":166378,"language":29,"meta":22,"style":22},"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",[31,166380,166381,166390,166398,166406,166415,166422,166426,166430,166439,166445],{"__ignoreMap":22},[34,166382,166383,166385,166388],{"class":36,"line":37},[34,166384,32410],{"class":112},[34,166386,166387],{"class":2427}," get_info",[34,166389,32416],{"class":59},[34,166391,166392,166394,166396],{"class":36,"line":44},[34,166393,152757],{"class":59},[34,166395,447],{"class":112},[34,166397,149740],{"class":187},[34,166399,166400,166402,166404],{"class":36,"line":50},[34,166401,152773],{"class":59},[34,166403,447],{"class":112},[34,166405,146938],{"class":63},[34,166407,166408,166410,166412],{"class":36,"line":56},[34,166409,152788],{"class":59},[34,166411,447],{"class":112},[34,166413,166414],{"class":63}," 95\n",[34,166416,166417,166419],{"class":36,"line":107},[34,166418,4554],{"class":112},[34,166420,166421],{"class":59}," name, age, score\n",[34,166423,166424],{"class":36,"line":196},[34,166425,2864],{"emptyLinePlaceholder":540},[34,166427,166428],{"class":36,"line":202},[34,166429,2864],{"emptyLinePlaceholder":540},[34,166431,166432,166434,166436],{"class":36,"line":207},[34,166433,161693],{"class":59},[34,166435,447],{"class":112},[34,166437,166438],{"class":59}," get_info()\n",[34,166440,166441,166443],{"class":36,"line":222},[34,166442,30878],{"class":63},[34,166444,77046],{"class":59},[34,166446,166447,166449,166451,166453],{"class":36,"line":227},[34,166448,30878],{"class":63},[34,166450,617],{"class":59},[34,166452,103494],{"class":63},[34,166454,166455],{"class":59},"(result))\n",[14,166457,166458],{},"可以直接解包：",[25,166460,166462],{"className":27,"code":166461,"language":29,"meta":22,"style":22},"name, age, score = get_info()\nprint(name, age, score)\n",[31,166463,166464,166473],{"__ignoreMap":22},[34,166465,166466,166469,166471],{"class":36,"line":37},[34,166467,166468],{"class":59},"name, age, score ",[34,166470,447],{"class":112},[34,166472,166438],{"class":59},[34,166474,166475,166477],{"class":36,"line":44},[34,166476,30878],{"class":63},[34,166478,166479],{"class":59},"(name, age, score)\n",[14,166481,166482],{},"返回多个值适合函数需要同时给出多个结果时使用。",[555,166484,166486],{"id":166485},"_72-位置参数","7.2 位置参数",[14,166488,166489],{},"位置参数按顺序传递。",[25,166491,166493],{"className":27,"code":166492,"language":29,"meta":22,"style":22},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[31,166494,166495,166503,166531,166535,166539],{"__ignoreMap":22},[34,166496,166497,166499,166501],{"class":36,"line":37},[34,166498,32410],{"class":112},[34,166500,149759],{"class":2427},[34,166502,149762],{"class":59},[34,166504,166505,166507,166509,166511,166513,166515,166517,166519,166521,166523,166525,166527,166529],{"class":36,"line":44},[34,166506,31762],{"class":63},[34,166508,617],{"class":59},[34,166510,667],{"class":112},[34,166512,149773],{"class":187},[34,166514,1501],{"class":63},[34,166516,80271],{"class":59},[34,166518,1550],{"class":63},[34,166520,149782],{"class":187},[34,166522,1501],{"class":63},[34,166524,70682],{"class":59},[34,166526,1550],{"class":63},[34,166528,149791],{"class":187},[34,166530,623],{"class":59},[34,166532,166533],{"class":36,"line":50},[34,166534,2864],{"emptyLinePlaceholder":540},[34,166536,166537],{"class":36,"line":56},[34,166538,2864],{"emptyLinePlaceholder":540},[34,166540,166541,166544,166546,166548,166550],{"class":36,"line":107},[34,166542,166543],{"class":59},"introduce(",[34,166545,150275],{"class":187},[34,166547,12899],{"class":59},[34,166549,1256],{"class":63},[34,166551,623],{"class":59},[14,166553,166554],{},"顺序错了就会得到错误含义：",[25,166556,166558],{"className":27,"code":166557,"language":29,"meta":22,"style":22},"introduce(18, \"小明\")\n",[31,166559,166560],{"__ignoreMap":22},[34,166561,166562,166564,166566,166568,166570],{"class":36,"line":37},[34,166563,166543],{"class":59},[34,166565,1256],{"class":63},[34,166567,12899],{"class":59},[34,166569,150275],{"class":187},[34,166571,623],{"class":59},[555,166573,166575],{"id":166574},"_73-关键字参数","7.3 关键字参数",[14,166577,166578],{},"关键字参数按参数名传递。",[25,166580,166582],{"className":27,"code":166581,"language":29,"meta":22,"style":22},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[31,166583,166584,166604],{"__ignoreMap":22},[34,166585,166586,166588,166590,166592,166594,166596,166598,166600,166602],{"class":36,"line":37},[34,166587,166543],{"class":59},[34,166589,80271],{"class":5680},[34,166591,447],{"class":112},[34,166593,150275],{"class":187},[34,166595,12899],{"class":59},[34,166597,70682],{"class":5680},[34,166599,447],{"class":112},[34,166601,1256],{"class":63},[34,166603,623],{"class":59},[34,166605,166606,166608,166610,166612,166614,166616,166618,166620,166622],{"class":36,"line":44},[34,166607,166543],{"class":59},[34,166609,70682],{"class":5680},[34,166611,447],{"class":112},[34,166613,1256],{"class":63},[34,166615,12899],{"class":59},[34,166617,80271],{"class":5680},[34,166619,447],{"class":112},[34,166621,150275],{"class":187},[34,166623,623],{"class":59},[14,166625,118321],{},[567,166627,166628,166631],{},[570,166629,166630],{},"顺序不容易错。",[570,166632,166633],{},"调用时可读性更强。",[555,166635,166637],{"id":166636},"_74-默认参数","7.4 默认参数",[14,166639,166640],{},"默认参数给参数设置默认值。",[25,166642,166644],{"className":27,"code":166643,"language":29,"meta":22,"style":22},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[31,166645,166646,166662,166692,166696,166700,166710],{"__ignoreMap":22},[34,166647,166648,166650,166652,166655,166657,166660],{"class":36,"line":37},[34,166649,32410],{"class":112},[34,166651,122480],{"class":2427},[34,166653,166654],{"class":59},"(host, port",[34,166656,447],{"class":112},[34,166658,166659],{"class":63},"3306",[34,166661,31249],{"class":59},[34,166663,166664,166666,166668,166670,166673,166675,166677,166679,166681,166683,166686,166688,166690],{"class":36,"line":44},[34,166665,31762],{"class":63},[34,166667,617],{"class":59},[34,166669,667],{"class":112},[34,166671,166672],{"class":187},"\"连接",[34,166674,1501],{"class":63},[34,166676,27860],{"class":59},[34,166678,1550],{"class":63},[34,166680,214],{"class":187},[34,166682,1501],{"class":63},[34,166684,166685],{"class":59},"port",[34,166687,1550],{"class":63},[34,166689,860],{"class":187},[34,166691,623],{"class":59},[34,166693,166694],{"class":36,"line":50},[34,166695,2864],{"emptyLinePlaceholder":540},[34,166697,166698],{"class":36,"line":56},[34,166699,2864],{"emptyLinePlaceholder":540},[34,166701,166702,166705,166708],{"class":36,"line":107},[34,166703,166704],{"class":59},"connect(",[34,166706,166707],{"class":187},"\"localhost\"",[34,166709,623],{"class":59},[34,166711,166712,166714,166716,166718,166721],{"class":36,"line":196},[34,166713,166704],{"class":59},[34,166715,166707],{"class":187},[34,166717,12899],{"class":59},[34,166719,166720],{"class":63},"6379",[34,166722,623],{"class":59},[14,166724,166725],{},"注意：默认参数必须放在非默认参数后面。",[14,166727,166728],{},"错误：",[25,166730,166732],{"className":27,"code":166731,"language":29,"meta":22,"style":22},"def connect(port=3306, host):\n    pass\n",[31,166733,166734,166750],{"__ignoreMap":22},[34,166735,166736,166738,166740,166743,166745,166747],{"class":36,"line":37},[34,166737,32410],{"class":112},[34,166739,122480],{"class":2427},[34,166741,166742],{"class":59},"(port",[34,166744,447],{"class":112},[34,166746,166659],{"class":63},[34,166748,166749],{"class":59},", host):\n",[34,166751,166752],{"class":36,"line":44},[34,166753,149924],{"class":112},[14,166755,166756],{},"正确：",[25,166758,166760],{"className":27,"code":166759,"language":29,"meta":22,"style":22},"def connect(host, port=3306):\n    pass\n",[31,166761,166762,166776],{"__ignoreMap":22},[34,166763,166764,166766,166768,166770,166772,166774],{"class":36,"line":37},[34,166765,32410],{"class":112},[34,166767,122480],{"class":2427},[34,166769,166654],{"class":59},[34,166771,447],{"class":112},[34,166773,166659],{"class":63},[34,166775,31249],{"class":59},[34,166777,166778],{"class":36,"line":44},[34,166779,149924],{"class":112},[555,166781,166783],{"id":166782},"_75-默认参数的坑","7.5 默认参数的坑",[14,166785,166786],{},"不要使用可变对象作为默认参数。",[14,166788,158010],{},[25,166790,166792],{"className":27,"code":166791,"language":29,"meta":22,"style":22},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[31,166793,166794,166809,166814,166821,166825,166829,166840],{"__ignoreMap":22},[34,166795,166796,166798,166801,166804,166806],{"class":36,"line":37},[34,166797,32410],{"class":112},[34,166799,166800],{"class":2427}," add_item",[34,166802,166803],{"class":59},"(item, items",[34,166805,447],{"class":112},[34,166807,166808],{"class":59},"[]):\n",[34,166810,166811],{"class":36,"line":44},[34,166812,166813],{"class":59},"    items.append(item)\n",[34,166815,166816,166818],{"class":36,"line":50},[34,166817,4554],{"class":112},[34,166819,166820],{"class":59}," items\n",[34,166822,166823],{"class":36,"line":56},[34,166824,2864],{"emptyLinePlaceholder":540},[34,166826,166827],{"class":36,"line":107},[34,166828,2864],{"emptyLinePlaceholder":540},[34,166830,166831,166833,166836,166838],{"class":36,"line":196},[34,166832,30878],{"class":63},[34,166834,166835],{"class":59},"(add_item(",[34,166837,165712],{"class":187},[34,166839,30960],{"class":59},[34,166841,166842,166844,166846,166849],{"class":36,"line":202},[34,166843,30878],{"class":63},[34,166845,166835],{"class":59},[34,166847,166848],{"class":187},"\"b\"",[34,166850,30960],{"class":59},[14,166852,166853],{},"第二次调用会复用第一次的列表。",[14,166855,156275],{},[25,166857,166859],{"className":27,"code":166858,"language":29,"meta":22,"style":22},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[31,166860,166861,166875,166888,166897,166901],{"__ignoreMap":22},[34,166862,166863,166865,166867,166869,166871,166873],{"class":36,"line":37},[34,166864,32410],{"class":112},[34,166866,166800],{"class":2427},[34,166868,166803],{"class":59},[34,166870,447],{"class":112},[34,166872,96145],{"class":63},[34,166874,31249],{"class":59},[34,166876,166877,166879,166882,166884,166886],{"class":36,"line":44},[34,166878,3565],{"class":112},[34,166880,166881],{"class":59}," items ",[34,166883,39389],{"class":112},[34,166885,39395],{"class":63},[34,166887,4203],{"class":59},[34,166889,166890,166893,166895],{"class":36,"line":50},[34,166891,166892],{"class":59},"        items ",[34,166894,447],{"class":112},[34,166896,52299],{"class":59},[34,166898,166899],{"class":36,"line":56},[34,166900,166813],{"class":59},[34,166902,166903,166905],{"class":36,"line":107},[34,166904,4554],{"class":112},[34,166906,166820],{"class":59},[555,166908,166910],{"id":166909},"_76-不定长参数","7.6 不定长参数",[584,166912,166914],{"id":166913},"_761-args","7.6.1 *args",[14,166916,166917,166920],{},[31,166918,166919],{},"*args"," 接收任意数量的位置参数，得到元组。",[25,166922,166924],{"className":27,"code":166923,"language":29,"meta":22,"style":22},"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",[31,166925,166926,166939,166947,166958,166967,166973,166977,166981,167000],{"__ignoreMap":22},[34,166927,166928,166930,166932,166934,166936],{"class":36,"line":37},[34,166929,32410],{"class":112},[34,166931,5673],{"class":2427},[34,166933,617],{"class":59},[34,166935,1062],{"class":112},[34,166937,166938],{"class":59},"args):\n",[34,166940,166941,166943,166945],{"class":36,"line":44},[34,166942,159694],{"class":59},[34,166944,447],{"class":112},[34,166946,47794],{"class":63},[34,166948,166949,166951,166953,166955],{"class":36,"line":50},[34,166950,3665],{"class":112},[34,166952,156567],{"class":59},[34,166954,26508],{"class":112},[34,166956,166957],{"class":59}," args:\n",[34,166959,166960,166962,166964],{"class":36,"line":56},[34,166961,160369],{"class":59},[34,166963,9941],{"class":112},[34,166965,166966],{"class":59}," num\n",[34,166968,166969,166971],{"class":36,"line":107},[34,166970,4554],{"class":112},[34,166972,162674],{"class":59},[34,166974,166975],{"class":36,"line":196},[34,166976,2864],{"emptyLinePlaceholder":540},[34,166978,166979],{"class":36,"line":202},[34,166980,2864],{"emptyLinePlaceholder":540},[34,166982,166983,166985,166988,166990,166992,166994,166996,166998],{"class":36,"line":207},[34,166984,30878],{"class":63},[34,166986,166987],{"class":59},"(add(",[34,166989,64],{"class":63},[34,166991,12899],{"class":59},[34,166993,70],{"class":63},[34,166995,12899],{"class":59},[34,166997,309],{"class":63},[34,166999,30960],{"class":59},[34,167001,167002,167004,167006,167008,167010,167012,167014,167016,167018,167020,167022,167024],{"class":36,"line":222},[34,167003,30878],{"class":63},[34,167005,166987],{"class":59},[34,167007,64],{"class":63},[34,167009,12899],{"class":59},[34,167011,70],{"class":63},[34,167013,12899],{"class":59},[34,167015,309],{"class":63},[34,167017,12899],{"class":59},[34,167019,217],{"class":63},[34,167021,12899],{"class":59},[34,167023,927],{"class":63},[34,167025,30960],{"class":59},[584,167027,167029],{"id":167028},"_762-kwargs","7.6.2 **kwargs",[14,167031,167032,167035],{},[31,167033,167034],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[25,167037,167039],{"className":27,"code":167038,"language":29,"meta":22,"style":22},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[31,167040,167041,167054,167065,167071,167075,167079],{"__ignoreMap":22},[34,167042,167043,167045,167047,167049,167051],{"class":36,"line":37},[34,167044,32410],{"class":112},[34,167046,162332],{"class":2427},[34,167048,617],{"class":59},[34,167050,11125],{"class":112},[34,167052,167053],{"class":59},"kwargs):\n",[34,167055,167056,167058,167060,167062],{"class":36,"line":44},[34,167057,3665],{"class":112},[34,167059,165172],{"class":59},[34,167061,26508],{"class":112},[34,167063,167064],{"class":59}," kwargs.items():\n",[34,167066,167067,167069],{"class":36,"line":50},[34,167068,32914],{"class":63},[34,167070,165184],{"class":59},[34,167072,167073],{"class":36,"line":56},[34,167074,2864],{"emptyLinePlaceholder":540},[34,167076,167077],{"class":36,"line":107},[34,167078,2864],{"emptyLinePlaceholder":540},[34,167080,167081,167083,167085,167087,167089,167091,167093,167095,167097,167099,167101,167103,167105],{"class":36,"line":196},[34,167082,162397],{"class":59},[34,167084,80271],{"class":5680},[34,167086,447],{"class":112},[34,167088,150275],{"class":187},[34,167090,12899],{"class":59},[34,167092,70682],{"class":5680},[34,167094,447],{"class":112},[34,167096,1256],{"class":63},[34,167098,12899],{"class":59},[34,167100,70733],{"class":5680},[34,167102,447],{"class":112},[34,167104,69730],{"class":187},[34,167106,623],{"class":59},[555,167108,167110],{"id":167109},"_77-参数解包","7.7 参数解包",[14,167112,167113],{},"列表或元组解包为位置参数：",[25,167115,167117],{"className":27,"code":167116,"language":29,"meta":22,"style":22},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[31,167118,167119,167128,167143,167147,167151,167171],{"__ignoreMap":22},[34,167120,167121,167123,167125],{"class":36,"line":37},[34,167122,32410],{"class":112},[34,167124,5673],{"class":2427},[34,167126,167127],{"class":59},"(a, b, c):\n",[34,167129,167130,167132,167134,167136,167138,167140],{"class":36,"line":44},[34,167131,4554],{"class":112},[34,167133,11333],{"class":59},[34,167135,1088],{"class":112},[34,167137,11346],{"class":59},[34,167139,1088],{"class":112},[34,167141,167142],{"class":59}," c\n",[34,167144,167145],{"class":36,"line":50},[34,167146,2864],{"emptyLinePlaceholder":540},[34,167148,167149],{"class":36,"line":56},[34,167150,2864],{"emptyLinePlaceholder":540},[34,167152,167153,167155,167157,167159,167161,167163,167165,167167,167169],{"class":36,"line":107},[34,167154,164487],{"class":59},[34,167156,447],{"class":112},[34,167158,52687],{"class":59},[34,167160,64],{"class":63},[34,167162,12899],{"class":59},[34,167164,70],{"class":63},[34,167166,12899],{"class":59},[34,167168,309],{"class":63},[34,167170,73],{"class":59},[34,167172,167173,167175,167177,167179],{"class":36,"line":196},[34,167174,30878],{"class":63},[34,167176,166987],{"class":59},[34,167178,1062],{"class":112},[34,167180,167181],{"class":59},"nums))\n",[14,167183,167184],{},"字典解包为关键字参数：",[25,167186,167188],{"className":27,"code":167187,"language":29,"meta":22,"style":22},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[31,167189,167190,167198,167224,167228,167232,167256],{"__ignoreMap":22},[34,167191,167192,167194,167196],{"class":36,"line":37},[34,167193,32410],{"class":112},[34,167195,149759],{"class":2427},[34,167197,149762],{"class":59},[34,167199,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222],{"class":36,"line":44},[34,167201,31762],{"class":63},[34,167203,617],{"class":59},[34,167205,667],{"class":112},[34,167207,860],{"class":187},[34,167209,1501],{"class":63},[34,167211,80271],{"class":59},[34,167213,1550],{"class":63},[34,167215,4912],{"class":63},[34,167217,70682],{"class":59},[34,167219,1550],{"class":63},[34,167221,860],{"class":187},[34,167223,623],{"class":59},[34,167225,167226],{"class":36,"line":50},[34,167227,2864],{"emptyLinePlaceholder":540},[34,167229,167230],{"class":36,"line":56},[34,167231,2864],{"emptyLinePlaceholder":540},[34,167233,167234,167236,167238,167240,167242,167244,167246,167248,167250,167252,167254],{"class":36,"line":107},[34,167235,116701],{"class":59},[34,167237,447],{"class":112},[34,167239,4912],{"class":59},[34,167241,63140],{"class":187},[34,167243,51898],{"class":59},[34,167245,150275],{"class":187},[34,167247,12899],{"class":59},[34,167249,69585],{"class":187},[34,167251,51898],{"class":59},[34,167253,1256],{"class":63},[34,167255,2036],{"class":59},[34,167257,167258,167260,167262],{"class":36,"line":196},[34,167259,166543],{"class":59},[34,167261,11125],{"class":112},[34,167263,167264],{"class":59},"info)\n",[555,167266,167268],{"id":167267},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167270,167271,167274],{},[31,167272,167273],{},"lambda"," 用于定义简单匿名函数。",[25,167276,167278],{"className":27,"code":167277,"language":29,"meta":22,"style":22},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[31,167279,167280,167297],{"__ignoreMap":22},[34,167281,167282,167285,167287,167290,167293,167295],{"class":36,"line":37},[34,167283,167284],{"class":59},"add ",[34,167286,447],{"class":112},[34,167288,167289],{"class":112}," lambda",[34,167291,167292],{"class":59}," a, b: a ",[34,167294,1088],{"class":112},[34,167296,151491],{"class":59},[34,167298,167299,167301,167303,167305,167307,167309],{"class":36,"line":44},[34,167300,30878],{"class":63},[34,167302,166987],{"class":59},[34,167304,64],{"class":63},[34,167306,12899],{"class":59},[34,167308,70],{"class":63},[34,167310,30960],{"class":59},[14,167312,167313],{},"常和排序、过滤等函数一起使用。",[14,167315,167316],{},"按分数排序：",[25,167318,167320],{"className":27,"code":167319,"language":29,"meta":22,"style":22},"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",[31,167321,167322,167330,167350,167370,167390,167394,167398,167421],{"__ignoreMap":22},[34,167323,167324,167326,167328],{"class":36,"line":37},[34,167325,160103],{"class":59},[34,167327,447],{"class":112},[34,167329,55908],{"class":59},[34,167331,167332,167334,167336,167338,167340,167342,167344,167346,167348],{"class":36,"line":44},[34,167333,148772],{"class":59},[34,167335,63140],{"class":187},[34,167337,51898],{"class":59},[34,167339,150275],{"class":187},[34,167341,12899],{"class":59},[34,167343,151859],{"class":187},[34,167345,51898],{"class":59},[34,167347,1593],{"class":63},[34,167349,5394],{"class":59},[34,167351,167352,167354,167356,167358,167360,167362,167364,167366,167368],{"class":36,"line":50},[34,167353,148772],{"class":59},[34,167355,63140],{"class":187},[34,167357,51898],{"class":59},[34,167359,151323],{"class":187},[34,167361,12899],{"class":59},[34,167363,151859],{"class":187},[34,167365,51898],{"class":59},[34,167367,1417],{"class":63},[34,167369,5394],{"class":59},[34,167371,167372,167374,167376,167378,167380,167382,167384,167386,167388],{"class":36,"line":56},[34,167373,148772],{"class":59},[34,167375,63140],{"class":187},[34,167377,51898],{"class":59},[34,167379,160118],{"class":187},[34,167381,12899],{"class":59},[34,167383,151859],{"class":187},[34,167385,51898],{"class":59},[34,167387,1013],{"class":63},[34,167389,5394],{"class":59},[34,167391,167392],{"class":36,"line":107},[34,167393,73],{"class":59},[34,167395,167396],{"class":36,"line":196},[34,167397,2864],{"emptyLinePlaceholder":540},[34,167399,167400,167403,167405,167407,167409,167411,167413,167415,167417,167419],{"class":36,"line":202},[34,167401,167402],{"class":59},"students.sort(",[34,167404,154333],{"class":5680},[34,167406,154336],{"class":112},[34,167408,154339],{"class":59},[34,167410,151859],{"class":187},[34,167412,112589],{"class":59},[34,167414,163915],{"class":5680},[34,167416,447],{"class":112},[34,167418,31939],{"class":63},[34,167420,623],{"class":59},[34,167422,167423,167425],{"class":36,"line":207},[34,167424,30878],{"class":63},[34,167426,165382],{"class":59},[14,167428,167429,167430,167432],{},"如果逻辑复杂，不要硬写 ",[31,167431,167273],{},"，定义普通函数更清晰。",[555,167434,167436],{"id":167435},"_79-函数作为参数","7.9 函数作为参数",[14,167438,167439],{},"函数可以作为参数传给另一个函数。",[25,167441,167443],{"className":27,"code":167442,"language":29,"meta":22,"style":22},"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",[31,167444,167445,167453,167463,167467,167471,167481,167488,167492,167496],{"__ignoreMap":22},[34,167446,167447,167449,167451],{"class":36,"line":37},[34,167448,32410],{"class":112},[34,167450,5673],{"class":2427},[34,167452,151480],{"class":59},[34,167454,167455,167457,167459,167461],{"class":36,"line":44},[34,167456,4554],{"class":112},[34,167458,11333],{"class":59},[34,167460,1088],{"class":112},[34,167462,151491],{"class":59},[34,167464,167465],{"class":36,"line":50},[34,167466,2864],{"emptyLinePlaceholder":540},[34,167468,167469],{"class":36,"line":56},[34,167470,2864],{"emptyLinePlaceholder":540},[34,167472,167473,167475,167478],{"class":36,"line":107},[34,167474,32410],{"class":112},[34,167476,167477],{"class":2427}," calculate",[34,167479,167480],{"class":59},"(a, b, func):\n",[34,167482,167483,167485],{"class":36,"line":196},[34,167484,4554],{"class":112},[34,167486,167487],{"class":59}," func(a, b)\n",[34,167489,167490],{"class":36,"line":202},[34,167491,2864],{"emptyLinePlaceholder":540},[34,167493,167494],{"class":36,"line":207},[34,167495,2864],{"emptyLinePlaceholder":540},[34,167497,167498,167500,167503,167505,167507,167509],{"class":36,"line":222},[34,167499,30878],{"class":63},[34,167501,167502],{"class":59},"(calculate(",[34,167504,1053],{"class":63},[34,167506,12899],{"class":59},[34,167508,1306],{"class":63},[34,167510,167511],{"class":59},", add))\n",[14,167513,167514],{},"这种思想在排序、回调、框架中经常出现。",[555,167516,167518],{"id":167517},"_710-mapfiltersorted","7.10 map、filter、sorted",[584,167520,167522],{"id":167521},"_7101-map","7.10.1 map",[14,167524,167525,167527],{},[31,167526,74505],{}," 对每个元素执行函数。",[25,167529,167531],{"className":27,"code":167530,"language":29,"meta":22,"style":22},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[31,167532,167533,167557,167580],{"__ignoreMap":22},[34,167534,167535,167537,167539,167541,167543,167545,167547,167549,167551,167553,167555],{"class":36,"line":37},[34,167536,164487],{"class":59},[34,167538,447],{"class":112},[34,167540,52687],{"class":59},[34,167542,64],{"class":63},[34,167544,12899],{"class":59},[34,167546,70],{"class":63},[34,167548,12899],{"class":59},[34,167550,309],{"class":63},[34,167552,12899],{"class":59},[34,167554,217],{"class":63},[34,167556,73],{"class":59},[34,167558,167559,167561,167563,167566,167568,167570,167573,167575,167577],{"class":36,"line":44},[34,167560,161693],{"class":59},[34,167562,447],{"class":112},[34,167564,167565],{"class":63}," map",[34,167567,617],{"class":59},[34,167569,167273],{"class":112},[34,167571,167572],{"class":59}," x: x ",[34,167574,1062],{"class":112},[34,167576,15219],{"class":63},[34,167578,167579],{"class":59},", nums)\n",[34,167581,167582,167584,167586,167588],{"class":36,"line":50},[34,167583,30878],{"class":63},[34,167585,617],{"class":59},[34,167587,154457],{"class":63},[34,167589,166455],{"class":59},[584,167591,167593],{"id":167592},"_7102-filter","7.10.2 filter",[14,167595,167596,167598],{},[31,167597,80512],{}," 保留满足条件的元素。",[25,167600,167602],{"className":27,"code":167601,"language":29,"meta":22,"style":22},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[31,167603,167604,167632,167657],{"__ignoreMap":22},[34,167605,167606,167608,167610,167612,167614,167616,167618,167620,167622,167624,167626,167628,167630],{"class":36,"line":37},[34,167607,164487],{"class":59},[34,167609,447],{"class":112},[34,167611,52687],{"class":59},[34,167613,64],{"class":63},[34,167615,12899],{"class":59},[34,167617,70],{"class":63},[34,167619,12899],{"class":59},[34,167621,309],{"class":63},[34,167623,12899],{"class":59},[34,167625,217],{"class":63},[34,167627,12899],{"class":59},[34,167629,927],{"class":63},[34,167631,73],{"class":59},[34,167633,167634,167636,167638,167641,167643,167645,167647,167649,167651,167653,167655],{"class":36,"line":44},[34,167635,161693],{"class":59},[34,167637,447],{"class":112},[34,167639,167640],{"class":63}," filter",[34,167642,617],{"class":59},[34,167644,167273],{"class":112},[34,167646,167572],{"class":59},[34,167648,936],{"class":112},[34,167650,15219],{"class":63},[34,167652,101946],{"class":112},[34,167654,4557],{"class":63},[34,167656,167579],{"class":59},[34,167658,167659,167661,167663,167665],{"class":36,"line":50},[34,167660,30878],{"class":63},[34,167662,617],{"class":59},[34,167664,154457],{"class":63},[34,167666,166455],{"class":59},[584,167668,167670],{"id":167669},"_7103-sorted","7.10.3 sorted",[14,167672,167673,167675],{},[31,167674,165623],{}," 返回排序后的新列表。",[25,167677,167679],{"className":27,"code":167678,"language":29,"meta":22,"style":22},"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",[31,167680,167681,167689,167709,167729,167749,167753,167757,167786],{"__ignoreMap":22},[34,167682,167683,167685,167687],{"class":36,"line":37},[34,167684,160103],{"class":59},[34,167686,447],{"class":112},[34,167688,55908],{"class":59},[34,167690,167691,167693,167695,167697,167699,167701,167703,167705,167707],{"class":36,"line":44},[34,167692,148772],{"class":59},[34,167694,63140],{"class":187},[34,167696,51898],{"class":59},[34,167698,150275],{"class":187},[34,167700,12899],{"class":59},[34,167702,151859],{"class":187},[34,167704,51898],{"class":59},[34,167706,1593],{"class":63},[34,167708,5394],{"class":59},[34,167710,167711,167713,167715,167717,167719,167721,167723,167725,167727],{"class":36,"line":50},[34,167712,148772],{"class":59},[34,167714,63140],{"class":187},[34,167716,51898],{"class":59},[34,167718,151323],{"class":187},[34,167720,12899],{"class":59},[34,167722,151859],{"class":187},[34,167724,51898],{"class":59},[34,167726,1417],{"class":63},[34,167728,5394],{"class":59},[34,167730,167731,167733,167735,167737,167739,167741,167743,167745,167747],{"class":36,"line":56},[34,167732,148772],{"class":59},[34,167734,63140],{"class":187},[34,167736,51898],{"class":59},[34,167738,160118],{"class":187},[34,167740,12899],{"class":59},[34,167742,151859],{"class":187},[34,167744,51898],{"class":59},[34,167746,1013],{"class":63},[34,167748,5394],{"class":59},[34,167750,167751],{"class":36,"line":107},[34,167752,73],{"class":59},[34,167754,167755],{"class":36,"line":196},[34,167756,2864],{"emptyLinePlaceholder":540},[34,167758,167759,167761,167763,167765,167768,167770,167772,167774,167776,167778,167780,167782,167784],{"class":36,"line":202},[34,167760,161693],{"class":59},[34,167762,447],{"class":112},[34,167764,163991],{"class":63},[34,167766,167767],{"class":59},"(students, ",[34,167769,154333],{"class":5680},[34,167771,154336],{"class":112},[34,167773,154339],{"class":59},[34,167775,151859],{"class":187},[34,167777,112589],{"class":59},[34,167779,163915],{"class":5680},[34,167781,447],{"class":112},[34,167783,31939],{"class":63},[34,167785,623],{"class":59},[34,167787,167788,167790],{"class":36,"line":207},[34,167789,30878],{"class":63},[34,167791,77046],{"class":59},[555,167793,167795],{"id":167794},"_711-闭包入门","7.11 闭包入门",[14,167797,167798],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[25,167800,167802],{"className":27,"code":167801,"language":29,"meta":22,"style":22},"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",[31,167803,167804,167814,167824,167835,167839,167846,167850,167854,167868],{"__ignoreMap":22},[34,167805,167806,167808,167811],{"class":36,"line":37},[34,167807,32410],{"class":112},[34,167809,167810],{"class":2427}," outer",[34,167812,167813],{"class":59},"(base):\n",[34,167815,167816,167818,167821],{"class":36,"line":44},[34,167817,31264],{"class":112},[34,167819,167820],{"class":2427}," inner",[34,167822,167823],{"class":59},"(num):\n",[34,167825,167826,167828,167831,167833],{"class":36,"line":50},[34,167827,15216],{"class":112},[34,167829,167830],{"class":59}," base ",[34,167832,1088],{"class":112},[34,167834,166966],{"class":59},[34,167836,167837],{"class":36,"line":56},[34,167838,2864],{"emptyLinePlaceholder":540},[34,167840,167841,167843],{"class":36,"line":107},[34,167842,4554],{"class":112},[34,167844,167845],{"class":59}," inner\n",[34,167847,167848],{"class":36,"line":196},[34,167849,2864],{"emptyLinePlaceholder":540},[34,167851,167852],{"class":36,"line":202},[34,167853,2864],{"emptyLinePlaceholder":540},[34,167855,167856,167859,167861,167864,167866],{"class":36,"line":207},[34,167857,167858],{"class":59},"add_10 ",[34,167860,447],{"class":112},[34,167862,167863],{"class":59}," outer(",[34,167865,1053],{"class":63},[34,167867,623],{"class":59},[34,167869,167870,167872,167875,167877],{"class":36,"line":222},[34,167871,30878],{"class":63},[34,167873,167874],{"class":59},"(add_10(",[34,167876,927],{"class":63},[34,167878,30960],{"class":59},[14,167880,167881],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[555,167883,167885],{"id":167884},"_712-装饰器入门","7.12 装饰器入门",[14,167887,167888],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[25,167890,167892],{"className":27,"code":167891,"language":29,"meta":22,"style":22},"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",[31,167893,167894,167903,167912,167923,167928,167939,167943,167950,167954,167958,167963,167971,167981,167985,167989],{"__ignoreMap":22},[34,167895,167896,167898,167900],{"class":36,"line":37},[34,167897,32410],{"class":112},[34,167899,87652],{"class":2427},[34,167901,167902],{"class":59},"(func):\n",[34,167904,167905,167907,167910],{"class":36,"line":44},[34,167906,31264],{"class":112},[34,167908,167909],{"class":2427}," wrapper",[34,167911,32416],{"class":59},[34,167913,167914,167916,167918,167921],{"class":36,"line":50},[34,167915,32914],{"class":63},[34,167917,617],{"class":59},[34,167919,167920],{"class":187},"\"函数开始执行\"",[34,167922,623],{"class":59},[34,167924,167925],{"class":36,"line":56},[34,167926,167927],{"class":59},"        func()\n",[34,167929,167930,167932,167934,167937],{"class":36,"line":107},[34,167931,32914],{"class":63},[34,167933,617],{"class":59},[34,167935,167936],{"class":187},"\"函数执行结束\"",[34,167938,623],{"class":59},[34,167940,167941],{"class":36,"line":196},[34,167942,2864],{"emptyLinePlaceholder":540},[34,167944,167945,167947],{"class":36,"line":202},[34,167946,4554],{"class":112},[34,167948,167949],{"class":59}," wrapper\n",[34,167951,167952],{"class":36,"line":207},[34,167953,2864],{"emptyLinePlaceholder":540},[34,167955,167956],{"class":36,"line":222},[34,167957,2864],{"emptyLinePlaceholder":540},[34,167959,167960],{"class":36,"line":227},[34,167961,167962],{"class":2427},"@log\n",[34,167964,167965,167967,167969],{"class":36,"line":232},[34,167966,32410],{"class":112},[34,167968,161383],{"class":2427},[34,167970,32416],{"class":59},[34,167972,167973,167975,167977,167979],{"class":36,"line":238},[34,167974,31762],{"class":63},[34,167976,617],{"class":59},[34,167978,6308],{"class":187},[34,167980,623],{"class":59},[34,167982,167983],{"class":36,"line":244},[34,167984,2864],{"emptyLinePlaceholder":540},[34,167986,167987],{"class":36,"line":250},[34,167988,2864],{"emptyLinePlaceholder":540},[34,167990,167991],{"class":36,"line":256},[34,167992,161418],{"class":59},[14,167994,158661],{},[25,167996,167998],{"className":27,"code":167997,"language":29,"meta":22,"style":22},"say_hello = log(say_hello)\n",[31,167999,168000],{"__ignoreMap":22},[34,168001,168002,168005,168007],{"class":36,"line":37},[34,168003,168004],{"class":59},"say_hello ",[34,168006,447],{"class":112},[34,168008,168009],{"class":59}," log(say_hello)\n",[14,168011,168012],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[555,168014,168016],{"id":168015},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[25,168018,168020],{"className":27,"code":168019,"language":29,"meta":22,"style":22},"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",[31,168021,168022,168030,168047,168057,168076,168086,168093,168097,168103,168107,168111,168115,168123,168133,168137,168141],{"__ignoreMap":22},[34,168023,168024,168026,168028],{"class":36,"line":37},[34,168025,32410],{"class":112},[34,168027,87652],{"class":2427},[34,168029,167902],{"class":59},[34,168031,168032,168034,168036,168038,168040,168043,168045],{"class":36,"line":44},[34,168033,31264],{"class":112},[34,168035,167909],{"class":2427},[34,168037,617],{"class":59},[34,168039,1062],{"class":112},[34,168041,168042],{"class":59},"args, ",[34,168044,11125],{"class":112},[34,168046,167053],{"class":59},[34,168048,168049,168051,168053,168055],{"class":36,"line":50},[34,168050,32914],{"class":63},[34,168052,617],{"class":59},[34,168054,167920],{"class":187},[34,168056,623],{"class":59},[34,168058,168059,168062,168064,168067,168069,168071,168073],{"class":36,"line":56},[34,168060,168061],{"class":59},"        result ",[34,168063,447],{"class":112},[34,168065,168066],{"class":59}," func(",[34,168068,1062],{"class":112},[34,168070,168042],{"class":59},[34,168072,11125],{"class":112},[34,168074,168075],{"class":59},"kwargs)\n",[34,168077,168078,168080,168082,168084],{"class":36,"line":107},[34,168079,32914],{"class":63},[34,168081,617],{"class":59},[34,168083,167936],{"class":187},[34,168085,623],{"class":59},[34,168087,168088,168090],{"class":36,"line":196},[34,168089,15216],{"class":112},[34,168091,168092],{"class":59}," result\n",[34,168094,168095],{"class":36,"line":202},[34,168096,2864],{"emptyLinePlaceholder":540},[34,168098,168099,168101],{"class":36,"line":207},[34,168100,4554],{"class":112},[34,168102,167949],{"class":59},[34,168104,168105],{"class":36,"line":222},[34,168106,2864],{"emptyLinePlaceholder":540},[34,168108,168109],{"class":36,"line":227},[34,168110,2864],{"emptyLinePlaceholder":540},[34,168112,168113],{"class":36,"line":232},[34,168114,167962],{"class":2427},[34,168116,168117,168119,168121],{"class":36,"line":238},[34,168118,32410],{"class":112},[34,168120,5673],{"class":2427},[34,168122,151480],{"class":59},[34,168124,168125,168127,168129,168131],{"class":36,"line":244},[34,168126,4554],{"class":112},[34,168128,11333],{"class":59},[34,168130,1088],{"class":112},[34,168132,151491],{"class":59},[34,168134,168135],{"class":36,"line":250},[34,168136,2864],{"emptyLinePlaceholder":540},[34,168138,168139],{"class":36,"line":256},[34,168140,2864],{"emptyLinePlaceholder":540},[34,168142,168143,168145,168147,168149,168151,168153],{"class":36,"line":261},[34,168144,30878],{"class":63},[34,168146,166987],{"class":59},[34,168148,1053],{"class":63},[34,168150,12899],{"class":59},[34,168152,1306],{"class":63},[34,168154,30960],{"class":59},[14,168156,168157,168158,101405,168160,168162],{},"这个写法使用 ",[31,168159,166919],{},[31,168161,167034],{}," 接收原函数的所有参数。",[555,168164,168166],{"id":168165},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168168,123679],{},[567,168170,168171,168174,168177],{},[570,168172,168173],{},"给定一组学生数据。",[570,168175,168176],{},"封装函数，根据传入规则筛选学生。",[570,168178,168179],{},"筛选及格、优秀、未成年学生。",[14,168181,10499],{},[25,168183,168185],{"className":27,"code":168184,"language":29,"meta":22,"style":22},"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",[31,168186,168187,168195,168223,168251,168279,168283,168287,168291,168301,168309,168319,168326,168331,168337,168341,168345,168369,168392,168415,168419,168426,168433],{"__ignoreMap":22},[34,168188,168189,168191,168193],{"class":36,"line":37},[34,168190,160103],{"class":59},[34,168192,447],{"class":112},[34,168194,55908],{"class":59},[34,168196,168197,168199,168201,168203,168205,168207,168209,168211,168213,168215,168217,168219,168221],{"class":36,"line":44},[34,168198,148772],{"class":59},[34,168200,63140],{"class":187},[34,168202,51898],{"class":59},[34,168204,150275],{"class":187},[34,168206,12899],{"class":59},[34,168208,69585],{"class":187},[34,168210,51898],{"class":59},[34,168212,1256],{"class":63},[34,168214,12899],{"class":59},[34,168216,151859],{"class":187},[34,168218,51898],{"class":59},[34,168220,1593],{"class":63},[34,168222,5394],{"class":59},[34,168224,168225,168227,168229,168231,168233,168235,168237,168239,168241,168243,168245,168247,168249],{"class":36,"line":50},[34,168226,148772],{"class":59},[34,168228,63140],{"class":187},[34,168230,51898],{"class":59},[34,168232,151323],{"class":187},[34,168234,12899],{"class":59},[34,168236,69585],{"class":187},[34,168238,51898],{"class":59},[34,168240,1231],{"class":63},[34,168242,12899],{"class":59},[34,168244,151859],{"class":187},[34,168246,51898],{"class":59},[34,168248,1417],{"class":63},[34,168250,5394],{"class":59},[34,168252,168253,168255,168257,168259,168261,168263,168265,168267,168269,168271,168273,168275,168277],{"class":36,"line":56},[34,168254,148772],{"class":59},[34,168256,63140],{"class":187},[34,168258,51898],{"class":59},[34,168260,160118],{"class":187},[34,168262,12899],{"class":59},[34,168264,69585],{"class":187},[34,168266,51898],{"class":59},[34,168268,1281],{"class":63},[34,168270,12899],{"class":59},[34,168272,151859],{"class":187},[34,168274,51898],{"class":59},[34,168276,1487],{"class":63},[34,168278,5394],{"class":59},[34,168280,168281],{"class":36,"line":107},[34,168282,73],{"class":59},[34,168284,168285],{"class":36,"line":196},[34,168286,2864],{"emptyLinePlaceholder":540},[34,168288,168289],{"class":36,"line":202},[34,168290,2864],{"emptyLinePlaceholder":540},[34,168292,168293,168295,168298],{"class":36,"line":207},[34,168294,32410],{"class":112},[34,168296,168297],{"class":2427}," filter_students",[34,168299,168300],{"class":59},"(students, condition):\n",[34,168302,168303,168305,168307],{"class":36,"line":222},[34,168304,161610],{"class":59},[34,168306,447],{"class":112},[34,168308,52299],{"class":59},[34,168310,168311,168313,168315,168317],{"class":36,"line":227},[34,168312,3665],{"class":112},[34,168314,152524],{"class":59},[34,168316,26508],{"class":112},[34,168318,152529],{"class":59},[34,168320,168321,168323],{"class":36,"line":232},[34,168322,2961],{"class":112},[34,168324,168325],{"class":59}," condition(student):\n",[34,168327,168328],{"class":36,"line":238},[34,168329,168330],{"class":59},"            result.append(student)\n",[34,168332,168333,168335],{"class":36,"line":244},[34,168334,4554],{"class":112},[34,168336,168092],{"class":59},[34,168338,168339],{"class":36,"line":250},[34,168340,2864],{"emptyLinePlaceholder":540},[34,168342,168343],{"class":36,"line":256},[34,168344,2864],{"emptyLinePlaceholder":540},[34,168346,168347,168349,168351,168354,168356,168359,168361,168363,168365,168367],{"class":36,"line":261},[34,168348,166088],{"class":59},[34,168350,447],{"class":112},[34,168352,168353],{"class":59}," filter_students(students, ",[34,168355,167273],{"class":112},[34,168357,168358],{"class":59}," s: s[",[34,168360,151859],{"class":187},[34,168362,4907],{"class":59},[34,168364,2174],{"class":112},[34,168366,158224],{"class":63},[34,168368,623],{"class":59},[34,168370,168371,168374,168376,168378,168380,168382,168384,168386,168388,168390],{"class":36,"line":267},[34,168372,168373],{"class":59},"excellent ",[34,168375,447],{"class":112},[34,168377,168353],{"class":59},[34,168379,167273],{"class":112},[34,168381,168358],{"class":59},[34,168383,151859],{"class":187},[34,168385,4907],{"class":59},[34,168387,2174],{"class":112},[34,168389,158175],{"class":63},[34,168391,623],{"class":59},[34,168393,168394,168397,168399,168401,168403,168405,168407,168409,168411,168413],{"class":36,"line":2138},[34,168395,168396],{"class":59},"under_age ",[34,168398,447],{"class":112},[34,168400,168353],{"class":59},[34,168402,167273],{"class":112},[34,168404,168358],{"class":59},[34,168406,69585],{"class":187},[34,168408,4907],{"class":59},[34,168410,1515],{"class":112},[34,168412,156672],{"class":63},[34,168414,623],{"class":59},[34,168416,168417],{"class":36,"line":2143},[34,168418,2864],{"emptyLinePlaceholder":540},[34,168420,168421,168423],{"class":36,"line":2157},[34,168422,30878],{"class":63},[34,168424,168425],{"class":59},"(passed)\n",[34,168427,168428,168430],{"class":36,"line":2162},[34,168429,30878],{"class":63},[34,168431,168432],{"class":59},"(excellent)\n",[34,168434,168435,168437],{"class":36,"line":2191},[34,168436,30878],{"class":63},[34,168438,168439],{"class":59},"(under_age)\n",[555,168441,168443],{"id":168442},"_715-易错点","7.15 易错点",[567,168445,168446,168449,168457,168462,168473],{},[570,168447,168448],{},"默认参数不要写可变对象。",[570,168450,168451,168453,168454,168456],{},[31,168452,166919],{}," 是元组，",[31,168455,167034],{}," 是字典。",[570,168458,168459,168461],{},[31,168460,167273],{}," 只适合简单表达式。",[570,168463,168464,101405,168466,168468,168469,168472],{},[31,168465,74505],{},[31,168467,80512],{}," 的结果是迭代器，常用 ",[31,168470,168471],{},"list()"," 转换查看。",[570,168474,168475],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[555,168477,168479],{"id":168478},"_716-本章练习","7.16 本章练习",[567,168481,168482,168489,168495,168500,168505],{},[570,168483,168484,168485,168488],{},"写函数 ",[31,168486,168487],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[570,168490,168484,168491,168494],{},[31,168492,168493],{},"print_user(**kwargs)","，输出用户所有字段。",[570,168496,104753,168497,168499],{},[31,168498,167273],{}," 对学生列表按年龄排序。",[570,168501,104753,168502,168504],{},[31,168503,80512],{}," 找出成绩不及格的学生。",[570,168506,168507],{},"写一个装饰器，统计函数执行前后的提示信息。",[532,168509,168510],{},"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":22,"searchDepth":44,"depth":44,"links":168512},[168513,168514,168515,168516,168517,168518,168522,168523,168524,168525,168530,168531,168532,168533,168534,168535],{"id":166371,"depth":44,"text":166372},{"id":166485,"depth":44,"text":166486},{"id":166574,"depth":44,"text":166575},{"id":166636,"depth":44,"text":166637},{"id":166782,"depth":44,"text":166783},{"id":166909,"depth":44,"text":166910,"children":168519},[168520,168521],{"id":166913,"depth":50,"text":166914},{"id":167028,"depth":50,"text":167029},{"id":167109,"depth":44,"text":167110},{"id":167267,"depth":44,"text":167268},{"id":167435,"depth":44,"text":167436},{"id":167517,"depth":44,"text":167518,"children":168526},[168527,168528,168529],{"id":167521,"depth":50,"text":167522},{"id":167592,"depth":50,"text":167593},{"id":167669,"depth":50,"text":167670},{"id":167794,"depth":44,"text":167795},{"id":167884,"depth":44,"text":167885},{"id":168015,"depth":44,"text":168016},{"id":168165,"depth":44,"text":168166},{"id":168442,"depth":44,"text":168443},{"id":168478,"depth":44,"text":168479},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166363,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168542,"title":168543,"body":168544,"description":537,"extension":538,"meta":171063,"navigation":540,"path":171064,"seo":171065,"stem":171066,"__hash__":171067},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168545,"toc":171038},[168546,168549,168553,168556,168559,168590,168594,168598,168601,168628,168632,168635,168686,168689,168704,168707,168742,168746,168748,168772,168775,168835,168839,168843,168846,168903,168906,168926,168930,168933,168996,169000,169003,169059,169066,169090,169094,169097,169160,169164,169169,169220,169223,169227,169232,169299,169302,169384,169388,169393,169444,169447,169451,169454,169457,169465,169468,169514,169517,169563,169567,169573,169617,169620,169666,169669,169709,169712,169773,169777,169780,169870,169873,170015,170018,170085,170089,170092,170095,170236,170239,170317,170320,170496,170500,170502,170513,170515,170714,170718,170962,170966,171000,171004,171035],[10,168547,168543],{"id":168548},"_8-文件操作",[555,168550,168552],{"id":168551},"_81-文件操作的意义","8.1 文件操作的意义",[14,168554,168555],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168557,168558],{},"常见文件类型：",[567,168560,168561,168567,168573,168579,168585],{},[570,168562,168563,168566],{},[31,168564,168565],{},".txt","：普通文本。",[570,168568,168569,168572],{},[31,168570,168571],{},".csv","：表格文本。",[570,168574,168575,168578],{},[31,168576,168577],{},".json","：结构化数据。",[570,168580,168581,168584],{},[31,168582,168583],{},".log","：日志文件。",[570,168586,168587,168589],{},[31,168588,146739],{},"：Python 源代码。",[555,168591,168593],{"id":168592},"_82-路径","8.2 路径",[584,168595,168597],{"id":168596},"_821-相对路径","8.2.1 相对路径",[14,168599,168600],{},"相对当前运行目录：",[25,168602,168604],{"className":27,"code":168603,"language":29,"meta":22,"style":22},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[31,168605,168606],{"__ignoreMap":22},[34,168607,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626],{"class":36,"line":37},[34,168609,87376],{"class":63},[34,168611,617],{"class":59},[34,168613,147183],{"class":187},[34,168615,12899],{"class":59},[34,168617,147188],{"class":187},[34,168619,12899],{"class":59},[34,168621,147193],{"class":5680},[34,168623,447],{"class":112},[34,168625,147198],{"class":187},[34,168627,623],{"class":59},[584,168629,168631],{"id":168630},"_822-绝对路径","8.2.2 绝对路径",[14,168633,168634],{},"从根目录或盘符开始：",[25,168636,168638],{"className":27,"code":168637,"language":29,"meta":22,"style":22},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[31,168639,168640,168663],{"__ignoreMap":22},[34,168641,168642,168644,168646,168649,168651,168653,168655,168657,168659,168661],{"class":36,"line":37},[34,168643,87376],{"class":63},[34,168645,617],{"class":59},[34,168647,168648],{"class":187},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[34,168650,12899],{"class":59},[34,168652,147188],{"class":187},[34,168654,12899],{"class":59},[34,168656,147193],{"class":5680},[34,168658,447],{"class":112},[34,168660,147198],{"class":187},[34,168662,623],{"class":59},[34,168664,168665,168667,168669,168672,168674,168676,168678,168680,168682,168684],{"class":36,"line":44},[34,168666,87376],{"class":63},[34,168668,617],{"class":59},[34,168670,168671],{"class":187},"\"D:\u002Fdata\u002Fdata.txt\"",[34,168673,12899],{"class":59},[34,168675,147188],{"class":187},[34,168677,12899],{"class":59},[34,168679,147193],{"class":5680},[34,168681,447],{"class":112},[34,168683,147198],{"class":187},[34,168685,623],{"class":59},[14,168687,168688],{},"Windows 路径建议写成：",[25,168690,168692],{"className":27,"code":168691,"language":29,"meta":22,"style":22},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[31,168693,168694],{"__ignoreMap":22},[34,168695,168696,168699,168701],{"class":36,"line":37},[34,168697,168698],{"class":59},"path ",[34,168700,447],{"class":112},[34,168702,168703],{"class":187}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168705,168706],{},"或原始字符串：",[25,168708,168710],{"className":27,"code":168709,"language":29,"meta":22,"style":22},"path = r\"D:\\data\\data.txt\"\n",[31,168711,168712],{"__ignoreMap":22},[34,168713,168714,168716,168718,168720,168722,168725,168728,168731,168733,168735,168737,168740],{"class":36,"line":37},[34,168715,168698],{"class":59},[34,168717,447],{"class":112},[34,168719,17585],{"class":112},[34,168721,860],{"class":187},[34,168723,168724],{"class":48438},"D:",[34,168726,168727],{"class":63},"\\d",[34,168729,168730],{"class":48438},"ata",[34,168732,168727],{"class":63},[34,168734,168730],{"class":48438},[34,168736,1164],{"class":63},[34,168738,168739],{"class":48438},"txt",[34,168741,25598],{"class":187},[555,168743,168745],{"id":168744},"_83-open函数","8.3 open函数",[14,168747,5645],{},[25,168749,168751],{"className":27,"code":168750,"language":29,"meta":22,"style":22},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[31,168752,168753],{"__ignoreMap":22},[34,168754,168755,168757,168759,168761,168764,168766,168768,168770],{"class":36,"line":37},[34,168756,45815],{"class":5680},[34,168758,14028],{"class":112},[34,168760,147178],{"class":63},[34,168762,168763],{"class":59},"(文件路径, 打开模式, ",[34,168765,147193],{"class":5680},[34,168767,447],{"class":112},[34,168769,147198],{"class":187},[34,168771,623],{"class":59},[14,168773,168774],{},"常见模式：",[748,168776,168777,168786],{},[751,168778,168779],{},[754,168780,168781,168784],{},[757,168782,168783],{},"模式",[757,168785,26334],{},[795,168787,168788,168797,168806,168815,168825],{},[754,168789,168790,168794],{},[800,168791,168792],{},[31,168793,1276],{},[800,168795,168796],{},"只读，文件不存在会报错",[754,168798,168799,168803],{},[800,168800,168801],{},[31,168802,1401],{},[800,168804,168805],{},"只写，文件不存在会创建，存在会清空",[754,168807,168808,168812],{},[800,168809,168810],{},[31,168811,847],{},[800,168813,168814],{},"追加，文件不存在会创建",[754,168816,168817,168822],{},[800,168818,168819],{},[31,168820,168821],{},"rb",[800,168823,168824],{},"二进制只读",[754,168826,168827,168832],{},[800,168828,168829],{},[31,168830,168831],{},"wb",[800,168833,168834],{},"二进制只写",[555,168836,168838],{"id":168837},"_84-读取文件","8.4 读取文件",[584,168840,168842],{"id":168841},"_841-read","8.4.1 read",[14,168844,168845],{},"一次读取全部内容：",[25,168847,168849],{"className":27,"code":168848,"language":29,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[31,168850,168851,168877,168889,168896],{"__ignoreMap":22},[34,168852,168853,168855,168857,168859,168861,168863,168865,168867,168869,168871,168873,168875],{"class":36,"line":37},[34,168854,45815],{"class":5680},[34,168856,14028],{"class":112},[34,168858,147178],{"class":63},[34,168860,617],{"class":59},[34,168862,147183],{"class":187},[34,168864,12899],{"class":59},[34,168866,147188],{"class":187},[34,168868,12899],{"class":59},[34,168870,147193],{"class":5680},[34,168872,447],{"class":112},[34,168874,147198],{"class":187},[34,168876,623],{"class":59},[34,168878,168879,168882,168884,168886],{"class":36,"line":44},[34,168880,168881],{"class":59},"content ",[34,168883,447],{"class":112},[34,168885,148540],{"class":5680},[34,168887,168888],{"class":59},".read()\n",[34,168890,168891,168893],{"class":36,"line":50},[34,168892,30878],{"class":63},[34,168894,168895],{"class":59},"(content)\n",[34,168897,168898,168900],{"class":36,"line":56},[34,168899,45815],{"class":5680},[34,168901,168902],{"class":59},".close()\n",[14,168904,168905],{},"可以指定读取字符数：",[25,168907,168909],{"className":27,"code":168908,"language":29,"meta":22,"style":22},"content = file.read(10)\n",[31,168910,168911],{"__ignoreMap":22},[34,168912,168913,168915,168917,168919,168922,168924],{"class":36,"line":37},[34,168914,168881],{"class":59},[34,168916,447],{"class":112},[34,168918,148540],{"class":5680},[34,168920,168921],{"class":59},".read(",[34,168923,1053],{"class":63},[34,168925,623],{"class":59},[584,168927,168929],{"id":168928},"_842-readline","8.4.2 readline",[14,168931,168932],{},"一次读取一行：",[25,168934,168936],{"className":27,"code":168935,"language":29,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[31,168937,168938,168964,168968,168979,168986,168990],{"__ignoreMap":22},[34,168939,168940,168942,168944,168946,168948,168950,168952,168954,168956,168958,168960,168962],{"class":36,"line":37},[34,168941,45815],{"class":5680},[34,168943,14028],{"class":112},[34,168945,147178],{"class":63},[34,168947,617],{"class":59},[34,168949,147183],{"class":187},[34,168951,12899],{"class":59},[34,168953,147188],{"class":187},[34,168955,12899],{"class":59},[34,168957,147193],{"class":5680},[34,168959,447],{"class":112},[34,168961,147198],{"class":187},[34,168963,623],{"class":59},[34,168965,168966],{"class":36,"line":44},[34,168967,2864],{"emptyLinePlaceholder":540},[34,168969,168970,168972,168974,168976],{"class":36,"line":50},[34,168971,147639],{"class":59},[34,168973,447],{"class":112},[34,168975,148540],{"class":5680},[34,168977,168978],{"class":59},".readline()\n",[34,168980,168981,168983],{"class":36,"line":56},[34,168982,30878],{"class":63},[34,168984,168985],{"class":59},"(line)\n",[34,168987,168988],{"class":36,"line":107},[34,168989,2864],{"emptyLinePlaceholder":540},[34,168991,168992,168994],{"class":36,"line":196},[34,168993,45815],{"class":5680},[34,168995,168902],{"class":59},[584,168997,168999],{"id":168998},"_843-readlines","8.4.3 readlines",[14,169001,169002],{},"读取所有行，返回列表：",[25,169004,169006],{"className":27,"code":169005,"language":29,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[31,169007,169008,169034,169046,169053],{"__ignoreMap":22},[34,169009,169010,169012,169014,169016,169018,169020,169022,169024,169026,169028,169030,169032],{"class":36,"line":37},[34,169011,45815],{"class":5680},[34,169013,14028],{"class":112},[34,169015,147178],{"class":63},[34,169017,617],{"class":59},[34,169019,147183],{"class":187},[34,169021,12899],{"class":59},[34,169023,147188],{"class":187},[34,169025,12899],{"class":59},[34,169027,147193],{"class":5680},[34,169029,447],{"class":112},[34,169031,147198],{"class":187},[34,169033,623],{"class":59},[34,169035,169036,169039,169041,169043],{"class":36,"line":44},[34,169037,169038],{"class":59},"lines ",[34,169040,447],{"class":112},[34,169042,148540],{"class":5680},[34,169044,169045],{"class":59},".readlines()\n",[34,169047,169048,169050],{"class":36,"line":50},[34,169049,30878],{"class":63},[34,169051,169052],{"class":59},"(lines)\n",[34,169054,169055,169057],{"class":36,"line":56},[34,169056,45815],{"class":5680},[34,169058,168902],{"class":59},[14,169060,169061,169062,169065],{},"每一行通常带有换行符，可以用 ",[31,169063,169064],{},"strip()"," 去掉：",[25,169067,169069],{"className":27,"code":169068,"language":29,"meta":22,"style":22},"for line in lines:\n    print(line.strip())\n",[31,169070,169071,169083],{"__ignoreMap":22},[34,169072,169073,169075,169078,169080],{"class":36,"line":37},[34,169074,3489],{"class":112},[34,169076,169077],{"class":59}," line ",[34,169079,26508],{"class":112},[34,169081,169082],{"class":59}," lines:\n",[34,169084,169085,169087],{"class":36,"line":44},[34,169086,31762],{"class":63},[34,169088,169089],{"class":59},"(line.strip())\n",[584,169091,169093],{"id":169092},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169095,169096],{},"推荐读取大文件时使用：",[25,169098,169100],{"className":27,"code":169099,"language":29,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[31,169101,169102,169128,169132,169144,169150,169154],{"__ignoreMap":22},[34,169103,169104,169106,169108,169110,169112,169114,169116,169118,169120,169122,169124,169126],{"class":36,"line":37},[34,169105,45815],{"class":5680},[34,169107,14028],{"class":112},[34,169109,147178],{"class":63},[34,169111,617],{"class":59},[34,169113,147183],{"class":187},[34,169115,12899],{"class":59},[34,169117,147188],{"class":187},[34,169119,12899],{"class":59},[34,169121,147193],{"class":5680},[34,169123,447],{"class":112},[34,169125,147198],{"class":187},[34,169127,623],{"class":59},[34,169129,169130],{"class":36,"line":44},[34,169131,2864],{"emptyLinePlaceholder":540},[34,169133,169134,169136,169138,169140,169142],{"class":36,"line":50},[34,169135,3489],{"class":112},[34,169137,169077],{"class":59},[34,169139,26508],{"class":112},[34,169141,148540],{"class":5680},[34,169143,4203],{"class":59},[34,169145,169146,169148],{"class":36,"line":56},[34,169147,31762],{"class":63},[34,169149,169089],{"class":59},[34,169151,169152],{"class":36,"line":107},[34,169153,2864],{"emptyLinePlaceholder":540},[34,169155,169156,169158],{"class":36,"line":196},[34,169157,45815],{"class":5680},[34,169159,168902],{"class":59},[555,169161,169163],{"id":169162},"_85-with语句","8.5 with语句",[14,169165,169166,169168],{},[31,169167,108220],{}," 会自动关闭文件，推荐使用。",[25,169170,169172],{"className":27,"code":169171,"language":29,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[31,169173,169174,169204,169214],{"__ignoreMap":22},[34,169175,169176,169178,169180,169182,169184,169186,169188,169190,169192,169194,169196,169198,169200,169202],{"class":36,"line":37},[34,169177,108220],{"class":112},[34,169179,147178],{"class":63},[34,169181,617],{"class":59},[34,169183,147183],{"class":187},[34,169185,12899],{"class":59},[34,169187,147188],{"class":187},[34,169189,12899],{"class":59},[34,169191,147193],{"class":5680},[34,169193,447],{"class":112},[34,169195,147198],{"class":187},[34,169197,14178],{"class":59},[34,169199,31846],{"class":112},[34,169201,148540],{"class":5680},[34,169203,4203],{"class":59},[34,169205,169206,169208,169210,169212],{"class":36,"line":44},[34,169207,147210],{"class":59},[34,169209,447],{"class":112},[34,169211,148540],{"class":5680},[34,169213,168888],{"class":59},[34,169215,169216,169218],{"class":36,"line":50},[34,169217,31762],{"class":63},[34,169219,168895],{"class":59},[14,169221,169222],{},"等价于打开文件、读取、最后关闭，但更安全。",[555,169224,169226],{"id":169225},"_86-写入文件","8.6 写入文件",[14,169228,169229,169231],{},[31,169230,1401],{}," 模式会清空原文件。",[25,169233,169235],{"className":27,"code":169234,"language":29,"meta":22,"style":22},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[31,169236,169237,169267,169284],{"__ignoreMap":22},[34,169238,169239,169241,169243,169245,169247,169249,169251,169253,169255,169257,169259,169261,169263,169265],{"class":36,"line":37},[34,169240,108220],{"class":112},[34,169242,147178],{"class":63},[34,169244,617],{"class":59},[34,169246,147183],{"class":187},[34,169248,12899],{"class":59},[34,169250,152363],{"class":187},[34,169252,12899],{"class":59},[34,169254,147193],{"class":5680},[34,169256,447],{"class":112},[34,169258,147198],{"class":187},[34,169260,14178],{"class":59},[34,169262,31846],{"class":112},[34,169264,148540],{"class":5680},[34,169266,4203],{"class":59},[34,169268,169269,169272,169275,169278,169280,169282],{"class":36,"line":44},[34,169270,169271],{"class":5680},"    file",[34,169273,169274],{"class":59},".write(",[34,169276,169277],{"class":187},"\"hello",[34,169279,156912],{"class":63},[34,169281,860],{"class":187},[34,169283,623],{"class":59},[34,169285,169286,169288,169290,169293,169295,169297],{"class":36,"line":50},[34,169287,169271],{"class":5680},[34,169289,169274],{"class":59},[34,169291,169292],{"class":187},"\"python",[34,169294,156912],{"class":63},[34,169296,860],{"class":187},[34,169298,623],{"class":59},[14,169300,169301],{},"写入多行：",[25,169303,169305],{"className":27,"code":169304,"language":29,"meta":22,"style":22},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[31,169306,169307,169342,169346,169377],{"__ignoreMap":22},[34,169308,169309,169311,169313,169315,169318,169320,169322,169324,169327,169329,169331,169333,169336,169338,169340],{"class":36,"line":37},[34,169310,169038],{"class":59},[34,169312,447],{"class":112},[34,169314,52687],{"class":59},[34,169316,169317],{"class":187},"\"小明,18",[34,169319,156912],{"class":63},[34,169321,860],{"class":187},[34,169323,12899],{"class":59},[34,169325,169326],{"class":187},"\"小红,17",[34,169328,156912],{"class":63},[34,169330,860],{"class":187},[34,169332,12899],{"class":59},[34,169334,169335],{"class":187},"\"小刚,19",[34,169337,156912],{"class":63},[34,169339,860],{"class":187},[34,169341,73],{"class":59},[34,169343,169344],{"class":36,"line":44},[34,169345,2864],{"emptyLinePlaceholder":540},[34,169347,169348,169350,169352,169354,169357,169359,169361,169363,169365,169367,169369,169371,169373,169375],{"class":36,"line":50},[34,169349,108220],{"class":112},[34,169351,147178],{"class":63},[34,169353,617],{"class":59},[34,169355,169356],{"class":187},"\"students.txt\"",[34,169358,12899],{"class":59},[34,169360,152363],{"class":187},[34,169362,12899],{"class":59},[34,169364,147193],{"class":5680},[34,169366,447],{"class":112},[34,169368,147198],{"class":187},[34,169370,14178],{"class":59},[34,169372,31846],{"class":112},[34,169374,148540],{"class":5680},[34,169376,4203],{"class":59},[34,169378,169379,169381],{"class":36,"line":56},[34,169380,169271],{"class":5680},[34,169382,169383],{"class":59},".writelines(lines)\n",[555,169385,169387],{"id":169386},"_87-追加文件","8.7 追加文件",[14,169389,169390,169392],{},[31,169391,847],{}," 模式不会清空原内容，而是在末尾追加。",[25,169394,169396],{"className":27,"code":169395,"language":29,"meta":22,"style":22},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[31,169397,169398,169429],{"__ignoreMap":22},[34,169399,169400,169402,169404,169406,169409,169411,169413,169415,169417,169419,169421,169423,169425,169427],{"class":36,"line":37},[34,169401,108220],{"class":112},[34,169403,147178],{"class":63},[34,169405,617],{"class":59},[34,169407,169408],{"class":187},"\"log.txt\"",[34,169410,12899],{"class":59},[34,169412,165712],{"class":187},[34,169414,12899],{"class":59},[34,169416,147193],{"class":5680},[34,169418,447],{"class":112},[34,169420,147198],{"class":187},[34,169422,14178],{"class":59},[34,169424,31846],{"class":112},[34,169426,148540],{"class":5680},[34,169428,4203],{"class":59},[34,169430,169431,169433,169435,169438,169440,169442],{"class":36,"line":44},[34,169432,169271],{"class":5680},[34,169434,169274],{"class":59},[34,169436,169437],{"class":187},"\"程序启动",[34,169439,156912],{"class":63},[34,169441,860],{"class":187},[34,169443,623],{"class":59},[14,169445,169446],{},"日志类文件常用追加模式。",[555,169448,169450],{"id":169449},"_88-文件编码","8.8 文件编码",[14,169452,169453],{},"编码决定文字如何保存为字节。",[14,169455,169456],{},"常见编码：",[567,169458,169459,169462],{},[570,169460,169461],{},"UTF-8：推荐。",[570,169463,169464],{},"GBK：部分 Windows 中文文件常见。",[14,169466,169467],{},"读取文件乱码时，可以尝试：",[25,169469,169471],{"className":27,"code":169470,"language":29,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[31,169472,169473,169504],{"__ignoreMap":22},[34,169474,169475,169477,169479,169481,169483,169485,169487,169489,169491,169493,169496,169498,169500,169502],{"class":36,"line":37},[34,169476,108220],{"class":112},[34,169478,147178],{"class":63},[34,169480,617],{"class":59},[34,169482,147183],{"class":187},[34,169484,12899],{"class":59},[34,169486,147188],{"class":187},[34,169488,12899],{"class":59},[34,169490,147193],{"class":5680},[34,169492,447],{"class":112},[34,169494,169495],{"class":187},"\"gbk\"",[34,169497,14178],{"class":59},[34,169499,31846],{"class":112},[34,169501,148540],{"class":5680},[34,169503,4203],{"class":59},[34,169505,169506,169508,169510,169512],{"class":36,"line":44},[34,169507,147210],{"class":59},[34,169509,447],{"class":112},[34,169511,148540],{"class":5680},[34,169513,168888],{"class":59},[14,169515,169516],{},"写文件时建议统一 UTF-8：",[25,169518,169520],{"className":27,"code":169519,"language":29,"meta":22,"style":22},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[31,169521,169522,169552],{"__ignoreMap":22},[34,169523,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542,169544,169546,169548,169550],{"class":36,"line":37},[34,169525,108220],{"class":112},[34,169527,147178],{"class":63},[34,169529,617],{"class":59},[34,169531,147183],{"class":187},[34,169533,12899],{"class":59},[34,169535,152363],{"class":187},[34,169537,12899],{"class":59},[34,169539,147193],{"class":5680},[34,169541,447],{"class":112},[34,169543,147198],{"class":187},[34,169545,14178],{"class":59},[34,169547,31846],{"class":112},[34,169549,148540],{"class":5680},[34,169551,4203],{"class":59},[34,169553,169554,169556,169558,169561],{"class":36,"line":44},[34,169555,169271],{"class":5680},[34,169557,169274],{"class":59},[34,169559,169560],{"class":187},"\"中文内容\"",[34,169562,623],{"class":59},[555,169564,169566],{"id":169565},"_89-pathlib","8.9 pathlib",[14,169568,169569,169572],{},[31,169570,169571],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[25,169574,169576],{"className":27,"code":169575,"language":29,"meta":22,"style":22},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[31,169577,169578,169588,169592,169610],{"__ignoreMap":22},[34,169579,169580,169582,169584,169586],{"class":36,"line":37},[34,169581,31200],{"class":112},[34,169583,108698],{"class":59},[34,169585,30855],{"class":112},[34,169587,108703],{"class":59},[34,169589,169590],{"class":36,"line":44},[34,169591,2864],{"emptyLinePlaceholder":540},[34,169593,169594,169596,169598,169600,169603,169605,169607],{"class":36,"line":50},[34,169595,168698],{"class":59},[34,169597,447],{"class":112},[34,169599,108932],{"class":59},[34,169601,169602],{"class":187},"\"data\"",[34,169604,14178],{"class":59},[34,169606,1190],{"class":112},[34,169608,169609],{"class":187}," \"students.txt\"\n",[34,169611,169612,169614],{"class":36,"line":56},[34,169613,30878],{"class":63},[34,169615,169616],{"class":59},"(path)\n",[14,169618,169619],{},"创建目录：",[25,169621,169623],{"className":27,"code":169622,"language":29,"meta":22,"style":22},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[31,169624,169625,169635,169639,169652],{"__ignoreMap":22},[34,169626,169627,169629,169631,169633],{"class":36,"line":37},[34,169628,31200],{"class":112},[34,169630,108698],{"class":59},[34,169632,30855],{"class":112},[34,169634,108703],{"class":59},[34,169636,169637],{"class":36,"line":44},[34,169638,2864],{"emptyLinePlaceholder":540},[34,169640,169641,169644,169646,169648,169650],{"class":36,"line":50},[34,169642,169643],{"class":59},"data_dir ",[34,169645,447],{"class":112},[34,169647,108932],{"class":59},[34,169649,169602],{"class":187},[34,169651,623],{"class":59},[34,169653,169654,169657,169660,169662,169664],{"class":36,"line":56},[34,169655,169656],{"class":59},"data_dir.mkdir(",[34,169658,169659],{"class":5680},"exist_ok",[34,169661,447],{"class":112},[34,169663,31939],{"class":63},[34,169665,623],{"class":59},[14,169667,169668],{},"判断文件是否存在：",[25,169670,169672],{"className":27,"code":169671,"language":29,"meta":22,"style":22},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[31,169673,169674,169687,169691,169698],{"__ignoreMap":22},[34,169675,169676,169678,169680,169682,169685],{"class":36,"line":37},[34,169677,168698],{"class":59},[34,169679,447],{"class":112},[34,169681,108932],{"class":59},[34,169683,169684],{"class":187},"\"data\u002Fstudents.txt\"",[34,169686,623],{"class":59},[34,169688,169689],{"class":36,"line":44},[34,169690,2864],{"emptyLinePlaceholder":540},[34,169692,169693,169695],{"class":36,"line":50},[34,169694,2002],{"class":112},[34,169696,169697],{"class":59}," path.exists():\n",[34,169699,169700,169702,169704,169707],{"class":36,"line":56},[34,169701,31762],{"class":63},[34,169703,617],{"class":59},[34,169705,169706],{"class":187},"\"文件存在\"",[34,169708,623],{"class":59},[14,169710,169711],{},"读写文本：",[25,169713,169715],{"className":27,"code":169714,"language":29,"meta":22,"style":22},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[31,169716,169717,169729,169733,169750,169767],{"__ignoreMap":22},[34,169718,169719,169721,169723,169725,169727],{"class":36,"line":37},[34,169720,168698],{"class":59},[34,169722,447],{"class":112},[34,169724,108932],{"class":59},[34,169726,147183],{"class":187},[34,169728,623],{"class":59},[34,169730,169731],{"class":36,"line":44},[34,169732,2864],{"emptyLinePlaceholder":540},[34,169734,169735,169738,169740,169742,169744,169746,169748],{"class":36,"line":50},[34,169736,169737],{"class":59},"path.write_text(",[34,169739,146263],{"class":187},[34,169741,12899],{"class":59},[34,169743,147193],{"class":5680},[34,169745,447],{"class":112},[34,169747,147198],{"class":187},[34,169749,623],{"class":59},[34,169751,169752,169754,169756,169759,169761,169763,169765],{"class":36,"line":56},[34,169753,168881],{"class":59},[34,169755,447],{"class":112},[34,169757,169758],{"class":59}," path.read_text(",[34,169760,147193],{"class":5680},[34,169762,447],{"class":112},[34,169764,147198],{"class":187},[34,169766,623],{"class":59},[34,169768,169769,169771],{"class":36,"line":107},[34,169770,30878],{"class":63},[34,169772,168895],{"class":59},[555,169774,169776],{"id":169775},"_810-json文件","8.10 JSON文件",[14,169778,169779],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[25,169781,169783],{"className":27,"code":169782,"language":29,"meta":22,"style":22},"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",[31,169784,169785,169791,169795,169803,169813,169823,169831,169835,169839,169864],{"__ignoreMap":22},[34,169786,169787,169789],{"class":36,"line":37},[34,169788,30855],{"class":112},[34,169790,147478],{"class":59},[34,169792,169793],{"class":36,"line":44},[34,169794,2864],{"emptyLinePlaceholder":540},[34,169796,169797,169799,169801],{"class":36,"line":50},[34,169798,149868],{"class":59},[34,169800,447],{"class":112},[34,169802,16036],{"class":59},[34,169804,169805,169807,169809,169811],{"class":36,"line":56},[34,169806,147407],{"class":187},[34,169808,51898],{"class":59},[34,169810,150275],{"class":187},[34,169812,31929],{"class":59},[34,169814,169815,169817,169819,169821],{"class":36,"line":107},[34,169816,164924],{"class":187},[34,169818,51898],{"class":59},[34,169820,1256],{"class":63},[34,169822,31929],{"class":59},[34,169824,169825,169827,169829],{"class":36,"line":196},[34,169826,164935],{"class":187},[34,169828,51898],{"class":59},[34,169830,164940],{"class":63},[34,169832,169833],{"class":36,"line":202},[34,169834,2036],{"class":59},[34,169836,169837],{"class":36,"line":207},[34,169838,2864],{"emptyLinePlaceholder":540},[34,169840,169841,169843,169845,169848,169850,169852,169854,169856,169858,169860,169862],{"class":36,"line":222},[34,169842,156831],{"class":59},[34,169844,447],{"class":112},[34,169846,169847],{"class":59}," json.dumps(student, ",[34,169849,147524],{"class":5680},[34,169851,447],{"class":112},[34,169853,34449],{"class":63},[34,169855,12899],{"class":59},[34,169857,152399],{"class":5680},[34,169859,447],{"class":112},[34,169861,70],{"class":63},[34,169863,623],{"class":59},[34,169865,169866,169868],{"class":36,"line":227},[34,169867,30878],{"class":63},[34,169869,164458],{"class":59},[14,169871,169872],{},"写入 JSON 文件：",[25,169874,169876],{"className":27,"code":169875,"language":29,"meta":22,"style":22},"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",[31,169877,169878,169884,169888,169896,169924,169952,169956,169960,169990],{"__ignoreMap":22},[34,169879,169880,169882],{"class":36,"line":37},[34,169881,30855],{"class":112},[34,169883,147478],{"class":59},[34,169885,169886],{"class":36,"line":44},[34,169887,2864],{"emptyLinePlaceholder":540},[34,169889,169890,169892,169894],{"class":36,"line":50},[34,169891,160103],{"class":59},[34,169893,447],{"class":112},[34,169895,55908],{"class":59},[34,169897,169898,169900,169902,169904,169906,169908,169910,169912,169914,169916,169918,169920,169922],{"class":36,"line":56},[34,169899,148772],{"class":59},[34,169901,63140],{"class":187},[34,169903,51898],{"class":59},[34,169905,150275],{"class":187},[34,169907,12899],{"class":59},[34,169909,69585],{"class":187},[34,169911,51898],{"class":59},[34,169913,1256],{"class":63},[34,169915,12899],{"class":59},[34,169917,151859],{"class":187},[34,169919,51898],{"class":59},[34,169921,1593],{"class":63},[34,169923,5394],{"class":59},[34,169925,169926,169928,169930,169932,169934,169936,169938,169940,169942,169944,169946,169948,169950],{"class":36,"line":107},[34,169927,148772],{"class":59},[34,169929,63140],{"class":187},[34,169931,51898],{"class":59},[34,169933,151323],{"class":187},[34,169935,12899],{"class":59},[34,169937,69585],{"class":187},[34,169939,51898],{"class":59},[34,169941,1231],{"class":63},[34,169943,12899],{"class":59},[34,169945,151859],{"class":187},[34,169947,51898],{"class":59},[34,169949,1417],{"class":63},[34,169951,5394],{"class":59},[34,169953,169954],{"class":36,"line":196},[34,169955,73],{"class":59},[34,169957,169958],{"class":36,"line":202},[34,169959,2864],{"emptyLinePlaceholder":540},[34,169961,169962,169964,169966,169968,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988],{"class":36,"line":207},[34,169963,108220],{"class":112},[34,169965,147178],{"class":63},[34,169967,617],{"class":59},[34,169969,152218],{"class":187},[34,169971,12899],{"class":59},[34,169973,152363],{"class":187},[34,169975,12899],{"class":59},[34,169977,147193],{"class":5680},[34,169979,447],{"class":112},[34,169981,147198],{"class":187},[34,169983,14178],{"class":59},[34,169985,31846],{"class":112},[34,169987,148540],{"class":5680},[34,169989,4203],{"class":59},[34,169991,169992,169995,169997,169999,170001,170003,170005,170007,170009,170011,170013],{"class":36,"line":222},[34,169993,169994],{"class":59},"    json.dump(students, ",[34,169996,45815],{"class":5680},[34,169998,12899],{"class":59},[34,170000,147524],{"class":5680},[34,170002,447],{"class":112},[34,170004,34449],{"class":63},[34,170006,12899],{"class":59},[34,170008,152399],{"class":5680},[34,170010,447],{"class":112},[34,170012,70],{"class":63},[34,170014,623],{"class":59},[14,170016,170017],{},"读取 JSON 文件：",[25,170019,170021],{"className":27,"code":170020,"language":29,"meta":22,"style":22},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[31,170022,170023,170029,170033,170063,170075,170079],{"__ignoreMap":22},[34,170024,170025,170027],{"class":36,"line":37},[34,170026,30855],{"class":112},[34,170028,147478],{"class":59},[34,170030,170031],{"class":36,"line":44},[34,170032,2864],{"emptyLinePlaceholder":540},[34,170034,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061],{"class":36,"line":50},[34,170036,108220],{"class":112},[34,170038,147178],{"class":63},[34,170040,617],{"class":59},[34,170042,152218],{"class":187},[34,170044,12899],{"class":59},[34,170046,147188],{"class":187},[34,170048,12899],{"class":59},[34,170050,147193],{"class":5680},[34,170052,447],{"class":112},[34,170054,147198],{"class":187},[34,170056,14178],{"class":59},[34,170058,31846],{"class":112},[34,170060,148540],{"class":5680},[34,170062,4203],{"class":59},[34,170064,170065,170067,170069,170071,170073],{"class":36,"line":56},[34,170066,153424],{"class":59},[34,170068,447],{"class":112},[34,170070,148551],{"class":59},[34,170072,45815],{"class":5680},[34,170074,623],{"class":59},[34,170076,170077],{"class":36,"line":107},[34,170078,2864],{"emptyLinePlaceholder":540},[34,170080,170081,170083],{"class":36,"line":196},[34,170082,30878],{"class":63},[34,170084,165382],{"class":59},[555,170086,170088],{"id":170087},"_811-csv文件","8.11 CSV文件",[14,170090,170091],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170093,170094],{},"写入 CSV：",[25,170096,170098],{"className":27,"code":170097,"language":29,"meta":22,"style":22},"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",[31,170099,170100,170107,170111,170119,170137,170153,170169,170173,170177,170217,170231],{"__ignoreMap":22},[34,170101,170102,170104],{"class":36,"line":37},[34,170103,30855],{"class":112},[34,170105,170106],{"class":59}," csv\n",[34,170108,170109],{"class":36,"line":44},[34,170110,2864],{"emptyLinePlaceholder":540},[34,170112,170113,170115,170117],{"class":36,"line":50},[34,170114,160103],{"class":59},[34,170116,447],{"class":112},[34,170118,55908],{"class":59},[34,170120,170121,170124,170126,170128,170130,170132,170135],{"class":36,"line":56},[34,170122,170123],{"class":59},"    [",[34,170125,73560],{"class":187},[34,170127,12899],{"class":59},[34,170129,73593],{"class":187},[34,170131,12899],{"class":59},[34,170133,170134],{"class":187},"\"成绩\"",[34,170136,88297],{"class":59},[34,170138,170139,170141,170143,170145,170147,170149,170151],{"class":36,"line":107},[34,170140,170123],{"class":59},[34,170142,150275],{"class":187},[34,170144,12899],{"class":59},[34,170146,1256],{"class":63},[34,170148,12899],{"class":59},[34,170150,1593],{"class":63},[34,170152,88297],{"class":59},[34,170154,170155,170157,170159,170161,170163,170165,170167],{"class":36,"line":196},[34,170156,170123],{"class":59},[34,170158,151323],{"class":187},[34,170160,12899],{"class":59},[34,170162,1231],{"class":63},[34,170164,12899],{"class":59},[34,170166,1417],{"class":63},[34,170168,88297],{"class":59},[34,170170,170171],{"class":36,"line":202},[34,170172,73],{"class":59},[34,170174,170175],{"class":36,"line":207},[34,170176,2864],{"emptyLinePlaceholder":540},[34,170178,170179,170181,170183,170185,170188,170190,170192,170194,170196,170198,170200,170202,170205,170207,170209,170211,170213,170215],{"class":36,"line":222},[34,170180,108220],{"class":112},[34,170182,147178],{"class":63},[34,170184,617],{"class":59},[34,170186,170187],{"class":187},"\"students.csv\"",[34,170189,12899],{"class":59},[34,170191,152363],{"class":187},[34,170193,12899],{"class":59},[34,170195,147193],{"class":5680},[34,170197,447],{"class":112},[34,170199,147198],{"class":187},[34,170201,12899],{"class":59},[34,170203,170204],{"class":5680},"newline",[34,170206,447],{"class":112},[34,170208,8116],{"class":187},[34,170210,14178],{"class":59},[34,170212,31846],{"class":112},[34,170214,148540],{"class":5680},[34,170216,4203],{"class":59},[34,170218,170219,170222,170224,170227,170229],{"class":36,"line":227},[34,170220,170221],{"class":59},"    writer ",[34,170223,447],{"class":112},[34,170225,170226],{"class":59}," csv.writer(",[34,170228,45815],{"class":5680},[34,170230,623],{"class":59},[34,170232,170233],{"class":36,"line":232},[34,170234,170235],{"class":59},"    writer.writerows(students)\n",[14,170237,170238],{},"读取 CSV：",[25,170240,170242],{"className":27,"code":170241,"language":29,"meta":22,"style":22},"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",[31,170243,170244,170250,170254,170284,170298,170310],{"__ignoreMap":22},[34,170245,170246,170248],{"class":36,"line":37},[34,170247,30855],{"class":112},[34,170249,170106],{"class":59},[34,170251,170252],{"class":36,"line":44},[34,170253,2864],{"emptyLinePlaceholder":540},[34,170255,170256,170258,170260,170262,170264,170266,170268,170270,170272,170274,170276,170278,170280,170282],{"class":36,"line":50},[34,170257,108220],{"class":112},[34,170259,147178],{"class":63},[34,170261,617],{"class":59},[34,170263,170187],{"class":187},[34,170265,12899],{"class":59},[34,170267,147188],{"class":187},[34,170269,12899],{"class":59},[34,170271,147193],{"class":5680},[34,170273,447],{"class":112},[34,170275,147198],{"class":187},[34,170277,14178],{"class":59},[34,170279,31846],{"class":112},[34,170281,148540],{"class":5680},[34,170283,4203],{"class":59},[34,170285,170286,170289,170291,170294,170296],{"class":36,"line":56},[34,170287,170288],{"class":59},"    reader ",[34,170290,447],{"class":112},[34,170292,170293],{"class":59}," csv.reader(",[34,170295,45815],{"class":5680},[34,170297,623],{"class":59},[34,170299,170300,170302,170305,170307],{"class":36,"line":107},[34,170301,3665],{"class":112},[34,170303,170304],{"class":59}," row ",[34,170306,26508],{"class":112},[34,170308,170309],{"class":59}," reader:\n",[34,170311,170312,170314],{"class":36,"line":196},[34,170313,32914],{"class":63},[34,170315,170316],{"class":59},"(row)\n",[14,170318,170319],{},"使用字典写入：",[25,170321,170323],{"className":27,"code":170322,"language":29,"meta":22,"style":22},"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",[31,170324,170325,170331,170335,170343,170371,170399,170403,170407,170445,170466,170487,170492],{"__ignoreMap":22},[34,170326,170327,170329],{"class":36,"line":37},[34,170328,30855],{"class":112},[34,170330,170106],{"class":59},[34,170332,170333],{"class":36,"line":44},[34,170334,2864],{"emptyLinePlaceholder":540},[34,170336,170337,170339,170341],{"class":36,"line":50},[34,170338,160103],{"class":59},[34,170340,447],{"class":112},[34,170342,55908],{"class":59},[34,170344,170345,170347,170349,170351,170353,170355,170357,170359,170361,170363,170365,170367,170369],{"class":36,"line":56},[34,170346,148772],{"class":59},[34,170348,63140],{"class":187},[34,170350,51898],{"class":59},[34,170352,150275],{"class":187},[34,170354,12899],{"class":59},[34,170356,69585],{"class":187},[34,170358,51898],{"class":59},[34,170360,1256],{"class":63},[34,170362,12899],{"class":59},[34,170364,151859],{"class":187},[34,170366,51898],{"class":59},[34,170368,1593],{"class":63},[34,170370,5394],{"class":59},[34,170372,170373,170375,170377,170379,170381,170383,170385,170387,170389,170391,170393,170395,170397],{"class":36,"line":107},[34,170374,148772],{"class":59},[34,170376,63140],{"class":187},[34,170378,51898],{"class":59},[34,170380,151323],{"class":187},[34,170382,12899],{"class":59},[34,170384,69585],{"class":187},[34,170386,51898],{"class":59},[34,170388,1231],{"class":63},[34,170390,12899],{"class":59},[34,170392,151859],{"class":187},[34,170394,51898],{"class":59},[34,170396,1417],{"class":63},[34,170398,5394],{"class":59},[34,170400,170401],{"class":36,"line":196},[34,170402,73],{"class":59},[34,170404,170405],{"class":36,"line":202},[34,170406,2864],{"emptyLinePlaceholder":540},[34,170408,170409,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429,170431,170433,170435,170437,170439,170441,170443],{"class":36,"line":207},[34,170410,108220],{"class":112},[34,170412,147178],{"class":63},[34,170414,617],{"class":59},[34,170416,170187],{"class":187},[34,170418,12899],{"class":59},[34,170420,152363],{"class":187},[34,170422,12899],{"class":59},[34,170424,147193],{"class":5680},[34,170426,447],{"class":112},[34,170428,147198],{"class":187},[34,170430,12899],{"class":59},[34,170432,170204],{"class":5680},[34,170434,447],{"class":112},[34,170436,8116],{"class":187},[34,170438,14178],{"class":59},[34,170440,31846],{"class":112},[34,170442,148540],{"class":5680},[34,170444,4203],{"class":59},[34,170446,170447,170450,170452,170454,170456,170458,170460,170462,170464],{"class":36,"line":222},[34,170448,170449],{"class":59},"    fieldnames ",[34,170451,447],{"class":112},[34,170453,52687],{"class":59},[34,170455,63140],{"class":187},[34,170457,12899],{"class":59},[34,170459,69585],{"class":187},[34,170461,12899],{"class":59},[34,170463,151859],{"class":187},[34,170465,73],{"class":59},[34,170467,170468,170470,170472,170475,170477,170479,170482,170484],{"class":36,"line":227},[34,170469,170221],{"class":59},[34,170471,447],{"class":112},[34,170473,170474],{"class":59}," csv.DictWriter(",[34,170476,45815],{"class":5680},[34,170478,12899],{"class":59},[34,170480,170481],{"class":5680},"fieldnames",[34,170483,447],{"class":112},[34,170485,170486],{"class":59},"fieldnames)\n",[34,170488,170489],{"class":36,"line":232},[34,170490,170491],{"class":59},"    writer.writeheader()\n",[34,170493,170494],{"class":36,"line":238},[34,170495,170235],{"class":59},[555,170497,170499],{"id":170498},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170501,123679],{},[567,170503,170504,170507,170510],{},[570,170505,170506],{},"读取文本文件。",[570,170508,170509],{},"统计每个单词出现次数。",[570,170511,170512],{},"输出出现次数最多的前 10 个单词。",[14,170514,10499],{},[25,170516,170518],{"className":27,"code":170517,"language":29,"meta":22,"style":22},"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",[31,170519,170520,170530,170534,170547,170563,170567,170577,170586,170590,170602,170622,170631,170635,170653,170657,170687,170691,170707],{"__ignoreMap":22},[34,170521,170522,170524,170526,170528],{"class":36,"line":37},[34,170523,31200],{"class":112},[34,170525,108698],{"class":59},[34,170527,30855],{"class":112},[34,170529,108703],{"class":59},[34,170531,170532],{"class":36,"line":44},[34,170533,2864],{"emptyLinePlaceholder":540},[34,170535,170536,170538,170540,170542,170545],{"class":36,"line":50},[34,170537,168698],{"class":59},[34,170539,447],{"class":112},[34,170541,108932],{"class":59},[34,170543,170544],{"class":187},"\"article.txt\"",[34,170546,623],{"class":59},[34,170548,170549,170551,170553,170555,170557,170559,170561],{"class":36,"line":56},[34,170550,168881],{"class":59},[34,170552,447],{"class":112},[34,170554,169758],{"class":59},[34,170556,147193],{"class":5680},[34,170558,447],{"class":112},[34,170560,147198],{"class":187},[34,170562,623],{"class":59},[34,170564,170565],{"class":36,"line":107},[34,170566,2864],{"emptyLinePlaceholder":540},[34,170568,170569,170572,170574],{"class":36,"line":196},[34,170570,170571],{"class":59},"words ",[34,170573,447],{"class":112},[34,170575,170576],{"class":59}," content.lower().split()\n",[34,170578,170579,170582,170584],{"class":36,"line":202},[34,170580,170581],{"class":59},"counter ",[34,170583,447],{"class":112},[34,170585,88329],{"class":59},[34,170587,170588],{"class":36,"line":207},[34,170589,2864],{"emptyLinePlaceholder":540},[34,170591,170592,170594,170597,170599],{"class":36,"line":222},[34,170593,3489],{"class":112},[34,170595,170596],{"class":59}," word ",[34,170598,26508],{"class":112},[34,170600,170601],{"class":59}," words:\n",[34,170603,170604,170607,170609,170612,170615,170617,170620],{"class":36,"line":227},[34,170605,170606],{"class":59},"    word ",[34,170608,447],{"class":112},[34,170610,170611],{"class":59}," word.strip(",[34,170613,170614],{"class":187},"\".,!?;:",[34,170616,156882],{"class":63},[34,170618,170619],{"class":187},"'()[]\"",[34,170621,623],{"class":59},[34,170623,170624,170626,170628],{"class":36,"line":232},[34,170625,3565],{"class":112},[34,170627,39392],{"class":112},[34,170629,170630],{"class":59}," word:\n",[34,170632,170633],{"class":36,"line":238},[34,170634,148899],{"class":112},[34,170636,170637,170640,170642,170645,170647,170649,170651],{"class":36,"line":244},[34,170638,170639],{"class":59},"    counter[word] ",[34,170641,447],{"class":112},[34,170643,170644],{"class":59}," counter.get(word, ",[34,170646,319],{"class":63},[34,170648,14178],{"class":59},[34,170650,1088],{"class":112},[34,170652,56160],{"class":63},[34,170654,170655],{"class":36,"line":250},[34,170656,2864],{"emptyLinePlaceholder":540},[34,170658,170659,170662,170664,170666,170669,170671,170673,170675,170677,170679,170681,170683,170685],{"class":36,"line":256},[34,170660,170661],{"class":59},"items ",[34,170663,447],{"class":112},[34,170665,163991],{"class":63},[34,170667,170668],{"class":59},"(counter.items(), ",[34,170670,154333],{"class":5680},[34,170672,154336],{"class":112},[34,170674,154339],{"class":59},[34,170676,64],{"class":63},[34,170678,112589],{"class":59},[34,170680,163915],{"class":5680},[34,170682,447],{"class":112},[34,170684,31939],{"class":63},[34,170686,623],{"class":59},[34,170688,170689],{"class":36,"line":261},[34,170690,2864],{"emptyLinePlaceholder":540},[34,170692,170693,170695,170698,170700,170703,170705],{"class":36,"line":267},[34,170694,3489],{"class":112},[34,170696,170697],{"class":59}," word, count ",[34,170699,26508],{"class":112},[34,170701,170702],{"class":59}," items[:",[34,170704,1053],{"class":63},[34,170706,166142],{"class":59},[34,170708,170709,170711],{"class":36,"line":2138},[34,170710,31762],{"class":63},[34,170712,170713],{"class":59},"(word, count)\n",[555,170715,170717],{"id":170716},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[25,170719,170721],{"className":27,"code":170720,"language":29,"meta":22,"style":22},"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",[31,170722,170723,170729,170739,170743,170755,170759,170763,170771,170781,170787,170791,170821,170831,170835,170839,170847,170877,170901,170905,170909,170917,170946,170951],{"__ignoreMap":22},[34,170724,170725,170727],{"class":36,"line":37},[34,170726,30855],{"class":112},[34,170728,147478],{"class":59},[34,170730,170731,170733,170735,170737],{"class":36,"line":44},[34,170732,31200],{"class":112},[34,170734,108698],{"class":59},[34,170736,30855],{"class":112},[34,170738,108703],{"class":59},[34,170740,170741],{"class":36,"line":50},[34,170742,2864],{"emptyLinePlaceholder":540},[34,170744,170745,170747,170749,170751,170753],{"class":36,"line":56},[34,170746,152211],{"class":63},[34,170748,14028],{"class":112},[34,170750,108932],{"class":59},[34,170752,152218],{"class":187},[34,170754,623],{"class":59},[34,170756,170757],{"class":36,"line":107},[34,170758,2864],{"emptyLinePlaceholder":540},[34,170760,170761],{"class":36,"line":196},[34,170762,2864],{"emptyLinePlaceholder":540},[34,170764,170765,170767,170769],{"class":36,"line":202},[34,170766,32410],{"class":112},[34,170768,152235],{"class":2427},[34,170770,32416],{"class":59},[34,170772,170773,170775,170777,170779],{"class":36,"line":207},[34,170774,3565],{"class":112},[34,170776,39392],{"class":112},[34,170778,152246],{"class":63},[34,170780,152249],{"class":59},[34,170782,170783,170785],{"class":36,"line":222},[34,170784,15216],{"class":112},[34,170786,52299],{"class":59},[34,170788,170789],{"class":36,"line":227},[34,170790,2864],{"emptyLinePlaceholder":540},[34,170792,170793,170795,170797,170799,170801,170803,170805,170807,170809,170811,170813,170815,170817,170819],{"class":36,"line":232},[34,170794,34640],{"class":112},[34,170796,147178],{"class":63},[34,170798,617],{"class":59},[34,170800,152211],{"class":63},[34,170802,12899],{"class":59},[34,170804,147188],{"class":187},[34,170806,12899],{"class":59},[34,170808,147193],{"class":5680},[34,170810,447],{"class":112},[34,170812,147198],{"class":187},[34,170814,14178],{"class":59},[34,170816,31846],{"class":112},[34,170818,148540],{"class":5680},[34,170820,4203],{"class":59},[34,170822,170823,170825,170827,170829],{"class":36,"line":238},[34,170824,15216],{"class":112},[34,170826,148551],{"class":59},[34,170828,45815],{"class":5680},[34,170830,623],{"class":59},[34,170832,170833],{"class":36,"line":244},[34,170834,2864],{"emptyLinePlaceholder":540},[34,170836,170837],{"class":36,"line":250},[34,170838,2864],{"emptyLinePlaceholder":540},[34,170840,170841,170843,170845],{"class":36,"line":256},[34,170842,32410],{"class":112},[34,170844,152345],{"class":2427},[34,170846,152348],{"class":59},[34,170848,170849,170851,170853,170855,170857,170859,170861,170863,170865,170867,170869,170871,170873,170875],{"class":36,"line":261},[34,170850,34640],{"class":112},[34,170852,147178],{"class":63},[34,170854,617],{"class":59},[34,170856,152211],{"class":63},[34,170858,12899],{"class":59},[34,170860,152363],{"class":187},[34,170862,12899],{"class":59},[34,170864,147193],{"class":5680},[34,170866,447],{"class":112},[34,170868,147198],{"class":187},[34,170870,14178],{"class":59},[34,170872,31846],{"class":112},[34,170874,148540],{"class":5680},[34,170876,4203],{"class":59},[34,170878,170879,170881,170883,170885,170887,170889,170891,170893,170895,170897,170899],{"class":36,"line":267},[34,170880,152384],{"class":59},[34,170882,45815],{"class":5680},[34,170884,12899],{"class":59},[34,170886,147524],{"class":5680},[34,170888,447],{"class":112},[34,170890,34449],{"class":63},[34,170892,12899],{"class":59},[34,170894,152399],{"class":5680},[34,170896,447],{"class":112},[34,170898,70],{"class":63},[34,170900,623],{"class":59},[34,170902,170903],{"class":36,"line":2138},[34,170904,2864],{"emptyLinePlaceholder":540},[34,170906,170907],{"class":36,"line":2143},[34,170908,2864],{"emptyLinePlaceholder":540},[34,170910,170911,170913,170915],{"class":36,"line":2157},[34,170912,160103],{"class":59},[34,170914,447],{"class":112},[34,170916,153429],{"class":59},[34,170918,170919,170922,170924,170926,170928,170930,170932,170934,170936,170938,170940,170942,170944],{"class":36,"line":2162},[34,170920,170921],{"class":59},"students.append({",[34,170923,63140],{"class":187},[34,170925,51898],{"class":59},[34,170927,150275],{"class":187},[34,170929,12899],{"class":59},[34,170931,69585],{"class":187},[34,170933,51898],{"class":59},[34,170935,1256],{"class":63},[34,170937,12899],{"class":59},[34,170939,151859],{"class":187},[34,170941,51898],{"class":59},[34,170943,1593],{"class":63},[34,170945,165539],{"class":59},[34,170947,170948],{"class":36,"line":2191},[34,170949,170950],{"class":59},"save_students(students)\n",[34,170952,170953,170955,170957,170960],{"class":36,"line":2196},[34,170954,30878],{"class":63},[34,170956,617],{"class":59},[34,170958,170959],{"class":187},"\"保存成功\"",[34,170961,623],{"class":59},[555,170963,170965],{"id":170964},"_814-易错点","8.14 易错点",[567,170967,170968,170972,170978,170983,170990,170997],{},[570,170969,170970,169231],{},[31,170971,1401],{},[570,170973,170974,170975,28850],{},"读写中文要指定 ",[31,170976,170977],{},"encoding=\"utf-8\"",[570,170979,170980,170981,28850],{},"打开文件后要关闭，推荐使用 ",[31,170982,108220],{},[570,170984,170985,170986,170989],{},"读取大文件不要直接 ",[31,170987,170988],{},"read()"," 全部内容。",[570,170991,170992,170993,170996],{},"Windows 写 CSV 时建议加 ",[31,170994,170995],{},"newline=\"\"","，避免空行。",[570,170998,170999],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[555,171001,171003],{"id":171002},"_815-本章练习","8.15 本章练习",[567,171005,171006,171013,171018,171021,171024],{},[570,171007,171008,171009,171012],{},"写入一个 ",[31,171010,171011],{},"students.txt","，每行保存一个学生姓名。",[570,171014,104742,171015,171017],{},[31,171016,171011],{}," 并输出所有学生。",[570,171019,171020],{},"把学生列表保存为 JSON 文件。",[570,171022,171023],{},"从 JSON 文件读取学生数据，计算平均分。",[570,171025,171026,171027,171030,171031,171034],{},"写一个日志函数 ",[31,171028,171029],{},"write_log(message)","，每次调用向 ",[31,171032,171033],{},"app.log"," 追加一行。",[532,171036,171037],{},"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":22,"searchDepth":44,"depth":44,"links":171039},[171040,171041,171045,171046,171052,171053,171054,171055,171056,171057,171058,171059,171060,171061,171062],{"id":168551,"depth":44,"text":168552},{"id":168592,"depth":44,"text":168593,"children":171042},[171043,171044],{"id":168596,"depth":50,"text":168597},{"id":168630,"depth":50,"text":168631},{"id":168744,"depth":44,"text":168745},{"id":168837,"depth":44,"text":168838,"children":171047},[171048,171049,171050,171051],{"id":168841,"depth":50,"text":168842},{"id":168928,"depth":50,"text":168929},{"id":168998,"depth":50,"text":168999},{"id":169092,"depth":50,"text":169093},{"id":169162,"depth":44,"text":169163},{"id":169225,"depth":44,"text":169226},{"id":169386,"depth":44,"text":169387},{"id":169449,"depth":44,"text":169450},{"id":169565,"depth":44,"text":169566},{"id":169775,"depth":44,"text":169776},{"id":170087,"depth":44,"text":170088},{"id":170498,"depth":44,"text":170499},{"id":170716,"depth":44,"text":170717},{"id":170964,"depth":44,"text":170965},{"id":171002,"depth":44,"text":171003},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168543,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171069,"title":171070,"body":171071,"description":537,"extension":538,"meta":173257,"navigation":540,"path":173258,"seo":173259,"stem":173260,"__hash__":173261},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171072,"toc":173224},[171073,171076,171080,171083,171086,171178,171180,171199,171204,171208,171211,171214,171243,171250,171253,171257,171260,171289,171291,171343,171349,171402,171406,171504,171507,171574,171578,171635,171637,171643,171647,171652,171658,171749,171754,171758,171761,171839,171842,171880,171884,172002,172005,172009,172012,172057,172060,172064,172069,172075,172125,172128,172159,172163,172167,172197,172201,172236,172240,172275,172315,172319,172335,172338,172342,172346,172425,172429,172470,172474,172529,172533,172567,172571,172601,172610,172617,172623,172680,172683,172691,172694,172698,172705,172708,172714,172717,172734,172739,172743,172749,172762,172765,172802,172805,172816,172819,172833,172836,172850,172854,172861,172894,172897,172899,172905,172908,172912,172914,172920,172925,173098,173102,173165,173169,173193,173197,173221],[10,171074,171070],{"id":171075},"_9-异常模块与包",[555,171077,171079],{"id":171078},"_91-什么是异常","9.1 什么是异常",[14,171081,171082],{},"异常是程序运行过程中出现的错误。",[14,171084,171085],{},"常见异常：",[748,171087,171088,171097],{},[751,171089,171090],{},[754,171091,171092,171095],{},[757,171093,171094],{},"异常",[757,171096,26334],{},[795,171098,171099,171109,171119,171128,171138,171148,171158,171168],{},[754,171100,171101,171106],{},[800,171102,171103],{},[31,171104,171105],{},"NameError",[800,171107,171108],{},"使用了未定义变量",[754,171110,171111,171116],{},[800,171112,171113],{},[31,171114,171115],{},"TypeError",[800,171117,171118],{},"类型不匹配",[754,171120,171121,171125],{},[800,171122,171123],{},[31,171124,155221],{},[800,171126,171127],{},"值不合法",[754,171129,171130,171135],{},[800,171131,171132],{},[31,171133,171134],{},"IndexError",[800,171136,171137],{},"列表索引越界",[754,171139,171140,171145],{},[800,171141,171142],{},[31,171143,171144],{},"KeyError",[800,171146,171147],{},"字典 key 不存在",[754,171149,171150,171155],{},[800,171151,171152],{},[31,171153,171154],{},"FileNotFoundError",[800,171156,171157],{},"文件不存在",[754,171159,171160,171165],{},[800,171161,171162],{},[31,171163,171164],{},"ZeroDivisionError",[800,171166,171167],{},"除数为 0",[754,171169,171170,171175],{},[800,171171,171172],{},[31,171173,171174],{},"ImportError",[800,171176,171177],{},"导入失败",[14,171179,15599],{},[25,171181,171183],{"className":27,"code":171182,"language":29,"meta":22,"style":22},"num = int(\"abc\")\n",[31,171184,171185],{"__ignoreMap":22},[34,171186,171187,171189,171191,171193,171195,171197],{"class":36,"line":37},[34,171188,156174],{"class":59},[34,171190,447],{"class":112},[34,171192,2846],{"class":63},[34,171194,617],{"class":59},[34,171196,156267],{"class":187},[34,171198,623],{"class":59},[14,171200,171201,171202,28850],{},"会触发 ",[31,171203,155221],{},[555,171205,171207],{"id":171206},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171209,171210],{},"如果不处理异常，程序会直接终止。",[14,171212,171213],{},"例如用户输入年龄：",[25,171215,171217],{"className":27,"code":171216,"language":29,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[31,171218,171219,171237],{"__ignoreMap":22},[34,171220,171221,171223,171225,171227,171229,171231,171233,171235],{"class":36,"line":37},[34,171222,146933],{"class":59},[34,171224,447],{"class":112},[34,171226,2846],{"class":63},[34,171228,617],{"class":59},[34,171230,54282],{"class":63},[34,171232,617],{"class":59},[34,171234,152781],{"class":187},[34,171236,30960],{"class":59},[34,171238,171239,171241],{"class":36,"line":44},[34,171240,30878],{"class":63},[34,171242,156148],{"class":59},[14,171244,171245,171246,171249],{},"用户输入 ",[31,171247,171248],{},"abc","，程序就会报错退出。",[14,171251,171252],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[555,171254,171256],{"id":171255},"_93-try-except","9.3 try except",[14,171258,171259],{},"基础语法：",[25,171261,171263],{"className":27,"code":171262,"language":29,"meta":22,"style":22},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[31,171264,171265,171272,171277,171284],{"__ignoreMap":22},[34,171266,171267,171270],{"class":36,"line":37},[34,171268,171269],{"class":112},"try",[34,171271,4203],{"class":59},[34,171273,171274],{"class":36,"line":44},[34,171275,171276],{"class":59},"    可能出错的代码\n",[34,171278,171279,171282],{"class":36,"line":50},[34,171280,171281],{"class":112},"except",[34,171283,4203],{"class":59},[34,171285,171286],{"class":36,"line":56},[34,171287,171288],{"class":59},"    出错后的处理代码\n",[14,171290,15599],{},[25,171292,171294],{"className":27,"code":171293,"language":29,"meta":22,"style":22},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[31,171295,171296,171302,171320,171326,171332],{"__ignoreMap":22},[34,171297,171298,171300],{"class":36,"line":37},[34,171299,171269],{"class":112},[34,171301,4203],{"class":59},[34,171303,171304,171306,171308,171310,171312,171314,171316,171318],{"class":36,"line":44},[34,171305,152773],{"class":59},[34,171307,447],{"class":112},[34,171309,2846],{"class":63},[34,171311,617],{"class":59},[34,171313,54282],{"class":63},[34,171315,617],{"class":59},[34,171317,152781],{"class":187},[34,171319,30960],{"class":59},[34,171321,171322,171324],{"class":36,"line":50},[34,171323,31762],{"class":63},[34,171325,156148],{"class":59},[34,171327,171328,171330],{"class":36,"line":56},[34,171329,171281],{"class":112},[34,171331,4203],{"class":59},[34,171333,171334,171336,171338,171341],{"class":36,"line":107},[34,171335,31762],{"class":63},[34,171337,617],{"class":59},[34,171339,171340],{"class":187},"\"年龄必须是数字\"",[34,171342,623],{"class":59},[14,171344,171345,171346,171348],{},"不建议裸写 ",[31,171347,171281],{},"，最好指定异常类型。",[25,171350,171352],{"className":27,"code":171351,"language":29,"meta":22,"style":22},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[31,171353,171354,171360,171378,171384,171392],{"__ignoreMap":22},[34,171355,171356,171358],{"class":36,"line":37},[34,171357,171269],{"class":112},[34,171359,4203],{"class":59},[34,171361,171362,171364,171366,171368,171370,171372,171374,171376],{"class":36,"line":44},[34,171363,152773],{"class":59},[34,171365,447],{"class":112},[34,171367,2846],{"class":63},[34,171369,617],{"class":59},[34,171371,54282],{"class":63},[34,171373,617],{"class":59},[34,171375,152781],{"class":187},[34,171377,30960],{"class":59},[34,171379,171380,171382],{"class":36,"line":50},[34,171381,31762],{"class":63},[34,171383,156148],{"class":59},[34,171385,171386,171388,171390],{"class":36,"line":56},[34,171387,171281],{"class":112},[34,171389,152613],{"class":63},[34,171391,4203],{"class":59},[34,171393,171394,171396,171398,171400],{"class":36,"line":107},[34,171395,31762],{"class":63},[34,171397,617],{"class":59},[34,171399,171340],{"class":187},[34,171401,623],{"class":59},[555,171403,171405],{"id":171404},"_94-捕获多个异常","9.4 捕获多个异常",[25,171407,171409],{"className":27,"code":171408,"language":29,"meta":22,"style":22},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[31,171410,171411,171417,171438,171458,171465,171473,171484,171493],{"__ignoreMap":22},[34,171412,171413,171415],{"class":36,"line":37},[34,171414,171269],{"class":112},[34,171416,4203],{"class":59},[34,171418,171419,171422,171424,171426,171428,171430,171432,171434,171436],{"class":36,"line":44},[34,171420,171421],{"class":59},"    nums ",[34,171423,447],{"class":112},[34,171425,52687],{"class":59},[34,171427,64],{"class":63},[34,171429,12899],{"class":59},[34,171431,70],{"class":63},[34,171433,12899],{"class":59},[34,171435,309],{"class":63},[34,171437,73],{"class":59},[34,171439,171440,171443,171445,171447,171449,171451,171453,171456],{"class":36,"line":50},[34,171441,171442],{"class":59},"    index ",[34,171444,447],{"class":112},[34,171446,2846],{"class":63},[34,171448,617],{"class":59},[34,171450,54282],{"class":63},[34,171452,617],{"class":59},[34,171454,171455],{"class":187},"\"请输入索引:\"",[34,171457,30960],{"class":59},[34,171459,171460,171462],{"class":36,"line":56},[34,171461,31762],{"class":63},[34,171463,171464],{"class":59},"(nums[index])\n",[34,171466,171467,171469,171471],{"class":36,"line":107},[34,171468,171281],{"class":112},[34,171470,152613],{"class":63},[34,171472,4203],{"class":59},[34,171474,171475,171477,171479,171482],{"class":36,"line":196},[34,171476,31762],{"class":63},[34,171478,617],{"class":59},[34,171480,171481],{"class":187},"\"索引必须是整数\"",[34,171483,623],{"class":59},[34,171485,171486,171488,171491],{"class":36,"line":202},[34,171487,171281],{"class":112},[34,171489,171490],{"class":63}," IndexError",[34,171492,4203],{"class":59},[34,171494,171495,171497,171499,171502],{"class":36,"line":207},[34,171496,31762],{"class":63},[34,171498,617],{"class":59},[34,171500,171501],{"class":187},"\"索引越界\"",[34,171503,623],{"class":59},[14,171505,171506],{},"多个异常使用相同处理逻辑：",[25,171508,171510],{"className":27,"code":171509,"language":29,"meta":22,"style":22},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[31,171511,171512,171518,171536,171549,171563],{"__ignoreMap":22},[34,171513,171514,171516],{"class":36,"line":37},[34,171515,171269],{"class":112},[34,171517,4203],{"class":59},[34,171519,171520,171522,171524,171526,171528,171530,171532,171534],{"class":36,"line":44},[34,171521,46054],{"class":59},[34,171523,447],{"class":112},[34,171525,2846],{"class":63},[34,171527,617],{"class":59},[34,171529,54282],{"class":63},[34,171531,617],{"class":59},[34,171533,156183],{"class":187},[34,171535,30960],{"class":59},[34,171537,171538,171540,171542,171544,171546],{"class":36,"line":50},[34,171539,31762],{"class":63},[34,171541,617],{"class":59},[34,171543,1053],{"class":63},[34,171545,156433],{"class":112},[34,171547,171548],{"class":59}," num)\n",[34,171550,171551,171553,171555,171557,171559,171561],{"class":36,"line":56},[34,171552,171281],{"class":112},[34,171554,2122],{"class":59},[34,171556,155221],{"class":63},[34,171558,12899],{"class":59},[34,171560,171164],{"class":63},[34,171562,31249],{"class":59},[34,171564,171565,171567,171569,171572],{"class":36,"line":107},[34,171566,31762],{"class":63},[34,171568,617],{"class":59},[34,171570,171571],{"class":187},"\"输入不合法\"",[34,171573,623],{"class":59},[555,171575,171577],{"id":171576},"_95-获取异常信息","9.5 获取异常信息",[25,171579,171581],{"className":27,"code":171580,"language":29,"meta":22,"style":22},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[31,171582,171583,171589,171603,171614],{"__ignoreMap":22},[34,171584,171585,171587],{"class":36,"line":37},[34,171586,171269],{"class":112},[34,171588,4203],{"class":59},[34,171590,171591,171593,171595,171597,171599,171601],{"class":36,"line":44},[34,171592,46054],{"class":59},[34,171594,447],{"class":112},[34,171596,2846],{"class":63},[34,171598,617],{"class":59},[34,171600,156267],{"class":187},[34,171602,623],{"class":59},[34,171604,171605,171607,171609,171611],{"class":36,"line":50},[34,171606,171281],{"class":112},[34,171608,152613],{"class":63},[34,171610,65065],{"class":112},[34,171612,171613],{"class":59}," e:\n",[34,171615,171616,171618,171620,171622,171625,171627,171629,171631,171633],{"class":36,"line":56},[34,171617,31762],{"class":63},[34,171619,617],{"class":59},[34,171621,667],{"class":112},[34,171623,171624],{"class":187},"\"出错了:",[34,171626,1501],{"class":63},[34,171628,687],{"class":59},[34,171630,1550],{"class":63},[34,171632,860],{"class":187},[34,171634,623],{"class":59},[14,171636,146844],{},[25,171638,171641],{"className":171639,"code":171640,"language":5651,"meta":22},[5649],"出错了:invalid literal for int() with base 10: 'abc'\n",[31,171642,171640],{"__ignoreMap":22},[555,171644,171646],{"id":171645},"_96-else和finally","9.6 else和finally",[14,171648,171649,171651],{},[31,171650,2165],{},"：没有异常时执行。",[14,171653,171654,171657],{},[31,171655,171656],{},"finally","：无论是否异常都会执行。",[25,171659,171661],{"className":27,"code":171660,"language":29,"meta":22,"style":22},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[31,171662,171663,171669,171687,171695,171705,171711,171732,171738],{"__ignoreMap":22},[34,171664,171665,171667],{"class":36,"line":37},[34,171666,171269],{"class":112},[34,171668,4203],{"class":59},[34,171670,171671,171673,171675,171677,171679,171681,171683,171685],{"class":36,"line":44},[34,171672,46054],{"class":59},[34,171674,447],{"class":112},[34,171676,2846],{"class":63},[34,171678,617],{"class":59},[34,171680,54282],{"class":63},[34,171682,617],{"class":59},[34,171684,156183],{"class":187},[34,171686,30960],{"class":59},[34,171688,171689,171691,171693],{"class":36,"line":50},[34,171690,171281],{"class":112},[34,171692,152613],{"class":63},[34,171694,4203],{"class":59},[34,171696,171697,171699,171701,171703],{"class":36,"line":56},[34,171698,31762],{"class":63},[34,171700,617],{"class":59},[34,171702,153601],{"class":187},[34,171704,623],{"class":59},[34,171706,171707,171709],{"class":36,"line":107},[34,171708,2165],{"class":112},[34,171710,4203],{"class":59},[34,171712,171713,171715,171717,171719,171722,171724,171726,171728,171730],{"class":36,"line":196},[34,171714,31762],{"class":63},[34,171716,617],{"class":59},[34,171718,667],{"class":112},[34,171720,171721],{"class":187},"\"输入正确:",[34,171723,1501],{"class":63},[34,171725,2129],{"class":59},[34,171727,1550],{"class":63},[34,171729,860],{"class":187},[34,171731,623],{"class":59},[34,171733,171734,171736],{"class":36,"line":202},[34,171735,171656],{"class":112},[34,171737,4203],{"class":59},[34,171739,171740,171742,171744,171747],{"class":36,"line":207},[34,171741,31762],{"class":63},[34,171743,617],{"class":59},[34,171745,171746],{"class":187},"\"程序结束\"",[34,171748,623],{"class":59},[14,171750,171751,171753],{},[31,171752,171656],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[555,171755,171757],{"id":171756},"_97-抛出异常","9.7 抛出异常",[14,171759,171760],{},"程序可以主动抛出异常。",[25,171762,171764],{"className":27,"code":171763,"language":29,"meta":22,"style":22},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[31,171765,171766,171775,171787,171800,171820,171824,171828],{"__ignoreMap":22},[34,171767,171768,171770,171773],{"class":36,"line":37},[34,171769,32410],{"class":112},[34,171771,171772],{"class":2427}," set_age",[34,171774,161802],{"class":59},[34,171776,171777,171779,171781,171783,171785],{"class":36,"line":44},[34,171778,3565],{"class":112},[34,171780,16171],{"class":59},[34,171782,1515],{"class":112},[34,171784,4557],{"class":63},[34,171786,4203],{"class":59},[34,171788,171789,171791,171793,171795,171798],{"class":36,"line":50},[34,171790,103819],{"class":112},[34,171792,152613],{"class":63},[34,171794,617],{"class":59},[34,171796,171797],{"class":187},"\"年龄不能为负数\"",[34,171799,623],{"class":59},[34,171801,171802,171804,171806,171808,171810,171812,171814,171816,171818],{"class":36,"line":56},[34,171803,31762],{"class":63},[34,171805,617],{"class":59},[34,171807,667],{"class":112},[34,171809,162370],{"class":187},[34,171811,1501],{"class":63},[34,171813,70682],{"class":59},[34,171815,1550],{"class":63},[34,171817,860],{"class":187},[34,171819,623],{"class":59},[34,171821,171822],{"class":36,"line":107},[34,171823,2864],{"emptyLinePlaceholder":540},[34,171825,171826],{"class":36,"line":196},[34,171827,2864],{"emptyLinePlaceholder":540},[34,171829,171830,171833,171835,171837],{"class":36,"line":202},[34,171831,171832],{"class":59},"set_age(",[34,171834,113],{"class":112},[34,171836,64],{"class":63},[34,171838,623],{"class":59},[14,171840,171841],{},"调用者可以捕获：",[25,171843,171845],{"className":27,"code":171844,"language":29,"meta":22,"style":22},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[31,171846,171847,171853,171864,171874],{"__ignoreMap":22},[34,171848,171849,171851],{"class":36,"line":37},[34,171850,171269],{"class":112},[34,171852,4203],{"class":59},[34,171854,171855,171858,171860,171862],{"class":36,"line":44},[34,171856,171857],{"class":59},"    set_age(",[34,171859,113],{"class":112},[34,171861,64],{"class":63},[34,171863,623],{"class":59},[34,171865,171866,171868,171870,171872],{"class":36,"line":50},[34,171867,171281],{"class":112},[34,171869,152613],{"class":63},[34,171871,65065],{"class":112},[34,171873,171613],{"class":59},[34,171875,171876,171878],{"class":36,"line":56},[34,171877,31762],{"class":63},[34,171879,67460],{"class":59},[555,171881,171883],{"id":171882},"_98-自定义异常","9.8 自定义异常",[25,171885,171887],{"className":27,"code":171886,"language":29,"meta":22,"style":22},"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",[31,171888,171889,171903,171907,171911,171915,171923,171933,171944,171954,171958,171962,171968,171985,171996],{"__ignoreMap":22},[34,171890,171891,171893,171896,171898,171901],{"class":36,"line":37},[34,171892,15158],{"class":112},[34,171894,171895],{"class":2427}," BalanceNotEnoughError",[34,171897,617],{"class":59},[34,171899,171900],{"class":63},"Exception",[34,171902,31249],{"class":59},[34,171904,171905],{"class":36,"line":44},[34,171906,149924],{"class":112},[34,171908,171909],{"class":36,"line":50},[34,171910,2864],{"emptyLinePlaceholder":540},[34,171912,171913],{"class":36,"line":56},[34,171914,2864],{"emptyLinePlaceholder":540},[34,171916,171917,171919,171921],{"class":36,"line":107},[34,171918,32410],{"class":112},[34,171920,150573],{"class":2427},[34,171922,163199],{"class":59},[34,171924,171925,171927,171929,171931],{"class":36,"line":196},[34,171926,3565],{"class":112},[34,171928,150529],{"class":59},[34,171930,1564],{"class":112},[34,171932,162976],{"class":59},[34,171934,171935,171937,171940,171942],{"class":36,"line":202},[34,171936,103819],{"class":112},[34,171938,171939],{"class":59}," BalanceNotEnoughError(",[34,171941,150624],{"class":187},[34,171943,623],{"class":59},[34,171945,171946,171948,171950,171952],{"class":36,"line":207},[34,171947,4554],{"class":112},[34,171949,163206],{"class":59},[34,171951,113],{"class":112},[34,171953,150562],{"class":59},[34,171955,171956],{"class":36,"line":222},[34,171957,2864],{"emptyLinePlaceholder":540},[34,171959,171960],{"class":36,"line":227},[34,171961,2864],{"emptyLinePlaceholder":540},[34,171963,171964,171966],{"class":36,"line":232},[34,171965,171269],{"class":112},[34,171967,4203],{"class":59},[34,171969,171970,171972,171974,171977,171979,171981,171983],{"class":36,"line":238},[34,171971,162877],{"class":59},[34,171973,447],{"class":112},[34,171975,171976],{"class":59}," withdraw(",[34,171978,919],{"class":63},[34,171980,12899],{"class":59},[34,171982,2186],{"class":63},[34,171984,623],{"class":59},[34,171986,171987,171989,171992,171994],{"class":36,"line":244},[34,171988,171281],{"class":112},[34,171990,171991],{"class":59}," BalanceNotEnoughError ",[34,171993,31846],{"class":112},[34,171995,171613],{"class":59},[34,171997,171998,172000],{"class":36,"line":250},[34,171999,31762],{"class":63},[34,172001,67460],{"class":59},[14,172003,172004],{},"入门阶段大多数情况使用内置异常即可。",[555,172006,172008],{"id":172007},"_99-traceback","9.9 traceback",[14,172010,172011],{},"调试时可以输出完整异常堆栈。",[25,172013,172015],{"className":27,"code":172014,"language":29,"meta":22,"style":22},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[31,172016,172017,172024,172028,172034,172044,172052],{"__ignoreMap":22},[34,172018,172019,172021],{"class":36,"line":37},[34,172020,30855],{"class":112},[34,172022,172023],{"class":59}," traceback\n",[34,172025,172026],{"class":36,"line":44},[34,172027,2864],{"emptyLinePlaceholder":540},[34,172029,172030,172032],{"class":36,"line":50},[34,172031,171269],{"class":112},[34,172033,4203],{"class":59},[34,172035,172036,172038,172040,172042],{"class":36,"line":56},[34,172037,2449],{"class":63},[34,172039,617],{"class":59},[34,172041,156267],{"class":187},[34,172043,623],{"class":59},[34,172045,172046,172048,172050],{"class":36,"line":107},[34,172047,171281],{"class":112},[34,172049,152613],{"class":63},[34,172051,4203],{"class":59},[34,172053,172054],{"class":36,"line":196},[34,172055,172056],{"class":59},"    traceback.print_exc()\n",[14,172058,172059],{},"日志系统中常把异常堆栈记录到文件。",[555,172061,172063],{"id":172062},"_910-什么是模块","9.10 什么是模块",[14,172065,172066,172067,126370],{},"模块就是一个 ",[31,172068,146739],{},[14,172070,172071,172072,25083],{},"例如创建 ",[31,172073,172074],{},"my_math.py",[25,172076,172078],{"className":27,"code":172077,"language":29,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[31,172079,172080,172088,172098,172102,172106,172115],{"__ignoreMap":22},[34,172081,172082,172084,172086],{"class":36,"line":37},[34,172083,32410],{"class":112},[34,172085,5673],{"class":2427},[34,172087,151480],{"class":59},[34,172089,172090,172092,172094,172096],{"class":36,"line":44},[34,172091,4554],{"class":112},[34,172093,11333],{"class":59},[34,172095,1088],{"class":112},[34,172097,151491],{"class":59},[34,172099,172100],{"class":36,"line":50},[34,172101,2864],{"emptyLinePlaceholder":540},[34,172103,172104],{"class":36,"line":56},[34,172105,2864],{"emptyLinePlaceholder":540},[34,172107,172108,172110,172113],{"class":36,"line":107},[34,172109,32410],{"class":112},[34,172111,172112],{"class":2427}," sub",[34,172114,151480],{"class":59},[34,172116,172117,172119,172121,172123],{"class":36,"line":196},[34,172118,4554],{"class":112},[34,172120,11333],{"class":59},[34,172122,113],{"class":112},[34,172124,151491],{"class":59},[14,172126,172127],{},"在另一个文件中导入：",[25,172129,172131],{"className":27,"code":172130,"language":29,"meta":22,"style":22},"import my_math\n\nprint(my_math.add(1, 2))\n",[31,172132,172133,172140,172144],{"__ignoreMap":22},[34,172134,172135,172137],{"class":36,"line":37},[34,172136,30855],{"class":112},[34,172138,172139],{"class":59}," my_math\n",[34,172141,172142],{"class":36,"line":44},[34,172143,2864],{"emptyLinePlaceholder":540},[34,172145,172146,172148,172151,172153,172155,172157],{"class":36,"line":50},[34,172147,30878],{"class":63},[34,172149,172150],{"class":59},"(my_math.add(",[34,172152,64],{"class":63},[34,172154,12899],{"class":59},[34,172156,70],{"class":63},[34,172158,30960],{"class":59},[555,172160,172162],{"id":172161},"_911-import导入","9.11 import导入",[584,172164,172166],{"id":172165},"_9111-导入模块","9.11.1 导入模块",[25,172168,172170],{"className":27,"code":172169,"language":29,"meta":22,"style":22},"import random\n\nprint(random.randint(1, 10))\n",[31,172171,172172,172178,172182],{"__ignoreMap":22},[34,172173,172174,172176],{"class":36,"line":37},[34,172175,30855],{"class":112},[34,172177,45789],{"class":59},[34,172179,172180],{"class":36,"line":44},[34,172181,2864],{"emptyLinePlaceholder":540},[34,172183,172184,172186,172189,172191,172193,172195],{"class":36,"line":50},[34,172185,30878],{"class":63},[34,172187,172188],{"class":59},"(random.randint(",[34,172190,64],{"class":63},[34,172192,12899],{"class":59},[34,172194,1053],{"class":63},[34,172196,30960],{"class":59},[584,172198,172200],{"id":172199},"_9112-导入指定内容","9.11.2 导入指定内容",[25,172202,172204],{"className":27,"code":172203,"language":29,"meta":22,"style":22},"from random import randint\n\nprint(randint(1, 10))\n",[31,172205,172206,172217,172221],{"__ignoreMap":22},[34,172207,172208,172210,172212,172214],{"class":36,"line":37},[34,172209,31200],{"class":112},[34,172211,58257],{"class":59},[34,172213,30855],{"class":112},[34,172215,172216],{"class":59}," randint\n",[34,172218,172219],{"class":36,"line":44},[34,172220,2864],{"emptyLinePlaceholder":540},[34,172222,172223,172225,172228,172230,172232,172234],{"class":36,"line":50},[34,172224,30878],{"class":63},[34,172226,172227],{"class":59},"(randint(",[34,172229,64],{"class":63},[34,172231,12899],{"class":59},[34,172233,1053],{"class":63},[34,172235,30960],{"class":59},[584,172237,172239],{"id":172238},"_9113-起别名","9.11.3 起别名",[25,172241,172243],{"className":27,"code":172242,"language":29,"meta":22,"style":22},"import random as rd\n\nprint(rd.randint(1, 10))\n",[31,172244,172245,172256,172260],{"__ignoreMap":22},[34,172246,172247,172249,172251,172253],{"class":36,"line":37},[34,172248,30855],{"class":112},[34,172250,58257],{"class":59},[34,172252,31846],{"class":112},[34,172254,172255],{"class":59}," rd\n",[34,172257,172258],{"class":36,"line":44},[34,172259,2864],{"emptyLinePlaceholder":540},[34,172261,172262,172264,172267,172269,172271,172273],{"class":36,"line":50},[34,172263,30878],{"class":63},[34,172265,172266],{"class":59},"(rd.randint(",[34,172268,64],{"class":63},[34,172270,12899],{"class":59},[34,172272,1053],{"class":63},[34,172274,30960],{"class":59},[25,172276,172278],{"className":27,"code":172277,"language":29,"meta":22,"style":22},"from random import randint as rint\n\nprint(rint(1, 10))\n",[31,172279,172280,172296,172300],{"__ignoreMap":22},[34,172281,172282,172284,172286,172288,172291,172293],{"class":36,"line":37},[34,172283,31200],{"class":112},[34,172285,58257],{"class":59},[34,172287,30855],{"class":112},[34,172289,172290],{"class":59}," randint ",[34,172292,31846],{"class":112},[34,172294,172295],{"class":59}," rint\n",[34,172297,172298],{"class":36,"line":44},[34,172299,2864],{"emptyLinePlaceholder":540},[34,172301,172302,172304,172307,172309,172311,172313],{"class":36,"line":50},[34,172303,30878],{"class":63},[34,172305,172306],{"class":59},"(rint(",[34,172308,64],{"class":63},[34,172310,12899],{"class":59},[34,172312,1053],{"class":63},[34,172314,30960],{"class":59},[584,172316,172318],{"id":172317},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[25,172320,172322],{"className":27,"code":172321,"language":29,"meta":22,"style":22},"from random import *\n",[31,172323,172324],{"__ignoreMap":22},[34,172325,172326,172328,172330,172332],{"class":36,"line":37},[34,172327,31200],{"class":112},[34,172329,58257],{"class":59},[34,172331,30855],{"class":112},[34,172333,172334],{"class":112}," *\n",[14,172336,172337],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[555,172339,172341],{"id":172340},"_912-常用内置模块","9.12 常用内置模块",[584,172343,172345],{"id":172344},"_9121-random","9.12.1 random",[25,172347,172349],{"className":27,"code":172348,"language":29,"meta":22,"style":22},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[31,172350,172351,172357,172361,172375,172394],{"__ignoreMap":22},[34,172352,172353,172355],{"class":36,"line":37},[34,172354,30855],{"class":112},[34,172356,45789],{"class":59},[34,172358,172359],{"class":36,"line":44},[34,172360,2864],{"emptyLinePlaceholder":540},[34,172362,172363,172365,172367,172369,172371,172373],{"class":36,"line":50},[34,172364,30878],{"class":63},[34,172366,172188],{"class":59},[34,172368,64],{"class":63},[34,172370,12899],{"class":59},[34,172372,1053],{"class":63},[34,172374,30960],{"class":59},[34,172376,172377,172379,172382,172384,172386,172388,172390,172392],{"class":36,"line":56},[34,172378,30878],{"class":63},[34,172380,172381],{"class":59},"(random.choice([",[34,172383,150275],{"class":187},[34,172385,12899],{"class":59},[34,172387,151323],{"class":187},[34,172389,12899],{"class":59},[34,172391,160118],{"class":187},[34,172393,33606],{"class":59},[34,172395,172396,172398,172401,172403,172405,172407,172409,172411,172413,172415,172417,172419,172421,172423],{"class":36,"line":107},[34,172397,30878],{"class":63},[34,172399,172400],{"class":59},"(random.sample([",[34,172402,64],{"class":63},[34,172404,12899],{"class":59},[34,172406,70],{"class":63},[34,172408,12899],{"class":59},[34,172410,309],{"class":63},[34,172412,12899],{"class":59},[34,172414,217],{"class":63},[34,172416,12899],{"class":59},[34,172418,927],{"class":63},[34,172420,112589],{"class":59},[34,172422,70],{"class":63},[34,172424,30960],{"class":59},[584,172426,172428],{"id":172427},"_9122-time","9.12.2 time",[25,172430,172432],{"className":27,"code":172431,"language":29,"meta":22,"style":22},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[31,172433,172434,172440,172444,172451,172459],{"__ignoreMap":22},[34,172435,172436,172438],{"class":36,"line":37},[34,172437,30855],{"class":112},[34,172439,32292],{"class":59},[34,172441,172442],{"class":36,"line":44},[34,172443,2864],{"emptyLinePlaceholder":540},[34,172445,172446,172448],{"class":36,"line":50},[34,172447,30878],{"class":63},[34,172449,172450],{"class":59},"(time.time())\n",[34,172452,172453,172455,172457],{"class":36,"line":56},[34,172454,95530],{"class":59},[34,172456,64],{"class":63},[34,172458,623],{"class":59},[34,172460,172461,172463,172465,172468],{"class":36,"line":107},[34,172462,30878],{"class":63},[34,172464,617],{"class":59},[34,172466,172467],{"class":187},"\"1秒后执行\"",[34,172469,623],{"class":59},[584,172471,172473],{"id":172472},"_9123-datetime","9.12.3 datetime",[25,172475,172477],{"className":27,"code":172476,"language":29,"meta":22,"style":22},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[31,172478,172479,172491,172495,172505,172512],{"__ignoreMap":22},[34,172480,172481,172483,172486,172488],{"class":36,"line":37},[34,172482,31200],{"class":112},[34,172484,172485],{"class":59}," datetime ",[34,172487,30855],{"class":112},[34,172489,172490],{"class":59}," datetime\n",[34,172492,172493],{"class":36,"line":44},[34,172494,2864],{"emptyLinePlaceholder":540},[34,172496,172497,172500,172502],{"class":36,"line":50},[34,172498,172499],{"class":59},"now ",[34,172501,447],{"class":112},[34,172503,172504],{"class":59}," datetime.now()\n",[34,172506,172507,172509],{"class":36,"line":56},[34,172508,30878],{"class":63},[34,172510,172511],{"class":59},"(now)\n",[34,172513,172514,172516,172519,172522,172524,172527],{"class":36,"line":107},[34,172515,30878],{"class":63},[34,172517,172518],{"class":59},"(now.strftime(",[34,172520,172521],{"class":187},"\"%Y-%m-",[34,172523,157078],{"class":63},[34,172525,172526],{"class":187}," %H:%M:%S\"",[34,172528,30960],{"class":59},[584,172530,172532],{"id":172531},"_9124-os","9.12.4 os",[25,172534,172536],{"className":27,"code":172535,"language":29,"meta":22,"style":22},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[31,172537,172538,172544,172548,172555],{"__ignoreMap":22},[34,172539,172540,172542],{"class":36,"line":37},[34,172541,30855],{"class":112},[34,172543,45766],{"class":59},[34,172545,172546],{"class":36,"line":44},[34,172547,2864],{"emptyLinePlaceholder":540},[34,172549,172550,172552],{"class":36,"line":50},[34,172551,30878],{"class":63},[34,172553,172554],{"class":59},"(os.getcwd())\n",[34,172556,172557,172559,172562,172565],{"class":36,"line":56},[34,172558,30878],{"class":63},[34,172560,172561],{"class":59},"(os.listdir(",[34,172563,172564],{"class":187},"\".\"",[34,172566,30960],{"class":59},[584,172568,172570],{"id":172569},"_9125-sys","9.12.5 sys",[25,172572,172574],{"className":27,"code":172573,"language":29,"meta":22,"style":22},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[31,172575,172576,172583,172587,172594],{"__ignoreMap":22},[34,172577,172578,172580],{"class":36,"line":37},[34,172579,30855],{"class":112},[34,172581,172582],{"class":59}," sys\n",[34,172584,172585],{"class":36,"line":44},[34,172586,2864],{"emptyLinePlaceholder":540},[34,172588,172589,172591],{"class":36,"line":50},[34,172590,30878],{"class":63},[34,172592,172593],{"class":59},"(sys.version)\n",[34,172595,172596,172598],{"class":36,"line":56},[34,172597,30878],{"class":63},[34,172599,172600],{"class":59},"(sys.path)\n",[555,172602,172604,172605,172607,172608,860],{"id":172603},"_913-if-name-main","9.13 if ",[760,172606,80271],{}," == \"",[760,172609,102445],{},[14,172611,172612,172613,172616],{},"模块被直接运行和被导入时，",[31,172614,172615],{},"__name__"," 的值不同。",[14,172618,172619,172620,25083],{},"创建 ",[31,172621,172622],{},"my_module.py",[25,172624,172626],{"className":27,"code":172625,"language":29,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[31,172627,172628,172636,172646,172650,172654,172666],{"__ignoreMap":22},[34,172629,172630,172632,172634],{"class":36,"line":37},[34,172631,32410],{"class":112},[34,172633,5673],{"class":2427},[34,172635,151480],{"class":59},[34,172637,172638,172640,172642,172644],{"class":36,"line":44},[34,172639,4554],{"class":112},[34,172641,11333],{"class":59},[34,172643,1088],{"class":112},[34,172645,151491],{"class":59},[34,172647,172648],{"class":36,"line":50},[34,172649,2864],{"emptyLinePlaceholder":540},[34,172651,172652],{"class":36,"line":56},[34,172653,2864],{"emptyLinePlaceholder":540},[34,172655,172656,172658,172660,172662,172664],{"class":36,"line":107},[34,172657,2002],{"class":112},[34,172659,31683],{"class":63},[34,172661,101946],{"class":112},[34,172663,101949],{"class":187},[34,172665,4203],{"class":59},[34,172667,172668,172670,172672,172674,172676,172678],{"class":36,"line":196},[34,172669,31762],{"class":63},[34,172671,166987],{"class":59},[34,172673,64],{"class":63},[34,172675,12899],{"class":59},[34,172677,70],{"class":63},[34,172679,30960],{"class":59},[14,172681,172682],{},"作用：",[567,172684,172685,172688],{},[570,172686,172687],{},"直接运行该文件时，执行测试代码。",[570,172689,172690],{},"被其他文件导入时，不执行测试代码。",[14,172692,172693],{},"这是写模块时很常用的习惯。",[555,172695,172697],{"id":172696},"_914-包","9.14 包",[14,172699,172700,172701,172704],{},"包是包含 ",[31,172702,172703],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172706,172707],{},"目录结构：",[25,172709,172712],{"className":172710,"code":172711,"language":5651,"meta":22},[5649],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[31,172713,172711],{"__ignoreMap":22},[14,172715,172716],{},"导入：",[25,172718,172720],{"className":27,"code":172719,"language":29,"meta":22,"style":22},"from utils.file_utils import read_file\n",[31,172721,172722],{"__ignoreMap":22},[34,172723,172724,172726,172729,172731],{"class":36,"line":37},[34,172725,31200],{"class":112},[34,172727,172728],{"class":59}," utils.file_utils ",[34,172730,30855],{"class":112},[34,172732,172733],{"class":59}," read_file\n",[14,172735,172736,172738],{},[31,172737,172703],{}," 可以为空，也可以写包初始化逻辑。",[555,172740,172742],{"id":172741},"_915-第三方包","9.15 第三方包",[14,172744,172745,172746,172748],{},"第三方包通过 ",[31,172747,24295],{}," 安装。",[25,172750,172752],{"className":24286,"code":172751,"language":24288,"meta":22,"style":22},"pip install requests\n",[31,172753,172754],{"__ignoreMap":22},[34,172755,172756,172758,172760],{"class":36,"line":37},[34,172757,24295],{"class":2427},[34,172759,24298],{"class":187},[34,172761,146485],{"class":187},[14,172763,172764],{},"使用：",[25,172766,172768],{"className":27,"code":172767,"language":29,"meta":22,"style":22},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[31,172769,172770,172776,172780,172795],{"__ignoreMap":22},[34,172771,172772,172774],{"class":36,"line":37},[34,172773,30855],{"class":112},[34,172775,146485],{"class":59},[34,172777,172778],{"class":36,"line":44},[34,172779,2864],{"emptyLinePlaceholder":540},[34,172781,172782,172785,172787,172790,172793],{"class":36,"line":50},[34,172783,172784],{"class":59},"response ",[34,172786,447],{"class":112},[34,172788,172789],{"class":59}," requests.get(",[34,172791,172792],{"class":187},"\"https:\u002F\u002Fwww.example.com\"",[34,172794,623],{"class":59},[34,172796,172797,172799],{"class":36,"line":56},[34,172798,30878],{"class":63},[34,172800,172801],{"class":59},"(response.status_code)\n",[14,172803,172804],{},"查看已安装包：",[25,172806,172808],{"className":24286,"code":172807,"language":24288,"meta":22,"style":22},"pip list\n",[31,172809,172810],{"__ignoreMap":22},[34,172811,172812,172814],{"class":36,"line":37},[34,172813,24295],{"class":2427},[34,172815,119342],{"class":187},[14,172817,172818],{},"导出项目依赖：",[25,172820,172821],{"className":24286,"code":146680,"language":24288,"meta":22,"style":22},[31,172822,172823],{"__ignoreMap":22},[34,172824,172825,172827,172829,172831],{"class":36,"line":37},[34,172826,24295],{"class":2427},[34,172828,146689],{"class":187},[34,172830,26687],{"class":112},[34,172832,146694],{"class":187},[14,172834,172835],{},"安装项目依赖：",[25,172837,172838],{"className":24286,"code":146700,"language":24288,"meta":22,"style":22},[31,172839,172840],{"__ignoreMap":22},[34,172841,172842,172844,172846,172848],{"class":36,"line":37},[34,172843,24295],{"class":2427},[34,172845,24298],{"class":187},[34,172847,120026],{"class":63},[34,172849,146694],{"class":187},[555,172851,172853],{"id":172852},"_916-模块搜索路径","9.16 模块搜索路径",[14,172855,172856,172857,172860],{},"Python 导入模块时会在 ",[31,172858,172859],{},"sys.path"," 中查找。",[25,172862,172864],{"className":27,"code":172863,"language":29,"meta":22,"style":22},"import sys\n\nfor path in sys.path:\n    print(path)\n",[31,172865,172866,172872,172876,172888],{"__ignoreMap":22},[34,172867,172868,172870],{"class":36,"line":37},[34,172869,30855],{"class":112},[34,172871,172582],{"class":59},[34,172873,172874],{"class":36,"line":44},[34,172875,2864],{"emptyLinePlaceholder":540},[34,172877,172878,172880,172883,172885],{"class":36,"line":50},[34,172879,3489],{"class":112},[34,172881,172882],{"class":59}," path ",[34,172884,26508],{"class":112},[34,172886,172887],{"class":59}," sys.path:\n",[34,172889,172890,172892],{"class":36,"line":56},[34,172891,31762],{"class":63},[34,172893,169616],{"class":59},[14,172895,172896],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172898,158010],{},[25,172900,172903],{"className":172901,"code":172902,"language":5651,"meta":22},[5649],"random.py\njson.py\ntime.py\n",[31,172904,172902],{"__ignoreMap":22},[14,172906,172907],{},"这些文件名可能导致导入异常。",[555,172909,172911],{"id":172910},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172913,172707],{},[25,172915,172918],{"className":172916,"code":172917,"language":5651,"meta":22},[5649],"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",[31,172919,172917],{"__ignoreMap":22},[14,172921,172922,25083],{},[31,172923,172924],{},"utils\u002Ffile_utils.py",[25,172926,172928],{"className":27,"code":172927,"language":29,"meta":22,"style":22},"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",[31,172929,172930,172936,172946,172950,172954,172964,172974,172982,172988,172992,173019,173029,173033,173037,173047,173073],{"__ignoreMap":22},[34,172931,172932,172934],{"class":36,"line":37},[34,172933,30855],{"class":112},[34,172935,147478],{"class":59},[34,172937,172938,172940,172942,172944],{"class":36,"line":44},[34,172939,31200],{"class":112},[34,172941,108698],{"class":59},[34,172943,30855],{"class":112},[34,172945,108703],{"class":59},[34,172947,172948],{"class":36,"line":50},[34,172949,2864],{"emptyLinePlaceholder":540},[34,172951,172952],{"class":36,"line":56},[34,172953,2864],{"emptyLinePlaceholder":540},[34,172955,172956,172958,172961],{"class":36,"line":107},[34,172957,32410],{"class":112},[34,172959,172960],{"class":2427}," read_json",[34,172962,172963],{"class":59},"(path):\n",[34,172965,172966,172969,172971],{"class":36,"line":196},[34,172967,172968],{"class":59},"    path ",[34,172970,447],{"class":112},[34,172972,172973],{"class":59}," Path(path)\n",[34,172975,172976,172978,172980],{"class":36,"line":202},[34,172977,3565],{"class":112},[34,172979,39392],{"class":112},[34,172981,169697],{"class":59},[34,172983,172984,172986],{"class":36,"line":207},[34,172985,15216],{"class":112},[34,172987,52299],{"class":59},[34,172989,172990],{"class":36,"line":222},[34,172991,2864],{"emptyLinePlaceholder":540},[34,172993,172994,172996,172998,173001,173003,173005,173007,173009,173011,173013,173015,173017],{"class":36,"line":227},[34,172995,34640],{"class":112},[34,172997,147178],{"class":63},[34,172999,173000],{"class":59},"(path, ",[34,173002,147188],{"class":187},[34,173004,12899],{"class":59},[34,173006,147193],{"class":5680},[34,173008,447],{"class":112},[34,173010,147198],{"class":187},[34,173012,14178],{"class":59},[34,173014,31846],{"class":112},[34,173016,148540],{"class":5680},[34,173018,4203],{"class":59},[34,173020,173021,173023,173025,173027],{"class":36,"line":232},[34,173022,15216],{"class":112},[34,173024,148551],{"class":59},[34,173026,45815],{"class":5680},[34,173028,623],{"class":59},[34,173030,173031],{"class":36,"line":238},[34,173032,2864],{"emptyLinePlaceholder":540},[34,173034,173035],{"class":36,"line":244},[34,173036,2864],{"emptyLinePlaceholder":540},[34,173038,173039,173041,173044],{"class":36,"line":250},[34,173040,32410],{"class":112},[34,173042,173043],{"class":2427}," write_json",[34,173045,173046],{"class":59},"(path, data):\n",[34,173048,173049,173051,173053,173055,173057,173059,173061,173063,173065,173067,173069,173071],{"class":36,"line":256},[34,173050,34640],{"class":112},[34,173052,147178],{"class":63},[34,173054,173000],{"class":59},[34,173056,152363],{"class":187},[34,173058,12899],{"class":59},[34,173060,147193],{"class":5680},[34,173062,447],{"class":112},[34,173064,147198],{"class":187},[34,173066,14178],{"class":59},[34,173068,31846],{"class":112},[34,173070,148540],{"class":5680},[34,173072,4203],{"class":59},[34,173074,173075,173078,173080,173082,173084,173086,173088,173090,173092,173094,173096],{"class":36,"line":261},[34,173076,173077],{"class":59},"        json.dump(data, ",[34,173079,45815],{"class":5680},[34,173081,12899],{"class":59},[34,173083,147524],{"class":5680},[34,173085,447],{"class":112},[34,173087,34449],{"class":63},[34,173089,12899],{"class":59},[34,173091,152399],{"class":5680},[34,173093,447],{"class":112},[34,173095,70],{"class":63},[34,173097,623],{"class":59},[14,173099,173100,25083],{},[31,173101,154994],{},[25,173103,173105],{"className":27,"code":173104,"language":29,"meta":22,"style":22},"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",[31,173106,173107,173118,173122,173135,173155],{"__ignoreMap":22},[34,173108,173109,173111,173113,173115],{"class":36,"line":37},[34,173110,31200],{"class":112},[34,173112,172728],{"class":59},[34,173114,30855],{"class":112},[34,173116,173117],{"class":59}," read_json, write_json\n",[34,173119,173120],{"class":36,"line":44},[34,173121,2864],{"emptyLinePlaceholder":540},[34,173123,173124,173126,173128,173131,173133],{"class":36,"line":50},[34,173125,160103],{"class":59},[34,173127,447],{"class":112},[34,173129,173130],{"class":59}," read_json(",[34,173132,152218],{"class":187},[34,173134,623],{"class":59},[34,173136,173137,173139,173141,173143,173145,173147,173149,173151,173153],{"class":36,"line":56},[34,173138,170921],{"class":59},[34,173140,63140],{"class":187},[34,173142,51898],{"class":59},[34,173144,150275],{"class":187},[34,173146,12899],{"class":59},[34,173148,151859],{"class":187},[34,173150,51898],{"class":59},[34,173152,1593],{"class":63},[34,173154,165539],{"class":59},[34,173156,173157,173160,173162],{"class":36,"line":107},[34,173158,173159],{"class":59},"write_json(",[34,173161,152218],{"class":187},[34,173163,173164],{"class":59},", students)\n",[555,173166,173168],{"id":173167},"_918-易错点","9.18 易错点",[567,173170,173171,173174,173179,173184,173187,173190],{},[570,173172,173173],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[570,173175,173176,173177,28850],{},"能指定异常类型就不要裸写 ",[31,173178,171281],{},[570,173180,173181,173183],{},[31,173182,171656],{}," 无论是否出错都会执行。",[570,173185,173186],{},"模块文件名不要和标准库重名。",[570,173188,173189],{},"导入自己写的模块时，要注意运行目录。",[570,173191,173192],{},"第三方包要安装到当前解释器或虚拟环境中。",[555,173194,173196],{"id":173195},"_919-本章练习","9.19 本章练习",[567,173198,173199,173202,173205,173211,173218],{},[570,173200,173201],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[570,173203,173204],{},"写函数读取文件，如果文件不存在则返回空字符串。",[570,173206,172619,173207,173210],{},[31,173208,173209],{},"math_utils.py","，实现加减乘除函数并导入使用。",[570,173212,173213,173214,173217],{},"创建一个 ",[31,173215,173216],{},"utils"," 包，把 JSON 读写函数放进去。",[570,173219,173220],{},"写一个程序，捕获除零异常和输入格式异常。",[532,173222,173223],{},"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":22,"searchDepth":44,"depth":44,"links":173225},[173226,173227,173228,173229,173230,173231,173232,173233,173234,173235,173236,173242,173249,173251,173252,173253,173254,173255,173256],{"id":171078,"depth":44,"text":171079},{"id":171206,"depth":44,"text":171207},{"id":171255,"depth":44,"text":171256},{"id":171404,"depth":44,"text":171405},{"id":171576,"depth":44,"text":171577},{"id":171645,"depth":44,"text":171646},{"id":171756,"depth":44,"text":171757},{"id":171882,"depth":44,"text":171883},{"id":172007,"depth":44,"text":172008},{"id":172062,"depth":44,"text":172063},{"id":172161,"depth":44,"text":172162,"children":173237},[173238,173239,173240,173241],{"id":172165,"depth":50,"text":172166},{"id":172199,"depth":50,"text":172200},{"id":172238,"depth":50,"text":172239},{"id":172317,"depth":50,"text":172318},{"id":172340,"depth":44,"text":172341,"children":173243},[173244,173245,173246,173247,173248],{"id":172344,"depth":50,"text":172345},{"id":172427,"depth":50,"text":172428},{"id":172472,"depth":50,"text":172473},{"id":172531,"depth":50,"text":172532},{"id":172569,"depth":50,"text":172570},{"id":172603,"depth":44,"text":173250},"9.13 if name == \"main\"",{"id":172696,"depth":44,"text":172697},{"id":172741,"depth":44,"text":172742},{"id":172852,"depth":44,"text":172853},{"id":172910,"depth":44,"text":172911},{"id":173167,"depth":44,"text":173168},{"id":173195,"depth":44,"text":173196},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171070,"description":537},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173263,"title":173264,"body":173265,"description":173428,"extension":538,"meta":173429,"navigation":540,"path":173430,"seo":173431,"stem":173432,"__hash__":173433},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173266,"toc":173423},[173267,173270,173273,173276,173287,173289,173363,173366,173369,173372,173375,173378,173381,173384,173387,173390,173393],[10,173268,173264],{"id":173269},"python教程",[14,173271,173272],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173274,173275],{},"建议学习环境：",[567,173277,173278,173281,173284],{},[570,173279,173280],{},"Python 版本：Python 3.10 及以上。",[570,173282,173283],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[570,173285,173286],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[555,173288,117465],{"id":117465},[567,173290,173291,173297,173303,173309,173315,173321,173327,173333,173339,173345,173351,173357],{},[570,173292,173293],{},[847,173294,173296],{"href":173295},".\u002Fch1-Python","Python环境与第一个程序",[570,173298,173299],{},[847,173300,173302],{"href":173301},".\u002Fch2","基础语法、变量与字符串",[570,173304,173305],{},[847,173306,173308],{"href":173307},".\u002Fch3","判断语句",[570,173310,173311],{},[847,173312,173314],{"href":173313},".\u002Fch4","循环语句",[570,173316,173317],{},[847,173318,173320],{"href":173319},".\u002Fch5","函数基础",[570,173322,173323],{},[847,173324,173326],{"href":173325},".\u002Fch6","数据容器",[570,173328,173329],{},[847,173330,173332],{"href":173331},".\u002Fch7","函数进阶",[570,173334,173335],{},[847,173336,173338],{"href":173337},".\u002Fch8","文件操作",[570,173340,173341],{},[847,173342,173344],{"href":173343},".\u002Fch9","异常、模块与包",[570,173346,173347],{},[847,173348,173350],{"href":173349},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[570,173352,173353],{},[847,173354,173356],{"href":173355},".\u002Fch11","面向对象基础",[570,173358,173359],{},[847,173360,173362],{"href":173361},".\u002Fch12","综合案例与复习路线",[555,173364,173365],{"id":173365},"学习路线",[14,173367,173368],{},"第一阶段：能运行程序。",[14,173370,173371],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173373,173374],{},"第二阶段：能组织数据。",[14,173376,173377],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173379,173380],{},"第三阶段：能封装逻辑。",[14,173382,173383],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173385,173386],{},"第四阶段：能做小项目。",[14,173388,173389],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[555,173391,173392],{"id":173392},"参考资料",[567,173394,173395,173402,173409,173416],{},[570,173396,173397,173398],{},"黑马程序员 Python 入门教程推荐：",[847,173399,173400],{"href":173400,"rel":173401},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24329],[570,173403,173404,173405],{},"Python 官方中文教程：",[847,173406,173407],{"href":173407,"rel":173408},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24329],[570,173410,173411,173412],{},"Python 标准库文档：",[847,173413,173414],{"href":173414,"rel":173415},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24329],[570,173417,173418,173419],{},"pyecharts 文档：",[847,173420,173421],{"href":173421,"rel":173422},"https:\u002F\u002Fpyecharts.org\u002F",[24329],{"title":22,"searchDepth":44,"depth":44,"links":173424},[173425,173426,173427],{"id":117465,"depth":44,"text":117465},{"id":173365,"depth":44,"text":173365},{"id":173392,"depth":44,"text":173392},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23842},"\u002Fwiki\u002F2024-10-10-python",{"title":173264,"description":173428},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331444833]