[{"data":1,"prerenderedAt":173448},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-gai-bian-shu-zu-de-wei-du":3,"wiki-doc-nav":558},{"id":4,"title":5,"body":6,"description":550,"extension":551,"meta":552,"navigation":553,"path":554,"seo":555,"stem":556,"__hash__":557},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":8,"toc":542},"minimark",[9,13,18,22,25,104,107,134,137,157,178,181,197,201,250,254,296,300,303,306,309,312,315,379,446,450,453,512,516,522,533,538],[10,11,5],"h1",{"id":12},"_5改变数组的维度",[14,15,17],"h2",{"id":16},"_51-使用reshape","5.1 使用reshape()",[19,20,21],"p",{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,23,24],{},"①一维数组转换为二维数组",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n","python","",[33,34,35,64,71,77,83],"code",{"__ignoreMap":31},[36,37,40,44,48,51,55,58,61],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sVt8B","a",[36,45,47],{"class":46},"szBVR","=",[36,49,50],{"class":42},"np.arange(",[36,52,54],{"class":53},"sj4cs","1",[36,56,57],{"class":42},",",[36,59,60],{"class":53},"13",[36,62,63],{"class":42},")\n",[36,65,67],{"class":38,"line":66},2,[36,68,70],{"class":69},"sJ8bj","#将一维数组进行转换\n",[36,72,74],{"class":38,"line":73},3,[36,75,76],{"class":69},"#注意点：元素个数不可以变\n",[36,78,80],{"class":38,"line":79},4,[36,81,82],{"class":69},"#转换维度要保持一致，不一致就异常！！！\n",[36,84,86,89,91,94,97,99,102],{"class":38,"line":85},5,[36,87,88],{"class":42},"aa",[36,90,47],{"class":46},[36,92,93],{"class":42},"a.reshape(",[36,95,96],{"class":53},"2",[36,98,57],{"class":42},[36,100,101],{"class":53},"6",[36,103,63],{"class":42},[19,105,106],{},"②一维数组转换为三维数组",[26,108,110],{"className":28,"code":109,"language":30,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,111,112],{"__ignoreMap":31},[36,113,114,117,119,121,123,125,128,130,132],{"class":38,"line":39},[36,115,116],{"class":42},"aaa",[36,118,47],{"class":46},[36,120,93],{"class":42},[36,122,96],{"class":53},[36,124,57],{"class":42},[36,126,127],{"class":53},"3",[36,129,57],{"class":42},[36,131,96],{"class":53},[36,133,63],{"class":42},[19,135,136],{},"③二维数组转化为一维数组",[26,138,140],{"className":28,"code":139,"language":30,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,141,142,147],{"__ignoreMap":31},[36,143,144],{"class":38,"line":39},[36,145,146],{"class":69},"#知道元素个数：\n",[36,148,149,152,155],{"class":38,"line":66},[36,150,151],{"class":42},"aa.reshape(",[36,153,154],{"class":53},"12",[36,156,63],{"class":42},[26,158,160],{"className":28,"code":159,"language":30,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,161,162,167],{"__ignoreMap":31},[36,163,164],{"class":38,"line":39},[36,165,166],{"class":69},"#不知道元素个数，参数传递-1\n",[36,168,169,171,174,176],{"class":38,"line":66},[36,170,151],{"class":42},[36,172,173],{"class":46},"-",[36,175,54],{"class":53},[36,177,63],{"class":42},[19,179,180],{},"④三维数组转换为一维数组",[26,182,184],{"className":28,"code":183,"language":30,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,185,186],{"__ignoreMap":31},[36,187,188,191,193,195],{"class":38,"line":39},[36,189,190],{"class":42},"aaa.reshape(",[36,192,173],{"class":46},[36,194,54],{"class":53},[36,196,63],{"class":42},[14,198,200],{"id":199},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,202,204],{"className":28,"code":203,"language":30,"meta":31,"style":31},"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",[33,205,206,235,240,245],{"__ignoreMap":31},[36,207,208,210,212,214,216,218,220,223,225,227,229,232],{"class":38,"line":39},[36,209,88],{"class":42},[36,211,47],{"class":46},[36,213,50],{"class":42},[36,215,54],{"class":53},[36,217,57],{"class":42},[36,219,60],{"class":53},[36,221,222],{"class":42},").reshape(",[36,224,96],{"class":53},[36,226,57],{"class":42},[36,228,101],{"class":53},[36,230,231],{"class":42},")",[36,233,234],{"class":69},"#转换为2行6列的数组\n",[36,236,237],{"class":38,"line":66},[36,238,239],{"class":42},"aa.revel()\n",[36,241,242],{"class":38,"line":73},[36,243,244],{"class":69},"#结果：\n",[36,246,247],{"class":38,"line":79},[36,248,249],{"class":69},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,251,253],{"id":252},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,255,257],{"className":28,"code":256,"language":30,"meta":31,"style":31},"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",[33,258,259,283,288,292],{"__ignoreMap":31},[36,260,261,263,265,267,269,271,273,275,277,279,281],{"class":38,"line":39},[36,262,88],{"class":42},[36,264,47],{"class":46},[36,266,50],{"class":42},[36,268,54],{"class":53},[36,270,57],{"class":42},[36,272,60],{"class":53},[36,274,222],{"class":42},[36,276,96],{"class":53},[36,278,57],{"class":42},[36,280,101],{"class":53},[36,282,63],{"class":42},[36,284,285],{"class":38,"line":66},[36,286,287],{"class":42},"aa.flatten()\n",[36,289,290],{"class":38,"line":73},[36,291,244],{"class":69},[36,293,294],{"class":38,"line":79},[36,295,249],{"class":69},[14,297,299],{"id":298},"_54-使用resize","5.4 使用resize()",[19,301,302],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,304,305],{},"通过resize方法可以改变数组的维度",[19,307,308],{},"#resize修改数组维度",[19,310,311],{},"#以元组的形式指定形状",[19,313,314],{},"#改变的是原数组",[26,316,318],{"className":28,"code":317,"language":30,"meta":31,"style":31},"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",[33,319,320,336,357,371,375],{"__ignoreMap":31},[36,321,322,324,326,328,330,332,334],{"class":38,"line":39},[36,323,43],{"class":42},[36,325,47],{"class":46},[36,327,50],{"class":42},[36,329,54],{"class":53},[36,331,57],{"class":42},[36,333,60],{"class":53},[36,335,63],{"class":42},[36,337,338,341,343,346,348,350,352,354],{"class":38,"line":66},[36,339,340],{"class":42},"a.shape",[36,342,47],{"class":46},[36,344,345],{"class":42},"(",[36,347,96],{"class":53},[36,349,57],{"class":42},[36,351,101],{"class":53},[36,353,231],{"class":42},[36,355,356],{"class":69},"#改变了原数组\n",[36,358,359,361,363,366,368],{"class":38,"line":73},[36,360,43],{"class":42},[36,362,47],{"class":46},[36,364,365],{"class":42},"resize((",[36,367,154],{"class":53},[36,369,370],{"class":42},"))\n",[36,372,373],{"class":38,"line":79},[36,374,244],{"class":69},[36,376,377],{"class":38,"line":85},[36,378,249],{"class":69},[26,380,382],{"className":28,"code":381,"language":30,"meta":31,"style":31},"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",[33,383,384,397,401,407,412,417,423,429,435,441],{"__ignoreMap":31},[36,385,386,389,391,393,395],{"class":38,"line":39},[36,387,388],{"class":42},"a.resize((",[36,390,101],{"class":53},[36,392,57],{"class":42},[36,394,96],{"class":53},[36,396,370],{"class":42},[36,398,399],{"class":38,"line":66},[36,400,244],{"class":69},[36,402,403],{"class":38,"line":73},[36,404,406],{"class":405},"sZZnC","'''\n",[36,408,409],{"class":38,"line":79},[36,410,411],{"class":405},"array([[ 1,  2],\n",[36,413,414],{"class":38,"line":85},[36,415,416],{"class":405},"       [ 3,  4],\n",[36,418,420],{"class":38,"line":419},6,[36,421,422],{"class":405},"       [ 5,  6],\n",[36,424,426],{"class":38,"line":425},7,[36,427,428],{"class":405},"       [ 7,  8],\n",[36,430,432],{"class":38,"line":431},8,[36,433,434],{"class":405},"       [ 9, 10],\n",[36,436,438],{"class":38,"line":437},9,[36,439,440],{"class":405},"       [11, 12]])\n",[36,442,444],{"class":38,"line":443},10,[36,445,406],{"class":405},[14,447,449],{"id":448},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,451,452],{},"改变了原数组",[26,454,456],{"className":28,"code":455,"language":30,"meta":31,"style":31},"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",[33,457,458,474,490,494,498,503,508],{"__ignoreMap":31},[36,459,460,462,464,466,468,470,472],{"class":38,"line":39},[36,461,43],{"class":42},[36,463,47],{"class":46},[36,465,50],{"class":42},[36,467,54],{"class":53},[36,469,57],{"class":42},[36,471,60],{"class":53},[36,473,63],{"class":42},[36,475,476,478,480,482,484,486,488],{"class":38,"line":66},[36,477,340],{"class":42},[36,479,47],{"class":46},[36,481,345],{"class":42},[36,483,96],{"class":53},[36,485,57],{"class":42},[36,487,101],{"class":53},[36,489,63],{"class":42},[36,491,492],{"class":38,"line":73},[36,493,244],{"class":69},[36,495,496],{"class":38,"line":79},[36,497,406],{"class":405},[36,499,500],{"class":38,"line":85},[36,501,502],{"class":405},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,504,505],{"class":38,"line":419},[36,506,507],{"class":405},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,509,510],{"class":38,"line":425},[36,511,406],{"class":405},[14,513,515],{"id":514},"_56-重要比较","5.6 重要比较：",[19,517,518],{},[519,520],"img",{"alt":31,"src":521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,523,524,525,528,529,532],{},"口诀：NumPy 函数要么用 ",[33,526,527],{},"shape","，要么用 ",[33,530,531],{},"size","，创建结构用 shape，造数据用 size",[19,534,535],{},[519,536],{"alt":31,"src":537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[539,540,541],"style",{},"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":31,"searchDepth":66,"depth":66,"links":543},[544,545,546,547,548,549],{"id":16,"depth":66,"text":17},{"id":199,"depth":66,"text":200},{"id":252,"depth":66,"text":253},{"id":298,"depth":66,"text":299},{"id":448,"depth":66,"text":449},{"id":514,"depth":66,"text":515},null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":5,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",[559,5642,6750,8170,11159,12510,13999,15088,23851,23863,24462,24488,24612,24853,24918,24936,24949,24996,25120,25289,25488,25668,25873,26009,26104,26141,26154,26464,27205,27913,27934,28954,30585,30736,30749,30761,31059,50870,50885,50902,50935,53807,77155,93300,93321,93434,93553,94321,94983,95344,95382,95488,95588,95631,95657,95718,97370,97471,97496,97985,98418,99498,99781,100523,101025,101037,103053,104717,106220,107918,109835,111754,113776,117246,117678,118141,118890,121834,122182,122204,122560,125867,125879,126282,126305,126452,126619,126824,127125,127682,128339,130270,131868,132517,134011,135442,136677,138371,140123,142533,142649,143584,143795,144680,145915,146143,146156,147311,149723,152091,155412,157889,159533,161310,163323,166375,168555,171082,173276],{"id":560,"title":561,"body":562,"description":31,"extension":551,"meta":5637,"navigation":553,"path":5638,"seo":5639,"stem":5640,"__hash__":5641},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":563,"toc":5609},[564,567,571,574,578,591,595,600,603,606,609,612,615,641,645,648,651,654,657,705,709,727,729,743,746,754,757,1612,1619,1636,1640,1726,1730,1736,1822,1826,1864,1868,1932,1936,1940,1946,1957,1961,1966,1970,1975,1979,1984,1988,1992,1997,2267,2272,2410,2415,2672,2675,2683,2687,2692,2795,2798,3104,3113,3214,3217,3220,3223,3226,3486,3491,3631,3634,3813,3816,3944,3947,4099,4103,4108,4111,4122,4130,4133,4240,4244,4248,4253,4303,4308,4313,4337,4342,4395,4398,4403,4580,4585,4870,4875,5272,5276,5281,5338,5343,5351,5354,5494,5497,5606],[10,565,561],{"id":566},"_1基础入门",[14,568,570],{"id":569},"_11注释","1.1注释",[19,572,573],{},"\u002F\u002F或者\u002F* *\u002F",[14,575,577],{"id":576},"_12命名","1.2命名",[579,580,581,585,588],"ol",{},[582,583,584],"li",{},"字母数字下划线",[582,586,587],{},"开头必须是字母或_",[582,589,590],{},"不能使用关键词",[14,592,594],{"id":593},"_13数据类型","1.3数据类型",[596,597,599],"h3",{"id":598},"_131整形","1.3.1整形",[19,601,602],{},"short 短整形 2",[19,604,605],{},"int 整形 4",[19,607,608],{},"long 长整形 win4 linux32位4 linux64位8",[19,610,611],{},"long long 长长整形 8",[19,613,614],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,616,620],{"className":617,"code":618,"language":619,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[33,621,622,634],{"__ignoreMap":31},[36,623,624,627,629,632],{"class":38,"line":39},[36,625,626],{"class":46},"sizeof",[36,628,345],{"class":42},[36,630,631],{"class":46},"int",[36,633,63],{"class":42},[36,635,636,638],{"class":38,"line":66},[36,637,626],{"class":46},[36,639,640],{"class":42},"(num)\n",[596,642,644],{"id":643},"_132浮点型","1.3.2浮点型",[19,646,647],{},"float 单精度 4节 7位有效数字",[19,649,650],{},"double 双精度 8节 15-16有效数字",[19,652,653],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,655,656],{},"注意点：",[26,658,660],{"className":617,"code":659,"language":619,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,661,662,684],{"__ignoreMap":31},[36,663,664,667,670,672,675,678,681],{"class":38,"line":39},[36,665,666],{"class":46},"float",[36,668,669],{"class":42}," f1",[36,671,47],{"class":46},[36,673,674],{"class":53},"3.14",[36,676,677],{"class":46},"f",[36,679,680],{"class":42},";",[36,682,683],{"class":69}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,685,686,688,691,693,695,698,700,702],{"class":38,"line":66},[36,687,666],{"class":46},[36,689,690],{"class":42}," f2",[36,692,47],{"class":46},[36,694,127],{"class":53},[36,696,697],{"class":46},"e",[36,699,96],{"class":53},[36,701,680],{"class":42},[36,703,704],{"class":69}," \u002F\u002F科学记数法\n",[596,706,708],{"id":707},"_133字符型","1.3.3字符型",[26,710,712],{"className":617,"code":711,"language":619,"meta":31,"style":31},"char ch='a'\n",[33,713,714],{"__ignoreMap":31},[36,715,716,719,722,724],{"class":38,"line":39},[36,717,718],{"class":46},"char",[36,720,721],{"class":42}," ch",[36,723,47],{"class":46},[36,725,726],{"class":405},"'a'\n",[19,728,656],{},[579,730,731,734,737,740],{},[582,732,733],{},"在显示字符型变量时，只能单引号，双引号x",[582,735,736],{},"单引号内只能一个字符，不能字符串",[582,738,739],{},"c和c++字符型变量只占用一个字符",[582,741,742],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,744,745],{},"ASCII码大致由以下两部分组成：",[579,747,748,751],{},[582,749,750],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[582,752,753],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,755,756],{},"ASCII码表格：",[758,759,760,804],"table",{},[761,762,763],"thead",{},[764,765,766,774,779,783,788,792,796,800],"tr",{},[767,768,769,773],"th",{},[770,771,772],"strong",{},"ASCII","值",[767,775,776],{},[770,777,778],{},"控制字符",[767,780,781,773],{},[770,782,772],{},[767,784,785],{},[770,786,787],{},"字符",[767,789,790,773],{},[770,791,772],{},[767,793,794],{},[770,795,787],{},[767,797,798,773],{},[770,799,772],{},[767,801,802],{},[770,803,787],{},[805,806,807,834,858,883,908,934,959,983,1008,1033,1058,1084,1110,1134,1158,1184,1210,1234,1259,1284,1309,1334,1359,1384,1409,1434,1459,1485,1510,1535,1560,1586],"tbody",{},[764,808,809,813,816,819,822,825,828,831],{},[810,811,812],"td",{},"0",[810,814,815],{},"NUT",[810,817,818],{},"32",[810,820,821],{},"(space)",[810,823,824],{},"64",[810,826,827],{},"@",[810,829,830],{},"96",[810,832,833],{},"、",[764,835,836,838,841,844,847,850,853,856],{},[810,837,54],{},[810,839,840],{},"SOH",[810,842,843],{},"33",[810,845,846],{},"!",[810,848,849],{},"65",[810,851,852],{},"A",[810,854,855],{},"97",[810,857,43],{},[764,859,860,862,865,868,871,874,877,880],{},[810,861,96],{},[810,863,864],{},"STX",[810,866,867],{},"34",[810,869,870],{},"\"",[810,872,873],{},"66",[810,875,876],{},"B",[810,878,879],{},"98",[810,881,882],{},"b",[764,884,885,887,890,893,896,899,902,905],{},[810,886,127],{},[810,888,889],{},"ETX",[810,891,892],{},"35",[810,894,895],{},"#",[810,897,898],{},"67",[810,900,901],{},"C",[810,903,904],{},"99",[810,906,907],{},"c",[764,909,910,913,916,919,922,925,928,931],{},[810,911,912],{},"4",[810,914,915],{},"EOT",[810,917,918],{},"36",[810,920,921],{},"$",[810,923,924],{},"68",[810,926,927],{},"D",[810,929,930],{},"100",[810,932,933],{},"d",[764,935,936,939,942,945,948,951,954,957],{},[810,937,938],{},"5",[810,940,941],{},"ENQ",[810,943,944],{},"37",[810,946,947],{},"%",[810,949,950],{},"69",[810,952,953],{},"E",[810,955,956],{},"101",[810,958,697],{},[764,960,961,963,966,969,972,975,978,981],{},[810,962,101],{},[810,964,965],{},"ACK",[810,967,968],{},"38",[810,970,971],{},"&",[810,973,974],{},"70",[810,976,977],{},"F",[810,979,980],{},"102",[810,982,677],{},[764,984,985,988,991,994,996,999,1002,1005],{},[810,986,987],{},"7",[810,989,990],{},"BEL",[810,992,993],{},"39",[810,995,57],{},[810,997,998],{},"71",[810,1000,1001],{},"G",[810,1003,1004],{},"103",[810,1006,1007],{},"g",[764,1009,1010,1013,1016,1019,1021,1024,1027,1030],{},[810,1011,1012],{},"8",[810,1014,1015],{},"BS",[810,1017,1018],{},"40",[810,1020,345],{},[810,1022,1023],{},"72",[810,1025,1026],{},"H",[810,1028,1029],{},"104",[810,1031,1032],{},"h",[764,1034,1035,1038,1041,1044,1046,1049,1052,1055],{},[810,1036,1037],{},"9",[810,1039,1040],{},"HT",[810,1042,1043],{},"41",[810,1045,231],{},[810,1047,1048],{},"73",[810,1050,1051],{},"I",[810,1053,1054],{},"105",[810,1056,1057],{},"i",[764,1059,1060,1063,1066,1069,1072,1075,1078,1081],{},[810,1061,1062],{},"10",[810,1064,1065],{},"LF",[810,1067,1068],{},"42",[810,1070,1071],{},"*",[810,1073,1074],{},"74",[810,1076,1077],{},"J",[810,1079,1080],{},"106",[810,1082,1083],{},"j",[764,1085,1086,1089,1092,1095,1098,1101,1104,1107],{},[810,1087,1088],{},"11",[810,1090,1091],{},"VT",[810,1093,1094],{},"43",[810,1096,1097],{},"+",[810,1099,1100],{},"75",[810,1102,1103],{},"K",[810,1105,1106],{},"107",[810,1108,1109],{},"k",[764,1111,1112,1114,1117,1120,1122,1125,1128,1131],{},[810,1113,154],{},[810,1115,1116],{},"FF",[810,1118,1119],{},"44",[810,1121,57],{},[810,1123,1124],{},"76",[810,1126,1127],{},"L",[810,1129,1130],{},"108",[810,1132,1133],{},"l",[764,1135,1136,1138,1141,1144,1146,1149,1152,1155],{},[810,1137,60],{},[810,1139,1140],{},"CR",[810,1142,1143],{},"45",[810,1145,173],{},[810,1147,1148],{},"77",[810,1150,1151],{},"M",[810,1153,1154],{},"109",[810,1156,1157],{},"m",[764,1159,1160,1163,1166,1169,1172,1175,1178,1181],{},[810,1161,1162],{},"14",[810,1164,1165],{},"SO",[810,1167,1168],{},"46",[810,1170,1171],{},".",[810,1173,1174],{},"78",[810,1176,1177],{},"N",[810,1179,1180],{},"110",[810,1182,1183],{},"n",[764,1185,1186,1189,1192,1195,1198,1201,1204,1207],{},[810,1187,1188],{},"15",[810,1190,1191],{},"SI",[810,1193,1194],{},"47",[810,1196,1197],{},"\u002F",[810,1199,1200],{},"79",[810,1202,1203],{},"O",[810,1205,1206],{},"111",[810,1208,1209],{},"o",[764,1211,1212,1215,1218,1221,1223,1226,1229,1232],{},[810,1213,1214],{},"16",[810,1216,1217],{},"DLE",[810,1219,1220],{},"48",[810,1222,812],{},[810,1224,1225],{},"80",[810,1227,1228],{},"P",[810,1230,1231],{},"112",[810,1233,19],{},[764,1235,1236,1239,1242,1245,1247,1250,1253,1256],{},[810,1237,1238],{},"17",[810,1240,1241],{},"DCI",[810,1243,1244],{},"49",[810,1246,54],{},[810,1248,1249],{},"81",[810,1251,1252],{},"Q",[810,1254,1255],{},"113",[810,1257,1258],{},"q",[764,1260,1261,1264,1267,1270,1272,1275,1278,1281],{},[810,1262,1263],{},"18",[810,1265,1266],{},"DC2",[810,1268,1269],{},"50",[810,1271,96],{},[810,1273,1274],{},"82",[810,1276,1277],{},"R",[810,1279,1280],{},"114",[810,1282,1283],{},"r",[764,1285,1286,1289,1292,1295,1297,1300,1303,1306],{},[810,1287,1288],{},"19",[810,1290,1291],{},"DC3",[810,1293,1294],{},"51",[810,1296,127],{},[810,1298,1299],{},"83",[810,1301,1302],{},"S",[810,1304,1305],{},"115",[810,1307,1308],{},"s",[764,1310,1311,1314,1317,1320,1322,1325,1328,1331],{},[810,1312,1313],{},"20",[810,1315,1316],{},"DC4",[810,1318,1319],{},"52",[810,1321,912],{},[810,1323,1324],{},"84",[810,1326,1327],{},"T",[810,1329,1330],{},"116",[810,1332,1333],{},"t",[764,1335,1336,1339,1342,1345,1347,1350,1353,1356],{},[810,1337,1338],{},"21",[810,1340,1341],{},"NAK",[810,1343,1344],{},"53",[810,1346,938],{},[810,1348,1349],{},"85",[810,1351,1352],{},"U",[810,1354,1355],{},"117",[810,1357,1358],{},"u",[764,1360,1361,1364,1367,1370,1372,1375,1378,1381],{},[810,1362,1363],{},"22",[810,1365,1366],{},"SYN",[810,1368,1369],{},"54",[810,1371,101],{},[810,1373,1374],{},"86",[810,1376,1377],{},"V",[810,1379,1380],{},"118",[810,1382,1383],{},"v",[764,1385,1386,1389,1392,1395,1397,1400,1403,1406],{},[810,1387,1388],{},"23",[810,1390,1391],{},"TB",[810,1393,1394],{},"55",[810,1396,987],{},[810,1398,1399],{},"87",[810,1401,1402],{},"W",[810,1404,1405],{},"119",[810,1407,1408],{},"w",[764,1410,1411,1414,1417,1420,1422,1425,1428,1431],{},[810,1412,1413],{},"24",[810,1415,1416],{},"CAN",[810,1418,1419],{},"56",[810,1421,1012],{},[810,1423,1424],{},"88",[810,1426,1427],{},"X",[810,1429,1430],{},"120",[810,1432,1433],{},"x",[764,1435,1436,1439,1442,1445,1447,1450,1453,1456],{},[810,1437,1438],{},"25",[810,1440,1441],{},"EM",[810,1443,1444],{},"57",[810,1446,1037],{},[810,1448,1449],{},"89",[810,1451,1452],{},"Y",[810,1454,1455],{},"121",[810,1457,1458],{},"y",[764,1460,1461,1464,1467,1470,1473,1476,1479,1482],{},[810,1462,1463],{},"26",[810,1465,1466],{},"SUB",[810,1468,1469],{},"58",[810,1471,1472],{},":",[810,1474,1475],{},"90",[810,1477,1478],{},"Z",[810,1480,1481],{},"122",[810,1483,1484],{},"z",[764,1486,1487,1490,1493,1496,1498,1501,1504,1507],{},[810,1488,1489],{},"27",[810,1491,1492],{},"ESC",[810,1494,1495],{},"59",[810,1497,680],{},[810,1499,1500],{},"91",[810,1502,1503],{},"[",[810,1505,1506],{},"123",[810,1508,1509],{},"{",[764,1511,1512,1515,1518,1521,1524,1527,1529,1532],{},[810,1513,1514],{},"28",[810,1516,1517],{},"FS",[810,1519,1520],{},"60",[810,1522,1523],{},"\u003C",[810,1525,1526],{},"92",[810,1528,1197],{},[810,1530,1531],{},"124",[810,1533,1534],{},"|",[764,1536,1537,1540,1543,1546,1548,1551,1554,1557],{},[810,1538,1539],{},"29",[810,1541,1542],{},"GS",[810,1544,1545],{},"61",[810,1547,47],{},[810,1549,1550],{},"93",[810,1552,1553],{},"]",[810,1555,1556],{},"125",[810,1558,1559],{},"}",[764,1561,1562,1565,1568,1571,1574,1577,1580,1583],{},[810,1563,1564],{},"30",[810,1566,1567],{},"RS",[810,1569,1570],{},"62",[810,1572,1573],{},">",[810,1575,1576],{},"94",[810,1578,1579],{},"^",[810,1581,1582],{},"126",[810,1584,1585],{},"`",[764,1587,1588,1591,1594,1597,1600,1603,1606,1609],{},[810,1589,1590],{},"31",[810,1592,1593],{},"US",[810,1595,1596],{},"63",[810,1598,1599],{},"?",[810,1601,1602],{},"95",[810,1604,1605],{},"_",[810,1607,1608],{},"127",[810,1610,1611],{},"DEL",[19,1613,1614,1615,1618],{},"ASCII 码大致由以下",[770,1616,1617],{},"两部分组","成：",[1620,1621,1622,1629],"ul",{},[582,1623,1624,1625,1628],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[770,1626,1627],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[582,1630,1631,1632,1635],{},"ASCII 打印字符：数字 ",[770,1633,1634],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[596,1637,1639],{"id":1638},"_134转义字符","1.3.4转义字符",[26,1641,1643],{"className":617,"code":1642,"language":619,"meta":31,"style":31},"\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",[33,1644,1645,1650,1666,1680,1685,1698,1703],{"__ignoreMap":31},[36,1646,1647],{"class":38,"line":39},[36,1648,1649],{"class":69},"\u002F\u002F换行符\n",[36,1651,1652,1655,1658,1661,1663],{"class":38,"line":66},[36,1653,1654],{"class":42},"cout ",[36,1656,1657],{"class":46},"\u003C\u003C",[36,1659,1660],{"class":405},"\"hello world\u002Fn\"",[36,1662,680],{"class":42},[36,1664,1665],{"class":69}," \u002F\u002F就等同于如下：\n",[36,1667,1668,1670,1672,1675,1677],{"class":38,"line":73},[36,1669,1654],{"class":42},[36,1671,1657],{"class":46},[36,1673,1674],{"class":405},"\"hello world\"",[36,1676,1657],{"class":46},[36,1678,1679],{"class":42},"endl;\n",[36,1681,1682],{"class":38,"line":79},[36,1683,1684],{"class":69},"\u002F\u002F反斜杠\n",[36,1686,1687,1689,1691,1694,1696],{"class":38,"line":85},[36,1688,1654],{"class":42},[36,1690,1657],{"class":46},[36,1692,1693],{"class":405},"\"\u002F\u002F\"",[36,1695,1657],{"class":46},[36,1697,1679],{"class":42},[36,1699,1700],{"class":38,"line":419},[36,1701,1702],{"class":69},"\u002F\u002F水平制表符\n",[36,1704,1705,1707,1709,1712,1715,1718,1720,1723],{"class":38,"line":425},[36,1706,1654],{"class":42},[36,1708,1657],{"class":46},[36,1710,1711],{"class":405},"\"aaaa",[36,1713,1714],{"class":53},"\\t",[36,1716,1717],{"class":405},"helloworld\"",[36,1719,1657],{"class":46},[36,1721,1722],{"class":42},"endl;",[36,1724,1725],{"class":69}," \u002F\u002F输出窗口时有对齐效果\n",[596,1727,1729],{"id":1728},"_135字符串型","1.3.5字符串型",[19,1731,1732,1733,1735],{},"char 变量名",[36,1734],{},"=\"字符串值\"",[26,1737,1739],{"className":617,"code":1738,"language":619,"meta":31,"style":31},"\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",[33,1740,1741,1746,1751,1756,1761,1775,1788,1793,1798,1809],{"__ignoreMap":31},[36,1742,1743],{"class":38,"line":39},[36,1744,1745],{"class":69},"\u002F\u002Fc风格字符串\n",[36,1747,1748],{"class":38,"line":66},[36,1749,1750],{"class":69},"\u002F\u002F注意事项：\n",[36,1752,1753],{"class":38,"line":73},[36,1754,1755],{"class":69},"\u002F\u002F1.char字符串名[]\n",[36,1757,1758],{"class":38,"line":79},[36,1759,1760],{"class":69},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,1762,1763,1765,1768,1770,1772],{"class":38,"line":85},[36,1764,718],{"class":46},[36,1766,1767],{"class":42}," str[]",[36,1769,47],{"class":46},[36,1771,1674],{"class":405},[36,1773,1774],{"class":42},";\n",[36,1776,1777,1779,1781,1784,1786],{"class":38,"line":419},[36,1778,1654],{"class":42},[36,1780,1657],{"class":46},[36,1782,1783],{"class":42},"str",[36,1785,1657],{"class":46},[36,1787,1679],{"class":42},[36,1789,1790],{"class":38,"line":425},[36,1791,1792],{"class":69},"\u002F\u002Fc++风格字符串\n",[36,1794,1795],{"class":38,"line":431},[36,1796,1797],{"class":69},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,1799,1800,1803,1805,1807],{"class":38,"line":437},[36,1801,1802],{"class":42},"string str2",[36,1804,47],{"class":46},[36,1806,1674],{"class":405},[36,1808,1774],{"class":42},[36,1810,1811,1813,1815,1818,1820],{"class":38,"line":443},[36,1812,1654],{"class":42},[36,1814,1657],{"class":46},[36,1816,1817],{"class":42},"str2",[36,1819,1657],{"class":46},[36,1821,1679],{"class":42},[596,1823,1825],{"id":1824},"_136布尔类型bool","1.3.6布尔类型bool",[26,1827,1829],{"className":617,"code":1828,"language":619,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,1830,1831,1846],{"__ignoreMap":31},[36,1832,1833,1836,1839,1841,1844],{"class":38,"line":39},[36,1834,1835],{"class":46},"bool",[36,1837,1838],{"class":42}," flag",[36,1840,47],{"class":46},[36,1842,1843],{"class":53},"true",[36,1845,1774],{"class":42},[36,1847,1848,1851,1854,1857,1859,1861],{"class":38,"line":66},[36,1849,1850],{"class":42},"cout",[36,1852,1853],{"class":46},"\u003C\u003Csizeof",[36,1855,1856],{"class":42},"(flag)",[36,1858,1657],{"class":46},[36,1860,1722],{"class":42},[36,1862,1863],{"class":69}," \u002F\u002F查看布尔占内存空间\n",[14,1865,1867],{"id":1866},"_14键盘输入cin","1.4键盘输入cin",[26,1869,1871],{"className":617,"code":1870,"language":619,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[33,1872,1873,1886,1903,1914],{"__ignoreMap":31},[36,1874,1875,1877,1880,1882,1884],{"class":38,"line":39},[36,1876,631],{"class":46},[36,1878,1879],{"class":42}," a",[36,1881,47],{"class":46},[36,1883,812],{"class":53},[36,1885,1774],{"class":42},[36,1887,1888,1890,1892,1895,1897,1899,1901],{"class":38,"line":66},[36,1889,1850],{"class":42},[36,1891,1657],{"class":46},[36,1893,1894],{"class":405},"\"请给整型变量a赋值\"",[36,1896,1657],{"class":46},[36,1898,43],{"class":42},[36,1900,1657],{"class":46},[36,1902,1679],{"class":42},[36,1904,1905,1908,1911],{"class":38,"line":73},[36,1906,1907],{"class":42},"cin ",[36,1909,1910],{"class":46},">>",[36,1912,1913],{"class":42}," a;\n",[36,1915,1916,1918,1920,1923,1926,1928,1930],{"class":38,"line":79},[36,1917,1654],{"class":42},[36,1919,1657],{"class":46},[36,1921,1922],{"class":405}," \"整型变量a=\"",[36,1924,1925],{"class":46}," \u003C\u003C",[36,1927,43],{"class":42},[36,1929,1657],{"class":46},[36,1931,1679],{"class":42},[14,1933,1935],{"id":1934},"_15运算符","1.5运算符",[596,1937,1939],{"id":1938},"_151算术运算符","1.5.1算术运算符",[19,1941,1942,1945],{},[519,1943],{"alt":31,"src":1944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[579,1947,1948,1951,1954],{},[582,1949,1950],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[582,1952,1953],{},"两个小数不可以做取模运算",[582,1955,1956],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[596,1958,1960],{"id":1959},"_152赋值运算符","1.5.2赋值运算符",[19,1962,1963],{},[519,1964],{"alt":31,"src":1965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[596,1967,1969],{"id":1968},"_153比较运算符","1.5.3比较运算符",[19,1971,1972],{},[519,1973],{"alt":31,"src":1974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[596,1976,1978],{"id":1977},"_154逻辑运算符","1.5.4逻辑运算符",[19,1980,1981],{},[519,1982],{"alt":31,"src":1983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1985,1987],{"id":1986},"_16程序流程结构","1.6程序流程结构",[596,1989,1991],{"id":1990},"_161选择结构","1.6.1选择结构",[579,1993,1994],{},[582,1995,1996],{},"if语句\n单行、多行、多条件if语句",[26,1998,2000],{"className":617,"code":1999,"language":619,"meta":31,"style":31},"\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",[33,2001,2002,2007,2022,2027,2041,2046,2051,2060,2073,2077,2090,2095,2101,2106,2120,2125,2131,2152,2157,2171,2176,2205,2210,2227,2232,2237,2242,2256,2261],{"__ignoreMap":31},[36,2003,2004],{"class":38,"line":39},[36,2005,2006],{"class":69},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,2008,2009,2012,2015,2017,2020],{"class":38,"line":66},[36,2010,2011],{"class":46},"if",[36,2013,2014],{"class":42},"(score",[36,2016,1573],{"class":46},[36,2018,2019],{"class":53},"600",[36,2021,63],{"class":42},[36,2023,2024],{"class":38,"line":73},[36,2025,2026],{"class":42},"{\n",[36,2028,2029,2032,2034,2037,2039],{"class":38,"line":79},[36,2030,2031],{"class":42},"    cout",[36,2033,1657],{"class":46},[36,2035,2036],{"class":405},"'这是单行if语句'",[36,2038,1657],{"class":46},[36,2040,1679],{"class":42},[36,2042,2043],{"class":38,"line":85},[36,2044,2045],{"class":42},"}\n",[36,2047,2048],{"class":38,"line":419},[36,2049,2050],{"class":69},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,2052,2053,2055,2057],{"class":38,"line":425},[36,2054,1907],{"class":42},[36,2056,1910],{"class":46},[36,2058,2059],{"class":42}," score\n",[36,2061,2062,2064,2066,2069,2071],{"class":38,"line":431},[36,2063,2011],{"class":46},[36,2065,2014],{"class":42},[36,2067,2068],{"class":46},"\u003C=",[36,2070,2019],{"class":53},[36,2072,63],{"class":42},[36,2074,2075],{"class":38,"line":437},[36,2076,2026],{"class":42},[36,2078,2079,2081,2083,2086,2088],{"class":38,"line":443},[36,2080,2031],{"class":42},[36,2082,1910],{"class":46},[36,2084,2085],{"class":405},"\"小于等于600\"",[36,2087,1657],{"class":46},[36,2089,1679],{"class":42},[36,2091,2093],{"class":38,"line":2092},11,[36,2094,2045],{"class":42},[36,2096,2098],{"class":38,"line":2097},12,[36,2099,2100],{"class":46},"else\n",[36,2102,2104],{"class":38,"line":2103},13,[36,2105,2026],{"class":42},[36,2107,2109,2111,2113,2116,2118],{"class":38,"line":2108},14,[36,2110,2031],{"class":42},[36,2112,1910],{"class":46},[36,2114,2115],{"class":405},"\"大于600\"",[36,2117,1910],{"class":46},[36,2119,1679],{"class":42},[36,2121,2123],{"class":38,"line":2122},15,[36,2124,2045],{"class":42},[36,2126,2128],{"class":38,"line":2127},16,[36,2129,2130],{"class":69},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,2132,2134,2136,2139,2141,2143,2146,2148,2150],{"class":38,"line":2133},17,[36,2135,2011],{"class":46},[36,2137,2138],{"class":42}," (",[36,2140,812],{"class":53},[36,2142,1523],{"class":46},[36,2144,2145],{"class":42},"num",[36,2147,1523],{"class":46},[36,2149,930],{"class":53},[36,2151,63],{"class":42},[36,2153,2155],{"class":38,"line":2154},18,[36,2156,2026],{"class":42},[36,2158,2160,2162,2164,2167,2169],{"class":38,"line":2159},19,[36,2161,2031],{"class":42},[36,2163,1657],{"class":46},[36,2165,2166],{"class":405},"\"小于100\"",[36,2168,1657],{"class":46},[36,2170,1679],{"class":42},[36,2172,2174],{"class":38,"line":2173},20,[36,2175,2045],{"class":42},[36,2177,2179,2182,2185,2188,2191,2193,2196,2198,2200,2203],{"class":38,"line":2178},21,[36,2180,2181],{"class":46},"else",[36,2183,2184],{"class":46}," if",[36,2186,2187],{"class":42}," (nmu",[36,2189,2190],{"class":46},">=",[36,2192,930],{"class":53},[36,2194,2195],{"class":46},"&&",[36,2197,2145],{"class":42},[36,2199,1523],{"class":46},[36,2201,2202],{"class":53},"200",[36,2204,63],{"class":42},[36,2206,2208],{"class":38,"line":2207},22,[36,2209,2026],{"class":42},[36,2211,2213,2215,2217,2220,2222,2224],{"class":38,"line":2212},23,[36,2214,2031],{"class":42},[36,2216,1657],{"class":46},[36,2218,2219],{"class":405},"\"不小于100且小于200\"",[36,2221,1657],{"class":46},[36,2223,1722],{"class":42},[36,2225,2226],{"class":69}," \u002F\u002F可以无限else if,python中是elif：\n",[36,2228,2230],{"class":38,"line":2229},24,[36,2231,2045],{"class":42},[36,2233,2235],{"class":38,"line":2234},25,[36,2236,2100],{"class":46},[36,2238,2240],{"class":38,"line":2239},26,[36,2241,2026],{"class":42},[36,2243,2245,2247,2249,2252,2254],{"class":38,"line":2244},27,[36,2246,2031],{"class":42},[36,2248,1657],{"class":46},[36,2250,2251],{"class":405},"\"不小于200\"",[36,2253,1657],{"class":46},[36,2255,1679],{"class":42},[36,2257,2259],{"class":38,"line":2258},28,[36,2260,2045],{"class":42},[36,2262,2264],{"class":38,"line":2263},29,[36,2265,2266],{"class":69},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[579,2268,2269],{"start":66},[582,2270,2271],{},"三目运算符",[26,2273,2275],{"className":617,"code":2274,"language":619,"meta":31,"style":31},"\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",[33,2276,2277,2282,2287,2313,2335,2352,2357,2380,2395],{"__ignoreMap":31},[36,2278,2279],{"class":38,"line":39},[36,2280,2281],{"class":69},"\u002F\u002F创建三个变量a,b,c\n",[36,2283,2284],{"class":38,"line":66},[36,2285,2286],{"class":69},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,2288,2289,2291,2293,2295,2297,2300,2302,2304,2307,2309,2311],{"class":38,"line":73},[36,2290,631],{"class":46},[36,2292,1879],{"class":42},[36,2294,47],{"class":46},[36,2296,1313],{"class":53},[36,2298,2299],{"class":42},",b",[36,2301,47],{"class":46},[36,2303,1062],{"class":53},[36,2305,2306],{"class":42},",c",[36,2308,47],{"class":46},[36,2310,812],{"class":53},[36,2312,1774],{"class":42},[36,2314,2315,2317,2319,2322,2324,2326,2328,2330,2332],{"class":38,"line":79},[36,2316,907],{"class":42},[36,2318,47],{"class":46},[36,2320,2321],{"class":42},"(a",[36,2323,1573],{"class":46},[36,2325,882],{"class":42},[36,2327,1599],{"class":46},[36,2329,43],{"class":42},[36,2331,1472],{"class":46},[36,2333,2334],{"class":42},"b)\n",[36,2336,2337,2339,2341,2344,2346,2348,2350],{"class":38,"line":85},[36,2338,1850],{"class":42},[36,2340,1657],{"class":46},[36,2342,2343],{"class":405},"\"c=\"",[36,2345,1657],{"class":46},[36,2347,907],{"class":42},[36,2349,1657],{"class":46},[36,2351,1679],{"class":42},[36,2353,2354],{"class":38,"line":419},[36,2355,2356],{"class":69},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,2358,2359,2361,2363,2365,2367,2369,2371,2374,2376,2378],{"class":38,"line":425},[36,2360,2321],{"class":42},[36,2362,1573],{"class":46},[36,2364,882],{"class":42},[36,2366,1599],{"class":46},[36,2368,43],{"class":42},[36,2370,1472],{"class":46},[36,2372,2373],{"class":42},"b)",[36,2375,47],{"class":46},[36,2377,930],{"class":53},[36,2379,1774],{"class":42},[36,2381,2382,2384,2386,2388,2390,2392],{"class":38,"line":431},[36,2383,1850],{"class":42},[36,2385,1657],{"class":46},[36,2387,43],{"class":42},[36,2389,1657],{"class":46},[36,2391,1722],{"class":42},[36,2393,2394],{"class":69}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,2396,2397,2399,2401,2403,2405,2407],{"class":38,"line":437},[36,2398,1850],{"class":42},[36,2400,1657],{"class":46},[36,2402,882],{"class":42},[36,2404,1657],{"class":46},[36,2406,1722],{"class":42},[36,2408,2409],{"class":69}," \u002F\u002F10   a>b,b还是原值\n",[579,2411,2412],{"start":73},[582,2413,2414],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,2416,2418],{"className":617,"code":2417,"language":619,"meta":31,"style":31},"\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",[33,2419,2420,2425,2433,2447,2457,2461,2475,2488,2498,2506,2511,2536,2557,2579,2600,2622,2643,2663,2668],{"__ignoreMap":31},[36,2421,2422],{"class":38,"line":39},[36,2423,2424],{"class":69},"\u002F\u002F案例-电影打分\n",[36,2426,2427,2430],{"class":38,"line":66},[36,2428,2429],{"class":46},"#include",[36,2431,2432],{"class":405},"\u003Ciostream>\n",[36,2434,2435,2438,2441,2445],{"class":38,"line":73},[36,2436,2437],{"class":46},"using",[36,2439,2440],{"class":46}," namespace",[36,2442,2444],{"class":2443},"sScJk"," std",[36,2446,1774],{"class":42},[36,2448,2449,2451,2454],{"class":38,"line":79},[36,2450,631],{"class":46},[36,2452,2453],{"class":2443}," main",[36,2455,2456],{"class":42},"()\n",[36,2458,2459],{"class":38,"line":85},[36,2460,2026],{"class":42},[36,2462,2463,2466,2469,2471,2473],{"class":38,"line":419},[36,2464,2465],{"class":46},"    int",[36,2467,2468],{"class":42}," score",[36,2470,47],{"class":46},[36,2472,812],{"class":53},[36,2474,1774],{"class":42},[36,2476,2477,2479,2481,2484,2486],{"class":38,"line":425},[36,2478,2031],{"class":42},[36,2480,1657],{"class":46},[36,2482,2483],{"class":405},"\"电影打分：\"",[36,2485,1657],{"class":46},[36,2487,1679],{"class":42},[36,2489,2490,2493,2495],{"class":38,"line":431},[36,2491,2492],{"class":42},"    cin",[36,2494,1910],{"class":46},[36,2496,2497],{"class":42},"score;\n",[36,2499,2500,2503],{"class":38,"line":437},[36,2501,2502],{"class":46},"    switch",[36,2504,2505],{"class":42},"(score)\n",[36,2507,2508],{"class":38,"line":443},[36,2509,2510],{"class":42},"    {\n",[36,2512,2513,2516,2519,2522,2524,2527,2529,2531,2534],{"class":38,"line":2092},[36,2514,2515],{"class":46},"        case",[36,2517,2518],{"class":53}," 10",[36,2520,2521],{"class":42},":cout",[36,2523,1657],{"class":46},[36,2525,2526],{"class":405},"\"经典\"",[36,2528,1657],{"class":46},[36,2530,1722],{"class":42},[36,2532,2533],{"class":46},"break",[36,2535,1774],{"class":42},[36,2537,2538,2540,2543,2545,2547,2549,2551,2553,2555],{"class":38,"line":2097},[36,2539,2515],{"class":46},[36,2541,2542],{"class":53}," 9",[36,2544,2521],{"class":42},[36,2546,1657],{"class":46},[36,2548,2526],{"class":405},[36,2550,1657],{"class":46},[36,2552,1722],{"class":42},[36,2554,2533],{"class":46},[36,2556,1774],{"class":42},[36,2558,2559,2561,2564,2566,2568,2571,2573,2575,2577],{"class":38,"line":2103},[36,2560,2515],{"class":46},[36,2562,2563],{"class":53}," 8",[36,2565,2521],{"class":42},[36,2567,1657],{"class":46},[36,2569,2570],{"class":405},"\"非常好\"",[36,2572,1657],{"class":46},[36,2574,1722],{"class":42},[36,2576,2533],{"class":46},[36,2578,1774],{"class":42},[36,2580,2581,2583,2586,2588,2590,2592,2594,2596,2598],{"class":38,"line":2108},[36,2582,2515],{"class":46},[36,2584,2585],{"class":53}," 7",[36,2587,2521],{"class":42},[36,2589,1657],{"class":46},[36,2591,2570],{"class":405},[36,2593,1657],{"class":46},[36,2595,1722],{"class":42},[36,2597,2533],{"class":46},[36,2599,1774],{"class":42},[36,2601,2602,2604,2607,2609,2611,2614,2616,2618,2620],{"class":38,"line":2122},[36,2603,2515],{"class":46},[36,2605,2606],{"class":53}," 6",[36,2608,2521],{"class":42},[36,2610,1657],{"class":46},[36,2612,2613],{"class":405},"\"一般\"",[36,2615,1657],{"class":46},[36,2617,1722],{"class":42},[36,2619,2533],{"class":46},[36,2621,1774],{"class":42},[36,2623,2624,2626,2629,2631,2633,2635,2637,2639,2641],{"class":38,"line":2127},[36,2625,2515],{"class":46},[36,2627,2628],{"class":53}," 5",[36,2630,2521],{"class":42},[36,2632,1657],{"class":46},[36,2634,2613],{"class":405},[36,2636,1657],{"class":46},[36,2638,1722],{"class":42},[36,2640,2533],{"class":46},[36,2642,1774],{"class":42},[36,2644,2645,2648,2650,2652,2655,2657,2659,2661],{"class":38,"line":2133},[36,2646,2647],{"class":46},"        default",[36,2649,2521],{"class":42},[36,2651,1657],{"class":46},[36,2653,2654],{"class":405},"\"烂片\"",[36,2656,1657],{"class":46},[36,2658,1722],{"class":42},[36,2660,2533],{"class":46},[36,2662,1774],{"class":42},[36,2664,2665],{"class":38,"line":2154},[36,2666,2667],{"class":42},"    }\n",[36,2669,2670],{"class":38,"line":2159},[36,2671,2045],{"class":42},[19,2673,2674],{},"if和switch区别：",[1620,2676,2677,2680],{},[582,2678,2679],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[582,2681,2682],{},"switch优点：结构清晰，执行效率高",[596,2684,2686],{"id":2685},"_162循环结构","1.6.2循环结构",[579,2688,2689],{},[582,2690,2691],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,2693,2695],{"className":617,"code":2694,"language":619,"meta":31,"style":31},"\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",[33,2696,2697,2702,2710,2714,2727,2741,2745,2765,2775,2779,2791],{"__ignoreMap":31},[36,2698,2699],{"class":38,"line":39},[36,2700,2701],{"class":69},"\u002F\u002F打印0-9数字\n",[36,2703,2704,2706,2708],{"class":38,"line":66},[36,2705,631],{"class":46},[36,2707,2453],{"class":2443},[36,2709,2456],{"class":42},[36,2711,2712],{"class":38,"line":73},[36,2713,2026],{"class":42},[36,2715,2716,2718,2721,2723,2725],{"class":38,"line":79},[36,2717,2465],{"class":46},[36,2719,2720],{"class":42}," num",[36,2722,47],{"class":46},[36,2724,812],{"class":53},[36,2726,1774],{"class":42},[36,2728,2729,2732,2735,2737,2739],{"class":38,"line":85},[36,2730,2731],{"class":46},"    while",[36,2733,2734],{"class":42},"(num",[36,2736,1523],{"class":46},[36,2738,1062],{"class":53},[36,2740,63],{"class":42},[36,2742,2743],{"class":38,"line":419},[36,2744,2510],{"class":42},[36,2746,2747,2750,2753,2755,2757,2759,2762],{"class":38,"line":425},[36,2748,2749],{"class":2443},"       std",[36,2751,2752],{"class":42},"::cout",[36,2754,1657],{"class":46},[36,2756,2145],{"class":42},[36,2758,1657],{"class":46},[36,2760,2761],{"class":2443},"std",[36,2763,2764],{"class":42},"::endl;\n",[36,2766,2767,2770,2773],{"class":38,"line":431},[36,2768,2769],{"class":42},"        num",[36,2771,2772],{"class":46},"++",[36,2774,1774],{"class":42},[36,2776,2777],{"class":38,"line":437},[36,2778,2667],{"class":42},[36,2780,2781,2784,2786,2789],{"class":38,"line":443},[36,2782,2783],{"class":2443},"    system",[36,2785,345],{"class":42},[36,2787,2788],{"class":405},"\"pause\"",[36,2790,63],{"class":42},[36,2792,2793],{"class":38,"line":2092},[36,2794,2045],{"class":42},[19,2796,2797],{},"注意：写好循环条件，避免死循环情况",[26,2799,2801],{"className":617,"code":2800,"language":619,"meta":31,"style":31},"\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",[33,2802,2803,2808,2815,2822,2832,2840,2844,2849,2876,2881,2886,2894,2921,2926,2931,2944,2954,2958,2968,2973,2986,2991,3005,3010,3025,3029,3042,3046,3051,3055,3069,3077,3082,3088,3094,3099],{"__ignoreMap":31},[36,2804,2805],{"class":38,"line":39},[36,2806,2807],{"class":69},"\u002F\u002F循环结构-猜数字\n",[36,2809,2810,2812],{"class":38,"line":66},[36,2811,2429],{"class":46},[36,2813,2814],{"class":405}," \u003Ciostream>\n",[36,2816,2817,2819],{"class":38,"line":73},[36,2818,2429],{"class":46},[36,2820,2821],{"class":405}," \u003Cctime>\n",[36,2823,2824,2826,2828,2830],{"class":38,"line":79},[36,2825,2437],{"class":46},[36,2827,2440],{"class":46},[36,2829,2444],{"class":2443},[36,2831,1774],{"class":42},[36,2833,2834,2836,2838],{"class":38,"line":85},[36,2835,631],{"class":46},[36,2837,2453],{"class":2443},[36,2839,2456],{"class":42},[36,2841,2842],{"class":38,"line":419},[36,2843,2026],{"class":42},[36,2845,2846],{"class":38,"line":425},[36,2847,2848],{"class":69},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,2850,2851,2854,2857,2860,2863,2865,2868,2870,2873],{"class":38,"line":431},[36,2852,2853],{"class":2443},"    srand",[36,2855,2856],{"class":42},"((",[36,2858,2859],{"class":46},"unsigned",[36,2861,2862],{"class":46}," int",[36,2864,231],{"class":42},[36,2866,2867],{"class":2443},"time",[36,2869,345],{"class":42},[36,2871,2872],{"class":53},"NULL",[36,2874,2875],{"class":42},"));\n",[36,2877,2878],{"class":38,"line":437},[36,2879,2880],{"emptyLinePlaceholder":553},"\n",[36,2882,2883],{"class":38,"line":443},[36,2884,2885],{"class":69},"    \u002F\u002F1.系统生成随机数\n",[36,2887,2888,2891],{"class":38,"line":2092},[36,2889,2890],{"class":69},"    \u002F\u002Frand()%100",[36,2892,2893],{"class":69}," \u002F\u002F生成0-99的随机数\n",[36,2895,2896,2898,2900,2902,2905,2908,2910,2912,2914,2916,2918],{"class":38,"line":2097},[36,2897,2465],{"class":46},[36,2899,2720],{"class":42},[36,2901,47],{"class":46},[36,2903,2904],{"class":2443},"rand",[36,2906,2907],{"class":42},"()",[36,2909,947],{"class":46},[36,2911,930],{"class":53},[36,2913,1097],{"class":46},[36,2915,54],{"class":53},[36,2917,680],{"class":42},[36,2919,2920],{"class":69}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,2922,2923],{"class":38,"line":2103},[36,2924,2925],{"class":69},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,2927,2928],{"class":38,"line":2108},[36,2929,2930],{"class":69},"    \u002F\u002F2.玩家猜测\n",[36,2932,2933,2935,2938,2940,2942],{"class":38,"line":2122},[36,2934,2465],{"class":46},[36,2936,2937],{"class":42}," val",[36,2939,47],{"class":46},[36,2941,812],{"class":53},[36,2943,1774],{"class":42},[36,2945,2946,2948,2950,2952],{"class":38,"line":2127},[36,2947,2731],{"class":46},[36,2949,2138],{"class":42},[36,2951,54],{"class":53},[36,2953,63],{"class":42},[36,2955,2956],{"class":38,"line":2133},[36,2957,2510],{"class":42},[36,2959,2960,2963,2965],{"class":38,"line":2154},[36,2961,2962],{"class":42},"        cin",[36,2964,1910],{"class":46},[36,2966,2967],{"class":42},"val;\n",[36,2969,2970],{"class":38,"line":2159},[36,2971,2972],{"class":69},"        \u002F\u002F3.判断玩家猜测\n",[36,2974,2975,2978,2981,2983],{"class":38,"line":2173},[36,2976,2977],{"class":46},"        if",[36,2979,2980],{"class":42},"(val",[36,2982,1523],{"class":46},[36,2984,2985],{"class":42},"num) \n",[36,2987,2988],{"class":38,"line":2178},[36,2989,2990],{"class":42},"        {\n",[36,2992,2993,2996,2998,3001,3003],{"class":38,"line":2207},[36,2994,2995],{"class":42},"            cout",[36,2997,1657],{"class":46},[36,2999,3000],{"class":405},"\"猜小了！\"",[36,3002,1657],{"class":46},[36,3004,1679],{"class":42},[36,3006,3007],{"class":38,"line":2212},[36,3008,3009],{"class":42},"        }\n",[36,3011,3012,3015,3017,3020,3022],{"class":38,"line":2229},[36,3013,3014],{"class":46},"        else",[36,3016,2184],{"class":46},[36,3018,3019],{"class":42}," (val",[36,3021,1573],{"class":46},[36,3023,3024],{"class":42},"num)\n",[36,3026,3027],{"class":38,"line":2234},[36,3028,2990],{"class":42},[36,3030,3031,3033,3035,3038,3040],{"class":38,"line":2239},[36,3032,2995],{"class":42},[36,3034,1657],{"class":46},[36,3036,3037],{"class":405},"\"猜大了！\"",[36,3039,1657],{"class":46},[36,3041,1679],{"class":42},[36,3043,3044],{"class":38,"line":2244},[36,3045,3009],{"class":42},[36,3047,3048],{"class":38,"line":2258},[36,3049,3050],{"class":46},"        else\n",[36,3052,3053],{"class":38,"line":2263},[36,3054,2990],{"class":42},[36,3056,3058,3060,3062,3065,3067],{"class":38,"line":3057},30,[36,3059,2995],{"class":42},[36,3061,1657],{"class":46},[36,3063,3064],{"class":405},"\"猜对了！\"",[36,3066,1657],{"class":46},[36,3068,1679],{"class":42},[36,3070,3072,3075],{"class":38,"line":3071},31,[36,3073,3074],{"class":46},"            break",[36,3076,1774],{"class":42},[36,3078,3080],{"class":38,"line":3079},32,[36,3081,3009],{"class":42},[36,3083,3085],{"class":38,"line":3084},33,[36,3086,3087],{"class":69},"        \u002F\u002F猜对 退出游戏\n",[36,3089,3091],{"class":38,"line":3090},34,[36,3092,3093],{"class":69},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,3095,3097],{"class":38,"line":3096},35,[36,3098,2667],{"class":42},[36,3100,3102],{"class":38,"line":3101},36,[36,3103,2045],{"class":42},[579,3105,3106],{"start":66},[582,3107,3108,3109,3112],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[770,3110,3111],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,3114,3116],{"className":617,"code":3115,"language":619,"meta":31,"style":31},"\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",[33,3117,3118,3123,3131,3135,3147,3155,3159,3176,3183,3187,3200,3210],{"__ignoreMap":31},[36,3119,3120],{"class":38,"line":39},[36,3121,3122],{"class":69},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,3124,3125,3127,3129],{"class":38,"line":66},[36,3126,631],{"class":46},[36,3128,2453],{"class":2443},[36,3130,2456],{"class":42},[36,3132,3133],{"class":38,"line":73},[36,3134,2026],{"class":42},[36,3136,3137,3139,3141,3143,3145],{"class":38,"line":79},[36,3138,2465],{"class":46},[36,3140,2720],{"class":42},[36,3142,47],{"class":46},[36,3144,812],{"class":53},[36,3146,1774],{"class":42},[36,3148,3149,3152],{"class":38,"line":85},[36,3150,3151],{"class":46},"    do",[36,3153,3154],{"class":42}," \n",[36,3156,3157],{"class":38,"line":419},[36,3158,2510],{"class":42},[36,3160,3161,3164,3166,3168,3170,3172,3174],{"class":38,"line":425},[36,3162,3163],{"class":2443},"        std",[36,3165,2752],{"class":42},[36,3167,1657],{"class":46},[36,3169,2145],{"class":42},[36,3171,1657],{"class":46},[36,3173,2761],{"class":2443},[36,3175,2764],{"class":42},[36,3177,3178,3180],{"class":38,"line":431},[36,3179,2769],{"class":42},[36,3181,3182],{"class":46},"++\n",[36,3184,3185],{"class":38,"line":437},[36,3186,2667],{"class":42},[36,3188,3189,3191,3193,3195,3197],{"class":38,"line":443},[36,3190,2731],{"class":46},[36,3192,2734],{"class":42},[36,3194,1523],{"class":46},[36,3196,1062],{"class":53},[36,3198,3199],{"class":42},");\n",[36,3201,3202,3204,3206,3208],{"class":38,"line":2092},[36,3203,2783],{"class":2443},[36,3205,345],{"class":42},[36,3207,2788],{"class":405},[36,3209,3199],{"class":42},[36,3211,3212],{"class":38,"line":2097},[36,3213,2045],{"class":42},[19,3215,3216],{},"案例-水仙花数",[19,3218,3219],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3221,3222],{},"例如：1^3+5^3+3^3=153",[19,3224,3225],{},"请用do...while语句，求出所有3位数的水仙花数",[26,3227,3229],{"className":617,"code":3228,"language":619,"meta":31,"style":31},"#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",[33,3230,3231,3237,3247,3255,3259,3264,3276,3282,3286,3291,3307,3323,3339,3354,3373,3388,3436,3440,3452,3456,3464,3468,3482],{"__ignoreMap":31},[36,3232,3233,3235],{"class":38,"line":39},[36,3234,2429],{"class":46},[36,3236,2814],{"class":405},[36,3238,3239,3241,3243,3245],{"class":38,"line":66},[36,3240,2437],{"class":46},[36,3242,2440],{"class":46},[36,3244,2444],{"class":2443},[36,3246,1774],{"class":42},[36,3248,3249,3251,3253],{"class":38,"line":73},[36,3250,631],{"class":46},[36,3252,2453],{"class":2443},[36,3254,2456],{"class":42},[36,3256,3257],{"class":38,"line":79},[36,3258,2026],{"class":42},[36,3260,3261],{"class":38,"line":85},[36,3262,3263],{"class":69},"    \u002F\u002F1.先打印所有三位数字\n",[36,3265,3266,3268,3270,3272,3274],{"class":38,"line":419},[36,3267,2465],{"class":46},[36,3269,2720],{"class":42},[36,3271,47],{"class":46},[36,3273,930],{"class":53},[36,3275,1774],{"class":42},[36,3277,3278,3280],{"class":38,"line":425},[36,3279,3151],{"class":46},[36,3281,3154],{"class":42},[36,3283,3284],{"class":38,"line":431},[36,3285,2510],{"class":42},[36,3287,3288],{"class":38,"line":437},[36,3289,3290],{"class":69},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,3292,3293,3296,3298,3300,3302,3304],{"class":38,"line":443},[36,3294,3295],{"class":46},"        int",[36,3297,1879],{"class":42},[36,3299,47],{"class":46},[36,3301,812],{"class":53},[36,3303,680],{"class":42},[36,3305,3306],{"class":69}," \u002F\u002F个位\n",[36,3308,3309,3311,3314,3316,3318,3320],{"class":38,"line":2092},[36,3310,3295],{"class":46},[36,3312,3313],{"class":42}," b",[36,3315,47],{"class":46},[36,3317,812],{"class":53},[36,3319,680],{"class":42},[36,3321,3322],{"class":69}," \u002F\u002F十位\n",[36,3324,3325,3327,3330,3332,3334,3336],{"class":38,"line":2097},[36,3326,3295],{"class":46},[36,3328,3329],{"class":42}," c",[36,3331,47],{"class":46},[36,3333,812],{"class":53},[36,3335,680],{"class":42},[36,3337,3338],{"class":69}," \u002F\u002F百位\n",[36,3340,3341,3344,3346,3348,3350,3352],{"class":38,"line":2103},[36,3342,3343],{"class":42},"        a",[36,3345,47],{"class":46},[36,3347,2145],{"class":42},[36,3349,947],{"class":46},[36,3351,1062],{"class":53},[36,3353,1774],{"class":42},[36,3355,3356,3359,3361,3363,3365,3367,3369,3371],{"class":38,"line":2108},[36,3357,3358],{"class":42},"        b",[36,3360,47],{"class":46},[36,3362,2145],{"class":42},[36,3364,1197],{"class":46},[36,3366,1062],{"class":53},[36,3368,947],{"class":46},[36,3370,1062],{"class":53},[36,3372,1774],{"class":42},[36,3374,3375,3378,3380,3382,3384,3386],{"class":38,"line":2122},[36,3376,3377],{"class":42},"        c",[36,3379,47],{"class":46},[36,3381,2145],{"class":42},[36,3383,1197],{"class":46},[36,3385,930],{"class":53},[36,3387,1774],{"class":42},[36,3389,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3427,3430,3433],{"class":38,"line":2127},[36,3391,2977],{"class":46},[36,3393,2321],{"class":42},[36,3395,1071],{"class":46},[36,3397,43],{"class":42},[36,3399,1071],{"class":46},[36,3401,43],{"class":42},[36,3403,1097],{"class":46},[36,3405,882],{"class":42},[36,3407,1071],{"class":46},[36,3409,882],{"class":42},[36,3411,1071],{"class":46},[36,3413,882],{"class":42},[36,3415,1097],{"class":46},[36,3417,907],{"class":42},[36,3419,1071],{"class":46},[36,3421,907],{"class":42},[36,3423,1071],{"class":46},[36,3425,3426],{"class":42},"c ",[36,3428,3429],{"class":46},"==",[36,3431,3432],{"class":42}," num)",[36,3434,3435],{"class":69}," \u002F\u002F如果是水仙花数，才打印\n",[36,3437,3438],{"class":38,"line":2133},[36,3439,2990],{"class":42},[36,3441,3442,3444,3446,3448,3450],{"class":38,"line":2154},[36,3443,2995],{"class":42},[36,3445,1657],{"class":46},[36,3447,2145],{"class":42},[36,3449,1657],{"class":46},[36,3451,1679],{"class":42},[36,3453,3454],{"class":38,"line":2159},[36,3455,3009],{"class":42},[36,3457,3458,3460,3462],{"class":38,"line":2173},[36,3459,2769],{"class":42},[36,3461,2772],{"class":46},[36,3463,1774],{"class":42},[36,3465,3466],{"class":38,"line":2178},[36,3467,2667],{"class":42},[36,3469,3470,3472,3475,3477,3480],{"class":38,"line":2207},[36,3471,2731],{"class":46},[36,3473,3474],{"class":42}," (num ",[36,3476,1523],{"class":46},[36,3478,3479],{"class":53}," 1000",[36,3481,3199],{"class":42},[36,3483,3484],{"class":38,"line":2212},[36,3485,2045],{"class":42},[579,3487,3488],{"start":73},[582,3489,3490],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,3492,3494],{"className":617,"code":3493,"language":619,"meta":31,"style":31},"\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",[33,3495,3496,3501,3530,3534,3546,3550,3555,3566,3573,3577,3591,3595,3602,3606,3618,3627],{"__ignoreMap":31},[36,3497,3498],{"class":38,"line":39},[36,3499,3500],{"class":69},"\u002F\u002F从数字0-9打印\n",[36,3502,3503,3506,3508,3510,3513,3515,3517,3520,3522,3524,3526,3528],{"class":38,"line":66},[36,3504,3505],{"class":46},"for",[36,3507,345],{"class":42},[36,3509,631],{"class":46},[36,3511,3512],{"class":42}," i",[36,3514,47],{"class":46},[36,3516,812],{"class":53},[36,3518,3519],{"class":42},";i",[36,3521,1523],{"class":46},[36,3523,1062],{"class":53},[36,3525,3519],{"class":42},[36,3527,2772],{"class":46},[36,3529,63],{"class":42},[36,3531,3532],{"class":38,"line":73},[36,3533,2026],{"class":42},[36,3535,3536,3538,3540,3542,3544],{"class":38,"line":79},[36,3537,2031],{"class":42},[36,3539,1657],{"class":46},[36,3541,1057],{"class":42},[36,3543,1657],{"class":46},[36,3545,1679],{"class":42},[36,3547,3548],{"class":38,"line":85},[36,3549,2045],{"class":42},[36,3551,3552],{"class":38,"line":419},[36,3553,3554],{"class":69},"\u002F\u002F上式可以进行拆分\n",[36,3556,3557,3559,3561,3563],{"class":38,"line":425},[36,3558,631],{"class":46},[36,3560,3512],{"class":42},[36,3562,47],{"class":46},[36,3564,3565],{"class":53},"0\n",[36,3567,3568,3570],{"class":38,"line":431},[36,3569,3505],{"class":46},[36,3571,3572],{"class":42},"(;;;)\n",[36,3574,3575],{"class":38,"line":437},[36,3576,2026],{"class":42},[36,3578,3579,3582,3585,3587,3589],{"class":38,"line":443},[36,3580,3581],{"class":46},"    if",[36,3583,3584],{"class":42},"(i",[36,3586,2190],{"class":46},[36,3588,1062],{"class":53},[36,3590,63],{"class":42},[36,3592,3593],{"class":38,"line":2092},[36,3594,2510],{"class":42},[36,3596,3597,3600],{"class":38,"line":2097},[36,3598,3599],{"class":46},"        break",[36,3601,1774],{"class":42},[36,3603,3604],{"class":38,"line":2103},[36,3605,2667],{"class":42},[36,3607,3608,3610,3612,3614,3616],{"class":38,"line":2108},[36,3609,2031],{"class":42},[36,3611,1657],{"class":46},[36,3613,1057],{"class":42},[36,3615,1657],{"class":46},[36,3617,1679],{"class":42},[36,3619,3620,3623,3625],{"class":38,"line":2122},[36,3621,3622],{"class":42},"    i",[36,3624,2772],{"class":46},[36,3626,1774],{"class":42},[36,3628,3629],{"class":38,"line":2127},[36,3630,2045],{"class":42},[19,3632,3633],{},"小练习",[26,3635,3637],{"className":617,"code":3636,"language":619,"meta":31,"style":31},"#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",[33,3638,3639,3645,3655,3663,3667,3672,3677,3705,3709,3714,3719,3760,3764,3777,3781,3785,3789,3801,3805,3809],{"__ignoreMap":31},[36,3640,3641,3643],{"class":38,"line":39},[36,3642,2429],{"class":46},[36,3644,2432],{"class":405},[36,3646,3647,3649,3651,3653],{"class":38,"line":66},[36,3648,2437],{"class":46},[36,3650,2440],{"class":46},[36,3652,2444],{"class":2443},[36,3654,1774],{"class":42},[36,3656,3657,3659,3661],{"class":38,"line":73},[36,3658,631],{"class":46},[36,3660,2453],{"class":2443},[36,3662,2456],{"class":42},[36,3664,3665],{"class":38,"line":79},[36,3666,2026],{"class":42},[36,3668,3669],{"class":38,"line":85},[36,3670,3671],{"class":69},"    \u002F\u002F敲桌子案例\n",[36,3673,3674],{"class":38,"line":419},[36,3675,3676],{"class":69},"    \u002F\u002F1.先输出1-100的数字\n",[36,3678,3679,3682,3684,3686,3688,3690,3692,3695,3697,3699,3701,3703],{"class":38,"line":425},[36,3680,3681],{"class":46},"    for",[36,3683,345],{"class":42},[36,3685,631],{"class":46},[36,3687,3512],{"class":42},[36,3689,47],{"class":46},[36,3691,54],{"class":53},[36,3693,3694],{"class":42},"; i",[36,3696,2068],{"class":46},[36,3698,930],{"class":53},[36,3700,3694],{"class":42},[36,3702,2772],{"class":46},[36,3704,63],{"class":42},[36,3706,3707],{"class":38,"line":431},[36,3708,2510],{"class":42},[36,3710,3711],{"class":38,"line":437},[36,3712,3713],{"class":69},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,3715,3716],{"class":38,"line":443},[36,3717,3718],{"class":69},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,3720,3721,3723,3725,3727,3729,3731,3733,3736,3738,3740,3742,3744,3746,3748,3750,3752,3754,3756,3758],{"class":38,"line":2092},[36,3722,2977],{"class":46},[36,3724,3584],{"class":42},[36,3726,947],{"class":46},[36,3728,987],{"class":53},[36,3730,3429],{"class":46},[36,3732,812],{"class":53},[36,3734,3735],{"class":46}," ||",[36,3737,3512],{"class":42},[36,3739,947],{"class":46},[36,3741,1062],{"class":53},[36,3743,3429],{"class":46},[36,3745,987],{"class":53},[36,3747,3735],{"class":46},[36,3749,3512],{"class":42},[36,3751,1197],{"class":46},[36,3753,1062],{"class":53},[36,3755,3429],{"class":46},[36,3757,987],{"class":53},[36,3759,63],{"class":42},[36,3761,3762],{"class":38,"line":2097},[36,3763,2990],{"class":42},[36,3765,3766,3768,3770,3773,3775],{"class":38,"line":2103},[36,3767,2995],{"class":42},[36,3769,1657],{"class":46},[36,3771,3772],{"class":405},"\"敲桌子\"",[36,3774,1657],{"class":46},[36,3776,1679],{"class":42},[36,3778,3779],{"class":38,"line":2108},[36,3780,3009],{"class":42},[36,3782,3783],{"class":38,"line":2122},[36,3784,3050],{"class":46},[36,3786,3787],{"class":38,"line":2127},[36,3788,2990],{"class":42},[36,3790,3791,3793,3795,3797,3799],{"class":38,"line":2133},[36,3792,2995],{"class":42},[36,3794,1657],{"class":46},[36,3796,1057],{"class":42},[36,3798,1657],{"class":46},[36,3800,1679],{"class":42},[36,3802,3803],{"class":38,"line":2154},[36,3804,3009],{"class":42},[36,3806,3807],{"class":38,"line":2159},[36,3808,2667],{"class":42},[36,3810,3811],{"class":38,"line":2173},[36,3812,2045],{"class":42},[19,3814,3815],{},"嵌套实现星图",[26,3817,3819],{"className":617,"code":3818,"language":619,"meta":31,"style":31},"#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",[33,3820,3821,3827,3837,3845,3849,3875,3879,3908,3912,3923,3927,3936,3940],{"__ignoreMap":31},[36,3822,3823,3825],{"class":38,"line":39},[36,3824,2429],{"class":46},[36,3826,2432],{"class":405},[36,3828,3829,3831,3833,3835],{"class":38,"line":66},[36,3830,2437],{"class":46},[36,3832,2440],{"class":46},[36,3834,2444],{"class":2443},[36,3836,1774],{"class":42},[36,3838,3839,3841,3843],{"class":38,"line":73},[36,3840,631],{"class":46},[36,3842,2453],{"class":2443},[36,3844,2456],{"class":42},[36,3846,3847],{"class":38,"line":79},[36,3848,2026],{"class":42},[36,3850,3851,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871,3873],{"class":38,"line":85},[36,3852,3681],{"class":46},[36,3854,2138],{"class":42},[36,3856,631],{"class":46},[36,3858,3512],{"class":42},[36,3860,47],{"class":46},[36,3862,812],{"class":53},[36,3864,3519],{"class":42},[36,3866,1523],{"class":46},[36,3868,1062],{"class":53},[36,3870,3519],{"class":42},[36,3872,2772],{"class":46},[36,3874,63],{"class":42},[36,3876,3877],{"class":38,"line":419},[36,3878,2510],{"class":42},[36,3880,3881,3884,3886,3888,3891,3893,3895,3898,3900,3902,3904,3906],{"class":38,"line":425},[36,3882,3883],{"class":46},"        for",[36,3885,2138],{"class":42},[36,3887,631],{"class":46},[36,3889,3890],{"class":42}," j",[36,3892,47],{"class":46},[36,3894,812],{"class":53},[36,3896,3897],{"class":42},";j",[36,3899,1523],{"class":46},[36,3901,1062],{"class":53},[36,3903,3897],{"class":42},[36,3905,2772],{"class":46},[36,3907,63],{"class":42},[36,3909,3910],{"class":38,"line":431},[36,3911,2990],{"class":42},[36,3913,3914,3916,3918,3921],{"class":38,"line":437},[36,3915,2995],{"class":42},[36,3917,1657],{"class":46},[36,3919,3920],{"class":405},"\"*\"",[36,3922,1774],{"class":42},[36,3924,3925],{"class":38,"line":443},[36,3926,3009],{"class":42},[36,3928,3929,3932,3934],{"class":38,"line":2092},[36,3930,3931],{"class":42},"        cout",[36,3933,1657],{"class":46},[36,3935,1679],{"class":42},[36,3937,3938],{"class":38,"line":2097},[36,3939,2667],{"class":42},[36,3941,3942],{"class":38,"line":2103},[36,3943,2045],{"class":42},[19,3945,3946],{},"乘法口诀表",[26,3948,3950],{"className":617,"code":3949,"language":619,"meta":31,"style":31},"#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",[33,3951,3952,3958,3968,3976,3980,4006,4010,4035,4039,4079,4083,4091,4095],{"__ignoreMap":31},[36,3953,3954,3956],{"class":38,"line":39},[36,3955,2429],{"class":46},[36,3957,2814],{"class":405},[36,3959,3960,3962,3964,3966],{"class":38,"line":66},[36,3961,2437],{"class":46},[36,3963,2440],{"class":46},[36,3965,2444],{"class":2443},[36,3967,1774],{"class":42},[36,3969,3970,3972,3974],{"class":38,"line":73},[36,3971,631],{"class":46},[36,3973,2453],{"class":2443},[36,3975,2456],{"class":42},[36,3977,3978],{"class":38,"line":79},[36,3979,2026],{"class":42},[36,3981,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004],{"class":38,"line":85},[36,3983,3681],{"class":46},[36,3985,345],{"class":42},[36,3987,631],{"class":46},[36,3989,3512],{"class":42},[36,3991,47],{"class":46},[36,3993,54],{"class":53},[36,3995,3519],{"class":42},[36,3997,1523],{"class":46},[36,3999,1062],{"class":53},[36,4001,3519],{"class":42},[36,4003,2772],{"class":46},[36,4005,63],{"class":42},[36,4007,4008],{"class":38,"line":419},[36,4009,2510],{"class":42},[36,4011,4012,4014,4016,4018,4020,4022,4024,4026,4028,4031,4033],{"class":38,"line":425},[36,4013,3883],{"class":46},[36,4015,345],{"class":42},[36,4017,631],{"class":46},[36,4019,3890],{"class":42},[36,4021,47],{"class":46},[36,4023,54],{"class":53},[36,4025,3897],{"class":42},[36,4027,2068],{"class":46},[36,4029,4030],{"class":42},"i;j",[36,4032,2772],{"class":46},[36,4034,63],{"class":42},[36,4036,4037],{"class":38,"line":431},[36,4038,2990],{"class":42},[36,4040,4041,4043,4045,4047,4049,4051,4053,4055,4057,4060,4062,4064,4066,4068,4070,4073,4075,4077],{"class":38,"line":437},[36,4042,2995],{"class":42},[36,4044,1657],{"class":46},[36,4046,1083],{"class":42},[36,4048,1657],{"class":46},[36,4050,3920],{"class":405},[36,4052,1657],{"class":46},[36,4054,1057],{"class":42},[36,4056,1657],{"class":46},[36,4058,4059],{"class":405},"\"=\"",[36,4061,1657],{"class":46},[36,4063,1057],{"class":42},[36,4065,1071],{"class":46},[36,4067,1083],{"class":42},[36,4069,1657],{"class":46},[36,4071,4072],{"class":405},"'",[36,4074,1714],{"class":53},[36,4076,4072],{"class":405},[36,4078,1774],{"class":42},[36,4080,4081],{"class":38,"line":443},[36,4082,3009],{"class":42},[36,4084,4085,4087,4089],{"class":38,"line":2092},[36,4086,3931],{"class":42},[36,4088,1657],{"class":46},[36,4090,1679],{"class":42},[36,4092,4093],{"class":38,"line":2097},[36,4094,2667],{"class":42},[36,4096,4097],{"class":38,"line":2103},[36,4098,2045],{"class":42},[596,4100,4102],{"id":4101},"_163跳出语句","1.6.3跳出语句",[579,4104,4105],{},[582,4106,4107],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4109,4110],{},"break使用时机：",[1620,4112,4113,4116,4119],{},[582,4114,4115],{},"出现在switch条件语句中，作用是终止case并跳出switch",[582,4117,4118],{},"出现在循环结构中，作用是跳出当前的循环结构",[582,4120,4121],{},"出现在嵌套循环中，跳出最近的内层循环语句",[579,4123,4124,4127],{"start":66},[582,4125,4126],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[582,4128,4129],{},"goto语句\n语法：goto 标记;",[19,4131,4132],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,4134,4136],{"className":617,"code":4135,"language":619,"meta":31,"style":31},"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",[33,4137,4138,4146,4150,4163,4173,4186,4199,4212,4220,4236],{"__ignoreMap":31},[36,4139,4140,4142,4144],{"class":38,"line":39},[36,4141,631],{"class":46},[36,4143,2453],{"class":2443},[36,4145,2456],{"class":42},[36,4147,4148],{"class":38,"line":66},[36,4149,2026],{"class":42},[36,4151,4152,4154,4156,4159,4161],{"class":38,"line":73},[36,4153,2031],{"class":42},[36,4155,1657],{"class":46},[36,4157,4158],{"class":405},"\"1\"",[36,4160,1657],{"class":46},[36,4162,1679],{"class":42},[36,4164,4165,4168,4171],{"class":38,"line":79},[36,4166,4167],{"class":46},"    goto",[36,4169,4170],{"class":2443}," FLAG",[36,4172,1774],{"class":42},[36,4174,4175,4177,4179,4182,4184],{"class":38,"line":85},[36,4176,2031],{"class":42},[36,4178,1657],{"class":46},[36,4180,4181],{"class":405},"\"2\"",[36,4183,1657],{"class":46},[36,4185,1679],{"class":42},[36,4187,4188,4190,4192,4195,4197],{"class":38,"line":419},[36,4189,2031],{"class":42},[36,4191,1657],{"class":46},[36,4193,4194],{"class":405},"\"3\"",[36,4196,1657],{"class":46},[36,4198,1679],{"class":42},[36,4200,4201,4203,4205,4208,4210],{"class":38,"line":425},[36,4202,2031],{"class":42},[36,4204,1657],{"class":46},[36,4206,4207],{"class":405},"\"4\"",[36,4209,1657],{"class":46},[36,4211,1679],{"class":42},[36,4213,4214,4217],{"class":38,"line":431},[36,4215,4216],{"class":2443},"    FLAG",[36,4218,4219],{"class":42},":\n",[36,4221,4222,4224,4226,4229,4231,4233],{"class":38,"line":437},[36,4223,2031],{"class":42},[36,4225,1657],{"class":46},[36,4227,4228],{"class":405},"\"5\"",[36,4230,1657],{"class":46},[36,4232,1722],{"class":42},[36,4234,4235],{"class":69},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,4237,4238],{"class":38,"line":443},[36,4239,2045],{"class":42},[14,4241,4243],{"id":4242},"_17数组","1.7数组",[596,4245,4247],{"id":4246},"_171一维数组","1.7.1一维数组",[579,4249,4250],{},[582,4251,4252],{},"一维数组定义方式",[758,4254,4255,4265],{},[761,4256,4257],{},[764,4258,4259,4262],{},[767,4260,4261],{},"方式",[767,4263,4264],{},"注意事项",[805,4266,4267,4281,4291],{},[764,4268,4269,4275],{},[810,4270,4271,4272,680],{},"数据类型 数组名",[36,4273,4274],{},"数组长度",[810,4276,4277,4278,4280],{},"这种方式是先定义再arr",[36,4279,1057],{},"赋值",[764,4282,4283,4288],{},[810,4284,4271,4285,4287],{},[36,4286,4274],{},"={值1,值2....};",[810,4289,4290],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[764,4292,4293,4297],{},[810,4294,4271,4295,4287],{},[36,4296],{},[810,4298,4299,4300,4302],{},"int arr",[36,4301],{},";这是不正确的，按照这样的方式定义必须有初始长度",[579,4304,4305],{"start":66},[582,4306,4307],{},"一维数组数组名\n用途：",[1620,4309,4310],{},[582,4311,4312],{},"1.可以统计整个数组在内存中的长度：",[26,4314,4316],{"className":617,"code":4315,"language":619,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,4317,4318,4325],{"__ignoreMap":31},[36,4319,4320,4322],{"class":38,"line":39},[36,4321,626],{"class":46},[36,4323,4324],{"class":42},"(arr);\n",[36,4326,4327,4329,4332,4334],{"class":38,"line":66},[36,4328,626],{"class":46},[36,4330,4331],{"class":42},"(arr[",[36,4333,812],{"class":53},[36,4335,4336],{"class":42},"]);\n",[1620,4338,4339],{},[582,4340,4341],{},"2.可以获取数组在内存中的首地址:",[26,4343,4345],{"className":617,"code":4344,"language":619,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[33,4346,4347,4352,4365,4370],{"__ignoreMap":31},[36,4348,4349],{"class":38,"line":39},[36,4350,4351],{"class":69},"\u002F\u002F查看16进制的首地址\n",[36,4353,4354,4356,4358,4361,4363],{"class":38,"line":66},[36,4355,1850],{"class":42},[36,4357,1657],{"class":46},[36,4359,4360],{"class":42},"arr",[36,4362,1657],{"class":46},[36,4364,1679],{"class":42},[36,4366,4367],{"class":38,"line":73},[36,4368,4369],{"class":69},"\u002F\u002F看10进制数\n",[36,4371,4372,4374,4376,4378,4380,4382,4384,4387,4389,4391,4393],{"class":38,"line":79},[36,4373,1850],{"class":42},[36,4375,1657],{"class":46},[36,4377,345],{"class":42},[36,4379,631],{"class":46},[36,4381,231],{"class":42},[36,4383,971],{"class":46},[36,4385,4386],{"class":42},"arr[",[36,4388,812],{"class":53},[36,4390,1553],{"class":42},[36,4392,1657],{"class":46},[36,4394,1679],{"class":42},[19,4396,4397],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1620,4399,4400],{},[582,4401,4402],{},"1️⃣五只小猪称体重",[26,4404,4406],{"className":617,"code":4405,"language":619,"meta":31,"style":31},"#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",[33,4407,4408,4414,4424,4432,4436,4476,4489,4515,4519,4531,4535,4545,4549,4553,4566,4576],{"__ignoreMap":31},[36,4409,4410,4412],{"class":38,"line":39},[36,4411,2429],{"class":46},[36,4413,2432],{"class":405},[36,4415,4416,4418,4420,4422],{"class":38,"line":66},[36,4417,2437],{"class":46},[36,4419,2440],{"class":46},[36,4421,2444],{"class":2443},[36,4423,1774],{"class":42},[36,4425,4426,4428,4430],{"class":38,"line":73},[36,4427,631],{"class":46},[36,4429,2453],{"class":2443},[36,4431,2456],{"class":42},[36,4433,4434],{"class":38,"line":79},[36,4435,2026],{"class":42},[36,4437,4438,4440,4443,4445,4447,4449,4451,4454,4456,4459,4461,4463,4465,4468,4470,4473],{"class":38,"line":85},[36,4439,2465],{"class":46},[36,4441,4442],{"class":42}," arr[",[36,4444,938],{"class":53},[36,4446,1553],{"class":42},[36,4448,47],{"class":46},[36,4450,1509],{"class":42},[36,4452,4453],{"class":53},"300",[36,4455,57],{"class":42},[36,4457,4458],{"class":53},"350",[36,4460,57],{"class":42},[36,4462,2202],{"class":53},[36,4464,57],{"class":42},[36,4466,4467],{"class":53},"400",[36,4469,57],{"class":42},[36,4471,4472],{"class":53},"250",[36,4474,4475],{"class":42},"};\n",[36,4477,4478,4480,4483,4485,4487],{"class":38,"line":419},[36,4479,2465],{"class":46},[36,4481,4482],{"class":42}," tmp",[36,4484,47],{"class":46},[36,4486,812],{"class":53},[36,4488,1774],{"class":42},[36,4490,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513],{"class":38,"line":425},[36,4492,3681],{"class":46},[36,4494,2138],{"class":42},[36,4496,631],{"class":46},[36,4498,3512],{"class":42},[36,4500,47],{"class":46},[36,4502,812],{"class":53},[36,4504,3519],{"class":42},[36,4506,1523],{"class":46},[36,4508,938],{"class":53},[36,4510,3519],{"class":42},[36,4512,2772],{"class":46},[36,4514,63],{"class":42},[36,4516,4517],{"class":38,"line":431},[36,4518,2510],{"class":42},[36,4520,4521,4523,4526,4528],{"class":38,"line":437},[36,4522,2977],{"class":46},[36,4524,4525],{"class":42},"(tmp",[36,4527,1523],{"class":46},[36,4529,4530],{"class":42},"arr[i])\n",[36,4532,4533],{"class":38,"line":443},[36,4534,2990],{"class":42},[36,4536,4537,4540,4542],{"class":38,"line":2092},[36,4538,4539],{"class":42},"            tmp",[36,4541,47],{"class":46},[36,4543,4544],{"class":42},"arr[i];\n",[36,4546,4547],{"class":38,"line":2097},[36,4548,3009],{"class":42},[36,4550,4551],{"class":38,"line":2103},[36,4552,2667],{"class":42},[36,4554,4555,4557,4559,4562,4564],{"class":38,"line":2108},[36,4556,2031],{"class":42},[36,4558,1657],{"class":46},[36,4560,4561],{"class":42},"tmp",[36,4563,1657],{"class":46},[36,4565,1679],{"class":42},[36,4567,4568,4571,4574],{"class":38,"line":2122},[36,4569,4570],{"class":46},"    return",[36,4572,4573],{"class":53}," 0",[36,4575,1774],{"class":42},[36,4577,4578],{"class":38,"line":2127},[36,4579,2045],{"class":42},[1620,4581,4582],{},[582,4583,4584],{},"2️⃣数组元素逆置",[26,4586,4588],{"className":617,"code":4587,"language":619,"meta":31,"style":31},"\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",[33,4589,4590,4595,4601,4611,4619,4623,4658,4674,4706,4719,4724,4729,4741,4751,4761,4766,4775,4785,4790,4795,4822,4826,4842,4846,4857,4866],{"__ignoreMap":31},[36,4591,4592],{"class":38,"line":39},[36,4593,4594],{"class":69},"\u002F\u002F元素逆置\n",[36,4596,4597,4599],{"class":38,"line":66},[36,4598,2429],{"class":46},[36,4600,2432],{"class":405},[36,4602,4603,4605,4607,4609],{"class":38,"line":73},[36,4604,2437],{"class":46},[36,4606,2440],{"class":46},[36,4608,2444],{"class":2443},[36,4610,1774],{"class":42},[36,4612,4613,4615,4617],{"class":38,"line":79},[36,4614,631],{"class":46},[36,4616,2453],{"class":2443},[36,4618,2456],{"class":42},[36,4620,4621],{"class":38,"line":85},[36,4622,2026],{"class":42},[36,4624,4625,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656],{"class":38,"line":419},[36,4626,4627],{"class":46},"   int",[36,4629,4442],{"class":42},[36,4631,938],{"class":53},[36,4633,1553],{"class":42},[36,4635,47],{"class":46},[36,4637,1509],{"class":42},[36,4639,54],{"class":53},[36,4641,57],{"class":42},[36,4643,96],{"class":53},[36,4645,57],{"class":42},[36,4647,127],{"class":53},[36,4649,57],{"class":42},[36,4651,912],{"class":53},[36,4653,57],{"class":42},[36,4655,938],{"class":53},[36,4657,4475],{"class":42},[36,4659,4660,4662,4665,4667,4669,4671],{"class":38,"line":425},[36,4661,4627],{"class":46},[36,4663,4664],{"class":42}," start",[36,4666,47],{"class":46},[36,4668,812],{"class":53},[36,4670,680],{"class":42},[36,4672,4673],{"class":69},"\u002F\u002F起始下标\n",[36,4675,4676,4678,4681,4684,4687,4690,4692,4694,4697,4699,4701,4703],{"class":38,"line":431},[36,4677,4627],{"class":46},[36,4679,4680],{"class":42}," end",[36,4682,4683],{"class":46},"=sizeof",[36,4685,4686],{"class":42},"(arr)",[36,4688,4689],{"class":46},"\u002Fsizeof",[36,4691,4331],{"class":42},[36,4693,812],{"class":53},[36,4695,4696],{"class":42},"])",[36,4698,173],{"class":46},[36,4700,54],{"class":53},[36,4702,680],{"class":42},[36,4704,4705],{"class":69},"\u002F\u002F结束下标\n",[36,4707,4708,4711,4714,4716],{"class":38,"line":437},[36,4709,4710],{"class":46},"   while",[36,4712,4713],{"class":42}," (start",[36,4715,1523],{"class":46},[36,4717,4718],{"class":42},"end)\n",[36,4720,4721],{"class":38,"line":443},[36,4722,4723],{"class":42},"   {\n",[36,4725,4726],{"class":38,"line":2092},[36,4727,4728],{"class":69},"    \u002F\u002F实现元素互换代码\n",[36,4730,4731,4733,4736,4738],{"class":38,"line":2097},[36,4732,2465],{"class":46},[36,4734,4735],{"class":42}," temp",[36,4737,47],{"class":46},[36,4739,4740],{"class":42},"arr[start];\n",[36,4742,4743,4746,4748],{"class":38,"line":2103},[36,4744,4745],{"class":42},"    arr[start]",[36,4747,47],{"class":46},[36,4749,4750],{"class":42},"arr[end];\n",[36,4752,4753,4756,4758],{"class":38,"line":2108},[36,4754,4755],{"class":42},"    arr[end]",[36,4757,47],{"class":46},[36,4759,4760],{"class":42},"temp;\n",[36,4762,4763],{"class":38,"line":2122},[36,4764,4765],{"class":69},"    \u002F\u002F下标更新\n",[36,4767,4768,4771,4773],{"class":38,"line":2127},[36,4769,4770],{"class":42},"    start",[36,4772,2772],{"class":46},[36,4774,1774],{"class":42},[36,4776,4777,4780,4783],{"class":38,"line":2133},[36,4778,4779],{"class":42},"    end",[36,4781,4782],{"class":46},"--",[36,4784,1774],{"class":42},[36,4786,4787],{"class":38,"line":2154},[36,4788,4789],{"class":42},"   }\n",[36,4791,4792],{"class":38,"line":2159},[36,4793,4794],{"class":69},"   \u002F\u002F输出逆置后的数组\n",[36,4796,4797,4800,4802,4804,4806,4808,4810,4812,4814,4816,4818,4820],{"class":38,"line":2173},[36,4798,4799],{"class":46},"   for",[36,4801,2138],{"class":42},[36,4803,631],{"class":46},[36,4805,3512],{"class":42},[36,4807,47],{"class":46},[36,4809,812],{"class":53},[36,4811,3519],{"class":42},[36,4813,1523],{"class":46},[36,4815,938],{"class":53},[36,4817,3519],{"class":42},[36,4819,2772],{"class":46},[36,4821,63],{"class":42},[36,4823,4824],{"class":38,"line":2178},[36,4825,4723],{"class":42},[36,4827,4828,4830,4832,4835,4837,4840],{"class":38,"line":2207},[36,4829,2031],{"class":42},[36,4831,1657],{"class":46},[36,4833,4834],{"class":42},"arr[i]",[36,4836,1657],{"class":46},[36,4838,4839],{"class":405},"\" \"",[36,4841,1774],{"class":42},[36,4843,4844],{"class":38,"line":2212},[36,4845,4789],{"class":42},[36,4847,4848,4851,4853,4855],{"class":38,"line":2229},[36,4849,4850],{"class":2443},"   system",[36,4852,345],{"class":42},[36,4854,2788],{"class":405},[36,4856,3199],{"class":42},[36,4858,4859,4862,4864],{"class":38,"line":2234},[36,4860,4861],{"class":46},"   return",[36,4863,4573],{"class":53},[36,4865,1774],{"class":42},[36,4867,4868],{"class":38,"line":2239},[36,4869,2045],{"class":42},[1620,4871,4872],{},[582,4873,4874],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,4876,4878],{"className":617,"code":4877,"language":619,"meta":31,"style":31},"\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",[33,4879,4880,4885,4891,4901,4909,4913,4965,4978,5004,5008,5022,5026,5031,5036,5066,5070,5075,5109,5113,5118,5138,5143,5155,5171,5186,5191,5195,5199,5212,5238,5242,5256,5260,5268],{"__ignoreMap":31},[36,4881,4882],{"class":38,"line":39},[36,4883,4884],{"class":69},"\u002F\u002F冒泡排序,升序\n",[36,4886,4887,4889],{"class":38,"line":66},[36,4888,2429],{"class":46},[36,4890,2432],{"class":405},[36,4892,4893,4895,4897,4899],{"class":38,"line":73},[36,4894,2437],{"class":46},[36,4896,2440],{"class":46},[36,4898,2444],{"class":2443},[36,4900,1774],{"class":42},[36,4902,4903,4905,4907],{"class":38,"line":79},[36,4904,631],{"class":46},[36,4906,2453],{"class":2443},[36,4908,2456],{"class":42},[36,4910,4911],{"class":38,"line":85},[36,4912,2026],{"class":42},[36,4914,4915,4917,4919,4921,4924,4926,4929,4931,4933,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953,4955,4957,4959,4961,4963],{"class":38,"line":419},[36,4916,2465],{"class":46},[36,4918,4442],{"class":42},[36,4920,1037],{"class":53},[36,4922,4923],{"class":42},"] ",[36,4925,47],{"class":46},[36,4927,4928],{"class":42}," {",[36,4930,912],{"class":53},[36,4932,57],{"class":42},[36,4934,96],{"class":53},[36,4936,57],{"class":42},[36,4938,1012],{"class":53},[36,4940,57],{"class":42},[36,4942,812],{"class":53},[36,4944,57],{"class":42},[36,4946,938],{"class":53},[36,4948,57],{"class":42},[36,4950,987],{"class":53},[36,4952,57],{"class":42},[36,4954,54],{"class":53},[36,4956,57],{"class":42},[36,4958,127],{"class":53},[36,4960,57],{"class":42},[36,4962,1037],{"class":53},[36,4964,4475],{"class":42},[36,4966,4967,4969,4971,4974,4976],{"class":38,"line":425},[36,4968,2031],{"class":42},[36,4970,1657],{"class":46},[36,4972,4973],{"class":405},"\"排序前：\"",[36,4975,1657],{"class":46},[36,4977,1679],{"class":42},[36,4979,4980,4982,4984,4986,4988,4990,4992,4994,4996,4998,5000,5002],{"class":38,"line":431},[36,4981,3681],{"class":46},[36,4983,2138],{"class":42},[36,4985,631],{"class":46},[36,4987,3512],{"class":42},[36,4989,47],{"class":46},[36,4991,812],{"class":53},[36,4993,3519],{"class":42},[36,4995,1523],{"class":46},[36,4997,1037],{"class":53},[36,4999,3519],{"class":42},[36,5001,2772],{"class":46},[36,5003,63],{"class":42},[36,5005,5006],{"class":38,"line":437},[36,5007,2510],{"class":42},[36,5009,5010,5012,5014,5016,5018,5020],{"class":38,"line":443},[36,5011,3931],{"class":42},[36,5013,1657],{"class":46},[36,5015,4834],{"class":42},[36,5017,1657],{"class":46},[36,5019,4839],{"class":405},[36,5021,1774],{"class":42},[36,5023,5024],{"class":38,"line":2092},[36,5025,2667],{"class":42},[36,5027,5028],{"class":38,"line":2097},[36,5029,5030],{"class":69},"    \u002F\u002F开始冒泡排序\n",[36,5032,5033],{"class":38,"line":2103},[36,5034,5035],{"class":69},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,5037,5038,5040,5042,5044,5046,5048,5050,5052,5054,5056,5058,5060,5062,5064],{"class":38,"line":2108},[36,5039,3681],{"class":46},[36,5041,2138],{"class":42},[36,5043,631],{"class":46},[36,5045,3512],{"class":42},[36,5047,47],{"class":46},[36,5049,812],{"class":53},[36,5051,3519],{"class":42},[36,5053,1523],{"class":46},[36,5055,1037],{"class":53},[36,5057,173],{"class":46},[36,5059,54],{"class":53},[36,5061,3519],{"class":42},[36,5063,2772],{"class":46},[36,5065,63],{"class":42},[36,5067,5068],{"class":38,"line":2122},[36,5069,2510],{"class":42},[36,5071,5072],{"class":38,"line":2127},[36,5073,5074],{"class":69},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,5076,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101,5103,5105,5107],{"class":38,"line":2133},[36,5078,3883],{"class":46},[36,5080,2138],{"class":42},[36,5082,631],{"class":46},[36,5084,3890],{"class":42},[36,5086,47],{"class":46},[36,5088,812],{"class":53},[36,5090,3897],{"class":42},[36,5092,1523],{"class":46},[36,5094,1037],{"class":53},[36,5096,173],{"class":46},[36,5098,1057],{"class":42},[36,5100,173],{"class":46},[36,5102,54],{"class":53},[36,5104,3897],{"class":42},[36,5106,2772],{"class":46},[36,5108,63],{"class":42},[36,5110,5111],{"class":38,"line":2154},[36,5112,2990],{"class":42},[36,5114,5115],{"class":38,"line":2159},[36,5116,5117],{"class":69},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,5119,5120,5123,5126,5128,5131,5133,5135],{"class":38,"line":2173},[36,5121,5122],{"class":46},"            if",[36,5124,5125],{"class":42},"(arr[j]",[36,5127,1573],{"class":46},[36,5129,5130],{"class":42},"arr[j",[36,5132,1097],{"class":46},[36,5134,54],{"class":53},[36,5136,5137],{"class":42},"])\n",[36,5139,5140],{"class":38,"line":2178},[36,5141,5142],{"class":42},"            {\n",[36,5144,5145,5148,5150,5152],{"class":38,"line":2207},[36,5146,5147],{"class":46},"                int",[36,5149,4735],{"class":42},[36,5151,47],{"class":46},[36,5153,5154],{"class":42},"arr[j];\n",[36,5156,5157,5160,5162,5164,5166,5168],{"class":38,"line":2212},[36,5158,5159],{"class":42},"                arr[j]",[36,5161,47],{"class":46},[36,5163,5130],{"class":42},[36,5165,1097],{"class":46},[36,5167,54],{"class":53},[36,5169,5170],{"class":42},"];\n",[36,5172,5173,5176,5178,5180,5182,5184],{"class":38,"line":2229},[36,5174,5175],{"class":42},"                arr[j",[36,5177,1097],{"class":46},[36,5179,54],{"class":53},[36,5181,1553],{"class":42},[36,5183,47],{"class":46},[36,5185,4760],{"class":42},[36,5187,5188],{"class":38,"line":2234},[36,5189,5190],{"class":42},"            }\n",[36,5192,5193],{"class":38,"line":2239},[36,5194,3009],{"class":42},[36,5196,5197],{"class":38,"line":2244},[36,5198,2667],{"class":42},[36,5200,5201,5203,5205,5208,5210],{"class":38,"line":2258},[36,5202,2031],{"class":42},[36,5204,1657],{"class":46},[36,5206,5207],{"class":405},"\"排序后：\"",[36,5209,1657],{"class":46},[36,5211,1679],{"class":42},[36,5213,5214,5216,5218,5220,5222,5224,5226,5228,5230,5232,5234,5236],{"class":38,"line":2263},[36,5215,3681],{"class":46},[36,5217,2138],{"class":42},[36,5219,631],{"class":46},[36,5221,3512],{"class":42},[36,5223,47],{"class":46},[36,5225,812],{"class":53},[36,5227,3519],{"class":42},[36,5229,1523],{"class":46},[36,5231,1037],{"class":53},[36,5233,3519],{"class":42},[36,5235,2772],{"class":46},[36,5237,63],{"class":42},[36,5239,5240],{"class":38,"line":3057},[36,5241,2510],{"class":42},[36,5243,5244,5246,5248,5250,5252,5254],{"class":38,"line":3071},[36,5245,3931],{"class":42},[36,5247,1657],{"class":46},[36,5249,4834],{"class":42},[36,5251,1657],{"class":46},[36,5253,4839],{"class":405},[36,5255,1774],{"class":42},[36,5257,5258],{"class":38,"line":3079},[36,5259,2667],{"class":42},[36,5261,5262,5264,5266],{"class":38,"line":3084},[36,5263,4570],{"class":46},[36,5265,4573],{"class":53},[36,5267,1774],{"class":42},[36,5269,5270],{"class":38,"line":3090},[36,5271,2045],{"class":42},[596,5273,5275],{"id":5274},"_172二维数组","1.7.2二维数组",[579,5277,5278],{},[582,5279,5280],{},"二维数组的四种定义方式",[758,5282,5283,5292],{},[761,5284,5285],{},[764,5286,5287,5290],{},[767,5288,5289],{},"序号",[767,5291,4261],{},[805,5293,5294,5304,5313,5322,5331],{},[764,5295,5296,5298],{},[810,5297,54],{},[810,5299,5300,5301,680],{},"数据类型 数组名[行数]",[36,5302,5303],{},"列数",[764,5305,5306,5308],{},[810,5307,96],{},[810,5309,5300,5310,5312],{},[36,5311,5303],{},"={ {数据1,数据2}，{数据3，数据4}... }",[764,5314,5315,5317],{},[810,5316,127],{},[810,5318,5300,5319,5321],{},[36,5320,5303],{},"={数据1,数据2,数据3...}",[764,5323,5324,5326],{},[810,5325,912],{},[810,5327,5328,5329,5321],{},"数据类型 数组名[]",[36,5330,5303],{},[764,5332,5333,5336],{},[810,5334,5335],{},"注意：不能只省略列数",[810,5337],{},[579,5339,5340],{"start":66},[582,5341,5342],{},"二维数组数组名",[1620,5344,5345,5348],{},[582,5346,5347],{},"1.查看二维数组所占内存空间",[582,5349,5350],{},"2.获取二维数组首地址",[19,5352,5353],{},"已知二维数组，求二维数组的行数与列数",[26,5355,5357],{"className":617,"code":5356,"language":619,"meta":31,"style":31},"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",[33,5358,5359,5367,5371,5389,5393,5411,5427,5432,5457,5490],{"__ignoreMap":31},[36,5360,5361,5363,5365],{"class":38,"line":39},[36,5362,631],{"class":46},[36,5364,2453],{"class":2443},[36,5366,2456],{"class":42},[36,5368,5369],{"class":38,"line":66},[36,5370,2026],{"class":42},[36,5372,5373,5375,5377,5379,5382,5384,5386],{"class":38,"line":73},[36,5374,2465],{"class":46},[36,5376,4442],{"class":42},[36,5378,96],{"class":53},[36,5380,5381],{"class":42},"][",[36,5383,127],{"class":53},[36,5385,1553],{"class":42},[36,5387,5388],{"class":46},"=\n",[36,5390,5391],{"class":38,"line":79},[36,5392,2510],{"class":42},[36,5394,5395,5398,5400,5402,5404,5406,5408],{"class":38,"line":85},[36,5396,5397],{"class":42},"        {",[36,5399,54],{"class":53},[36,5401,57],{"class":42},[36,5403,96],{"class":53},[36,5405,57],{"class":42},[36,5407,127],{"class":53},[36,5409,5410],{"class":42},"},\n",[36,5412,5413,5415,5417,5419,5421,5423,5425],{"class":38,"line":419},[36,5414,5397],{"class":42},[36,5416,912],{"class":53},[36,5418,57],{"class":42},[36,5420,938],{"class":53},[36,5422,57],{"class":42},[36,5424,101],{"class":53},[36,5426,2045],{"class":42},[36,5428,5429],{"class":38,"line":425},[36,5430,5431],{"class":42},"    };\n",[36,5433,5434,5436,5438,5441,5443,5445,5447,5449,5451,5453,5455],{"class":38,"line":431},[36,5435,2031],{"class":42},[36,5437,1657],{"class":46},[36,5439,5440],{"class":405},"\"二维数组的行数\"",[36,5442,1853],{"class":46},[36,5444,4686],{"class":42},[36,5446,4689],{"class":46},[36,5448,4331],{"class":42},[36,5450,812],{"class":53},[36,5452,4696],{"class":42},[36,5454,1657],{"class":46},[36,5456,1679],{"class":42},[36,5458,5459,5461,5463,5466,5468,5470,5472,5474,5476,5478,5480,5482,5484,5486,5488],{"class":38,"line":437},[36,5460,2031],{"class":42},[36,5462,1657],{"class":46},[36,5464,5465],{"class":405},"\"二维数组的列数\"",[36,5467,1853],{"class":46},[36,5469,4331],{"class":42},[36,5471,812],{"class":53},[36,5473,4696],{"class":42},[36,5475,4689],{"class":46},[36,5477,4331],{"class":42},[36,5479,812],{"class":53},[36,5481,5381],{"class":42},[36,5483,812],{"class":53},[36,5485,4696],{"class":42},[36,5487,1657],{"class":46},[36,5489,1679],{"class":42},[36,5491,5492],{"class":38,"line":443},[36,5493,2045],{"class":42},[19,5495,5496],{},"查看二维数组首地址",[26,5498,5500],{"className":617,"code":5499,"language":619,"meta":31,"style":31},"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",[33,5501,5502,5519,5545,5570],{"__ignoreMap":31},[36,5503,5504,5506,5508,5511,5513,5515,5517],{"class":38,"line":39},[36,5505,1850],{"class":42},[36,5507,1657],{"class":46},[36,5509,5510],{"class":405},"\"二维数组首地址：\"",[36,5512,1657],{"class":46},[36,5514,4360],{"class":42},[36,5516,1657],{"class":46},[36,5518,1679],{"class":42},[36,5520,5521,5523,5525,5528,5530,5532,5534,5537,5539,5541,5543],{"class":38,"line":66},[36,5522,1850],{"class":42},[36,5524,1657],{"class":46},[36,5526,5527],{"class":405},"\"二维数组第一行的首地址：\"",[36,5529,1657],{"class":46},[36,5531,345],{"class":42},[36,5533,631],{"class":46},[36,5535,5536],{"class":42},")arr[",[36,5538,812],{"class":53},[36,5540,1553],{"class":42},[36,5542,1657],{"class":46},[36,5544,1679],{"class":42},[36,5546,5547,5549,5551,5554,5556,5558,5560,5562,5564,5566,5568],{"class":38,"line":73},[36,5548,1850],{"class":42},[36,5550,1657],{"class":46},[36,5552,5553],{"class":405},"\"二维数组第二行的首地址：\"",[36,5555,1657],{"class":46},[36,5557,345],{"class":42},[36,5559,631],{"class":46},[36,5561,5536],{"class":42},[36,5563,54],{"class":53},[36,5565,1553],{"class":42},[36,5567,1657],{"class":46},[36,5569,1679],{"class":42},[36,5571,5572,5574,5576,5579,5581,5583,5585,5587,5589,5591,5593,5595,5597,5599,5601,5603],{"class":38,"line":79},[36,5573,1850],{"class":42},[36,5575,1657],{"class":46},[36,5577,5578],{"class":405},"\"二维数组第一个元素的首地址:\"",[36,5580,1657],{"class":46},[36,5582,345],{"class":42},[36,5584,631],{"class":46},[36,5586,231],{"class":42},[36,5588,971],{"class":46},[36,5590,4386],{"class":42},[36,5592,812],{"class":53},[36,5594,5381],{"class":42},[36,5596,812],{"class":53},[36,5598,1553],{"class":42},[36,5600,1657],{"class":46},[36,5602,1722],{"class":42},[36,5604,5605],{"class":69},"\u002F\u002F对于数，要加取址符\n",[539,5607,5608],{},"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":31,"searchDepth":66,"depth":66,"links":5610},[5611,5612,5613,5621,5622,5628,5633],{"id":569,"depth":66,"text":570},{"id":576,"depth":66,"text":577},{"id":593,"depth":66,"text":594,"children":5614},[5615,5616,5617,5618,5619,5620],{"id":598,"depth":73,"text":599},{"id":643,"depth":73,"text":644},{"id":707,"depth":73,"text":708},{"id":1638,"depth":73,"text":1639},{"id":1728,"depth":73,"text":1729},{"id":1824,"depth":73,"text":1825},{"id":1866,"depth":66,"text":1867},{"id":1934,"depth":66,"text":1935,"children":5623},[5624,5625,5626,5627],{"id":1938,"depth":73,"text":1939},{"id":1959,"depth":73,"text":1960},{"id":1968,"depth":73,"text":1969},{"id":1977,"depth":73,"text":1978},{"id":1986,"depth":66,"text":1987,"children":5629},[5630,5631,5632],{"id":1990,"depth":73,"text":1991},{"id":2685,"depth":73,"text":2686},{"id":4101,"depth":73,"text":4102},{"id":4242,"depth":66,"text":4243,"children":5634},[5635,5636],{"id":4246,"depth":73,"text":4247},{"id":5274,"depth":73,"text":5275},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":561,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5643,"title":5644,"body":5645,"description":31,"extension":551,"meta":6745,"navigation":553,"path":6746,"seo":6747,"stem":6748,"__hash__":6749},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5646,"toc":6737},[5647,5650,5654,5662,5670,5673,5739,5743,5746,5822,5826,5829,5832,5835,6048,6052,6057,6121,6126,6193,6198,6289,6292,6397,6401,6404,6410,6554,6558,6561,6575,6578,6623,6626,6734],[10,5648,5644],{"id":5649},"_2函数",[14,5651,5653],{"id":5652},"_21函数概述","2.1函数概述",[579,5655,5656,5659],{},[582,5657,5658],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[582,5660,5661],{},"语法：",[26,5663,5668],{"className":5664,"code":5666,"language":5667,"meta":31},[5665],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[33,5669,5666],{"__ignoreMap":31},[19,5671,5672],{},"小案例",[26,5674,5676],{"className":617,"code":5675,"language":619,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[33,5677,5678,5683,5707,5711,5728,5735],{"__ignoreMap":31},[36,5679,5680],{"class":38,"line":39},[36,5681,5682],{"class":69},"\u002F\u002Fnum1,num2形参\n",[36,5684,5685,5687,5690,5692,5694,5698,5700,5702,5705],{"class":38,"line":66},[36,5686,631],{"class":46},[36,5688,5689],{"class":2443}," add",[36,5691,345],{"class":42},[36,5693,631],{"class":46},[36,5695,5697],{"class":5696},"s4XuR"," num1",[36,5699,57],{"class":42},[36,5701,631],{"class":46},[36,5703,5704],{"class":5696}," num2",[36,5706,63],{"class":42},[36,5708,5709],{"class":38,"line":73},[36,5710,2026],{"class":42},[36,5712,5713,5715,5718,5720,5723,5725],{"class":38,"line":79},[36,5714,2465],{"class":46},[36,5716,5717],{"class":42}," sum",[36,5719,47],{"class":46},[36,5721,5722],{"class":42},"num1",[36,5724,1097],{"class":46},[36,5726,5727],{"class":42},"num2;\n",[36,5729,5730,5732],{"class":38,"line":85},[36,5731,4570],{"class":46},[36,5733,5734],{"class":42}," sum;\n",[36,5736,5737],{"class":38,"line":419},[36,5738,2045],{"class":42},[14,5740,5742],{"id":5741},"_22函数调用","2.2函数调用",[19,5744,5745],{},"调用刚刚写的求和函数",[26,5747,5749],{"className":617,"code":5748,"language":619,"meta":31,"style":31},"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",[33,5750,5751,5759,5763,5768,5780,5792,5801,5806,5818],{"__ignoreMap":31},[36,5752,5753,5755,5757],{"class":38,"line":39},[36,5754,631],{"class":46},[36,5756,2453],{"class":2443},[36,5758,2456],{"class":42},[36,5760,5761],{"class":38,"line":66},[36,5762,2026],{"class":42},[36,5764,5765],{"class":38,"line":73},[36,5766,5767],{"class":69},"    \u002F\u002Fa,b实参\n",[36,5769,5770,5772,5774,5776,5778],{"class":38,"line":79},[36,5771,2465],{"class":46},[36,5773,1879],{"class":42},[36,5775,47],{"class":46},[36,5777,812],{"class":53},[36,5779,1774],{"class":42},[36,5781,5782,5784,5786,5788,5790],{"class":38,"line":85},[36,5783,2465],{"class":46},[36,5785,3313],{"class":42},[36,5787,47],{"class":46},[36,5789,812],{"class":53},[36,5791,1774],{"class":42},[36,5793,5794,5796,5798],{"class":38,"line":419},[36,5795,2492],{"class":42},[36,5797,1910],{"class":46},[36,5799,5800],{"class":42},"a,b;\n",[36,5802,5803],{"class":38,"line":425},[36,5804,5805],{"class":69},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,5807,5808,5810,5812,5815],{"class":38,"line":431},[36,5809,2031],{"class":42},[36,5811,1657],{"class":46},[36,5813,5814],{"class":2443},"add",[36,5816,5817],{"class":42},"(a,b);\n",[36,5819,5820],{"class":38,"line":437},[36,5821,2045],{"class":42},[14,5823,5825],{"id":5824},"_23值传递","2.3值传递",[19,5827,5828],{},"值传递就是函数调用时实参将数值传给形参",[19,5830,5831],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5833,5834],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,5836,5838],{"className":617,"code":5837,"language":619,"meta":31,"style":31},"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",[33,5839,5840,5862,5866,5879,5896,5914,5925,5934,5943,5956,5972,5988,5997,6001,6009,6013,6025,6037,6044],{"__ignoreMap":31},[36,5841,5842,5845,5848,5850,5852,5854,5856,5858,5860],{"class":38,"line":39},[36,5843,5844],{"class":46},"void",[36,5846,5847],{"class":2443}," swap",[36,5849,345],{"class":42},[36,5851,631],{"class":46},[36,5853,5697],{"class":5696},[36,5855,57],{"class":42},[36,5857,631],{"class":46},[36,5859,5704],{"class":5696},[36,5861,63],{"class":42},[36,5863,5864],{"class":38,"line":66},[36,5865,2026],{"class":42},[36,5867,5868,5870,5872,5875,5877],{"class":38,"line":73},[36,5869,2031],{"class":42},[36,5871,1657],{"class":46},[36,5873,5874],{"class":405},"\"交换前：\"",[36,5876,1657],{"class":46},[36,5878,1679],{"class":42},[36,5880,5881,5883,5885,5888,5890,5892,5894],{"class":38,"line":79},[36,5882,2031],{"class":42},[36,5884,1657],{"class":46},[36,5886,5887],{"class":405},"\"num1=\"",[36,5889,1657],{"class":46},[36,5891,5722],{"class":42},[36,5893,1657],{"class":46},[36,5895,1679],{"class":42},[36,5897,5898,5900,5902,5905,5907,5910,5912],{"class":38,"line":85},[36,5899,2031],{"class":42},[36,5901,1657],{"class":46},[36,5903,5904],{"class":405},"\"num2=\"",[36,5906,1657],{"class":46},[36,5908,5909],{"class":42},"num2",[36,5911,1657],{"class":46},[36,5913,1679],{"class":42},[36,5915,5916,5918,5920,5922],{"class":38,"line":419},[36,5917,2465],{"class":46},[36,5919,4735],{"class":42},[36,5921,47],{"class":46},[36,5923,5924],{"class":42},"num1;\n",[36,5926,5927,5930,5932],{"class":38,"line":425},[36,5928,5929],{"class":42},"    num1",[36,5931,47],{"class":46},[36,5933,5727],{"class":42},[36,5935,5936,5939,5941],{"class":38,"line":431},[36,5937,5938],{"class":42},"    num2",[36,5940,47],{"class":46},[36,5942,4760],{"class":42},[36,5944,5945,5947,5949,5952,5954],{"class":38,"line":437},[36,5946,2031],{"class":42},[36,5948,1657],{"class":46},[36,5950,5951],{"class":405},"\"交换后：\"",[36,5953,1657],{"class":46},[36,5955,1679],{"class":42},[36,5957,5958,5960,5962,5964,5966,5968,5970],{"class":38,"line":443},[36,5959,2031],{"class":42},[36,5961,1657],{"class":46},[36,5963,5887],{"class":405},[36,5965,1657],{"class":46},[36,5967,5722],{"class":42},[36,5969,1657],{"class":46},[36,5971,1679],{"class":42},[36,5973,5974,5976,5978,5980,5982,5984,5986],{"class":38,"line":2092},[36,5975,2031],{"class":42},[36,5977,1657],{"class":46},[36,5979,5904],{"class":405},[36,5981,1657],{"class":46},[36,5983,5909],{"class":42},[36,5985,1657],{"class":46},[36,5987,1679],{"class":42},[36,5989,5990,5992,5994],{"class":38,"line":2097},[36,5991,4570],{"class":46},[36,5993,680],{"class":42},[36,5995,5996],{"class":69},"\u002F\u002F或者不写\n",[36,5998,5999],{"class":38,"line":2103},[36,6000,2045],{"class":42},[36,6002,6003,6005,6007],{"class":38,"line":2108},[36,6004,631],{"class":46},[36,6006,2453],{"class":2443},[36,6008,2456],{"class":42},[36,6010,6011],{"class":38,"line":2122},[36,6012,2026],{"class":42},[36,6014,6015,6017,6019,6021,6023],{"class":38,"line":2127},[36,6016,2465],{"class":46},[36,6018,1879],{"class":42},[36,6020,47],{"class":46},[36,6022,1062],{"class":53},[36,6024,1774],{"class":42},[36,6026,6027,6029,6031,6033,6035],{"class":38,"line":2133},[36,6028,2465],{"class":46},[36,6030,3313],{"class":42},[36,6032,47],{"class":46},[36,6034,1313],{"class":53},[36,6036,1774],{"class":42},[36,6038,6039,6042],{"class":38,"line":2154},[36,6040,6041],{"class":2443},"    swap",[36,6043,5817],{"class":42},[36,6045,6046],{"class":38,"line":2159},[36,6047,2045],{"class":42},[14,6049,6051],{"id":6050},"_24函数的常见形式","2.4函数的常见形式",[579,6053,6054],{},[582,6055,6056],{},"无参无返",[26,6058,6060],{"className":617,"code":6059,"language":619,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[33,6061,6062,6071,6075,6088,6092,6100,6104,6109,6117],{"__ignoreMap":31},[36,6063,6064,6066,6069],{"class":38,"line":39},[36,6065,5844],{"class":46},[36,6067,6068],{"class":2443}," test01",[36,6070,2456],{"class":42},[36,6072,6073],{"class":38,"line":66},[36,6074,2026],{"class":42},[36,6076,6077,6079,6081,6084,6086],{"class":38,"line":73},[36,6078,2031],{"class":42},[36,6080,1657],{"class":46},[36,6082,6083],{"class":405},"\"你好\"",[36,6085,1657],{"class":46},[36,6087,1679],{"class":42},[36,6089,6090],{"class":38,"line":79},[36,6091,2045],{"class":42},[36,6093,6094,6096,6098],{"class":38,"line":85},[36,6095,631],{"class":46},[36,6097,2453],{"class":2443},[36,6099,2456],{"class":42},[36,6101,6102],{"class":38,"line":419},[36,6103,2026],{"class":42},[36,6105,6106],{"class":38,"line":425},[36,6107,6108],{"class":69},"    \u002F\u002F函数调用\n",[36,6110,6111,6114],{"class":38,"line":431},[36,6112,6113],{"class":2443},"    test01",[36,6115,6116],{"class":42},"();\n",[36,6118,6119],{"class":38,"line":437},[36,6120,2045],{"class":42},[579,6122,6123],{"start":66},[582,6124,6125],{},"有参无返",[26,6127,6129],{"className":617,"code":6128,"language":619,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[33,6130,6131,6146,6150,6162,6166,6174,6178,6189],{"__ignoreMap":31},[36,6132,6133,6135,6138,6140,6142,6144],{"class":38,"line":39},[36,6134,5844],{"class":46},[36,6136,6137],{"class":2443}," test02",[36,6139,345],{"class":42},[36,6141,631],{"class":46},[36,6143,1879],{"class":5696},[36,6145,63],{"class":42},[36,6147,6148],{"class":38,"line":66},[36,6149,2026],{"class":42},[36,6151,6152,6154,6156,6158,6160],{"class":38,"line":73},[36,6153,2031],{"class":42},[36,6155,1657],{"class":46},[36,6157,6083],{"class":405},[36,6159,1657],{"class":46},[36,6161,1679],{"class":42},[36,6163,6164],{"class":38,"line":79},[36,6165,2045],{"class":42},[36,6167,6168,6170,6172],{"class":38,"line":85},[36,6169,631],{"class":46},[36,6171,2453],{"class":2443},[36,6173,2456],{"class":42},[36,6175,6176],{"class":38,"line":419},[36,6177,2026],{"class":42},[36,6179,6180,6183,6185,6187],{"class":38,"line":425},[36,6181,6182],{"class":2443},"    test02",[36,6184,345],{"class":42},[36,6186,930],{"class":53},[36,6188,3199],{"class":42},[36,6190,6191],{"class":38,"line":431},[36,6192,2045],{"class":42},[579,6194,6195],{"start":73},[582,6196,6197],{},"无参有返",[26,6199,6201],{"className":617,"code":6200,"language":619,"meta":31,"style":31},"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",[33,6202,6203,6212,6216,6228,6237,6241,6249,6253,6266,6285],{"__ignoreMap":31},[36,6204,6205,6207,6210],{"class":38,"line":39},[36,6206,631],{"class":46},[36,6208,6209],{"class":2443}," test03",[36,6211,2456],{"class":42},[36,6213,6214],{"class":38,"line":66},[36,6215,2026],{"class":42},[36,6217,6218,6220,6222,6224,6226],{"class":38,"line":73},[36,6219,2031],{"class":42},[36,6221,1657],{"class":46},[36,6223,6083],{"class":405},[36,6225,1657],{"class":46},[36,6227,1679],{"class":42},[36,6229,6230,6232,6235],{"class":38,"line":79},[36,6231,4570],{"class":46},[36,6233,6234],{"class":53}," 100",[36,6236,1774],{"class":42},[36,6238,6239],{"class":38,"line":85},[36,6240,2045],{"class":42},[36,6242,6243,6245,6247],{"class":38,"line":419},[36,6244,631],{"class":46},[36,6246,2453],{"class":2443},[36,6248,2456],{"class":42},[36,6250,6251],{"class":38,"line":425},[36,6252,2026],{"class":42},[36,6254,6255,6257,6259,6261,6264],{"class":38,"line":431},[36,6256,2465],{"class":46},[36,6258,5697],{"class":42},[36,6260,47],{"class":46},[36,6262,6263],{"class":2443},"test03",[36,6265,6116],{"class":42},[36,6267,6268,6270,6272,6274,6276,6278,6280,6282],{"class":38,"line":437},[36,6269,2031],{"class":42},[36,6271,1657],{"class":46},[36,6273,5887],{"class":405},[36,6275,1657],{"class":46},[36,6277,5722],{"class":42},[36,6279,1657],{"class":46},[36,6281,1722],{"class":42},[36,6283,6284],{"class":69}," \u002F\u002F100\n",[36,6286,6287],{"class":38,"line":443},[36,6288,2045],{"class":42},[19,6290,6291],{},"4.有参有返",[26,6293,6295],{"className":617,"code":6294,"language":619,"meta":31,"style":31},"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",[33,6296,6297,6312,6316,6329,6335,6339,6348,6352,6364,6378,6393],{"__ignoreMap":31},[36,6298,6299,6301,6304,6306,6308,6310],{"class":38,"line":39},[36,6300,631],{"class":46},[36,6302,6303],{"class":2443}," test04",[36,6305,345],{"class":42},[36,6307,631],{"class":46},[36,6309,1879],{"class":5696},[36,6311,63],{"class":42},[36,6313,6314],{"class":38,"line":66},[36,6315,2026],{"class":42},[36,6317,6318,6320,6322,6325,6327],{"class":38,"line":73},[36,6319,2031],{"class":42},[36,6321,1657],{"class":46},[36,6323,6324],{"class":405},"\"hello\"",[36,6326,1657],{"class":46},[36,6328,1679],{"class":42},[36,6330,6331,6333],{"class":38,"line":79},[36,6332,4570],{"class":46},[36,6334,1913],{"class":42},[36,6336,6337],{"class":38,"line":85},[36,6338,2045],{"class":42},[36,6340,6341,6343,6346],{"class":38,"line":419},[36,6342,631],{"class":46},[36,6344,6345],{"class":2443}," mian",[36,6347,2456],{"class":42},[36,6349,6350],{"class":38,"line":425},[36,6351,2026],{"class":42},[36,6353,6354,6356,6358,6360,6362],{"class":38,"line":431},[36,6355,2465],{"class":46},[36,6357,3313],{"class":42},[36,6359,47],{"class":46},[36,6361,54],{"class":53},[36,6363,1774],{"class":42},[36,6365,6366,6368,6370,6372,6375],{"class":38,"line":437},[36,6367,2465],{"class":46},[36,6369,3329],{"class":42},[36,6371,47],{"class":46},[36,6373,6374],{"class":2443},"test04",[36,6376,6377],{"class":42},"(b);\n",[36,6379,6380,6382,6384,6386,6388,6390],{"class":38,"line":443},[36,6381,2031],{"class":42},[36,6383,1657],{"class":46},[36,6385,907],{"class":42},[36,6387,1657],{"class":46},[36,6389,1722],{"class":42},[36,6391,6392],{"class":69}," \u002F\u002F1\n",[36,6394,6395],{"class":38,"line":2092},[36,6396,2045],{"class":42},[14,6398,6400],{"id":6399},"_25函数的声明","2.5函数的声明",[19,6402,6403],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6405,6406,6407],{},"函数的",[770,6408,6409],{},"声明可以多次，但是函数的定义只能有一次",[26,6411,6413],{"className":617,"code":6412,"language":619,"meta":31,"style":31},"\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",[33,6414,6415,6420,6425,6450,6459,6463,6475,6487,6503,6507,6527,6531,6550],{"__ignoreMap":31},[36,6416,6417],{"class":38,"line":39},[36,6418,6419],{"class":69},"\u002F\u002F函数声明\n",[36,6421,6422],{"class":38,"line":66},[36,6423,6424],{"class":69},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,6426,6427,6429,6432,6434,6436,6438,6440,6442,6444,6447],{"class":38,"line":73},[36,6428,631],{"class":46},[36,6430,6431],{"class":2443}," max",[36,6433,345],{"class":42},[36,6435,631],{"class":46},[36,6437,1879],{"class":5696},[36,6439,57],{"class":42},[36,6441,631],{"class":46},[36,6443,3313],{"class":5696},[36,6445,6446],{"class":42},");",[36,6448,6449],{"class":69},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,6451,6452,6454,6456],{"class":38,"line":79},[36,6453,631],{"class":46},[36,6455,2453],{"class":2443},[36,6457,6458],{"class":42},"() \n",[36,6460,6461],{"class":38,"line":85},[36,6462,2026],{"class":42},[36,6464,6465,6467,6469,6471,6473],{"class":38,"line":419},[36,6466,2465],{"class":46},[36,6468,1879],{"class":42},[36,6470,47],{"class":46},[36,6472,1062],{"class":53},[36,6474,1774],{"class":42},[36,6476,6477,6479,6481,6483,6485],{"class":38,"line":425},[36,6478,2465],{"class":46},[36,6480,3313],{"class":42},[36,6482,47],{"class":46},[36,6484,1313],{"class":53},[36,6486,1774],{"class":42},[36,6488,6489,6491,6493,6496,6499,6501],{"class":38,"line":431},[36,6490,2031],{"class":42},[36,6492,1657],{"class":46},[36,6494,6495],{"class":2443},"max",[36,6497,6498],{"class":42},"(a,b)",[36,6500,1657],{"class":46},[36,6502,1679],{"class":42},[36,6504,6505],{"class":38,"line":437},[36,6506,2045],{"class":42},[36,6508,6509,6511,6513,6515,6517,6519,6521,6523,6525],{"class":38,"line":443},[36,6510,631],{"class":46},[36,6512,6431],{"class":2443},[36,6514,345],{"class":42},[36,6516,631],{"class":46},[36,6518,1879],{"class":5696},[36,6520,57],{"class":42},[36,6522,631],{"class":46},[36,6524,3313],{"class":5696},[36,6526,63],{"class":42},[36,6528,6529],{"class":38,"line":2092},[36,6530,2026],{"class":42},[36,6532,6533,6535,6537,6539,6541,6543,6545,6547],{"class":38,"line":2097},[36,6534,4570],{"class":46},[36,6536,1879],{"class":42},[36,6538,1573],{"class":46},[36,6540,882],{"class":42},[36,6542,1599],{"class":46},[36,6544,43],{"class":42},[36,6546,1472],{"class":46},[36,6548,6549],{"class":42},"b;\n",[36,6551,6552],{"class":38,"line":2103},[36,6553,2045],{"class":42},[14,6555,6557],{"id":6556},"_26函数的分文件编写","2.6函数的分文件编写",[19,6559,6560],{},"4个步骤：",[1620,6562,6563,6566,6569,6572],{},[582,6564,6565],{},"1.创建后缀名为.h的头文件",[582,6567,6568],{},"2.创建后缀名为.cpp的源文件",[582,6570,6571],{},"3.在头文件中写函数的定义",[582,6573,6574],{},"4.在源文件中写函数的定义\n示例：",[19,6576,6577],{},"头文件：swap.h",[26,6579,6581],{"className":617,"code":6580,"language":619,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,6582,6583,6589,6599,6603],{"__ignoreMap":31},[36,6584,6585,6587],{"class":38,"line":39},[36,6586,2429],{"class":46},[36,6588,2432],{"class":405},[36,6590,6591,6593,6595,6597],{"class":38,"line":66},[36,6592,2437],{"class":46},[36,6594,2440],{"class":46},[36,6596,2444],{"class":2443},[36,6598,1774],{"class":42},[36,6600,6601],{"class":38,"line":73},[36,6602,6419],{"class":69},[36,6604,6605,6607,6609,6611,6613,6615,6617,6619,6621],{"class":38,"line":79},[36,6606,5844],{"class":46},[36,6608,5847],{"class":2443},[36,6610,345],{"class":42},[36,6612,631],{"class":46},[36,6614,1879],{"class":5696},[36,6616,57],{"class":42},[36,6618,631],{"class":46},[36,6620,3313],{"class":5696},[36,6622,3199],{"class":42},[19,6624,6625],{},"源文件：swap.cpp",[26,6627,6629],{"className":617,"code":6628,"language":619,"meta":31,"style":31},"#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",[33,6630,6631,6638,6643,6663,6667,6678,6687,6696,6713,6730],{"__ignoreMap":31},[36,6632,6633,6635],{"class":38,"line":39},[36,6634,2429],{"class":46},[36,6636,6637],{"class":405}," \"swap.h\"\n",[36,6639,6640],{"class":38,"line":66},[36,6641,6642],{"class":69},"\u002F\u002F函数的定义\n",[36,6644,6645,6647,6649,6651,6653,6655,6657,6659,6661],{"class":38,"line":73},[36,6646,5844],{"class":46},[36,6648,5847],{"class":2443},[36,6650,345],{"class":42},[36,6652,631],{"class":46},[36,6654,1879],{"class":5696},[36,6656,57],{"class":42},[36,6658,631],{"class":46},[36,6660,3313],{"class":5696},[36,6662,63],{"class":42},[36,6664,6665],{"class":38,"line":79},[36,6666,2026],{"class":42},[36,6668,6669,6671,6673,6675],{"class":38,"line":85},[36,6670,2465],{"class":46},[36,6672,4735],{"class":42},[36,6674,47],{"class":46},[36,6676,6677],{"class":42},"a;\n",[36,6679,6680,6683,6685],{"class":38,"line":419},[36,6681,6682],{"class":42},"    a",[36,6684,47],{"class":46},[36,6686,6549],{"class":42},[36,6688,6689,6692,6694],{"class":38,"line":425},[36,6690,6691],{"class":42},"    b",[36,6693,47],{"class":46},[36,6695,4760],{"class":42},[36,6697,6698,6700,6702,6705,6707,6709,6711],{"class":38,"line":431},[36,6699,2031],{"class":42},[36,6701,1657],{"class":46},[36,6703,6704],{"class":405},"\"a=\"",[36,6706,1657],{"class":46},[36,6708,43],{"class":42},[36,6710,1657],{"class":46},[36,6712,1679],{"class":42},[36,6714,6715,6717,6719,6722,6724,6726,6728],{"class":38,"line":437},[36,6716,2031],{"class":42},[36,6718,1657],{"class":46},[36,6720,6721],{"class":405},"\"b=\"",[36,6723,1657],{"class":46},[36,6725,882],{"class":42},[36,6727,1657],{"class":46},[36,6729,1679],{"class":42},[36,6731,6732],{"class":38,"line":443},[36,6733,2045],{"class":42},[539,6735,6736],{},"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":31,"searchDepth":66,"depth":66,"links":6738},[6739,6740,6741,6742,6743,6744],{"id":5652,"depth":66,"text":5653},{"id":5741,"depth":66,"text":5742},{"id":5824,"depth":66,"text":5825},{"id":6050,"depth":66,"text":6051},{"id":6399,"depth":66,"text":6400},{"id":6556,"depth":66,"text":6557},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5644,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6751,"title":6752,"body":6753,"description":6760,"extension":551,"meta":8165,"navigation":553,"path":8166,"seo":8167,"stem":8168,"__hash__":8169},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6754,"toc":8155},[6755,6758,6761,6765,6927,6931,6934,6937,6940,6943,7083,7087,7090,7093,7096,7161,7165,7170,7237,7240,7244,7247,7258,7263,7283,7286,7291,7310,7313,7317,7336,7339,7343,7578,7582,7585,7588,7591,7753,7756,7760,7763,7769,8152],[10,6756,6752],{"id":6757},"_3指针",[19,6759,6760],{},"通过指针保存一个地址，指针就是个地址",[14,6762,6764],{"id":6763},"_31定义指针","3.1定义指针",[26,6766,6768],{"className":617,"code":6767,"language":619,"meta":31,"style":31},"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",[33,6769,6770,6778,6782,6787,6799,6804,6812,6822,6840,6860,6864,6869,6874,6879,6893,6909,6923],{"__ignoreMap":31},[36,6771,6772,6774,6776],{"class":38,"line":39},[36,6773,631],{"class":46},[36,6775,2453],{"class":2443},[36,6777,2456],{"class":42},[36,6779,6780],{"class":38,"line":66},[36,6781,2026],{"class":42},[36,6783,6784],{"class":38,"line":73},[36,6785,6786],{"class":69},"    \u002F\u002F1.定义指针\n",[36,6788,6789,6791,6793,6795,6797],{"class":38,"line":79},[36,6790,2465],{"class":46},[36,6792,1879],{"class":42},[36,6794,47],{"class":46},[36,6796,1062],{"class":53},[36,6798,1774],{"class":42},[36,6800,6801],{"class":38,"line":85},[36,6802,6803],{"class":69},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,6805,6806,6809],{"class":38,"line":419},[36,6807,6808],{"class":46},"    int*",[36,6810,6811],{"class":42},"p;\n",[36,6813,6814,6817,6820],{"class":38,"line":425},[36,6815,6816],{"class":42},"    p",[36,6818,6819],{"class":46},"=&",[36,6821,6677],{"class":42},[36,6823,6824,6826,6828,6831,6834,6836,6838],{"class":38,"line":431},[36,6825,2031],{"class":42},[36,6827,1657],{"class":46},[36,6829,6830],{"class":405},"\"a的地址为：\"",[36,6832,6833],{"class":46},"\u003C\u003C&",[36,6835,43],{"class":42},[36,6837,1657],{"class":46},[36,6839,1679],{"class":42},[36,6841,6842,6844,6846,6849,6851,6853,6855,6857],{"class":38,"line":437},[36,6843,2031],{"class":42},[36,6845,1657],{"class":46},[36,6847,6848],{"class":405},"\"指针p为：\"",[36,6850,1657],{"class":46},[36,6852,19],{"class":42},[36,6854,1657],{"class":46},[36,6856,1722],{"class":42},[36,6858,6859],{"class":69},"\u002F\u002F指针p表示的就是a的地址\n",[36,6861,6862],{"class":38,"line":443},[36,6863,2880],{"emptyLinePlaceholder":553},[36,6865,6866],{"class":38,"line":2092},[36,6867,6868],{"class":69},"    \u002F\u002F2.使用指针\n",[36,6870,6871],{"class":38,"line":2097},[36,6872,6873],{"class":69},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,6875,6876],{"class":38,"line":2103},[36,6877,6878],{"class":69},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,6880,6881,6884,6886,6888,6891],{"class":38,"line":2108},[36,6882,6883],{"class":46},"    *",[36,6885,19],{"class":42},[36,6887,47],{"class":46},[36,6889,6890],{"class":53},"1000",[36,6892,1774],{"class":42},[36,6894,6895,6897,6900,6902,6904,6906],{"class":38,"line":2122},[36,6896,2031],{"class":42},[36,6898,6899],{"class":46},"\u003C\u003C*",[36,6901,19],{"class":42},[36,6903,1657],{"class":46},[36,6905,1722],{"class":42},[36,6907,6908],{"class":69},"\u002F\u002F1000\n",[36,6910,6911,6913,6915,6917,6919,6921],{"class":38,"line":2127},[36,6912,2031],{"class":42},[36,6914,1657],{"class":46},[36,6916,43],{"class":42},[36,6918,1657],{"class":46},[36,6920,1722],{"class":42},[36,6922,6908],{"class":69},[36,6924,6925],{"class":38,"line":2133},[36,6926,2045],{"class":42},[14,6928,6930],{"id":6929},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6932,6933],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6935,6936],{},"在32位操作系统下：占用4个字节空间",[19,6938,6939],{},"在64位操作系统下：占用8个字节空间",[19,6941,6942],{},"上方是不管啥数据类型的",[26,6944,6946],{"className":617,"code":6945,"language":619,"meta":31,"style":31},"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",[33,6947,6948,6956,6960,6965,6977,6982,6987,6992,7005,7027,7053,7079],{"__ignoreMap":31},[36,6949,6950,6952,6954],{"class":38,"line":39},[36,6951,631],{"class":46},[36,6953,2453],{"class":2443},[36,6955,2456],{"class":42},[36,6957,6958],{"class":38,"line":66},[36,6959,2026],{"class":42},[36,6961,6962],{"class":38,"line":73},[36,6963,6964],{"class":69},"    \u002F\u002F指针所占内存空间\n",[36,6966,6967,6969,6971,6973,6975],{"class":38,"line":79},[36,6968,2465],{"class":46},[36,6970,1879],{"class":42},[36,6972,47],{"class":46},[36,6974,1062],{"class":53},[36,6976,1774],{"class":42},[36,6978,6979],{"class":38,"line":85},[36,6980,6981],{"class":69},"    \u002F\u002Fint *p;\n",[36,6983,6984],{"class":38,"line":419},[36,6985,6986],{"class":69},"    \u002F\u002Fp=&a;\n",[36,6988,6989],{"class":38,"line":425},[36,6990,6991],{"class":69},"    \u002F\u002F上述可以写为以下：\n",[36,6993,6994,6996,6999,7001,7003],{"class":38,"line":431},[36,6995,2465],{"class":46},[36,6997,6998],{"class":46}," *",[36,7000,19],{"class":42},[36,7002,6819],{"class":46},[36,7004,6677],{"class":42},[36,7006,7007,7010,7012,7015,7017,7020,7022,7024],{"class":38,"line":437},[36,7008,7009],{"class":42},"    cout ",[36,7011,1657],{"class":46},[36,7013,7014],{"class":405},"\"sizeof(int *)\"",[36,7016,1853],{"class":46},[36,7018,7019],{"class":42},"(p)",[36,7021,1657],{"class":46},[36,7023,1722],{"class":42},[36,7025,7026],{"class":69},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,7028,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047,7050],{"class":38,"line":443},[36,7030,7009],{"class":42},[36,7032,1657],{"class":46},[36,7034,7014],{"class":405},[36,7036,1853],{"class":46},[36,7038,345],{"class":42},[36,7040,631],{"class":46},[36,7042,6998],{"class":46},[36,7044,231],{"class":42},[36,7046,1657],{"class":46},[36,7048,7049],{"class":42},"endl",[36,7051,7052],{"class":69},"  \u002F\u002F4字节(32位的话)\n",[36,7054,7055,7057,7059,7062,7064,7066,7068,7070,7072,7074,7076],{"class":38,"line":2092},[36,7056,7009],{"class":42},[36,7058,1657],{"class":46},[36,7060,7061],{"class":405},"\"sizeof(char *)\"",[36,7063,1853],{"class":46},[36,7065,345],{"class":42},[36,7067,718],{"class":46},[36,7069,6998],{"class":46},[36,7071,231],{"class":42},[36,7073,1657],{"class":46},[36,7075,1722],{"class":42},[36,7077,7078],{"class":69}," \u002F\u002F4字节(32位的话)\n",[36,7080,7081],{"class":38,"line":2097},[36,7082,2045],{"class":42},[14,7084,7086],{"id":7085},"_33空指针","3.3空指针",[19,7088,7089],{},"空指针：指针变量指向内存中编号为0的空间",[19,7091,7092],{},"用途：初始化指针变量",[19,7094,7095],{},"注意：空指针指向的内存是不可以访问的",[26,7097,7099],{"className":617,"code":7098,"language":619,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[33,7100,7101,7109,7113,7118,7132,7137,7152,7157],{"__ignoreMap":31},[36,7102,7103,7105,7107],{"class":38,"line":39},[36,7104,631],{"class":46},[36,7106,2453],{"class":2443},[36,7108,2456],{"class":42},[36,7110,7111],{"class":38,"line":66},[36,7112,2026],{"class":42},[36,7114,7115],{"class":38,"line":73},[36,7116,7117],{"class":69},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,7119,7120,7122,7124,7126,7128,7130],{"class":38,"line":79},[36,7121,2465],{"class":46},[36,7123,6998],{"class":46},[36,7125,19],{"class":42},[36,7127,47],{"class":46},[36,7129,2872],{"class":53},[36,7131,1774],{"class":42},[36,7133,7134],{"class":38,"line":85},[36,7135,7136],{"class":69},"    \u002F\u002F2.空指针不能进行访问\n",[36,7138,7139,7141,7143,7145,7147,7149],{"class":38,"line":419},[36,7140,6883],{"class":46},[36,7142,19],{"class":42},[36,7144,47],{"class":46},[36,7146,930],{"class":53},[36,7148,680],{"class":42},[36,7150,7151],{"class":69},"\u002F\u002F直接报错，压根不能访问\n",[36,7153,7154],{"class":38,"line":425},[36,7155,7156],{"class":69},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,7158,7159],{"class":38,"line":431},[36,7160,2045],{"class":42},[14,7162,7164],{"id":7163},"_34野指针","3.4野指针",[19,7166,7167],{},[770,7168,7169],{},"指针变量指向非法的内存空间",[26,7171,7173],{"className":617,"code":7172,"language":619,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,7174,7175,7183,7187,7216,7221,7233],{"__ignoreMap":31},[36,7176,7177,7179,7181],{"class":38,"line":39},[36,7178,631],{"class":46},[36,7180,2453],{"class":2443},[36,7182,2456],{"class":42},[36,7184,7185],{"class":38,"line":66},[36,7186,2026],{"class":42},[36,7188,7189,7191,7193,7195,7197,7199,7201,7203,7205,7208,7211,7213],{"class":38,"line":73},[36,7190,2465],{"class":46},[36,7192,6998],{"class":46},[36,7194,19],{"class":42},[36,7196,47],{"class":46},[36,7198,345],{"class":42},[36,7200,631],{"class":46},[36,7202,6998],{"class":46},[36,7204,231],{"class":42},[36,7206,7207],{"class":46},"0x",[36,7209,7210],{"class":53},"1100",[36,7212,680],{"class":42},[36,7214,7215],{"class":69}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,7217,7218],{"class":38,"line":79},[36,7219,7220],{"class":69},"    \u002F\u002F访问野指针报错\n",[36,7222,7223,7225,7227,7229,7231],{"class":38,"line":85},[36,7224,2031],{"class":42},[36,7226,6899],{"class":46},[36,7228,19],{"class":42},[36,7230,1657],{"class":46},[36,7232,1679],{"class":42},[36,7234,7235],{"class":38,"line":419},[36,7236,2045],{"class":42},[19,7238,7239],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7241,7243],{"id":7242},"_35const修饰指针","3.5const修饰指针",[19,7245,7246],{},"三种情况：",[1620,7248,7249,7252,7255],{},[582,7250,7251],{},"const修饰指针 常量指针",[582,7253,7254],{},"const修饰常量 指针常量",[582,7256,7257],{},"const即修饰指针，又修饰常量",[579,7259,7260],{},[582,7261,7262],{},"常量指针",[26,7264,7266],{"className":617,"code":7265,"language":619,"meta":31,"style":31},"const int *p=&a;\n",[33,7267,7268],{"__ignoreMap":31},[36,7269,7270,7273,7275,7277,7279,7281],{"class":38,"line":39},[36,7271,7272],{"class":46},"const",[36,7274,2862],{"class":46},[36,7276,6998],{"class":46},[36,7278,19],{"class":42},[36,7280,6819],{"class":46},[36,7282,6677],{"class":42},[19,7284,7285],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[579,7287,7288],{"start":66},[582,7289,7290],{},"指针常量",[26,7292,7294],{"className":617,"code":7293,"language":619,"meta":31,"style":31},"int *const p=&a;\n",[33,7295,7296],{"__ignoreMap":31},[36,7297,7298,7300,7303,7306,7308],{"class":38,"line":39},[36,7299,631],{"class":46},[36,7301,7302],{"class":46}," *const",[36,7304,7305],{"class":42}," p",[36,7307,6819],{"class":46},[36,7309,6677],{"class":42},[19,7311,7312],{},"指针的指向不可以改，指针指向的值可以改",[579,7314,7315],{"start":73},[582,7316,7257],{},[26,7318,7320],{"className":617,"code":7319,"language":619,"meta":31,"style":31},"const int *const p=&a;\n",[33,7321,7322],{"__ignoreMap":31},[36,7323,7324,7326,7328,7330,7332,7334],{"class":38,"line":39},[36,7325,7272],{"class":46},[36,7327,2862],{"class":46},[36,7329,7302],{"class":46},[36,7331,7305],{"class":42},[36,7333,6819],{"class":46},[36,7335,6677],{"class":42},[19,7337,7338],{},"指针的指向和指针指向的值都不可以改变",[14,7340,7342],{"id":7341},"_36指针和数组","3.6指针和数组",[26,7344,7346],{"className":617,"code":7345,"language":619,"meta":31,"style":31},"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",[33,7347,7348,7356,7360,7365,7419,7440,7456,7472,7483,7500,7505,7519,7545,7549,7561,7570,7574],{"__ignoreMap":31},[36,7349,7350,7352,7354],{"class":38,"line":39},[36,7351,631],{"class":46},[36,7353,2453],{"class":2443},[36,7355,2456],{"class":42},[36,7357,7358],{"class":38,"line":66},[36,7359,2026],{"class":42},[36,7361,7362],{"class":38,"line":73},[36,7363,7364],{"class":69},"    \u002F\u002F利用指针访问数组中的元素\n",[36,7366,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395,7397,7399,7401,7403,7405,7407,7409,7411,7413,7415,7417],{"class":38,"line":79},[36,7368,2465],{"class":46},[36,7370,4442],{"class":42},[36,7372,1062],{"class":53},[36,7374,1553],{"class":42},[36,7376,47],{"class":46},[36,7378,1509],{"class":42},[36,7380,54],{"class":53},[36,7382,57],{"class":42},[36,7384,96],{"class":53},[36,7386,57],{"class":42},[36,7388,127],{"class":53},[36,7390,57],{"class":42},[36,7392,912],{"class":53},[36,7394,57],{"class":42},[36,7396,938],{"class":53},[36,7398,57],{"class":42},[36,7400,101],{"class":53},[36,7402,57],{"class":42},[36,7404,987],{"class":53},[36,7406,57],{"class":42},[36,7408,1012],{"class":53},[36,7410,57],{"class":42},[36,7412,1037],{"class":53},[36,7414,57],{"class":42},[36,7416,1062],{"class":53},[36,7418,4475],{"class":42},[36,7420,7421,7423,7425,7428,7430,7432,7434,7436,7438],{"class":38,"line":85},[36,7422,2031],{"class":42},[36,7424,1657],{"class":46},[36,7426,7427],{"class":405},"\"数组的第一个元素为：\"",[36,7429,1657],{"class":46},[36,7431,4386],{"class":42},[36,7433,812],{"class":53},[36,7435,1553],{"class":42},[36,7437,1657],{"class":46},[36,7439,1679],{"class":42},[36,7441,7442,7444,7446,7448,7450,7453],{"class":38,"line":419},[36,7443,2465],{"class":46},[36,7445,6998],{"class":46},[36,7447,19],{"class":42},[36,7449,47],{"class":46},[36,7451,7452],{"class":42},"arr;",[36,7454,7455],{"class":69},"\u002F\u002F注意数才要加取地址符号&\n",[36,7457,7458,7460,7462,7464,7466,7468,7470],{"class":38,"line":425},[36,7459,2031],{"class":42},[36,7461,1657],{"class":46},[36,7463,7427],{"class":405},[36,7465,6899],{"class":46},[36,7467,19],{"class":42},[36,7469,1657],{"class":46},[36,7471,1679],{"class":42},[36,7473,7474,7476,7478,7480],{"class":38,"line":431},[36,7475,6816],{"class":42},[36,7477,2772],{"class":46},[36,7479,680],{"class":42},[36,7481,7482],{"class":69}," \u002F\u002F让指针向后偏移4个字节\n",[36,7484,7485,7487,7489,7492,7494,7496,7498],{"class":38,"line":437},[36,7486,2031],{"class":42},[36,7488,1657],{"class":46},[36,7490,7491],{"class":405},"\"数组的第二个元素为：\"",[36,7493,6899],{"class":46},[36,7495,19],{"class":42},[36,7497,1657],{"class":46},[36,7499,1679],{"class":42},[36,7501,7502],{"class":38,"line":443},[36,7503,7504],{"class":69},"    \u002F\u002F利用指针遍历数组\n",[36,7506,7507,7509,7511,7514,7516],{"class":38,"line":2092},[36,7508,2465],{"class":46},[36,7510,6998],{"class":46},[36,7512,7513],{"class":42},"p2",[36,7515,47],{"class":46},[36,7517,7518],{"class":42},"arr;\n",[36,7520,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543],{"class":38,"line":2097},[36,7522,3681],{"class":46},[36,7524,2138],{"class":42},[36,7526,631],{"class":46},[36,7528,3512],{"class":42},[36,7530,47],{"class":46},[36,7532,812],{"class":53},[36,7534,3519],{"class":42},[36,7536,1523],{"class":46},[36,7538,1062],{"class":53},[36,7540,3519],{"class":42},[36,7542,2772],{"class":46},[36,7544,63],{"class":42},[36,7546,7547],{"class":38,"line":2103},[36,7548,2510],{"class":42},[36,7550,7551,7553,7555,7557,7559],{"class":38,"line":2108},[36,7552,3931],{"class":42},[36,7554,6899],{"class":46},[36,7556,7513],{"class":42},[36,7558,1657],{"class":46},[36,7560,1679],{"class":42},[36,7562,7563,7566,7568],{"class":38,"line":2122},[36,7564,7565],{"class":42},"        p2",[36,7567,2772],{"class":46},[36,7569,1774],{"class":42},[36,7571,7572],{"class":38,"line":2127},[36,7573,2667],{"class":42},[36,7575,7576],{"class":38,"line":2133},[36,7577,2045],{"class":42},[14,7579,7581],{"id":7580},"_37指针和函数","3.7指针和函数",[19,7583,7584],{},"利用指针做函数参数，可以修改实参的值",[19,7586,7587],{},"值传递：只改变形参，不改变实参",[19,7589,7590],{},"地址传递：",[26,7592,7594],{"className":617,"code":7593,"language":619,"meta":31,"style":31},"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",[33,7595,7596,7621,7625,7637,7648,7658,7662,7670,7674,7686,7698,7703,7719,7734,7749],{"__ignoreMap":31},[36,7597,7598,7600,7602,7604,7606,7608,7611,7613,7615,7617,7619],{"class":38,"line":39},[36,7599,5844],{"class":46},[36,7601,5847],{"class":2443},[36,7603,345],{"class":42},[36,7605,631],{"class":46},[36,7607,6998],{"class":46},[36,7609,7610],{"class":5696},"p1",[36,7612,57],{"class":42},[36,7614,631],{"class":46},[36,7616,6998],{"class":46},[36,7618,7513],{"class":5696},[36,7620,63],{"class":42},[36,7622,7623],{"class":38,"line":66},[36,7624,2026],{"class":42},[36,7626,7627,7629,7631,7634],{"class":38,"line":73},[36,7628,2465],{"class":46},[36,7630,4735],{"class":42},[36,7632,7633],{"class":46},"=*",[36,7635,7636],{"class":42},"p1;\n",[36,7638,7639,7641,7643,7645],{"class":38,"line":79},[36,7640,6883],{"class":46},[36,7642,7610],{"class":42},[36,7644,7633],{"class":46},[36,7646,7647],{"class":42},"p2;\n",[36,7649,7650,7652,7654,7656],{"class":38,"line":85},[36,7651,6883],{"class":46},[36,7653,7513],{"class":42},[36,7655,47],{"class":46},[36,7657,4760],{"class":42},[36,7659,7660],{"class":38,"line":419},[36,7661,2045],{"class":42},[36,7663,7664,7666,7668],{"class":38,"line":425},[36,7665,631],{"class":46},[36,7667,2453],{"class":2443},[36,7669,2456],{"class":42},[36,7671,7672],{"class":38,"line":431},[36,7673,2026],{"class":42},[36,7675,7676,7678,7680,7682,7684],{"class":38,"line":437},[36,7677,2465],{"class":46},[36,7679,1879],{"class":42},[36,7681,47],{"class":46},[36,7683,1062],{"class":53},[36,7685,1774],{"class":42},[36,7687,7688,7690,7692,7694,7696],{"class":38,"line":443},[36,7689,2465],{"class":46},[36,7691,3313],{"class":42},[36,7693,47],{"class":46},[36,7695,1313],{"class":53},[36,7697,1774],{"class":42},[36,7699,7700],{"class":38,"line":2092},[36,7701,7702],{"class":69},"    \u002F\u002F地址传递\n",[36,7704,7705,7707,7709,7711,7714,7716],{"class":38,"line":2097},[36,7706,6041],{"class":2443},[36,7708,345],{"class":42},[36,7710,971],{"class":46},[36,7712,7713],{"class":42},"a,",[36,7715,971],{"class":46},[36,7717,7718],{"class":42},"b);\n",[36,7720,7721,7723,7725,7727,7729,7731],{"class":38,"line":2103},[36,7722,2031],{"class":42},[36,7724,1657],{"class":46},[36,7726,43],{"class":42},[36,7728,1657],{"class":46},[36,7730,1722],{"class":42},[36,7732,7733],{"class":69},"\u002F\u002F20\n",[36,7735,7736,7738,7740,7742,7744,7746],{"class":38,"line":2108},[36,7737,2031],{"class":42},[36,7739,1657],{"class":46},[36,7741,882],{"class":42},[36,7743,1657],{"class":46},[36,7745,1722],{"class":42},[36,7747,7748],{"class":69},"\u002F\u002F10\n",[36,7750,7751],{"class":38,"line":2122},[36,7752,2045],{"class":42},[19,7754,7755],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7757,7759],{"id":7758},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7761,7762],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7764,7765,7766,7768],{},"例如数组：int arr",[36,7767,1062],{},"={4,3,6,9,1,2,10,8,7,5}",[26,7770,7772],{"className":617,"code":7771,"language":619,"meta":31,"style":31},"#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",[33,7773,7774,7780,7790,7814,7818,7849,7853,7887,7891,7909,7913,7924,7939,7954,7958,7962,7966,7970,7974,7982,7986,7991,8045,8057,8069,8074,8082,8086,8091,8116,8120,8135,8144,8148],{"__ignoreMap":31},[36,7775,7776,7778],{"class":38,"line":39},[36,7777,2429],{"class":46},[36,7779,2432],{"class":405},[36,7781,7782,7784,7786,7788],{"class":38,"line":66},[36,7783,2437],{"class":46},[36,7785,2440],{"class":46},[36,7787,2444],{"class":2443},[36,7789,1774],{"class":42},[36,7791,7792,7794,7797,7799,7801,7803,7805,7807,7809,7812],{"class":38,"line":73},[36,7793,5844],{"class":46},[36,7795,7796],{"class":2443}," bubbleSort",[36,7798,345],{"class":42},[36,7800,631],{"class":46},[36,7802,6998],{"class":46},[36,7804,19],{"class":5696},[36,7806,57],{"class":42},[36,7808,631],{"class":46},[36,7810,7811],{"class":5696}," len",[36,7813,63],{"class":42},[36,7815,7816],{"class":38,"line":79},[36,7817,2026],{"class":42},[36,7819,7820,7822,7824,7826,7828,7830,7832,7834,7836,7839,7841,7843,7845,7847],{"class":38,"line":85},[36,7821,3681],{"class":46},[36,7823,345],{"class":42},[36,7825,631],{"class":46},[36,7827,3512],{"class":42},[36,7829,47],{"class":46},[36,7831,812],{"class":53},[36,7833,3519],{"class":42},[36,7835,1523],{"class":46},[36,7837,7838],{"class":42},"len",[36,7840,173],{"class":46},[36,7842,54],{"class":53},[36,7844,3519],{"class":42},[36,7846,2772],{"class":46},[36,7848,63],{"class":42},[36,7850,7851],{"class":38,"line":419},[36,7852,2510],{"class":42},[36,7854,7855,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885],{"class":38,"line":425},[36,7856,3883],{"class":46},[36,7858,345],{"class":42},[36,7860,631],{"class":46},[36,7862,3890],{"class":42},[36,7864,47],{"class":46},[36,7866,812],{"class":53},[36,7868,3897],{"class":42},[36,7870,1523],{"class":46},[36,7872,7838],{"class":42},[36,7874,173],{"class":46},[36,7876,1057],{"class":42},[36,7878,173],{"class":46},[36,7880,54],{"class":53},[36,7882,3897],{"class":42},[36,7884,2772],{"class":46},[36,7886,63],{"class":42},[36,7888,7889],{"class":38,"line":431},[36,7890,2990],{"class":42},[36,7892,7893,7895,7898,7900,7903,7905,7907],{"class":38,"line":437},[36,7894,5122],{"class":46},[36,7896,7897],{"class":42},"(p[j]",[36,7899,1573],{"class":46},[36,7901,7902],{"class":42},"p[j",[36,7904,1097],{"class":46},[36,7906,54],{"class":53},[36,7908,5137],{"class":42},[36,7910,7911],{"class":38,"line":443},[36,7912,5142],{"class":42},[36,7914,7915,7917,7919,7921],{"class":38,"line":2092},[36,7916,5147],{"class":46},[36,7918,4735],{"class":42},[36,7920,47],{"class":46},[36,7922,7923],{"class":42},"p[j];\n",[36,7925,7926,7929,7931,7933,7935,7937],{"class":38,"line":2097},[36,7927,7928],{"class":42},"                p[j]",[36,7930,47],{"class":46},[36,7932,7902],{"class":42},[36,7934,1097],{"class":46},[36,7936,54],{"class":53},[36,7938,5170],{"class":42},[36,7940,7941,7944,7946,7948,7950,7952],{"class":38,"line":2103},[36,7942,7943],{"class":42},"                p[j",[36,7945,1097],{"class":46},[36,7947,54],{"class":53},[36,7949,1553],{"class":42},[36,7951,47],{"class":46},[36,7953,4760],{"class":42},[36,7955,7956],{"class":38,"line":2108},[36,7957,5190],{"class":42},[36,7959,7960],{"class":38,"line":2122},[36,7961,3009],{"class":42},[36,7963,7964],{"class":38,"line":2127},[36,7965,2667],{"class":42},[36,7967,7968],{"class":38,"line":2133},[36,7969,2045],{"class":42},[36,7971,7972],{"class":38,"line":2154},[36,7973,2880],{"emptyLinePlaceholder":553},[36,7975,7976,7978,7980],{"class":38,"line":2159},[36,7977,631],{"class":46},[36,7979,2453],{"class":2443},[36,7981,2456],{"class":42},[36,7983,7984],{"class":38,"line":2173},[36,7985,2026],{"class":42},[36,7987,7988],{"class":38,"line":2178},[36,7989,7990],{"class":69},"    \u002F\u002F 1.创建数组\n",[36,7992,7993,7995,7997,7999,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027,8029,8031,8033,8035,8037,8039,8041,8043],{"class":38,"line":2207},[36,7994,2465],{"class":46},[36,7996,4442],{"class":42},[36,7998,1062],{"class":53},[36,8000,1553],{"class":42},[36,8002,47],{"class":46},[36,8004,1509],{"class":42},[36,8006,912],{"class":53},[36,8008,57],{"class":42},[36,8010,127],{"class":53},[36,8012,57],{"class":42},[36,8014,101],{"class":53},[36,8016,57],{"class":42},[36,8018,1037],{"class":53},[36,8020,57],{"class":42},[36,8022,54],{"class":53},[36,8024,57],{"class":42},[36,8026,96],{"class":53},[36,8028,57],{"class":42},[36,8030,1062],{"class":53},[36,8032,57],{"class":42},[36,8034,1012],{"class":53},[36,8036,57],{"class":42},[36,8038,987],{"class":53},[36,8040,57],{"class":42},[36,8042,938],{"class":53},[36,8044,4475],{"class":42},[36,8046,8047,8049,8051,8053,8055],{"class":38,"line":2212},[36,8048,2465],{"class":46},[36,8050,7811],{"class":42},[36,8052,47],{"class":46},[36,8054,1062],{"class":53},[36,8056,1774],{"class":42},[36,8058,8059,8061,8063,8065,8067],{"class":38,"line":2229},[36,8060,2465],{"class":46},[36,8062,6998],{"class":46},[36,8064,19],{"class":42},[36,8066,47],{"class":46},[36,8068,7518],{"class":42},[36,8070,8071],{"class":38,"line":2234},[36,8072,8073],{"class":69},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,8075,8076,8079],{"class":38,"line":2239},[36,8077,8078],{"class":2443},"    bubbleSort",[36,8080,8081],{"class":42},"(p,len);\n",[36,8083,8084],{"class":38,"line":2244},[36,8085,2880],{"emptyLinePlaceholder":553},[36,8087,8088],{"class":38,"line":2258},[36,8089,8090],{"class":69},"    \u002F\u002F 3.打印排序后的数组\n",[36,8092,8093,8095,8097,8099,8101,8103,8105,8107,8109,8112,8114],{"class":38,"line":2263},[36,8094,3681],{"class":46},[36,8096,2138],{"class":42},[36,8098,631],{"class":46},[36,8100,3512],{"class":42},[36,8102,47],{"class":46},[36,8104,812],{"class":53},[36,8106,3694],{"class":42},[36,8108,1523],{"class":46},[36,8110,8111],{"class":42},"len; i",[36,8113,2772],{"class":46},[36,8115,63],{"class":42},[36,8117,8118],{"class":38,"line":3057},[36,8119,2510],{"class":42},[36,8121,8122,8124,8126,8128,8130,8133],{"class":38,"line":3071},[36,8123,3931],{"class":42},[36,8125,6899],{"class":46},[36,8127,19],{"class":42},[36,8129,1657],{"class":46},[36,8131,8132],{"class":405},"\"\"",[36,8134,1774],{"class":42},[36,8136,8137,8140,8142],{"class":38,"line":3079},[36,8138,8139],{"class":42},"        p",[36,8141,2772],{"class":46},[36,8143,1774],{"class":42},[36,8145,8146],{"class":38,"line":3084},[36,8147,2667],{"class":42},[36,8149,8150],{"class":38,"line":3090},[36,8151,2045],{"class":42},[539,8153,8154],{},"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":31,"searchDepth":66,"depth":66,"links":8156},[8157,8158,8159,8160,8161,8162,8163,8164],{"id":6763,"depth":66,"text":6764},{"id":6929,"depth":66,"text":6930},{"id":7085,"depth":66,"text":7086},{"id":7163,"depth":66,"text":7164},{"id":7242,"depth":66,"text":7243},{"id":7341,"depth":66,"text":7342},{"id":7580,"depth":66,"text":7581},{"id":7758,"depth":66,"text":7759},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6752,"description":6760},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8171,"title":8172,"body":8173,"description":8180,"extension":551,"meta":11154,"navigation":553,"path":11155,"seo":11156,"stem":11157,"__hash__":11158},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8174,"toc":11145},[8175,8178,8181,8185,8188,8191,8202,8540,8543,8547,8550,8557,8812,8816,8819,8822,8977,8981,8984,8987,9193,9197,9200,9503,9506,9514,9518,9521,9672,9674,9685,9742,9746,9751,10408,10416,10419,10513,10516,11136,11142],[10,8176,8172],{"id":8177},"_4结构体",[19,8179,8180],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8182,8184],{"id":8183},"_41结构体定义与使用","4.1结构体定义与使用",[19,8186,8187],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8189,8190],{},"通过结构体创建变量的方式：",[1620,8192,8193,8196,8199],{},[582,8194,8195],{},"struct 结构体名 变量名",[582,8197,8198],{},"struct 结构体名 变量名={成员1值，成员2值...}",[582,8200,8201],{},"定义结构体时顺便创建变量",[26,8203,8205],{"className":617,"code":8204,"language":619,"meta":31,"style":31},"#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",[33,8206,8207,8213,8223,8230,8235,8243,8247,8252,8256,8261,8266,8271,8278,8283,8290,8294,8301,8305,8309,8313,8317,8321,8325,8331,8335,8341,8349,8357,8361,8366,8371,8382,8387,8399,8410,8421,8426,8450,8455,8461,8488,8493,8499,8511,8523,8535],{"__ignoreMap":31},[36,8208,8209,8211],{"class":38,"line":39},[36,8210,2429],{"class":46},[36,8212,2432],{"class":405},[36,8214,8215,8217,8219,8221],{"class":38,"line":66},[36,8216,2437],{"class":46},[36,8218,2440],{"class":46},[36,8220,2444],{"class":2443},[36,8222,1774],{"class":42},[36,8224,8225,8227],{"class":38,"line":73},[36,8226,2429],{"class":46},[36,8228,8229],{"class":405},"\u003Cstring>\n",[36,8231,8232],{"class":38,"line":79},[36,8233,8234],{"class":69},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,8236,8237,8240],{"class":38,"line":85},[36,8238,8239],{"class":46},"struct",[36,8241,8242],{"class":2443}," Student\n",[36,8244,8245],{"class":38,"line":419},[36,8246,2026],{"class":42},[36,8248,8249],{"class":38,"line":425},[36,8250,8251],{"class":69},"    \u002F\u002F成员列表\n",[36,8253,8254],{"class":38,"line":431},[36,8255,2880],{"emptyLinePlaceholder":553},[36,8257,8258],{"class":38,"line":437},[36,8259,8260],{"class":69},"    \u002F\u002F姓名\n",[36,8262,8263],{"class":38,"line":443},[36,8264,8265],{"class":42},"    string name;\n",[36,8267,8268],{"class":38,"line":2092},[36,8269,8270],{"class":69},"    \u002F\u002F年龄\n",[36,8272,8273,8275],{"class":38,"line":2097},[36,8274,2465],{"class":46},[36,8276,8277],{"class":42}," age;\n",[36,8279,8280],{"class":38,"line":2103},[36,8281,8282],{"class":69},"    \u002F\u002F分数\n",[36,8284,8285,8287],{"class":38,"line":2108},[36,8286,2465],{"class":46},[36,8288,8289],{"class":42}," score;\n",[36,8291,8292],{"class":38,"line":2122},[36,8293,4475],{"class":42},[36,8295,8296,8298],{"class":38,"line":2127},[36,8297,8239],{"class":46},[36,8299,8300],{"class":2443}," School\n",[36,8302,8303],{"class":38,"line":2133},[36,8304,2026],{"class":42},[36,8306,8307],{"class":38,"line":2154},[36,8308,8251],{"class":69},[36,8310,8311],{"class":38,"line":2159},[36,8312,2880],{"emptyLinePlaceholder":553},[36,8314,8315],{"class":38,"line":2173},[36,8316,8260],{"class":69},[36,8318,8319],{"class":38,"line":2178},[36,8320,8265],{"class":42},[36,8322,8323],{"class":38,"line":2207},[36,8324,8270],{"class":69},[36,8326,8327,8329],{"class":38,"line":2212},[36,8328,2465],{"class":46},[36,8330,8277],{"class":42},[36,8332,8333],{"class":38,"line":2229},[36,8334,8282],{"class":69},[36,8336,8337,8339],{"class":38,"line":2234},[36,8338,2465],{"class":46},[36,8340,8289],{"class":42},[36,8342,8343,8346],{"class":38,"line":2239},[36,8344,8345],{"class":42},"} s3;",[36,8347,8348],{"class":69}," \u002F\u002F创建结构体时就创建了变量\n",[36,8350,8351,8353,8355],{"class":38,"line":2244},[36,8352,631],{"class":46},[36,8354,2453],{"class":2443},[36,8356,2456],{"class":42},[36,8358,8359],{"class":38,"line":2258},[36,8360,2026],{"class":42},[36,8362,8363],{"class":38,"line":2263},[36,8364,8365],{"class":69},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,8367,8368],{"class":38,"line":3057},[36,8369,8370],{"class":69},"    \u002F\u002F2.1 struct Student s1;\n",[36,8372,8373,8376,8379],{"class":38,"line":3071},[36,8374,8375],{"class":46},"    struct",[36,8377,8378],{"class":2443}," Student",[36,8380,8381],{"class":42}," s1;\n",[36,8383,8384],{"class":38,"line":3079},[36,8385,8386],{"class":69},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,8388,8389,8392,8394,8397],{"class":38,"line":3084},[36,8390,8391],{"class":42},"    s1.name",[36,8393,47],{"class":46},[36,8395,8396],{"class":405},"\"张三\"",[36,8398,1774],{"class":42},[36,8400,8401,8404,8406,8408],{"class":38,"line":3090},[36,8402,8403],{"class":42},"    s1.age",[36,8405,47],{"class":46},[36,8407,1263],{"class":53},[36,8409,1774],{"class":42},[36,8411,8412,8415,8417,8419],{"class":38,"line":3096},[36,8413,8414],{"class":42},"    s1.score",[36,8416,47],{"class":46},[36,8418,873],{"class":53},[36,8420,1774],{"class":42},[36,8422,8423],{"class":38,"line":3101},[36,8424,8425],{"class":69},"    \u002F\u002F输出结果\n",[36,8427,8429,8431,8433,8436,8438,8441,8443,8446,8448],{"class":38,"line":8428},37,[36,8430,2031],{"class":42},[36,8432,1657],{"class":46},[36,8434,8435],{"class":42},"s1.name",[36,8437,1657],{"class":46},[36,8439,8440],{"class":42},"s1.age",[36,8442,1657],{"class":46},[36,8444,8445],{"class":42},"s1.score",[36,8447,1657],{"class":46},[36,8449,1679],{"class":42},[36,8451,8453],{"class":38,"line":8452},38,[36,8454,2880],{"emptyLinePlaceholder":553},[36,8456,8458],{"class":38,"line":8457},39,[36,8459,8460],{"class":69},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,8462,8464,8466,8468,8471,8473,8475,8478,8480,8482,8484,8486],{"class":38,"line":8463},40,[36,8465,8375],{"class":46},[36,8467,8378],{"class":2443},[36,8469,8470],{"class":42}," s2",[36,8472,47],{"class":46},[36,8474,1509],{"class":42},[36,8476,8477],{"class":405},"\"王五\"",[36,8479,57],{"class":42},[36,8481,1263],{"class":53},[36,8483,57],{"class":42},[36,8485,873],{"class":53},[36,8487,4475],{"class":42},[36,8489,8491],{"class":38,"line":8490},41,[36,8492,2880],{"emptyLinePlaceholder":553},[36,8494,8496],{"class":38,"line":8495},42,[36,8497,8498],{"class":69},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,8500,8502,8505,8507,8509],{"class":38,"line":8501},43,[36,8503,8504],{"class":42},"    s3.name",[36,8506,47],{"class":46},[36,8508,4158],{"class":405},[36,8510,1774],{"class":42},[36,8512,8514,8517,8519,8521],{"class":38,"line":8513},44,[36,8515,8516],{"class":42},"    s3.age",[36,8518,47],{"class":46},[36,8520,1263],{"class":53},[36,8522,1774],{"class":42},[36,8524,8526,8529,8531,8533],{"class":38,"line":8525},45,[36,8527,8528],{"class":42},"    s3.score",[36,8530,47],{"class":46},[36,8532,1313],{"class":53},[36,8534,1774],{"class":42},[36,8536,8538],{"class":38,"line":8537},46,[36,8539,2045],{"class":42},[19,8541,8542],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8544,8546],{"id":8545},"_42结构体数组","4.2结构体数组",[19,8548,8549],{},"将自定义的结构体放入到数组中方便维护",[19,8551,8552,8553,8556],{},"语法：struct 结构体名 数组名",[36,8554,8555],{},"元素个数","={ {}，{},...{} };",[26,8558,8560],{"className":617,"code":8559,"language":619,"meta":31,"style":31},"#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",[33,8561,8562,8568,8578,8584,8589,8595,8599,8603,8609,8615,8619,8623,8631,8635,8640,8655,8659,8675,8691,8695,8700,8716,8731,8746,8751,8777,8781,8804,8808],{"__ignoreMap":31},[36,8563,8564,8566],{"class":38,"line":39},[36,8565,2429],{"class":46},[36,8567,2432],{"class":405},[36,8569,8570,8572,8574,8576],{"class":38,"line":66},[36,8571,2437],{"class":46},[36,8573,2440],{"class":46},[36,8575,2444],{"class":2443},[36,8577,1774],{"class":42},[36,8579,8580,8582],{"class":38,"line":73},[36,8581,2429],{"class":46},[36,8583,8229],{"class":405},[36,8585,8586],{"class":38,"line":79},[36,8587,8588],{"class":69},"\u002F\u002F1.定义结构体\n",[36,8590,8591,8593],{"class":38,"line":85},[36,8592,8239],{"class":46},[36,8594,8242],{"class":2443},[36,8596,8597],{"class":38,"line":419},[36,8598,2026],{"class":42},[36,8600,8601],{"class":38,"line":425},[36,8602,8265],{"class":42},[36,8604,8605,8607],{"class":38,"line":431},[36,8606,2465],{"class":46},[36,8608,8277],{"class":42},[36,8610,8611,8613],{"class":38,"line":437},[36,8612,2465],{"class":46},[36,8614,8289],{"class":42},[36,8616,8617],{"class":38,"line":443},[36,8618,2880],{"emptyLinePlaceholder":553},[36,8620,8621],{"class":38,"line":2092},[36,8622,4475],{"class":42},[36,8624,8625,8627,8629],{"class":38,"line":2097},[36,8626,631],{"class":46},[36,8628,2453],{"class":2443},[36,8630,2456],{"class":42},[36,8632,8633],{"class":38,"line":2103},[36,8634,2026],{"class":42},[36,8636,8637],{"class":38,"line":2108},[36,8638,8639],{"class":69},"    \u002F\u002F2.创建结构体数组\n",[36,8641,8642,8644,8646,8649,8651,8653],{"class":38,"line":2122},[36,8643,8375],{"class":46},[36,8645,8378],{"class":2443},[36,8647,8648],{"class":42}," stuArray[",[36,8650,96],{"class":53},[36,8652,1553],{"class":42},[36,8654,5388],{"class":46},[36,8656,8657],{"class":38,"line":2127},[36,8658,2510],{"class":42},[36,8660,8661,8663,8665,8667,8669,8671,8673],{"class":38,"line":2133},[36,8662,5397],{"class":42},[36,8664,8396],{"class":405},[36,8666,57],{"class":42},[36,8668,1263],{"class":53},[36,8670,57],{"class":42},[36,8672,930],{"class":53},[36,8674,5410],{"class":42},[36,8676,8677,8679,8681,8683,8685,8687,8689],{"class":38,"line":2154},[36,8678,5397],{"class":42},[36,8680,4158],{"class":405},[36,8682,57],{"class":42},[36,8684,1188],{"class":53},[36,8686,57],{"class":42},[36,8688,1188],{"class":53},[36,8690,2045],{"class":42},[36,8692,8693],{"class":38,"line":2159},[36,8694,2667],{"class":42},[36,8696,8697],{"class":38,"line":2173},[36,8698,8699],{"class":69},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,8701,8702,8705,8707,8710,8712,8714],{"class":38,"line":2178},[36,8703,8704],{"class":42},"    stuArray[",[36,8706,54],{"class":53},[36,8708,8709],{"class":42},"].name",[36,8711,47],{"class":46},[36,8713,4181],{"class":405},[36,8715,1774],{"class":42},[36,8717,8718,8720,8722,8725,8727,8729],{"class":38,"line":2207},[36,8719,8704],{"class":42},[36,8721,54],{"class":53},[36,8723,8724],{"class":42},"].age",[36,8726,47],{"class":46},[36,8728,96],{"class":53},[36,8730,1774],{"class":42},[36,8732,8733,8735,8737,8740,8742,8744],{"class":38,"line":2212},[36,8734,8704],{"class":42},[36,8736,54],{"class":53},[36,8738,8739],{"class":42},"].score",[36,8741,47],{"class":46},[36,8743,96],{"class":53},[36,8745,1774],{"class":42},[36,8747,8748],{"class":38,"line":2229},[36,8749,8750],{"class":69},"    \u002F\u002F4.遍历结构体数组\n",[36,8752,8753,8755,8757,8759,8761,8763,8765,8767,8769,8771,8773,8775],{"class":38,"line":2234},[36,8754,3681],{"class":46},[36,8756,2138],{"class":42},[36,8758,631],{"class":46},[36,8760,3512],{"class":42},[36,8762,47],{"class":46},[36,8764,812],{"class":53},[36,8766,3519],{"class":42},[36,8768,1523],{"class":46},[36,8770,96],{"class":53},[36,8772,3519],{"class":42},[36,8774,2772],{"class":46},[36,8776,63],{"class":42},[36,8778,8779],{"class":38,"line":2239},[36,8780,2510],{"class":42},[36,8782,8783,8785,8787,8790,8792,8795,8797,8800,8802],{"class":38,"line":2244},[36,8784,3931],{"class":42},[36,8786,1657],{"class":46},[36,8788,8789],{"class":42},"stuArray[i].name",[36,8791,1657],{"class":46},[36,8793,8794],{"class":42},"stuArray[i].age",[36,8796,1657],{"class":46},[36,8798,8799],{"class":42},"stuArray[i].score",[36,8801,1657],{"class":46},[36,8803,1679],{"class":42},[36,8805,8806],{"class":38,"line":2258},[36,8807,2667],{"class":42},[36,8809,8810],{"class":38,"line":2263},[36,8811,2045],{"class":42},[14,8813,8815],{"id":8814},"_43结构体指针","4.3结构体指针",[19,8817,8818],{},"作用：通过指针访问结构体中的成员",[19,8820,8821],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,8823,8825],{"className":617,"code":8824,"language":619,"meta":31,"style":31},"#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",[33,8826,8827,8833,8843,8849,8853,8859,8863,8867,8873,8879,8883,8891,8895,8900,8925,8930,8945,8950,8973],{"__ignoreMap":31},[36,8828,8829,8831],{"class":38,"line":39},[36,8830,2429],{"class":46},[36,8832,2432],{"class":405},[36,8834,8835,8837,8839,8841],{"class":38,"line":66},[36,8836,2437],{"class":46},[36,8838,2440],{"class":46},[36,8840,2444],{"class":2443},[36,8842,1774],{"class":42},[36,8844,8845,8847],{"class":38,"line":73},[36,8846,2429],{"class":46},[36,8848,8229],{"class":405},[36,8850,8851],{"class":38,"line":79},[36,8852,8588],{"class":69},[36,8854,8855,8857],{"class":38,"line":85},[36,8856,8239],{"class":46},[36,8858,8242],{"class":2443},[36,8860,8861],{"class":38,"line":419},[36,8862,2026],{"class":42},[36,8864,8865],{"class":38,"line":425},[36,8866,8265],{"class":42},[36,8868,8869,8871],{"class":38,"line":431},[36,8870,2465],{"class":46},[36,8872,8277],{"class":42},[36,8874,8875,8877],{"class":38,"line":437},[36,8876,2465],{"class":46},[36,8878,8289],{"class":42},[36,8880,8881],{"class":38,"line":443},[36,8882,4475],{"class":42},[36,8884,8885,8887,8889],{"class":38,"line":2092},[36,8886,631],{"class":46},[36,8888,2453],{"class":2443},[36,8890,2456],{"class":42},[36,8892,8893],{"class":38,"line":2097},[36,8894,2026],{"class":42},[36,8896,8897],{"class":38,"line":2103},[36,8898,8899],{"class":69},"    \u002F\u002F创建学生结构体变量\n",[36,8901,8902,8904,8906,8909,8911,8913,8915,8917,8919,8921,8923],{"class":38,"line":2108},[36,8903,8375],{"class":46},[36,8905,8378],{"class":2443},[36,8907,8908],{"class":42}," s",[36,8910,47],{"class":46},[36,8912,1509],{"class":42},[36,8914,8396],{"class":405},[36,8916,57],{"class":42},[36,8918,1263],{"class":53},[36,8920,57],{"class":42},[36,8922,2202],{"class":53},[36,8924,4475],{"class":42},[36,8926,8927],{"class":38,"line":2122},[36,8928,8929],{"class":69},"    \u002F\u002F通过指针指向结构体变量\n",[36,8931,8932,8934,8936,8938,8940,8942],{"class":38,"line":2127},[36,8933,8375],{"class":46},[36,8935,8378],{"class":2443},[36,8937,6998],{"class":46},[36,8939,19],{"class":42},[36,8941,6819],{"class":46},[36,8943,8944],{"class":42},"s\n",[36,8946,8947],{"class":38,"line":2133},[36,8948,8949],{"class":69},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,8951,8952,8954,8956,8959,8961,8964,8966,8969,8971],{"class":38,"line":2154},[36,8953,2031],{"class":42},[36,8955,1657],{"class":46},[36,8957,8958],{"class":42},"p->name",[36,8960,1657],{"class":46},[36,8962,8963],{"class":42},"p->age",[36,8965,1657],{"class":46},[36,8967,8968],{"class":42},"p->score",[36,8970,1657],{"class":46},[36,8972,1679],{"class":42},[36,8974,8975],{"class":38,"line":2159},[36,8976,2045],{"class":42},[14,8978,8980],{"id":8979},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8982,8983],{},"作用：结构体中的成员可以是另一个结构体",[19,8985,8986],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,8988,8990],{"className":617,"code":8989,"language":619,"meta":31,"style":31},"#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",[33,8991,8992,8998,9008,9014,9019,9027,9031,9035,9041,9047,9051,9056,9063,9067,9074,9078,9084,9089,9093,9101,9105,9110,9115,9120,9131,9143,9154,9167,9178,9189],{"__ignoreMap":31},[36,8993,8994,8996],{"class":38,"line":39},[36,8995,2429],{"class":46},[36,8997,2432],{"class":405},[36,8999,9000,9002,9004,9006],{"class":38,"line":66},[36,9001,2437],{"class":46},[36,9003,2440],{"class":46},[36,9005,2444],{"class":2443},[36,9007,1774],{"class":42},[36,9009,9010,9012],{"class":38,"line":73},[36,9011,2429],{"class":46},[36,9013,8229],{"class":405},[36,9015,9016],{"class":38,"line":79},[36,9017,9018],{"class":69},"\u002F\u002F定义学生结构体\n",[36,9020,9021,9023,9025],{"class":38,"line":85},[36,9022,8239],{"class":46},[36,9024,8378],{"class":2443},[36,9026,3154],{"class":42},[36,9028,9029],{"class":38,"line":419},[36,9030,2026],{"class":42},[36,9032,9033],{"class":38,"line":425},[36,9034,8265],{"class":42},[36,9036,9037,9039],{"class":38,"line":431},[36,9038,2465],{"class":46},[36,9040,8277],{"class":42},[36,9042,9043,9045],{"class":38,"line":437},[36,9044,2465],{"class":46},[36,9046,8289],{"class":42},[36,9048,9049],{"class":38,"line":443},[36,9050,2045],{"class":42},[36,9052,9053],{"class":38,"line":2092},[36,9054,9055],{"class":69},"\u002F\u002F定义老师结构体\n",[36,9057,9058,9060],{"class":38,"line":2097},[36,9059,8239],{"class":46},[36,9061,9062],{"class":2443}," Teacher\n",[36,9064,9065],{"class":38,"line":2103},[36,9066,2026],{"class":42},[36,9068,9069,9071],{"class":38,"line":2108},[36,9070,2465],{"class":46},[36,9072,9073],{"class":42}," id;\n",[36,9075,9076],{"class":38,"line":2122},[36,9077,8265],{"class":42},[36,9079,9080,9082],{"class":38,"line":2127},[36,9081,2465],{"class":46},[36,9083,8277],{"class":42},[36,9085,9086],{"class":38,"line":2133},[36,9087,9088],{"class":42},"    Student stu;\n",[36,9090,9091],{"class":38,"line":2154},[36,9092,2045],{"class":42},[36,9094,9095,9097,9099],{"class":38,"line":2159},[36,9096,631],{"class":46},[36,9098,2453],{"class":2443},[36,9100,6458],{"class":42},[36,9102,9103],{"class":38,"line":2173},[36,9104,2026],{"class":42},[36,9106,9107],{"class":38,"line":2178},[36,9108,9109],{"class":69},"    \u002F\u002F结构体嵌套结构体\n",[36,9111,9112],{"class":38,"line":2207},[36,9113,9114],{"class":69},"    \u002F\u002F创建老师\n",[36,9116,9117],{"class":38,"line":2212},[36,9118,9119],{"class":42},"    Teacher t;\n",[36,9121,9122,9125,9127,9129],{"class":38,"line":2229},[36,9123,9124],{"class":42},"    t.id",[36,9126,47],{"class":46},[36,9128,930],{"class":53},[36,9130,1774],{"class":42},[36,9132,9133,9136,9138,9141],{"class":38,"line":2234},[36,9134,9135],{"class":42},"    t.name",[36,9137,47],{"class":46},[36,9139,9140],{"class":405},"\"老王\"",[36,9142,1774],{"class":42},[36,9144,9145,9148,9150,9152],{"class":38,"line":2239},[36,9146,9147],{"class":42},"    t.age",[36,9149,47],{"class":46},[36,9151,1263],{"class":53},[36,9153,1774],{"class":42},[36,9155,9156,9159,9161,9164],{"class":38,"line":2244},[36,9157,9158],{"class":42},"    t.stu.name",[36,9160,47],{"class":46},[36,9162,9163],{"class":405},"\"小王\"",[36,9165,9166],{"class":42},"；\n",[36,9168,9169,9172,9174,9176],{"class":38,"line":2258},[36,9170,9171],{"class":42},"    t.stu.age",[36,9173,47],{"class":46},[36,9175,1313],{"class":53},[36,9177,1774],{"class":42},[36,9179,9180,9183,9185,9187],{"class":38,"line":2263},[36,9181,9182],{"class":42},"    t.stu.score",[36,9184,47],{"class":46},[36,9186,101],{"class":53},[36,9188,1774],{"class":42},[36,9190,9191],{"class":38,"line":3057},[36,9192,2045],{"class":42},[14,9194,9196],{"id":9195},"_45结构体做函数参数","4.5结构体做函数参数",[19,9198,9199],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,9201,9203],{"className":617,"code":9202,"language":619,"meta":31,"style":31},"#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",[33,9204,9205,9211,9221,9227,9233,9237,9241,9247,9253,9257,9262,9267,9284,9288,9321,9325,9330,9349,9353,9384,9388,9396,9400,9409,9421,9433,9445,9458,9466,9479,9491,9499],{"__ignoreMap":31},[36,9206,9207,9209],{"class":38,"line":39},[36,9208,2429],{"class":46},[36,9210,2432],{"class":405},[36,9212,9213,9215,9217,9219],{"class":38,"line":66},[36,9214,2437],{"class":46},[36,9216,2440],{"class":46},[36,9218,2444],{"class":2443},[36,9220,1774],{"class":42},[36,9222,9223,9225],{"class":38,"line":73},[36,9224,2429],{"class":46},[36,9226,8229],{"class":405},[36,9228,9229,9231],{"class":38,"line":79},[36,9230,8239],{"class":46},[36,9232,8242],{"class":2443},[36,9234,9235],{"class":38,"line":85},[36,9236,2026],{"class":42},[36,9238,9239],{"class":38,"line":419},[36,9240,8265],{"class":42},[36,9242,9243,9245],{"class":38,"line":425},[36,9244,2465],{"class":46},[36,9246,8277],{"class":42},[36,9248,9249,9251],{"class":38,"line":431},[36,9250,2465],{"class":46},[36,9252,8289],{"class":42},[36,9254,9255],{"class":38,"line":437},[36,9256,4475],{"class":42},[36,9258,9259],{"class":38,"line":443},[36,9260,9261],{"class":69},"\u002F\u002F打印学生信息的函数\n",[36,9263,9264],{"class":38,"line":2092},[36,9265,9266],{"class":69},"\u002F\u002F值传递\n",[36,9268,9269,9271,9274,9276,9278,9280,9282],{"class":38,"line":2097},[36,9270,5844],{"class":46},[36,9272,9273],{"class":2443}," printStudent1",[36,9275,345],{"class":42},[36,9277,8239],{"class":46},[36,9279,8378],{"class":2443},[36,9281,8908],{"class":5696},[36,9283,63],{"class":42},[36,9285,9286],{"class":38,"line":2103},[36,9287,2026],{"class":42},[36,9289,9290,9292,9294,9297,9299,9302,9304,9307,9309,9311,9313,9316,9318],{"class":38,"line":2108},[36,9291,7009],{"class":42},[36,9293,1657],{"class":46},[36,9295,9296],{"class":42}," s.name ",[36,9298,1657],{"class":46},[36,9300,9301],{"class":405}," \" \"",[36,9303,1925],{"class":46},[36,9305,9306],{"class":42}," s.age ",[36,9308,1657],{"class":46},[36,9310,9301],{"class":405},[36,9312,1925],{"class":46},[36,9314,9315],{"class":42}," s.score ",[36,9317,1657],{"class":46},[36,9319,9320],{"class":42}," endl;\n",[36,9322,9323],{"class":38,"line":2122},[36,9324,2045],{"class":42},[36,9326,9327],{"class":38,"line":2127},[36,9328,9329],{"class":69},"\u002F\u002F地址传递\n",[36,9331,9332,9334,9337,9339,9341,9343,9345,9347],{"class":38,"line":2133},[36,9333,5844],{"class":46},[36,9335,9336],{"class":2443}," printStudent2",[36,9338,345],{"class":42},[36,9340,8239],{"class":46},[36,9342,8378],{"class":2443},[36,9344,6998],{"class":46},[36,9346,1308],{"class":5696},[36,9348,63],{"class":42},[36,9350,9351],{"class":38,"line":2154},[36,9352,2026],{"class":42},[36,9354,9355,9357,9359,9362,9364,9366,9368,9371,9373,9375,9377,9380,9382],{"class":38,"line":2159},[36,9356,7009],{"class":42},[36,9358,1657],{"class":46},[36,9360,9361],{"class":42}," s->name ",[36,9363,1657],{"class":46},[36,9365,9301],{"class":405},[36,9367,1925],{"class":46},[36,9369,9370],{"class":42}," s->age ",[36,9372,1657],{"class":46},[36,9374,9301],{"class":405},[36,9376,1925],{"class":46},[36,9378,9379],{"class":42}," s->score ",[36,9381,1657],{"class":46},[36,9383,9320],{"class":42},[36,9385,9386],{"class":38,"line":2173},[36,9387,2045],{"class":42},[36,9389,9390,9392,9394],{"class":38,"line":2178},[36,9391,631],{"class":46},[36,9393,2453],{"class":2443},[36,9395,2456],{"class":42},[36,9397,9398],{"class":38,"line":2207},[36,9399,2026],{"class":42},[36,9401,9402,9404,9406],{"class":38,"line":2212},[36,9403,8375],{"class":46},[36,9405,8378],{"class":2443},[36,9407,9408],{"class":42}," s;\n",[36,9410,9411,9414,9416,9419],{"class":38,"line":2229},[36,9412,9413],{"class":42},"    s.name ",[36,9415,47],{"class":46},[36,9417,9418],{"class":405}," \"张三\"",[36,9420,1774],{"class":42},[36,9422,9423,9426,9428,9431],{"class":38,"line":2234},[36,9424,9425],{"class":42},"    s.age ",[36,9427,47],{"class":46},[36,9429,9430],{"class":53}," 20",[36,9432,1774],{"class":42},[36,9434,9435,9438,9440,9443],{"class":38,"line":2239},[36,9436,9437],{"class":42},"    s.score ",[36,9439,47],{"class":46},[36,9441,9442],{"class":53}," 85",[36,9444,1774],{"class":42},[36,9446,9447,9449,9451,9454,9456],{"class":38,"line":2244},[36,9448,2031],{"class":42},[36,9450,1657],{"class":46},[36,9452,9453],{"class":405},"\"值传递:\"",[36,9455,1657],{"class":46},[36,9457,1679],{"class":42},[36,9459,9460,9463],{"class":38,"line":2258},[36,9461,9462],{"class":2443},"    printStudent1",[36,9464,9465],{"class":42},"(s);\n",[36,9467,9468,9470,9472,9475,9477],{"class":38,"line":2263},[36,9469,2031],{"class":42},[36,9471,1657],{"class":46},[36,9473,9474],{"class":405},"\"地址传递:\"",[36,9476,1657],{"class":46},[36,9478,1679],{"class":42},[36,9480,9481,9484,9486,9488],{"class":38,"line":3057},[36,9482,9483],{"class":2443},"    printStudent2",[36,9485,345],{"class":42},[36,9487,971],{"class":46},[36,9489,9490],{"class":42},"s); \n",[36,9492,9493,9495,9497],{"class":38,"line":3071},[36,9494,4570],{"class":46},[36,9496,4573],{"class":53},[36,9498,1774],{"class":42},[36,9500,9501],{"class":38,"line":3079},[36,9502,2045],{"class":42},[19,9504,9505],{},"注意：",[1620,9507,9508,9511],{},[582,9509,9510],{},"1.先定义结构体，不要在函数中写结构体的定义",[582,9512,9513],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9515,9517],{"id":9516},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9519,9520],{},"用const防止误操作",[26,9522,9524],{"className":617,"code":9523,"language":619,"meta":31,"style":31},"#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",[33,9525,9526,9532,9542,9548,9553,9557,9561,9567,9573,9577,9593,9597,9620,9624,9632,9636,9657,9664,9668],{"__ignoreMap":31},[36,9527,9528,9530],{"class":38,"line":39},[36,9529,2429],{"class":46},[36,9531,2432],{"class":405},[36,9533,9534,9536,9538,9540],{"class":38,"line":66},[36,9535,2437],{"class":46},[36,9537,2440],{"class":46},[36,9539,2444],{"class":2443},[36,9541,1774],{"class":42},[36,9543,9544,9546],{"class":38,"line":73},[36,9545,2429],{"class":46},[36,9547,8229],{"class":405},[36,9549,9550],{"class":38,"line":79},[36,9551,9552],{"class":42},"sctuct Student\n",[36,9554,9555],{"class":38,"line":85},[36,9556,2026],{"class":42},[36,9558,9559],{"class":38,"line":419},[36,9560,8265],{"class":42},[36,9562,9563,9565],{"class":38,"line":425},[36,9564,2465],{"class":46},[36,9566,8277],{"class":42},[36,9568,9569,9571],{"class":38,"line":431},[36,9570,2465],{"class":46},[36,9572,8289],{"class":42},[36,9574,9575],{"class":38,"line":437},[36,9576,4475],{"class":42},[36,9578,9579,9581,9584,9586,9589,9591],{"class":38,"line":443},[36,9580,5844],{"class":46},[36,9582,9583],{"class":2443}," printStudents",[36,9585,345],{"class":42},[36,9587,9588],{"class":2443},"student",[36,9590,8908],{"class":5696},[36,9592,63],{"class":42},[36,9594,9595],{"class":38,"line":2092},[36,9596,2026],{"class":42},[36,9598,9599,9601,9603,9606,9608,9611,9613,9616,9618],{"class":38,"line":2097},[36,9600,2031],{"class":42},[36,9602,1657],{"class":46},[36,9604,9605],{"class":42},"s.name",[36,9607,1657],{"class":46},[36,9609,9610],{"class":42},"s.age",[36,9612,1657],{"class":46},[36,9614,9615],{"class":42},"s.score",[36,9617,1657],{"class":46},[36,9619,1679],{"class":42},[36,9621,9622],{"class":38,"line":2103},[36,9623,2045],{"class":42},[36,9625,9626,9628,9630],{"class":38,"line":2108},[36,9627,631],{"class":46},[36,9629,2453],{"class":2443},[36,9631,6458],{"class":42},[36,9633,9634],{"class":38,"line":2122},[36,9635,2026],{"class":42},[36,9637,9638,9641,9643,9645,9647,9649,9651,9653,9655],{"class":38,"line":2127},[36,9639,9640],{"class":42},"    Student s",[36,9642,47],{"class":46},[36,9644,1509],{"class":42},[36,9646,8396],{"class":405},[36,9648,57],{"class":42},[36,9650,1263],{"class":53},[36,9652,57],{"class":42},[36,9654,1263],{"class":53},[36,9656,4475],{"class":42},[36,9658,9659,9662],{"class":38,"line":2133},[36,9660,9661],{"class":2443},"    printStudent",[36,9663,9465],{"class":42},[36,9665,9666],{"class":38,"line":2154},[36,9667,2880],{"emptyLinePlaceholder":553},[36,9669,9670],{"class":38,"line":2159},[36,9671,2045],{"class":42},[19,9673,9505],{},[1620,9675,9676,9679,9682],{},[582,9677,9678],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[582,9680,9681],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[582,9683,9684],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,9686,9688],{"className":617,"code":9687,"language":619,"meta":31,"style":31},"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",[33,9689,9690,9709,9713,9718,9738],{"__ignoreMap":31},[36,9691,9692,9694,9696,9698,9700,9703,9705,9707],{"class":38,"line":39},[36,9693,5844],{"class":46},[36,9695,9583],{"class":2443},[36,9697,345],{"class":42},[36,9699,7272],{"class":46},[36,9701,9702],{"class":2443}," student",[36,9704,6998],{"class":46},[36,9706,1308],{"class":5696},[36,9708,63],{"class":42},[36,9710,9711],{"class":38,"line":66},[36,9712,2026],{"class":42},[36,9714,9715],{"class":38,"line":73},[36,9716,9717],{"class":69},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,9719,9720,9722,9724,9726,9728,9730,9732,9734,9736],{"class":38,"line":79},[36,9721,2031],{"class":42},[36,9723,1657],{"class":46},[36,9725,9605],{"class":42},[36,9727,1657],{"class":46},[36,9729,9610],{"class":42},[36,9731,1657],{"class":46},[36,9733,9615],{"class":42},[36,9735,1657],{"class":46},[36,9737,1679],{"class":42},[36,9739,9740],{"class":38,"line":85},[36,9741,2045],{"class":42},[14,9743,9745],{"id":9744},"_47案例","4.7案例",[579,9747,9748],{},[582,9749,9750],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,9752,9754],{"className":617,"code":9753,"language":619,"meta":31,"style":31},"#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",[33,9755,9756,9762,9772,9778,9785,9789,9795,9799,9804,9810,9816,9820,9824,9830,9834,9839,9844,9857,9861,9866,9892,9896,9908,9935,9939,9951,9961,9965,9970,9999,10003,10015,10024,10051,10062,10072,10076,10080,10084,10089,10113,10117,10141,10145,10164,10190,10194,10219,10242,10266,10271,10276,10281,10290,10295,10301,10322,10328,10342,10348,10375,10384,10390,10398,10403],{"__ignoreMap":31},[36,9757,9758,9760],{"class":38,"line":39},[36,9759,2429],{"class":46},[36,9761,2432],{"class":405},[36,9763,9764,9766,9768,9770],{"class":38,"line":66},[36,9765,2437],{"class":46},[36,9767,2440],{"class":46},[36,9769,2444],{"class":2443},[36,9771,1774],{"class":42},[36,9773,9774,9776],{"class":38,"line":73},[36,9775,2429],{"class":46},[36,9777,8229],{"class":405},[36,9779,9780,9782],{"class":38,"line":79},[36,9781,2429],{"class":46},[36,9783,9784],{"class":405},"\u003Cctime>\n",[36,9786,9787],{"class":38,"line":85},[36,9788,9018],{"class":69},[36,9790,9791,9793],{"class":38,"line":419},[36,9792,8239],{"class":46},[36,9794,8242],{"class":2443},[36,9796,9797],{"class":38,"line":425},[36,9798,2026],{"class":42},[36,9800,9801],{"class":38,"line":431},[36,9802,9803],{"class":42},"    string sName;\n",[36,9805,9806,9808],{"class":38,"line":437},[36,9807,2465],{"class":46},[36,9809,8277],{"class":42},[36,9811,9812,9814],{"class":38,"line":443},[36,9813,2465],{"class":46},[36,9815,8289],{"class":42},[36,9817,9818],{"class":38,"line":2092},[36,9819,4475],{"class":42},[36,9821,9822],{"class":38,"line":2097},[36,9823,9055],{"class":69},[36,9825,9826,9828],{"class":38,"line":2103},[36,9827,8239],{"class":46},[36,9829,9062],{"class":2443},[36,9831,9832],{"class":38,"line":2108},[36,9833,2026],{"class":42},[36,9835,9836],{"class":38,"line":2122},[36,9837,9838],{"class":42},"    string tName;\n",[36,9840,9841],{"class":38,"line":2127},[36,9842,9843],{"class":69},"    \u002F\u002F学生数组\n",[36,9845,9846,9848,9850,9853,9855],{"class":38,"line":2133},[36,9847,8375],{"class":46},[36,9849,8378],{"class":2443},[36,9851,9852],{"class":42}," sArray[",[36,9854,938],{"class":53},[36,9856,5170],{"class":42},[36,9858,9859],{"class":38,"line":2154},[36,9860,4475],{"class":42},[36,9862,9863],{"class":38,"line":2159},[36,9864,9865],{"class":69},"\u002F\u002F给老师和学生赋值的函数\n",[36,9867,9868,9870,9873,9875,9877,9880,9883,9886,9888,9890],{"class":38,"line":2173},[36,9869,5844],{"class":46},[36,9871,9872],{"class":2443}," allocateSpace",[36,9874,345],{"class":42},[36,9876,8239],{"class":46},[36,9878,9879],{"class":2443}," Teacher",[36,9881,9882],{"class":5696}," tArray",[36,9884,9885],{"class":42},"[],",[36,9887,631],{"class":46},[36,9889,7811],{"class":5696},[36,9891,63],{"class":42},[36,9893,9894],{"class":38,"line":2178},[36,9895,2026],{"class":42},[36,9897,9898,9901,9903,9906],{"class":38,"line":2207},[36,9899,9900],{"class":42},"    string nameSeed",[36,9902,47],{"class":46},[36,9904,9905],{"class":405},"\"ABCDE\"",[36,9907,1774],{"class":42},[36,9909,9910,9912,9914,9916,9919,9921,9923,9926,9928,9931,9933],{"class":38,"line":2212},[36,9911,3681],{"class":46},[36,9913,2138],{"class":42},[36,9915,631],{"class":46},[36,9917,9918],{"class":42}," i ",[36,9920,47],{"class":46},[36,9922,4573],{"class":53},[36,9924,9925],{"class":42},"; i ",[36,9927,1523],{"class":46},[36,9929,9930],{"class":42}," len; i",[36,9932,2772],{"class":46},[36,9934,63],{"class":42},[36,9936,9937],{"class":38,"line":2229},[36,9938,2510],{"class":42},[36,9940,9941,9944,9946,9949],{"class":38,"line":2234},[36,9942,9943],{"class":42},"        tArray[i].tName ",[36,9945,47],{"class":46},[36,9947,9948],{"class":405}," \"Teacher_\"",[36,9950,1774],{"class":42},[36,9952,9953,9955,9958],{"class":38,"line":2239},[36,9954,9943],{"class":42},[36,9956,9957],{"class":46},"+=",[36,9959,9960],{"class":42},"nameSeed[i];\n",[36,9962,9963],{"class":38,"line":2244},[36,9964,2880],{"emptyLinePlaceholder":553},[36,9966,9967],{"class":38,"line":2258},[36,9968,9969],{"class":69},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,9971,9972,9974,9976,9978,9981,9983,9985,9988,9990,9992,9995,9997],{"class":38,"line":2263},[36,9973,3883],{"class":46},[36,9975,2138],{"class":42},[36,9977,631],{"class":46},[36,9979,9980],{"class":42}," j ",[36,9982,47],{"class":46},[36,9984,4573],{"class":53},[36,9986,9987],{"class":42},"; j ",[36,9989,1523],{"class":46},[36,9991,2628],{"class":53},[36,9993,9994],{"class":42},"; j",[36,9996,2772],{"class":46},[36,9998,63],{"class":42},[36,10000,10001],{"class":38,"line":3057},[36,10002,2990],{"class":42},[36,10004,10005,10008,10010,10013],{"class":38,"line":3071},[36,10006,10007],{"class":42},"            tArray[i].sArray[j].sName ",[36,10009,47],{"class":46},[36,10011,10012],{"class":405}," \"Student_\"",[36,10014,1774],{"class":42},[36,10016,10017,10019,10021],{"class":38,"line":3079},[36,10018,10007],{"class":42},[36,10020,9957],{"class":46},[36,10022,10023],{"class":42}," nameSeed[j];\n",[36,10025,10026,10029,10032,10034,10036,10038,10040,10042,10044,10046,10048],{"class":38,"line":3084},[36,10027,10028],{"class":46},"            int",[36,10030,10031],{"class":42}," random",[36,10033,47],{"class":46},[36,10035,2904],{"class":2443},[36,10037,2907],{"class":42},[36,10039,947],{"class":46},[36,10041,1520],{"class":53},[36,10043,1097],{"class":46},[36,10045,1018],{"class":53},[36,10047,680],{"class":42},[36,10049,10050],{"class":69},"\u002F\u002F40~99\n",[36,10052,10053,10056,10058,10060],{"class":38,"line":3090},[36,10054,10055],{"class":42},"            tArray[i].sArray[j].age ",[36,10057,47],{"class":46},[36,10059,9430],{"class":53},[36,10061,1774],{"class":42},[36,10063,10064,10067,10069],{"class":38,"line":3096},[36,10065,10066],{"class":42},"            tArray[i].sArray[j].score ",[36,10068,47],{"class":46},[36,10070,10071],{"class":42}," random;\n",[36,10073,10074],{"class":38,"line":3101},[36,10075,3009],{"class":42},[36,10077,10078],{"class":38,"line":8428},[36,10079,2667],{"class":42},[36,10081,10082],{"class":38,"line":8452},[36,10083,2045],{"class":42},[36,10085,10086],{"class":38,"line":8457},[36,10087,10088],{"class":69},"\u002F\u002F打印所有信息的函数\n",[36,10090,10091,10093,10096,10098,10100,10102,10104,10107,10109,10111],{"class":38,"line":8463},[36,10092,5844],{"class":46},[36,10094,10095],{"class":2443}," printInfo",[36,10097,345],{"class":42},[36,10099,8239],{"class":46},[36,10101,9879],{"class":2443},[36,10103,9882],{"class":5696},[36,10105,10106],{"class":42},"[], ",[36,10108,631],{"class":46},[36,10110,7811],{"class":5696},[36,10112,63],{"class":42},[36,10114,10115],{"class":38,"line":8490},[36,10116,2026],{"class":42},[36,10118,10119,10121,10123,10125,10127,10129,10131,10133,10135,10137,10139],{"class":38,"line":8495},[36,10120,3681],{"class":46},[36,10122,2138],{"class":42},[36,10124,631],{"class":46},[36,10126,9918],{"class":42},[36,10128,47],{"class":46},[36,10130,4573],{"class":53},[36,10132,9925],{"class":42},[36,10134,1523],{"class":46},[36,10136,9930],{"class":42},[36,10138,2772],{"class":46},[36,10140,63],{"class":42},[36,10142,10143],{"class":38,"line":8501},[36,10144,2510],{"class":42},[36,10146,10147,10150,10152,10155,10157,10160,10162],{"class":38,"line":8513},[36,10148,10149],{"class":42},"        cout ",[36,10151,1657],{"class":46},[36,10153,10154],{"class":405}," \"Teacher: \"",[36,10156,1925],{"class":46},[36,10158,10159],{"class":42}," tArray[i].tName ",[36,10161,1657],{"class":46},[36,10163,9320],{"class":42},[36,10165,10166,10168,10170,10172,10174,10176,10178,10180,10182,10184,10186,10188],{"class":38,"line":8525},[36,10167,3883],{"class":46},[36,10169,2138],{"class":42},[36,10171,631],{"class":46},[36,10173,9980],{"class":42},[36,10175,47],{"class":46},[36,10177,4573],{"class":53},[36,10179,9987],{"class":42},[36,10181,1523],{"class":46},[36,10183,2628],{"class":53},[36,10185,9994],{"class":42},[36,10187,2772],{"class":46},[36,10189,63],{"class":42},[36,10191,10192],{"class":38,"line":8537},[36,10193,2990],{"class":42},[36,10195,10197,10200,10202,10205,10207,10210,10212,10215,10217],{"class":38,"line":10196},47,[36,10198,10199],{"class":42},"            cout ",[36,10201,1657],{"class":46},[36,10203,10204],{"class":405}," \"",[36,10206,1714],{"class":53},[36,10208,10209],{"class":405},"Student: \"",[36,10211,1925],{"class":46},[36,10213,10214],{"class":42}," tArray[i].sArray[j].sName",[36,10216,1657],{"class":46},[36,10218,1679],{"class":42},[36,10220,10222,10224,10226,10228,10230,10233,10235,10238,10240],{"class":38,"line":10221},48,[36,10223,10199],{"class":42},[36,10225,1657],{"class":46},[36,10227,10204],{"class":405},[36,10229,1714],{"class":53},[36,10231,10232],{"class":405},"Age: \"",[36,10234,1925],{"class":46},[36,10236,10237],{"class":42}," tArray[i].sArray[j].age ",[36,10239,1657],{"class":46},[36,10241,9320],{"class":42},[36,10243,10245,10247,10249,10251,10253,10256,10258,10261,10263],{"class":38,"line":10244},49,[36,10246,10199],{"class":42},[36,10248,1657],{"class":46},[36,10250,10204],{"class":405},[36,10252,1714],{"class":53},[36,10254,10255],{"class":405},"Score: \"",[36,10257,1925],{"class":46},[36,10259,10260],{"class":42}," tArray[i].sArray[j].score ",[36,10262,1657],{"class":46},[36,10264,10265],{"class":42}," endl;   \n",[36,10267,10269],{"class":38,"line":10268},50,[36,10270,3009],{"class":42},[36,10272,10274],{"class":38,"line":10273},51,[36,10275,2667],{"class":42},[36,10277,10279],{"class":38,"line":10278},52,[36,10280,2045],{"class":42},[36,10282,10284,10286,10288],{"class":38,"line":10283},53,[36,10285,631],{"class":46},[36,10287,2453],{"class":2443},[36,10289,2456],{"class":42},[36,10291,10293],{"class":38,"line":10292},54,[36,10294,2026],{"class":42},[36,10296,10298],{"class":38,"line":10297},55,[36,10299,10300],{"class":69},"    \u002F\u002F随机数种子\n",[36,10302,10304,10306,10308,10310,10312,10314,10316,10318,10320],{"class":38,"line":10303},56,[36,10305,2853],{"class":2443},[36,10307,2856],{"class":42},[36,10309,2859],{"class":46},[36,10311,2862],{"class":46},[36,10313,231],{"class":42},[36,10315,2867],{"class":2443},[36,10317,345],{"class":42},[36,10319,2872],{"class":53},[36,10321,2875],{"class":42},[36,10323,10325],{"class":38,"line":10324},57,[36,10326,10327],{"class":69},"    \u002F\u002F1.创建3名老师的数组\n",[36,10329,10331,10333,10335,10338,10340],{"class":38,"line":10330},58,[36,10332,8375],{"class":46},[36,10334,9879],{"class":2443},[36,10336,10337],{"class":42}," tArray[",[36,10339,127],{"class":53},[36,10341,5170],{"class":42},[36,10343,10345],{"class":38,"line":10344},59,[36,10346,10347],{"class":69},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,10349,10351,10353,10356,10358,10361,10364,10366,10368,10371,10373],{"class":38,"line":10350},60,[36,10352,2465],{"class":46},[36,10354,10355],{"class":42}," len ",[36,10357,47],{"class":46},[36,10359,10360],{"class":46}," sizeof",[36,10362,10363],{"class":42},"(tArray) ",[36,10365,1197],{"class":46},[36,10367,10360],{"class":46},[36,10369,10370],{"class":42},"(tArray[",[36,10372,812],{"class":53},[36,10374,4336],{"class":42},[36,10376,10378,10381],{"class":38,"line":10377},61,[36,10379,10380],{"class":2443},"    allocateSpace",[36,10382,10383],{"class":42},"(tArray, len);\n",[36,10385,10387],{"class":38,"line":10386},62,[36,10388,10389],{"class":69},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,10391,10393,10396],{"class":38,"line":10392},63,[36,10394,10395],{"class":2443},"    printInfo",[36,10397,10383],{"class":42},[36,10399,10401],{"class":38,"line":10400},64,[36,10402,2880],{"emptyLinePlaceholder":553},[36,10404,10406],{"class":38,"line":10405},65,[36,10407,2045],{"class":42},[579,10409,10410],{"start":66},[582,10411,10412,10415],{},[770,10413,10414],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10417,10418],{},"五名英雄信息如下：",[26,10420,10424],{"className":10421,"code":10422,"language":10423,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[33,10425,10426,10444,10461,10478,10495],{"__ignoreMap":31},[36,10427,10428,10430,10433,10435,10437,10439,10442],{"class":38,"line":39},[36,10429,5397],{"class":42},[36,10431,10432],{"class":405},"\"刘备\"",[36,10434,57],{"class":42},[36,10436,1388],{"class":53},[36,10438,57],{"class":42},[36,10440,10441],{"class":405},"\"男\"",[36,10443,5410],{"class":42},[36,10445,10446,10448,10451,10453,10455,10457,10459],{"class":38,"line":66},[36,10447,5397],{"class":42},[36,10449,10450],{"class":405},"\"关羽\"",[36,10452,57],{"class":42},[36,10454,1363],{"class":53},[36,10456,57],{"class":42},[36,10458,10441],{"class":405},[36,10460,5410],{"class":42},[36,10462,10463,10465,10468,10470,10472,10474,10476],{"class":38,"line":73},[36,10464,5397],{"class":42},[36,10466,10467],{"class":405},"\"张飞\"",[36,10469,57],{"class":42},[36,10471,1313],{"class":53},[36,10473,57],{"class":42},[36,10475,10441],{"class":405},[36,10477,5410],{"class":42},[36,10479,10480,10482,10485,10487,10489,10491,10493],{"class":38,"line":79},[36,10481,5397],{"class":42},[36,10483,10484],{"class":405},"\"赵云\"",[36,10486,57],{"class":42},[36,10488,1338],{"class":53},[36,10490,57],{"class":42},[36,10492,10441],{"class":405},[36,10494,5410],{"class":42},[36,10496,10497,10499,10502,10504,10506,10508,10511],{"class":38,"line":85},[36,10498,5397],{"class":42},[36,10500,10501],{"class":405},"\"貂蝉\"",[36,10503,57],{"class":42},[36,10505,1288],{"class":53},[36,10507,57],{"class":42},[36,10509,10510],{"class":405},"\"女\"",[36,10512,5410],{"class":42},[19,10514,10515],{},"代码：",[26,10517,10519],{"className":617,"code":10518,"language":619,"meta":31,"style":31},"#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",[33,10520,10521,10527,10537,10543,10550,10554,10558,10564,10569,10573,10578,10601,10605,10630,10634,10667,10672,10701,10706,10721,10747,10767,10772,10777,10781,10785,10790,10812,10816,10840,10844,10906,10910,10914,10922,10926,10931,10942,10946,10962,10978,10994,11010,11026,11030,11050,11072,11077,11090,11097,11102,11108,11113,11126,11132],{"__ignoreMap":31},[36,10522,10523,10525],{"class":38,"line":39},[36,10524,2429],{"class":46},[36,10526,2432],{"class":405},[36,10528,10529,10531,10533,10535],{"class":38,"line":66},[36,10530,2437],{"class":46},[36,10532,2440],{"class":46},[36,10534,2444],{"class":2443},[36,10536,1774],{"class":42},[36,10538,10539,10541],{"class":38,"line":73},[36,10540,2429],{"class":46},[36,10542,8229],{"class":405},[36,10544,10545,10547],{"class":38,"line":79},[36,10546,8239],{"class":46},[36,10548,10549],{"class":2443}," Sanguo\n",[36,10551,10552],{"class":38,"line":85},[36,10553,2026],{"class":42},[36,10555,10556],{"class":38,"line":419},[36,10557,8265],{"class":42},[36,10559,10560,10562],{"class":38,"line":425},[36,10561,2465],{"class":46},[36,10563,8277],{"class":42},[36,10565,10566],{"class":38,"line":431},[36,10567,10568],{"class":42},"    string gender;\n",[36,10570,10571],{"class":38,"line":437},[36,10572,4475],{"class":42},[36,10574,10575],{"class":38,"line":443},[36,10576,10577],{"class":69},"\u002F\u002F定义排序函数\n",[36,10579,10580,10582,10584,10586,10589,10591,10593,10595,10597,10599],{"class":38,"line":2092},[36,10581,5844],{"class":46},[36,10583,7796],{"class":2443},[36,10585,345],{"class":42},[36,10587,10588],{"class":2443},"Sanguo",[36,10590,6998],{"class":46},[36,10592,1308],{"class":5696},[36,10594,57],{"class":42},[36,10596,631],{"class":46},[36,10598,7811],{"class":5696},[36,10600,63],{"class":42},[36,10602,10603],{"class":38,"line":2097},[36,10604,2026],{"class":42},[36,10606,10607,10609,10611,10613,10615,10617,10619,10621,10623,10626,10628],{"class":38,"line":2103},[36,10608,3681],{"class":46},[36,10610,345],{"class":42},[36,10612,631],{"class":46},[36,10614,3512],{"class":42},[36,10616,47],{"class":46},[36,10618,812],{"class":53},[36,10620,3519],{"class":42},[36,10622,1523],{"class":46},[36,10624,10625],{"class":42},"len;i",[36,10627,2772],{"class":46},[36,10629,63],{"class":42},[36,10631,10632],{"class":38,"line":2108},[36,10633,2510],{"class":42},[36,10635,10636,10639,10641,10643,10645,10647,10649,10651,10653,10655,10657,10659,10661,10663,10665],{"class":38,"line":2122},[36,10637,10638],{"class":46},"     for",[36,10640,2138],{"class":42},[36,10642,631],{"class":46},[36,10644,3890],{"class":42},[36,10646,47],{"class":46},[36,10648,812],{"class":53},[36,10650,3897],{"class":42},[36,10652,1523],{"class":46},[36,10654,7838],{"class":42},[36,10656,173],{"class":46},[36,10658,54],{"class":53},[36,10660,173],{"class":46},[36,10662,4030],{"class":42},[36,10664,2772],{"class":46},[36,10666,63],{"class":42},[36,10668,10669],{"class":38,"line":2127},[36,10670,10671],{"class":42},"     {\n",[36,10673,10674,10677,10680,10682,10685,10687,10690,10692,10694,10696,10698],{"class":38,"line":2133},[36,10675,10676],{"class":46},"         if",[36,10678,10679],{"class":42}," ((s",[36,10681,1097],{"class":46},[36,10683,10684],{"class":42},"j)->age ",[36,10686,1573],{"class":46},[36,10688,10689],{"class":42}," (s",[36,10691,1097],{"class":46},[36,10693,1083],{"class":42},[36,10695,1097],{"class":46},[36,10697,54],{"class":53},[36,10699,10700],{"class":42},")->age)\n",[36,10702,10703],{"class":38,"line":2154},[36,10704,10705],{"class":42},"         {\n",[36,10707,10708,10711,10713,10716,10718],{"class":38,"line":2159},[36,10709,10710],{"class":42},"             Sanguo temp",[36,10712,7633],{"class":46},[36,10714,10715],{"class":42},"(s",[36,10717,1097],{"class":46},[36,10719,10720],{"class":42},"j);\n",[36,10722,10723,10726,10728,10730,10733,10735,10737,10739,10741,10743,10745],{"class":38,"line":2173},[36,10724,10725],{"class":46},"             *",[36,10727,10715],{"class":42},[36,10729,1097],{"class":46},[36,10731,10732],{"class":42},"j)",[36,10734,7633],{"class":46},[36,10736,10715],{"class":42},[36,10738,1097],{"class":46},[36,10740,1083],{"class":42},[36,10742,1097],{"class":46},[36,10744,54],{"class":53},[36,10746,3199],{"class":42},[36,10748,10749,10751,10753,10755,10757,10759,10761,10763,10765],{"class":38,"line":2178},[36,10750,10725],{"class":46},[36,10752,10715],{"class":42},[36,10754,1097],{"class":46},[36,10756,1083],{"class":42},[36,10758,1097],{"class":46},[36,10760,54],{"class":53},[36,10762,231],{"class":42},[36,10764,47],{"class":46},[36,10766,4760],{"class":42},[36,10768,10769],{"class":38,"line":2207},[36,10770,10771],{"class":42},"         }\n",[36,10773,10774],{"class":38,"line":2212},[36,10775,10776],{"class":42},"     }\n",[36,10778,10779],{"class":38,"line":2229},[36,10780,2667],{"class":42},[36,10782,10783],{"class":38,"line":2234},[36,10784,2045],{"class":42},[36,10786,10787],{"class":38,"line":2239},[36,10788,10789],{"class":69},"\u002F\u002F定义打印函数\n",[36,10791,10792,10794,10796,10798,10800,10802,10804,10806,10808,10810],{"class":38,"line":2244},[36,10793,5844],{"class":46},[36,10795,10095],{"class":2443},[36,10797,345],{"class":42},[36,10799,10588],{"class":2443},[36,10801,6998],{"class":46},[36,10803,1308],{"class":5696},[36,10805,57],{"class":42},[36,10807,631],{"class":46},[36,10809,7811],{"class":5696},[36,10811,63],{"class":42},[36,10813,10814],{"class":38,"line":2258},[36,10815,2026],{"class":42},[36,10817,10818,10820,10822,10824,10826,10828,10830,10832,10834,10836,10838],{"class":38,"line":2263},[36,10819,3681],{"class":46},[36,10821,2138],{"class":42},[36,10823,631],{"class":46},[36,10825,3512],{"class":42},[36,10827,47],{"class":46},[36,10829,812],{"class":53},[36,10831,3519],{"class":42},[36,10833,1523],{"class":46},[36,10835,10625],{"class":42},[36,10837,2772],{"class":46},[36,10839,63],{"class":42},[36,10841,10842],{"class":38,"line":3057},[36,10843,2510],{"class":42},[36,10845,10846,10848,10850,10852,10854,10857,10859,10861,10863,10866,10868,10870,10872,10875,10877,10879,10881,10884,10886,10888,10890,10893,10895,10897,10899,10902,10904],{"class":38,"line":3071},[36,10847,3931],{"class":42},[36,10849,1657],{"class":46},[36,10851,870],{"class":405},[36,10853,1714],{"class":53},[36,10855,10856],{"class":405},"姓名：\"",[36,10858,1657],{"class":46},[36,10860,10715],{"class":42},[36,10862,1097],{"class":46},[36,10864,10865],{"class":42},"i)->name",[36,10867,1657],{"class":46},[36,10869,870],{"class":405},[36,10871,1714],{"class":53},[36,10873,10874],{"class":405},"年龄：\"",[36,10876,1657],{"class":46},[36,10878,10715],{"class":42},[36,10880,1097],{"class":46},[36,10882,10883],{"class":42},"i)->age",[36,10885,1657],{"class":46},[36,10887,870],{"class":405},[36,10889,1714],{"class":53},[36,10891,10892],{"class":405},"性别：\"",[36,10894,1657],{"class":46},[36,10896,10715],{"class":42},[36,10898,1097],{"class":46},[36,10900,10901],{"class":42},"i)->gender",[36,10903,1657],{"class":46},[36,10905,1679],{"class":42},[36,10907,10908],{"class":38,"line":3079},[36,10909,2667],{"class":42},[36,10911,10912],{"class":38,"line":3084},[36,10913,2045],{"class":42},[36,10915,10916,10918,10920],{"class":38,"line":3090},[36,10917,631],{"class":46},[36,10919,2453],{"class":2443},[36,10921,2456],{"class":42},[36,10923,10924],{"class":38,"line":3096},[36,10925,2026],{"class":42},[36,10927,10928],{"class":38,"line":3101},[36,10929,10930],{"class":69},"    \u002F\u002F定义结构体变量\n",[36,10932,10933,10936,10938,10940],{"class":38,"line":8428},[36,10934,10935],{"class":42},"    Sanguo s1[",[36,10937,938],{"class":53},[36,10939,1553],{"class":42},[36,10941,5388],{"class":46},[36,10943,10944],{"class":38,"line":8452},[36,10945,2510],{"class":42},[36,10947,10948,10950,10952,10954,10956,10958,10960],{"class":38,"line":8457},[36,10949,5397],{"class":42},[36,10951,10432],{"class":405},[36,10953,57],{"class":42},[36,10955,1388],{"class":53},[36,10957,57],{"class":42},[36,10959,10441],{"class":405},[36,10961,5410],{"class":42},[36,10963,10964,10966,10968,10970,10972,10974,10976],{"class":38,"line":8463},[36,10965,5397],{"class":42},[36,10967,10450],{"class":405},[36,10969,57],{"class":42},[36,10971,1363],{"class":53},[36,10973,57],{"class":42},[36,10975,10441],{"class":405},[36,10977,5410],{"class":42},[36,10979,10980,10982,10984,10986,10988,10990,10992],{"class":38,"line":8490},[36,10981,5397],{"class":42},[36,10983,10467],{"class":405},[36,10985,57],{"class":42},[36,10987,1313],{"class":53},[36,10989,57],{"class":42},[36,10991,10441],{"class":405},[36,10993,5410],{"class":42},[36,10995,10996,10998,11000,11002,11004,11006,11008],{"class":38,"line":8495},[36,10997,5397],{"class":42},[36,10999,10484],{"class":405},[36,11001,57],{"class":42},[36,11003,1338],{"class":53},[36,11005,57],{"class":42},[36,11007,10441],{"class":405},[36,11009,5410],{"class":42},[36,11011,11012,11014,11016,11018,11020,11022,11024],{"class":38,"line":8501},[36,11013,5397],{"class":42},[36,11015,10501],{"class":405},[36,11017,57],{"class":42},[36,11019,1288],{"class":53},[36,11021,57],{"class":42},[36,11023,10510],{"class":405},[36,11025,5410],{"class":42},[36,11027,11028],{"class":38,"line":8513},[36,11029,5431],{"class":42},[36,11031,11032,11034,11036,11038,11041,11043,11046,11048],{"class":38,"line":8525},[36,11033,2465],{"class":46},[36,11035,7811],{"class":42},[36,11037,4683],{"class":46},[36,11039,11040],{"class":42},"(s1)",[36,11042,4689],{"class":46},[36,11044,11045],{"class":42},"(s1[",[36,11047,812],{"class":53},[36,11049,4336],{"class":42},[36,11051,11052,11055,11057,11060,11062,11065,11068,11070],{"class":38,"line":8537},[36,11053,11054],{"class":42},"    Sanguo ",[36,11056,1071],{"class":46},[36,11058,11059],{"class":42},"s ",[36,11061,47],{"class":46},[36,11063,11064],{"class":46}," &",[36,11066,11067],{"class":42},"s1[",[36,11069,812],{"class":53},[36,11071,5170],{"class":42},[36,11073,11074],{"class":38,"line":10196},[36,11075,11076],{"class":69},"    \u002F\u002F排序前：\n",[36,11078,11079,11081,11083,11086,11088],{"class":38,"line":10221},[36,11080,7009],{"class":42},[36,11082,1657],{"class":46},[36,11084,11085],{"class":405}," \"排序前：\"",[36,11087,1925],{"class":46},[36,11089,9320],{"class":42},[36,11091,11092,11094],{"class":38,"line":10244},[36,11093,10395],{"class":2443},[36,11095,11096],{"class":42},"(s,len);\n",[36,11098,11099],{"class":38,"line":10268},[36,11100,11101],{"class":69},"    \u002F\u002F调用排序函数\n",[36,11103,11104,11106],{"class":38,"line":10273},[36,11105,8078],{"class":2443},[36,11107,11096],{"class":42},[36,11109,11110],{"class":38,"line":10278},[36,11111,11112],{"class":69},"    \u002F\u002F排序后\n",[36,11114,11115,11117,11119,11122,11124],{"class":38,"line":10283},[36,11116,7009],{"class":42},[36,11118,1657],{"class":46},[36,11120,11121],{"class":405}," \"排序后：\"",[36,11123,1925],{"class":46},[36,11125,9320],{"class":42},[36,11127,11128,11130],{"class":38,"line":10292},[36,11129,10395],{"class":2443},[36,11131,11096],{"class":42},[36,11133,11134],{"class":38,"line":10297},[36,11135,2045],{"class":42},[19,11137,11138,11139,11141],{},"注意：使用指针时直接用传首地址**&s",[36,11140,812],{},"**",[539,11143,11144],{},"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":31,"searchDepth":66,"depth":66,"links":11146},[11147,11148,11149,11150,11151,11152,11153],{"id":8183,"depth":66,"text":8184},{"id":8545,"depth":66,"text":8546},{"id":8814,"depth":66,"text":8815},{"id":8979,"depth":66,"text":8980},{"id":9195,"depth":66,"text":9196},{"id":9516,"depth":66,"text":9517},{"id":9744,"depth":66,"text":9745},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8172,"description":8180},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11160,"title":11161,"body":11162,"description":31,"extension":551,"meta":12505,"navigation":553,"path":12506,"seo":12507,"stem":12508,"__hash__":12509},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11163,"toc":12499},[11164,11167,11171,11177,11191,11196,11199,11203,11210,11216,11219,11226,11232,11237,11240,11243,11246,11810,11813,11827,11831,11836,11852,11992,11995,12001,12004,12009,12017,12125,12128,12133,12136,12141,12144,12150,12153,12496],[10,11165,11161],{"id":11166},"_5程序内存模型",[14,11168,11170],{"id":11169},"_51内存分区模型","5.1内存分区模型",[19,11172,11173,11174],{},"C++程序在执行时，将内存大方向划分为",[770,11175,11176],{},"4个区域",[1620,11178,11179,11182,11185,11188],{},[582,11180,11181],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[582,11183,11184],{},"全局区：存放全局变量和静态变量以及常量",[582,11186,11187],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[582,11189,11190],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11192,11193],{},[770,11194,11195],{},"内存四区意义：",[19,11197,11198],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[596,11200,11202],{"id":11201},"_511程序运行前","5.1.1程序运行前",[19,11204,11205,11206,11209],{},"​\t在程序编译后，生成了exe可执行程序，",[770,11207,11208],{},"未执行该程序前","分为两个区域",[19,11211,11212,11213],{},"​\t",[770,11214,11215],{},"代码区：",[19,11217,11218],{},"​\t\t存放 CPU 执行的机器指令",[19,11220,11221,11222,11225],{},"​\t\t代码区是",[770,11223,11224],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11227,11221,11228,11231],{},[770,11229,11230],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11233,11212,11234],{},[770,11235,11236],{},"全局区：",[19,11238,11239],{},"​\t\t全局变量和静态变量存放在此.",[19,11241,11242],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11244,11245],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,11247,11249],{"className":617,"code":11248,"language":619,"meta":31,"style":31},"\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",[33,11250,11251,11256,11269,11282,11286,11291,11306,11321,11325,11334,11338,11343,11356,11369,11373,11378,11404,11430,11434,11461,11487,11491,11496,11512,11527,11531,11557,11583,11587,11612,11637,11641,11667,11693,11697,11713,11728,11754,11780,11784,11794,11798,11806],{"__ignoreMap":31},[36,11252,11253],{"class":38,"line":39},[36,11254,11255],{"class":69},"\u002F\u002F全局变量\n",[36,11257,11258,11260,11263,11265,11267],{"class":38,"line":66},[36,11259,631],{"class":46},[36,11261,11262],{"class":42}," g_a ",[36,11264,47],{"class":46},[36,11266,2518],{"class":53},[36,11268,1774],{"class":42},[36,11270,11271,11273,11276,11278,11280],{"class":38,"line":73},[36,11272,631],{"class":46},[36,11274,11275],{"class":42}," g_b ",[36,11277,47],{"class":46},[36,11279,2518],{"class":53},[36,11281,1774],{"class":42},[36,11283,11284],{"class":38,"line":79},[36,11285,2880],{"emptyLinePlaceholder":553},[36,11287,11288],{"class":38,"line":85},[36,11289,11290],{"class":69},"\u002F\u002F全局常量\n",[36,11292,11293,11295,11297,11300,11302,11304],{"class":38,"line":419},[36,11294,7272],{"class":46},[36,11296,2862],{"class":46},[36,11298,11299],{"class":42}," c_g_a ",[36,11301,47],{"class":46},[36,11303,2518],{"class":53},[36,11305,1774],{"class":42},[36,11307,11308,11310,11312,11315,11317,11319],{"class":38,"line":425},[36,11309,7272],{"class":46},[36,11311,2862],{"class":46},[36,11313,11314],{"class":42}," c_g_b ",[36,11316,47],{"class":46},[36,11318,2518],{"class":53},[36,11320,1774],{"class":42},[36,11322,11323],{"class":38,"line":431},[36,11324,2880],{"emptyLinePlaceholder":553},[36,11326,11327,11329,11331],{"class":38,"line":437},[36,11328,631],{"class":46},[36,11330,2453],{"class":2443},[36,11332,11333],{"class":42},"() {\n",[36,11335,11336],{"class":38,"line":443},[36,11337,2880],{"emptyLinePlaceholder":553},[36,11339,11340],{"class":38,"line":2092},[36,11341,11342],{"class":69},"    \u002F\u002F局部变量\n",[36,11344,11345,11347,11350,11352,11354],{"class":38,"line":2097},[36,11346,2465],{"class":46},[36,11348,11349],{"class":42}," a ",[36,11351,47],{"class":46},[36,11353,2518],{"class":53},[36,11355,1774],{"class":42},[36,11357,11358,11360,11363,11365,11367],{"class":38,"line":2103},[36,11359,2465],{"class":46},[36,11361,11362],{"class":42}," b ",[36,11364,47],{"class":46},[36,11366,2518],{"class":53},[36,11368,1774],{"class":42},[36,11370,11371],{"class":38,"line":2108},[36,11372,2880],{"emptyLinePlaceholder":553},[36,11374,11375],{"class":38,"line":2122},[36,11376,11377],{"class":69},"    \u002F\u002F打印地址\n",[36,11379,11380,11382,11384,11387,11389,11391,11393,11395,11397,11400,11402],{"class":38,"line":2127},[36,11381,7009],{"class":42},[36,11383,1657],{"class":46},[36,11385,11386],{"class":405}," \"局部变量a地址为： \"",[36,11388,1925],{"class":46},[36,11390,2138],{"class":42},[36,11392,631],{"class":46},[36,11394,231],{"class":42},[36,11396,971],{"class":46},[36,11398,11399],{"class":42},"a ",[36,11401,1657],{"class":46},[36,11403,9320],{"class":42},[36,11405,11406,11408,11410,11413,11415,11417,11419,11421,11423,11426,11428],{"class":38,"line":2133},[36,11407,7009],{"class":42},[36,11409,1657],{"class":46},[36,11411,11412],{"class":405}," \"局部变量b地址为： \"",[36,11414,1925],{"class":46},[36,11416,2138],{"class":42},[36,11418,631],{"class":46},[36,11420,231],{"class":42},[36,11422,971],{"class":46},[36,11424,11425],{"class":42},"b ",[36,11427,1657],{"class":46},[36,11429,9320],{"class":42},[36,11431,11432],{"class":38,"line":2154},[36,11433,2880],{"emptyLinePlaceholder":553},[36,11435,11436,11438,11440,11443,11445,11448,11450,11452,11454,11457,11459],{"class":38,"line":2159},[36,11437,7009],{"class":42},[36,11439,1657],{"class":46},[36,11441,11442],{"class":405}," \"全局变量g_a地址为： \"",[36,11444,1925],{"class":46},[36,11446,11447],{"class":42},"  (",[36,11449,631],{"class":46},[36,11451,231],{"class":42},[36,11453,971],{"class":46},[36,11455,11456],{"class":42},"g_a ",[36,11458,1657],{"class":46},[36,11460,9320],{"class":42},[36,11462,11463,11465,11467,11470,11472,11474,11476,11478,11480,11483,11485],{"class":38,"line":2173},[36,11464,7009],{"class":42},[36,11466,1657],{"class":46},[36,11468,11469],{"class":405}," \"全局变量g_b地址为： \"",[36,11471,1925],{"class":46},[36,11473,11447],{"class":42},[36,11475,631],{"class":46},[36,11477,231],{"class":42},[36,11479,971],{"class":46},[36,11481,11482],{"class":42},"g_b ",[36,11484,1657],{"class":46},[36,11486,9320],{"class":42},[36,11488,11489],{"class":38,"line":2178},[36,11490,2880],{"emptyLinePlaceholder":553},[36,11492,11493],{"class":38,"line":2207},[36,11494,11495],{"class":69},"    \u002F\u002F静态变量\n",[36,11497,11498,11501,11503,11506,11508,11510],{"class":38,"line":2212},[36,11499,11500],{"class":46},"    static",[36,11502,2862],{"class":46},[36,11504,11505],{"class":42}," s_a ",[36,11507,47],{"class":46},[36,11509,2518],{"class":53},[36,11511,1774],{"class":42},[36,11513,11514,11516,11518,11521,11523,11525],{"class":38,"line":2229},[36,11515,11500],{"class":46},[36,11517,2862],{"class":46},[36,11519,11520],{"class":42}," s_b ",[36,11522,47],{"class":46},[36,11524,2518],{"class":53},[36,11526,1774],{"class":42},[36,11528,11529],{"class":38,"line":2234},[36,11530,2880],{"emptyLinePlaceholder":553},[36,11532,11533,11535,11537,11540,11542,11544,11546,11548,11550,11553,11555],{"class":38,"line":2239},[36,11534,7009],{"class":42},[36,11536,1657],{"class":46},[36,11538,11539],{"class":405}," \"静态变量s_a地址为： \"",[36,11541,1925],{"class":46},[36,11543,2138],{"class":42},[36,11545,631],{"class":46},[36,11547,231],{"class":42},[36,11549,971],{"class":46},[36,11551,11552],{"class":42},"s_a ",[36,11554,1657],{"class":46},[36,11556,9320],{"class":42},[36,11558,11559,11561,11563,11566,11568,11570,11572,11574,11576,11579,11581],{"class":38,"line":2244},[36,11560,7009],{"class":42},[36,11562,1657],{"class":46},[36,11564,11565],{"class":405}," \"静态变量s_b地址为： \"",[36,11567,1925],{"class":46},[36,11569,2138],{"class":42},[36,11571,631],{"class":46},[36,11573,231],{"class":42},[36,11575,971],{"class":46},[36,11577,11578],{"class":42},"s_b ",[36,11580,1657],{"class":46},[36,11582,9320],{"class":42},[36,11584,11585],{"class":38,"line":2258},[36,11586,2880],{"emptyLinePlaceholder":553},[36,11588,11589,11591,11593,11596,11598,11600,11602,11604,11606,11608,11610],{"class":38,"line":2263},[36,11590,7009],{"class":42},[36,11592,1657],{"class":46},[36,11594,11595],{"class":405}," \"字符串常量地址为： \"",[36,11597,1925],{"class":46},[36,11599,2138],{"class":42},[36,11601,631],{"class":46},[36,11603,231],{"class":42},[36,11605,971],{"class":46},[36,11607,1674],{"class":405},[36,11609,1925],{"class":46},[36,11611,9320],{"class":42},[36,11613,11614,11616,11618,11620,11622,11624,11626,11628,11630,11633,11635],{"class":38,"line":3057},[36,11615,7009],{"class":42},[36,11617,1657],{"class":46},[36,11619,11595],{"class":405},[36,11621,1925],{"class":46},[36,11623,2138],{"class":42},[36,11625,631],{"class":46},[36,11627,231],{"class":42},[36,11629,971],{"class":46},[36,11631,11632],{"class":405},"\"hello world1\"",[36,11634,1925],{"class":46},[36,11636,9320],{"class":42},[36,11638,11639],{"class":38,"line":3071},[36,11640,2880],{"emptyLinePlaceholder":553},[36,11642,11643,11645,11647,11650,11652,11654,11656,11658,11660,11663,11665],{"class":38,"line":3079},[36,11644,7009],{"class":42},[36,11646,1657],{"class":46},[36,11648,11649],{"class":405}," \"全局常量c_g_a地址为： \"",[36,11651,1925],{"class":46},[36,11653,2138],{"class":42},[36,11655,631],{"class":46},[36,11657,231],{"class":42},[36,11659,971],{"class":46},[36,11661,11662],{"class":42},"c_g_a ",[36,11664,1657],{"class":46},[36,11666,9320],{"class":42},[36,11668,11669,11671,11673,11676,11678,11680,11682,11684,11686,11689,11691],{"class":38,"line":3084},[36,11670,7009],{"class":42},[36,11672,1657],{"class":46},[36,11674,11675],{"class":405}," \"全局常量c_g_b地址为： \"",[36,11677,1925],{"class":46},[36,11679,2138],{"class":42},[36,11681,631],{"class":46},[36,11683,231],{"class":42},[36,11685,971],{"class":46},[36,11687,11688],{"class":42},"c_g_b ",[36,11690,1657],{"class":46},[36,11692,9320],{"class":42},[36,11694,11695],{"class":38,"line":3090},[36,11696,2880],{"emptyLinePlaceholder":553},[36,11698,11699,11702,11704,11707,11709,11711],{"class":38,"line":3096},[36,11700,11701],{"class":46},"    const",[36,11703,2862],{"class":46},[36,11705,11706],{"class":42}," c_l_a ",[36,11708,47],{"class":46},[36,11710,2518],{"class":53},[36,11712,1774],{"class":42},[36,11714,11715,11717,11719,11722,11724,11726],{"class":38,"line":3101},[36,11716,11701],{"class":46},[36,11718,2862],{"class":46},[36,11720,11721],{"class":42}," c_l_b ",[36,11723,47],{"class":46},[36,11725,2518],{"class":53},[36,11727,1774],{"class":42},[36,11729,11730,11732,11734,11737,11739,11741,11743,11745,11747,11750,11752],{"class":38,"line":8428},[36,11731,7009],{"class":42},[36,11733,1657],{"class":46},[36,11735,11736],{"class":405}," \"局部常量c_l_a地址为： \"",[36,11738,1925],{"class":46},[36,11740,2138],{"class":42},[36,11742,631],{"class":46},[36,11744,231],{"class":42},[36,11746,971],{"class":46},[36,11748,11749],{"class":42},"c_l_a ",[36,11751,1657],{"class":46},[36,11753,9320],{"class":42},[36,11755,11756,11758,11760,11763,11765,11767,11769,11771,11773,11776,11778],{"class":38,"line":8452},[36,11757,7009],{"class":42},[36,11759,1657],{"class":46},[36,11761,11762],{"class":405}," \"局部常量c_l_b地址为： \"",[36,11764,1925],{"class":46},[36,11766,2138],{"class":42},[36,11768,631],{"class":46},[36,11770,231],{"class":42},[36,11772,971],{"class":46},[36,11774,11775],{"class":42},"c_l_b ",[36,11777,1657],{"class":46},[36,11779,9320],{"class":42},[36,11781,11782],{"class":38,"line":8457},[36,11783,2880],{"emptyLinePlaceholder":553},[36,11785,11786,11788,11790,11792],{"class":38,"line":8463},[36,11787,2783],{"class":2443},[36,11789,345],{"class":42},[36,11791,2788],{"class":405},[36,11793,3199],{"class":42},[36,11795,11796],{"class":38,"line":8490},[36,11797,2880],{"emptyLinePlaceholder":553},[36,11799,11800,11802,11804],{"class":38,"line":8495},[36,11801,4570],{"class":46},[36,11803,4573],{"class":53},[36,11805,1774],{"class":42},[36,11807,11808],{"class":38,"line":8501},[36,11809,2045],{"class":42},[19,11811,11812],{},"总结：",[1620,11814,11815,11818,11821,11824],{},[582,11816,11817],{},"c++中程序运行前分为全局区和代码区",[582,11819,11820],{},"代码区特点是共享和只读",[582,11822,11823],{},"全局区中存放全局变量、静态变量、常量",[582,11825,11826],{},"常量区中存放const修饰的全局常量和字符串常量",[596,11828,11830],{"id":11829},"_512程序运行后","5.1.2程序运行后",[579,11832,11833],{},[582,11834,11835],{},"栈区：",[1620,11837,11838,11845],{},[582,11839,11840,11841,11844],{},"由编译器自动分配释放, 存放",[770,11842,11843],{},"函数的参数值,局部变量","等",[582,11846,11847,11848,11851],{},"注意事项：",[770,11849,11850],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,11853,11855],{"className":617,"code":11854,"language":619,"meta":31,"style":31},"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",[33,11856,11857,11868,11872,11887,11899,11903,11907,11915,11920,11935,11953,11970,11980,11988],{"__ignoreMap":31},[36,11858,11859,11861,11863,11866],{"class":38,"line":39},[36,11860,631],{"class":46},[36,11862,6998],{"class":46},[36,11864,11865],{"class":2443}," func",[36,11867,2456],{"class":42},[36,11869,11870],{"class":38,"line":66},[36,11871,2026],{"class":42},[36,11873,11874,11876,11878,11880,11882,11884],{"class":38,"line":73},[36,11875,2465],{"class":46},[36,11877,11349],{"class":42},[36,11879,47],{"class":46},[36,11881,2518],{"class":53},[36,11883,680],{"class":42},[36,11885,11886],{"class":69}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,11888,11889,11891,11893,11896],{"class":38,"line":79},[36,11890,4570],{"class":46},[36,11892,11064],{"class":46},[36,11894,11895],{"class":42},"a;",[36,11897,11898],{"class":69}," \u002F\u002F放回局部变量的地址\n",[36,11900,11901],{"class":38,"line":85},[36,11902,2045],{"class":42},[36,11904,11905],{"class":38,"line":419},[36,11906,2880],{"emptyLinePlaceholder":553},[36,11908,11909,11911,11913],{"class":38,"line":425},[36,11910,631],{"class":46},[36,11912,2453],{"class":2443},[36,11914,11333],{"class":42},[36,11916,11917],{"class":38,"line":431},[36,11918,11919],{"class":69},"    \u002F\u002F接受func的返回值\n",[36,11921,11922,11924,11926,11929,11931,11933],{"class":38,"line":437},[36,11923,2465],{"class":46},[36,11925,6998],{"class":46},[36,11927,11928],{"class":42},"p ",[36,11930,47],{"class":46},[36,11932,11865],{"class":2443},[36,11934,6116],{"class":42},[36,11936,11937,11939,11941,11943,11945,11947,11950],{"class":38,"line":443},[36,11938,7009],{"class":42},[36,11940,1657],{"class":46},[36,11942,6998],{"class":46},[36,11944,11928],{"class":42},[36,11946,1657],{"class":46},[36,11948,11949],{"class":42}," endl;",[36,11951,11952],{"class":69}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,11954,11955,11957,11959,11961,11963,11965,11967],{"class":38,"line":2092},[36,11956,7009],{"class":42},[36,11958,1657],{"class":46},[36,11960,6998],{"class":46},[36,11962,11928],{"class":42},[36,11964,1657],{"class":46},[36,11966,11949],{"class":42},[36,11968,11969],{"class":69}," \u002F\u002F第二次这个数据不再保留\n",[36,11971,11972,11974,11976,11978],{"class":38,"line":2097},[36,11973,2783],{"class":2443},[36,11975,345],{"class":42},[36,11977,2788],{"class":405},[36,11979,3199],{"class":42},[36,11981,11982,11984,11986],{"class":38,"line":2103},[36,11983,4570],{"class":46},[36,11985,4573],{"class":53},[36,11987,1774],{"class":42},[36,11989,11990],{"class":38,"line":2108},[36,11991,2045],{"class":42},[19,11993,11994],{},"输出结果：",[19,11996,11997],{},[519,11998],{"alt":11999,"src":12000},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12002,12003],{},"总结：不要返回局部变量的地址",[579,12005,12006],{"start":66},[582,12007,12008],{},"堆区",[1620,12010,12011,12014],{},[582,12012,12013],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[582,12015,12016],{},"在c++中主要利用new在堆区开辟内存",[26,12018,12020],{"className":617,"code":12019,"language":619,"meta":31,"style":31},"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",[33,12021,12022,12037,12041,12046,12067,12074,12078,12086,12090,12095,12109,12121],{"__ignoreMap":31},[36,12023,12024,12026,12029,12032,12034],{"class":38,"line":39},[36,12025,631],{"class":46},[36,12027,12028],{"class":46},"  *",[36,12030,12031],{"class":2443},"func",[36,12033,2907],{"class":42},[36,12035,12036],{"class":69},"  \u002F\u002F函数返回指针\n",[36,12038,12039],{"class":38,"line":66},[36,12040,2026],{"class":42},[36,12042,12043],{"class":38,"line":73},[36,12044,12045],{"class":69},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,12047,12048,12050,12052,12054,12056,12059,12061,12063,12065],{"class":38,"line":79},[36,12049,4627],{"class":46},[36,12051,6998],{"class":46},[36,12053,19],{"class":42},[36,12055,47],{"class":46},[36,12057,12058],{"class":46}," new",[36,12060,2862],{"class":46},[36,12062,345],{"class":42},[36,12064,1062],{"class":53},[36,12066,3199],{"class":42},[36,12068,12069,12071],{"class":38,"line":85},[36,12070,4861],{"class":46},[36,12072,12073],{"class":42}," p;\n",[36,12075,12076],{"class":38,"line":419},[36,12077,2045],{"class":42},[36,12079,12080,12082,12084],{"class":38,"line":425},[36,12081,631],{"class":46},[36,12083,2453],{"class":2443},[36,12085,2456],{"class":42},[36,12087,12088],{"class":38,"line":431},[36,12089,2026],{"class":42},[36,12091,12092],{"class":38,"line":437},[36,12093,12094],{"class":69},"    \u002F\u002F在堆区开辟数据\n",[36,12096,12097,12099,12101,12103,12105,12107],{"class":38,"line":443},[36,12098,2465],{"class":46},[36,12100,6998],{"class":46},[36,12102,19],{"class":42},[36,12104,47],{"class":46},[36,12106,12031],{"class":2443},[36,12108,6116],{"class":42},[36,12110,12111,12113,12115,12117,12119],{"class":38,"line":2092},[36,12112,2031],{"class":42},[36,12114,6899],{"class":46},[36,12116,19],{"class":42},[36,12118,1657],{"class":46},[36,12120,1679],{"class":42},[36,12122,12123],{"class":38,"line":2097},[36,12124,2045],{"class":42},[19,12126,12127],{},"图片展示：",[19,12129,12130],{},[519,12131],{"alt":11999,"src":12132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12134,12135],{},"堆区内存由程序员管生死！！！",[579,12137,12138],{"start":73},[582,12139,12140],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12142,12143],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12145,12146,12147],{},"​语法：",[33,12148,12149],{}," new 数据类型",[19,12151,12152],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,12154,12156],{"className":617,"code":12155,"language":619,"meta":31,"style":31},"\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",[33,12157,12158,12163,12173,12177,12182,12187,12209,12213,12221,12225,12239,12251,12263,12275,12280,12285,12296,12300,12305,12313,12317,12322,12344,12370,12374,12392,12396,12422,12426,12438,12442,12447,12452,12460,12464,12468,12476,12480,12486,12492],{"__ignoreMap":31},[36,12159,12160],{"class":38,"line":39},[36,12161,12162],{"class":69},"\u002F\u002F1.new的基本语法\n",[36,12164,12165,12167,12169,12171],{"class":38,"line":66},[36,12166,631],{"class":46},[36,12168,6998],{"class":46},[36,12170,12031],{"class":2443},[36,12172,2456],{"class":42},[36,12174,12175],{"class":38,"line":73},[36,12176,2026],{"class":42},[36,12178,12179],{"class":38,"line":79},[36,12180,12181],{"class":69},"    \u002F\u002F在堆区创建整型数据\n",[36,12183,12184],{"class":38,"line":85},[36,12185,12186],{"class":69},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,12188,12189,12191,12193,12195,12198,12200,12202,12204,12206],{"class":38,"line":419},[36,12190,2465],{"class":46},[36,12192,6998],{"class":46},[36,12194,19],{"class":42},[36,12196,12197],{"class":46},"=new",[36,12199,2862],{"class":46},[36,12201,345],{"class":42},[36,12203,1062],{"class":53},[36,12205,6446],{"class":42},[36,12207,12208],{"class":69},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,12210,12211],{"class":38,"line":425},[36,12212,2045],{"class":42},[36,12214,12215,12217,12219],{"class":38,"line":431},[36,12216,5844],{"class":46},[36,12218,6068],{"class":2443},[36,12220,2456],{"class":42},[36,12222,12223],{"class":38,"line":437},[36,12224,2026],{"class":42},[36,12226,12227,12229,12231,12233,12235,12237],{"class":38,"line":443},[36,12228,2465],{"class":46},[36,12230,6998],{"class":46},[36,12232,19],{"class":42},[36,12234,47],{"class":46},[36,12236,12031],{"class":2443},[36,12238,6116],{"class":42},[36,12240,12241,12243,12245,12247,12249],{"class":38,"line":2092},[36,12242,2031],{"class":42},[36,12244,6899],{"class":46},[36,12246,19],{"class":42},[36,12248,1657],{"class":46},[36,12250,1679],{"class":42},[36,12252,12253,12255,12257,12259,12261],{"class":38,"line":2097},[36,12254,2031],{"class":42},[36,12256,6899],{"class":46},[36,12258,19],{"class":42},[36,12260,1657],{"class":46},[36,12262,1679],{"class":42},[36,12264,12265,12267,12269,12271,12273],{"class":38,"line":2103},[36,12266,2031],{"class":42},[36,12268,6899],{"class":46},[36,12270,19],{"class":42},[36,12272,1657],{"class":46},[36,12274,1679],{"class":42},[36,12276,12277],{"class":38,"line":2108},[36,12278,12279],{"class":69},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,12281,12282],{"class":38,"line":2122},[36,12283,12284],{"class":69},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,12286,12287,12290,12293],{"class":38,"line":2127},[36,12288,12289],{"class":46},"    delete",[36,12291,12292],{"class":42}," p;",[36,12294,12295],{"class":69},"\u002F\u002F删除这块地址\n",[36,12297,12298],{"class":38,"line":2133},[36,12299,2045],{"class":42},[36,12301,12302],{"class":38,"line":2154},[36,12303,12304],{"class":69},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,12306,12307,12309,12311],{"class":38,"line":2159},[36,12308,5844],{"class":46},[36,12310,6137],{"class":2443},[36,12312,2456],{"class":42},[36,12314,12315],{"class":38,"line":2173},[36,12316,2026],{"class":42},[36,12318,12319],{"class":38,"line":2178},[36,12320,12321],{"class":69},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,12323,12324,12326,12328,12330,12332,12334,12336,12338,12341],{"class":38,"line":2207},[36,12325,2465],{"class":46},[36,12327,6998],{"class":46},[36,12329,4360],{"class":42},[36,12331,12197],{"class":46},[36,12333,2862],{"class":46},[36,12335,1503],{"class":42},[36,12337,1062],{"class":53},[36,12339,12340],{"class":42},"];",[36,12342,12343],{"class":69},"\u002F\u002F10代表数组有10个元素\n",[36,12345,12346,12348,12350,12352,12354,12356,12358,12360,12362,12364,12366,12368],{"class":38,"line":2212},[36,12347,3681],{"class":46},[36,12349,2138],{"class":42},[36,12351,631],{"class":46},[36,12353,3512],{"class":42},[36,12355,47],{"class":46},[36,12357,812],{"class":53},[36,12359,3519],{"class":42},[36,12361,1523],{"class":46},[36,12363,1062],{"class":53},[36,12365,3519],{"class":42},[36,12367,2772],{"class":46},[36,12369,63],{"class":42},[36,12371,12372],{"class":38,"line":2229},[36,12373,2510],{"class":42},[36,12375,12376,12379,12381,12383,12385,12387,12389],{"class":38,"line":2234},[36,12377,12378],{"class":42},"        arr[i]",[36,12380,47],{"class":46},[36,12382,1057],{"class":42},[36,12384,1097],{"class":46},[36,12386,930],{"class":53},[36,12388,680],{"class":42},[36,12390,12391],{"class":69},"\u002F\u002F给10个元素赋值100～109\n",[36,12393,12394],{"class":38,"line":2239},[36,12395,2667],{"class":42},[36,12397,12398,12400,12402,12404,12406,12408,12410,12412,12414,12416,12418,12420],{"class":38,"line":2244},[36,12399,3681],{"class":46},[36,12401,2138],{"class":42},[36,12403,631],{"class":46},[36,12405,3512],{"class":42},[36,12407,47],{"class":46},[36,12409,812],{"class":53},[36,12411,3519],{"class":42},[36,12413,1523],{"class":46},[36,12415,1062],{"class":53},[36,12417,3519],{"class":42},[36,12419,2772],{"class":46},[36,12421,63],{"class":42},[36,12423,12424],{"class":38,"line":2258},[36,12425,2510],{"class":42},[36,12427,12428,12430,12432,12434,12436],{"class":38,"line":2263},[36,12429,3931],{"class":42},[36,12431,1657],{"class":46},[36,12433,4834],{"class":42},[36,12435,1657],{"class":46},[36,12437,1679],{"class":42},[36,12439,12440],{"class":38,"line":3057},[36,12441,2667],{"class":42},[36,12443,12444],{"class":38,"line":3071},[36,12445,12446],{"class":69},"    \u002F\u002F释放堆区数组\n",[36,12448,12449],{"class":38,"line":3079},[36,12450,12451],{"class":69},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,12453,12454,12457],{"class":38,"line":3084},[36,12455,12456],{"class":46},"    delete[]",[36,12458,12459],{"class":42}," arr;\n",[36,12461,12462],{"class":38,"line":3090},[36,12463,2045],{"class":42},[36,12465,12466],{"class":38,"line":3096},[36,12467,2880],{"emptyLinePlaceholder":553},[36,12469,12470,12472,12474],{"class":38,"line":3101},[36,12471,631],{"class":46},[36,12473,2453],{"class":2443},[36,12475,2456],{"class":42},[36,12477,12478],{"class":38,"line":8428},[36,12479,2026],{"class":42},[36,12481,12482,12484],{"class":38,"line":8452},[36,12483,6113],{"class":2443},[36,12485,6116],{"class":42},[36,12487,12488,12490],{"class":38,"line":8457},[36,12489,6182],{"class":2443},[36,12491,6116],{"class":42},[36,12493,12494],{"class":38,"line":8463},[36,12495,2045],{"class":42},[539,12497,12498],{},"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":31,"searchDepth":66,"depth":66,"links":12500},[12501],{"id":11169,"depth":66,"text":11170,"children":12502},[12503,12504],{"id":11201,"depth":73,"text":11202},{"id":11829,"depth":73,"text":11830},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11161,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12511,"title":12512,"body":12513,"description":31,"extension":551,"meta":13994,"navigation":553,"path":13995,"seo":13996,"stem":13997,"__hash__":13998},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12514,"toc":13986},[12515,12518,12522,12525,12528,12697,12701,12706,12723,12728,12880,12884,12887,12890,13284,13288,13291,13296,13299,13611,13615,13621,13781,13783,13791,13795,13798,13805,13983],[10,12516,12512],{"id":12517},"_6引用",[14,12519,12521],{"id":12520},"_61引用基本用法","6.1引用基本用法",[19,12523,12524],{},"引用的本质：给变量起别名",[19,12526,12527],{},"语法：数据类型 &别名=原名",[26,12529,12531],{"className":617,"code":12530,"language":619,"meta":31,"style":31},"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",[33,12532,12533,12541,12545,12557,12569,12573,12592,12611,12615,12626,12630,12649,12667,12671,12681,12685,12693],{"__ignoreMap":31},[36,12534,12535,12537,12539],{"class":38,"line":39},[36,12536,631],{"class":46},[36,12538,2453],{"class":2443},[36,12540,11333],{"class":42},[36,12542,12543],{"class":38,"line":66},[36,12544,2880],{"emptyLinePlaceholder":553},[36,12546,12547,12549,12551,12553,12555],{"class":38,"line":73},[36,12548,2465],{"class":46},[36,12550,11349],{"class":42},[36,12552,47],{"class":46},[36,12554,2518],{"class":53},[36,12556,1774],{"class":42},[36,12558,12559,12561,12563,12565,12567],{"class":38,"line":79},[36,12560,2465],{"class":46},[36,12562,11064],{"class":46},[36,12564,11425],{"class":42},[36,12566,47],{"class":46},[36,12568,1913],{"class":42},[36,12570,12571],{"class":38,"line":85},[36,12572,2880],{"emptyLinePlaceholder":553},[36,12574,12575,12577,12579,12582,12584,12586,12588,12590],{"class":38,"line":419},[36,12576,7009],{"class":42},[36,12578,1657],{"class":46},[36,12580,12581],{"class":405}," \"a = \"",[36,12583,1925],{"class":46},[36,12585,11349],{"class":42},[36,12587,1657],{"class":46},[36,12589,11949],{"class":42},[36,12591,7748],{"class":69},[36,12593,12594,12596,12598,12601,12603,12605,12607,12609],{"class":38,"line":425},[36,12595,7009],{"class":42},[36,12597,1657],{"class":46},[36,12599,12600],{"class":405}," \"b = \"",[36,12602,1925],{"class":46},[36,12604,11362],{"class":42},[36,12606,1657],{"class":46},[36,12608,11949],{"class":42},[36,12610,7748],{"class":69},[36,12612,12613],{"class":38,"line":431},[36,12614,2880],{"emptyLinePlaceholder":553},[36,12616,12617,12620,12622,12624],{"class":38,"line":437},[36,12618,12619],{"class":42},"    b ",[36,12621,47],{"class":46},[36,12623,6234],{"class":53},[36,12625,1774],{"class":42},[36,12627,12628],{"class":38,"line":443},[36,12629,2880],{"emptyLinePlaceholder":553},[36,12631,12632,12634,12636,12638,12640,12642,12644,12646],{"class":38,"line":2092},[36,12633,7009],{"class":42},[36,12635,1657],{"class":46},[36,12637,12581],{"class":405},[36,12639,1925],{"class":46},[36,12641,11349],{"class":42},[36,12643,1657],{"class":46},[36,12645,11949],{"class":42},[36,12647,12648],{"class":69},"\u002F\u002F100\n",[36,12650,12651,12653,12655,12657,12659,12661,12663,12665],{"class":38,"line":2097},[36,12652,7009],{"class":42},[36,12654,1657],{"class":46},[36,12656,12600],{"class":405},[36,12658,1925],{"class":46},[36,12660,11362],{"class":42},[36,12662,1657],{"class":46},[36,12664,11949],{"class":42},[36,12666,12648],{"class":69},[36,12668,12669],{"class":38,"line":2103},[36,12670,2880],{"emptyLinePlaceholder":553},[36,12672,12673,12675,12677,12679],{"class":38,"line":2108},[36,12674,2783],{"class":2443},[36,12676,345],{"class":42},[36,12678,2788],{"class":405},[36,12680,3199],{"class":42},[36,12682,12683],{"class":38,"line":2122},[36,12684,2880],{"emptyLinePlaceholder":553},[36,12686,12687,12689,12691],{"class":38,"line":2127},[36,12688,4570],{"class":46},[36,12690,4573],{"class":53},[36,12692,1774],{"class":42},[36,12694,12695],{"class":38,"line":2133},[36,12696,2045],{"class":42},[14,12698,12700],{"id":12699},"_62引用的注意事项","6.2引用的注意事项",[579,12702,12703],{},[582,12704,12705],{},"引用必须要初始化",[26,12707,12709],{"className":617,"code":12708,"language":619,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,12710,12711],{"__ignoreMap":31},[36,12712,12713,12715,12717,12720],{"class":38,"line":39},[36,12714,631],{"class":46},[36,12716,11064],{"class":46},[36,12718,12719],{"class":42},"b;",[36,12721,12722],{"class":69},"\u002F\u002F非常错误！\n",[579,12724,12725],{"start":66},[582,12726,12727],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,12729,12731],{"className":617,"code":12730,"language":619,"meta":31,"style":31},"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",[33,12732,12733,12741,12753,12765,12773,12789,12802,12820,12838,12858,12868,12876],{"__ignoreMap":31},[36,12734,12735,12737,12739],{"class":38,"line":39},[36,12736,631],{"class":46},[36,12738,2453],{"class":2443},[36,12740,11333],{"class":42},[36,12742,12743,12745,12747,12749,12751],{"class":38,"line":66},[36,12744,2465],{"class":46},[36,12746,11349],{"class":42},[36,12748,47],{"class":46},[36,12750,2518],{"class":53},[36,12752,1774],{"class":42},[36,12754,12755,12757,12759,12761,12763],{"class":38,"line":73},[36,12756,2465],{"class":46},[36,12758,11362],{"class":42},[36,12760,47],{"class":46},[36,12762,9430],{"class":53},[36,12764,1774],{"class":42},[36,12766,12767,12770],{"class":38,"line":79},[36,12768,12769],{"class":69},"    \u002F\u002Fint &c;",[36,12771,12772],{"class":69}," \u002F\u002F错误，引用必须初始化\n",[36,12774,12775,12777,12779,12781,12783,12786],{"class":38,"line":85},[36,12776,2465],{"class":46},[36,12778,11064],{"class":46},[36,12780,3426],{"class":42},[36,12782,47],{"class":46},[36,12784,12785],{"class":42}," a;",[36,12787,12788],{"class":69}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,12790,12791,12794,12796,12799],{"class":38,"line":419},[36,12792,12793],{"class":42},"    c ",[36,12795,47],{"class":46},[36,12797,12798],{"class":42}," b;",[36,12800,12801],{"class":69}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,12803,12804,12806,12808,12810,12812,12814,12816,12818],{"class":38,"line":425},[36,12805,7009],{"class":42},[36,12807,1657],{"class":46},[36,12809,12581],{"class":405},[36,12811,1925],{"class":46},[36,12813,11349],{"class":42},[36,12815,1657],{"class":46},[36,12817,11949],{"class":42},[36,12819,7733],{"class":69},[36,12821,12822,12824,12826,12828,12830,12832,12834,12836],{"class":38,"line":431},[36,12823,7009],{"class":42},[36,12825,1657],{"class":46},[36,12827,12600],{"class":405},[36,12829,1925],{"class":46},[36,12831,11362],{"class":42},[36,12833,1657],{"class":46},[36,12835,11949],{"class":42},[36,12837,7733],{"class":69},[36,12839,12840,12842,12844,12847,12849,12852,12854,12856],{"class":38,"line":437},[36,12841,7009],{"class":42},[36,12843,1657],{"class":46},[36,12845,12846],{"class":405}," \"c = \"",[36,12848,1925],{"class":46},[36,12850,12851],{"class":42}," c ",[36,12853,1657],{"class":46},[36,12855,11949],{"class":42},[36,12857,7733],{"class":69},[36,12859,12860,12862,12864,12866],{"class":38,"line":443},[36,12861,2783],{"class":2443},[36,12863,345],{"class":42},[36,12865,2788],{"class":405},[36,12867,3199],{"class":42},[36,12869,12870,12872,12874],{"class":38,"line":2092},[36,12871,4570],{"class":46},[36,12873,4573],{"class":53},[36,12875,1774],{"class":42},[36,12877,12878],{"class":38,"line":2097},[36,12879,2045],{"class":42},[14,12881,12883],{"id":12882},"_63引用做函数参数","6.3引用做函数参数",[19,12885,12886],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12888,12889],{},"优点：可以简化指针修改实参",[26,12891,12893],{"className":617,"code":12892,"language":619,"meta":31,"style":31},"\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",[33,12894,12895,12900,12923,12934,12944,12953,12957,12961,12966,12988,13000,13012,13022,13026,13030,13035,13057,13067,13075,13083,13087,13091,13099,13103,13115,13127,13131,13142,13168,13172,13192,13216,13220,13230,13254,13258,13268,13272,13280],{"__ignoreMap":31},[36,12896,12897],{"class":38,"line":39},[36,12898,12899],{"class":69},"\u002F\u002F1. 值传递\n",[36,12901,12902,12904,12907,12909,12911,12913,12916,12918,12920],{"class":38,"line":66},[36,12903,5844],{"class":46},[36,12905,12906],{"class":2443}," mySwap01",[36,12908,345],{"class":42},[36,12910,631],{"class":46},[36,12912,1879],{"class":5696},[36,12914,12915],{"class":42},", ",[36,12917,631],{"class":46},[36,12919,3313],{"class":5696},[36,12921,12922],{"class":42},") {\n",[36,12924,12925,12927,12930,12932],{"class":38,"line":73},[36,12926,2465],{"class":46},[36,12928,12929],{"class":42}," temp ",[36,12931,47],{"class":46},[36,12933,1913],{"class":42},[36,12935,12936,12939,12941],{"class":38,"line":79},[36,12937,12938],{"class":42},"    a ",[36,12940,47],{"class":46},[36,12942,12943],{"class":42}," b;\n",[36,12945,12946,12948,12950],{"class":38,"line":85},[36,12947,12619],{"class":42},[36,12949,47],{"class":46},[36,12951,12952],{"class":42}," temp;\n",[36,12954,12955],{"class":38,"line":419},[36,12956,2045],{"class":42},[36,12958,12959],{"class":38,"line":425},[36,12960,2880],{"emptyLinePlaceholder":553},[36,12962,12963],{"class":38,"line":431},[36,12964,12965],{"class":69},"\u002F\u002F2. 地址传递\n",[36,12967,12968,12970,12973,12975,12978,12980,12982,12984,12986],{"class":38,"line":437},[36,12969,5844],{"class":46},[36,12971,12972],{"class":2443}," mySwap02",[36,12974,345],{"class":42},[36,12976,12977],{"class":46},"int*",[36,12979,1879],{"class":5696},[36,12981,12915],{"class":42},[36,12983,12977],{"class":46},[36,12985,3313],{"class":5696},[36,12987,12922],{"class":42},[36,12989,12990,12992,12994,12996,12998],{"class":38,"line":443},[36,12991,2465],{"class":46},[36,12993,12929],{"class":42},[36,12995,47],{"class":46},[36,12997,6998],{"class":46},[36,12999,6677],{"class":42},[36,13001,13002,13004,13006,13008,13010],{"class":38,"line":2092},[36,13003,6883],{"class":46},[36,13005,11399],{"class":42},[36,13007,47],{"class":46},[36,13009,6998],{"class":46},[36,13011,6549],{"class":42},[36,13013,13014,13016,13018,13020],{"class":38,"line":2097},[36,13015,6883],{"class":46},[36,13017,11425],{"class":42},[36,13019,47],{"class":46},[36,13021,12952],{"class":42},[36,13023,13024],{"class":38,"line":2103},[36,13025,2045],{"class":42},[36,13027,13028],{"class":38,"line":2108},[36,13029,2880],{"emptyLinePlaceholder":553},[36,13031,13032],{"class":38,"line":2122},[36,13033,13034],{"class":69},"\u002F\u002F3. 引用传递\n",[36,13036,13037,13039,13042,13044,13047,13049,13051,13053,13055],{"class":38,"line":2127},[36,13038,5844],{"class":46},[36,13040,13041],{"class":2443}," mySwap03",[36,13043,345],{"class":42},[36,13045,13046],{"class":46},"int&",[36,13048,1879],{"class":5696},[36,13050,12915],{"class":42},[36,13052,13046],{"class":46},[36,13054,3313],{"class":5696},[36,13056,12922],{"class":42},[36,13058,13059,13061,13063,13065],{"class":38,"line":2133},[36,13060,2465],{"class":46},[36,13062,12929],{"class":42},[36,13064,47],{"class":46},[36,13066,1913],{"class":42},[36,13068,13069,13071,13073],{"class":38,"line":2154},[36,13070,12938],{"class":42},[36,13072,47],{"class":46},[36,13074,12943],{"class":42},[36,13076,13077,13079,13081],{"class":38,"line":2159},[36,13078,12619],{"class":42},[36,13080,47],{"class":46},[36,13082,12952],{"class":42},[36,13084,13085],{"class":38,"line":2173},[36,13086,2045],{"class":42},[36,13088,13089],{"class":38,"line":2178},[36,13090,2880],{"emptyLinePlaceholder":553},[36,13092,13093,13095,13097],{"class":38,"line":2207},[36,13094,631],{"class":46},[36,13096,2453],{"class":2443},[36,13098,11333],{"class":42},[36,13100,13101],{"class":38,"line":2212},[36,13102,2880],{"emptyLinePlaceholder":553},[36,13104,13105,13107,13109,13111,13113],{"class":38,"line":2229},[36,13106,2465],{"class":46},[36,13108,11349],{"class":42},[36,13110,47],{"class":46},[36,13112,2518],{"class":53},[36,13114,1774],{"class":42},[36,13116,13117,13119,13121,13123,13125],{"class":38,"line":2234},[36,13118,2465],{"class":46},[36,13120,11362],{"class":42},[36,13122,47],{"class":46},[36,13124,9430],{"class":53},[36,13126,1774],{"class":42},[36,13128,13129],{"class":38,"line":2239},[36,13130,2880],{"emptyLinePlaceholder":553},[36,13132,13133,13136,13139],{"class":38,"line":2244},[36,13134,13135],{"class":2443},"    mySwap01",[36,13137,13138],{"class":42},"(a, b);",[36,13140,13141],{"class":69},"\u002F\u002F值传递，形参不会修饰实参\n",[36,13143,13144,13146,13148,13151,13153,13155,13157,13160,13162,13164,13166],{"class":38,"line":2258},[36,13145,7009],{"class":42},[36,13147,1657],{"class":46},[36,13149,13150],{"class":405}," \"a:\"",[36,13152,1925],{"class":46},[36,13154,11349],{"class":42},[36,13156,1657],{"class":46},[36,13158,13159],{"class":405}," \" b:\"",[36,13161,1925],{"class":46},[36,13163,11362],{"class":42},[36,13165,1657],{"class":46},[36,13167,9320],{"class":42},[36,13169,13170],{"class":38,"line":2263},[36,13171,2880],{"emptyLinePlaceholder":553},[36,13173,13174,13177,13179,13181,13184,13186,13189],{"class":38,"line":3057},[36,13175,13176],{"class":2443},"    mySwap02",[36,13178,345],{"class":42},[36,13180,971],{"class":46},[36,13182,13183],{"class":42},"a, ",[36,13185,971],{"class":46},[36,13187,13188],{"class":42},"b);",[36,13190,13191],{"class":69},"\u002F\u002F地址传递，形参会修饰实参\n",[36,13193,13194,13196,13198,13200,13202,13204,13206,13208,13210,13212,13214],{"class":38,"line":3071},[36,13195,7009],{"class":42},[36,13197,1657],{"class":46},[36,13199,13150],{"class":405},[36,13201,1925],{"class":46},[36,13203,11349],{"class":42},[36,13205,1657],{"class":46},[36,13207,13159],{"class":405},[36,13209,1925],{"class":46},[36,13211,11362],{"class":42},[36,13213,1657],{"class":46},[36,13215,9320],{"class":42},[36,13217,13218],{"class":38,"line":3079},[36,13219,2880],{"emptyLinePlaceholder":553},[36,13221,13222,13225,13227],{"class":38,"line":3084},[36,13223,13224],{"class":2443},"    mySwap03",[36,13226,13138],{"class":42},[36,13228,13229],{"class":69},"\u002F\u002F引用传递，形参会修饰实参\n",[36,13231,13232,13234,13236,13238,13240,13242,13244,13246,13248,13250,13252],{"class":38,"line":3090},[36,13233,7009],{"class":42},[36,13235,1657],{"class":46},[36,13237,13150],{"class":405},[36,13239,1925],{"class":46},[36,13241,11349],{"class":42},[36,13243,1657],{"class":46},[36,13245,13159],{"class":405},[36,13247,1925],{"class":46},[36,13249,11362],{"class":42},[36,13251,1657],{"class":46},[36,13253,9320],{"class":42},[36,13255,13256],{"class":38,"line":3096},[36,13257,2880],{"emptyLinePlaceholder":553},[36,13259,13260,13262,13264,13266],{"class":38,"line":3101},[36,13261,2783],{"class":2443},[36,13263,345],{"class":42},[36,13265,2788],{"class":405},[36,13267,3199],{"class":42},[36,13269,13270],{"class":38,"line":8428},[36,13271,2880],{"emptyLinePlaceholder":553},[36,13273,13274,13276,13278],{"class":38,"line":8452},[36,13275,4570],{"class":46},[36,13277,4573],{"class":53},[36,13279,1774],{"class":42},[36,13281,13282],{"class":38,"line":8457},[36,13283,2045],{"class":42},[14,13285,13287],{"id":13286},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13289,13290],{},"作用：引用是可以作为函数的返回值存在的",[19,13292,9505,13293],{},[770,13294,13295],{},"不要返回局部变量引用",[19,13297,13298],{},"用法：函数调用作为左值",[26,13300,13302],{"className":10421,"code":13301,"language":10423,"meta":31,"style":31},"\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",[33,13303,13304,13309,13317,13332,13338,13342,13346,13351,13359,13376,13382,13386,13390,13398,13402,13407,13421,13441,13460,13464,13469,13482,13502,13520,13524,13540,13544,13563,13581,13585,13595,13599,13607],{"__ignoreMap":31},[36,13305,13306],{"class":38,"line":39},[36,13307,13308],{"class":69},"\u002F\u002F返回局部变量引用\n",[36,13310,13311,13313,13315],{"class":38,"line":66},[36,13312,13046],{"class":46},[36,13314,6068],{"class":2443},[36,13316,11333],{"class":42},[36,13318,13319,13321,13323,13325,13327,13329],{"class":38,"line":73},[36,13320,2465],{"class":46},[36,13322,11349],{"class":42},[36,13324,47],{"class":46},[36,13326,2518],{"class":53},[36,13328,680],{"class":42},[36,13330,13331],{"class":69}," \u002F\u002F局部变量\n",[36,13333,13334,13336],{"class":38,"line":79},[36,13335,4570],{"class":46},[36,13337,1913],{"class":42},[36,13339,13340],{"class":38,"line":85},[36,13341,2045],{"class":42},[36,13343,13344],{"class":38,"line":419},[36,13345,2880],{"emptyLinePlaceholder":553},[36,13347,13348],{"class":38,"line":425},[36,13349,13350],{"class":69},"\u002F\u002F返回静态变量引用\n",[36,13352,13353,13355,13357],{"class":38,"line":431},[36,13354,13046],{"class":46},[36,13356,6137],{"class":2443},[36,13358,11333],{"class":42},[36,13360,13361,13363,13365,13367,13369,13371,13373],{"class":38,"line":437},[36,13362,11500],{"class":46},[36,13364,2862],{"class":46},[36,13366,11349],{"class":42},[36,13368,47],{"class":46},[36,13370,9430],{"class":53},[36,13372,680],{"class":42},[36,13374,13375],{"class":69},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,13377,13378,13380],{"class":38,"line":443},[36,13379,4570],{"class":46},[36,13381,1913],{"class":42},[36,13383,13384],{"class":38,"line":2092},[36,13385,2045],{"class":42},[36,13387,13388],{"class":38,"line":2097},[36,13389,2880],{"emptyLinePlaceholder":553},[36,13391,13392,13394,13396],{"class":38,"line":2103},[36,13393,631],{"class":46},[36,13395,2453],{"class":2443},[36,13397,11333],{"class":42},[36,13399,13400],{"class":38,"line":2108},[36,13401,2880],{"emptyLinePlaceholder":553},[36,13403,13404],{"class":38,"line":2122},[36,13405,13406],{"class":69},"    \u002F\u002F不能返回局部变量的引用\n",[36,13408,13409,13412,13415,13417,13419],{"class":38,"line":2127},[36,13410,13411],{"class":46},"    int&",[36,13413,13414],{"class":42}," ref ",[36,13416,47],{"class":46},[36,13418,6068],{"class":2443},[36,13420,6116],{"class":42},[36,13422,13423,13425,13427,13430,13432,13434,13436,13438],{"class":38,"line":2133},[36,13424,7009],{"class":42},[36,13426,1657],{"class":46},[36,13428,13429],{"class":405}," \"ref = \"",[36,13431,1925],{"class":46},[36,13433,13414],{"class":42},[36,13435,1657],{"class":46},[36,13437,11949],{"class":42},[36,13439,13440],{"class":69},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,13442,13443,13445,13447,13449,13451,13453,13455,13457],{"class":38,"line":2154},[36,13444,7009],{"class":42},[36,13446,1657],{"class":46},[36,13448,13429],{"class":405},[36,13450,1925],{"class":46},[36,13452,13414],{"class":42},[36,13454,1657],{"class":46},[36,13456,11949],{"class":42},[36,13458,13459],{"class":69},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,13461,13462],{"class":38,"line":2159},[36,13463,2880],{"emptyLinePlaceholder":553},[36,13465,13466],{"class":38,"line":2173},[36,13467,13468],{"class":69},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,13470,13471,13473,13476,13478,13480],{"class":38,"line":2178},[36,13472,13411],{"class":46},[36,13474,13475],{"class":42}," ref2 ",[36,13477,47],{"class":46},[36,13479,6137],{"class":2443},[36,13481,6116],{"class":42},[36,13483,13484,13486,13488,13491,13493,13495,13497,13499],{"class":38,"line":2207},[36,13485,7009],{"class":42},[36,13487,1657],{"class":46},[36,13489,13490],{"class":405}," \"ref2 = \"",[36,13492,1925],{"class":46},[36,13494,13475],{"class":42},[36,13496,1657],{"class":46},[36,13498,11949],{"class":42},[36,13500,13501],{"class":69}," \u002F\u002F20\n",[36,13503,13504,13506,13508,13510,13512,13514,13516,13518],{"class":38,"line":2212},[36,13505,7009],{"class":42},[36,13507,1657],{"class":46},[36,13509,13490],{"class":405},[36,13511,1925],{"class":46},[36,13513,13475],{"class":42},[36,13515,1657],{"class":46},[36,13517,11949],{"class":42},[36,13519,13501],{"class":69},[36,13521,13522],{"class":38,"line":2229},[36,13523,2880],{"emptyLinePlaceholder":553},[36,13525,13526,13528,13531,13533,13535,13537],{"class":38,"line":2234},[36,13527,6182],{"class":2443},[36,13529,13530],{"class":42},"() ",[36,13532,47],{"class":46},[36,13534,3479],{"class":53},[36,13536,680],{"class":42},[36,13538,13539],{"class":69},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,13541,13542],{"class":38,"line":2239},[36,13543,2880],{"emptyLinePlaceholder":553},[36,13545,13546,13548,13550,13552,13554,13556,13558,13560],{"class":38,"line":2244},[36,13547,7009],{"class":42},[36,13549,1657],{"class":46},[36,13551,13490],{"class":405},[36,13553,1925],{"class":46},[36,13555,13475],{"class":42},[36,13557,1657],{"class":46},[36,13559,11949],{"class":42},[36,13561,13562],{"class":69}," \u002F\u002F1000\n",[36,13564,13565,13567,13569,13571,13573,13575,13577,13579],{"class":38,"line":2258},[36,13566,7009],{"class":42},[36,13568,1657],{"class":46},[36,13570,13490],{"class":405},[36,13572,1925],{"class":46},[36,13574,13475],{"class":42},[36,13576,1657],{"class":46},[36,13578,11949],{"class":42},[36,13580,13562],{"class":69},[36,13582,13583],{"class":38,"line":2263},[36,13584,2880],{"emptyLinePlaceholder":553},[36,13586,13587,13589,13591,13593],{"class":38,"line":3057},[36,13588,2783],{"class":2443},[36,13590,345],{"class":42},[36,13592,2788],{"class":405},[36,13594,3199],{"class":42},[36,13596,13597],{"class":38,"line":3071},[36,13598,2880],{"emptyLinePlaceholder":553},[36,13600,13601,13603,13605],{"class":38,"line":3079},[36,13602,4570],{"class":46},[36,13604,4573],{"class":53},[36,13606,1774],{"class":42},[36,13608,13609],{"class":38,"line":3084},[36,13610,2045],{"class":42},[14,13612,13614],{"id":13613},"_65引用的本质","6.5引用的本质",[19,13616,13617,13618],{},"本质：",[770,13619,13620],{},"引用的本质在c++内部实现是一个指针常量.",[26,13622,13624],{"className":617,"code":13623,"language":619,"meta":31,"style":31},"\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",[33,13625,13626,13631,13647,13661,13665,13674,13686,13691,13696,13707,13720,13724,13740,13757,13761,13769,13777],{"__ignoreMap":31},[36,13627,13628],{"class":38,"line":39},[36,13629,13630],{"class":69},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,13632,13633,13635,13637,13639,13641,13644],{"class":38,"line":66},[36,13634,5844],{"class":46},[36,13636,11865],{"class":2443},[36,13638,345],{"class":42},[36,13640,13046],{"class":46},[36,13642,13643],{"class":5696}," ref",[36,13645,13646],{"class":42},"){\n",[36,13648,13649,13652,13654,13656,13658],{"class":38,"line":73},[36,13650,13651],{"class":42},"    ref ",[36,13653,47],{"class":46},[36,13655,6234],{"class":53},[36,13657,680],{"class":42},[36,13659,13660],{"class":69}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,13662,13663],{"class":38,"line":79},[36,13664,2045],{"class":42},[36,13666,13667,13669,13671],{"class":38,"line":85},[36,13668,631],{"class":46},[36,13670,2453],{"class":2443},[36,13672,13673],{"class":42},"(){\n",[36,13675,13676,13678,13680,13682,13684],{"class":38,"line":419},[36,13677,2465],{"class":46},[36,13679,11349],{"class":42},[36,13681,47],{"class":46},[36,13683,2518],{"class":53},[36,13685,1774],{"class":42},[36,13687,13688],{"class":38,"line":425},[36,13689,13690],{"class":42},"    \n",[36,13692,13693],{"class":38,"line":431},[36,13694,13695],{"class":69},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,13697,13698,13700,13702,13704],{"class":38,"line":437},[36,13699,13411],{"class":46},[36,13701,13414],{"class":42},[36,13703,47],{"class":46},[36,13705,13706],{"class":42}," a; \n",[36,13708,13709,13711,13713,13715,13717],{"class":38,"line":443},[36,13710,13651],{"class":42},[36,13712,47],{"class":46},[36,13714,9430],{"class":53},[36,13716,680],{"class":42},[36,13718,13719],{"class":69}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,13721,13722],{"class":38,"line":2092},[36,13723,13690],{"class":42},[36,13725,13726,13728,13730,13732,13734,13736,13738],{"class":38,"line":2097},[36,13727,7009],{"class":42},[36,13729,1657],{"class":46},[36,13731,13150],{"class":405},[36,13733,1925],{"class":46},[36,13735,11349],{"class":42},[36,13737,1657],{"class":46},[36,13739,9320],{"class":42},[36,13741,13742,13744,13746,13749,13751,13753,13755],{"class":38,"line":2103},[36,13743,7009],{"class":42},[36,13745,1657],{"class":46},[36,13747,13748],{"class":405}," \"ref:\"",[36,13750,1925],{"class":46},[36,13752,13414],{"class":42},[36,13754,1657],{"class":46},[36,13756,9320],{"class":42},[36,13758,13759],{"class":38,"line":2108},[36,13760,13690],{"class":42},[36,13762,13763,13766],{"class":38,"line":2122},[36,13764,13765],{"class":2443},"    func",[36,13767,13768],{"class":42},"(a);\n",[36,13770,13771,13773,13775],{"class":38,"line":2127},[36,13772,4570],{"class":46},[36,13774,4573],{"class":53},[36,13776,1774],{"class":42},[36,13778,13779],{"class":38,"line":2133},[36,13780,2045],{"class":42},[19,13782,11812],{},[579,13784,13785,13788],{},[582,13786,13787],{},"引用的本质，就是一个指针常量",[582,13789,13790],{},"引用一旦初始化，就不可以发生改变",[14,13792,13794],{"id":13793},"_66常量引用","6.6常量引用",[19,13796,13797],{},"作用：常量引用主要用来修饰形参",[19,13799,13800,13801,13804],{},"在函数形参列表中，可以加",[770,13802,13803],{},"const修饰形参","，防止形参改变实参",[26,13806,13808],{"className":617,"code":13807,"language":619,"meta":31,"style":31},"\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",[33,13809,13810,13815,13820,13839,13844,13857,13861,13865,13873,13877,13882,13887,13901,13905,13913,13925,13929,13934,13946,13953,13957,13967,13971,13979],{"__ignoreMap":31},[36,13811,13812],{"class":38,"line":39},[36,13813,13814],{"class":69},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,13816,13817],{"class":38,"line":66},[36,13818,13819],{"class":69},"\u002F\u002F加上const就不能修改实参的\n",[36,13821,13822,13824,13827,13829,13831,13834,13837],{"class":38,"line":73},[36,13823,5844],{"class":46},[36,13825,13826],{"class":2443}," showValue",[36,13828,345],{"class":42},[36,13830,7272],{"class":46},[36,13832,13833],{"class":46}," int&",[36,13835,13836],{"class":5696}," v",[36,13838,12922],{"class":42},[36,13840,13841],{"class":38,"line":79},[36,13842,13843],{"class":69},"    \u002F\u002Fv += 100;\n",[36,13845,13846,13848,13850,13853,13855],{"class":38,"line":85},[36,13847,7009],{"class":42},[36,13849,1657],{"class":46},[36,13851,13852],{"class":42}," v ",[36,13854,1657],{"class":46},[36,13856,9320],{"class":42},[36,13858,13859],{"class":38,"line":419},[36,13860,2045],{"class":42},[36,13862,13863],{"class":38,"line":425},[36,13864,2880],{"emptyLinePlaceholder":553},[36,13866,13867,13869,13871],{"class":38,"line":431},[36,13868,631],{"class":46},[36,13870,2453],{"class":2443},[36,13872,11333],{"class":42},[36,13874,13875],{"class":38,"line":437},[36,13876,2880],{"emptyLinePlaceholder":553},[36,13878,13879],{"class":38,"line":443},[36,13880,13881],{"class":69},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,13883,13884],{"class":38,"line":2092},[36,13885,13886],{"class":69},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,13888,13889,13891,13893,13895,13897,13899],{"class":38,"line":2097},[36,13890,11701],{"class":46},[36,13892,13833],{"class":46},[36,13894,13414],{"class":42},[36,13896,47],{"class":46},[36,13898,2518],{"class":53},[36,13900,1774],{"class":42},[36,13902,13903],{"class":38,"line":2103},[36,13904,2880],{"emptyLinePlaceholder":553},[36,13906,13907,13910],{"class":38,"line":2108},[36,13908,13909],{"class":69},"    \u002F\u002Fref = 100;",[36,13911,13912],{"class":69},"  \u002F\u002F加入const后不可以修改变量\n",[36,13914,13915,13917,13919,13921,13923],{"class":38,"line":2122},[36,13916,7009],{"class":42},[36,13918,1657],{"class":46},[36,13920,13414],{"class":42},[36,13922,1657],{"class":46},[36,13924,9320],{"class":42},[36,13926,13927],{"class":38,"line":2127},[36,13928,2880],{"emptyLinePlaceholder":553},[36,13930,13931],{"class":38,"line":2133},[36,13932,13933],{"class":69},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,13935,13936,13938,13940,13942,13944],{"class":38,"line":2154},[36,13937,2465],{"class":46},[36,13939,11349],{"class":42},[36,13941,47],{"class":46},[36,13943,2518],{"class":53},[36,13945,1774],{"class":42},[36,13947,13948,13951],{"class":38,"line":2159},[36,13949,13950],{"class":2443},"    showValue",[36,13952,13768],{"class":42},[36,13954,13955],{"class":38,"line":2173},[36,13956,2880],{"emptyLinePlaceholder":553},[36,13958,13959,13961,13963,13965],{"class":38,"line":2178},[36,13960,2783],{"class":2443},[36,13962,345],{"class":42},[36,13964,2788],{"class":405},[36,13966,3199],{"class":42},[36,13968,13969],{"class":38,"line":2207},[36,13970,2880],{"emptyLinePlaceholder":553},[36,13972,13973,13975,13977],{"class":38,"line":2212},[36,13974,4570],{"class":46},[36,13976,4573],{"class":53},[36,13978,1774],{"class":42},[36,13980,13981],{"class":38,"line":2229},[36,13982,2045],{"class":42},[539,13984,13985],{},"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":31,"searchDepth":66,"depth":66,"links":13987},[13988,13989,13990,13991,13992,13993],{"id":12520,"depth":66,"text":12521},{"id":12699,"depth":66,"text":12700},{"id":12882,"depth":66,"text":12883},{"id":13286,"depth":66,"text":13287},{"id":13613,"depth":66,"text":13614},{"id":13793,"depth":66,"text":13794},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12512,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14000,"title":14001,"body":14002,"description":31,"extension":551,"meta":15083,"navigation":553,"path":15084,"seo":15085,"stem":15086,"__hash__":15087},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14003,"toc":15075},[14004,14007,14011,14014,14019,14251,14253,14264,14268,14271,14279,14383,14386,14390,14393,14397,14400,14405,14427,14433,14760,14763,14767,14775,15072],[10,14005,14001],{"id":14006},"_7函数高级部分",[14,14008,14010],{"id":14009},"_71函数默认参数","7.1函数默认参数",[19,14012,14013],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14015,5661,14016],{},[33,14017,14018],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,14020,14022],{"className":617,"code":14021,"language":619,"meta":31,"style":31},"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",[33,14023,14024,14059,14074,14078,14082,14087,14092,14121,14141,14151,14155,14159,14167,14171,14199,14221,14225,14235,14239,14247],{"__ignoreMap":31},[36,14025,14026,14028,14030,14032,14034,14036,14038,14040,14042,14045,14047,14049,14051,14053,14055,14057],{"class":38,"line":39},[36,14027,631],{"class":46},[36,14029,11865],{"class":2443},[36,14031,345],{"class":42},[36,14033,631],{"class":46},[36,14035,1879],{"class":5696},[36,14037,12915],{"class":42},[36,14039,631],{"class":46},[36,14041,3313],{"class":5696},[36,14043,14044],{"class":46}," =",[36,14046,2518],{"class":53},[36,14048,12915],{"class":42},[36,14050,631],{"class":46},[36,14052,3329],{"class":5696},[36,14054,14044],{"class":46},[36,14056,2518],{"class":53},[36,14058,12922],{"class":42},[36,14060,14061,14063,14065,14067,14069,14071],{"class":38,"line":66},[36,14062,4570],{"class":46},[36,14064,11349],{"class":42},[36,14066,1097],{"class":46},[36,14068,11362],{"class":42},[36,14070,1097],{"class":46},[36,14072,14073],{"class":42}," c;\n",[36,14075,14076],{"class":38,"line":73},[36,14077,2045],{"class":42},[36,14079,14080],{"class":38,"line":79},[36,14081,2880],{"emptyLinePlaceholder":553},[36,14083,14084],{"class":38,"line":85},[36,14085,14086],{"class":69},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,14088,14089],{"class":38,"line":419},[36,14090,14091],{"class":69},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,14093,14094,14096,14099,14101,14103,14105,14107,14109,14111,14113,14115,14117,14119],{"class":38,"line":425},[36,14095,631],{"class":46},[36,14097,14098],{"class":2443}," func2",[36,14100,345],{"class":42},[36,14102,631],{"class":46},[36,14104,1879],{"class":5696},[36,14106,14044],{"class":46},[36,14108,2518],{"class":53},[36,14110,12915],{"class":42},[36,14112,631],{"class":46},[36,14114,3313],{"class":5696},[36,14116,14044],{"class":46},[36,14118,2518],{"class":53},[36,14120,3199],{"class":42},[36,14122,14123,14125,14127,14129,14131,14133,14135,14137,14139],{"class":38,"line":431},[36,14124,631],{"class":46},[36,14126,14098],{"class":2443},[36,14128,345],{"class":42},[36,14130,631],{"class":46},[36,14132,1879],{"class":5696},[36,14134,12915],{"class":42},[36,14136,631],{"class":46},[36,14138,3313],{"class":5696},[36,14140,12922],{"class":42},[36,14142,14143,14145,14147,14149],{"class":38,"line":437},[36,14144,4570],{"class":46},[36,14146,11349],{"class":42},[36,14148,1097],{"class":46},[36,14150,12943],{"class":42},[36,14152,14153],{"class":38,"line":443},[36,14154,2045],{"class":42},[36,14156,14157],{"class":38,"line":2092},[36,14158,2880],{"emptyLinePlaceholder":553},[36,14160,14161,14163,14165],{"class":38,"line":2097},[36,14162,631],{"class":46},[36,14164,2453],{"class":2443},[36,14166,11333],{"class":42},[36,14168,14169],{"class":38,"line":2103},[36,14170,2880],{"emptyLinePlaceholder":553},[36,14172,14173,14175,14177,14180,14182,14184,14186,14188,14190,14192,14195,14197],{"class":38,"line":2108},[36,14174,7009],{"class":42},[36,14176,1657],{"class":46},[36,14178,14179],{"class":405}," \"ret = \"",[36,14181,1925],{"class":46},[36,14183,11865],{"class":2443},[36,14185,345],{"class":42},[36,14187,1313],{"class":53},[36,14189,12915],{"class":42},[36,14191,1313],{"class":53},[36,14193,14194],{"class":42},") ",[36,14196,1657],{"class":46},[36,14198,9320],{"class":42},[36,14200,14201,14203,14205,14207,14209,14211,14213,14215,14217,14219],{"class":38,"line":2122},[36,14202,7009],{"class":42},[36,14204,1657],{"class":46},[36,14206,14179],{"class":405},[36,14208,1925],{"class":46},[36,14210,11865],{"class":2443},[36,14212,345],{"class":42},[36,14214,930],{"class":53},[36,14216,14194],{"class":42},[36,14218,1657],{"class":46},[36,14220,9320],{"class":42},[36,14222,14223],{"class":38,"line":2127},[36,14224,2880],{"emptyLinePlaceholder":553},[36,14226,14227,14229,14231,14233],{"class":38,"line":2133},[36,14228,2783],{"class":2443},[36,14230,345],{"class":42},[36,14232,2788],{"class":405},[36,14234,3199],{"class":42},[36,14236,14237],{"class":38,"line":2154},[36,14238,2880],{"emptyLinePlaceholder":553},[36,14240,14241,14243,14245],{"class":38,"line":2159},[36,14242,4570],{"class":46},[36,14244,4573],{"class":53},[36,14246,1774],{"class":42},[36,14248,14249],{"class":38,"line":2173},[36,14250,2045],{"class":42},[19,14252,11812],{},[579,14254,14255,14258,14261],{},[582,14256,14257],{},"我传就用我；没传就用你",[582,14259,14260],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[582,14262,14263],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14265,14267],{"id":14266},"_72函数的占位参数","7.2函数的占位参数",[19,14269,14270],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14272,14273,14275,14276],{},[770,14274,5661],{}," ",[33,14277,14278],{},"返回值类型 函数名 (数据类型){}",[26,14280,14282],{"className":617,"code":14281,"language":619,"meta":31,"style":31},"\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",[33,14283,14284,14289,14307,14320,14324,14332,14336,14353,14357,14367,14371,14379],{"__ignoreMap":31},[36,14285,14286],{"class":38,"line":39},[36,14287,14288],{"class":69},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,14290,14291,14293,14295,14297,14299,14301,14303,14305],{"class":38,"line":66},[36,14292,5844],{"class":46},[36,14294,11865],{"class":2443},[36,14296,345],{"class":42},[36,14298,631],{"class":46},[36,14300,1879],{"class":5696},[36,14302,12915],{"class":42},[36,14304,631],{"class":46},[36,14306,12922],{"class":42},[36,14308,14309,14311,14313,14316,14318],{"class":38,"line":73},[36,14310,7009],{"class":42},[36,14312,1657],{"class":46},[36,14314,14315],{"class":405}," \"this is func\"",[36,14317,1925],{"class":46},[36,14319,9320],{"class":42},[36,14321,14322],{"class":38,"line":79},[36,14323,2045],{"class":42},[36,14325,14326,14328,14330],{"class":38,"line":85},[36,14327,631],{"class":46},[36,14329,2453],{"class":2443},[36,14331,11333],{"class":42},[36,14333,14334],{"class":38,"line":419},[36,14335,2880],{"emptyLinePlaceholder":553},[36,14337,14338,14340,14342,14344,14346,14348,14350],{"class":38,"line":425},[36,14339,13765],{"class":2443},[36,14341,345],{"class":42},[36,14343,1062],{"class":53},[36,14345,57],{"class":42},[36,14347,1062],{"class":53},[36,14349,6446],{"class":42},[36,14351,14352],{"class":69}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,14354,14355],{"class":38,"line":431},[36,14356,2880],{"emptyLinePlaceholder":553},[36,14358,14359,14361,14363,14365],{"class":38,"line":437},[36,14360,2783],{"class":2443},[36,14362,345],{"class":42},[36,14364,2788],{"class":405},[36,14366,3199],{"class":42},[36,14368,14369],{"class":38,"line":443},[36,14370,2880],{"emptyLinePlaceholder":553},[36,14372,14373,14375,14377],{"class":38,"line":2092},[36,14374,4570],{"class":46},[36,14376,4573],{"class":53},[36,14378,1774],{"class":42},[36,14380,14381],{"class":38,"line":2097},[36,14382,2045],{"class":42},[19,14384,14385],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14387,14389],{"id":14388},"_73函数重载","7.3函数重载",[19,14391,14392],{},"意思是函数名是可以相同的",[596,14394,14396],{"id":14395},"_731基本语法","7.3.1基本语法",[19,14398,14399],{},"作用：函数名可以相同，提高复用性",[19,14401,14402],{},[770,14403,14404],{},"函数重载满足条件：",[1620,14406,14407,14410,14413],{},[582,14408,14409],{},"同一个作用域下",[582,14411,14412],{},"函数名称相同",[582,14414,14415,14416,14419,14420,14423,14424],{},"函数参数",[770,14417,14418],{},"类型不同","  或者 ",[770,14421,14422],{},"个数不同"," 或者 ",[770,14425,14426],{},"顺序不同",[19,14428,14429,14432],{},[770,14430,14431],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,14434,14436],{"className":10421,"code":14435,"language":10423,"meta":31,"style":31},"\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",[33,14437,14438,14443,14451,14455,14468,14472,14486,14490,14503,14507,14522,14526,14539,14543,14564,14568,14581,14585,14605,14609,14622,14626,14630,14635,14640,14645,14650,14655,14659,14663,14671,14675,14681,14691,14701,14715,14730,14734,14744,14748,14756],{"__ignoreMap":31},[36,14439,14440],{"class":38,"line":39},[36,14441,14442],{"class":69},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,14444,14445,14447,14449],{"class":38,"line":66},[36,14446,5844],{"class":46},[36,14448,11865],{"class":2443},[36,14450,2456],{"class":42},[36,14452,14453],{"class":38,"line":73},[36,14454,2026],{"class":42},[36,14456,14457,14459,14461,14464,14466],{"class":38,"line":79},[36,14458,7009],{"class":42},[36,14460,1657],{"class":46},[36,14462,14463],{"class":405}," \"func 的调用！\"",[36,14465,1925],{"class":46},[36,14467,9320],{"class":42},[36,14469,14470],{"class":38,"line":85},[36,14471,2045],{"class":42},[36,14473,14474,14476,14478,14480,14482,14484],{"class":38,"line":419},[36,14475,5844],{"class":46},[36,14477,11865],{"class":2443},[36,14479,345],{"class":42},[36,14481,631],{"class":46},[36,14483,1879],{"class":5696},[36,14485,63],{"class":42},[36,14487,14488],{"class":38,"line":425},[36,14489,2026],{"class":42},[36,14491,14492,14494,14496,14499,14501],{"class":38,"line":431},[36,14493,7009],{"class":42},[36,14495,1657],{"class":46},[36,14497,14498],{"class":405}," \"func (int a) 的调用！\"",[36,14500,1925],{"class":46},[36,14502,9320],{"class":42},[36,14504,14505],{"class":38,"line":437},[36,14506,2045],{"class":42},[36,14508,14509,14511,14513,14515,14518,14520],{"class":38,"line":443},[36,14510,5844],{"class":46},[36,14512,11865],{"class":2443},[36,14514,345],{"class":42},[36,14516,14517],{"class":46},"double",[36,14519,1879],{"class":5696},[36,14521,63],{"class":42},[36,14523,14524],{"class":38,"line":2092},[36,14525,2026],{"class":42},[36,14527,14528,14530,14532,14535,14537],{"class":38,"line":2097},[36,14529,7009],{"class":42},[36,14531,1657],{"class":46},[36,14533,14534],{"class":405}," \"func (double a)的调用！\"",[36,14536,1925],{"class":46},[36,14538,9320],{"class":42},[36,14540,14541],{"class":38,"line":2103},[36,14542,2045],{"class":42},[36,14544,14545,14547,14549,14551,14553,14555,14558,14560,14562],{"class":38,"line":2108},[36,14546,5844],{"class":46},[36,14548,11865],{"class":2443},[36,14550,345],{"class":42},[36,14552,631],{"class":46},[36,14554,1879],{"class":5696},[36,14556,14557],{"class":42}," ,",[36,14559,14517],{"class":46},[36,14561,3313],{"class":5696},[36,14563,63],{"class":42},[36,14565,14566],{"class":38,"line":2122},[36,14567,2026],{"class":42},[36,14569,14570,14572,14574,14577,14579],{"class":38,"line":2127},[36,14571,7009],{"class":42},[36,14573,1657],{"class":46},[36,14575,14576],{"class":405}," \"func (int a ,double b) 的调用！\"",[36,14578,1925],{"class":46},[36,14580,9320],{"class":42},[36,14582,14583],{"class":38,"line":2133},[36,14584,2045],{"class":42},[36,14586,14587,14589,14591,14593,14595,14597,14599,14601,14603],{"class":38,"line":2154},[36,14588,5844],{"class":46},[36,14590,11865],{"class":2443},[36,14592,345],{"class":42},[36,14594,14517],{"class":46},[36,14596,1879],{"class":5696},[36,14598,14557],{"class":42},[36,14600,631],{"class":46},[36,14602,3313],{"class":5696},[36,14604,63],{"class":42},[36,14606,14607],{"class":38,"line":2159},[36,14608,2026],{"class":42},[36,14610,14611,14613,14615,14618,14620],{"class":38,"line":2173},[36,14612,7009],{"class":42},[36,14614,1657],{"class":46},[36,14616,14617],{"class":405}," \"func (double a ,int b)的调用！\"",[36,14619,1925],{"class":46},[36,14621,9320],{"class":42},[36,14623,14624],{"class":38,"line":2178},[36,14625,2045],{"class":42},[36,14627,14628],{"class":38,"line":2207},[36,14629,2880],{"emptyLinePlaceholder":553},[36,14631,14632],{"class":38,"line":2212},[36,14633,14634],{"class":69},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,14636,14637],{"class":38,"line":2229},[36,14638,14639],{"class":69},"\u002F\u002Fint func(double a, int b)\n",[36,14641,14642],{"class":38,"line":2234},[36,14643,14644],{"class":69},"\u002F\u002F{\n",[36,14646,14647],{"class":38,"line":2239},[36,14648,14649],{"class":69},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,14651,14652],{"class":38,"line":2244},[36,14653,14654],{"class":69},"\u002F\u002F}\n",[36,14656,14657],{"class":38,"line":2258},[36,14658,2880],{"emptyLinePlaceholder":553},[36,14660,14661],{"class":38,"line":2263},[36,14662,2880],{"emptyLinePlaceholder":553},[36,14664,14665,14667,14669],{"class":38,"line":3057},[36,14666,631],{"class":46},[36,14668,2453],{"class":2443},[36,14670,11333],{"class":42},[36,14672,14673],{"class":38,"line":3071},[36,14674,2880],{"emptyLinePlaceholder":553},[36,14676,14677,14679],{"class":38,"line":3079},[36,14678,13765],{"class":2443},[36,14680,6116],{"class":42},[36,14682,14683,14685,14687,14689],{"class":38,"line":3084},[36,14684,13765],{"class":2443},[36,14686,345],{"class":42},[36,14688,1062],{"class":53},[36,14690,3199],{"class":42},[36,14692,14693,14695,14697,14699],{"class":38,"line":3090},[36,14694,13765],{"class":2443},[36,14696,345],{"class":42},[36,14698,674],{"class":53},[36,14700,3199],{"class":42},[36,14702,14703,14705,14707,14709,14711,14713],{"class":38,"line":3096},[36,14704,13765],{"class":2443},[36,14706,345],{"class":42},[36,14708,1062],{"class":53},[36,14710,57],{"class":42},[36,14712,674],{"class":53},[36,14714,3199],{"class":42},[36,14716,14717,14719,14721,14723,14726,14728],{"class":38,"line":3101},[36,14718,13765],{"class":2443},[36,14720,345],{"class":42},[36,14722,674],{"class":53},[36,14724,14725],{"class":42}," , ",[36,14727,1062],{"class":53},[36,14729,3199],{"class":42},[36,14731,14732],{"class":38,"line":8428},[36,14733,13690],{"class":42},[36,14735,14736,14738,14740,14742],{"class":38,"line":8452},[36,14737,2783],{"class":2443},[36,14739,345],{"class":42},[36,14741,2788],{"class":405},[36,14743,3199],{"class":42},[36,14745,14746],{"class":38,"line":8457},[36,14747,2880],{"emptyLinePlaceholder":553},[36,14749,14750,14752,14754],{"class":38,"line":8463},[36,14751,4570],{"class":46},[36,14753,4573],{"class":53},[36,14755,1774],{"class":42},[36,14757,14758],{"class":38,"line":8490},[36,14759,2045],{"class":42},[19,14761,14762],{},"重点：函数返回值不可以作为函数重载条件！",[596,14764,14766],{"id":14765},"_732注意事项","7.3.2注意事项",[1620,14768,14769,14772],{},[582,14770,14771],{},"引用作为重载条件!!!",[582,14773,14774],{},"函数重载碰到函数默认参数",[26,14776,14778],{"className":617,"code":14777,"language":619,"meta":31,"style":31},"\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",[33,14779,14780,14785,14790,14794,14810,14814,14827,14831,14835,14853,14857,14870,14874,14878,14882,14887,14891,14915,14919,14932,14936,14940,14954,14958,14971,14975,14979,14987,14991,15003,15013,15026,15030,15034,15042,15046,15056,15060,15068],{"__ignoreMap":31},[36,14781,14782],{"class":38,"line":39},[36,14783,14784],{"class":69},"\u002F\u002F函数重载注意事项\n",[36,14786,14787],{"class":38,"line":66},[36,14788,14789],{"class":69},"\u002F\u002F1、引用作为重载条件\n",[36,14791,14792],{"class":38,"line":73},[36,14793,2880],{"emptyLinePlaceholder":553},[36,14795,14796,14798,14800,14802,14804,14806,14808],{"class":38,"line":79},[36,14797,5844],{"class":46},[36,14799,11865],{"class":2443},[36,14801,345],{"class":42},[36,14803,631],{"class":46},[36,14805,11064],{"class":46},[36,14807,43],{"class":5696},[36,14809,63],{"class":42},[36,14811,14812],{"class":38,"line":85},[36,14813,2026],{"class":42},[36,14815,14816,14818,14820,14823,14825],{"class":38,"line":419},[36,14817,7009],{"class":42},[36,14819,1657],{"class":46},[36,14821,14822],{"class":405}," \"func (int &a) 调用 \"",[36,14824,1925],{"class":46},[36,14826,9320],{"class":42},[36,14828,14829],{"class":38,"line":425},[36,14830,2045],{"class":42},[36,14832,14833],{"class":38,"line":431},[36,14834,2880],{"emptyLinePlaceholder":553},[36,14836,14837,14839,14841,14843,14845,14847,14849,14851],{"class":38,"line":437},[36,14838,5844],{"class":46},[36,14840,11865],{"class":2443},[36,14842,345],{"class":42},[36,14844,7272],{"class":46},[36,14846,2862],{"class":46},[36,14848,11064],{"class":46},[36,14850,43],{"class":5696},[36,14852,63],{"class":42},[36,14854,14855],{"class":38,"line":443},[36,14856,2026],{"class":42},[36,14858,14859,14861,14863,14866,14868],{"class":38,"line":2092},[36,14860,7009],{"class":42},[36,14862,1657],{"class":46},[36,14864,14865],{"class":405}," \"func (const int &a) 调用 \"",[36,14867,1925],{"class":46},[36,14869,9320],{"class":42},[36,14871,14872],{"class":38,"line":2097},[36,14873,2045],{"class":42},[36,14875,14876],{"class":38,"line":2103},[36,14877,2880],{"emptyLinePlaceholder":553},[36,14879,14880],{"class":38,"line":2108},[36,14881,2880],{"emptyLinePlaceholder":553},[36,14883,14884],{"class":38,"line":2122},[36,14885,14886],{"class":69},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,14888,14889],{"class":38,"line":2127},[36,14890,2880],{"emptyLinePlaceholder":553},[36,14892,14893,14895,14897,14899,14901,14903,14905,14907,14909,14911,14913],{"class":38,"line":2133},[36,14894,5844],{"class":46},[36,14896,14098],{"class":2443},[36,14898,345],{"class":42},[36,14900,631],{"class":46},[36,14902,1879],{"class":5696},[36,14904,12915],{"class":42},[36,14906,631],{"class":46},[36,14908,3313],{"class":5696},[36,14910,14044],{"class":46},[36,14912,2518],{"class":53},[36,14914,63],{"class":42},[36,14916,14917],{"class":38,"line":2154},[36,14918,2026],{"class":42},[36,14920,14921,14923,14925,14928,14930],{"class":38,"line":2159},[36,14922,7009],{"class":42},[36,14924,1657],{"class":46},[36,14926,14927],{"class":405}," \"func2(int a, int b = 10) 调用\"",[36,14929,1925],{"class":46},[36,14931,9320],{"class":42},[36,14933,14934],{"class":38,"line":2173},[36,14935,2045],{"class":42},[36,14937,14938],{"class":38,"line":2178},[36,14939,2880],{"emptyLinePlaceholder":553},[36,14941,14942,14944,14946,14948,14950,14952],{"class":38,"line":2207},[36,14943,5844],{"class":46},[36,14945,14098],{"class":2443},[36,14947,345],{"class":42},[36,14949,631],{"class":46},[36,14951,1879],{"class":5696},[36,14953,63],{"class":42},[36,14955,14956],{"class":38,"line":2212},[36,14957,2026],{"class":42},[36,14959,14960,14962,14964,14967,14969],{"class":38,"line":2229},[36,14961,7009],{"class":42},[36,14963,1657],{"class":46},[36,14965,14966],{"class":405}," \"func2(int a) 调用\"",[36,14968,1925],{"class":46},[36,14970,9320],{"class":42},[36,14972,14973],{"class":38,"line":2234},[36,14974,2045],{"class":42},[36,14976,14977],{"class":38,"line":2239},[36,14978,2880],{"emptyLinePlaceholder":553},[36,14980,14981,14983,14985],{"class":38,"line":2244},[36,14982,631],{"class":46},[36,14984,2453],{"class":2443},[36,14986,11333],{"class":42},[36,14988,14989],{"class":38,"line":2258},[36,14990,13690],{"class":42},[36,14992,14993,14995,14997,14999,15001],{"class":38,"line":2263},[36,14994,2465],{"class":46},[36,14996,11349],{"class":42},[36,14998,47],{"class":46},[36,15000,2518],{"class":53},[36,15002,1774],{"class":42},[36,15004,15005,15007,15010],{"class":38,"line":3057},[36,15006,13765],{"class":2443},[36,15008,15009],{"class":42},"(a);",[36,15011,15012],{"class":69}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,15014,15015,15017,15019,15021,15023],{"class":38,"line":3071},[36,15016,13765],{"class":2443},[36,15018,345],{"class":42},[36,15020,1062],{"class":53},[36,15022,6446],{"class":42},[36,15024,15025],{"class":69},"\u002F\u002F调用有const   10是个常量\n",[36,15027,15028],{"class":38,"line":3079},[36,15029,2880],{"emptyLinePlaceholder":553},[36,15031,15032],{"class":38,"line":3084},[36,15033,2880],{"emptyLinePlaceholder":553},[36,15035,15036,15039],{"class":38,"line":3090},[36,15037,15038],{"class":69},"    \u002F\u002Ffunc2(10);",[36,15040,15041],{"class":69}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,15043,15044],{"class":38,"line":3096},[36,15045,2880],{"emptyLinePlaceholder":553},[36,15047,15048,15050,15052,15054],{"class":38,"line":3101},[36,15049,2783],{"class":2443},[36,15051,345],{"class":42},[36,15053,2788],{"class":405},[36,15055,3199],{"class":42},[36,15057,15058],{"class":38,"line":8428},[36,15059,2880],{"emptyLinePlaceholder":553},[36,15061,15062,15064,15066],{"class":38,"line":8452},[36,15063,4570],{"class":46},[36,15065,4573],{"class":53},[36,15067,1774],{"class":42},[36,15069,15070],{"class":38,"line":8457},[36,15071,2045],{"class":42},[539,15073,15074],{},"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":31,"searchDepth":66,"depth":66,"links":15076},[15077,15078,15079],{"id":14009,"depth":66,"text":14010},{"id":14266,"depth":66,"text":14267},{"id":14388,"depth":66,"text":14389,"children":15080},[15081,15082],{"id":14395,"depth":73,"text":14396},{"id":14765,"depth":73,"text":14766},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14001,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15089,"title":15090,"body":15091,"description":23845,"extension":551,"meta":23846,"navigation":553,"path":23847,"seo":23848,"stem":23849,"__hash__":23850},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15092,"toc":23826},[15093,15096,15102,15109,15114,15117,15120,15123,15127,15131,15134,15137,15145,15150,15153,15160,15165,15324,15327,15580,15583,15586,15589,15594,15597,15600,15611,15616,15852,15856,15866,15869,15877,16024,16028,16031,16034,16038,16483,16487,16495,16503,17415,17422,17427,18055,18058,18061,18064,18183,18186,18273,18276,18402,18405,18499,18502,18855,18859,18867,18871,18878,18881,18884,18895,18901,18906,18918,18926,18946,18954,18971,19157,19160,19164,19167,19170,19173,19176,19179,19182,19185,19645,19651,19655,19658,19669,20256,20259,20748,20752,20755,20758,20761,20764,20767,20775,21171,21175,21178,21181,21628,21631,21634,21639,21642,21647,21650,21654,21657,21659,21665,21668,21974,21984,22025,22029,22032,22034,22067,22070,22377,22379,22394,22397,22420,22429,22435,22438,22442,22445,22448,22453,22464,22469,22477,22482,22612,22615,22618,22793,22798,23010,23014,23017,23131,23136,23375,23379,23383,23386,23389,23394,23499,23502,23505,23508,23512,23623,23626,23629,23634,23686,23689,23692,23697,23743,23746,23751,23819,23821,23824],[10,15094,15090],{"id":15095},"_8类和对象",[19,15097,15098,15099],{},"C++面向对象的三大特性为",[770,15100,15101],{},"封装、继承、多态",[19,15103,15104,15105,15108],{},"C++认为",[770,15106,15107],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15110,15111],{},[770,15112,15113],{},"例如：",[19,15115,15116],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15118,15119],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15121,15122],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15124,15126],{"id":15125},"_81封装","8.1封装",[596,15128,15130],{"id":15129},"_811封装的意义","8.1.1封装的意义",[19,15132,15133],{},"封装是C++面向对象三大特性之一",[19,15135,15136],{},"封装的意义：",[1620,15138,15139,15142],{},[582,15140,15141],{},"将属性和行为作为一个整体，表现生活中的事物",[582,15143,15144],{},"将属性和行为加以权限控制",[19,15146,15147],{},[770,15148,15149],{},"封装意义一：",[19,15151,15152],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15154,15155,14275,15157],{},[770,15156,5661],{},[33,15158,15159],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[579,15161,15162],{},[582,15163,15164],{},"**示例1：**设计一个圆类，求圆的周长",[26,15166,15168],{"className":617,"code":15167,"language":619,"meta":31,"style":31},"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",[33,15169,15170,15178,15182,15187,15192,15197,15202,15209,15214,15224,15228,15246,15250,15254,15262,15266,15271,15276,15281,15286,15297,15320],{"__ignoreMap":31},[36,15171,15172,15175],{"class":38,"line":39},[36,15173,15174],{"class":46},"class",[36,15176,15177],{"class":2443}," Circle\n",[36,15179,15180],{"class":38,"line":66},[36,15181,2026],{"class":42},[36,15183,15184],{"class":38,"line":73},[36,15185,15186],{"class":69},"    \u002F\u002F访问权限\n",[36,15188,15189],{"class":38,"line":79},[36,15190,15191],{"class":69},"    \u002F\u002F公共权限\n",[36,15193,15194],{"class":38,"line":85},[36,15195,15196],{"class":46},"public:\n",[36,15198,15199],{"class":38,"line":419},[36,15200,15201],{"class":69},"    \u002F\u002F属性\n",[36,15203,15204,15206],{"class":38,"line":425},[36,15205,2465],{"class":46},[36,15207,15208],{"class":42}," m_r;\n",[36,15210,15211],{"class":38,"line":431},[36,15212,15213],{"class":69},"    \u002F\u002F行为\n",[36,15215,15216,15219,15222],{"class":38,"line":437},[36,15217,15218],{"class":46},"    double",[36,15220,15221],{"class":2443}," calculateZC",[36,15223,2456],{"class":42},[36,15225,15226],{"class":38,"line":443},[36,15227,2510],{"class":42},[36,15229,15230,15233,15236,15238,15241,15243],{"class":38,"line":2092},[36,15231,15232],{"class":46},"        return",[36,15234,15235],{"class":53}," 2",[36,15237,1071],{"class":46},[36,15239,15240],{"class":42},"PI",[36,15242,1071],{"class":46},[36,15244,15245],{"class":42},"m_r;\n",[36,15247,15248],{"class":38,"line":2097},[36,15249,2667],{"class":42},[36,15251,15252],{"class":38,"line":2103},[36,15253,4475],{"class":42},[36,15255,15256,15258,15260],{"class":38,"line":2108},[36,15257,631],{"class":46},[36,15259,2453],{"class":2443},[36,15261,2456],{"class":42},[36,15263,15264],{"class":38,"line":2122},[36,15265,2026],{"class":42},[36,15267,15268],{"class":38,"line":2127},[36,15269,15270],{"class":69},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,15272,15273],{"class":38,"line":2133},[36,15274,15275],{"class":69},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,15277,15278],{"class":38,"line":2154},[36,15279,15280],{"class":42},"    Circle c1;\n",[36,15282,15283],{"class":38,"line":2159},[36,15284,15285],{"class":69},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,15287,15288,15291,15293,15295],{"class":38,"line":2173},[36,15289,15290],{"class":42},"    c1.m_r",[36,15292,47],{"class":46},[36,15294,1062],{"class":53},[36,15296,1774],{"class":42},[36,15298,15299,15301,15303,15306,15308,15311,15314,15316,15318],{"class":38,"line":2178},[36,15300,2031],{"class":42},[36,15302,1657],{"class":46},[36,15304,15305],{"class":405},"\"圆的周长\"",[36,15307,1657],{"class":46},[36,15309,15310],{"class":42},"c1.",[36,15312,15313],{"class":2443},"calculateZC",[36,15315,2907],{"class":42},[36,15317,1657],{"class":46},[36,15319,1679],{"class":42},[36,15321,15322],{"class":38,"line":2207},[36,15323,2045],{"class":42},[19,15325,15326],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,15328,15330],{"className":617,"code":15329,"language":619,"meta":31,"style":31},"#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",[33,15331,15332,15338,15348,15354,15360,15364,15368,15373,15380,15385,15403,15407,15417,15421,15426,15442,15446,15456,15460,15465,15473,15477,15509,15513,15517,15525,15529,15534,15539,15553,15567,15576],{"__ignoreMap":31},[36,15333,15334,15336],{"class":38,"line":39},[36,15335,2429],{"class":46},[36,15337,2432],{"class":405},[36,15339,15340,15342,15344,15346],{"class":38,"line":66},[36,15341,2437],{"class":46},[36,15343,2440],{"class":46},[36,15345,2444],{"class":2443},[36,15347,1774],{"class":42},[36,15349,15350,15352],{"class":38,"line":73},[36,15351,2429],{"class":46},[36,15353,8229],{"class":405},[36,15355,15356,15358],{"class":38,"line":79},[36,15357,15174],{"class":46},[36,15359,8242],{"class":2443},[36,15361,15362],{"class":38,"line":85},[36,15363,2026],{"class":42},[36,15365,15366],{"class":38,"line":419},[36,15367,15196],{"class":46},[36,15369,15370],{"class":38,"line":425},[36,15371,15372],{"class":42},"    string m_name;\n",[36,15374,15375,15377],{"class":38,"line":431},[36,15376,2465],{"class":46},[36,15378,15379],{"class":42}," m_id;\n",[36,15381,15382],{"class":38,"line":437},[36,15383,15384],{"class":69},"    \u002F\u002F赋值姓名\n",[36,15386,15387,15390,15393,15395,15398,15401],{"class":38,"line":443},[36,15388,15389],{"class":46},"    void",[36,15391,15392],{"class":2443}," setName",[36,15394,345],{"class":42},[36,15396,15397],{"class":2443},"string",[36,15399,15400],{"class":5696}," name",[36,15402,63],{"class":42},[36,15404,15405],{"class":38,"line":2092},[36,15406,2510],{"class":42},[36,15408,15409,15412,15414],{"class":38,"line":2097},[36,15410,15411],{"class":42},"        m_name",[36,15413,47],{"class":46},[36,15415,15416],{"class":42},"name;\n",[36,15418,15419],{"class":38,"line":2103},[36,15420,2667],{"class":42},[36,15422,15423],{"class":38,"line":2108},[36,15424,15425],{"class":69},"    \u002F\u002F赋值学号\n",[36,15427,15428,15430,15433,15435,15437,15440],{"class":38,"line":2122},[36,15429,15389],{"class":46},[36,15431,15432],{"class":2443}," setId",[36,15434,345],{"class":42},[36,15436,631],{"class":46},[36,15438,15439],{"class":5696}," id",[36,15441,63],{"class":42},[36,15443,15444],{"class":38,"line":2127},[36,15445,2510],{"class":42},[36,15447,15448,15451,15453],{"class":38,"line":2133},[36,15449,15450],{"class":42},"        m_id",[36,15452,47],{"class":46},[36,15454,15455],{"class":42},"id;\n",[36,15457,15458],{"class":38,"line":2154},[36,15459,2667],{"class":42},[36,15461,15462],{"class":38,"line":2159},[36,15463,15464],{"class":69},"    \u002F\u002F打印学生信息\n",[36,15466,15467,15469,15471],{"class":38,"line":2173},[36,15468,15389],{"class":46},[36,15470,10095],{"class":2443},[36,15472,2456],{"class":42},[36,15474,15475],{"class":38,"line":2178},[36,15476,2510],{"class":42},[36,15478,15479,15481,15483,15486,15488,15491,15493,15495,15497,15500,15502,15505,15507],{"class":38,"line":2207},[36,15480,3931],{"class":42},[36,15482,1657],{"class":46},[36,15484,15485],{"class":405},"\"姓名：\"",[36,15487,1657],{"class":46},[36,15489,15490],{"class":42},"m_name",[36,15492,1657],{"class":46},[36,15494,4839],{"class":405},[36,15496,1657],{"class":46},[36,15498,15499],{"class":405},"\"学号：\"",[36,15501,1657],{"class":46},[36,15503,15504],{"class":42},"m_id",[36,15506,1657],{"class":46},[36,15508,1679],{"class":42},[36,15510,15511],{"class":38,"line":2212},[36,15512,2667],{"class":42},[36,15514,15515],{"class":38,"line":2229},[36,15516,4475],{"class":42},[36,15518,15519,15521,15523],{"class":38,"line":2234},[36,15520,631],{"class":46},[36,15522,2453],{"class":2443},[36,15524,2456],{"class":42},[36,15526,15527],{"class":38,"line":2239},[36,15528,2026],{"class":42},[36,15530,15531],{"class":38,"line":2244},[36,15532,15533],{"class":69},"    \u002F\u002F实例化\n",[36,15535,15536],{"class":38,"line":2258},[36,15537,15538],{"class":42},"    Student s1;\n",[36,15540,15541,15544,15547,15549,15551],{"class":38,"line":2263},[36,15542,15543],{"class":42},"    s1.",[36,15545,15546],{"class":2443},"setName",[36,15548,345],{"class":42},[36,15550,8396],{"class":405},[36,15552,3199],{"class":42},[36,15554,15555,15557,15560,15562,15565],{"class":38,"line":3057},[36,15556,15543],{"class":42},[36,15558,15559],{"class":2443},"setId",[36,15561,345],{"class":42},[36,15563,15564],{"class":53},"123456",[36,15566,3199],{"class":42},[36,15568,15569,15571,15574],{"class":38,"line":3071},[36,15570,15543],{"class":42},[36,15572,15573],{"class":2443},"printInfo",[36,15575,6116],{"class":42},[36,15577,15578],{"class":38,"line":3079},[36,15579,2045],{"class":42},[19,15581,15582],{},"类中的属性和行为统称为成员",[19,15584,15585],{},"属性：成员属性(成员变量)",[19,15587,15588],{},"方法：成员函数(成员方法)",[19,15590,15591],{},[770,15592,15593],{},"封装意义二：",[19,15595,15596],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15598,15599],{},"访问权限有三种：",[579,15601,15602,15605,15608],{},[582,15603,15604],{},"public        公共权限",[582,15606,15607],{},"protected 保护权限",[582,15609,15610],{},"private      私有权限",[19,15612,15613],{},[770,15614,15615],{},"示例：",[26,15617,15619],{"className":10421,"code":15618,"language":10423,"meta":31,"style":31},"\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",[33,15620,15621,15626,15631,15636,15641,15645,15652,15656,15661,15665,15670,15674,15679,15684,15689,15693,15698,15703,15710,15714,15718,15726,15730,15741,15753,15765,15769,15773,15777,15785,15789,15794,15806,15814,15822,15826,15836,15840,15848],{"__ignoreMap":31},[36,15622,15623],{"class":38,"line":39},[36,15624,15625],{"class":69},"\u002F\u002F三种权限\n",[36,15627,15628],{"class":38,"line":66},[36,15629,15630],{"class":69},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,15632,15633],{"class":38,"line":73},[36,15634,15635],{"class":69},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,15637,15638],{"class":38,"line":79},[36,15639,15640],{"class":69},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,15642,15643],{"class":38,"line":85},[36,15644,2880],{"emptyLinePlaceholder":553},[36,15646,15647,15649],{"class":38,"line":419},[36,15648,15174],{"class":46},[36,15650,15651],{"class":2443}," Person\n",[36,15653,15654],{"class":38,"line":425},[36,15655,2026],{"class":42},[36,15657,15658],{"class":38,"line":431},[36,15659,15660],{"class":69},"    \u002F\u002F姓名  公共权限\n",[36,15662,15663],{"class":38,"line":437},[36,15664,15196],{"class":46},[36,15666,15667],{"class":38,"line":443},[36,15668,15669],{"class":42},"    string m_Name;\n",[36,15671,15672],{"class":38,"line":2092},[36,15673,2880],{"emptyLinePlaceholder":553},[36,15675,15676],{"class":38,"line":2097},[36,15677,15678],{"class":69},"    \u002F\u002F汽车  保护权限\n",[36,15680,15681],{"class":38,"line":2103},[36,15682,15683],{"class":46},"protected:\n",[36,15685,15686],{"class":38,"line":2108},[36,15687,15688],{"class":42},"    string m_Car;\n",[36,15690,15691],{"class":38,"line":2122},[36,15692,2880],{"emptyLinePlaceholder":553},[36,15694,15695],{"class":38,"line":2127},[36,15696,15697],{"class":69},"    \u002F\u002F银行卡密码  私有权限\n",[36,15699,15700],{"class":38,"line":2133},[36,15701,15702],{"class":46},"private:\n",[36,15704,15705,15707],{"class":38,"line":2154},[36,15706,2465],{"class":46},[36,15708,15709],{"class":42}," m_Password;\n",[36,15711,15712],{"class":38,"line":2159},[36,15713,2880],{"emptyLinePlaceholder":553},[36,15715,15716],{"class":38,"line":2173},[36,15717,15196],{"class":46},[36,15719,15720,15722,15724],{"class":38,"line":2178},[36,15721,15389],{"class":46},[36,15723,11865],{"class":2443},[36,15725,2456],{"class":42},[36,15727,15728],{"class":38,"line":2207},[36,15729,2510],{"class":42},[36,15731,15732,15735,15737,15739],{"class":38,"line":2212},[36,15733,15734],{"class":42},"        m_Name ",[36,15736,47],{"class":46},[36,15738,9418],{"class":405},[36,15740,1774],{"class":42},[36,15742,15743,15746,15748,15751],{"class":38,"line":2229},[36,15744,15745],{"class":42},"        m_Car ",[36,15747,47],{"class":46},[36,15749,15750],{"class":405}," \"拖拉机\"",[36,15752,1774],{"class":42},[36,15754,15755,15758,15760,15763],{"class":38,"line":2234},[36,15756,15757],{"class":42},"        m_Password ",[36,15759,47],{"class":46},[36,15761,15762],{"class":53}," 123456",[36,15764,1774],{"class":42},[36,15766,15767],{"class":38,"line":2239},[36,15768,2667],{"class":42},[36,15770,15771],{"class":38,"line":2244},[36,15772,4475],{"class":42},[36,15774,15775],{"class":38,"line":2258},[36,15776,2880],{"emptyLinePlaceholder":553},[36,15778,15779,15781,15783],{"class":38,"line":2263},[36,15780,631],{"class":46},[36,15782,2453],{"class":2443},[36,15784,11333],{"class":42},[36,15786,15787],{"class":38,"line":3057},[36,15788,2880],{"emptyLinePlaceholder":553},[36,15790,15791],{"class":38,"line":3071},[36,15792,15793],{"class":42},"    Person p;\n",[36,15795,15796,15799,15801,15804],{"class":38,"line":3079},[36,15797,15798],{"class":42},"    p.m_Name ",[36,15800,47],{"class":46},[36,15802,15803],{"class":405}," \"李四\"",[36,15805,1774],{"class":42},[36,15807,15808,15811],{"class":38,"line":3084},[36,15809,15810],{"class":69},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,15812,15813],{"class":69},"  \u002F\u002F保护权限类外访问不到\n",[36,15815,15816,15819],{"class":38,"line":3090},[36,15817,15818],{"class":69},"    \u002F\u002Fp.m_Password = 123;",[36,15820,15821],{"class":69}," \u002F\u002F私有权限类外访问不到\n",[36,15823,15824],{"class":38,"line":3096},[36,15825,2880],{"emptyLinePlaceholder":553},[36,15827,15828,15830,15832,15834],{"class":38,"line":3101},[36,15829,2783],{"class":2443},[36,15831,345],{"class":42},[36,15833,2788],{"class":405},[36,15835,3199],{"class":42},[36,15837,15838],{"class":38,"line":8428},[36,15839,2880],{"emptyLinePlaceholder":553},[36,15841,15842,15844,15846],{"class":38,"line":8452},[36,15843,4570],{"class":46},[36,15845,4573],{"class":53},[36,15847,1774],{"class":42},[36,15849,15850],{"class":38,"line":8457},[36,15851,2045],{"class":42},[596,15853,15855],{"id":15854},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15857,15858,15859,15862,15863],{},"在C++中 struct和class唯一的",[770,15860,15861],{},"区别","就在于 ",[770,15864,15865],{},"默认的访问权限不同",[19,15867,15868],{},"区别：",[1620,15870,15871,15874],{},[582,15872,15873],{},"struct 默认权限为公共",[582,15875,15876],{},"class   默认权限为私有",[26,15878,15880],{"className":10421,"code":15879,"language":10423,"meta":31,"style":31},"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",[33,15881,15882,15889,15893,15903,15907,15911,15918,15922,15932,15936,15940,15948,15952,15957,15971,15975,15980,15994,15998,16008,16012,16020],{"__ignoreMap":31},[36,15883,15884,15886],{"class":38,"line":39},[36,15885,15174],{"class":46},[36,15887,15888],{"class":2443}," C1\n",[36,15890,15891],{"class":38,"line":66},[36,15892,2026],{"class":42},[36,15894,15895,15897,15900],{"class":38,"line":73},[36,15896,2465],{"class":46},[36,15898,15899],{"class":42},"  m_A;",[36,15901,15902],{"class":69}," \u002F\u002F默认是私有权限\n",[36,15904,15905],{"class":38,"line":79},[36,15906,4475],{"class":42},[36,15908,15909],{"class":38,"line":85},[36,15910,2880],{"emptyLinePlaceholder":553},[36,15912,15913,15915],{"class":38,"line":419},[36,15914,8239],{"class":46},[36,15916,15917],{"class":2443}," C2\n",[36,15919,15920],{"class":38,"line":425},[36,15921,2026],{"class":42},[36,15923,15924,15926,15929],{"class":38,"line":431},[36,15925,2465],{"class":46},[36,15927,15928],{"class":42}," m_A;",[36,15930,15931],{"class":69},"  \u002F\u002F默认是公共权限\n",[36,15933,15934],{"class":38,"line":437},[36,15935,4475],{"class":42},[36,15937,15938],{"class":38,"line":443},[36,15939,2880],{"emptyLinePlaceholder":553},[36,15941,15942,15944,15946],{"class":38,"line":2092},[36,15943,631],{"class":46},[36,15945,2453],{"class":2443},[36,15947,11333],{"class":42},[36,15949,15950],{"class":38,"line":2097},[36,15951,2880],{"emptyLinePlaceholder":553},[36,15953,15954],{"class":38,"line":2103},[36,15955,15956],{"class":42},"    C1 c1;\n",[36,15958,15959,15962,15964,15966,15968],{"class":38,"line":2108},[36,15960,15961],{"class":42},"    c1.m_A ",[36,15963,47],{"class":46},[36,15965,2518],{"class":53},[36,15967,680],{"class":42},[36,15969,15970],{"class":69}," \u002F\u002F错误，访问权限是私有\n",[36,15972,15973],{"class":38,"line":2122},[36,15974,2880],{"emptyLinePlaceholder":553},[36,15976,15977],{"class":38,"line":2127},[36,15978,15979],{"class":42},"    C2 c2;\n",[36,15981,15982,15985,15987,15989,15991],{"class":38,"line":2133},[36,15983,15984],{"class":42},"    c2.m_A ",[36,15986,47],{"class":46},[36,15988,2518],{"class":53},[36,15990,680],{"class":42},[36,15992,15993],{"class":69}," \u002F\u002F正确，访问权限是公共\n",[36,15995,15996],{"class":38,"line":2154},[36,15997,2880],{"emptyLinePlaceholder":553},[36,15999,16000,16002,16004,16006],{"class":38,"line":2159},[36,16001,2783],{"class":2443},[36,16003,345],{"class":42},[36,16005,2788],{"class":405},[36,16007,3199],{"class":42},[36,16009,16010],{"class":38,"line":2173},[36,16011,2880],{"emptyLinePlaceholder":553},[36,16013,16014,16016,16018],{"class":38,"line":2178},[36,16015,4570],{"class":46},[36,16017,4573],{"class":53},[36,16019,1774],{"class":42},[36,16021,16022],{"class":38,"line":2207},[36,16023,2045],{"class":42},[596,16025,16027],{"id":16026},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16029,16030],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16032,16033],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16035,16036],{},[770,16037,15615],{},[26,16039,16041],{"className":10421,"code":16040,"language":10423,"meta":31,"style":31},"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",[33,16042,16043,16053,16057,16061,16066,16080,16089,16093,16103,16107,16114,16118,16122,16126,16131,16140,16147,16151,16156,16172,16195,16208,16215,16219,16228,16232,16236,16241,16257,16267,16271,16275,16279,16287,16291,16301,16305,16313,16317,16321,16329,16333,16337,16342,16355,16378,16382,16387,16400,16422,16426,16431,16445,16453,16457,16467,16471,16479],{"__ignoreMap":31},[36,16044,16045,16047,16050],{"class":38,"line":39},[36,16046,15174],{"class":46},[36,16048,16049],{"class":2443}," Person",[36,16051,16052],{"class":42}," {\n",[36,16054,16055],{"class":38,"line":66},[36,16056,15196],{"class":46},[36,16058,16059],{"class":38,"line":73},[36,16060,2880],{"emptyLinePlaceholder":553},[36,16062,16063],{"class":38,"line":79},[36,16064,16065],{"class":69},"    \u002F\u002F姓名设置可读可写\n",[36,16067,16068,16070,16072,16074,16076,16078],{"class":38,"line":85},[36,16069,15389],{"class":46},[36,16071,15392],{"class":2443},[36,16073,345],{"class":42},[36,16075,15397],{"class":2443},[36,16077,15400],{"class":5696},[36,16079,12922],{"class":42},[36,16081,16082,16084,16086],{"class":38,"line":419},[36,16083,15734],{"class":42},[36,16085,47],{"class":46},[36,16087,16088],{"class":42}," name;\n",[36,16090,16091],{"class":38,"line":425},[36,16092,2667],{"class":42},[36,16094,16095,16098,16101],{"class":38,"line":431},[36,16096,16097],{"class":2443},"    string",[36,16099,16100],{"class":2443}," getName",[36,16102,2456],{"class":42},[36,16104,16105],{"class":38,"line":437},[36,16106,2510],{"class":42},[36,16108,16109,16111],{"class":38,"line":443},[36,16110,15232],{"class":46},[36,16112,16113],{"class":42}," m_Name;\n",[36,16115,16116],{"class":38,"line":2092},[36,16117,2667],{"class":42},[36,16119,16120],{"class":38,"line":2097},[36,16121,2880],{"emptyLinePlaceholder":553},[36,16123,16124],{"class":38,"line":2103},[36,16125,2880],{"emptyLinePlaceholder":553},[36,16127,16128],{"class":38,"line":2108},[36,16129,16130],{"class":69},"    \u002F\u002F获取年龄 \n",[36,16132,16133,16135,16138],{"class":38,"line":2122},[36,16134,2465],{"class":46},[36,16136,16137],{"class":2443}," getAge",[36,16139,11333],{"class":42},[36,16141,16142,16144],{"class":38,"line":2127},[36,16143,15232],{"class":46},[36,16145,16146],{"class":42}," m_Age;\n",[36,16148,16149],{"class":38,"line":2133},[36,16150,2667],{"class":42},[36,16152,16153],{"class":38,"line":2154},[36,16154,16155],{"class":69},"    \u002F\u002F设置年龄\n",[36,16157,16158,16160,16163,16165,16167,16170],{"class":38,"line":2159},[36,16159,15389],{"class":46},[36,16161,16162],{"class":2443}," setAge",[36,16164,345],{"class":42},[36,16166,631],{"class":46},[36,16168,16169],{"class":5696}," age",[36,16171,12922],{"class":42},[36,16173,16174,16176,16179,16181,16183,16185,16188,16190,16193],{"class":38,"line":2173},[36,16175,2977],{"class":46},[36,16177,16178],{"class":42}," (age ",[36,16180,1523],{"class":46},[36,16182,4573],{"class":53},[36,16184,3735],{"class":46},[36,16186,16187],{"class":42}," age ",[36,16189,1573],{"class":46},[36,16191,16192],{"class":53}," 150",[36,16194,12922],{"class":42},[36,16196,16197,16199,16201,16204,16206],{"class":38,"line":2178},[36,16198,10199],{"class":42},[36,16200,1657],{"class":46},[36,16202,16203],{"class":405}," \"你个老妖精!\"",[36,16205,1925],{"class":46},[36,16207,9320],{"class":42},[36,16209,16210,16213],{"class":38,"line":2207},[36,16211,16212],{"class":46},"            return",[36,16214,1774],{"class":42},[36,16216,16217],{"class":38,"line":2212},[36,16218,3009],{"class":42},[36,16220,16221,16224,16226],{"class":38,"line":2229},[36,16222,16223],{"class":42},"        m_Age ",[36,16225,47],{"class":46},[36,16227,8277],{"class":42},[36,16229,16230],{"class":38,"line":2234},[36,16231,2667],{"class":42},[36,16233,16234],{"class":38,"line":2239},[36,16235,2880],{"emptyLinePlaceholder":553},[36,16237,16238],{"class":38,"line":2244},[36,16239,16240],{"class":69},"    \u002F\u002F情人设置为只写\n",[36,16242,16243,16245,16248,16250,16252,16255],{"class":38,"line":2258},[36,16244,15389],{"class":46},[36,16246,16247],{"class":2443}," setLover",[36,16249,345],{"class":42},[36,16251,15397],{"class":2443},[36,16253,16254],{"class":5696}," lover",[36,16256,12922],{"class":42},[36,16258,16259,16262,16264],{"class":38,"line":2263},[36,16260,16261],{"class":42},"        m_Lover ",[36,16263,47],{"class":46},[36,16265,16266],{"class":42}," lover;\n",[36,16268,16269],{"class":38,"line":3057},[36,16270,2667],{"class":42},[36,16272,16273],{"class":38,"line":3071},[36,16274,2880],{"emptyLinePlaceholder":553},[36,16276,16277],{"class":38,"line":3079},[36,16278,15702],{"class":46},[36,16280,16281,16284],{"class":38,"line":3084},[36,16282,16283],{"class":42},"    string m_Name;",[36,16285,16286],{"class":69}," \u002F\u002F可读可写  姓名\n",[36,16288,16289],{"class":38,"line":3090},[36,16290,13690],{"class":42},[36,16292,16293,16295,16298],{"class":38,"line":3096},[36,16294,2465],{"class":46},[36,16296,16297],{"class":42}," m_Age;",[36,16299,16300],{"class":69}," \u002F\u002F只读  年龄\n",[36,16302,16303],{"class":38,"line":3101},[36,16304,2880],{"emptyLinePlaceholder":553},[36,16306,16307,16310],{"class":38,"line":8428},[36,16308,16309],{"class":42},"    string m_Lover;",[36,16311,16312],{"class":69}," \u002F\u002F只写  情人\n",[36,16314,16315],{"class":38,"line":8452},[36,16316,4475],{"class":42},[36,16318,16319],{"class":38,"line":8457},[36,16320,2880],{"emptyLinePlaceholder":553},[36,16322,16323,16325,16327],{"class":38,"line":8463},[36,16324,631],{"class":46},[36,16326,2453],{"class":2443},[36,16328,11333],{"class":42},[36,16330,16331],{"class":38,"line":8490},[36,16332,2880],{"emptyLinePlaceholder":553},[36,16334,16335],{"class":38,"line":8495},[36,16336,15793],{"class":42},[36,16338,16339],{"class":38,"line":8501},[36,16340,16341],{"class":69},"    \u002F\u002F姓名设置\n",[36,16343,16344,16347,16349,16351,16353],{"class":38,"line":8513},[36,16345,16346],{"class":42},"    p.",[36,16348,15546],{"class":2443},[36,16350,345],{"class":42},[36,16352,8396],{"class":405},[36,16354,3199],{"class":42},[36,16356,16357,16359,16361,16364,16366,16369,16372,16374,16376],{"class":38,"line":8525},[36,16358,7009],{"class":42},[36,16360,1657],{"class":46},[36,16362,16363],{"class":405}," \"姓名： \"",[36,16365,1925],{"class":46},[36,16367,16368],{"class":42}," p.",[36,16370,16371],{"class":2443},"getName",[36,16373,13530],{"class":42},[36,16375,1657],{"class":46},[36,16377,9320],{"class":42},[36,16379,16380],{"class":38,"line":8537},[36,16381,2880],{"emptyLinePlaceholder":553},[36,16383,16384],{"class":38,"line":10196},[36,16385,16386],{"class":69},"    \u002F\u002F年龄设置\n",[36,16388,16389,16391,16394,16396,16398],{"class":38,"line":10221},[36,16390,16346],{"class":42},[36,16392,16393],{"class":2443},"setAge",[36,16395,345],{"class":42},[36,16397,1269],{"class":53},[36,16399,3199],{"class":42},[36,16401,16402,16404,16406,16409,16411,16413,16416,16418,16420],{"class":38,"line":10244},[36,16403,7009],{"class":42},[36,16405,1657],{"class":46},[36,16407,16408],{"class":405}," \"年龄： \"",[36,16410,1925],{"class":46},[36,16412,16368],{"class":42},[36,16414,16415],{"class":2443},"getAge",[36,16417,13530],{"class":42},[36,16419,1657],{"class":46},[36,16421,9320],{"class":42},[36,16423,16424],{"class":38,"line":10268},[36,16425,2880],{"emptyLinePlaceholder":553},[36,16427,16428],{"class":38,"line":10273},[36,16429,16430],{"class":69},"    \u002F\u002F情人设置\n",[36,16432,16433,16435,16438,16440,16443],{"class":38,"line":10278},[36,16434,16346],{"class":42},[36,16436,16437],{"class":2443},"setLover",[36,16439,345],{"class":42},[36,16441,16442],{"class":405},"\"苍井\"",[36,16444,3199],{"class":42},[36,16446,16447,16450],{"class":38,"line":10283},[36,16448,16449],{"class":69},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,16451,16452],{"class":69},"  \u002F\u002F只写属性，不可以读取\n",[36,16454,16455],{"class":38,"line":10292},[36,16456,2880],{"emptyLinePlaceholder":553},[36,16458,16459,16461,16463,16465],{"class":38,"line":10297},[36,16460,2783],{"class":2443},[36,16462,345],{"class":42},[36,16464,2788],{"class":405},[36,16466,3199],{"class":42},[36,16468,16469],{"class":38,"line":10303},[36,16470,2880],{"emptyLinePlaceholder":553},[36,16472,16473,16475,16477],{"class":38,"line":10324},[36,16474,4570],{"class":46},[36,16476,4573],{"class":53},[36,16478,1774],{"class":42},[36,16480,16481],{"class":38,"line":10330},[36,16482,2045],{"class":42},[596,16484,16486],{"id":16485},"_814封装案例","8.1.4封装案例",[579,16488,16489],{},[582,16490,16491,16494],{},[770,16492,16493],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1620,16496,16497,16500],{},[582,16498,16499],{},"求出立方体的面积和体积",[582,16501,16502],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,16504,16506],{"className":617,"code":16505,"language":619,"meta":31,"style":31},"#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",[33,16507,16508,16514,16524,16531,16535,16539,16544,16574,16578,16588,16598,16608,16612,16621,16625,16661,16665,16674,16678,16694,16698,16703,16712,16716,16723,16727,16736,16740,16747,16751,16760,16764,16771,16775,16780,16797,16801,16847,16851,16860,16864,16868,16872,16881,16885,16889,16894,16898,16904,16910,16916,16920,16924,16929,16951,16955,17009,17013,17021,17025,17030,17035,17048,17055,17071,17082,17088,17111,17117,17140,17154,17174,17180,17191,17214,17236,17241,17247,17261,17274,17279,17293,17298,17304,17309,17323,17328,17333,17347,17359,17364,17377,17382,17387,17392,17405,17410],{"__ignoreMap":31},[36,16509,16510,16512],{"class":38,"line":39},[36,16511,2429],{"class":46},[36,16513,2432],{"class":405},[36,16515,16516,16518,16520,16522],{"class":38,"line":66},[36,16517,2437],{"class":46},[36,16519,2440],{"class":46},[36,16521,2444],{"class":2443},[36,16523,1774],{"class":42},[36,16525,16526,16528],{"class":38,"line":73},[36,16527,15174],{"class":46},[36,16529,16530],{"class":2443}," Cube\n",[36,16532,16533],{"class":38,"line":79},[36,16534,2026],{"class":42},[36,16536,16537],{"class":38,"line":85},[36,16538,15196],{"class":46},[36,16540,16541],{"class":38,"line":419},[36,16542,16543],{"class":69},"    \u002F\u002F输入长宽高\n",[36,16545,16546,16548,16551,16553,16555,16558,16560,16562,16565,16567,16569,16572],{"class":38,"line":425},[36,16547,15389],{"class":46},[36,16549,16550],{"class":2443}," setLwh",[36,16552,345],{"class":42},[36,16554,631],{"class":46},[36,16556,16557],{"class":5696}," l",[36,16559,57],{"class":42},[36,16561,631],{"class":46},[36,16563,16564],{"class":5696}," w",[36,16566,57],{"class":42},[36,16568,631],{"class":46},[36,16570,16571],{"class":5696}," h",[36,16573,63],{"class":42},[36,16575,16576],{"class":38,"line":431},[36,16577,2510],{"class":42},[36,16579,16580,16583,16585],{"class":38,"line":437},[36,16581,16582],{"class":42},"        m_L",[36,16584,47],{"class":46},[36,16586,16587],{"class":42},"l;\n",[36,16589,16590,16593,16595],{"class":38,"line":443},[36,16591,16592],{"class":42},"        m_W",[36,16594,47],{"class":46},[36,16596,16597],{"class":42},"w;\n",[36,16599,16600,16603,16605],{"class":38,"line":2092},[36,16601,16602],{"class":42},"        m_H",[36,16604,47],{"class":46},[36,16606,16607],{"class":42},"h;\n",[36,16609,16610],{"class":38,"line":2097},[36,16611,2667],{"class":42},[36,16613,16614,16616,16619],{"class":38,"line":2103},[36,16615,2465],{"class":46},[36,16617,16618],{"class":2443}," mianji",[36,16620,2456],{"class":42},[36,16622,16623],{"class":38,"line":2108},[36,16624,2510],{"class":42},[36,16626,16627,16629,16631,16633,16636,16638,16641,16643,16646,16648,16651,16653,16656,16658],{"class":38,"line":2122},[36,16628,15232],{"class":46},[36,16630,15235],{"class":53},[36,16632,1071],{"class":46},[36,16634,16635],{"class":42},"(m_L",[36,16637,1071],{"class":46},[36,16639,16640],{"class":42},"m_W ",[36,16642,1097],{"class":46},[36,16644,16645],{"class":42}," m_L",[36,16647,1071],{"class":46},[36,16649,16650],{"class":42},"m_H ",[36,16652,1097],{"class":46},[36,16654,16655],{"class":42}," m_W",[36,16657,1071],{"class":46},[36,16659,16660],{"class":42},"m_H);\n",[36,16662,16663],{"class":38,"line":2127},[36,16664,2667],{"class":42},[36,16666,16667,16669,16672],{"class":38,"line":2133},[36,16668,2465],{"class":46},[36,16670,16671],{"class":2443}," tiji",[36,16673,2456],{"class":42},[36,16675,16676],{"class":38,"line":2154},[36,16677,2510],{"class":42},[36,16679,16680,16682,16684,16686,16689,16691],{"class":38,"line":2159},[36,16681,15232],{"class":46},[36,16683,16645],{"class":42},[36,16685,1071],{"class":46},[36,16687,16688],{"class":42},"m_W",[36,16690,1071],{"class":46},[36,16692,16693],{"class":42},"m_H;\n",[36,16695,16696],{"class":38,"line":2173},[36,16697,2667],{"class":42},[36,16699,16700],{"class":38,"line":2178},[36,16701,16702],{"class":69},"    \u002F\u002F获取长宽高\n",[36,16704,16705,16707,16710],{"class":38,"line":2207},[36,16706,2465],{"class":46},[36,16708,16709],{"class":2443}," getLength",[36,16711,2456],{"class":42},[36,16713,16714],{"class":38,"line":2212},[36,16715,2510],{"class":42},[36,16717,16718,16720],{"class":38,"line":2229},[36,16719,15232],{"class":46},[36,16721,16722],{"class":42}," m_L;\n",[36,16724,16725],{"class":38,"line":2234},[36,16726,2667],{"class":42},[36,16728,16729,16731,16734],{"class":38,"line":2239},[36,16730,2465],{"class":46},[36,16732,16733],{"class":2443}," getWidth",[36,16735,2456],{"class":42},[36,16737,16738],{"class":38,"line":2244},[36,16739,2510],{"class":42},[36,16741,16742,16744],{"class":38,"line":2258},[36,16743,15232],{"class":46},[36,16745,16746],{"class":42}," m_W;\n",[36,16748,16749],{"class":38,"line":2263},[36,16750,2667],{"class":42},[36,16752,16753,16755,16758],{"class":38,"line":3057},[36,16754,2465],{"class":46},[36,16756,16757],{"class":2443}," getHeight",[36,16759,2456],{"class":42},[36,16761,16762],{"class":38,"line":3071},[36,16763,2510],{"class":42},[36,16765,16766,16768],{"class":38,"line":3079},[36,16767,15232],{"class":46},[36,16769,16770],{"class":42}," m_H;\n",[36,16772,16773],{"class":38,"line":3084},[36,16774,2667],{"class":42},[36,16776,16777],{"class":38,"line":3090},[36,16778,16779],{"class":69},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,16781,16782,16785,16788,16790,16793,16795],{"class":38,"line":3096},[36,16783,16784],{"class":46},"    bool",[36,16786,16787],{"class":2443}," isEqual",[36,16789,345],{"class":42},[36,16791,16792],{"class":2443},"Cube",[36,16794,3329],{"class":5696},[36,16796,63],{"class":42},[36,16798,16799],{"class":38,"line":3101},[36,16800,2510],{"class":42},[36,16802,16803,16805,16808,16811,16813,16815,16818,16820,16823,16826,16828,16830,16833,16835,16837,16840,16842,16844],{"class":38,"line":8428},[36,16804,2977],{"class":46},[36,16806,16807],{"class":42}," (c.",[36,16809,16810],{"class":2443},"getLength",[36,16812,13530],{"class":42},[36,16814,3429],{"class":46},[36,16816,16817],{"class":42}," m_L ",[36,16819,2195],{"class":46},[36,16821,16822],{"class":42}," c.",[36,16824,16825],{"class":2443},"getWidth",[36,16827,13530],{"class":42},[36,16829,3429],{"class":46},[36,16831,16832],{"class":42}," m_W ",[36,16834,2195],{"class":46},[36,16836,16822],{"class":42},[36,16838,16839],{"class":2443},"getHeight",[36,16841,13530],{"class":42},[36,16843,3429],{"class":46},[36,16845,16846],{"class":42}," m_H)\n",[36,16848,16849],{"class":38,"line":8452},[36,16850,2990],{"class":42},[36,16852,16853,16855,16858],{"class":38,"line":8457},[36,16854,16212],{"class":46},[36,16856,16857],{"class":53}," true",[36,16859,1774],{"class":42},[36,16861,16862],{"class":38,"line":8463},[36,16863,3009],{"class":42},[36,16865,16866],{"class":38,"line":8490},[36,16867,3050],{"class":46},[36,16869,16870],{"class":38,"line":8495},[36,16871,2990],{"class":42},[36,16873,16874,16876,16879],{"class":38,"line":8501},[36,16875,16212],{"class":46},[36,16877,16878],{"class":53}," false",[36,16880,1774],{"class":42},[36,16882,16883],{"class":38,"line":8513},[36,16884,3009],{"class":42},[36,16886,16887],{"class":38,"line":8525},[36,16888,2667],{"class":42},[36,16890,16891],{"class":38,"line":8537},[36,16892,16893],{"class":69},"    \u002F\u002F私有属性\n",[36,16895,16896],{"class":38,"line":10196},[36,16897,15702],{"class":46},[36,16899,16900,16902],{"class":38,"line":10221},[36,16901,2465],{"class":46},[36,16903,16722],{"class":42},[36,16905,16906,16908],{"class":38,"line":10244},[36,16907,2465],{"class":46},[36,16909,16746],{"class":42},[36,16911,16912,16914],{"class":38,"line":10268},[36,16913,2465],{"class":46},[36,16915,16770],{"class":42},[36,16917,16918],{"class":38,"line":10273},[36,16919,2880],{"emptyLinePlaceholder":553},[36,16921,16922],{"class":38,"line":10278},[36,16923,4475],{"class":42},[36,16925,16926],{"class":38,"line":10283},[36,16927,16928],{"class":69},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,16930,16931,16933,16935,16937,16939,16942,16944,16946,16949],{"class":38,"line":10292},[36,16932,1835],{"class":46},[36,16934,16787],{"class":2443},[36,16936,345],{"class":42},[36,16938,16792],{"class":2443},[36,16940,16941],{"class":5696}," c1",[36,16943,57],{"class":42},[36,16945,16792],{"class":2443},[36,16947,16948],{"class":5696}," c2",[36,16950,63],{"class":42},[36,16952,16953],{"class":38,"line":10297},[36,16954,2026],{"class":42},[36,16956,16957,16959,16962,16964,16966,16968,16971,16973,16976,16978,16980,16982,16984,16986,16988,16990,16992,16994,16996,16998,17000,17002,17004,17006],{"class":38,"line":10303},[36,16958,4570],{"class":46},[36,16960,16961],{"class":42}," (c1.",[36,16963,16810],{"class":2443},[36,16965,13530],{"class":42},[36,16967,3429],{"class":46},[36,16969,16970],{"class":42}," c2.",[36,16972,16810],{"class":2443},[36,16974,16975],{"class":42},"()) ",[36,16977,2195],{"class":46},[36,16979,16961],{"class":42},[36,16981,16825],{"class":2443},[36,16983,13530],{"class":42},[36,16985,3429],{"class":46},[36,16987,16970],{"class":42},[36,16989,16825],{"class":2443},[36,16991,16975],{"class":42},[36,16993,2195],{"class":46},[36,16995,16961],{"class":42},[36,16997,16839],{"class":2443},[36,16999,13530],{"class":42},[36,17001,3429],{"class":46},[36,17003,16970],{"class":42},[36,17005,16839],{"class":2443},[36,17007,17008],{"class":42},"());\n",[36,17010,17011],{"class":38,"line":10324},[36,17012,2045],{"class":42},[36,17014,17015,17017,17019],{"class":38,"line":10330},[36,17016,631],{"class":46},[36,17018,2453],{"class":2443},[36,17020,2456],{"class":42},[36,17022,17023],{"class":38,"line":10344},[36,17024,2026],{"class":42},[36,17026,17027],{"class":38,"line":10350},[36,17028,17029],{"class":42},"    Cube c1;\n",[36,17031,17032],{"class":38,"line":10377},[36,17033,17034],{"class":69},"    \u002F\u002F输入立方体的长宽高\n",[36,17036,17037,17039,17041,17044,17046],{"class":38,"line":10386},[36,17038,2031],{"class":42},[36,17040,1657],{"class":46},[36,17042,17043],{"class":405},"\"请输入第一个立方体的长、宽、高：\"",[36,17045,1657],{"class":46},[36,17047,1679],{"class":42},[36,17049,17050,17052],{"class":38,"line":10392},[36,17051,2465],{"class":46},[36,17053,17054],{"class":42}," l,w,h,l1,w1,h1;\n",[36,17056,17057,17059,17061,17063,17065,17067,17069],{"class":38,"line":10400},[36,17058,2492],{"class":42},[36,17060,1910],{"class":46},[36,17062,1133],{"class":42},[36,17064,1910],{"class":46},[36,17066,1408],{"class":42},[36,17068,1910],{"class":46},[36,17070,16607],{"class":42},[36,17072,17073,17076,17079],{"class":38,"line":10405},[36,17074,17075],{"class":42},"    c1.",[36,17077,17078],{"class":2443},"setLwh",[36,17080,17081],{"class":42},"(l,w,h);\n",[36,17083,17085],{"class":38,"line":17084},66,[36,17086,17087],{"class":69},"    \u002F\u002F面积\n",[36,17089,17091,17093,17095,17098,17100,17102,17105,17107,17109],{"class":38,"line":17090},67,[36,17092,2031],{"class":42},[36,17094,1657],{"class":46},[36,17096,17097],{"class":405},"\"立方体的表面积为：\"",[36,17099,1657],{"class":46},[36,17101,15310],{"class":42},[36,17103,17104],{"class":2443},"mianji",[36,17106,2907],{"class":42},[36,17108,1657],{"class":46},[36,17110,1679],{"class":42},[36,17112,17114],{"class":38,"line":17113},68,[36,17115,17116],{"class":69},"    \u002F\u002F体积\n",[36,17118,17120,17122,17124,17127,17129,17131,17134,17136,17138],{"class":38,"line":17119},69,[36,17121,2031],{"class":42},[36,17123,1657],{"class":46},[36,17125,17126],{"class":405},"\"立方体的体积为：\"",[36,17128,1657],{"class":46},[36,17130,15310],{"class":42},[36,17132,17133],{"class":2443},"tiji",[36,17135,2907],{"class":42},[36,17137,1657],{"class":46},[36,17139,1679],{"class":42},[36,17141,17143,17145,17147,17150,17152],{"class":38,"line":17142},70,[36,17144,2031],{"class":42},[36,17146,1657],{"class":46},[36,17148,17149],{"class":405},"\"请输入第二个立方体的长、宽、高：\"",[36,17151,1657],{"class":46},[36,17153,1679],{"class":42},[36,17155,17157,17159,17161,17164,17166,17169,17171],{"class":38,"line":17156},71,[36,17158,2492],{"class":42},[36,17160,1910],{"class":46},[36,17162,17163],{"class":42},"l1",[36,17165,1910],{"class":46},[36,17167,17168],{"class":42},"w1",[36,17170,1910],{"class":46},[36,17172,17173],{"class":42},"h1;\n",[36,17175,17177],{"class":38,"line":17176},72,[36,17178,17179],{"class":42},"    Cube c2;\n",[36,17181,17183,17186,17188],{"class":38,"line":17182},73,[36,17184,17185],{"class":42},"    c2.",[36,17187,17078],{"class":2443},[36,17189,17190],{"class":42},"(l1,w1,h1);\n",[36,17192,17194,17196,17198,17201,17203,17206,17208,17210,17212],{"class":38,"line":17193},74,[36,17195,2031],{"class":42},[36,17197,1657],{"class":46},[36,17199,17200],{"class":405},"\"第二个立方体的表面积为：\"",[36,17202,1657],{"class":46},[36,17204,17205],{"class":42},"c2.",[36,17207,17104],{"class":2443},[36,17209,2907],{"class":42},[36,17211,1657],{"class":46},[36,17213,1679],{"class":42},[36,17215,17217,17219,17221,17224,17226,17228,17230,17232,17234],{"class":38,"line":17216},75,[36,17218,2031],{"class":42},[36,17220,1657],{"class":46},[36,17222,17223],{"class":405},"\"第二个立方体的体积为：\"",[36,17225,1657],{"class":46},[36,17227,17205],{"class":42},[36,17229,17133],{"class":2443},[36,17231,2907],{"class":42},[36,17233,1657],{"class":46},[36,17235,1679],{"class":42},[36,17237,17239],{"class":38,"line":17238},76,[36,17240,2880],{"emptyLinePlaceholder":553},[36,17242,17244],{"class":38,"line":17243},77,[36,17245,17246],{"class":69},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,17248,17250,17252,17254,17257,17259],{"class":38,"line":17249},78,[36,17251,2031],{"class":42},[36,17253,1657],{"class":46},[36,17255,17256],{"class":405},"\"内部函数判断结果：\"",[36,17258,1657],{"class":46},[36,17260,1679],{"class":42},[36,17262,17264,17266,17268,17271],{"class":38,"line":17263},79,[36,17265,3581],{"class":46},[36,17267,16961],{"class":42},[36,17269,17270],{"class":2443},"isEqual",[36,17272,17273],{"class":42},"(c2))\n",[36,17275,17277],{"class":38,"line":17276},80,[36,17278,2510],{"class":42},[36,17280,17282,17284,17286,17289,17291],{"class":38,"line":17281},81,[36,17283,3931],{"class":42},[36,17285,1657],{"class":46},[36,17287,17288],{"class":405},"\"两个立方体相等\"",[36,17290,1657],{"class":46},[36,17292,1679],{"class":42},[36,17294,17296],{"class":38,"line":17295},82,[36,17297,2667],{"class":42},[36,17299,17301],{"class":38,"line":17300},83,[36,17302,17303],{"class":46},"    else\n",[36,17305,17307],{"class":38,"line":17306},84,[36,17308,2510],{"class":42},[36,17310,17312,17314,17316,17319,17321],{"class":38,"line":17311},85,[36,17313,3931],{"class":42},[36,17315,1657],{"class":46},[36,17317,17318],{"class":405},"\"两个立方体不相等\"",[36,17320,1657],{"class":46},[36,17322,1679],{"class":42},[36,17324,17326],{"class":38,"line":17325},86,[36,17327,2667],{"class":42},[36,17329,17331],{"class":38,"line":17330},87,[36,17332,2880],{"emptyLinePlaceholder":553},[36,17334,17336,17338,17340,17343,17345],{"class":38,"line":17335},88,[36,17337,2031],{"class":42},[36,17339,1657],{"class":46},[36,17341,17342],{"class":405},"\"全局函数判断结果：\"",[36,17344,1657],{"class":46},[36,17346,1679],{"class":42},[36,17348,17350,17352,17354,17356],{"class":38,"line":17349},89,[36,17351,3581],{"class":46},[36,17353,2138],{"class":42},[36,17355,17270],{"class":2443},[36,17357,17358],{"class":42},"(c1, c2))\n",[36,17360,17362],{"class":38,"line":17361},90,[36,17363,2510],{"class":42},[36,17365,17367,17369,17371,17373,17375],{"class":38,"line":17366},91,[36,17368,3931],{"class":42},[36,17370,1657],{"class":46},[36,17372,17288],{"class":405},[36,17374,1657],{"class":46},[36,17376,1679],{"class":42},[36,17378,17380],{"class":38,"line":17379},92,[36,17381,2667],{"class":42},[36,17383,17385],{"class":38,"line":17384},93,[36,17386,17303],{"class":46},[36,17388,17390],{"class":38,"line":17389},94,[36,17391,2510],{"class":42},[36,17393,17395,17397,17399,17401,17403],{"class":38,"line":17394},95,[36,17396,3931],{"class":42},[36,17398,1657],{"class":46},[36,17400,17318],{"class":405},[36,17402,1657],{"class":46},[36,17404,1679],{"class":42},[36,17406,17408],{"class":38,"line":17407},96,[36,17409,2667],{"class":42},[36,17411,17413],{"class":38,"line":17412},97,[36,17414,2045],{"class":42},[579,17416,17417],{"start":66},[582,17418,17419],{},[770,17420,17421],{},"练习案例2：点和圆的关系",[1620,17423,17424],{},[582,17425,17426],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,17428,17430],{"className":617,"code":17429,"language":619,"meta":31,"style":31},"#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",[33,17431,17432,17438,17448,17455,17462,17466,17470,17475,17509,17514,17530,17544,17548,17552,17559,17566,17570,17576,17580,17584,17588,17610,17633,17638,17652,17667,17671,17675,17681,17686,17691,17695,17721,17725,17755,17783,17811,17828,17832,17845,17849,17853,17857,17870,17874,17878,17886,17890,17894,17898,17903,17907,17918,17925,17934,17944,17955,17962,17975,17986,17996,18007,18014,18028,18033,18043,18051],{"__ignoreMap":31},[36,17433,17434,17436],{"class":38,"line":39},[36,17435,2429],{"class":46},[36,17437,2432],{"class":405},[36,17439,17440,17442,17444,17446],{"class":38,"line":66},[36,17441,2437],{"class":46},[36,17443,2440],{"class":46},[36,17445,2444],{"class":2443},[36,17447,1774],{"class":42},[36,17449,17450,17452],{"class":38,"line":73},[36,17451,2429],{"class":46},[36,17453,17454],{"class":405},"\u003Ccmath>\n",[36,17456,17457,17459],{"class":38,"line":79},[36,17458,15174],{"class":46},[36,17460,17461],{"class":2443}," Point\n",[36,17463,17464],{"class":38,"line":85},[36,17465,2026],{"class":42},[36,17467,17468],{"class":38,"line":419},[36,17469,15196],{"class":46},[36,17471,17472],{"class":38,"line":425},[36,17473,17474],{"class":69},"    \u002F\u002F赋值\n",[36,17476,17477,17479,17482,17484,17486,17489,17491,17493,17496,17499,17501,17504,17506],{"class":38,"line":431},[36,17478,15389],{"class":46},[36,17480,17481],{"class":2443}," setPoint",[36,17483,345],{"class":42},[36,17485,14517],{"class":46},[36,17487,17488],{"class":5696}," x",[36,17490,12915],{"class":42},[36,17492,14517],{"class":46},[36,17494,17495],{"class":5696}," y",[36,17497,17498],{"class":42},") { m_x ",[36,17500,47],{"class":46},[36,17502,17503],{"class":42}," x; m_y ",[36,17505,47],{"class":46},[36,17507,17508],{"class":42}," y; }\n",[36,17510,17511],{"class":38,"line":437},[36,17512,17513],{"class":69},"    \u002F\u002F获取坐标\n",[36,17515,17516,17518,17521,17524,17527],{"class":38,"line":443},[36,17517,15218],{"class":46},[36,17519,17520],{"class":2443}," getX",[36,17522,17523],{"class":42},"() { ",[36,17525,17526],{"class":46},"return",[36,17528,17529],{"class":42}," m_x; }\n",[36,17531,17532,17534,17537,17539,17541],{"class":38,"line":2092},[36,17533,15218],{"class":46},[36,17535,17536],{"class":2443}," getY",[36,17538,17523],{"class":42},[36,17540,17526],{"class":46},[36,17542,17543],{"class":42}," m_y; }\n",[36,17545,17546],{"class":38,"line":2097},[36,17547,2880],{"emptyLinePlaceholder":553},[36,17549,17550],{"class":38,"line":2103},[36,17551,15702],{"class":46},[36,17553,17554,17556],{"class":38,"line":2108},[36,17555,15218],{"class":46},[36,17557,17558],{"class":42}," m_x;\n",[36,17560,17561,17563],{"class":38,"line":2122},[36,17562,15218],{"class":46},[36,17564,17565],{"class":42}," m_y;\n",[36,17567,17568],{"class":38,"line":2127},[36,17569,4475],{"class":42},[36,17571,17572,17574],{"class":38,"line":2133},[36,17573,15174],{"class":46},[36,17575,15177],{"class":2443},[36,17577,17578],{"class":38,"line":2154},[36,17579,2026],{"class":42},[36,17581,17582],{"class":38,"line":2159},[36,17583,15196],{"class":46},[36,17585,17586],{"class":38,"line":2173},[36,17587,17474],{"class":69},[36,17589,17590,17592,17595,17597,17599,17602,17605,17607],{"class":38,"line":2178},[36,17591,15389],{"class":46},[36,17593,17594],{"class":2443}," setRadius",[36,17596,345],{"class":42},[36,17598,14517],{"class":46},[36,17600,17601],{"class":5696}," r",[36,17603,17604],{"class":42},") { m_r ",[36,17606,47],{"class":46},[36,17608,17609],{"class":42}," r; }\n",[36,17611,17612,17614,17617,17619,17622,17625,17628,17630],{"class":38,"line":2207},[36,17613,15389],{"class":46},[36,17615,17616],{"class":2443}," setCenter",[36,17618,345],{"class":42},[36,17620,17621],{"class":2443},"Point",[36,17623,17624],{"class":5696}," center",[36,17626,17627],{"class":42},") { m_center ",[36,17629,47],{"class":46},[36,17631,17632],{"class":42}," center; }\n",[36,17634,17635],{"class":38,"line":2212},[36,17636,17637],{"class":69},"    \u002F\u002F获取属性\n",[36,17639,17640,17642,17645,17647,17649],{"class":38,"line":2229},[36,17641,15218],{"class":46},[36,17643,17644],{"class":2443}," getRadius",[36,17646,17523],{"class":42},[36,17648,17526],{"class":46},[36,17650,17651],{"class":42}," m_r; }\n",[36,17653,17654,17657,17660,17662,17664],{"class":38,"line":2234},[36,17655,17656],{"class":2443},"    Point",[36,17658,17659],{"class":2443}," getCenter",[36,17661,17523],{"class":42},[36,17663,17526],{"class":46},[36,17665,17666],{"class":42}," m_center; }\n",[36,17668,17669],{"class":38,"line":2239},[36,17670,2880],{"emptyLinePlaceholder":553},[36,17672,17673],{"class":38,"line":2244},[36,17674,15702],{"class":46},[36,17676,17677,17679],{"class":38,"line":2258},[36,17678,15218],{"class":46},[36,17680,15208],{"class":42},[36,17682,17683],{"class":38,"line":2263},[36,17684,17685],{"class":69},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,17687,17688],{"class":38,"line":3057},[36,17689,17690],{"class":42},"    Point m_center;\n",[36,17692,17693],{"class":38,"line":3071},[36,17694,4475],{"class":42},[36,17696,17697,17699,17702,17704,17707,17709,17711,17713,17715,17717,17719],{"class":38,"line":3079},[36,17698,5844],{"class":46},[36,17700,17701],{"class":2443}," isInCircle",[36,17703,345],{"class":42},[36,17705,17706],{"class":2443},"Circle",[36,17708,11064],{"class":46},[36,17710,907],{"class":5696},[36,17712,57],{"class":42},[36,17714,17621],{"class":2443},[36,17716,11064],{"class":46},[36,17718,19],{"class":5696},[36,17720,63],{"class":42},[36,17722,17723],{"class":38,"line":3084},[36,17724,2026],{"class":42},[36,17726,17727,17729,17732,17734,17736,17739,17742,17745,17747,17749,17751,17753],{"class":38,"line":3090},[36,17728,15218],{"class":46},[36,17730,17731],{"class":42}," dx ",[36,17733,47],{"class":46},[36,17735,16822],{"class":42},[36,17737,17738],{"class":2443},"getCenter",[36,17740,17741],{"class":42},"().",[36,17743,17744],{"class":2443},"getX",[36,17746,13530],{"class":42},[36,17748,173],{"class":46},[36,17750,16368],{"class":42},[36,17752,17744],{"class":2443},[36,17754,6116],{"class":42},[36,17756,17757,17759,17762,17764,17766,17768,17770,17773,17775,17777,17779,17781],{"class":38,"line":3096},[36,17758,15218],{"class":46},[36,17760,17761],{"class":42}," dy ",[36,17763,47],{"class":46},[36,17765,16822],{"class":42},[36,17767,17738],{"class":2443},[36,17769,17741],{"class":42},[36,17771,17772],{"class":2443},"getY",[36,17774,13530],{"class":42},[36,17776,173],{"class":46},[36,17778,16368],{"class":42},[36,17780,17772],{"class":2443},[36,17782,6116],{"class":42},[36,17784,17785,17787,17790,17792,17795,17798,17800,17802,17804,17806,17808],{"class":38,"line":3101},[36,17786,15218],{"class":46},[36,17788,17789],{"class":42}," distance ",[36,17791,47],{"class":46},[36,17793,17794],{"class":2443}," sqrt",[36,17796,17797],{"class":42},"(dx ",[36,17799,1071],{"class":46},[36,17801,17731],{"class":42},[36,17803,1097],{"class":46},[36,17805,17761],{"class":42},[36,17807,1071],{"class":46},[36,17809,17810],{"class":42}," dy);\n",[36,17812,17813,17815,17818,17820,17822,17825],{"class":38,"line":8428},[36,17814,3581],{"class":46},[36,17816,17817],{"class":42}," (distance ",[36,17819,1523],{"class":46},[36,17821,16822],{"class":42},[36,17823,17824],{"class":2443},"getRadius",[36,17826,17827],{"class":42},"())\n",[36,17829,17830],{"class":38,"line":8452},[36,17831,2510],{"class":42},[36,17833,17834,17836,17838,17841,17843],{"class":38,"line":8457},[36,17835,10149],{"class":42},[36,17837,1657],{"class":46},[36,17839,17840],{"class":405}," \"点在圆内\"",[36,17842,1925],{"class":46},[36,17844,9320],{"class":42},[36,17846,17847],{"class":38,"line":8463},[36,17848,2667],{"class":42},[36,17850,17851],{"class":38,"line":8490},[36,17852,17303],{"class":46},[36,17854,17855],{"class":38,"line":8495},[36,17856,2510],{"class":42},[36,17858,17859,17861,17863,17866,17868],{"class":38,"line":8501},[36,17860,10149],{"class":42},[36,17862,1657],{"class":46},[36,17864,17865],{"class":405}," \"点在圆外\"",[36,17867,1925],{"class":46},[36,17869,9320],{"class":42},[36,17871,17872],{"class":38,"line":8513},[36,17873,2667],{"class":42},[36,17875,17876],{"class":38,"line":8525},[36,17877,2045],{"class":42},[36,17879,17880,17882,17884],{"class":38,"line":8537},[36,17881,631],{"class":46},[36,17883,2453],{"class":2443},[36,17885,2456],{"class":42},[36,17887,17888],{"class":38,"line":10196},[36,17889,2026],{"class":42},[36,17891,17892],{"class":38,"line":10221},[36,17893,15533],{"class":69},[36,17895,17896],{"class":38,"line":10244},[36,17897,15280],{"class":42},[36,17899,17900],{"class":38,"line":10268},[36,17901,17902],{"class":42},"    Point p1;\n",[36,17904,17905],{"class":38,"line":10273},[36,17906,17474],{"class":69},[36,17908,17909,17911,17913,17916],{"class":38,"line":10278},[36,17910,2031],{"class":42},[36,17912,1657],{"class":46},[36,17914,17915],{"class":405},"\"请输入圆的半径：\"",[36,17917,1774],{"class":42},[36,17919,17920,17922],{"class":38,"line":10283},[36,17921,15218],{"class":46},[36,17923,17924],{"class":42}," r;\n",[36,17926,17927,17929,17931],{"class":38,"line":10292},[36,17928,2492],{"class":42},[36,17930,1910],{"class":46},[36,17932,17933],{"class":42},"r;\n",[36,17935,17936,17938,17941],{"class":38,"line":10297},[36,17937,17075],{"class":42},[36,17939,17940],{"class":2443},"setRadius",[36,17942,17943],{"class":42},"(r);\n",[36,17945,17946,17948,17950,17953],{"class":38,"line":10303},[36,17947,2031],{"class":42},[36,17949,1657],{"class":46},[36,17951,17952],{"class":405},"\"请输入圆心坐标：\"",[36,17954,1774],{"class":42},[36,17956,17957,17959],{"class":38,"line":10324},[36,17958,15218],{"class":46},[36,17960,17961],{"class":42}," x, y;\n",[36,17963,17964,17966,17968,17970,17972],{"class":38,"line":10330},[36,17965,2492],{"class":42},[36,17967,1910],{"class":46},[36,17969,1433],{"class":42},[36,17971,1910],{"class":46},[36,17973,17974],{"class":42},"y;\n",[36,17976,17977,17980,17983],{"class":38,"line":10344},[36,17978,17979],{"class":42},"    p1.",[36,17981,17982],{"class":2443},"setPoint",[36,17984,17985],{"class":42},"(x, y);\n",[36,17987,17988,17990,17993],{"class":38,"line":10350},[36,17989,17075],{"class":42},[36,17991,17992],{"class":2443},"setCenter",[36,17994,17995],{"class":42},"(p1);\n",[36,17997,17998,18000,18002,18005],{"class":38,"line":10377},[36,17999,2031],{"class":42},[36,18001,1657],{"class":46},[36,18003,18004],{"class":405},"\"请输入测试点坐标：\"",[36,18006,1774],{"class":42},[36,18008,18009,18011],{"class":38,"line":10386},[36,18010,15218],{"class":46},[36,18012,18013],{"class":42}," x1, y1;\n",[36,18015,18016,18018,18020,18023,18025],{"class":38,"line":10392},[36,18017,2492],{"class":42},[36,18019,1910],{"class":46},[36,18021,18022],{"class":42},"x1",[36,18024,1910],{"class":46},[36,18026,18027],{"class":42},"y1;\n",[36,18029,18030],{"class":38,"line":10400},[36,18031,18032],{"class":42},"    Point p2;\n",[36,18034,18035,18038,18040],{"class":38,"line":10405},[36,18036,18037],{"class":42},"    p2.",[36,18039,17982],{"class":2443},[36,18041,18042],{"class":42},"(x1, y1);\n",[36,18044,18045,18048],{"class":38,"line":17084},[36,18046,18047],{"class":2443},"    isInCircle",[36,18049,18050],{"class":42},"(c1, p2);\n",[36,18052,18053],{"class":38,"line":17090},[36,18054,2045],{"class":42},[19,18056,18057],{},"在类中可以让另一个类作为本来的成员",[19,18059,18060],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18062,18063],{},"创建point.h",[26,18065,18067],{"className":617,"code":18066,"language":619,"meta":31,"style":31},"#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",[33,18068,18069,18080,18086,18096,18102,18106,18111,18115,18119,18139,18143,18151,18159,18163,18167,18173,18179],{"__ignoreMap":31},[36,18070,18071,18074,18077],{"class":38,"line":39},[36,18072,18073],{"class":46},"#pragma",[36,18075,18076],{"class":2443}," once",[36,18078,18079],{"class":69}," \u002F\u002F防止头文件重复包含\n",[36,18081,18082,18084],{"class":38,"line":66},[36,18083,2429],{"class":46},[36,18085,2432],{"class":405},[36,18087,18088,18090,18092,18094],{"class":38,"line":73},[36,18089,2437],{"class":46},[36,18091,2440],{"class":46},[36,18093,2444],{"class":2443},[36,18095,1774],{"class":42},[36,18097,18098,18100],{"class":38,"line":79},[36,18099,15174],{"class":46},[36,18101,17461],{"class":2443},[36,18103,18104],{"class":38,"line":85},[36,18105,2026],{"class":42},[36,18107,18108],{"class":38,"line":419},[36,18109,18110],{"class":69},"\u002F\u002F做好声明与变量定义就可以\n",[36,18112,18113],{"class":38,"line":425},[36,18114,15196],{"class":46},[36,18116,18117],{"class":38,"line":431},[36,18118,17474],{"class":69},[36,18120,18121,18123,18125,18127,18129,18131,18133,18135,18137],{"class":38,"line":437},[36,18122,15389],{"class":46},[36,18124,17481],{"class":2443},[36,18126,345],{"class":42},[36,18128,14517],{"class":46},[36,18130,17488],{"class":5696},[36,18132,12915],{"class":42},[36,18134,14517],{"class":46},[36,18136,17495],{"class":5696},[36,18138,3199],{"class":42},[36,18140,18141],{"class":38,"line":443},[36,18142,17513],{"class":69},[36,18144,18145,18147,18149],{"class":38,"line":2092},[36,18146,15218],{"class":46},[36,18148,17520],{"class":2443},[36,18150,6116],{"class":42},[36,18152,18153,18155,18157],{"class":38,"line":2097},[36,18154,15218],{"class":46},[36,18156,17536],{"class":2443},[36,18158,6116],{"class":42},[36,18160,18161],{"class":38,"line":2103},[36,18162,2880],{"emptyLinePlaceholder":553},[36,18164,18165],{"class":38,"line":2108},[36,18166,15702],{"class":46},[36,18168,18169,18171],{"class":38,"line":2122},[36,18170,15218],{"class":46},[36,18172,17558],{"class":42},[36,18174,18175,18177],{"class":38,"line":2127},[36,18176,15218],{"class":46},[36,18178,17565],{"class":42},[36,18180,18181],{"class":38,"line":2133},[36,18182,4475],{"class":42},[19,18184,18185],{},"创建point.cpp",[26,18187,18189],{"className":617,"code":18188,"language":619,"meta":31,"style":31},"#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",[33,18190,18191,18198,18203,18237,18241,18257],{"__ignoreMap":31},[36,18192,18193,18195],{"class":38,"line":39},[36,18194,2429],{"class":46},[36,18196,18197],{"class":405},"\u003Cpoint.h>\n",[36,18199,18200],{"class":38,"line":66},[36,18201,18202],{"class":69},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,18204,18205,18207,18210,18213,18215,18217,18219,18221,18223,18225,18227,18229,18231,18233,18235],{"class":38,"line":73},[36,18206,15389],{"class":46},[36,18208,18209],{"class":2443}," Point",[36,18211,18212],{"class":42},"::",[36,18214,17982],{"class":2443},[36,18216,345],{"class":42},[36,18218,14517],{"class":46},[36,18220,17488],{"class":5696},[36,18222,12915],{"class":42},[36,18224,14517],{"class":46},[36,18226,17495],{"class":5696},[36,18228,17498],{"class":42},[36,18230,47],{"class":46},[36,18232,17503],{"class":42},[36,18234,47],{"class":46},[36,18236,17508],{"class":42},[36,18238,18239],{"class":38,"line":79},[36,18240,17513],{"class":69},[36,18242,18243,18245,18247,18249,18251,18253,18255],{"class":38,"line":85},[36,18244,15218],{"class":46},[36,18246,18209],{"class":2443},[36,18248,18212],{"class":42},[36,18250,17744],{"class":2443},[36,18252,17523],{"class":42},[36,18254,17526],{"class":46},[36,18256,17529],{"class":42},[36,18258,18259,18261,18263,18265,18267,18269,18271],{"class":38,"line":419},[36,18260,15218],{"class":46},[36,18262,18209],{"class":2443},[36,18264,18212],{"class":42},[36,18266,17772],{"class":2443},[36,18268,17523],{"class":42},[36,18270,17526],{"class":46},[36,18272,17543],{"class":42},[19,18274,18275],{},"创建circle.h",[26,18277,18279],{"className":617,"code":18278,"language":619,"meta":31,"style":31},"#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",[33,18280,18281,18288,18294,18304,18310,18316,18320,18324,18328,18342,18356,18360,18368,18376,18380,18384,18390,18394,18398],{"__ignoreMap":31},[36,18282,18283,18285],{"class":38,"line":39},[36,18284,18073],{"class":46},[36,18286,18287],{"class":2443}," once\n",[36,18289,18290,18292],{"class":38,"line":66},[36,18291,2429],{"class":46},[36,18293,2432],{"class":405},[36,18295,18296,18298,18300,18302],{"class":38,"line":73},[36,18297,2437],{"class":46},[36,18299,2440],{"class":46},[36,18301,2444],{"class":2443},[36,18303,1774],{"class":42},[36,18305,18306,18308],{"class":38,"line":79},[36,18307,2429],{"class":46},[36,18309,18197],{"class":405},[36,18311,18312,18314],{"class":38,"line":85},[36,18313,15174],{"class":46},[36,18315,15177],{"class":2443},[36,18317,18318],{"class":38,"line":419},[36,18319,2026],{"class":42},[36,18321,18322],{"class":38,"line":425},[36,18323,15196],{"class":46},[36,18325,18326],{"class":38,"line":431},[36,18327,17474],{"class":69},[36,18329,18330,18332,18334,18336,18338,18340],{"class":38,"line":437},[36,18331,15389],{"class":46},[36,18333,17594],{"class":2443},[36,18335,345],{"class":42},[36,18337,14517],{"class":46},[36,18339,17601],{"class":5696},[36,18341,3199],{"class":42},[36,18343,18344,18346,18348,18350,18352,18354],{"class":38,"line":443},[36,18345,15389],{"class":46},[36,18347,17616],{"class":2443},[36,18349,345],{"class":42},[36,18351,17621],{"class":2443},[36,18353,17624],{"class":5696},[36,18355,3199],{"class":42},[36,18357,18358],{"class":38,"line":2092},[36,18359,17637],{"class":69},[36,18361,18362,18364,18366],{"class":38,"line":2097},[36,18363,15218],{"class":46},[36,18365,17644],{"class":2443},[36,18367,6116],{"class":42},[36,18369,18370,18372,18374],{"class":38,"line":2103},[36,18371,17656],{"class":2443},[36,18373,17659],{"class":2443},[36,18375,6116],{"class":42},[36,18377,18378],{"class":38,"line":2108},[36,18379,2880],{"emptyLinePlaceholder":553},[36,18381,18382],{"class":38,"line":2122},[36,18383,15702],{"class":46},[36,18385,18386,18388],{"class":38,"line":2127},[36,18387,15218],{"class":46},[36,18389,15208],{"class":42},[36,18391,18392],{"class":38,"line":2133},[36,18393,17685],{"class":69},[36,18395,18396],{"class":38,"line":2154},[36,18397,17690],{"class":42},[36,18399,18400],{"class":38,"line":2159},[36,18401,4475],{"class":42},[19,18403,18404],{},"创建circle.cpp",[26,18406,18408],{"className":617,"code":18407,"language":619,"meta":31,"style":31},"#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",[33,18409,18410,18417,18440,18462,18467,18483],{"__ignoreMap":31},[36,18411,18412,18414],{"class":38,"line":39},[36,18413,2429],{"class":46},[36,18415,18416],{"class":405},"\u003Ccircle.h>\n",[36,18418,18419,18421,18424,18426,18428,18430,18432,18434,18436,18438],{"class":38,"line":66},[36,18420,5844],{"class":46},[36,18422,18423],{"class":2443}," Circle",[36,18425,18212],{"class":42},[36,18427,17940],{"class":2443},[36,18429,345],{"class":42},[36,18431,14517],{"class":46},[36,18433,17601],{"class":5696},[36,18435,17604],{"class":42},[36,18437,47],{"class":46},[36,18439,17609],{"class":42},[36,18441,18442,18444,18446,18448,18450,18452,18454,18456,18458,18460],{"class":38,"line":73},[36,18443,5844],{"class":46},[36,18445,18423],{"class":2443},[36,18447,18212],{"class":42},[36,18449,17992],{"class":2443},[36,18451,345],{"class":42},[36,18453,17621],{"class":2443},[36,18455,17624],{"class":5696},[36,18457,17627],{"class":42},[36,18459,47],{"class":46},[36,18461,17632],{"class":42},[36,18463,18464],{"class":38,"line":79},[36,18465,18466],{"class":69},"\u002F\u002F获取属性\n",[36,18468,18469,18471,18473,18475,18477,18479,18481],{"class":38,"line":85},[36,18470,14517],{"class":46},[36,18472,18423],{"class":2443},[36,18474,18212],{"class":42},[36,18476,17824],{"class":2443},[36,18478,17523],{"class":42},[36,18480,17526],{"class":46},[36,18482,17651],{"class":42},[36,18484,18485,18487,18489,18491,18493,18495,18497],{"class":38,"line":419},[36,18486,17621],{"class":2443},[36,18488,18423],{"class":2443},[36,18490,18212],{"class":42},[36,18492,17738],{"class":2443},[36,18494,17523],{"class":42},[36,18496,17526],{"class":46},[36,18498,17666],{"class":42},[19,18500,18501],{},"使用封装的类",[26,18503,18505],{"className":617,"code":18504,"language":619,"meta":31,"style":31},"#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",[33,18506,18507,18513,18523,18529,18535,18559,18563,18589,18615,18639,18653,18657,18669,18673,18677,18681,18693,18697,18701,18709,18713,18717,18721,18725,18729,18739,18745,18753,18761,18771,18777,18789,18797,18805,18815,18821,18833,18837,18845,18851],{"__ignoreMap":31},[36,18508,18509,18511],{"class":38,"line":39},[36,18510,2429],{"class":46},[36,18512,2432],{"class":405},[36,18514,18515,18517,18519,18521],{"class":38,"line":66},[36,18516,2437],{"class":46},[36,18518,2440],{"class":46},[36,18520,2444],{"class":2443},[36,18522,1774],{"class":42},[36,18524,18525,18527],{"class":38,"line":73},[36,18526,2429],{"class":46},[36,18528,18416],{"class":405},[36,18530,18531,18533],{"class":38,"line":79},[36,18532,2429],{"class":46},[36,18534,18197],{"class":405},[36,18536,18537,18539,18541,18543,18545,18547,18549,18551,18553,18555,18557],{"class":38,"line":85},[36,18538,5844],{"class":46},[36,18540,17701],{"class":2443},[36,18542,345],{"class":42},[36,18544,17706],{"class":2443},[36,18546,11064],{"class":46},[36,18548,907],{"class":5696},[36,18550,57],{"class":42},[36,18552,17621],{"class":2443},[36,18554,11064],{"class":46},[36,18556,19],{"class":5696},[36,18558,63],{"class":42},[36,18560,18561],{"class":38,"line":419},[36,18562,2026],{"class":42},[36,18564,18565,18567,18569,18571,18573,18575,18577,18579,18581,18583,18585,18587],{"class":38,"line":425},[36,18566,15218],{"class":46},[36,18568,17731],{"class":42},[36,18570,47],{"class":46},[36,18572,16822],{"class":42},[36,18574,17738],{"class":2443},[36,18576,17741],{"class":42},[36,18578,17744],{"class":2443},[36,18580,13530],{"class":42},[36,18582,173],{"class":46},[36,18584,16368],{"class":42},[36,18586,17744],{"class":2443},[36,18588,6116],{"class":42},[36,18590,18591,18593,18595,18597,18599,18601,18603,18605,18607,18609,18611,18613],{"class":38,"line":431},[36,18592,15218],{"class":46},[36,18594,17761],{"class":42},[36,18596,47],{"class":46},[36,18598,16822],{"class":42},[36,18600,17738],{"class":2443},[36,18602,17741],{"class":42},[36,18604,17772],{"class":2443},[36,18606,13530],{"class":42},[36,18608,173],{"class":46},[36,18610,16368],{"class":42},[36,18612,17772],{"class":2443},[36,18614,6116],{"class":42},[36,18616,18617,18619,18621,18623,18625,18627,18629,18631,18633,18635,18637],{"class":38,"line":437},[36,18618,15218],{"class":46},[36,18620,17789],{"class":42},[36,18622,47],{"class":46},[36,18624,17794],{"class":2443},[36,18626,17797],{"class":42},[36,18628,1071],{"class":46},[36,18630,17731],{"class":42},[36,18632,1097],{"class":46},[36,18634,17761],{"class":42},[36,18636,1071],{"class":46},[36,18638,17810],{"class":42},[36,18640,18641,18643,18645,18647,18649,18651],{"class":38,"line":443},[36,18642,3581],{"class":46},[36,18644,17817],{"class":42},[36,18646,1523],{"class":46},[36,18648,16822],{"class":42},[36,18650,17824],{"class":2443},[36,18652,17827],{"class":42},[36,18654,18655],{"class":38,"line":2092},[36,18656,2510],{"class":42},[36,18658,18659,18661,18663,18665,18667],{"class":38,"line":2097},[36,18660,10149],{"class":42},[36,18662,1657],{"class":46},[36,18664,17840],{"class":405},[36,18666,1925],{"class":46},[36,18668,9320],{"class":42},[36,18670,18671],{"class":38,"line":2103},[36,18672,2667],{"class":42},[36,18674,18675],{"class":38,"line":2108},[36,18676,17303],{"class":46},[36,18678,18679],{"class":38,"line":2122},[36,18680,2510],{"class":42},[36,18682,18683,18685,18687,18689,18691],{"class":38,"line":2127},[36,18684,10149],{"class":42},[36,18686,1657],{"class":46},[36,18688,17865],{"class":405},[36,18690,1925],{"class":46},[36,18692,9320],{"class":42},[36,18694,18695],{"class":38,"line":2133},[36,18696,2667],{"class":42},[36,18698,18699],{"class":38,"line":2154},[36,18700,2045],{"class":42},[36,18702,18703,18705,18707],{"class":38,"line":2159},[36,18704,631],{"class":46},[36,18706,2453],{"class":2443},[36,18708,2456],{"class":42},[36,18710,18711],{"class":38,"line":2173},[36,18712,2026],{"class":42},[36,18714,18715],{"class":38,"line":2178},[36,18716,15533],{"class":69},[36,18718,18719],{"class":38,"line":2207},[36,18720,15280],{"class":42},[36,18722,18723],{"class":38,"line":2212},[36,18724,17902],{"class":42},[36,18726,18727],{"class":38,"line":2229},[36,18728,17474],{"class":69},[36,18730,18731,18733,18735,18737],{"class":38,"line":2234},[36,18732,2031],{"class":42},[36,18734,1657],{"class":46},[36,18736,17915],{"class":405},[36,18738,1774],{"class":42},[36,18740,18741,18743],{"class":38,"line":2239},[36,18742,15218],{"class":46},[36,18744,17924],{"class":42},[36,18746,18747,18749,18751],{"class":38,"line":2244},[36,18748,2492],{"class":42},[36,18750,1910],{"class":46},[36,18752,17933],{"class":42},[36,18754,18755,18757,18759],{"class":38,"line":2258},[36,18756,17075],{"class":42},[36,18758,17940],{"class":2443},[36,18760,17943],{"class":42},[36,18762,18763,18765,18767,18769],{"class":38,"line":2263},[36,18764,2031],{"class":42},[36,18766,1657],{"class":46},[36,18768,17952],{"class":405},[36,18770,1774],{"class":42},[36,18772,18773,18775],{"class":38,"line":3057},[36,18774,15218],{"class":46},[36,18776,17961],{"class":42},[36,18778,18779,18781,18783,18785,18787],{"class":38,"line":3071},[36,18780,2492],{"class":42},[36,18782,1910],{"class":46},[36,18784,1433],{"class":42},[36,18786,1910],{"class":46},[36,18788,17974],{"class":42},[36,18790,18791,18793,18795],{"class":38,"line":3079},[36,18792,17979],{"class":42},[36,18794,17982],{"class":2443},[36,18796,17985],{"class":42},[36,18798,18799,18801,18803],{"class":38,"line":3084},[36,18800,17075],{"class":42},[36,18802,17992],{"class":2443},[36,18804,17995],{"class":42},[36,18806,18807,18809,18811,18813],{"class":38,"line":3090},[36,18808,2031],{"class":42},[36,18810,1657],{"class":46},[36,18812,18004],{"class":405},[36,18814,1774],{"class":42},[36,18816,18817,18819],{"class":38,"line":3096},[36,18818,15218],{"class":46},[36,18820,18013],{"class":42},[36,18822,18823,18825,18827,18829,18831],{"class":38,"line":3101},[36,18824,2492],{"class":42},[36,18826,1910],{"class":46},[36,18828,18022],{"class":42},[36,18830,1910],{"class":46},[36,18832,18027],{"class":42},[36,18834,18835],{"class":38,"line":8428},[36,18836,18032],{"class":42},[36,18838,18839,18841,18843],{"class":38,"line":8452},[36,18840,18037],{"class":42},[36,18842,17982],{"class":2443},[36,18844,18042],{"class":42},[36,18846,18847,18849],{"class":38,"line":8457},[36,18848,18047],{"class":2443},[36,18850,18050],{"class":42},[36,18852,18853],{"class":38,"line":8463},[36,18854,2045],{"class":42},[14,18856,18858],{"id":18857},"_82对象的初始化清理","8.2对象的初始化清理",[1620,18860,18861,18864],{},[582,18862,18863],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[582,18865,18866],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[596,18868,18870],{"id":18869},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18872,18873,18874,18877],{},"对象的",[770,18875,18876],{},"初始化和清理","也是两个非常重要的安全问题",[19,18879,18880],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18882,18883],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18885,18886,18887,18890,18891,18894],{},"c++利用了",[770,18888,18889],{},"构造函数","和",[770,18892,18893],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18896,18897,18898],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[770,18899,18900],{},"我们不提供构造和析构，编译器会提供",[19,18902,18903],{},[770,18904,18905],{},"编译器提供的构造函数和析构函数是空实现。",[1620,18907,18908,18911],{},[582,18909,18910],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[582,18912,18913,18914,18917],{},"析构函数：主要作用在于对象",[770,18915,18916],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18919,18920,18923],{},[770,18921,18922],{},"构造函数语法：",[33,18924,18925],{},"类名(){}",[579,18927,18928,18931,18934,18937,18940],{},[582,18929,18930],{},"构造函数，没有返回值也不写void",[582,18932,18933],{},"函数名称与类名相同",[582,18935,18936],{},"构造函数可以有参数，因此可以发生重载",[582,18938,18939],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[582,18941,18942,18943,231],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,18944,18945],{},"Person(){}",[19,18947,18948,14275,18951],{},[770,18949,18950],{},"析构函数语法：",[33,18952,18953],{},"~类名(){}",[579,18955,18956,18959,18962,18968],{},[582,18957,18958],{},"析构函数，没有返回值也不写void",[582,18960,18961],{},"函数名称与类名相同,在名称前加上符号  ~",[582,18963,18964,18965],{},"析构函数不可以有参数，因此",[770,18966,18967],{},"不可以发生重载",[582,18969,18970],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,18972,18974],{"className":617,"code":18973,"language":619,"meta":31,"style":31},"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",[33,18975,18976,18982,18986,18990,18995,19002,19006,19019,19023,19028,19035,19039,19052,19056,19060,19064,19068,19076,19080,19088,19092,19096,19104,19108,19113,19117,19124,19128,19141,19145,19153],{"__ignoreMap":31},[36,18977,18978,18980],{"class":38,"line":39},[36,18979,15174],{"class":46},[36,18981,15651],{"class":2443},[36,18983,18984],{"class":38,"line":66},[36,18985,2026],{"class":42},[36,18987,18988],{"class":38,"line":73},[36,18989,15196],{"class":46},[36,18991,18992],{"class":38,"line":79},[36,18993,18994],{"class":69},"    \u002F\u002F构造函数\n",[36,18996,18997,19000],{"class":38,"line":85},[36,18998,18999],{"class":2443},"    Person",[36,19001,2456],{"class":42},[36,19003,19004],{"class":38,"line":419},[36,19005,2510],{"class":42},[36,19007,19008,19010,19012,19015,19017],{"class":38,"line":425},[36,19009,10149],{"class":42},[36,19011,1657],{"class":46},[36,19013,19014],{"class":405}," \"Person的构造函数调用\"",[36,19016,1925],{"class":46},[36,19018,9320],{"class":42},[36,19020,19021],{"class":38,"line":431},[36,19022,2667],{"class":42},[36,19024,19025],{"class":38,"line":437},[36,19026,19027],{"class":69},"    \u002F\u002F析构函数\n",[36,19029,19030,19033],{"class":38,"line":443},[36,19031,19032],{"class":2443},"    ~Person",[36,19034,2456],{"class":42},[36,19036,19037],{"class":38,"line":2092},[36,19038,2510],{"class":42},[36,19040,19041,19043,19045,19048,19050],{"class":38,"line":2097},[36,19042,10149],{"class":42},[36,19044,1657],{"class":46},[36,19046,19047],{"class":405}," \"Person的析构函数调用\"",[36,19049,1925],{"class":46},[36,19051,9320],{"class":42},[36,19053,19054],{"class":38,"line":2103},[36,19055,2667],{"class":42},[36,19057,19058],{"class":38,"line":2108},[36,19059,2880],{"emptyLinePlaceholder":553},[36,19061,19062],{"class":38,"line":2122},[36,19063,4475],{"class":42},[36,19065,19066],{"class":38,"line":2127},[36,19067,2880],{"emptyLinePlaceholder":553},[36,19069,19070,19072,19074],{"class":38,"line":2133},[36,19071,5844],{"class":46},[36,19073,6068],{"class":2443},[36,19075,2456],{"class":42},[36,19077,19078],{"class":38,"line":2154},[36,19079,2026],{"class":42},[36,19081,19082,19085],{"class":38,"line":2159},[36,19083,19084],{"class":42},"    Person p;",[36,19086,19087],{"class":69},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,19089,19090],{"class":38,"line":2173},[36,19091,2045],{"class":42},[36,19093,19094],{"class":38,"line":2178},[36,19095,2880],{"emptyLinePlaceholder":553},[36,19097,19098,19100,19102],{"class":38,"line":2207},[36,19099,631],{"class":46},[36,19101,2453],{"class":2443},[36,19103,11333],{"class":42},[36,19105,19106],{"class":38,"line":2212},[36,19107,13690],{"class":42},[36,19109,19110],{"class":38,"line":2229},[36,19111,19112],{"class":69},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,19114,19115],{"class":38,"line":2234},[36,19116,2880],{"emptyLinePlaceholder":553},[36,19118,19119,19121],{"class":38,"line":2239},[36,19120,19084],{"class":42},[36,19122,19123],{"class":69},"\u002F\u002F只有构造函数\n",[36,19125,19126],{"class":38,"line":2244},[36,19127,2880],{"emptyLinePlaceholder":553},[36,19129,19130,19132,19134,19136,19138],{"class":38,"line":2258},[36,19131,2783],{"class":2443},[36,19133,345],{"class":42},[36,19135,2788],{"class":405},[36,19137,6446],{"class":42},[36,19139,19140],{"class":69},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,19142,19143],{"class":38,"line":2263},[36,19144,2880],{"emptyLinePlaceholder":553},[36,19146,19147,19149,19151],{"class":38,"line":3057},[36,19148,4570],{"class":46},[36,19150,4573],{"class":53},[36,19152,1774],{"class":42},[36,19154,19155],{"class":38,"line":3071},[36,19156,2045],{"class":42},[19,19158,19159],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[596,19161,19163],{"id":19162},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19165,19166],{},"两种分类方式：",[19,19168,19169],{},"​\t按参数分为： 有参构造和无参构造",[19,19171,19172],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19174,19175],{},"三种调用方式：",[19,19177,19178],{},"​\t括号法",[19,19180,19181],{},"​\t显示法",[19,19183,19184],{},"​\t隐式转换法",[26,19186,19188],{"className":617,"code":19187,"language":619,"meta":31,"style":31},"#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",[33,19189,19190,19196,19206,19211,19216,19221,19226,19230,19238,19242,19246,19250,19256,19260,19273,19277,19289,19293,19302,19315,19319,19323,19329,19333,19346,19350,19355,19371,19375,19380,19389,19402,19406,19412,19416,19421,19429,19433,19438,19442,19450,19454,19459,19464,19469,19474,19479,19483,19488,19493,19498,19503,19507,19512,19517,19533,19545,19550,19554,19559,19564,19569,19573,19578,19592,19605,19609,19617,19621,19627,19633,19641],{"__ignoreMap":31},[36,19191,19192,19194],{"class":38,"line":39},[36,19193,2429],{"class":46},[36,19195,2432],{"class":405},[36,19197,19198,19200,19202,19204],{"class":38,"line":66},[36,19199,2437],{"class":46},[36,19201,2440],{"class":46},[36,19203,2444],{"class":2443},[36,19205,1774],{"class":42},[36,19207,19208],{"class":38,"line":73},[36,19209,19210],{"class":69},"\u002F\u002F1.构造函数的分类及调用\n",[36,19212,19213],{"class":38,"line":79},[36,19214,19215],{"class":69},"\u002F\u002F分类\n",[36,19217,19218],{"class":38,"line":85},[36,19219,19220],{"class":69},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,19222,19223],{"class":38,"line":419},[36,19224,19225],{"class":69},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,19227,19228],{"class":38,"line":425},[36,19229,2880],{"emptyLinePlaceholder":553},[36,19231,19232,19234,19236],{"class":38,"line":431},[36,19233,15174],{"class":46},[36,19235,16049],{"class":2443},[36,19237,3154],{"class":42},[36,19239,19240],{"class":38,"line":437},[36,19241,2026],{"class":42},[36,19243,19244],{"class":38,"line":443},[36,19245,15196],{"class":46},[36,19247,19248],{"class":38,"line":2092},[36,19249,18994],{"class":69},[36,19251,19252,19254],{"class":38,"line":2097},[36,19253,18999],{"class":2443},[36,19255,2456],{"class":42},[36,19257,19258],{"class":38,"line":2103},[36,19259,2510],{"class":42},[36,19261,19262,19264,19266,19269,19271],{"class":38,"line":2108},[36,19263,3931],{"class":42},[36,19265,1657],{"class":46},[36,19267,19268],{"class":405},"\"Person构造函数无参构造\"",[36,19270,1657],{"class":46},[36,19272,1679],{"class":42},[36,19274,19275],{"class":38,"line":2122},[36,19276,2667],{"class":42},[36,19278,19279,19281,19283,19285,19287],{"class":38,"line":2127},[36,19280,18999],{"class":2443},[36,19282,345],{"class":42},[36,19284,631],{"class":46},[36,19286,1879],{"class":5696},[36,19288,63],{"class":42},[36,19290,19291],{"class":38,"line":2133},[36,19292,2510],{"class":42},[36,19294,19295,19298,19300],{"class":38,"line":2154},[36,19296,19297],{"class":42},"        age",[36,19299,47],{"class":46},[36,19301,6677],{"class":42},[36,19303,19304,19306,19308,19311,19313],{"class":38,"line":2159},[36,19305,3931],{"class":42},[36,19307,1657],{"class":46},[36,19309,19310],{"class":405},"\"Person构造函数有参构造\"",[36,19312,1657],{"class":46},[36,19314,1679],{"class":42},[36,19316,19317],{"class":38,"line":2173},[36,19318,2667],{"class":42},[36,19320,19321],{"class":38,"line":2178},[36,19322,19027],{"class":69},[36,19324,19325,19327],{"class":38,"line":2207},[36,19326,19032],{"class":2443},[36,19328,2456],{"class":42},[36,19330,19331],{"class":38,"line":2212},[36,19332,2510],{"class":42},[36,19334,19335,19337,19339,19342,19344],{"class":38,"line":2229},[36,19336,3931],{"class":42},[36,19338,1657],{"class":46},[36,19340,19341],{"class":405},"\"Person析构函数被调用\"",[36,19343,1657],{"class":46},[36,19345,1679],{"class":42},[36,19347,19348],{"class":38,"line":2234},[36,19349,2667],{"class":42},[36,19351,19352],{"class":38,"line":2239},[36,19353,19354],{"class":69},"    \u002F\u002F拷贝构造函数\n",[36,19356,19357,19359,19361,19363,19365,19367,19369],{"class":38,"line":2244},[36,19358,18999],{"class":2443},[36,19360,345],{"class":42},[36,19362,7272],{"class":46},[36,19364,16049],{"class":2443},[36,19366,11064],{"class":46},[36,19368,19],{"class":5696},[36,19370,63],{"class":42},[36,19372,19373],{"class":38,"line":2258},[36,19374,2510],{"class":42},[36,19376,19377],{"class":38,"line":2263},[36,19378,19379],{"class":69},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,19381,19382,19384,19386],{"class":38,"line":3057},[36,19383,19297],{"class":42},[36,19385,47],{"class":46},[36,19387,19388],{"class":42},"p.age;\n",[36,19390,19391,19393,19395,19398,19400],{"class":38,"line":3071},[36,19392,3931],{"class":42},[36,19394,1657],{"class":46},[36,19396,19397],{"class":405},"\"Person拷贝构造函数被调用\"",[36,19399,1657],{"class":46},[36,19401,1679],{"class":42},[36,19403,19404],{"class":38,"line":3079},[36,19405,2667],{"class":42},[36,19407,19408,19410],{"class":38,"line":3084},[36,19409,2465],{"class":46},[36,19411,8277],{"class":42},[36,19413,19414],{"class":38,"line":3090},[36,19415,4475],{"class":42},[36,19417,19418],{"class":38,"line":3096},[36,19419,19420],{"class":69},"\u002F\u002F调用\n",[36,19422,19423,19425,19427],{"class":38,"line":3101},[36,19424,5844],{"class":46},[36,19426,6068],{"class":2443},[36,19428,2456],{"class":42},[36,19430,19431],{"class":38,"line":8428},[36,19432,2026],{"class":42},[36,19434,19435],{"class":38,"line":8452},[36,19436,19437],{"class":69},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,19439,19440],{"class":38,"line":8457},[36,19441,2045],{"class":42},[36,19443,19444,19446,19448],{"class":38,"line":8463},[36,19445,5844],{"class":46},[36,19447,6137],{"class":2443},[36,19449,2456],{"class":42},[36,19451,19452],{"class":38,"line":8490},[36,19453,2026],{"class":42},[36,19455,19456],{"class":38,"line":8495},[36,19457,19458],{"class":69},"    \u002F\u002F1.括号法\n",[36,19460,19461],{"class":38,"line":8501},[36,19462,19463],{"class":69},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,19465,19466],{"class":38,"line":8513},[36,19467,19468],{"class":69},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,19470,19471],{"class":38,"line":8525},[36,19472,19473],{"class":69},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,19475,19476],{"class":38,"line":8537},[36,19477,19478],{"class":69},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,19480,19481],{"class":38,"line":10196},[36,19482,2880],{"emptyLinePlaceholder":553},[36,19484,19485],{"class":38,"line":10221},[36,19486,19487],{"class":69},"    \u002F\u002F注意事项\n",[36,19489,19490],{"class":38,"line":10244},[36,19491,19492],{"class":69},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,19494,19495],{"class":38,"line":10268},[36,19496,19497],{"class":69},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,19499,19500],{"class":38,"line":10273},[36,19501,19502],{"class":69},"    \u002F\u002F Person p4();\n",[36,19504,19505],{"class":38,"line":10278},[36,19506,2880],{"emptyLinePlaceholder":553},[36,19508,19509],{"class":38,"line":10283},[36,19510,19511],{"class":69},"    \u002F\u002F2.显示法\n",[36,19513,19514],{"class":38,"line":10292},[36,19515,19516],{"class":42},"    Person p1;\n",[36,19518,19519,19522,19524,19527,19529,19531],{"class":38,"line":10297},[36,19520,19521],{"class":42},"    Person p2",[36,19523,47],{"class":46},[36,19525,19526],{"class":2443},"Person",[36,19528,345],{"class":42},[36,19530,1062],{"class":53},[36,19532,3199],{"class":42},[36,19534,19535,19538,19540,19542],{"class":38,"line":10303},[36,19536,19537],{"class":42},"    Person p3",[36,19539,47],{"class":46},[36,19541,19526],{"class":2443},[36,19543,19544],{"class":42},"(p2);\n",[36,19546,19547],{"class":38,"line":10324},[36,19548,19549],{"class":69},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,19551,19552],{"class":38,"line":10330},[36,19553,2880],{"emptyLinePlaceholder":553},[36,19555,19556],{"class":38,"line":10344},[36,19557,19558],{"class":69},"    \u002F\u002F 注意事项2\n",[36,19560,19561],{"class":38,"line":10350},[36,19562,19563],{"class":69},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,19565,19566],{"class":38,"line":10377},[36,19567,19568],{"class":69},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,19570,19571],{"class":38,"line":10386},[36,19572,2880],{"emptyLinePlaceholder":553},[36,19574,19575],{"class":38,"line":10392},[36,19576,19577],{"class":69},"    \u002F\u002F3.隐士转换法\n",[36,19579,19580,19583,19585,19587,19589],{"class":38,"line":10400},[36,19581,19582],{"class":42},"    Person p4",[36,19584,47],{"class":46},[36,19586,1062],{"class":53},[36,19588,680],{"class":42},[36,19590,19591],{"class":69},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,19593,19594,19597,19599,19602],{"class":38,"line":10405},[36,19595,19596],{"class":42},"    Person p5",[36,19598,47],{"class":46},[36,19600,19601],{"class":42},"p4;",[36,19603,19604],{"class":69}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,19606,19607],{"class":38,"line":17084},[36,19608,2045],{"class":42},[36,19610,19611,19613,19615],{"class":38,"line":17090},[36,19612,631],{"class":46},[36,19614,2453],{"class":2443},[36,19616,2456],{"class":42},[36,19618,19619],{"class":38,"line":17113},[36,19620,2026],{"class":42},[36,19622,19623,19625],{"class":38,"line":17119},[36,19624,6113],{"class":2443},[36,19626,6116],{"class":42},[36,19628,19629,19631],{"class":38,"line":17142},[36,19630,6182],{"class":2443},[36,19632,6116],{"class":42},[36,19634,19635,19637,19639],{"class":38,"line":17156},[36,19636,4570],{"class":46},[36,19638,4573],{"class":53},[36,19640,1774],{"class":42},[36,19642,19643],{"class":38,"line":17176},[36,19644,2045],{"class":42},[19,19646,19647,19650],{},[770,19648,19649],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[596,19652,19654],{"id":19653},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19656,19657],{},"C++中拷贝构造函数调用时机通常有三种情况",[1620,19659,19660,19663,19666],{},[582,19661,19662],{},"使用一个已经创建完毕的对象来初始化一个新对象",[582,19664,19665],{},"值传递的方式给函数参数传值",[582,19667,19668],{},"以值方式返回局部对象",[26,19670,19672],{"className":617,"code":19671,"language":619,"meta":31,"style":31},"#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",[33,19673,19674,19680,19690,19694,19699,19703,19708,19713,19718,19724,19728,19732,19738,19742,19755,19759,19764,19776,19780,19788,19801,19805,19809,19825,19829,19838,19851,19855,19861,19865,19877,19881,19887,19891,19895,19903,19907,19920,19928,19946,19950,19955,19960,19975,19979,19992,19996,20004,20008,20012,20020,20024,20029,20038,20042,20046,20071,20081,20085,20093,20097,20108,20133,20137,20141,20145,20153,20157,20162,20167,20174,20179,20184,20189,20194,20198,20203,20207,20212,20216,20221,20226,20230,20234,20239,20244,20252],{"__ignoreMap":31},[36,19675,19676,19678],{"class":38,"line":39},[36,19677,2429],{"class":46},[36,19679,2432],{"class":405},[36,19681,19682,19684,19686,19688],{"class":38,"line":66},[36,19683,2437],{"class":46},[36,19685,2440],{"class":46},[36,19687,2444],{"class":2443},[36,19689,1774],{"class":42},[36,19691,19692],{"class":38,"line":73},[36,19693,2880],{"emptyLinePlaceholder":553},[36,19695,19696],{"class":38,"line":79},[36,19697,19698],{"class":69},"\u002F\u002F拷贝构造函数调用时机\n",[36,19700,19701],{"class":38,"line":85},[36,19702,2880],{"emptyLinePlaceholder":553},[36,19704,19705],{"class":38,"line":419},[36,19706,19707],{"class":69},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,19709,19710],{"class":38,"line":425},[36,19711,19712],{"class":69},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,19714,19715],{"class":38,"line":431},[36,19716,19717],{"class":69},"\u002F\u002F3.以值方式返回局部对象\n",[36,19719,19720,19722],{"class":38,"line":437},[36,19721,15174],{"class":46},[36,19723,15651],{"class":2443},[36,19725,19726],{"class":38,"line":443},[36,19727,2026],{"class":42},[36,19729,19730],{"class":38,"line":2092},[36,19731,15196],{"class":46},[36,19733,19734,19736],{"class":38,"line":2097},[36,19735,18999],{"class":2443},[36,19737,2456],{"class":42},[36,19739,19740],{"class":38,"line":2103},[36,19741,2510],{"class":42},[36,19743,19744,19746,19748,19751,19753],{"class":38,"line":2108},[36,19745,10149],{"class":42},[36,19747,1657],{"class":46},[36,19749,19750],{"class":405}," \"Person的默认构造函数调用\"",[36,19752,1925],{"class":46},[36,19754,9320],{"class":42},[36,19756,19757],{"class":38,"line":2122},[36,19758,2667],{"class":42},[36,19760,19761],{"class":38,"line":2127},[36,19762,19763],{"class":69},"    \u002F\u002F有参构造\n",[36,19765,19766,19768,19770,19772,19774],{"class":38,"line":2133},[36,19767,18999],{"class":2443},[36,19769,345],{"class":42},[36,19771,631],{"class":46},[36,19773,16169],{"class":5696},[36,19775,63],{"class":42},[36,19777,19778],{"class":38,"line":2154},[36,19779,2510],{"class":42},[36,19781,19782,19784,19786],{"class":38,"line":2159},[36,19783,16223],{"class":42},[36,19785,47],{"class":46},[36,19787,8277],{"class":42},[36,19789,19790,19792,19794,19797,19799],{"class":38,"line":2173},[36,19791,10149],{"class":42},[36,19793,1657],{"class":46},[36,19795,19796],{"class":405}," \"Person的有参构造函数调用\"",[36,19798,1925],{"class":46},[36,19800,9320],{"class":42},[36,19802,19803],{"class":38,"line":2178},[36,19804,2667],{"class":42},[36,19806,19807],{"class":38,"line":2207},[36,19808,19354],{"class":69},[36,19810,19811,19813,19815,19817,19819,19821,19823],{"class":38,"line":2212},[36,19812,18999],{"class":2443},[36,19814,345],{"class":42},[36,19816,7272],{"class":46},[36,19818,16049],{"class":2443},[36,19820,11064],{"class":46},[36,19822,19],{"class":5696},[36,19824,63],{"class":42},[36,19826,19827],{"class":38,"line":2229},[36,19828,2510],{"class":42},[36,19830,19831,19833,19835],{"class":38,"line":2234},[36,19832,16223],{"class":42},[36,19834,47],{"class":46},[36,19836,19837],{"class":42}," p.m_Age;\n",[36,19839,19840,19842,19844,19847,19849],{"class":38,"line":2239},[36,19841,10149],{"class":42},[36,19843,1657],{"class":46},[36,19845,19846],{"class":405}," \"Person的拷贝构造函数调用\"",[36,19848,1925],{"class":46},[36,19850,9320],{"class":42},[36,19852,19853],{"class":38,"line":2244},[36,19854,2667],{"class":42},[36,19856,19857,19859],{"class":38,"line":2258},[36,19858,19032],{"class":2443},[36,19860,2456],{"class":42},[36,19862,19863],{"class":38,"line":2263},[36,19864,2510],{"class":42},[36,19866,19867,19869,19871,19873,19875],{"class":38,"line":3057},[36,19868,10149],{"class":42},[36,19870,1657],{"class":46},[36,19872,19047],{"class":405},[36,19874,1925],{"class":46},[36,19876,9320],{"class":42},[36,19878,19879],{"class":38,"line":3071},[36,19880,2667],{"class":42},[36,19882,19883,19885],{"class":38,"line":3079},[36,19884,2465],{"class":46},[36,19886,16146],{"class":42},[36,19888,19889],{"class":38,"line":3084},[36,19890,4475],{"class":42},[36,19892,19893],{"class":38,"line":3090},[36,19894,19707],{"class":69},[36,19896,19897,19899,19901],{"class":38,"line":3096},[36,19898,5844],{"class":46},[36,19900,6068],{"class":2443},[36,19902,2456],{"class":42},[36,19904,19905],{"class":38,"line":3101},[36,19906,2026],{"class":42},[36,19908,19909,19912,19914,19916,19918],{"class":38,"line":8428},[36,19910,19911],{"class":42},"    Person ",[36,19913,7610],{"class":2443},[36,19915,345],{"class":42},[36,19917,1313],{"class":53},[36,19919,3199],{"class":42},[36,19921,19922,19924,19926],{"class":38,"line":8452},[36,19923,19911],{"class":42},[36,19925,7513],{"class":2443},[36,19927,17995],{"class":42},[36,19929,19930,19932,19934,19937,19939,19942,19944],{"class":38,"line":8457},[36,19931,2031],{"class":42},[36,19933,1657],{"class":46},[36,19935,19936],{"class":405},"\"P2的年龄为：\"",[36,19938,1657],{"class":46},[36,19940,19941],{"class":42},"p2.m_Age",[36,19943,1657],{"class":46},[36,19945,1679],{"class":42},[36,19947,19948],{"class":38,"line":8463},[36,19949,2045],{"class":42},[36,19951,19952],{"class":38,"line":8490},[36,19953,19954],{"class":69},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,19956,19957],{"class":38,"line":8495},[36,19958,19959],{"class":69},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,19961,19962,19964,19967,19969,19971,19973],{"class":38,"line":8501},[36,19963,5844],{"class":46},[36,19965,19966],{"class":2443}," doWork",[36,19968,345],{"class":42},[36,19970,19526],{"class":2443},[36,19972,7305],{"class":5696},[36,19974,63],{"class":42},[36,19976,19977],{"class":38,"line":8513},[36,19978,2026],{"class":42},[36,19980,19981,19983,19985,19988,19990],{"class":38,"line":8525},[36,19982,7009],{"class":42},[36,19984,1657],{"class":46},[36,19986,19987],{"class":405}," \"doWork函数调用\"",[36,19989,1925],{"class":46},[36,19991,9320],{"class":42},[36,19993,19994],{"class":38,"line":8537},[36,19995,2045],{"class":42},[36,19997,19998,20000,20002],{"class":38,"line":10196},[36,19999,5844],{"class":46},[36,20001,6137],{"class":2443},[36,20003,2456],{"class":42},[36,20005,20006],{"class":38,"line":10221},[36,20007,2026],{"class":42},[36,20009,20010],{"class":38,"line":10244},[36,20011,15793],{"class":42},[36,20013,20014,20017],{"class":38,"line":10268},[36,20015,20016],{"class":2443},"    doWork",[36,20018,20019],{"class":42},"(p);\n",[36,20021,20022],{"class":38,"line":10273},[36,20023,2045],{"class":42},[36,20025,20026],{"class":38,"line":10278},[36,20027,20028],{"class":69},"\u002F\u002F 3.以值方式返回局部对象\n",[36,20030,20031,20033,20036],{"class":38,"line":10283},[36,20032,19526],{"class":2443},[36,20034,20035],{"class":2443}," doWork2",[36,20037,2456],{"class":42},[36,20039,20040],{"class":38,"line":10292},[36,20041,2026],{"class":42},[36,20043,20044],{"class":38,"line":10297},[36,20045,19516],{"class":42},[36,20047,20048,20050,20052,20054,20056,20058,20060,20062,20064,20066,20068],{"class":38,"line":10303},[36,20049,2031],{"class":42},[36,20051,1657],{"class":46},[36,20053,345],{"class":42},[36,20055,631],{"class":46},[36,20057,6998],{"class":46},[36,20059,231],{"class":42},[36,20061,971],{"class":46},[36,20063,7610],{"class":42},[36,20065,1657],{"class":46},[36,20067,1722],{"class":42},[36,20069,20070],{"class":69},"\u002F\u002F打印p1的地址\n",[36,20072,20073,20075,20078],{"class":38,"line":10324},[36,20074,4570],{"class":46},[36,20076,20077],{"class":42}," p1;",[36,20079,20080],{"class":69},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,20082,20083],{"class":38,"line":10330},[36,20084,2045],{"class":42},[36,20086,20087,20089,20091],{"class":38,"line":10344},[36,20088,5844],{"class":46},[36,20090,6209],{"class":2443},[36,20092,2456],{"class":42},[36,20094,20095],{"class":38,"line":10350},[36,20096,2026],{"class":42},[36,20098,20099,20102,20104,20106],{"class":38,"line":10377},[36,20100,20101],{"class":42},"    Person p ",[36,20103,47],{"class":46},[36,20105,20035],{"class":2443},[36,20107,6116],{"class":42},[36,20109,20110,20112,20114,20116,20118,20120,20122,20124,20126,20128,20130],{"class":38,"line":10386},[36,20111,2031],{"class":42},[36,20113,1657],{"class":46},[36,20115,345],{"class":42},[36,20117,631],{"class":46},[36,20119,6998],{"class":46},[36,20121,231],{"class":42},[36,20123,971],{"class":46},[36,20125,19],{"class":42},[36,20127,1657],{"class":46},[36,20129,1722],{"class":42},[36,20131,20132],{"class":69},"\u002F\u002F打印p的地址\n",[36,20134,20135],{"class":38,"line":10392},[36,20136,2045],{"class":42},[36,20138,20139],{"class":38,"line":10400},[36,20140,2880],{"emptyLinePlaceholder":553},[36,20142,20143],{"class":38,"line":10405},[36,20144,2880],{"emptyLinePlaceholder":553},[36,20146,20147,20149,20151],{"class":38,"line":17084},[36,20148,631],{"class":46},[36,20150,2453],{"class":2443},[36,20152,2456],{"class":42},[36,20154,20155],{"class":38,"line":17090},[36,20156,2026],{"class":42},[36,20158,20159],{"class":38,"line":17113},[36,20160,20161],{"class":69},"    \u002F\u002F test01();\n",[36,20163,20164],{"class":38,"line":17119},[36,20165,20166],{"class":69},"    \u002F\u002F test02();\n",[36,20168,20169,20172],{"class":38,"line":17142},[36,20170,20171],{"class":2443},"    test03",[36,20173,6116],{"class":42},[36,20175,20176],{"class":38,"line":17156},[36,20177,20178],{"class":69},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,20180,20181],{"class":38,"line":17176},[36,20182,20183],{"class":69},"\u002F\u002F 输出结果如下：\n",[36,20185,20186],{"class":38,"line":17182},[36,20187,20188],{"class":69},"\u002F\u002F Person的默认构造函数调用\n",[36,20190,20191],{"class":38,"line":17193},[36,20192,20193],{"class":69},"\u002F\u002F 0x7fffffffceec\n",[36,20195,20196],{"class":38,"line":17216},[36,20197,20193],{"class":69},[36,20199,20200],{"class":38,"line":17238},[36,20201,20202],{"class":69},"\u002F\u002F Person的析构函数调用\n",[36,20204,20205],{"class":38,"line":17243},[36,20206,2880],{"emptyLinePlaceholder":553},[36,20208,20209],{"class":38,"line":17249},[36,20210,20211],{"class":69},"\u002F\u002F 之前的输出结果如下：\n",[36,20213,20214],{"class":38,"line":17263},[36,20215,20188],{"class":69},[36,20217,20218],{"class":38,"line":17276},[36,20219,20220],{"class":69},"\u002F\u002F 地址\n",[36,20222,20223],{"class":38,"line":17281},[36,20224,20225],{"class":69},"\u002F\u002F Person的拷贝构造函数调用\n",[36,20227,20228],{"class":38,"line":17295},[36,20229,20202],{"class":69},[36,20231,20232],{"class":38,"line":17300},[36,20233,20220],{"class":69},[36,20235,20236],{"class":38,"line":17306},[36,20237,20238],{"class":69},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,20240,20241],{"class":38,"line":17311},[36,20242,20243],{"class":69},"\u002F\u002F Person的析构函数调用     \n",[36,20245,20246,20248,20250],{"class":38,"line":17325},[36,20247,4570],{"class":46},[36,20249,4573],{"class":53},[36,20251,1774],{"class":42},[36,20253,20254],{"class":38,"line":17330},[36,20255,2045],{"class":42},[19,20257,20258],{},"简化版理解",[26,20260,20262],{"className":617,"code":20261,"language":619,"meta":31,"style":31},"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",[33,20263,20264,20272,20276,20282,20295,20306,20310,20322,20335,20343,20347,20363,20376,20385,20389,20394,20400,20413,20417,20421,20428,20432,20436,20441,20449,20453,20469,20482,20495,20499,20504,20512,20516,20520,20525,20530,20546,20554,20561,20567,20571,20575,20580,20588,20592,20596,20619,20626,20630,20634,20642,20646,20656,20678,20682,20686,20690,20698,20702,20707,20712,20718,20722,20732,20736,20744],{"__ignoreMap":31},[36,20265,20266,20268,20270],{"class":38,"line":39},[36,20267,15174],{"class":46},[36,20269,16049],{"class":2443},[36,20271,16052],{"class":42},[36,20273,20274],{"class":38,"line":66},[36,20275,15196],{"class":46},[36,20277,20278,20280],{"class":38,"line":73},[36,20279,18999],{"class":2443},[36,20281,11333],{"class":42},[36,20283,20284,20286,20288,20291,20293],{"class":38,"line":79},[36,20285,10149],{"class":42},[36,20287,1657],{"class":46},[36,20289,20290],{"class":405}," \"无参构造函数!\"",[36,20292,1925],{"class":46},[36,20294,9320],{"class":42},[36,20296,20297,20300,20302,20304],{"class":38,"line":85},[36,20298,20299],{"class":42},"        mAge ",[36,20301,47],{"class":46},[36,20303,4573],{"class":53},[36,20305,1774],{"class":42},[36,20307,20308],{"class":38,"line":419},[36,20309,2667],{"class":42},[36,20311,20312,20314,20316,20318,20320],{"class":38,"line":425},[36,20313,18999],{"class":2443},[36,20315,345],{"class":42},[36,20317,631],{"class":46},[36,20319,16169],{"class":5696},[36,20321,12922],{"class":42},[36,20323,20324,20326,20328,20331,20333],{"class":38,"line":431},[36,20325,10149],{"class":42},[36,20327,1657],{"class":46},[36,20329,20330],{"class":405}," \"有参构造函数!\"",[36,20332,1925],{"class":46},[36,20334,9320],{"class":42},[36,20336,20337,20339,20341],{"class":38,"line":437},[36,20338,20299],{"class":42},[36,20340,47],{"class":46},[36,20342,8277],{"class":42},[36,20344,20345],{"class":38,"line":443},[36,20346,2667],{"class":42},[36,20348,20349,20351,20353,20355,20357,20359,20361],{"class":38,"line":2092},[36,20350,18999],{"class":2443},[36,20352,345],{"class":42},[36,20354,7272],{"class":46},[36,20356,16049],{"class":2443},[36,20358,971],{"class":46},[36,20360,7305],{"class":5696},[36,20362,12922],{"class":42},[36,20364,20365,20367,20369,20372,20374],{"class":38,"line":2097},[36,20366,10149],{"class":42},[36,20368,1657],{"class":46},[36,20370,20371],{"class":405}," \"拷贝构造函数!\"",[36,20373,1925],{"class":46},[36,20375,9320],{"class":42},[36,20377,20378,20380,20382],{"class":38,"line":2103},[36,20379,20299],{"class":42},[36,20381,47],{"class":46},[36,20383,20384],{"class":42}," p.mAge;\n",[36,20386,20387],{"class":38,"line":2108},[36,20388,2667],{"class":42},[36,20390,20391],{"class":38,"line":2122},[36,20392,20393],{"class":69},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,20395,20396,20398],{"class":38,"line":2127},[36,20397,19032],{"class":2443},[36,20399,11333],{"class":42},[36,20401,20402,20404,20406,20409,20411],{"class":38,"line":2133},[36,20403,10149],{"class":42},[36,20405,1657],{"class":46},[36,20407,20408],{"class":405}," \"析构函数!\"",[36,20410,1925],{"class":46},[36,20412,9320],{"class":42},[36,20414,20415],{"class":38,"line":2154},[36,20416,2667],{"class":42},[36,20418,20419],{"class":38,"line":2159},[36,20420,15196],{"class":46},[36,20422,20423,20425],{"class":38,"line":2173},[36,20424,2465],{"class":46},[36,20426,20427],{"class":42}," mAge;\n",[36,20429,20430],{"class":38,"line":2178},[36,20431,4475],{"class":42},[36,20433,20434],{"class":38,"line":2207},[36,20435,2880],{"emptyLinePlaceholder":553},[36,20437,20438],{"class":38,"line":2212},[36,20439,20440],{"class":69},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,20442,20443,20445,20447],{"class":38,"line":2229},[36,20444,5844],{"class":46},[36,20446,6068],{"class":2443},[36,20448,11333],{"class":42},[36,20450,20451],{"class":38,"line":2234},[36,20452,2880],{"emptyLinePlaceholder":553},[36,20454,20455,20457,20460,20462,20464,20466],{"class":38,"line":2239},[36,20456,19911],{"class":42},[36,20458,20459],{"class":2443},"man",[36,20461,345],{"class":42},[36,20463,930],{"class":53},[36,20465,6446],{"class":42},[36,20467,20468],{"class":69}," \u002F\u002Fp对象已经创建完毕\n",[36,20470,20471,20473,20476,20479],{"class":38,"line":2244},[36,20472,19911],{"class":42},[36,20474,20475],{"class":2443},"newman",[36,20477,20478],{"class":42},"(man);",[36,20480,20481],{"class":69}," \u002F\u002F调用拷贝构造函数\n",[36,20483,20484,20487,20489,20492],{"class":38,"line":2258},[36,20485,20486],{"class":42},"    Person newman2 ",[36,20488,47],{"class":46},[36,20490,20491],{"class":42}," man;",[36,20493,20494],{"class":69}," \u002F\u002F拷贝构造\n",[36,20496,20497],{"class":38,"line":2263},[36,20498,2880],{"emptyLinePlaceholder":553},[36,20500,20501],{"class":38,"line":3057},[36,20502,20503],{"class":69},"    \u002F\u002FPerson newman3;\n",[36,20505,20506,20509],{"class":38,"line":3071},[36,20507,20508],{"class":69},"    \u002F\u002Fnewman3 = man;",[36,20510,20511],{"class":69}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,20513,20514],{"class":38,"line":3079},[36,20515,2045],{"class":42},[36,20517,20518],{"class":38,"line":3084},[36,20519,2880],{"emptyLinePlaceholder":553},[36,20521,20522],{"class":38,"line":3090},[36,20523,20524],{"class":69},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,20526,20527],{"class":38,"line":3096},[36,20528,20529],{"class":69},"\u002F\u002F相当于Person p1 = p;\n",[36,20531,20532,20534,20536,20538,20540,20543],{"class":38,"line":3101},[36,20533,5844],{"class":46},[36,20535,19966],{"class":2443},[36,20537,345],{"class":42},[36,20539,19526],{"class":2443},[36,20541,20542],{"class":5696}," p1",[36,20544,20545],{"class":42},") {}\n",[36,20547,20548,20550,20552],{"class":38,"line":8428},[36,20549,5844],{"class":46},[36,20551,6137],{"class":2443},[36,20553,11333],{"class":42},[36,20555,20556,20558],{"class":38,"line":8452},[36,20557,19084],{"class":42},[36,20559,20560],{"class":69}," \u002F\u002F无参构造函数\n",[36,20562,20563,20565],{"class":38,"line":8457},[36,20564,20016],{"class":2443},[36,20566,20019],{"class":42},[36,20568,20569],{"class":38,"line":8463},[36,20570,2045],{"class":42},[36,20572,20573],{"class":38,"line":8490},[36,20574,2880],{"emptyLinePlaceholder":553},[36,20576,20577],{"class":38,"line":8495},[36,20578,20579],{"class":69},"\u002F\u002F3. 以值方式返回局部对象\n",[36,20581,20582,20584,20586],{"class":38,"line":8501},[36,20583,19526],{"class":2443},[36,20585,20035],{"class":2443},[36,20587,2456],{"class":42},[36,20589,20590],{"class":38,"line":8513},[36,20591,2026],{"class":42},[36,20593,20594],{"class":38,"line":8525},[36,20595,19516],{"class":42},[36,20597,20598,20600,20602,20604,20606,20608,20610,20612,20615,20617],{"class":38,"line":8537},[36,20599,7009],{"class":42},[36,20601,1657],{"class":46},[36,20603,2138],{"class":42},[36,20605,631],{"class":46},[36,20607,6998],{"class":46},[36,20609,231],{"class":42},[36,20611,971],{"class":46},[36,20613,20614],{"class":42},"p1 ",[36,20616,1657],{"class":46},[36,20618,9320],{"class":42},[36,20620,20621,20623],{"class":38,"line":10196},[36,20622,4570],{"class":46},[36,20624,20625],{"class":42}," p1;\n",[36,20627,20628],{"class":38,"line":10221},[36,20629,2045],{"class":42},[36,20631,20632],{"class":38,"line":10244},[36,20633,2880],{"emptyLinePlaceholder":553},[36,20635,20636,20638,20640],{"class":38,"line":10268},[36,20637,5844],{"class":46},[36,20639,6209],{"class":2443},[36,20641,2456],{"class":42},[36,20643,20644],{"class":38,"line":10273},[36,20645,2026],{"class":42},[36,20647,20648,20650,20652,20654],{"class":38,"line":10278},[36,20649,20101],{"class":42},[36,20651,47],{"class":46},[36,20653,20035],{"class":2443},[36,20655,6116],{"class":42},[36,20657,20658,20660,20662,20664,20666,20668,20670,20672,20674,20676],{"class":38,"line":10283},[36,20659,7009],{"class":42},[36,20661,1657],{"class":46},[36,20663,2138],{"class":42},[36,20665,631],{"class":46},[36,20667,6998],{"class":46},[36,20669,231],{"class":42},[36,20671,971],{"class":46},[36,20673,11928],{"class":42},[36,20675,1657],{"class":46},[36,20677,9320],{"class":42},[36,20679,20680],{"class":38,"line":10292},[36,20681,2045],{"class":42},[36,20683,20684],{"class":38,"line":10297},[36,20685,2880],{"emptyLinePlaceholder":553},[36,20687,20688],{"class":38,"line":10303},[36,20689,2880],{"emptyLinePlaceholder":553},[36,20691,20692,20694,20696],{"class":38,"line":10324},[36,20693,631],{"class":46},[36,20695,2453],{"class":2443},[36,20697,11333],{"class":42},[36,20699,20700],{"class":38,"line":10330},[36,20701,2880],{"emptyLinePlaceholder":553},[36,20703,20704],{"class":38,"line":10344},[36,20705,20706],{"class":69},"    \u002F\u002Ftest01();\n",[36,20708,20709],{"class":38,"line":10350},[36,20710,20711],{"class":69},"    \u002F\u002Ftest02();\n",[36,20713,20714,20716],{"class":38,"line":10377},[36,20715,20171],{"class":2443},[36,20717,6116],{"class":42},[36,20719,20720],{"class":38,"line":10386},[36,20721,2880],{"emptyLinePlaceholder":553},[36,20723,20724,20726,20728,20730],{"class":38,"line":10392},[36,20725,2783],{"class":2443},[36,20727,345],{"class":42},[36,20729,2788],{"class":405},[36,20731,3199],{"class":42},[36,20733,20734],{"class":38,"line":10400},[36,20735,2880],{"emptyLinePlaceholder":553},[36,20737,20738,20740,20742],{"class":38,"line":10405},[36,20739,4570],{"class":46},[36,20741,4573],{"class":53},[36,20743,1774],{"class":42},[36,20745,20746],{"class":38,"line":17084},[36,20747,2045],{"class":42},[596,20749,20751],{"id":20750},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20753,20754],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20756,20757],{},"1．默认构造函数(无参，函数体为空)",[19,20759,20760],{},"2．默认析构函数(无参，函数体为空)",[19,20762,20763],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20765,20766],{},"构造函数调用规则如下：",[1620,20768,20769,20772],{},[582,20770,20771],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[582,20773,20774],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,20776,20778],{"className":617,"code":20777,"language":619,"meta":31,"style":31},"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",[33,20779,20780,20788,20792,20797,20803,20815,20819,20824,20836,20845,20857,20861,20865,20881,20890,20902,20906,20910,20916,20928,20932,20936,20942,20946,20950,20958,20962,20974,20979,20987,20991,21009,21013,21017,21025,21029,21034,21042,21057,21070,21074,21079,21086,21102,21115,21119,21123,21131,21135,21141,21145,21155,21159,21167],{"__ignoreMap":31},[36,20781,20782,20784,20786],{"class":38,"line":39},[36,20783,15174],{"class":46},[36,20785,16049],{"class":2443},[36,20787,16052],{"class":42},[36,20789,20790],{"class":38,"line":66},[36,20791,15196],{"class":46},[36,20793,20794],{"class":38,"line":73},[36,20795,20796],{"class":69},"    \u002F\u002F无参（默认）构造函数\n",[36,20798,20799,20801],{"class":38,"line":79},[36,20800,18999],{"class":2443},[36,20802,11333],{"class":42},[36,20804,20805,20807,20809,20811,20813],{"class":38,"line":85},[36,20806,10149],{"class":42},[36,20808,1657],{"class":46},[36,20810,20290],{"class":405},[36,20812,1925],{"class":46},[36,20814,9320],{"class":42},[36,20816,20817],{"class":38,"line":419},[36,20818,2667],{"class":42},[36,20820,20821],{"class":38,"line":425},[36,20822,20823],{"class":69},"    \u002F\u002F有参构造函数\n",[36,20825,20826,20828,20830,20832,20834],{"class":38,"line":431},[36,20827,18999],{"class":2443},[36,20829,345],{"class":42},[36,20831,631],{"class":46},[36,20833,1879],{"class":5696},[36,20835,12922],{"class":42},[36,20837,20838,20841,20843],{"class":38,"line":437},[36,20839,20840],{"class":42},"        age ",[36,20842,47],{"class":46},[36,20844,1913],{"class":42},[36,20846,20847,20849,20851,20853,20855],{"class":38,"line":443},[36,20848,10149],{"class":42},[36,20850,1657],{"class":46},[36,20852,20330],{"class":405},[36,20854,1925],{"class":46},[36,20856,9320],{"class":42},[36,20858,20859],{"class":38,"line":2092},[36,20860,2667],{"class":42},[36,20862,20863],{"class":38,"line":2097},[36,20864,19354],{"class":69},[36,20866,20867,20869,20871,20873,20875,20877,20879],{"class":38,"line":2103},[36,20868,18999],{"class":2443},[36,20870,345],{"class":42},[36,20872,7272],{"class":46},[36,20874,16049],{"class":2443},[36,20876,971],{"class":46},[36,20878,7305],{"class":5696},[36,20880,12922],{"class":42},[36,20882,20883,20885,20887],{"class":38,"line":2108},[36,20884,20840],{"class":42},[36,20886,47],{"class":46},[36,20888,20889],{"class":42}," p.age;\n",[36,20891,20892,20894,20896,20898,20900],{"class":38,"line":2122},[36,20893,10149],{"class":42},[36,20895,1657],{"class":46},[36,20897,20371],{"class":405},[36,20899,1925],{"class":46},[36,20901,9320],{"class":42},[36,20903,20904],{"class":38,"line":2127},[36,20905,2667],{"class":42},[36,20907,20908],{"class":38,"line":2133},[36,20909,19027],{"class":69},[36,20911,20912,20914],{"class":38,"line":2154},[36,20913,19032],{"class":2443},[36,20915,11333],{"class":42},[36,20917,20918,20920,20922,20924,20926],{"class":38,"line":2159},[36,20919,10149],{"class":42},[36,20921,1657],{"class":46},[36,20923,20408],{"class":405},[36,20925,1925],{"class":46},[36,20927,9320],{"class":42},[36,20929,20930],{"class":38,"line":2173},[36,20931,2667],{"class":42},[36,20933,20934],{"class":38,"line":2178},[36,20935,15196],{"class":46},[36,20937,20938,20940],{"class":38,"line":2207},[36,20939,2465],{"class":46},[36,20941,8277],{"class":42},[36,20943,20944],{"class":38,"line":2212},[36,20945,4475],{"class":42},[36,20947,20948],{"class":38,"line":2229},[36,20949,2880],{"emptyLinePlaceholder":553},[36,20951,20952,20954,20956],{"class":38,"line":2234},[36,20953,5844],{"class":46},[36,20955,6068],{"class":2443},[36,20957,2456],{"class":42},[36,20959,20960],{"class":38,"line":2239},[36,20961,2026],{"class":42},[36,20963,20964,20966,20968,20970,20972],{"class":38,"line":2244},[36,20965,19911],{"class":42},[36,20967,7610],{"class":2443},[36,20969,345],{"class":42},[36,20971,1263],{"class":53},[36,20973,3199],{"class":42},[36,20975,20976],{"class":38,"line":2258},[36,20977,20978],{"class":69},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,20980,20981,20983,20985],{"class":38,"line":2263},[36,20982,19911],{"class":42},[36,20984,7513],{"class":2443},[36,20986,17995],{"class":42},[36,20988,20989],{"class":38,"line":3057},[36,20990,2880],{"emptyLinePlaceholder":553},[36,20992,20993,20995,20997,21000,21002,21005,21007],{"class":38,"line":3071},[36,20994,7009],{"class":42},[36,20996,1657],{"class":46},[36,20998,20999],{"class":405}," \"p2的年龄为： \"",[36,21001,1925],{"class":46},[36,21003,21004],{"class":42}," p2.age ",[36,21006,1657],{"class":46},[36,21008,9320],{"class":42},[36,21010,21011],{"class":38,"line":3079},[36,21012,2045],{"class":42},[36,21014,21015],{"class":38,"line":3084},[36,21016,2880],{"emptyLinePlaceholder":553},[36,21018,21019,21021,21023],{"class":38,"line":3090},[36,21020,5844],{"class":46},[36,21022,6137],{"class":2443},[36,21024,2456],{"class":42},[36,21026,21027],{"class":38,"line":3096},[36,21028,2026],{"class":42},[36,21030,21031],{"class":38,"line":3101},[36,21032,21033],{"class":69},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,21035,21036,21039],{"class":38,"line":8428},[36,21037,21038],{"class":42},"    Person p1;",[36,21040,21041],{"class":69}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,21043,21044,21046,21048,21050,21052,21054],{"class":38,"line":8452},[36,21045,19911],{"class":42},[36,21047,7513],{"class":2443},[36,21049,345],{"class":42},[36,21051,1062],{"class":53},[36,21053,6446],{"class":42},[36,21055,21056],{"class":69}," \u002F\u002F用户提供的有参\n",[36,21058,21059,21061,21064,21067],{"class":38,"line":8457},[36,21060,19911],{"class":42},[36,21062,21063],{"class":2443},"p3",[36,21065,21066],{"class":42},"(p2);",[36,21068,21069],{"class":69}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,21071,21072],{"class":38,"line":8463},[36,21073,2880],{"emptyLinePlaceholder":553},[36,21075,21076],{"class":38,"line":8490},[36,21077,21078],{"class":69},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,21080,21081,21084],{"class":38,"line":8495},[36,21082,21083],{"class":42},"    Person p4;",[36,21085,21041],{"class":69},[36,21087,21088,21090,21093,21095,21097,21099],{"class":38,"line":8501},[36,21089,19911],{"class":42},[36,21091,21092],{"class":2443},"p5",[36,21094,345],{"class":42},[36,21096,1062],{"class":53},[36,21098,6446],{"class":42},[36,21100,21101],{"class":69}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,21103,21104,21106,21109,21112],{"class":38,"line":8513},[36,21105,19911],{"class":42},[36,21107,21108],{"class":2443},"p6",[36,21110,21111],{"class":42},"(p5);",[36,21113,21114],{"class":69}," \u002F\u002F用户自己提供拷贝构造\n",[36,21116,21117],{"class":38,"line":8525},[36,21118,2045],{"class":42},[36,21120,21121],{"class":38,"line":8537},[36,21122,2880],{"emptyLinePlaceholder":553},[36,21124,21125,21127,21129],{"class":38,"line":10196},[36,21126,631],{"class":46},[36,21128,2453],{"class":2443},[36,21130,11333],{"class":42},[36,21132,21133],{"class":38,"line":10221},[36,21134,2880],{"emptyLinePlaceholder":553},[36,21136,21137,21139],{"class":38,"line":10244},[36,21138,6113],{"class":2443},[36,21140,6116],{"class":42},[36,21142,21143],{"class":38,"line":10268},[36,21144,2880],{"emptyLinePlaceholder":553},[36,21146,21147,21149,21151,21153],{"class":38,"line":10273},[36,21148,2783],{"class":2443},[36,21150,345],{"class":42},[36,21152,2788],{"class":405},[36,21154,3199],{"class":42},[36,21156,21157],{"class":38,"line":10278},[36,21158,2880],{"emptyLinePlaceholder":553},[36,21160,21161,21163,21165],{"class":38,"line":10283},[36,21162,4570],{"class":46},[36,21164,4573],{"class":53},[36,21166,1774],{"class":42},[36,21168,21169],{"class":38,"line":10292},[36,21170,2045],{"class":42},[596,21172,21174],{"id":21173},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21176,21177],{},"浅拷贝：简单的赋值拷贝操作",[19,21179,21180],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,21182,21184],{"className":617,"code":21183,"language":619,"meta":31,"style":31},"#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",[33,21185,21186,21192,21202,21208,21212,21216,21221,21227,21231,21244,21248,21252,21259,21263,21273,21288,21301,21305,21310,21315,21331,21335,21348,21353,21358,21363,21372,21377,21392,21396,21400,21404,21410,21414,21419,21434,21438,21449,21463,21467,21476,21480,21486,21498,21502,21510,21514,21531,21562,21570,21598,21602,21606,21614,21618,21624],{"__ignoreMap":31},[36,21187,21188,21190],{"class":38,"line":39},[36,21189,2429],{"class":46},[36,21191,2432],{"class":405},[36,21193,21194,21196,21198,21200],{"class":38,"line":66},[36,21195,2437],{"class":46},[36,21197,2440],{"class":46},[36,21199,2444],{"class":2443},[36,21201,1774],{"class":42},[36,21203,21204,21206],{"class":38,"line":73},[36,21205,15174],{"class":46},[36,21207,15651],{"class":2443},[36,21209,21210],{"class":38,"line":79},[36,21211,2026],{"class":42},[36,21213,21214],{"class":38,"line":85},[36,21215,15196],{"class":46},[36,21217,21218],{"class":38,"line":419},[36,21219,21220],{"class":69},"    \u002F\u002F默认构造函数\n",[36,21222,21223,21225],{"class":38,"line":425},[36,21224,18999],{"class":2443},[36,21226,2456],{"class":42},[36,21228,21229],{"class":38,"line":431},[36,21230,2510],{"class":42},[36,21232,21233,21235,21237,21240,21242],{"class":38,"line":437},[36,21234,3931],{"class":42},[36,21236,1657],{"class":46},[36,21238,21239],{"class":405},"\"默认构造函数\"",[36,21241,1657],{"class":46},[36,21243,1679],{"class":42},[36,21245,21246],{"class":38,"line":443},[36,21247,2667],{"class":42},[36,21249,21250],{"class":38,"line":2092},[36,21251,20823],{"class":69},[36,21253,21254,21256],{"class":38,"line":2097},[36,21255,19032],{"class":2443},[36,21257,21258],{"class":42},"(int age,int height)\n",[36,21260,21261],{"class":38,"line":2103},[36,21262,2510],{"class":42},[36,21264,21265,21268,21270],{"class":38,"line":2108},[36,21266,21267],{"class":42},"        m_Age",[36,21269,47],{"class":46},[36,21271,21272],{"class":42},"age;\n",[36,21274,21275,21278,21280,21282,21285],{"class":38,"line":2122},[36,21276,21277],{"class":42},"        m_Height",[36,21279,12197],{"class":46},[36,21281,2862],{"class":46},[36,21283,21284],{"class":42},"(height);",[36,21286,21287],{"class":69},"\u002F\u002F放到堆区\n",[36,21289,21290,21292,21294,21297,21299],{"class":38,"line":2127},[36,21291,3931],{"class":42},[36,21293,1657],{"class":46},[36,21295,21296],{"class":405},"\"有参构造函数\"",[36,21298,1657],{"class":46},[36,21300,1679],{"class":42},[36,21302,21303],{"class":38,"line":2133},[36,21304,2667],{"class":42},[36,21306,21307],{"class":38,"line":2154},[36,21308,21309],{"class":69},"    \u002F\u002F深拷贝解决上述问题\n",[36,21311,21312],{"class":38,"line":2159},[36,21313,21314],{"class":69},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,21316,21317,21319,21321,21323,21325,21327,21329],{"class":38,"line":2173},[36,21318,18999],{"class":2443},[36,21320,345],{"class":42},[36,21322,7272],{"class":46},[36,21324,16049],{"class":2443},[36,21326,11064],{"class":46},[36,21328,19],{"class":5696},[36,21330,63],{"class":42},[36,21332,21333],{"class":38,"line":2178},[36,21334,2510],{"class":42},[36,21336,21337,21339,21341,21344,21346],{"class":38,"line":2207},[36,21338,3931],{"class":42},[36,21340,1657],{"class":46},[36,21342,21343],{"class":405},"\"拷贝构造函数\"",[36,21345,1657],{"class":46},[36,21347,1679],{"class":42},[36,21349,21350],{"class":38,"line":2212},[36,21351,21352],{"class":69},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,21354,21355],{"class":38,"line":2229},[36,21356,21357],{"class":69},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,21359,21360],{"class":38,"line":2234},[36,21361,21362],{"class":69},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,21364,21365,21367,21369],{"class":38,"line":2239},[36,21366,21267],{"class":42},[36,21368,47],{"class":46},[36,21370,21371],{"class":42},"p.m_Age;\n",[36,21373,21374],{"class":38,"line":2244},[36,21375,21376],{"class":69},"        \u002F\u002F深拷贝操作\n",[36,21378,21379,21381,21383,21385,21387,21389],{"class":38,"line":2258},[36,21380,21277],{"class":42},[36,21382,12197],{"class":46},[36,21384,2862],{"class":46},[36,21386,345],{"class":42},[36,21388,1071],{"class":46},[36,21390,21391],{"class":42},"p.m_Height);\n",[36,21393,21394],{"class":38,"line":2263},[36,21395,2667],{"class":42},[36,21397,21398],{"class":38,"line":3057},[36,21399,2880],{"emptyLinePlaceholder":553},[36,21401,21402],{"class":38,"line":3071},[36,21403,19027],{"class":69},[36,21405,21406,21408],{"class":38,"line":3079},[36,21407,19032],{"class":2443},[36,21409,2456],{"class":42},[36,21411,21412],{"class":38,"line":3084},[36,21413,2510],{"class":42},[36,21415,21416],{"class":38,"line":3090},[36,21417,21418],{"class":69},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,21420,21421,21423,21426,21429,21432],{"class":38,"line":3096},[36,21422,2977],{"class":46},[36,21424,21425],{"class":42},"(m_Height ",[36,21427,21428],{"class":46},"!=",[36,21430,21431],{"class":53}," NULL",[36,21433,63],{"class":42},[36,21435,21436],{"class":38,"line":3101},[36,21437,2990],{"class":42},[36,21439,21440,21443,21446],{"class":38,"line":8428},[36,21441,21442],{"class":46},"            delete",[36,21444,21445],{"class":42}," m_Height;",[36,21447,21448],{"class":69}," \u002F\u002F释放堆区内存\n",[36,21450,21451,21454,21456,21458,21460],{"class":38,"line":8452},[36,21452,21453],{"class":42},"            m_Height",[36,21455,47],{"class":46},[36,21457,2872],{"class":53},[36,21459,680],{"class":42},[36,21461,21462],{"class":69}," \u002F\u002F防止野指针\n",[36,21464,21465],{"class":38,"line":8457},[36,21466,3009],{"class":42},[36,21468,21469,21471,21473],{"class":38,"line":8463},[36,21470,3931],{"class":42},[36,21472,1657],{"class":46},[36,21474,21475],{"class":405},"\"Person的析构函数调用\"\n",[36,21477,21478],{"class":38,"line":8490},[36,21479,2667],{"class":42},[36,21481,21482,21484],{"class":38,"line":8495},[36,21483,2465],{"class":46},[36,21485,16146],{"class":42},[36,21487,21488,21490,21492,21495],{"class":38,"line":8501},[36,21489,2465],{"class":46},[36,21491,6998],{"class":46},[36,21493,21494],{"class":42},"m_Height;",[36,21496,21497],{"class":69}," \u002F\u002F定义一个指针，指向身高\n",[36,21499,21500],{"class":38,"line":8513},[36,21501,4475],{"class":42},[36,21503,21504,21506,21508],{"class":38,"line":8525},[36,21505,5844],{"class":46},[36,21507,6068],{"class":2443},[36,21509,2456],{"class":42},[36,21511,21512],{"class":38,"line":8537},[36,21513,2026],{"class":42},[36,21515,21516,21518,21520,21522,21524,21526,21529],{"class":38,"line":10196},[36,21517,19911],{"class":42},[36,21519,7610],{"class":2443},[36,21521,345],{"class":42},[36,21523,1263],{"class":53},[36,21525,57],{"class":42},[36,21527,21528],{"class":53},"160",[36,21530,3199],{"class":42},[36,21532,21533,21535,21537,21540,21542,21545,21547,21550,21552,21555,21557,21559],{"class":38,"line":10221},[36,21534,2031],{"class":42},[36,21536,1657],{"class":46},[36,21538,21539],{"class":405},"\"p1的年龄为:\"",[36,21541,1657],{"class":46},[36,21543,21544],{"class":42},"p1.m_Age",[36,21546,1657],{"class":46},[36,21548,21549],{"class":405},"\"身高为：\"",[36,21551,6899],{"class":46},[36,21553,21554],{"class":42},"p1.m_Height",[36,21556,1657],{"class":46},[36,21558,1722],{"class":42},[36,21560,21561],{"class":69},"  \u002F\u002F18\n",[36,21563,21564,21566,21568],{"class":38,"line":10244},[36,21565,19911],{"class":42},[36,21567,7513],{"class":2443},[36,21569,17995],{"class":42},[36,21571,21572,21574,21576,21579,21581,21583,21585,21587,21589,21592,21594,21596],{"class":38,"line":10268},[36,21573,2031],{"class":42},[36,21575,1657],{"class":46},[36,21577,21578],{"class":405},"\"p2的年龄为：\"",[36,21580,1657],{"class":46},[36,21582,19941],{"class":42},[36,21584,1657],{"class":46},[36,21586,21549],{"class":405},[36,21588,6899],{"class":46},[36,21590,21591],{"class":42},"p2.m_Height",[36,21593,1657],{"class":46},[36,21595,1722],{"class":42},[36,21597,21561],{"class":69},[36,21599,21600],{"class":38,"line":10273},[36,21601,13690],{"class":42},[36,21603,21604],{"class":38,"line":10278},[36,21605,2045],{"class":42},[36,21607,21608,21610,21612],{"class":38,"line":10283},[36,21609,631],{"class":46},[36,21611,2453],{"class":2443},[36,21613,2456],{"class":42},[36,21615,21616],{"class":38,"line":10292},[36,21617,2026],{"class":42},[36,21619,21620,21622],{"class":38,"line":10297},[36,21621,6113],{"class":2443},[36,21623,6116],{"class":42},[36,21625,21626],{"class":38,"line":10303},[36,21627,2045],{"class":42},[19,21629,21630],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21632,21633],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21635,21636],{},[519,21637],{"alt":31,"src":21638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21640,21641],{},"浅拷贝问题要使用深拷贝来解决",[19,21643,21644],{},[519,21645],{"alt":31,"src":21646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21648,21649],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[596,21651,21653],{"id":21652},"_826初始化列表","8.2.6初始化列表",[19,21655,21656],{},"作用：初始化属性",[19,21658,5661],{},[26,21660,21663],{"className":21661,"code":21662,"language":5667},[5665],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,21664,21662],{"__ignoreMap":31},[19,21666,21667],{},"例子",[26,21669,21671],{"className":617,"code":21670,"language":619,"meta":31,"style":31},"#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",[33,21672,21673,21679,21689,21695,21699,21704,21708,21713,21718,21723,21728,21733,21738,21742,21747,21752,21795,21804,21822,21840,21858,21862,21866,21873,21880,21887,21891,21895,21903,21907,21911,21931,21940,21944,21948,21958,21962,21970],{"__ignoreMap":31},[36,21674,21675,21677],{"class":38,"line":39},[36,21676,2429],{"class":46},[36,21678,2432],{"class":405},[36,21680,21681,21683,21685,21687],{"class":38,"line":66},[36,21682,2437],{"class":46},[36,21684,2440],{"class":46},[36,21686,2444],{"class":2443},[36,21688,1774],{"class":42},[36,21690,21691,21693],{"class":38,"line":73},[36,21692,15174],{"class":46},[36,21694,15651],{"class":2443},[36,21696,21697],{"class":38,"line":79},[36,21698,2026],{"class":42},[36,21700,21701],{"class":38,"line":85},[36,21702,21703],{"class":46},"    public:\n",[36,21705,21706],{"class":38,"line":419},[36,21707,2880],{"emptyLinePlaceholder":553},[36,21709,21710],{"class":38,"line":425},[36,21711,21712],{"class":69},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,21714,21715],{"class":38,"line":431},[36,21716,21717],{"class":69},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,21719,21720],{"class":38,"line":437},[36,21721,21722],{"class":69},"    \u002F\u002F  m_A = a;\n",[36,21724,21725],{"class":38,"line":443},[36,21726,21727],{"class":69},"    \u002F\u002F  m_B = b;\n",[36,21729,21730],{"class":38,"line":2092},[36,21731,21732],{"class":69},"    \u002F\u002F  m_C = c;\n",[36,21734,21735],{"class":38,"line":2097},[36,21736,21737],{"class":69},"    \u002F\u002F}\n",[36,21739,21740],{"class":38,"line":2103},[36,21741,2880],{"emptyLinePlaceholder":553},[36,21743,21744],{"class":38,"line":2108},[36,21745,21746],{"class":69},"    \u002F\u002F初始化列表方式初始化\n",[36,21748,21749],{"class":38,"line":2122},[36,21750,21751],{"class":69},"    \u002F\u002F使用有参构造函数\n",[36,21753,21754,21756,21758,21760,21762,21764,21766,21768,21770,21772,21774,21777,21780,21783,21786,21789,21792],{"class":38,"line":2127},[36,21755,18999],{"class":2443},[36,21757,345],{"class":42},[36,21759,631],{"class":46},[36,21761,1879],{"class":5696},[36,21763,12915],{"class":42},[36,21765,631],{"class":46},[36,21767,3313],{"class":5696},[36,21769,12915],{"class":42},[36,21771,631],{"class":46},[36,21773,3329],{"class":5696},[36,21775,21776],{"class":42},") :",[36,21778,21779],{"class":2443},"m_A",[36,21781,21782],{"class":42},"(a), ",[36,21784,21785],{"class":2443},"m_B",[36,21787,21788],{"class":42},"(b), ",[36,21790,21791],{"class":2443},"m_C",[36,21793,21794],{"class":42},"(c) {}\n",[36,21796,21797,21799,21802],{"class":38,"line":2133},[36,21798,15389],{"class":46},[36,21800,21801],{"class":2443}," PrintPerson",[36,21803,11333],{"class":42},[36,21805,21806,21808,21810,21813,21815,21818,21820],{"class":38,"line":2154},[36,21807,10149],{"class":42},[36,21809,1657],{"class":46},[36,21811,21812],{"class":405}," \"mA:\"",[36,21814,1925],{"class":46},[36,21816,21817],{"class":42}," m_A ",[36,21819,1657],{"class":46},[36,21821,9320],{"class":42},[36,21823,21824,21826,21828,21831,21833,21836,21838],{"class":38,"line":2159},[36,21825,10149],{"class":42},[36,21827,1657],{"class":46},[36,21829,21830],{"class":405}," \"mB:\"",[36,21832,1925],{"class":46},[36,21834,21835],{"class":42}," m_B ",[36,21837,1657],{"class":46},[36,21839,9320],{"class":42},[36,21841,21842,21844,21846,21849,21851,21854,21856],{"class":38,"line":2173},[36,21843,10149],{"class":42},[36,21845,1657],{"class":46},[36,21847,21848],{"class":405}," \"mC:\"",[36,21850,1925],{"class":46},[36,21852,21853],{"class":42}," m_C ",[36,21855,1657],{"class":46},[36,21857,9320],{"class":42},[36,21859,21860],{"class":38,"line":2178},[36,21861,2667],{"class":42},[36,21863,21864],{"class":38,"line":2207},[36,21865,15702],{"class":46},[36,21867,21868,21870],{"class":38,"line":2212},[36,21869,2465],{"class":46},[36,21871,21872],{"class":42}," m_A;\n",[36,21874,21875,21877],{"class":38,"line":2229},[36,21876,2465],{"class":46},[36,21878,21879],{"class":42}," m_B;\n",[36,21881,21882,21884],{"class":38,"line":2234},[36,21883,2465],{"class":46},[36,21885,21886],{"class":42}," m_C;\n",[36,21888,21889],{"class":38,"line":2239},[36,21890,4475],{"class":42},[36,21892,21893],{"class":38,"line":2244},[36,21894,2880],{"emptyLinePlaceholder":553},[36,21896,21897,21899,21901],{"class":38,"line":2258},[36,21898,631],{"class":46},[36,21900,2453],{"class":2443},[36,21902,6458],{"class":42},[36,21904,21905],{"class":38,"line":2263},[36,21906,2026],{"class":42},[36,21908,21909],{"class":38,"line":3057},[36,21910,2880],{"emptyLinePlaceholder":553},[36,21912,21913,21915,21917,21919,21921,21923,21925,21927,21929],{"class":38,"line":3071},[36,21914,19911],{"class":42},[36,21916,19],{"class":2443},[36,21918,345],{"class":42},[36,21920,54],{"class":53},[36,21922,12915],{"class":42},[36,21924,96],{"class":53},[36,21926,12915],{"class":42},[36,21928,127],{"class":53},[36,21930,3199],{"class":42},[36,21932,21933,21935,21938],{"class":38,"line":3079},[36,21934,16346],{"class":42},[36,21936,21937],{"class":2443},"PrintPerson",[36,21939,6116],{"class":42},[36,21941,21942],{"class":38,"line":3084},[36,21943,2880],{"emptyLinePlaceholder":553},[36,21945,21946],{"class":38,"line":3090},[36,21947,2880],{"emptyLinePlaceholder":553},[36,21949,21950,21952,21954,21956],{"class":38,"line":3096},[36,21951,2783],{"class":2443},[36,21953,345],{"class":42},[36,21955,2788],{"class":405},[36,21957,3199],{"class":42},[36,21959,21960],{"class":38,"line":3101},[36,21961,2880],{"emptyLinePlaceholder":553},[36,21963,21964,21966,21968],{"class":38,"line":8428},[36,21965,4570],{"class":46},[36,21967,4573],{"class":53},[36,21969,1774],{"class":42},[36,21971,21972],{"class":38,"line":8452},[36,21973,2045],{"class":42},[19,21975,21976,21977,21980,21981],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[770,21978,21979],{},"参数名就是定义的对象属性","，",[770,21982,21983],{},"属性后面的值为有参构造函数的形参",[26,21985,21987],{"className":617,"code":21986,"language":619,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,21988,21989],{"__ignoreMap":31},[36,21990,21991,21993,21995,21997,22000,22002,22005,22007,22010,22012,22015,22017,22020,22022],{"class":38,"line":39},[36,21992,19526],{"class":2443},[36,21994,345],{"class":42},[36,21996,631],{"class":46},[36,21998,21999],{"class":42}," a.",[36,22001,631],{"class":46},[36,22003,22004],{"class":42}," b,",[36,22006,631],{"class":46},[36,22008,22009],{"class":42}," b):",[36,22011,21779],{"class":2443},[36,22013,22014],{"class":42},"(a),",[36,22016,21785],{"class":2443},[36,22018,22019],{"class":42},"(c),",[36,22021,21791],{"class":2443},[36,22023,22024],{"class":42},"(b) {}\n",[596,22026,22028],{"id":22027},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22030,22031],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22033,15113],{},[26,22035,22037],{"className":617,"code":22036,"language":619,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,22038,22039,22044,22049,22053,22058,22062],{"__ignoreMap":31},[36,22040,22041],{"class":38,"line":39},[36,22042,22043],{"class":42},"A{};\n",[36,22045,22046],{"class":38,"line":66},[36,22047,22048],{"class":42},"B\n",[36,22050,22051],{"class":38,"line":73},[36,22052,2026],{"class":42},[36,22054,22055],{"class":38,"line":79},[36,22056,22057],{"class":42},"    A a;\n",[36,22059,22060],{"class":38,"line":85},[36,22061,2045],{"class":42},[36,22063,22064],{"class":38,"line":419},[36,22065,22066],{"class":69},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22068,22069],{},"案例",[26,22071,22073],{"className":617,"code":22072,"language":619,"meta":31,"style":31},"\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",[33,22074,22075,22080,22087,22091,22096,22101,22115,22119,22129,22140,22144,22151,22155,22168,22172,22177,22182,22186,22192,22196,22200,22204,22235,22239,22250,22254,22260,22264,22277,22281,22285,22289,22294,22299,22303,22311,22315,22332,22351,22355,22363,22367,22373],{"__ignoreMap":31},[36,22076,22077],{"class":38,"line":39},[36,22078,22079],{"class":69},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,22081,22082,22084],{"class":38,"line":66},[36,22083,15174],{"class":46},[36,22085,22086],{"class":2443}," Phone\n",[36,22088,22089],{"class":38,"line":73},[36,22090,2026],{"class":42},[36,22092,22093],{"class":38,"line":79},[36,22094,22095],{"class":42},"public：\n",[36,22097,22098],{"class":38,"line":85},[36,22099,22100],{"class":69},"    \u002F\u002F 赋值(构造函数)\n",[36,22102,22103,22106,22108,22110,22113],{"class":38,"line":419},[36,22104,22105],{"class":2443},"    Phone",[36,22107,345],{"class":42},[36,22109,15397],{"class":2443},[36,22111,22112],{"class":5696}," pName",[36,22114,63],{"class":42},[36,22116,22117],{"class":38,"line":425},[36,22118,2510],{"class":42},[36,22120,22121,22124,22126],{"class":38,"line":431},[36,22122,22123],{"class":42},"        m_pName",[36,22125,47],{"class":46},[36,22127,22128],{"class":42},"pName;\n",[36,22130,22131,22133,22135,22138],{"class":38,"line":437},[36,22132,3931],{"class":42},[36,22134,1657],{"class":46},[36,22136,22137],{"class":405},"\"Phone的构造函数调用\"",[36,22139,1774],{"class":42},[36,22141,22142],{"class":38,"line":443},[36,22143,2667],{"class":42},[36,22145,22146,22149],{"class":38,"line":2092},[36,22147,22148],{"class":2443},"    ~Phone",[36,22150,2456],{"class":42},[36,22152,22153],{"class":38,"line":2097},[36,22154,2510],{"class":42},[36,22156,22157,22159,22161,22164,22166],{"class":38,"line":2103},[36,22158,3931],{"class":42},[36,22160,1657],{"class":46},[36,22162,22163],{"class":405},"\"Phone析构函数调用\"",[36,22165,1657],{"class":46},[36,22167,1679],{"class":42},[36,22169,22170],{"class":38,"line":2108},[36,22171,2667],{"class":42},[36,22173,22174],{"class":38,"line":2122},[36,22175,22176],{"class":69},"    \u002F\u002F\n",[36,22178,22179],{"class":38,"line":2127},[36,22180,22181],{"class":42},"    string m_PName;\n",[36,22183,22184],{"class":38,"line":2133},[36,22185,4475],{"class":42},[36,22187,22188,22190],{"class":38,"line":2154},[36,22189,15174],{"class":46},[36,22191,15651],{"class":2443},[36,22193,22194],{"class":38,"line":2159},[36,22195,2026],{"class":42},[36,22197,22198],{"class":38,"line":2173},[36,22199,15196],{"class":46},[36,22201,22202],{"class":38,"line":2178},[36,22203,17474],{"class":69},[36,22205,22206,22208,22210,22212,22214,22216,22218,22221,22224,22226,22229,22232],{"class":38,"line":2207},[36,22207,18999],{"class":2443},[36,22209,345],{"class":42},[36,22211,15397],{"class":2443},[36,22213,15400],{"class":5696},[36,22215,57],{"class":42},[36,22217,15397],{"class":2443},[36,22219,22220],{"class":5696}," pname",[36,22222,22223],{"class":42},"):",[36,22225,15490],{"class":2443},[36,22227,22228],{"class":42},"(name),m_phone.",[36,22230,22231],{"class":2443},"m_PName",[36,22233,22234],{"class":42},"(pname) \n",[36,22236,22237],{"class":38,"line":2212},[36,22238,2510],{"class":42},[36,22240,22241,22243,22245,22248],{"class":38,"line":2229},[36,22242,3931],{"class":42},[36,22244,1657],{"class":46},[36,22246,22247],{"class":405},"\"Person的构造函数调用\"",[36,22249,1774],{"class":42},[36,22251,22252],{"class":38,"line":2234},[36,22253,2667],{"class":42},[36,22255,22256,22258],{"class":38,"line":2239},[36,22257,19032],{"class":2443},[36,22259,2456],{"class":42},[36,22261,22262],{"class":38,"line":2244},[36,22263,2510],{"class":42},[36,22265,22266,22268,22270,22273,22275],{"class":38,"line":2258},[36,22267,3931],{"class":42},[36,22269,1657],{"class":46},[36,22271,22272],{"class":405},"\"Person析构函数调用\"",[36,22274,1657],{"class":46},[36,22276,1679],{"class":42},[36,22278,22279],{"class":38,"line":2263},[36,22280,2667],{"class":42},[36,22282,22283],{"class":38,"line":3057},[36,22284,8260],{"class":69},[36,22286,22287],{"class":38,"line":3071},[36,22288,15372],{"class":42},[36,22290,22291],{"class":38,"line":3079},[36,22292,22293],{"class":69},"    \u002F\u002F手机\n",[36,22295,22296],{"class":38,"line":3084},[36,22297,22298],{"class":42},"    Phone m_Phone;\n",[36,22300,22301],{"class":38,"line":3090},[36,22302,4475],{"class":42},[36,22304,22305,22307,22309],{"class":38,"line":3096},[36,22306,5844],{"class":46},[36,22308,6068],{"class":2443},[36,22310,2456],{"class":42},[36,22312,22313],{"class":38,"line":3101},[36,22314,2026],{"class":42},[36,22316,22317,22319,22321,22323,22325,22327,22330],{"class":38,"line":8428},[36,22318,19911],{"class":42},[36,22320,19],{"class":2443},[36,22322,345],{"class":42},[36,22324,8396],{"class":405},[36,22326,57],{"class":42},[36,22328,22329],{"class":405},"\"安卓\"",[36,22331,3199],{"class":42},[36,22333,22334,22336,22338,22341,22343,22346,22348],{"class":38,"line":8452},[36,22335,2031],{"class":42},[36,22337,1657],{"class":46},[36,22339,22340],{"class":42},"p.Name",[36,22342,1657],{"class":46},[36,22344,22345],{"class":405},"\"拿着：\"",[36,22347,1657],{"class":46},[36,22349,22350],{"class":42},"p.m_phone.m_PName;\n",[36,22352,22353],{"class":38,"line":8457},[36,22354,2045],{"class":42},[36,22356,22357,22359,22361],{"class":38,"line":8463},[36,22358,631],{"class":46},[36,22360,2453],{"class":2443},[36,22362,2456],{"class":42},[36,22364,22365],{"class":38,"line":8490},[36,22366,2026],{"class":42},[36,22368,22369,22371],{"class":38,"line":8495},[36,22370,6113],{"class":2443},[36,22372,6116],{"class":42},[36,22374,22375],{"class":38,"line":8501},[36,22376,2045],{"class":42},[19,22378,9505],{},[26,22380,22382],{"className":617,"code":22381,"language":619,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,22383,22384,22389],{"__ignoreMap":31},[36,22385,22386],{"class":38,"line":39},[36,22387,22388],{"class":69},"    \u002F\u002F不需要写这个：\n",[36,22390,22391],{"class":38,"line":66},[36,22392,22393],{"class":69},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22395,22396],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,22398,22400],{"className":617,"code":22399,"language":619,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,22401,22402],{"__ignoreMap":31},[36,22403,22404,22406,22409,22411,22414,22417],{"class":38,"line":39},[36,22405,19526],{"class":2443},[36,22407,22408],{"class":42},"(string name.string pname):",[36,22410,15490],{"class":2443},[36,22412,22413],{"class":42},"(name),",[36,22415,22416],{"class":2443},"m_phone",[36,22418,22419],{"class":42},"(pname) {}\n",[19,22421,22422,22423,47,22426],{},"采用的是隐式转换法，实际为如下：\n",[33,22424,22425],{},"m_phone(pname)",[33,22427,22428],{},"Phone m_phone=pname",[19,22430,22431,22434],{},[770,22432,22433],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22436,22437],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[596,22439,22441],{"id":22440},"_828静态对象","8.2.8静态对象",[19,22443,22444],{},"静态对象在成员对象前static，称为静态对象",[19,22446,22447],{},"静态对象分为两类：",[579,22449,22450],{},[582,22451,22452],{},"静态成员变量",[1620,22454,22455,22458,22461],{},[582,22456,22457],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[582,22459,22460],{},"②在编译阶段分配内存",[582,22462,22463],{},"③类内声明，类外初始化",[579,22465,22466],{"start":66},[582,22467,22468],{},"静态成员函数",[1620,22470,22471,22474],{},[582,22472,22473],{},"①所有对象共享同一个函数",[582,22475,22476],{},"②静态成员函数只能访问静态成员变量",[22478,22479,22481],"h4",{"id":22480},"_8281静态成员变量","8.2.8.1静态成员变量",[26,22483,22485],{"className":617,"code":22484,"language":619,"meta":31,"style":31},"#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",[33,22486,22487,22493,22503,22509,22513,22517,22522,22527,22532,22540,22544,22548,22552,22560,22564,22568,22573,22586,22590,22598,22602,22608],{"__ignoreMap":31},[36,22488,22489,22491],{"class":38,"line":39},[36,22490,2429],{"class":46},[36,22492,2432],{"class":405},[36,22494,22495,22497,22499,22501],{"class":38,"line":66},[36,22496,2437],{"class":46},[36,22498,2440],{"class":46},[36,22500,2444],{"class":2443},[36,22502,1774],{"class":42},[36,22504,22505,22507],{"class":38,"line":73},[36,22506,15174],{"class":46},[36,22508,15651],{"class":2443},[36,22510,22511],{"class":38,"line":79},[36,22512,2026],{"class":42},[36,22514,22515],{"class":38,"line":85},[36,22516,15196],{"class":46},[36,22518,22519],{"class":38,"line":419},[36,22520,22521],{"class":69},"    \u002F\u002F非静态成员变量\n",[36,22523,22524],{"class":38,"line":425},[36,22525,22526],{"class":69},"    \u002F\u002F int m_A;\n",[36,22528,22529],{"class":38,"line":431},[36,22530,22531],{"class":69},"    \u002F\u002F定义静态成员变量\n",[36,22533,22534,22536,22538],{"class":38,"line":437},[36,22535,11500],{"class":46},[36,22537,2862],{"class":46},[36,22539,21872],{"class":42},[36,22541,22542],{"class":38,"line":443},[36,22543,2880],{"emptyLinePlaceholder":553},[36,22545,22546],{"class":38,"line":2092},[36,22547,2880],{"emptyLinePlaceholder":553},[36,22549,22550],{"class":38,"line":2097},[36,22551,4475],{"class":42},[36,22553,22554,22556,22558],{"class":38,"line":2103},[36,22555,5844],{"class":46},[36,22557,6068],{"class":2443},[36,22559,2456],{"class":42},[36,22561,22562],{"class":38,"line":2108},[36,22563,2026],{"class":42},[36,22565,22566],{"class":38,"line":2122},[36,22567,15793],{"class":42},[36,22569,22570],{"class":38,"line":2127},[36,22571,22572],{"class":69},"    \u002F\u002F输出类成员变量这块内存\n",[36,22574,22575,22577,22579,22582,22584],{"class":38,"line":2133},[36,22576,2031],{"class":42},[36,22578,1657],{"class":46},[36,22580,22581],{"class":42},"p.m_A",[36,22583,1657],{"class":46},[36,22585,1679],{"class":42},[36,22587,22588],{"class":38,"line":2154},[36,22589,2045],{"class":42},[36,22591,22592,22594,22596],{"class":38,"line":2159},[36,22593,631],{"class":46},[36,22595,2453],{"class":2443},[36,22597,2456],{"class":42},[36,22599,22600],{"class":38,"line":2173},[36,22601,2026],{"class":42},[36,22603,22604,22606],{"class":38,"line":2178},[36,22605,6113],{"class":2443},[36,22607,2456],{"class":42},[36,22609,22610],{"class":38,"line":2207},[36,22611,2045],{"class":42},[19,22613,22614],{},"此时输出是报错的：无法解析外部命令",[19,22616,22617],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,22619,22621],{"className":617,"code":22620,"language":619,"meta":31,"style":31},"#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",[33,22622,22623,22629,22639,22645,22649,22653,22658,22666,22670,22675,22690,22698,22702,22706,22711,22716,22728,22733,22744,22749,22754,22767,22771,22779,22783,22789],{"__ignoreMap":31},[36,22624,22625,22627],{"class":38,"line":39},[36,22626,2429],{"class":46},[36,22628,2432],{"class":405},[36,22630,22631,22633,22635,22637],{"class":38,"line":66},[36,22632,2437],{"class":46},[36,22634,2440],{"class":46},[36,22636,2444],{"class":2443},[36,22638,1774],{"class":42},[36,22640,22641,22643],{"class":38,"line":73},[36,22642,15174],{"class":46},[36,22644,15651],{"class":2443},[36,22646,22647],{"class":38,"line":79},[36,22648,2026],{"class":42},[36,22650,22651],{"class":38,"line":85},[36,22652,15196],{"class":46},[36,22654,22655],{"class":38,"line":419},[36,22656,22657],{"class":69},"    \u002F\u002F类内声明\n",[36,22659,22660,22662,22664],{"class":38,"line":425},[36,22661,11500],{"class":46},[36,22663,2862],{"class":46},[36,22665,21872],{"class":42},[36,22667,22668],{"class":38,"line":431},[36,22669,4475],{"class":42},[36,22671,22672],{"class":38,"line":437},[36,22673,22674],{"class":69},"\u002F\u002F类外初始化\n",[36,22676,22677,22679,22681,22684,22686,22688],{"class":38,"line":443},[36,22678,631],{"class":46},[36,22680,16049],{"class":2443},[36,22682,22683],{"class":42},"::m_A",[36,22685,47],{"class":46},[36,22687,1062],{"class":53},[36,22689,1774],{"class":42},[36,22691,22692,22694,22696],{"class":38,"line":2092},[36,22693,5844],{"class":46},[36,22695,6068],{"class":2443},[36,22697,2456],{"class":42},[36,22699,22700],{"class":38,"line":2097},[36,22701,2026],{"class":42},[36,22703,22704],{"class":38,"line":2103},[36,22705,15793],{"class":42},[36,22707,22708],{"class":38,"line":2108},[36,22709,22710],{"class":69},"    \u002F\u002F访问变量的原内存空间\n",[36,22712,22713],{"class":38,"line":2122},[36,22714,22715],{"class":69},"    \u002F\u002F100\n",[36,22717,22718,22720,22722,22724,22726],{"class":38,"line":2127},[36,22719,2031],{"class":42},[36,22721,1657],{"class":46},[36,22723,22581],{"class":42},[36,22725,1657],{"class":46},[36,22727,1679],{"class":42},[36,22729,22730],{"class":38,"line":2133},[36,22731,22732],{"class":42},"    Person p2;\n",[36,22734,22735,22738,22740,22742],{"class":38,"line":2154},[36,22736,22737],{"class":42},"    p2.m_A",[36,22739,47],{"class":46},[36,22741,2202],{"class":53},[36,22743,1774],{"class":42},[36,22745,22746],{"class":38,"line":2159},[36,22747,22748],{"class":69},"    \u002F\u002F继续访问这片空间\n",[36,22750,22751],{"class":38,"line":2173},[36,22752,22753],{"class":69},"    \u002F\u002F200\n",[36,22755,22756,22758,22760,22763,22765],{"class":38,"line":2178},[36,22757,2031],{"class":42},[36,22759,1657],{"class":46},[36,22761,22762],{"class":42},"p2.m_A",[36,22764,1657],{"class":46},[36,22766,1679],{"class":42},[36,22768,22769],{"class":38,"line":2207},[36,22770,2045],{"class":42},[36,22772,22773,22775,22777],{"class":38,"line":2212},[36,22774,631],{"class":46},[36,22776,2453],{"class":2443},[36,22778,2456],{"class":42},[36,22780,22781],{"class":38,"line":2229},[36,22782,2026],{"class":42},[36,22784,22785,22787],{"class":38,"line":2234},[36,22786,6113],{"class":2443},[36,22788,6116],{"class":42},[36,22790,22791],{"class":38,"line":2239},[36,22792,2045],{"class":42},[19,22794,22795],{},[770,22796,22797],{},"静态变量的访问",[26,22799,22801],{"className":617,"code":22800,"language":619,"meta":31,"style":31},"#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",[33,22802,22803,22809,22819,22825,22829,22833,22837,22845,22849,22854,22862,22866,22870,22884,22899,22907,22911,22916,22921,22926,22931,22943,22948,22953,22967,22984,22988,22996,23000,23006],{"__ignoreMap":31},[36,22804,22805,22807],{"class":38,"line":39},[36,22806,2429],{"class":46},[36,22808,2432],{"class":405},[36,22810,22811,22813,22815,22817],{"class":38,"line":66},[36,22812,2437],{"class":46},[36,22814,2440],{"class":46},[36,22816,2444],{"class":2443},[36,22818,1774],{"class":42},[36,22820,22821,22823],{"class":38,"line":73},[36,22822,15174],{"class":46},[36,22824,15651],{"class":2443},[36,22826,22827],{"class":38,"line":79},[36,22828,2026],{"class":42},[36,22830,22831],{"class":38,"line":85},[36,22832,15196],{"class":46},[36,22834,22835],{"class":38,"line":419},[36,22836,22657],{"class":69},[36,22838,22839,22841,22843],{"class":38,"line":425},[36,22840,11500],{"class":46},[36,22842,2862],{"class":46},[36,22844,21872],{"class":42},[36,22846,22847],{"class":38,"line":431},[36,22848,15702],{"class":46},[36,22850,22851],{"class":38,"line":437},[36,22852,22853],{"class":69},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,22855,22856,22858,22860],{"class":38,"line":443},[36,22857,11500],{"class":46},[36,22859,2862],{"class":46},[36,22861,21879],{"class":42},[36,22863,22864],{"class":38,"line":2092},[36,22865,4475],{"class":42},[36,22867,22868],{"class":38,"line":2097},[36,22869,22674],{"class":69},[36,22871,22872,22874,22876,22878,22880,22882],{"class":38,"line":2103},[36,22873,631],{"class":46},[36,22875,16049],{"class":2443},[36,22877,22683],{"class":42},[36,22879,47],{"class":46},[36,22881,1062],{"class":53},[36,22883,1774],{"class":42},[36,22885,22886,22888,22890,22893,22895,22897],{"class":38,"line":2108},[36,22887,631],{"class":46},[36,22889,16049],{"class":2443},[36,22891,22892],{"class":42},"::m_B",[36,22894,47],{"class":46},[36,22896,1313],{"class":53},[36,22898,1774],{"class":42},[36,22900,22901,22903,22905],{"class":38,"line":2122},[36,22902,5844],{"class":46},[36,22904,6137],{"class":2443},[36,22906,2456],{"class":42},[36,22908,22909],{"class":38,"line":2127},[36,22910,2026],{"class":42},[36,22912,22913],{"class":38,"line":2133},[36,22914,22915],{"class":69},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,22917,22918],{"class":38,"line":2154},[36,22919,22920],{"class":69},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,22922,22923],{"class":38,"line":2159},[36,22924,22925],{"class":69},"    \u002F\u002F1.通过对象进行访问\n",[36,22927,22928],{"class":38,"line":2173},[36,22929,22930],{"class":42},"    Person p;  \n",[36,22932,22933,22935,22937,22939,22941],{"class":38,"line":2178},[36,22934,2031],{"class":42},[36,22936,1657],{"class":46},[36,22938,22581],{"class":42},[36,22940,1657],{"class":46},[36,22942,1679],{"class":42},[36,22944,22945],{"class":38,"line":2207},[36,22946,22947],{"class":69},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,22949,22950],{"class":38,"line":2212},[36,22951,22952],{"class":69},"    \u002F\u002F2.通过类名进行访问\n",[36,22954,22955,22957,22959,22961,22963,22965],{"class":38,"line":2229},[36,22956,2031],{"class":42},[36,22958,1657],{"class":46},[36,22960,19526],{"class":2443},[36,22962,22683],{"class":42},[36,22964,1657],{"class":46},[36,22966,1679],{"class":42},[36,22968,22969,22971,22973,22975,22977,22979,22981],{"class":38,"line":2234},[36,22970,2031],{"class":42},[36,22972,1657],{"class":46},[36,22974,19526],{"class":2443},[36,22976,22892],{"class":42},[36,22978,1657],{"class":46},[36,22980,1722],{"class":42},[36,22982,22983],{"class":69}," \u002F\u002F没有访问权限，报错\n",[36,22985,22986],{"class":38,"line":2239},[36,22987,2045],{"class":42},[36,22989,22990,22992,22994],{"class":38,"line":2244},[36,22991,631],{"class":46},[36,22993,2453],{"class":2443},[36,22995,2456],{"class":42},[36,22997,22998],{"class":38,"line":2258},[36,22999,2026],{"class":42},[36,23001,23002,23004],{"class":38,"line":2263},[36,23003,6182],{"class":2443},[36,23005,6116],{"class":42},[36,23007,23008],{"class":38,"line":3057},[36,23009,2045],{"class":42},[22478,23011,23013],{"id":23012},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23015,23016],{},"1.静态成员函数定义与访问",[26,23018,23020],{"className":617,"code":23019,"language":619,"meta":31,"style":31},"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",[33,23021,23022,23028,23032,23036,23041,23052,23056,23070,23074,23078,23086,23090,23095,23100,23104,23112,23117,23127],{"__ignoreMap":31},[36,23023,23024,23026],{"class":38,"line":39},[36,23025,15174],{"class":46},[36,23027,15651],{"class":2443},[36,23029,23030],{"class":38,"line":66},[36,23031,2026],{"class":42},[36,23033,23034],{"class":38,"line":73},[36,23035,15196],{"class":46},[36,23037,23038],{"class":38,"line":79},[36,23039,23040],{"class":69},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,23042,23043,23045,23048,23050],{"class":38,"line":85},[36,23044,11500],{"class":46},[36,23046,23047],{"class":46}," void",[36,23049,11865],{"class":2443},[36,23051,2456],{"class":42},[36,23053,23054],{"class":38,"line":419},[36,23055,2510],{"class":42},[36,23057,23058,23061,23063,23066,23068],{"class":38,"line":425},[36,23059,23060],{"class":42},"        coout",[36,23062,1657],{"class":46},[36,23064,23065],{"class":405},"\"静态成员函数的调用\"",[36,23067,1657],{"class":46},[36,23069,1679],{"class":42},[36,23071,23072],{"class":38,"line":431},[36,23073,2667],{"class":42},[36,23075,23076],{"class":38,"line":437},[36,23077,4475],{"class":42},[36,23079,23080,23082,23084],{"class":38,"line":443},[36,23081,5844],{"class":46},[36,23083,6068],{"class":2443},[36,23085,2456],{"class":42},[36,23087,23088],{"class":38,"line":2092},[36,23089,2026],{"class":42},[36,23091,23092],{"class":38,"line":2097},[36,23093,23094],{"class":69},"    \u002F\u002F静态成员函数的调用方式:\n",[36,23096,23097],{"class":38,"line":2103},[36,23098,23099],{"class":69},"    \u002F\u002F1.通过对象访问\n",[36,23101,23102],{"class":38,"line":2108},[36,23103,15793],{"class":42},[36,23105,23106,23108,23110],{"class":38,"line":2122},[36,23107,16346],{"class":42},[36,23109,12031],{"class":2443},[36,23111,6116],{"class":42},[36,23113,23114],{"class":38,"line":2127},[36,23115,23116],{"class":69},"    \u002F\u002F2.通过类名访问\n",[36,23118,23119,23121,23123,23125],{"class":38,"line":2133},[36,23120,18999],{"class":2443},[36,23122,18212],{"class":42},[36,23124,12031],{"class":2443},[36,23126,6116],{"class":42},[36,23128,23129],{"class":38,"line":2154},[36,23130,2045],{"class":42},[579,23132,23133],{"start":66},[582,23134,23135],{},"静态成员函数只能访问静态成员变量",[26,23137,23139],{"className":617,"code":23138,"language":619,"meta":31,"style":31},"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",[33,23140,23141,23147,23151,23155,23159,23169,23173,23187,23192,23204,23208,23219,23229,23233,23237,23241,23251,23255,23268,23272,23276,23280,23284,23298,23306,23310,23314,23318,23322,23330,23334,23344,23349,23353,23361,23365,23371],{"__ignoreMap":31},[36,23142,23143,23145],{"class":38,"line":39},[36,23144,15174],{"class":46},[36,23146,15651],{"class":2443},[36,23148,23149],{"class":38,"line":66},[36,23150,2026],{"class":42},[36,23152,23153],{"class":38,"line":73},[36,23154,15196],{"class":46},[36,23156,23157],{"class":38,"line":79},[36,23158,23040],{"class":69},[36,23160,23161,23163,23165,23167],{"class":38,"line":85},[36,23162,11500],{"class":46},[36,23164,23047],{"class":46},[36,23166,11865],{"class":2443},[36,23168,2456],{"class":42},[36,23170,23171],{"class":38,"line":419},[36,23172,2510],{"class":42},[36,23174,23175,23178,23180,23182,23184],{"class":38,"line":425},[36,23176,23177],{"class":42},"        m_A",[36,23179,47],{"class":46},[36,23181,930],{"class":53},[36,23183,680],{"class":42},[36,23185,23186],{"class":69}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,23188,23189],{"class":38,"line":431},[36,23190,23191],{"class":69},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,23193,23194,23196,23198,23200,23202],{"class":38,"line":437},[36,23195,23060],{"class":42},[36,23197,1657],{"class":46},[36,23199,23065],{"class":405},[36,23201,1657],{"class":46},[36,23203,1679],{"class":42},[36,23205,23206],{"class":38,"line":443},[36,23207,2667],{"class":42},[36,23209,23210,23212,23214,23216],{"class":38,"line":2092},[36,23211,11500],{"class":46},[36,23213,2862],{"class":46},[36,23215,15928],{"class":42},[36,23217,23218],{"class":69}," \u002F\u002F静态成员变量\n",[36,23220,23221,23223,23226],{"class":38,"line":2097},[36,23222,2465],{"class":46},[36,23224,23225],{"class":42}," m_B;",[36,23227,23228],{"class":69}," \u002F\u002F非静态成员变量\n",[36,23230,23231],{"class":38,"line":2103},[36,23232,2880],{"emptyLinePlaceholder":553},[36,23234,23235],{"class":38,"line":2108},[36,23236,15702],{"class":46},[36,23238,23239],{"class":38,"line":2122},[36,23240,22853],{"class":69},[36,23242,23243,23245,23247,23249],{"class":38,"line":2127},[36,23244,11500],{"class":46},[36,23246,23047],{"class":46},[36,23248,14098],{"class":2443},[36,23250,2456],{"class":42},[36,23252,23253],{"class":38,"line":2133},[36,23254,2510],{"class":42},[36,23256,23257,23259,23261,23264,23266],{"class":38,"line":2154},[36,23258,3931],{"class":42},[36,23260,1657],{"class":46},[36,23262,23263],{"class":405},"\"这是私有权限下的静态函数调用\"",[36,23265,1657],{"class":46},[36,23267,1679],{"class":42},[36,23269,23270],{"class":38,"line":2159},[36,23271,2667],{"class":42},[36,23273,23274],{"class":38,"line":2173},[36,23275,2880],{"emptyLinePlaceholder":553},[36,23277,23278],{"class":38,"line":2178},[36,23279,2880],{"emptyLinePlaceholder":553},[36,23281,23282],{"class":38,"line":2207},[36,23283,4475],{"class":42},[36,23285,23286,23288,23290,23292,23294,23296],{"class":38,"line":2212},[36,23287,631],{"class":46},[36,23289,16049],{"class":2443},[36,23291,22683],{"class":42},[36,23293,47],{"class":46},[36,23295,812],{"class":53},[36,23297,1774],{"class":42},[36,23299,23300,23302,23304],{"class":38,"line":2229},[36,23301,5844],{"class":46},[36,23303,6068],{"class":2443},[36,23305,2456],{"class":42},[36,23307,23308],{"class":38,"line":2234},[36,23309,2026],{"class":42},[36,23311,23312],{"class":38,"line":2239},[36,23313,23094],{"class":69},[36,23315,23316],{"class":38,"line":2244},[36,23317,23099],{"class":69},[36,23319,23320],{"class":38,"line":2258},[36,23321,15793],{"class":42},[36,23323,23324,23326,23328],{"class":38,"line":2263},[36,23325,16346],{"class":42},[36,23327,12031],{"class":2443},[36,23329,6116],{"class":42},[36,23331,23332],{"class":38,"line":3057},[36,23333,23116],{"class":69},[36,23335,23336,23338,23340,23342],{"class":38,"line":3071},[36,23337,18999],{"class":2443},[36,23339,18212],{"class":42},[36,23341,12031],{"class":2443},[36,23343,6116],{"class":42},[36,23345,23346],{"class":38,"line":3079},[36,23347,23348],{"class":69},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,23350,23351],{"class":38,"line":3084},[36,23352,2045],{"class":42},[36,23354,23355,23357,23359],{"class":38,"line":3090},[36,23356,631],{"class":46},[36,23358,2453],{"class":2443},[36,23360,2456],{"class":42},[36,23362,23363],{"class":38,"line":3096},[36,23364,2026],{"class":42},[36,23366,23367,23369],{"class":38,"line":3101},[36,23368,6113],{"class":2443},[36,23370,6116],{"class":42},[36,23372,23373],{"class":38,"line":8428},[36,23374,2045],{"class":42},[596,23376,23378],{"id":23377},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22478,23380,23382],{"id":23381},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23384,23385],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23387,23388],{},"只有非静态成员变量才属于类的对象上",[23390,23391,23393],"h5",{"id":23392},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,23395,23397],{"className":617,"code":23396,"language":619,"meta":31,"style":31},"#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",[33,23398,23399,23406,23416,23422,23426,23430,23434,23442,23446,23450,23473,23477,23485,23489,23495],{"__ignoreMap":31},[36,23400,23401,23403],{"class":38,"line":39},[36,23402,2429],{"class":46},[36,23404,23405],{"class":405},"\u003Ciostraem>\n",[36,23407,23408,23410,23412,23414],{"class":38,"line":66},[36,23409,2437],{"class":46},[36,23411,2440],{"class":46},[36,23413,2444],{"class":2443},[36,23415,1774],{"class":42},[36,23417,23418,23420],{"class":38,"line":73},[36,23419,15174],{"class":46},[36,23421,15651],{"class":2443},[36,23423,23424],{"class":38,"line":79},[36,23425,2026],{"class":42},[36,23427,23428],{"class":38,"line":85},[36,23429,2880],{"emptyLinePlaceholder":553},[36,23431,23432],{"class":38,"line":419},[36,23433,4475],{"class":42},[36,23435,23436,23438,23440],{"class":38,"line":425},[36,23437,5844],{"class":46},[36,23439,6068],{"class":2443},[36,23441,2456],{"class":42},[36,23443,23444],{"class":38,"line":431},[36,23445,2026],{"class":42},[36,23447,23448],{"class":38,"line":437},[36,23449,15793],{"class":42},[36,23451,23452,23454,23456,23459,23461,23464,23466,23468,23470],{"class":38,"line":443},[36,23453,2031],{"class":42},[36,23455,1657],{"class":46},[36,23457,23458],{"class":405},"\"size of p=\"",[36,23460,1657],{"class":46},[36,23462,23463],{"class":2443},"sizeoif",[36,23465,7019],{"class":42},[36,23467,1657],{"class":46},[36,23469,1722],{"class":42},[36,23471,23472],{"class":69}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,23474,23475],{"class":38,"line":2092},[36,23476,2045],{"class":42},[36,23478,23479,23481,23483],{"class":38,"line":2097},[36,23480,631],{"class":46},[36,23482,2453],{"class":2443},[36,23484,2456],{"class":42},[36,23486,23487],{"class":38,"line":2103},[36,23488,2026],{"class":42},[36,23490,23491,23493],{"class":38,"line":2108},[36,23492,6113],{"class":2443},[36,23494,6116],{"class":42},[36,23496,23497],{"class":38,"line":2122},[36,23498,2045],{"class":42},[19,23500,23501],{},"输出结果为：size of p=1",[19,23503,23504],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23506,23507],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23390,23509,23511],{"id":23510},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,23513,23515],{"className":617,"code":23514,"language":619,"meta":31,"style":31},"#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",[33,23516,23517,23523,23533,23541,23545,23554,23558,23566,23570,23574,23593,23597,23601,23609,23613,23619],{"__ignoreMap":31},[36,23518,23519,23521],{"class":38,"line":39},[36,23520,2429],{"class":46},[36,23522,2432],{"class":405},[36,23524,23525,23527,23529,23531],{"class":38,"line":66},[36,23526,2437],{"class":46},[36,23528,2440],{"class":46},[36,23530,2444],{"class":2443},[36,23532,1774],{"class":42},[36,23534,23535,23537,23539],{"class":38,"line":73},[36,23536,15174],{"class":46},[36,23538,16049],{"class":2443},[36,23540,3154],{"class":42},[36,23542,23543],{"class":38,"line":79},[36,23544,2026],{"class":42},[36,23546,23547,23549,23551],{"class":38,"line":85},[36,23548,2465],{"class":46},[36,23550,15928],{"class":42},[36,23552,23553],{"class":69},"\u002F\u002F非静态成员变量\n",[36,23555,23556],{"class":38,"line":419},[36,23557,4475],{"class":42},[36,23559,23560,23562,23564],{"class":38,"line":425},[36,23561,5844],{"class":46},[36,23563,6068],{"class":2443},[36,23565,2456],{"class":42},[36,23567,23568],{"class":38,"line":431},[36,23569,2026],{"class":42},[36,23571,23572],{"class":38,"line":437},[36,23573,15793],{"class":42},[36,23575,23576,23578,23580,23582,23584,23586,23588,23590],{"class":38,"line":443},[36,23577,2031],{"class":42},[36,23579,1657],{"class":46},[36,23581,23458],{"class":405},[36,23583,1853],{"class":46},[36,23585,7019],{"class":42},[36,23587,1657],{"class":46},[36,23589,1722],{"class":42},[36,23591,23592],{"class":69}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,23594,23595],{"class":38,"line":2092},[36,23596,2880],{"emptyLinePlaceholder":553},[36,23598,23599],{"class":38,"line":2097},[36,23600,2045],{"class":42},[36,23602,23603,23605,23607],{"class":38,"line":2103},[36,23604,631],{"class":46},[36,23606,2453],{"class":2443},[36,23608,2456],{"class":42},[36,23610,23611],{"class":38,"line":2108},[36,23612,2026],{"class":42},[36,23614,23615,23617],{"class":38,"line":2122},[36,23616,6113],{"class":2443},[36,23618,6116],{"class":42},[36,23620,23621],{"class":38,"line":2127},[36,23622,2045],{"class":42},[19,23624,23625],{},"输出结果：size of p=4",[19,23627,23628],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[579,23630,23631],{},[582,23632,23633],{},"如果加上非静态成员变量，Person类修改如下",[26,23635,23637],{"className":617,"code":23636,"language":619,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[33,23638,23639,23645,23649,23655,23663,23667,23672],{"__ignoreMap":31},[36,23640,23641,23643],{"class":38,"line":39},[36,23642,15174],{"class":46},[36,23644,15651],{"class":2443},[36,23646,23647],{"class":38,"line":66},[36,23648,2026],{"class":42},[36,23650,23651,23653],{"class":38,"line":73},[36,23652,2465],{"class":46},[36,23654,21872],{"class":42},[36,23656,23657,23659,23661],{"class":38,"line":79},[36,23658,11500],{"class":46},[36,23660,2862],{"class":46},[36,23662,21879],{"class":42},[36,23664,23665],{"class":38,"line":85},[36,23666,4475],{"class":42},[36,23668,23669],{"class":38,"line":419},[36,23670,23671],{"class":69},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,23673,23674,23676,23678,23680,23682,23684],{"class":38,"line":425},[36,23675,631],{"class":46},[36,23677,16049],{"class":2443},[36,23679,22892],{"class":42},[36,23681,47],{"class":46},[36,23683,812],{"class":53},[36,23685,1774],{"class":42},[19,23687,23688],{},"输出结果：4",[19,23690,23691],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[579,23693,23694],{"start":66},[582,23695,23696],{},"加上非静态成员函数",[26,23698,23700],{"className":617,"code":23699,"language":619,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,23701,23702,23709,23713,23719,23727,23731,23735,23739],{"__ignoreMap":31},[36,23703,23704,23706],{"class":38,"line":39},[36,23705,15174],{"class":46},[36,23707,23708],{"class":2443},"  Person\n",[36,23710,23711],{"class":38,"line":66},[36,23712,2026],{"class":42},[36,23714,23715,23717],{"class":38,"line":73},[36,23716,2465],{"class":46},[36,23718,21872],{"class":42},[36,23720,23721,23723,23725],{"class":38,"line":79},[36,23722,15389],{"class":46},[36,23724,11865],{"class":2443},[36,23726,2456],{"class":42},[36,23728,23729],{"class":38,"line":85},[36,23730,2510],{"class":42},[36,23732,23733],{"class":38,"line":419},[36,23734,2880],{"emptyLinePlaceholder":553},[36,23736,23737],{"class":38,"line":425},[36,23738,2667],{"class":42},[36,23740,23741],{"class":38,"line":431},[36,23742,4475],{"class":42},[19,23744,23745],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[579,23747,23748],{"start":73},[582,23749,23750],{},"加上静态成员函数",[26,23752,23754],{"className":617,"code":23753,"language":619,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[33,23755,23756,23762,23766,23772,23780,23784,23788,23792,23803,23807,23811,23815],{"__ignoreMap":31},[36,23757,23758,23760],{"class":38,"line":39},[36,23759,15174],{"class":46},[36,23761,23708],{"class":2443},[36,23763,23764],{"class":38,"line":66},[36,23765,2026],{"class":42},[36,23767,23768,23770],{"class":38,"line":73},[36,23769,2465],{"class":46},[36,23771,21872],{"class":42},[36,23773,23774,23776,23778],{"class":38,"line":79},[36,23775,15389],{"class":46},[36,23777,11865],{"class":2443},[36,23779,2456],{"class":42},[36,23781,23782],{"class":38,"line":85},[36,23783,2510],{"class":42},[36,23785,23786],{"class":38,"line":419},[36,23787,2880],{"emptyLinePlaceholder":553},[36,23789,23790],{"class":38,"line":425},[36,23791,2667],{"class":42},[36,23793,23794,23796,23798,23801],{"class":38,"line":431},[36,23795,11500],{"class":46},[36,23797,23047],{"class":46},[36,23799,23800],{"class":2443}," func1",[36,23802,2456],{"class":42},[36,23804,23805],{"class":38,"line":437},[36,23806,2510],{"class":42},[36,23808,23809],{"class":38,"line":443},[36,23810,2880],{"emptyLinePlaceholder":553},[36,23812,23813],{"class":38,"line":2092},[36,23814,2667],{"class":42},[36,23816,23817],{"class":38,"line":2097},[36,23818,4475],{"class":42},[19,23820,23688],{},[19,23822,23823],{},"解释：静态成员函数也不属于类上",[539,23825,8154],{},{"title":31,"searchDepth":66,"depth":66,"links":23827},[23828,23834],{"id":15125,"depth":66,"text":15126,"children":23829},[23830,23831,23832,23833],{"id":15129,"depth":73,"text":15130},{"id":15854,"depth":73,"text":15855},{"id":16026,"depth":73,"text":16027},{"id":16485,"depth":73,"text":16486},{"id":18857,"depth":66,"text":18858,"children":23835},[23836,23837,23838,23839,23840,23841,23842,23843,23844],{"id":18869,"depth":73,"text":18870},{"id":19162,"depth":73,"text":19163},{"id":19653,"depth":73,"text":19654},{"id":20750,"depth":73,"text":20751},{"id":21173,"depth":73,"text":21174},{"id":21652,"depth":73,"text":21653},{"id":22027,"depth":73,"text":22028},{"id":22440,"depth":73,"text":22441},{"id":23377,"depth":73,"text":23378},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15090,"description":23845},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23852,"title":619,"body":23853,"description":550,"extension":551,"meta":23857,"navigation":553,"path":23859,"seo":23860,"stem":23861,"__hash__":23862},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23854,"toc":23855},[],{"title":31,"searchDepth":66,"depth":66,"links":23856},[],{"category":23858},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":619,"description":550},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23864,"title":23865,"body":23866,"description":31,"extension":551,"meta":24457,"navigation":553,"path":24458,"seo":24459,"stem":24460,"__hash__":24461},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23867,"toc":24439},[23868,23871,23875,23878,23881,23884,23902,23907,23910,23913,23916,23919,23924,23927,23932,23935,23938,23942,23945,23948,23954,23957,23975,23979,23983,23986,23991,23994,23998,24001,24014,24017,24021,24024,24027,24030,24055,24058,24067,24078,24093,24125,24129,24136,24144,24148,24151,24154,24159,24163,24166,24169,24174,24177,24181,24184,24187,24192,24195,24199,24204,24208,24275,24279,24282,24285,24288,24291,24294,24300,24321,24324,24338,24347,24351,24354,24357,24362,24365,24370,24375,24378,24381,24386,24391,24394,24399,24404,24407,24412,24417,24420,24423,24428,24431,24436],[10,23869,23865],{"id":23870},"_1强化学习基本认识",[14,23872,23874],{"id":23873},"_11什么是强化学习","1.1.什么是强化学习",[19,23876,23877],{},"强化学习有两部分组成：智能体和环境；",[19,23879,23880],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23882,23883],{},"强化学习与监督学习的区别:",[579,23885,23886,23889,23892,23895],{},[582,23887,23888],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[582,23890,23891],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[582,23893,23894],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[582,23896,23897,23898,23901],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[770,23899,23900],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23903,23904],{},[519,23905],{"alt":31,"src":23906},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23908,23909],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23911,23912],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23914,23915],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23917,23918],{},"获取奖励",[19,23920,23921],{},[519,23922],{"alt":31,"src":23923},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23925,23926],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23928,23929],{},[519,23930],{"alt":31,"src":23931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23933,23934],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23936,23937],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23939,23941],{"id":23940},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23943,23944],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23946,23947],{},"具身智能中的应用",[19,23949,23950,23953],{},[770,23951,23952],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23955,23956],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23958,23959,23960,23963,23964,23967,23968,23971,23972],{},"机器人是",[770,23961,23962],{},"躯体","，深度学习是",[770,23965,23966],{},"神经元****网络","，VLA是",[770,23969,23970],{},"通用的行为逻辑","，而强化学习是",[770,23973,23974],{},"教练",[14,23976,23978],{"id":23977},"_13序列决策","1.3.序列决策",[596,23980,23982],{"id":23981},"_131智能体与环境","1.3.1.智能体与环境",[19,23984,23985],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23987,23988],{},[519,23989],{"alt":31,"src":23990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23992,23993],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[596,23995,23997],{"id":23996},"_132奖励","1.3.2.奖励",[19,23999,24000],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24002,24003,24004,24013],{},"取某个策略的表现如何。强化学习的目的就是",[770,24005,24006,24007,24012],{},"最大化",[770,24008,24009],{},[770,24010,24011],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24015,24016],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[596,24018,24020],{"id":24019},"_133序列决策","1.3.3.序列决策",[19,24022,24023],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24025,24026],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24028,24029],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24031,24032,24036,24037,24039,24040,24042,24043,24045,24046,14275,24049,14275,24052],{},[24033,24034,24035],"em",{},"Ht"," = ",[24033,24038,1209],{},"1*, a",[24033,24041,54],{},", r",[24033,24044,54],{},", . . . ,* ",[24033,24047,24048],{},"ot",[24033,24050,24051],{},", at ,",[24033,24053,24054],{},"rt",[19,24056,24057],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24059,24060,24036,24063,2138,24065,231],{},[24033,24061,24062],{},"st",[24033,24064,677],{},[24033,24066,24035],{},[19,24068,24069,24070,24073,24074,24077],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[770,24071,24072],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[770,24075,24076],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24079,24080,24081,24084,24085,24088,24089,24092],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[770,24082,24083],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[770,24086,24087],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24033,24090,24091],{},"S, A, T, R, Ω, O, γ",")。",[19,24094,24095,24096,24098,24099,24101,24102,345,24104,24107,24108,24110,24111,345,24114,24117,24118,24120,24121,24124],{},"其中 ",[24033,24097,1302],{}," 表示状态空间，为隐变量，",[24033,24100,852],{}," 为动作空间，",[24033,24103,1327],{},[24033,24105,24106],{},"s ′ |s, a",") 为状态转移概率，",[24033,24109,1277],{}," 为奖励函数，",[24033,24112,24113],{},"Ω",[24033,24115,24116],{},"o|s, a",") 为观测概率，",[24033,24119,1203],{}," 为观测空间，",[24033,24122,24123],{},"γ"," 为折扣因子。",[14,24126,24128],{"id":24127},"_14动作空间","1.4.动作空间",[19,24130,24131,24132,24135],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[770,24133,24134],{},"动作空间"," ，动作空间分为:",[579,24137,24138,24141],{},[582,24139,24140],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[582,24142,24143],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24145,24147],{"id":24146},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24149,24150],{},"由策略、价值函数、模型三部分组成",[19,24152,24153],{},"这三者组成马尔可夫决策过程",[19,24155,24156],{},[519,24157],{"alt":31,"src":24158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[596,24160,24162],{"id":24161},"_151策略","1.5.1.策略",[19,24164,24165],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24167,24168],{},"策略可分为两种：",[19,24170,24171],{},[519,24172],{"alt":31,"src":24173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24175,24176],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[596,24178,24180],{"id":24179},"_152价值函数","1.5.2.价值函数",[19,24182,24183],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24185,24186],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24188,24189],{},[519,24190],{"alt":31,"src":24191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24193,24194],{},"进入某个状态采取的最优动作可以通过Q函数得到",[596,24196,24198],{"id":24197},"_153模型","1.5.3.模型",[19,24200,24201],{},[519,24202],{"alt":31,"src":24203},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24205,24207],{"id":24206},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[758,24209,24210,24221],{},[761,24211,24212],{},[764,24213,24214,24218],{},[767,24215,24217],{"align":24216},"left","类型",[767,24219,24220],{"align":24216},"特点",[805,24222,24223,24233,24243,24253,24265],{},[764,24224,24225,24230],{},[810,24226,24227],{"align":24216},[770,24228,24229],{},"基于价值的智能体",[810,24231,24232],{"align":24216},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[764,24234,24235,24240],{},[810,24236,24237],{"align":24216},[770,24238,24239],{},"基于策略的智能体",[810,24241,24242],{"align":24216},"直接学习策略，没有学习价值函数",[764,24244,24245,24250],{},[810,24246,24247],{"align":24216},[770,24248,24249],{},"演员-评论员智能体",[810,24251,24252],{"align":24216},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[764,24254,24255,24260],{},[810,24256,24257],{"align":24216},[770,24258,24259],{},"有模型强化学习智能体",[810,24261,24262],{"align":24216},[519,24263],{"alt":31,"src":24264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[764,24266,24267,24272],{},[810,24268,24269],{"align":24216},[770,24270,24271],{},"免模型强化学习智能体",[810,24273,24274],{"align":24216},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24276,24278],{"id":24277},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24280,24281],{},"学习和规划是序列决策的两个基本问题",[19,24283,24284],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24286,24287],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24289,24290],{},"强化学习用到的库：Gym",[19,24292,24293],{},"Gym可以检验强化学习算法的优劣",[19,24295,24296,24299],{},[770,24297,24298],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,24301,24305],{"className":24302,"code":24303,"language":24304,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[33,24306,24307],{"__ignoreMap":31},[36,24308,24309,24312,24315,24318],{"class":38,"line":39},[36,24310,24311],{"class":2443},"pip",[36,24313,24314],{"class":405}," install",[36,24316,24317],{"class":405}," gym==",[36,24319,24320],{"class":53},"0.25.2\n",[19,24322,24323],{},"显示图形界面需要",[26,24325,24327],{"className":24302,"code":24326,"language":24304,"meta":31,"style":31},"pip install pygame\n",[33,24328,24329],{"__ignoreMap":31},[36,24330,24331,24333,24335],{"class":38,"line":39},[36,24332,24311],{"class":2443},[36,24334,24314],{"class":405},[36,24336,24337],{"class":405}," pygame\n",[19,24339,24340,24341],{},"有关Gym库的相关文档介绍：",[43,24342,24346],{"href":24343,"rel":24344},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24345],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24348,24350],{"id":24349},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24352,24353],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24355,24356],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24358,24359],{},[519,24360],{"alt":31,"src":24361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24363,24364],{},"折扣率需要自己来设定",[19,24366,24367],{},[519,24368],{"alt":31,"src":24369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[579,24371,24372],{},[582,24373,24374],{},"状态转移函数：",[19,24376,24377],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24379,24380],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24382,24383],{},[519,24384],{"alt":31,"src":24385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[579,24387,24388],{"start":66},[582,24389,24390],{},"动作价值函数：",[19,24392,24393],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24395,24396],{},[519,24397],{"alt":31,"src":24398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[579,24400,24401],{"start":73},[582,24402,24403],{},"最优动作价值函数：",[19,24405,24406],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24408,24409],{},[519,24410],{"alt":31,"src":24411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[579,24413,24414],{"start":79},[582,24415,24416],{},"状态价值函数:",[19,24418,24419],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24421,24422],{},"它衡量的是“一个具体动作”的长期价值",[19,24424,24425],{},[519,24426],{"alt":31,"src":24427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24429,24430],{},"几个价值函数之间的比较：",[19,24432,24433],{},[519,24434],{"alt":31,"src":24435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[539,24437,24438],{},"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":31,"searchDepth":66,"depth":66,"links":24440},[24441,24442,24443,24448,24449,24454,24455,24456],{"id":23873,"depth":66,"text":23874},{"id":23940,"depth":66,"text":23941},{"id":23977,"depth":66,"text":23978,"children":24444},[24445,24446,24447],{"id":23981,"depth":73,"text":23982},{"id":23996,"depth":73,"text":23997},{"id":24019,"depth":73,"text":24020},{"id":24127,"depth":66,"text":24128},{"id":24146,"depth":66,"text":24147,"children":24450},[24451,24452,24453],{"id":24161,"depth":73,"text":24162},{"id":24179,"depth":73,"text":24180},{"id":24197,"depth":73,"text":24198},{"id":24206,"depth":66,"text":24207},{"id":24277,"depth":66,"text":24278},{"id":24349,"depth":66,"text":24350},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23865,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24463,"title":24464,"body":24465,"description":24472,"extension":551,"meta":24483,"navigation":553,"path":24484,"seo":24485,"stem":24486,"__hash__":24487},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24466,"toc":24481},[24467,24470,24473,24478],[10,24468,24464],{"id":24469},"_2马尔可夫决策过程",[19,24471,24472],{},"这是强化学习的基本框架",[19,24474,24475],{},[519,24476],{"alt":31,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24479,24480],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":66,"depth":66,"links":24482},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24464,"description":24472},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24489,"title":24490,"body":24491,"description":31,"extension":551,"meta":24607,"navigation":553,"path":24608,"seo":24609,"stem":24610,"__hash__":24611},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24492,"toc":24602},[24493,24496,24500,24503,24508,24513,24516,24521,24524,24529,24532,24536,24541,24544,24549,24554,24559,24562,24566,24571,24574,24579,24584,24589,24594,24597],[10,24494,24490],{"id":24495},"_3动作价值函数",[14,24497,24499],{"id":24498},"_31dqn","3.1.DQN",[19,24501,24502],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24504,24505],{},[519,24506],{"alt":31,"src":24507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24509,24510],{},[519,24511],{"alt":31,"src":24512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24514,24515],{},"DQN算法的描述：",[19,24517,24518],{},[519,24519],{"alt":31,"src":24520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24522,24523],{},"这里的Dense指的是全连接层",[19,24525,24526],{},[519,24527],{"alt":31,"src":24528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24530,24531],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24533,24535],{"id":24534},"_32dqn的举例","3.2.DQN的举例",[19,24537,24538],{},[519,24539],{"alt":31,"src":24540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24542,24543],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24545,24546],{},[519,24547],{"alt":31,"src":24548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24550,24551],{},[519,24552],{"alt":31,"src":24553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24555,24556],{},[519,24557],{"alt":31,"src":24558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24560,24561],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24563,24565],{"id":24564},"_33td算法","3.3.TD算法",[19,24567,24568],{},[519,24569],{"alt":31,"src":24570},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24572,24573],{},"强化学习TD算法公式的粗略解释：",[19,24575,24576],{},[519,24577],{"alt":31,"src":24578},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24580,24581],{},[519,24582],{"alt":31,"src":24583},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24585,24586],{},[519,24587],{"alt":31,"src":24588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24590,24591],{},[519,24592],{"alt":31,"src":24593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24595,24596],{},"TD算法总结：",[19,24598,24599],{},[519,24600],{"alt":31,"src":24601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":66,"depth":66,"links":24603},[24604,24605,24606],{"id":24498,"depth":66,"text":24499},{"id":24534,"depth":66,"text":24535},{"id":24564,"depth":66,"text":24565},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24490,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24613,"title":24614,"body":24615,"description":31,"extension":551,"meta":24848,"navigation":553,"path":24849,"seo":24850,"stem":24851,"__hash__":24852},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24616,"toc":24844},[24617,24620,24624,24627,24630,24635,24640,24643,24648,24653,24656,24661,24664,24669,24672,24677,24680,24685,24688,24693,24698,24701,24706,24709,24712,24717,24720,24725,24730,24734,24737,24740,24745,24750,24753,24758,24763,24766,24771,24774,24777,24782,24785,24790,24793,24798,24803,24806,24811,24816,24819,24824,24827,24832,24835],[10,24618,24614],{"id":24619},"_4策略学习",[14,24621,24623],{"id":24622},"_41概念描述","4.1.概念描述",[19,24625,24626],{},"用神经网络（策略网络）近似策略函数",[19,24628,24629],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24631,24632],{},[519,24633],{"alt":31,"src":24634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24636,24637],{},[519,24638],{"alt":31,"src":24639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24641,24642],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24644,24645],{},[519,24646],{"alt":31,"src":24647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24649,24650],{},[519,24651],{"alt":31,"src":24652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24654,24655],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24657,24658],{},[519,24659],{"alt":31,"src":24660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24662,24663],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24665,24666],{},[519,24667],{"alt":31,"src":24668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24670,24671],{},"改进theta要用到策略梯度算法",[19,24673,24674],{},[519,24675],{"alt":31,"src":24676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24678,24679],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24681,24682],{},[519,24683],{"alt":31,"src":24684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24686,24687],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24689,24690],{},[519,24691],{"alt":31,"src":24692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24694,24695],{},[519,24696],{"alt":31,"src":24697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24699,24700],{},"梯度公式总结：",[19,24702,24703],{},[519,24704],{"alt":31,"src":24705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24707,24708],{},"两个公式的分别应用场景：",[19,24710,24711],{},"对于离散的动作：",[19,24713,24714],{},[519,24715],{"alt":31,"src":24716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24718,24719],{},"对于连续的动作：",[19,24721,24722],{},[519,24723],{"alt":31,"src":24724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24726,24727],{},[519,24728],{"alt":31,"src":24729},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24731,24733],{"id":24732},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24735,24736],{},"使用蒙特卡洛来近似计算策略梯度",[19,24738,24739],{},"蒙特卡洛法的解释如下：",[19,24741,24742],{},[519,24743],{"alt":31,"src":24744},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24746,24747],{},[519,24748],{"alt":31,"src":24749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24751,24752],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[579,24754,24755],{},[582,24756,24757],{},"方法一：reinforce算法",[19,24759,24760],{},[519,24761],{"alt":31,"src":24762},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24764,24765],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[579,24767,24768],{"start":66},[582,24769,24770],{},"方法二：actor-critic算法",[19,24772,24773],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24775,24776],{},"两个网络的构建：",[19,24778,24779],{},[519,24780],{"alt":31,"src":24781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24783,24784],{},"actor网路：",[19,24786,24787],{},[519,24788],{"alt":31,"src":24789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24791,24792],{},"critic网络",[19,24794,24795],{},[519,24796],{"alt":31,"src":24797},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[579,24799,24800],{"start":73},[582,24801,24802],{},"网络的训练",[19,24804,24805],{},"网络描述",[19,24807,24808],{},[519,24809],{"alt":31,"src":24810},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24812,24813],{},[519,24814],{"alt":31,"src":24815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24817,24818],{},"TD算法更新梯度：",[19,24820,24821],{},[519,24822],{"alt":31,"src":24823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24825,24826],{},"策略网络更新梯度：",[19,24828,24829],{},[519,24830],{"alt":31,"src":24831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24833,24834],{},"训练整个流程的具体描述：",[19,24836,24837,24840,24841],{},[519,24838],{"alt":31,"src":24839},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[519,24842],{"alt":31,"src":24843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":66,"depth":66,"links":24845},[24846,24847],{"id":24622,"depth":66,"text":24623},{"id":24732,"depth":66,"text":24733},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24614,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24854,"title":24855,"body":24856,"description":24863,"extension":551,"meta":24913,"navigation":553,"path":24914,"seo":24915,"stem":24916,"__hash__":24917},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24857,"toc":24909},[24858,24861,24864,24868,24871,24876,24880,24883,24888,24891,24896,24901,24904],[10,24859,24855],{"id":24860},"_5alphago算法",[19,24862,24863],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24865,24867],{"id":24866},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24869,24870],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24872,24873],{},[519,24874],{"alt":31,"src":24875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24877,24879],{"id":24878},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24881,24882],{},"采用强化学习的方式训练策略网络",[19,24884,24885],{},[519,24886],{"alt":31,"src":24887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24889,24890],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24892,24893],{},[519,24894],{"alt":31,"src":24895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24897,24898],{},[519,24899],{"alt":31,"src":24900},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24902,24903],{},"强化学习训练策略网络的总结：",[19,24905,24906],{},[519,24907],{"alt":31,"src":24908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":66,"depth":66,"links":24910},[24911,24912],{"id":24866,"depth":66,"text":24867},{"id":24878,"depth":66,"text":24879},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24855,"description":24863},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24919,"title":24920,"body":24921,"description":24928,"extension":551,"meta":24931,"navigation":553,"path":24932,"seo":24933,"stem":24934,"__hash__":24935},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24922,"toc":24929},[24923,24926],[10,24924,24920],{"id":24925},"_6价值网络",[19,24927,24928],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":66,"depth":66,"links":24930},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24920,"description":24928},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24937,"title":24938,"body":24939,"description":24943,"extension":551,"meta":24944,"navigation":553,"path":24945,"seo":24946,"stem":24947,"__hash__":24948},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24940,"toc":24941},[],{"title":31,"searchDepth":66,"depth":66,"links":24942},[],"记录自己的强化学习笔记。",{"category":23858},"\u002Fwiki\u002F2025-12-04",{"title":24938,"description":24943},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24950,"title":24951,"body":24952,"description":550,"extension":551,"meta":24991,"navigation":553,"path":24992,"seo":24993,"stem":24994,"__hash__":24995},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24953,"toc":24989},[24954,24957,24960,24966,24969,24975,24978,24983,24986],[10,24955,24951],{"id":24956},"_1-项目概览与官方资源",[19,24958,24959],{},"官方文档：",[19,24961,24962],{},[43,24963,24964],{"href":24964,"rel":24965},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24345],[19,24967,24968],{},"官方代码仓库：",[19,24970,24971],{},[43,24972,24973],{"href":24973,"rel":24974},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24345],[19,24976,24977],{},"复现大体流程：",[19,24979,24980],{},[519,24981],{"alt":31,"src":24982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24984,24985],{},"本教程的目标是打通这条链路：",[19,24987,24988],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":66,"depth":66,"links":24990},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24951,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24997,"title":24998,"body":24999,"description":550,"extension":551,"meta":25115,"navigation":553,"path":25116,"seo":25117,"stem":25118,"__hash__":25119},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25000,"toc":25110},[25001,25004,25008,25011,25018,25022,25025,25034,25044,25048,25078,25081,25107],[10,25002,24998],{"id":25003},"_2-环境准备与设备连接",[14,25005,25007],{"id":25006},"_21-系统与环境","2.1 系统与环境",[19,25009,25010],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25012,25013,25014,25017],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,25015,25016],{},"lerobot"," 依赖。",[14,25019,25021],{"id":25020},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25023,25024],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,25026,25028],{"className":24302,"code":25027,"language":24304,"meta":31,"style":31},"lerobot-find-out\n",[33,25029,25030],{"__ignoreMap":31},[36,25031,25032],{"class":38,"line":39},[36,25033,25027],{"class":2443},[19,25035,25036,25037,833,25040,25043],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,25038,25039],{},"\u002Fdev\u002FttyACM0",[33,25041,25042],{},"\u002Fdev\u002FttyACM1","）。",[14,25045,25047],{"id":25046},"_23-串口授权","2.3 串口授权",[26,25049,25051],{"className":24302,"code":25050,"language":24304,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,25052,25053,25067],{"__ignoreMap":31},[36,25054,25055,25058,25061,25064],{"class":38,"line":39},[36,25056,25057],{"class":2443},"sudo",[36,25059,25060],{"class":405}," chmod",[36,25062,25063],{"class":53}," 666",[36,25065,25066],{"class":405}," \u002Fdev\u002FttyACM0\n",[36,25068,25069,25071,25073,25075],{"class":38,"line":66},[36,25070,25057],{"class":2443},[36,25072,25060],{"class":405},[36,25074,25063],{"class":53},[36,25076,25077],{"class":405}," \u002Fdev\u002FttyACM1\n",[19,25079,25080],{},"说明：",[1620,25082,25083,25088,25094,25104],{},[582,25084,25085,25087],{},[33,25086,25057],{},"：以 root 权限执行命令。",[582,25089,25090,25093],{},[33,25091,25092],{},"chmod","：修改设备节点权限。",[582,25095,25096,25099,25100,25103],{},[33,25097,25098],{},"666","：",[33,25101,25102],{},"rw-rw-rw-","，所有用户可读写。",[582,25105,25106],{},"串口号必须替换为你机器上的真实端口。",[539,25108,25109],{},"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":31,"searchDepth":66,"depth":66,"links":25111},[25112,25113,25114],{"id":25006,"depth":66,"text":25007},{"id":25020,"depth":66,"text":25021},{"id":25046,"depth":66,"text":25047},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24998,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25121,"title":25122,"body":25123,"description":550,"extension":551,"meta":25284,"navigation":553,"path":25285,"seo":25286,"stem":25287,"__hash__":25288},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25124,"toc":25280},[25125,25129,25133,25139,25142,25199,25202,25206,25209,25277],[10,25126,25128],{"id":25127},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25130,25132],{"id":25131},"_31-配置电机-id","3.1 配置电机 ID",[19,25134,25135,25136,25138],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,25137,54],{},"，需要改成机械臂链路里不冲突的编号。",[19,25140,25141],{},"方式一：用 LeRobot 命令逐步写入。",[26,25143,25145],{"className":24302,"code":25144,"language":24304,"meta":31,"style":31},"# 主臂舵机配置 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",[33,25146,25147,25152,25160,25167,25172,25176,25181,25187,25194],{"__ignoreMap":31},[36,25148,25149],{"class":38,"line":39},[36,25150,25151],{"class":69},"# 主臂舵机配置 ID\n",[36,25153,25154,25157],{"class":38,"line":66},[36,25155,25156],{"class":2443},"lerobot-setup-motors",[36,25158,25159],{"class":53}," \\\n",[36,25161,25162,25165],{"class":38,"line":73},[36,25163,25164],{"class":53},"  --teleop.type=so101_leader",[36,25166,25159],{"class":53},[36,25168,25169],{"class":38,"line":79},[36,25170,25171],{"class":53},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,25173,25174],{"class":38,"line":85},[36,25175,2880],{"emptyLinePlaceholder":553},[36,25177,25178],{"class":38,"line":419},[36,25179,25180],{"class":69},"# 从臂舵机配置 ID\n",[36,25182,25183,25185],{"class":38,"line":425},[36,25184,25156],{"class":2443},[36,25186,25159],{"class":53},[36,25188,25189,25192],{"class":38,"line":431},[36,25190,25191],{"class":53},"  --robot.type=so101_follower",[36,25193,25159],{"class":53},[36,25195,25196],{"class":38,"line":437},[36,25197,25198],{"class":53},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25200,25201],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25203,25205],{"id":25204},"_32-机械臂校准","3.2 机械臂校准",[19,25207,25208],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,25210,25212],{"className":24302,"code":25211,"language":24304,"meta":31,"style":31},"# 主臂校准\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",[33,25213,25214,25219,25226,25232,25239,25244,25248,25253,25259,25265,25272],{"__ignoreMap":31},[36,25215,25216],{"class":38,"line":39},[36,25217,25218],{"class":69},"# 主臂校准\n",[36,25220,25221,25224],{"class":38,"line":66},[36,25222,25223],{"class":2443},"lerobot-calibrate",[36,25225,25159],{"class":53},[36,25227,25228,25230],{"class":38,"line":73},[36,25229,25164],{"class":53},[36,25231,25159],{"class":53},[36,25233,25234,25237],{"class":38,"line":79},[36,25235,25236],{"class":53},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,25238,25159],{"class":53},[36,25240,25241],{"class":38,"line":85},[36,25242,25243],{"class":53},"  --teleop.id=my_awesome_leader_arm\n",[36,25245,25246],{"class":38,"line":419},[36,25247,2880],{"emptyLinePlaceholder":553},[36,25249,25250],{"class":38,"line":425},[36,25251,25252],{"class":69},"# 从臂校准\n",[36,25254,25255,25257],{"class":38,"line":431},[36,25256,25223],{"class":2443},[36,25258,25159],{"class":53},[36,25260,25261,25263],{"class":38,"line":437},[36,25262,25191],{"class":53},[36,25264,25159],{"class":53},[36,25266,25267,25270],{"class":38,"line":443},[36,25268,25269],{"class":53},"  --robot.port=\u002Fdev\u002FttyACM1",[36,25271,25159],{"class":53},[36,25273,25274],{"class":38,"line":2092},[36,25275,25276],{"class":53},"  --robot.id=my_awesome_follower_arm\n",[539,25278,25279],{},"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":31,"searchDepth":66,"depth":66,"links":25281},[25282,25283],{"id":25131,"depth":66,"text":25132},{"id":25204,"depth":66,"text":25205},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25122,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25290,"title":25291,"body":25292,"description":550,"extension":551,"meta":25483,"navigation":553,"path":25484,"seo":25485,"stem":25486,"__hash__":25487},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25293,"toc":25479},[25294,25297,25301,25348,25352,25365,25428,25431,25476],[10,25295,25291],{"id":25296},"_4-遥操与相机接入",[14,25298,25300],{"id":25299},"_41-不带相机遥操","4.1 不带相机遥操",[26,25302,25304],{"className":24302,"code":25303,"language":24304,"meta":31,"style":31},"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",[33,25305,25306,25313,25319,25325,25332,25338,25344],{"__ignoreMap":31},[36,25307,25308,25311],{"class":38,"line":39},[36,25309,25310],{"class":2443},"lerobot-teleoperate",[36,25312,25159],{"class":53},[36,25314,25315,25317],{"class":38,"line":66},[36,25316,25191],{"class":53},[36,25318,25159],{"class":53},[36,25320,25321,25323],{"class":38,"line":73},[36,25322,25269],{"class":53},[36,25324,25159],{"class":53},[36,25326,25327,25330],{"class":38,"line":79},[36,25328,25329],{"class":53},"  --robot.id=my_awesome_follower_arm",[36,25331,25159],{"class":53},[36,25333,25334,25336],{"class":38,"line":85},[36,25335,25164],{"class":53},[36,25337,25159],{"class":53},[36,25339,25340,25342],{"class":38,"line":419},[36,25341,25236],{"class":53},[36,25343,25159],{"class":53},[36,25345,25346],{"class":38,"line":425},[36,25347,25243],{"class":53},[14,25349,25351],{"id":25350},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,25353,25355],{"className":24302,"code":25354,"language":24304,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,25356,25357],{"__ignoreMap":31},[36,25358,25359,25362],{"class":38,"line":39},[36,25360,25361],{"class":2443},"lerobot-find-cameras",[36,25363,25364],{"class":405}," opencv\n",[26,25366,25368],{"className":24302,"code":25367,"language":24304,"meta":31,"style":31},"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",[33,25369,25370,25376,25382,25388,25394,25404,25410,25416,25423],{"__ignoreMap":31},[36,25371,25372,25374],{"class":38,"line":39},[36,25373,25310],{"class":2443},[36,25375,25159],{"class":53},[36,25377,25378,25380],{"class":38,"line":66},[36,25379,25191],{"class":53},[36,25381,25159],{"class":53},[36,25383,25384,25386],{"class":38,"line":73},[36,25385,25269],{"class":53},[36,25387,25159],{"class":53},[36,25389,25390,25392],{"class":38,"line":79},[36,25391,25329],{"class":53},[36,25393,25159],{"class":53},[36,25395,25396,25399,25402],{"class":38,"line":85},[36,25397,25398],{"class":53},"  --robot.cameras=",[36,25400,25401],{"class":405},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,25403,25159],{"class":53},[36,25405,25406,25408],{"class":38,"line":419},[36,25407,25164],{"class":53},[36,25409,25159],{"class":53},[36,25411,25412,25414],{"class":38,"line":425},[36,25413,25236],{"class":53},[36,25415,25159],{"class":53},[36,25417,25418,25421],{"class":38,"line":431},[36,25419,25420],{"class":53},"  --teleop.id=my_awesome_leader_arm",[36,25422,25159],{"class":53},[36,25424,25425],{"class":38,"line":437},[36,25426,25427],{"class":53},"  --display_data=true\n",[19,25429,25430],{},"相机参数说明：",[1620,25432,25433,25439,25445,25454,25464,25470],{},[582,25434,25435,25438],{},[33,25436,25437],{},"front","：相机名称。",[582,25440,25441,25444],{},[33,25442,25443],{},"type: opencv","：相机驱动类型。",[582,25446,25447,25450,25451,25043],{},[33,25448,25449],{},"index_or_path","：设备编号或设备路径（如 ",[33,25452,25453],{},"\u002Fdev\u002Fvideo4",[582,25455,25456,25459,25460,25463],{},[33,25457,25458],{},"width"," \u002F ",[33,25461,25462],{},"height","：图像分辨率。",[582,25465,25466,25469],{},[33,25467,25468],{},"fps","：采样帧率。",[582,25471,25472,25475],{},[33,25473,25474],{},"--display_data=true","：启用实时可视化。",[539,25477,25478],{},"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":31,"searchDepth":66,"depth":66,"links":25480},[25481,25482],{"id":25299,"depth":66,"text":25300},{"id":25350,"depth":66,"text":25351},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25291,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25489,"title":25490,"body":25491,"description":550,"extension":551,"meta":25663,"navigation":553,"path":25664,"seo":25665,"stem":25666,"__hash__":25667},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25492,"toc":25658},[25493,25497,25501,25506,25511,25514,25556,25562,25566,25615,25620,25624,25627,25635,25640,25645,25650,25655],[10,25494,25496],{"id":25495},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25498,25500],{"id":25499},"_51-生成访问令牌","5.1 生成访问令牌",[19,25502,25503],{},[519,25504],{"alt":31,"src":25505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25507,25508],{},[519,25509],{"alt":31,"src":25510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25512,25513],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,25515,25517],{"className":24302,"code":25516,"language":24304,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,25518,25519,25532],{"__ignoreMap":31},[36,25520,25521,25524,25527,25529],{"class":38,"line":39},[36,25522,25523],{"class":46},"export",[36,25525,25526],{"class":42}," HF_TOKEN",[36,25528,47],{"class":46},[36,25530,25531],{"class":405},"\"your_huggingface_token\"\n",[36,25533,25534,25537,25540,25543,25546,25548,25551,25553],{"class":38,"line":66},[36,25535,25536],{"class":2443},"hf",[36,25538,25539],{"class":405}," auth",[36,25541,25542],{"class":405}," login",[36,25544,25545],{"class":53}," --token",[36,25547,10204],{"class":405},[36,25549,25550],{"class":42},"$HF_TOKEN",[36,25552,870],{"class":405},[36,25554,25555],{"class":53}," --add-to-git-credential\n",[19,25557,25558,25561],{},[33,25559,25560],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25563,25565],{"id":25564},"_52-验证登录","5.2 验证登录",[26,25567,25569],{"className":24302,"code":25568,"language":24304,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,25570,25571,25602],{"__ignoreMap":31},[36,25572,25573,25576,25578,25581,25583,25585,25588,25591,25594,25597,25600],{"class":38,"line":39},[36,25574,25575],{"class":42},"HF_USER",[36,25577,47],{"class":46},[36,25579,25580],{"class":42},"$(",[36,25582,25536],{"class":2443},[36,25584,25539],{"class":405},[36,25586,25587],{"class":405}," whoami",[36,25589,25590],{"class":46}," |",[36,25592,25593],{"class":2443}," head",[36,25595,25596],{"class":53}," -n",[36,25598,25599],{"class":53}," 1",[36,25601,63],{"class":42},[36,25603,25604,25607,25609,25612],{"class":38,"line":66},[36,25605,25606],{"class":53},"echo",[36,25608,10204],{"class":405},[36,25610,25611],{"class":42},"$HF_USER",[36,25613,25614],{"class":405},"\"\n",[19,25616,25617],{},[519,25618],{"alt":31,"src":25619},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25621,25623],{"id":25622},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25625,25626],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1620,25628,25629,25632],{},[582,25630,25631],{},"Dataset Repo（用于上传演示数据）",[582,25633,25634],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25636,25637],{},[519,25638],{"alt":31,"src":25639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25641,25642],{},[519,25643],{"alt":31,"src":25644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25646,25647],{},[519,25648],{"alt":31,"src":25649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25651,25652],{},[519,25653],{"alt":31,"src":25654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[539,25656,25657],{},"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":31,"searchDepth":66,"depth":66,"links":25659},[25660,25661,25662],{"id":25499,"depth":66,"text":25500},{"id":25564,"depth":66,"text":25565},{"id":25622,"depth":66,"text":25623},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25490,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25669,"title":25670,"body":25671,"description":550,"extension":551,"meta":25868,"navigation":553,"path":25869,"seo":25870,"stem":25871,"__hash__":25872},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25672,"toc":25863},[25673,25677,25681,25777,25785,25790,25794,25810,25813,25817,25860],[10,25674,25676],{"id":25675},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25678,25680],{"id":25679},"_61-录制示教数据","6.1 录制示教数据",[26,25682,25684],{"className":24302,"code":25683,"language":24304,"meta":31,"style":31},"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",[33,25685,25686,25693,25699,25705,25711,25720,25726,25732,25738,25745,25755,25762,25772],{"__ignoreMap":31},[36,25687,25688,25691],{"class":38,"line":39},[36,25689,25690],{"class":2443},"lerobot-record",[36,25692,25159],{"class":53},[36,25694,25695,25697],{"class":38,"line":66},[36,25696,25191],{"class":53},[36,25698,25159],{"class":53},[36,25700,25701,25703],{"class":38,"line":73},[36,25702,25269],{"class":53},[36,25704,25159],{"class":53},[36,25706,25707,25709],{"class":38,"line":79},[36,25708,25329],{"class":53},[36,25710,25159],{"class":53},[36,25712,25713,25715,25718],{"class":38,"line":85},[36,25714,25398],{"class":53},[36,25716,25717],{"class":405},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,25719,25159],{"class":53},[36,25721,25722,25724],{"class":38,"line":419},[36,25723,25164],{"class":53},[36,25725,25159],{"class":53},[36,25727,25728,25730],{"class":38,"line":425},[36,25729,25236],{"class":53},[36,25731,25159],{"class":53},[36,25733,25734,25736],{"class":38,"line":431},[36,25735,25420],{"class":53},[36,25737,25159],{"class":53},[36,25739,25740,25743],{"class":38,"line":437},[36,25741,25742],{"class":53},"  --display_data=true",[36,25744,25159],{"class":53},[36,25746,25747,25750,25753],{"class":38,"line":443},[36,25748,25749],{"class":53},"  --dataset.repo_id=",[36,25751,25752],{"class":405},"\"Embodied-AI-6\u002Fso101_test\"",[36,25754,25159],{"class":53},[36,25756,25757,25760],{"class":38,"line":2092},[36,25758,25759],{"class":53},"  --dataset.num_episodes=10",[36,25761,25159],{"class":53},[36,25763,25764,25767,25770],{"class":38,"line":2097},[36,25765,25766],{"class":53},"  --dataset.single_task=",[36,25768,25769],{"class":405},"\"Grab the green cube\"",[36,25771,25159],{"class":53},[36,25773,25774],{"class":38,"line":2103},[36,25775,25776],{"class":53},"  --resume=true\n",[1620,25778,25779],{},[582,25780,25781,25784],{},[33,25782,25783],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25786,25787],{},[519,25788],{"alt":31,"src":25789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25791,25793],{"id":25792},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,25795,25797],{"className":24302,"code":25796,"language":24304,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,25798,25799],{"__ignoreMap":31},[36,25800,25801,25804,25807],{"class":38,"line":39},[36,25802,25803],{"class":2443},"rm",[36,25805,25806],{"class":53}," -rf",[36,25808,25809],{"class":405}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25811,25812],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25814,25816],{"id":25815},"_63-回放指定-episode","6.3 回放指定 episode",[26,25818,25820],{"className":24302,"code":25819,"language":24304,"meta":31,"style":31},"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",[33,25821,25822,25829,25835,25841,25847,25855],{"__ignoreMap":31},[36,25823,25824,25827],{"class":38,"line":39},[36,25825,25826],{"class":2443},"lerobot-replay",[36,25828,25159],{"class":53},[36,25830,25831,25833],{"class":38,"line":66},[36,25832,25191],{"class":53},[36,25834,25159],{"class":53},[36,25836,25837,25839],{"class":38,"line":73},[36,25838,25269],{"class":53},[36,25840,25159],{"class":53},[36,25842,25843,25845],{"class":38,"line":79},[36,25844,25329],{"class":53},[36,25846,25159],{"class":53},[36,25848,25849,25851,25853],{"class":38,"line":85},[36,25850,25749],{"class":53},[36,25852,25752],{"class":405},[36,25854,25159],{"class":53},[36,25856,25857],{"class":38,"line":419},[36,25858,25859],{"class":53},"  --dataset.episode=0\n",[539,25861,25862],{},"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":31,"searchDepth":66,"depth":66,"links":25864},[25865,25866,25867],{"id":25679,"depth":66,"text":25680},{"id":25792,"depth":66,"text":25793},{"id":25815,"depth":66,"text":25816},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25670,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25874,"title":25875,"body":25876,"description":550,"extension":551,"meta":26004,"navigation":553,"path":26005,"seo":26006,"stem":26007,"__hash__":26008},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25877,"toc":26002},[25878,25882,25945,25948,25995,26000],[10,25879,25881],{"id":25880},"_7-act-模型训练","7. ACT 模型训练",[26,25883,25885],{"className":24302,"code":25884,"language":24304,"meta":31,"style":31},"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",[33,25886,25887,25894,25902,25909,25916,25923,25930,25937],{"__ignoreMap":31},[36,25888,25889,25892],{"class":38,"line":39},[36,25890,25891],{"class":2443},"lerobot-train",[36,25893,25159],{"class":53},[36,25895,25896,25898,25900],{"class":38,"line":66},[36,25897,25749],{"class":53},[36,25899,25752],{"class":405},[36,25901,25159],{"class":53},[36,25903,25904,25907],{"class":38,"line":73},[36,25905,25906],{"class":53},"  --policy.type=act",[36,25908,25159],{"class":53},[36,25910,25911,25914],{"class":38,"line":79},[36,25912,25913],{"class":53},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,25915,25159],{"class":53},[36,25917,25918,25921],{"class":38,"line":85},[36,25919,25920],{"class":53},"  --job_name=act_so101_test",[36,25922,25159],{"class":53},[36,25924,25925,25928],{"class":38,"line":419},[36,25926,25927],{"class":53},"  --policy.device=cuda",[36,25929,25159],{"class":53},[36,25931,25932,25935],{"class":38,"line":425},[36,25933,25934],{"class":53},"  --wandb.enable=false",[36,25936,25159],{"class":53},[36,25938,25939,25942],{"class":38,"line":431},[36,25940,25941],{"class":53},"  --policy.repo_id=",[36,25943,25944],{"class":405},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25946,25947],{},"参数说明：",[1620,25949,25950,25956,25962,25968,25974,25983,25989],{},[582,25951,25952,25955],{},[33,25953,25954],{},"--dataset.repo_id","：训练数据集仓库。",[582,25957,25958,25961],{},[33,25959,25960],{},"--policy.type=act","：策略模型类型为 ACT。",[582,25963,25964,25967],{},[33,25965,25966],{},"--output_dir","：本地训练输出目录。",[582,25969,25970,25973],{},[33,25971,25972],{},"--job_name","：训练任务名称。",[582,25975,25976,25979,25980,25043],{},[33,25977,25978],{},"--policy.device","：训练设备（如 ",[33,25981,25982],{},"cuda",[582,25984,25985,25988],{},[33,25986,25987],{},"--wandb.enable","：是否启用 WandB 可视化。",[582,25990,25991,25994],{},[33,25992,25993],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25996,25997],{},[519,25998],{"alt":31,"src":25999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[539,26001,25862],{},{"title":31,"searchDepth":66,"depth":66,"links":26003},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25875,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26010,"title":26011,"body":26012,"description":550,"extension":551,"meta":26099,"navigation":553,"path":26100,"seo":26101,"stem":26102,"__hash__":26103},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26013,"toc":26097},[26014,26017,26020,26087,26095],[10,26015,26011],{"id":26016},"_8-策略部署与自动采集",[19,26018,26019],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,26021,26023],{"className":24302,"code":26022,"language":24304,"meta":31,"style":31},"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",[33,26024,26025,26031,26037,26043,26051,26057,26064,26072,26080],{"__ignoreMap":31},[36,26026,26027,26029],{"class":38,"line":39},[36,26028,25690],{"class":2443},[36,26030,25159],{"class":53},[36,26032,26033,26035],{"class":38,"line":66},[36,26034,25191],{"class":53},[36,26036,25159],{"class":53},[36,26038,26039,26041],{"class":38,"line":73},[36,26040,25269],{"class":53},[36,26042,25159],{"class":53},[36,26044,26045,26047,26049],{"class":38,"line":79},[36,26046,25398],{"class":53},[36,26048,25717],{"class":405},[36,26050,25159],{"class":53},[36,26052,26053,26055],{"class":38,"line":85},[36,26054,25329],{"class":53},[36,26056,25159],{"class":53},[36,26058,26059,26062],{"class":38,"line":419},[36,26060,26061],{"class":53},"  --display_data=false",[36,26063,25159],{"class":53},[36,26065,26066,26068,26070],{"class":38,"line":425},[36,26067,25749],{"class":53},[36,26069,25752],{"class":405},[36,26071,25159],{"class":53},[36,26073,26074,26076,26078],{"class":38,"line":431},[36,26075,25766],{"class":53},[36,26077,25769],{"class":405},[36,26079,25159],{"class":53},[36,26081,26082,26085],{"class":38,"line":437},[36,26083,26084],{"class":53},"  --policy.path=",[36,26086,25944],{"class":405},[1620,26088,26089],{},[582,26090,26091,26094],{},[33,26092,26093],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[539,26096,25862],{},{"title":31,"searchDepth":66,"depth":66,"links":26098},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26011,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26105,"title":26106,"body":26107,"description":550,"extension":551,"meta":26136,"navigation":553,"path":26137,"seo":26138,"stem":26139,"__hash__":26140},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26108,"toc":26134},[26109,26113,26116,26122,26125,26131],[10,26110,26112],{"id":26111},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26114,26115],{},"项目地址：",[19,26117,26118],{},[43,26119,26120],{"href":26120,"rel":26121},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24345],[19,26123,26124],{},"参考教程：",[19,26126,26127],{},[43,26128,26129],{"href":26129,"rel":26130},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24345],[19,26132,26133],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":66,"depth":66,"links":26135},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26106,"description":550},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26142,"title":26143,"body":26144,"description":26148,"extension":551,"meta":26149,"navigation":553,"path":26150,"seo":26151,"stem":26152,"__hash__":26153},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26145,"toc":26146},[],{"title":31,"searchDepth":66,"depth":66,"links":26147},[],"act复现",{"category":23858},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26143,"description":26148},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26155,"title":26156,"body":26157,"description":31,"extension":551,"meta":26459,"navigation":553,"path":26460,"seo":26461,"stem":26462,"__hash__":26463},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26158,"toc":26451},[26159,26162,26166,26176,26183,26190,26193,26200,26203,26206,26210,26222,26226,26272,26275,26278,26281,26284,26287,26291,26329,26335,26339,26393,26398,26401,26404,26409,26412,26417,26420,26423,26427,26430,26433,26437],[10,26160,26156],{"id":26161},"_1简介",[596,26163,26165],{"id":26164},"_11什么是-docker","1.1什么是 Docker？",[19,26167,26168,26169,26172,26173],{},"Docker 是一个开源的 ",[770,26170,26171],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[770,26174,26175],{},"一次构建，到处运行。",[19,26177,26178,26179,26182],{},"“ ",[770,26180,26181],{},"一次构建，到处运行"," ”也就是说：",[579,26184,26185],{},[582,26186,26187],{},[770,26188,26189],{},"之前：",[19,26191,26192],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[579,26194,26195],{},[582,26196,26197],{},[770,26198,26199],{},"使用docker后：",[19,26201,26202],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26204,26205],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[596,26207,26209],{"id":26208},"_12它是怎么工作的","1.2.它是怎么工作的？",[1620,26211,26212,26215],{},[582,26213,26214],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[582,26216,26217,26218,26221],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[770,26219,26220],{},"无论在哪运行都一样稳定"," 。",[596,26223,26225],{"id":26224},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[758,26227,26228,26238],{},[761,26229,26230],{},[764,26231,26232,26235],{},[767,26233,26234],{"align":24216},"概念",[767,26236,26237],{"align":24216},"解释",[805,26239,26240,26248,26256,26264],{},[764,26241,26242,26245],{},[810,26243,26244],{"align":24216},"镜像",[810,26246,26247],{"align":24216},"Image，运行容器的模板，像是一个应用快照",[764,26249,26250,26253],{},[810,26251,26252],{"align":24216},"容器",[810,26254,26255],{"align":24216},"Container，运行中的镜像实例，有自己的文件系统、网络等",[764,26257,26258,26261],{},[810,26259,26260],{"align":24216},"Dockerfile",[810,26262,26263],{"align":24216},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[764,26265,26266,26269],{},[810,26267,26268],{"align":24216},"仓库",[810,26270,26271],{"align":24216},"Registry，存放镜像的地方，比如 Docker Hub",[19,26273,26274],{},"抽象化理解:",[19,26276,26277],{},"Docker镜像≈C++类",[19,26279,26280],{},"Docker容器≈C++类实例(即对象)",[19,26282,26283],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26285,26286],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[596,26288,26290],{"id":26289},"_14类比理解","1.4.类比理解",[758,26292,26293,26303],{},[761,26294,26295],{},[764,26296,26297,26300],{},[767,26298,26299],{"align":24216},"传统部署",[767,26301,26302],{"align":24216},"Docker部署",[805,26304,26305,26313,26321],{},[764,26306,26307,26310],{},[810,26308,26309],{"align":24216},"手动安装依赖、调试版本不一致问题",[810,26311,26312],{"align":24216},"一次打包环境和代码",[764,26314,26315,26318],{},[810,26316,26317],{"align":24216},"程序“裸奔”跑在系统上",[810,26319,26320],{"align":24216},"程序“穿着容器”隔离运行",[764,26322,26323,26326],{},[810,26324,26325],{"align":24216},"容易“在我电脑上能跑”",[810,26327,26328],{"align":24216},"保证“无论在哪都能跑”",[19,26330,26331,26332],{},"就像快递包裹： ",[770,26333,26334],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[596,26336,26338],{"id":26337},"_15docker-的核心优势","1.5.Docker 的核心优势",[758,26340,26341,26351],{},[761,26342,26343],{},[764,26344,26345,26348],{},[767,26346,26347],{"align":24216},"优势",[767,26349,26350],{"align":24216},"说明",[805,26352,26353,26361,26369,26377,26385],{},[764,26354,26355,26358],{},[810,26356,26357],{"align":24216},"轻量级",[810,26359,26360],{"align":24216},"基于系统内核共享，启动速度快，占资源少",[764,26362,26363,26366],{},[810,26364,26365],{"align":24216},"跨平台",[810,26367,26368],{"align":24216},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[764,26370,26371,26374],{},[810,26372,26373],{"align":24216},"易于迁移部署",[810,26375,26376],{"align":24216},"应用和环境一起封装，不怕依赖不一致",[764,26378,26379,26382],{},[810,26380,26381],{"align":24216},"易于版本控制",[810,26383,26384],{"align":24216},"镜像版本可控，支持回滚",[764,26386,26387,26390],{},[810,26388,26389],{"align":24216},"生态丰富",[810,26391,26392],{"align":24216},"Docker Hub 上有成千上万的现成镜像可用",[579,26394,26395],{},[582,26396,26397],{},"在Linux上可以几乎实现无性能损失。",[19,26399,26400],{},"docker里的发行版和本机共用Linux内核。",[19,26402,26403],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[579,26405,26406],{},[582,26407,26408],{},"可以快速部署在绝大多数Linux发行版",[19,26410,26411],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[579,26413,26414],{},[582,26415,26416],{},"配置环境简单",[19,26418,26419],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26421,26422],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[579,26424,26425],{},[582,26426,26389],{},[19,26428,26429],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26431,26432],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[596,26434,26436],{"id":26435},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1620,26438,26439,26442,26445,26448],{},[582,26440,26441],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[582,26443,26444],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[582,26446,26447],{},"微服务架构：每个服务一个容器，灵活组合",[582,26449,26450],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":66,"depth":66,"links":26452},[26453,26454,26455,26456,26457,26458],{"id":26164,"depth":73,"text":26165},{"id":26208,"depth":73,"text":26209},{"id":26224,"depth":73,"text":26225},{"id":26289,"depth":73,"text":26290},{"id":26337,"depth":73,"text":26338},{"id":26435,"depth":73,"text":26436},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26156,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26465,"title":26466,"body":26467,"description":31,"extension":551,"meta":27200,"navigation":553,"path":27201,"seo":27202,"stem":27203,"__hash__":27204},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26468,"toc":27195},[26469,26472,26476,26479,26482,26488,26494,26498,26507,26510,26567,26570,26621,26624,26707,26710,26747,26751,26762,26775,26782,26785,26865,26868,26918,26921,26944,26948,26955,26958,26974,26980,26983,26999,27005,27008,27024,27038,27044,27064,27070,27073,27085,27091,27094,27108,27114,27117,27137,27142,27145,27148,27152,27155,27158,27161,27168,27171,27174,27177,27182,27187,27192],[10,26470,26466],{"id":26471},"_2安装docker",[596,26473,26475],{"id":26474},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26477,26478],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26480,26481],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26483,26484],{},[43,26485,26486],{"href":26486,"rel":26487},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24345],[19,26489,26490],{},[43,26491,26492],{"href":26492,"rel":26493},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24345],[22478,26495,26497],{"id":26496},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26499,26500,26501,26506],{},"以下内容根据 ",[43,26502,26505],{"href":26503,"rel":26504},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24345],"官方文档"," 修改而来。",[19,26508,26509],{},"如果你过去安装过 docker，先删掉：",[26,26511,26513],{"className":24302,"code":26512,"language":24304,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[33,26514,26515],{"__ignoreMap":31},[36,26516,26517,26519,26522,26525,26528,26531,26534,26537,26540,26543,26546,26549,26552,26555,26558,26561,26564],{"class":38,"line":39},[36,26518,3505],{"class":46},[36,26520,26521],{"class":42}," pkg ",[36,26523,26524],{"class":46},"in",[36,26526,26527],{"class":405}," docker.io",[36,26529,26530],{"class":405}," docker-doc",[36,26532,26533],{"class":405}," docker-compose",[36,26535,26536],{"class":405}," docker-compose-v2",[36,26538,26539],{"class":405}," podman-docker",[36,26541,26542],{"class":405}," containerd",[36,26544,26545],{"class":405}," runc",[36,26547,26548],{"class":42},"; ",[36,26550,26551],{"class":46},"do",[36,26553,26554],{"class":2443}," sudo",[36,26556,26557],{"class":405}," apt-get",[36,26559,26560],{"class":405}," remove",[36,26562,26563],{"class":42}," $pkg; ",[36,26565,26566],{"class":46},"done\n",[19,26568,26569],{},"首先安装依赖和GPG：",[26,26571,26575],{"className":26572,"code":26573,"language":26574,"meta":31,"style":31},"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",[33,26576,26577,26582,26587,26592,26597,26602,26607,26611,26616],{"__ignoreMap":31},[36,26578,26579],{"class":38,"line":39},[36,26580,26581],{},"# Add Docker's official GPG key:\n",[36,26583,26584],{"class":38,"line":66},[36,26585,26586],{},"sudo apt-get update\n",[36,26588,26589],{"class":38,"line":73},[36,26590,26591],{},"sudo apt-get install ca-certificates curl\n",[36,26593,26594],{"class":38,"line":79},[36,26595,26596],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,26598,26599],{"class":38,"line":85},[36,26600,26601],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,26603,26604],{"class":38,"line":419},[36,26605,26606],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,26608,26609],{"class":38,"line":425},[36,26610,2880],{"emptyLinePlaceholder":553},[36,26612,26613],{"class":38,"line":431},[36,26614,26615],{},"# 如果上面这行报错就弄下面这行\n",[36,26617,26618],{"class":38,"line":437},[36,26619,26620],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26622,26623],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,26625,26627],{"className":24302,"code":26626,"language":24304,"meta":31,"style":31},"# 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",[33,26628,26629,26634,26640,26657,26690],{"__ignoreMap":31},[36,26630,26631],{"class":38,"line":39},[36,26632,26633],{"class":69},"# Add the repository to Apt sources:\n",[36,26635,26636,26638],{"class":38,"line":66},[36,26637,25606],{"class":53},[36,26639,25159],{"class":53},[36,26641,26642,26645,26648,26651,26654],{"class":38,"line":73},[36,26643,26644],{"class":405},"  \"deb [arch=$(",[36,26646,26647],{"class":2443},"dpkg",[36,26649,26650],{"class":53}," --print-architecture",[36,26652,26653],{"class":405},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,26655,26656],{"class":53},"\\\n",[36,26658,26659,26662,26664,26666,26669,26672,26674,26676,26679,26681,26683,26686,26688],{"class":38,"line":79},[36,26660,26661],{"class":405},"  \"",[36,26663,25580],{"class":42},[36,26665,1171],{"class":53},[36,26667,26668],{"class":405}," \u002Fetc\u002Fos-release",[36,26670,26671],{"class":42}," && ",[36,26673,25606],{"class":53},[36,26675,10204],{"class":405},[36,26677,26678],{"class":42},"$VERSION_CODENAME",[36,26680,870],{"class":405},[36,26682,231],{"class":42},[36,26684,26685],{"class":405},"\" stable\"",[36,26687,25590],{"class":46},[36,26689,25159],{"class":53},[36,26691,26692,26695,26698,26701,26704],{"class":38,"line":85},[36,26693,26694],{"class":2443},"  sudo",[36,26696,26697],{"class":405}," tee",[36,26699,26700],{"class":405}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,26702,26703],{"class":46}," >",[36,26705,26706],{"class":405}," \u002Fdev\u002Fnull\n",[19,26708,26709],{},"最后安装",[26,26711,26713],{"className":24302,"code":26712,"language":24304,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,26714,26715,26724],{"__ignoreMap":31},[36,26716,26717,26719,26721],{"class":38,"line":39},[36,26718,25057],{"class":2443},[36,26720,26557],{"class":405},[36,26722,26723],{"class":405}," update\n",[36,26725,26726,26728,26730,26732,26735,26738,26741,26744],{"class":38,"line":66},[36,26727,25057],{"class":2443},[36,26729,26557],{"class":405},[36,26731,24314],{"class":405},[36,26733,26734],{"class":405}," docker-ce",[36,26736,26737],{"class":405}," docker-ce-cli",[36,26739,26740],{"class":405}," containerd.io",[36,26742,26743],{"class":405}," docker-buildx-plugin",[36,26745,26746],{"class":405}," docker-compose-plugin\n",[22478,26748,26750],{"id":26749},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26752,26753,26754,26757,26758,26761],{},"查看自己自己包管理工具版本（dnf是 ",[770,26755,26756],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[770,26759,26760],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,26763,26765],{"className":24302,"code":26764,"language":24304,"meta":31,"style":31},"dnf --version\n",[33,26766,26767],{"__ignoreMap":31},[36,26768,26769,26772],{"class":38,"line":39},[36,26770,26771],{"class":2443},"dnf",[36,26773,26774],{"class":53}," --version\n",[19,26776,26500,26777,26781],{},[43,26778,26505],{"href":26779,"rel":26780},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24345]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26783,26784],{},"如果你之前安装过 docker，请先删掉",[26,26786,26788],{"className":24302,"code":26787,"language":24304,"meta":31,"style":31},"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",[33,26789,26790,26804,26811,26818,26825,26832,26839,26846,26853,26860],{"__ignoreMap":31},[36,26791,26792,26794,26797,26799,26802],{"class":38,"line":39},[36,26793,25057],{"class":2443},[36,26795,26796],{"class":405}," dnf",[36,26798,26560],{"class":405},[36,26800,26801],{"class":405}," docker",[36,26803,25159],{"class":53},[36,26805,26806,26809],{"class":38,"line":66},[36,26807,26808],{"class":405},"                  docker-client",[36,26810,25159],{"class":53},[36,26812,26813,26816],{"class":38,"line":73},[36,26814,26815],{"class":405},"                  docker-client-latest",[36,26817,25159],{"class":53},[36,26819,26820,26823],{"class":38,"line":79},[36,26821,26822],{"class":405},"                  docker-common",[36,26824,25159],{"class":53},[36,26826,26827,26830],{"class":38,"line":85},[36,26828,26829],{"class":405},"                  docker-latest",[36,26831,25159],{"class":53},[36,26833,26834,26837],{"class":38,"line":419},[36,26835,26836],{"class":405},"                  docker-latest-logrotate",[36,26838,25159],{"class":53},[36,26840,26841,26844],{"class":38,"line":425},[36,26842,26843],{"class":405},"                  docker-logrotate",[36,26845,25159],{"class":53},[36,26847,26848,26851],{"class":38,"line":431},[36,26849,26850],{"class":405},"                  docker-selinux",[36,26852,25159],{"class":53},[36,26854,26855,26858],{"class":38,"line":437},[36,26856,26857],{"class":405},"                  docker-engine-selinux",[36,26859,25159],{"class":53},[36,26861,26862],{"class":38,"line":443},[36,26863,26864],{"class":405},"                  docker-engine\n",[19,26866,26867],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,26869,26871],{"className":24302,"code":26870,"language":24304,"meta":31,"style":31},"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",[33,26872,26873,26887,26902],{"__ignoreMap":31},[36,26874,26875,26877,26879,26882,26884],{"class":38,"line":39},[36,26876,25057],{"class":2443},[36,26878,26796],{"class":405},[36,26880,26881],{"class":53}," -y",[36,26883,24314],{"class":405},[36,26885,26886],{"class":405}," dnf-plugins-core\n",[36,26888,26889,26891,26893,26896,26899],{"class":38,"line":66},[36,26890,25057],{"class":2443},[36,26892,26796],{"class":405},[36,26894,26895],{"class":405}," config-manager",[36,26897,26898],{"class":405}," addrepo",[36,26900,26901],{"class":53}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,26903,26904,26906,26909,26912,26915],{"class":38,"line":73},[36,26905,25057],{"class":2443},[36,26907,26908],{"class":405}," sed",[36,26910,26911],{"class":53}," -i",[36,26913,26914],{"class":405}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,26916,26917],{"class":405}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26919,26920],{},"最后安装：",[26,26922,26924],{"className":24302,"code":26923,"language":24304,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,26925,26926],{"__ignoreMap":31},[36,26927,26928,26930,26932,26934,26936,26938,26940,26942],{"class":38,"line":39},[36,26929,25057],{"class":2443},[36,26931,26796],{"class":405},[36,26933,24314],{"class":405},[36,26935,26734],{"class":405},[36,26937,26737],{"class":405},[36,26939,26740],{"class":405},[36,26941,26743],{"class":405},[36,26943,26746],{"class":405},[596,26945,26947],{"id":26946},"_22配置环境","2.2.配置环境",[22478,26949,26951,26954],{"id":26950},"_221检查-docker-服务状态",[770,26952,26953],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26956,26957],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,26959,26961],{"className":24302,"code":26960,"language":24304,"meta":31,"style":31},"systemctl status docker\n",[33,26962,26963],{"__ignoreMap":31},[36,26964,26965,26968,26971],{"class":38,"line":39},[36,26966,26967],{"class":2443},"systemctl",[36,26969,26970],{"class":405}," status",[36,26972,26973],{"class":405}," docker\n",[22478,26975,26977,26954],{"id":26976},"_222启动-docker-服务",[770,26978,26979],{},"2.2.2.启动 Docker 服务",[19,26981,26982],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,26984,26986],{"className":24302,"code":26985,"language":24304,"meta":31,"style":31},"sudo systemctl start docker\n",[33,26987,26988],{"__ignoreMap":31},[36,26989,26990,26992,26995,26997],{"class":38,"line":39},[36,26991,25057],{"class":2443},[36,26993,26994],{"class":405}," systemctl",[36,26996,4664],{"class":405},[36,26998,26973],{"class":405},[22478,27000,27002,26954],{"id":27001},"_223设置-docker-开机自启",[770,27003,27004],{},"2.2.3.设置 Docker 开机自启",[19,27006,27007],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,27009,27011],{"className":24302,"code":27010,"language":24304,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,27012,27013],{"__ignoreMap":31},[36,27014,27015,27017,27019,27022],{"class":38,"line":39},[36,27016,25057],{"class":2443},[36,27018,26994],{"class":405},[36,27020,27021],{"class":405}," enable",[36,27023,26973],{"class":405},[22478,27025,27027,14275,27030,14275,27035,26954],{"id":27026},"_224将用户添加到-docker-组",[770,27028,27029],{},"2.2.4.将用户添加到",[770,27031,27032],{},[33,27033,27034],{},"docker",[770,27036,27037],{},"组",[19,27039,27040,27041,27043],{},"使用以下命令将当前用户添加到 ",[33,27042,27034],{}," 组：",[26,27045,27047],{"className":24302,"code":27046,"language":24304,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,27048,27049],{"__ignoreMap":31},[36,27050,27051,27053,27056,27059,27061],{"class":38,"line":39},[36,27052,25057],{"class":2443},[36,27054,27055],{"class":405}," usermod",[36,27057,27058],{"class":53}," -aG",[36,27060,26801],{"class":405},[36,27062,27063],{"class":42}," $USER\n",[22478,27065,27067,26954],{"id":27066},"_225退出并重新登录",[770,27068,27069],{},"2.2.5.退出并重新登录",[19,27071,27072],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,27074,27076],{"className":24302,"code":27075,"language":24304,"meta":31,"style":31},"newgrp docker\n",[33,27077,27078],{"__ignoreMap":31},[36,27079,27080,27083],{"class":38,"line":39},[36,27081,27082],{"class":2443},"newgrp",[36,27084,26973],{"class":405},[22478,27086,27088,26954],{"id":27087},"_226重新启动-docker-服务如果需要",[770,27089,27090],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27092,27093],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,27095,27096],{"className":24302,"code":26985,"language":24304,"meta":31,"style":31},[33,27097,27098],{"__ignoreMap":31},[36,27099,27100,27102,27104,27106],{"class":38,"line":39},[36,27101,25057],{"class":2443},[36,27103,26994],{"class":405},[36,27105,4664],{"class":405},[36,27107,26973],{"class":405},[22478,27109,27111,26954],{"id":27110},"_227重启电脑后检查-docker-服务状态",[770,27112,27113],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27115,27116],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,27118,27120],{"className":24302,"code":27119,"language":24304,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,27121,27122,27129],{"__ignoreMap":31},[36,27123,27124,27126],{"class":38,"line":39},[36,27125,25057],{"class":2443},[36,27127,27128],{"class":405}," reboot\n",[36,27130,27131,27133,27135],{"class":38,"line":66},[36,27132,26967],{"class":2443},[36,27134,26970],{"class":405},[36,27136,26973],{"class":405},[19,27138,27139],{},[519,27140],{"alt":31,"src":27141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27143,27144],{},"第三行显示enabled说明开机自启动成功",[19,27146,27147],{},"按q退出",[596,27149,27151],{"id":27150},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27153,27154],{},"优先使用linux来使用docker是比较好的",[19,27156,27157],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27159,27160],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27162,27163,27164],{},"官方下载安装:",[43,27165,27166],{"href":27166,"rel":27167},"https:\u002F\u002Fwww.docker.com\u002F",[24345],[19,27169,27170],{},"Windows的Docker显卡直通与USB直通:",[19,27172,27173],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27175,27176],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27178,27179],{},[519,27180],{"alt":31,"src":27181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27183,27184],{},[519,27185],{"alt":31,"src":27186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27188,27189],{},[519,27190],{"alt":31,"src":27191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[539,27193,27194],{},"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":31,"searchDepth":66,"depth":66,"links":27196},[27197,27198,27199],{"id":26474,"depth":73,"text":26475},{"id":26946,"depth":73,"text":26947},{"id":27150,"depth":73,"text":27151},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26466,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27206,"title":27207,"body":27208,"description":27215,"extension":551,"meta":27908,"navigation":553,"path":27909,"seo":27910,"stem":27911,"__hash__":27912},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27209,"toc":27902},[27210,27213,27216,27220,27225,27230,27233,27261,27266,27275,27278,27283,27287,27294,27299,27305,27309,27312,27316,27321,27413,27418,27436,27441,27462,27467,27483,27487,27492,27521,27526,27572,27577,27621,27629,27646,27651,27667,27672,27686,27689,27692,27695,27698,27727,27730,27735,27739,27742,27745,27751,27754,27757,27760,27822,27829,27834,27837,27855,27859,27862,27879,27882,27885,27899],[10,27211,27207],{"id":27212},"_3docker直通",[19,27214,27215],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[596,27217,27219],{"id":27218},"_31usb直通","3.1.USB直通",[19,27221,27222],{},[519,27223],{"alt":31,"src":27224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[579,27226,27227],{},[582,27228,27229],{},"方法一(不是很推荐新手)：",[19,27231,27232],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,27234,27236],{"className":24302,"code":27235,"language":24304,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,27237,27238,27246,27251],{"__ignoreMap":31},[36,27239,27240,27243],{"class":38,"line":39},[36,27241,27242],{"class":2443},"ls",[36,27244,27245],{"class":405}," \u002Fdev\n",[36,27247,27248],{"class":38,"line":66},[36,27249,27250],{"class":69},"#例如\n",[36,27252,27253,27256,27258],{"class":38,"line":73},[36,27254,27255],{"class":42},"--device",[36,27257,47],{"class":46},[36,27259,27260],{"class":405},"\u002Fdev\u002Ftty_USB0\n",[579,27262,27263],{"start":66},[582,27264,27265],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,27267,27269],{"className":24302,"code":27268,"language":24304,"meta":31,"style":31},"--privileged\n",[33,27270,27271],{"__ignoreMap":31},[36,27272,27273],{"class":38,"line":39},[36,27274,27268],{"class":2443},[19,27276,27277],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27279,27280],{},[519,27281],{"alt":31,"src":27282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[596,27284,27286],{"id":27285},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27288,27289,27290,27293],{},"NVIDIA Container Toolkit使用户 ",[770,27291,27292],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27295,27296],{},[519,27297],{"alt":31,"src":27298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27300,27301],{},[43,27302,27303],{"href":27303,"rel":27304},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24345],[22478,27306,27308],{"id":27307},"_321安装","3.2.1.安装",[19,27310,27311],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23390,27313,27315],{"id":27314},"_3211ubuntu","3.2.1.1.Ubuntu",[579,27317,27318],{},[582,27319,27320],{},"配置存储库 并更新",[26,27322,27324],{"className":24302,"code":27323,"language":24304,"meta":31,"style":31},"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",[33,27325,27326,27355,27375,27387,27399,27405],{"__ignoreMap":31},[36,27327,27328,27331,27334,27337,27339,27341,27344,27347,27350,27353],{"class":38,"line":39},[36,27329,27330],{"class":2443},"curl",[36,27332,27333],{"class":53}," -fsSL",[36,27335,27336],{"class":405}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,27338,25590],{"class":46},[36,27340,26554],{"class":2443},[36,27342,27343],{"class":405}," gpg",[36,27345,27346],{"class":53}," --dearmor",[36,27348,27349],{"class":53}," -o",[36,27351,27352],{"class":405}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,27354,25159],{"class":53},[36,27356,27357,27360,27362,27365,27368,27371,27373],{"class":38,"line":66},[36,27358,27359],{"class":42},"  && ",[36,27361,27330],{"class":2443},[36,27363,27364],{"class":53}," -s",[36,27366,27367],{"class":53}," -L",[36,27369,27370],{"class":405}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,27372,25590],{"class":46},[36,27374,25159],{"class":53},[36,27376,27377,27380,27383,27385],{"class":38,"line":73},[36,27378,27379],{"class":2443},"    sed",[36,27381,27382],{"class":405}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,27384,25590],{"class":46},[36,27386,25159],{"class":53},[36,27388,27389,27392,27394,27397],{"class":38,"line":79},[36,27390,27391],{"class":2443},"    sudo",[36,27393,26697],{"class":405},[36,27395,27396],{"class":405}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,27398,25159],{"class":53},[36,27400,27401,27403],{"class":38,"line":85},[36,27402,27359],{"class":42},[36,27404,26656],{"class":53},[36,27406,27407,27409,27411],{"class":38,"line":419},[36,27408,27391],{"class":2443},[36,27410,26557],{"class":405},[36,27412,26723],{"class":405},[579,27414,27415],{"start":66},[582,27416,27417],{},"安装nvidia-docker2",[26,27419,27421],{"className":24302,"code":27420,"language":24304,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,27422,27423],{"__ignoreMap":31},[36,27424,27425,27427,27429,27431,27433],{"class":38,"line":39},[36,27426,25057],{"class":2443},[36,27428,26557],{"class":405},[36,27430,24314],{"class":405},[36,27432,26881],{"class":53},[36,27434,27435],{"class":405}," nvidia-docker2\n",[579,27437,27438],{"start":73},[582,27439,27440],{},"使用nvidia-ctk命令配置container runtime",[26,27442,27444],{"className":24302,"code":27443,"language":24304,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,27445,27446],{"__ignoreMap":31},[36,27447,27448,27450,27453,27456,27459],{"class":38,"line":39},[36,27449,25057],{"class":2443},[36,27451,27452],{"class":405}," nvidia-ctk",[36,27454,27455],{"class":405}," runtime",[36,27457,27458],{"class":405}," configure",[36,27460,27461],{"class":53}," --runtime=docker\n",[579,27463,27464],{"start":79},[582,27465,27466],{},"重启docker服务:",[26,27468,27470],{"className":24302,"code":27469,"language":24304,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,27471,27472],{"__ignoreMap":31},[36,27473,27474,27476,27478,27481],{"class":38,"line":39},[36,27475,25057],{"class":2443},[36,27477,26994],{"class":405},[36,27479,27480],{"class":405}," restart",[36,27482,26973],{"class":405},[23390,27484,27486],{"id":27485},"_3212fedora","3.2.1.2.Fedora",[579,27488,27489],{},[582,27490,27491],{},"配置存储库",[26,27493,27495],{"className":24302,"code":27494,"language":24304,"meta":31,"style":31},"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",[33,27496,27497,27512],{"__ignoreMap":31},[36,27498,27499,27501,27503,27505,27508,27510],{"class":38,"line":39},[36,27500,27330],{"class":2443},[36,27502,27364],{"class":53},[36,27504,27367],{"class":53},[36,27506,27507],{"class":405}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,27509,25590],{"class":46},[36,27511,25159],{"class":53},[36,27513,27514,27516,27518],{"class":38,"line":66},[36,27515,25057],{"class":2443},[36,27517,26697],{"class":405},[36,27519,27520],{"class":405}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[579,27522,27523],{"start":66},[582,27524,27525],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,27527,27529],{"className":24302,"code":27528,"language":24304,"meta":31,"style":31},"# 如果是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",[33,27530,27531,27536,27550,27554,27559],{"__ignoreMap":31},[36,27532,27533],{"class":38,"line":39},[36,27534,27535],{"class":69},"# 如果是RHEL或者Rocky（DNF4）\n",[36,27537,27538,27540,27542,27544,27547],{"class":38,"line":66},[36,27539,25057],{"class":2443},[36,27541,26796],{"class":405},[36,27543,26895],{"class":405},[36,27545,27546],{"class":53}," --add-repo",[36,27548,27549],{"class":405}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,27551,27552],{"class":38,"line":73},[36,27553,2880],{"emptyLinePlaceholder":553},[36,27555,27556],{"class":38,"line":79},[36,27557,27558],{"class":69},"# 如果是Feodra41+（DNF5）\n",[36,27560,27561,27563,27565,27567,27569],{"class":38,"line":85},[36,27562,25057],{"class":2443},[36,27564,26796],{"class":405},[36,27566,26895],{"class":405},[36,27568,26898],{"class":405},[36,27570,27571],{"class":53}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[579,27573,27574],{"start":73},[582,27575,27576],{},"安装NVIDIA Container Toolki包",[26,27578,27580],{"className":24302,"code":27579,"language":24304,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[33,27581,27582,27587,27600,27604,27609],{"__ignoreMap":31},[36,27583,27584],{"class":38,"line":39},[36,27585,27586],{"class":69},"# 如果是RHEL或者Rocky\n",[36,27588,27589,27591,27593,27595,27597],{"class":38,"line":66},[36,27590,25057],{"class":2443},[36,27592,26796],{"class":405},[36,27594,24314],{"class":405},[36,27596,26881],{"class":53},[36,27598,27599],{"class":405}," nvidia-container-toolkit\n",[36,27601,27602],{"class":38,"line":73},[36,27603,2880],{"emptyLinePlaceholder":553},[36,27605,27606],{"class":38,"line":79},[36,27607,27608],{"class":69},"# 如果是Fedora\n",[36,27610,27611,27613,27615,27617,27619],{"class":38,"line":85},[36,27612,25057],{"class":2443},[36,27614,26796],{"class":405},[36,27616,24314],{"class":405},[36,27618,26881],{"class":53},[36,27620,27599],{"class":405},[579,27622,27623],{"start":79},[582,27624,27625,27626,27628],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,27627,26771],{},"进行安装",[26,27630,27632],{"className":24302,"code":27631,"language":24304,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,27633,27634],{"__ignoreMap":31},[36,27635,27636,27638,27640,27642,27644],{"class":38,"line":39},[36,27637,25057],{"class":2443},[36,27639,26796],{"class":405},[36,27641,24314],{"class":405},[36,27643,26881],{"class":53},[36,27645,27435],{"class":405},[579,27647,27648],{"start":85},[582,27649,27650],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,27652,27653],{"className":24302,"code":27443,"language":24304,"meta":31,"style":31},[33,27654,27655],{"__ignoreMap":31},[36,27656,27657,27659,27661,27663,27665],{"class":38,"line":39},[36,27658,25057],{"class":2443},[36,27660,27452],{"class":405},[36,27662,27455],{"class":405},[36,27664,27458],{"class":405},[36,27666,27461],{"class":53},[579,27668,27669],{"start":419},[582,27670,27671],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,27673,27674],{"className":24302,"code":27469,"language":24304,"meta":31,"style":31},[33,27675,27676],{"__ignoreMap":31},[36,27677,27678,27680,27682,27684],{"class":38,"line":39},[36,27679,25057],{"class":2443},[36,27681,26994],{"class":405},[36,27683,27480],{"class":405},[36,27685,26973],{"class":405},[19,27687,27688],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27690,27691],{},"方法：",[19,27693,27694],{},"1️⃣nvidia-smi",[19,27696,27697],{},"2️⃣运行nvidia cuda 容器进行测试",[26,27699,27701],{"className":24302,"code":27700,"language":24304,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,27702,27703],{"__ignoreMap":31},[36,27704,27705,27707,27709,27712,27715,27718,27721,27724],{"class":38,"line":39},[36,27706,25057],{"class":2443},[36,27708,26801],{"class":405},[36,27710,27711],{"class":405}," run",[36,27713,27714],{"class":53}," --rm",[36,27716,27717],{"class":53}," --gpus",[36,27719,27720],{"class":405}," all",[36,27722,27723],{"class":405}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,27725,27726],{"class":405}," nvidia-smi\n",[19,27728,27729],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27731,27732],{},[519,27733],{"alt":31,"src":27734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[596,27736,27738],{"id":27737},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27740,27741],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27743,27744],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27746,27747],{},[43,27748,27749],{"href":27749,"rel":27750},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24345],[19,27752,27753],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27755,27756],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27758,27759],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[758,27761,27762,27778],{},[761,27763,27764],{},[764,27765,27766,27769,27772,27775],{},[767,27767,27768],{"align":24216},"镜像类型",[767,27770,27771],{"align":24216},"适用场景",[767,27773,27774],{"align":24216},"示例标签",[767,27776,27777],{"align":24216},"大小",[805,27779,27780,27794,27808],{},[764,27781,27782,27785,27788,27791],{},[810,27783,27784],{"align":24216},"base",[810,27786,27787],{"align":24216},"仅需 CUDA 运行时库",[810,27789,27790],{"align":24216},"12.4.0-base-ubuntu22.04",[810,27792,27793],{"align":24216},"~240MB",[764,27795,27796,27799,27802,27805],{},[810,27797,27798],{"align":24216},"runtime",[810,27800,27801],{"align":24216},"部署编译后的应用（含数学库）",[810,27803,27804],{"align":24216},"12.4.0-runtime-ubuntu22.04",[810,27806,27807],{"align":24216},"~2GB",[764,27809,27810,27813,27816,27819],{},[810,27811,27812],{"align":24216},"devel",[810,27814,27815],{"align":24216},"开发环境（含编译工具）",[810,27817,27818],{"align":24216},"12.4.0-devel-ubuntu22.04",[810,27820,27821],{"align":24216},"~3GB",[19,27823,27824,27825,27828],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,27826,27827],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27830,27831],{},[519,27832],{"alt":31,"src":27833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27835,27836],{},"在dockerfile里就可以开头这么写：",[26,27838,27840],{"className":24302,"code":27839,"language":24304,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,27841,27842,27847],{"__ignoreMap":31},[36,27843,27844],{"class":38,"line":39},[36,27845,27846],{"class":69},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,27848,27849,27852],{"class":38,"line":66},[36,27850,27851],{"class":2443},"FROM",[36,27853,27854],{"class":405}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[596,27856,27858],{"id":27857},"_34配置以太网","3.4.配置以太网",[19,27860,27861],{},"指定网络模式",[26,27863,27865],{"className":24302,"code":27864,"language":24304,"meta":31,"style":31},"--net=host \\\n",[33,27866,27867],{"__ignoreMap":31},[36,27868,27869,27872,27874,27877],{"class":38,"line":39},[36,27870,27871],{"class":42},"--net",[36,27873,47],{"class":46},[36,27875,27876],{"class":405},"host",[36,27878,25159],{"class":2443},[19,27880,27881],{},"启动参数里加上这行即可。具体在下方",[19,27883,27884],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1620,27886,27887,27890,27893,27896],{},[582,27888,27889],{},"--net=bridge:默认选项，表示连接到默认的网桥",[582,27891,27892],{},"--net=host:容器使用宿主机的网络",[582,27894,27895],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[582,27897,27898],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[539,27900,27901],{},"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":31,"searchDepth":66,"depth":66,"links":27903},[27904,27905,27906,27907],{"id":27218,"depth":73,"text":27219},{"id":27285,"depth":73,"text":27286},{"id":27737,"depth":73,"text":27738},{"id":27857,"depth":73,"text":27858},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27207,"description":27215},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27914,"title":27915,"body":27916,"description":27923,"extension":551,"meta":27929,"navigation":553,"path":27930,"seo":27931,"stem":27932,"__hash__":27933},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27917,"toc":27927},[27918,27921,27924],[10,27919,27915],{"id":27920},"_4dockerhub换源",[19,27922,27923],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27925,27926],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":66,"depth":66,"links":27928},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27915,"description":27923},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27935,"title":27936,"body":27937,"description":31,"extension":551,"meta":28949,"navigation":553,"path":28950,"seo":28951,"stem":28952,"__hash__":28953},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27938,"toc":28944},[27939,27942,27946,27952,27956,27959,28299,28302,28305,28308,28313,28318,28321,28324,28327,28330,28349,28352,28363,28369,28551,28561,28577,28840,28842,28867,28882,28891,28941],[10,27940,27936],{"id":27941},"_5docker命令学习",[596,27943,27945],{"id":27944},"_51参考文档","5.1.参考文档",[19,27947,27948],{},[43,27949,27950],{"href":27950,"rel":27951},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24345],[596,27953,27955],{"id":27954},"_52常用命令","5.2.常用命令",[19,27957,27958],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[758,27960,27961,27974],{},[761,27962,27963],{},[764,27964,27965,27968,27971],{},[767,27966,27967],{"align":24216},"命令",[767,27969,27970],{"align":24216},"描述",[767,27972,27973],{"align":24216},"示例",[805,27975,27976,27987,27998,28009,28020,28031,28042,28053,28063,28074,28085,28096,28106,28117,28128,28139,28149,28159,28169,28179,28190,28201,28212,28223,28234,28245,28255,28266,28277,28288],{},[764,27977,27978,27981,27984],{},[810,27979,27980],{"align":24216},"docker run",[810,27982,27983],{"align":24216},"创建并启动一个新的容器。",[810,27985,27986],{"align":24216},"docker run -it ubuntu bash",[764,27988,27989,27992,27995],{},[810,27990,27991],{"align":24216},"docker build",[810,27993,27994],{"align":24216},"通过指定的 Dockerfile 创建一个新的镜像。",[810,27996,27997],{"align":24216},"docker build -t myimage .",[764,27999,28000,28003,28006],{},[810,28001,28002],{"align":24216},"docker pull",[810,28004,28005],{"align":24216},"从 Docker 仓库拉取镜像。",[810,28007,28008],{"align":24216},"docker pull ubuntu",[764,28010,28011,28014,28017],{},[810,28012,28013],{"align":24216},"docker push",[810,28015,28016],{"align":24216},"将本地镜像推送到 Docker 仓库。",[810,28018,28019],{"align":24216},"docker push myimage",[764,28021,28022,28025,28028],{},[810,28023,28024],{"align":24216},"docker stop",[810,28026,28027],{"align":24216},"停止一个正在运行的容器。",[810,28029,28030],{"align":24216},"docker stop container_id",[764,28032,28033,28036,28039],{},[810,28034,28035],{"align":24216},"docker start",[810,28037,28038],{"align":24216},"启动一个已经存在的容器。",[810,28040,28041],{"align":24216},"docker start container_id",[764,28043,28044,28047,28050],{},[810,28045,28046],{"align":24216},"docker restart",[810,28048,28049],{"align":24216},"重新启动容器。",[810,28051,28052],{"align":24216},"docker restart container_id",[764,28054,28055,28058,28061],{},[810,28056,28057],{"align":24216},"docker ps",[810,28059,28060],{"align":24216},"列出当前正在运行的容器。",[810,28062,28057],{"align":24216},[764,28064,28065,28068,28071],{},[810,28066,28067],{"align":24216},"docker rm",[810,28069,28070],{"align":24216},"删除一个或多个停止的容器。",[810,28072,28073],{"align":24216},"docker rm container_id",[764,28075,28076,28079,28082],{},[810,28077,28078],{"align":24216},"docker exec",[810,28080,28081],{"align":24216},"在一个正在运行的容器中执行命令。",[810,28083,28084],{"align":24216},"docker exec -it container_id bash",[764,28086,28087,28090,28093],{},[810,28088,28089],{"align":24216},"docker logs",[810,28091,28092],{"align":24216},"查看容器的日志输出。",[810,28094,28095],{"align":24216},"docker logs container_id",[764,28097,28098,28101,28104],{},[810,28099,28100],{"align":24216},"docker images",[810,28102,28103],{"align":24216},"列出本地所有镜像。",[810,28105,28100],{"align":24216},[764,28107,28108,28111,28114],{},[810,28109,28110],{"align":24216},"docker rmi",[810,28112,28113],{"align":24216},"删除一个或多个镜像。",[810,28115,28116],{"align":24216},"docker rmi myimage",[764,28118,28119,28122,28125],{},[810,28120,28121],{"align":24216},"docker network",[810,28123,28124],{"align":24216},"管理 Docker 网络。",[810,28126,28127],{"align":24216},"docker network ls",[764,28129,28130,28133,28136],{},[810,28131,28132],{"align":24216},"docker volume",[810,28134,28135],{"align":24216},"管理 Docker 数据卷。",[810,28137,28138],{"align":24216},"docker volume ls",[764,28140,28141,28144,28147],{},[810,28142,28143],{"align":24216},"docker-compose up",[810,28145,28146],{"align":24216},"启动 docker-compose.yml 中定义的所有服务。",[810,28148,28143],{"align":24216},[764,28150,28151,28154,28157],{},[810,28152,28153],{"align":24216},"docker-compose down",[810,28155,28156],{"align":24216},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[810,28158,28153],{"align":24216},[764,28160,28161,28164,28167],{},[810,28162,28163],{"align":24216},"docker info",[810,28165,28166],{"align":24216},"显示 Docker 系统的详细信息。",[810,28168,28163],{"align":24216},[764,28170,28171,28174,28177],{},[810,28172,28173],{"align":24216},"docker stats",[810,28175,28176],{"align":24216},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[810,28178,28173],{"align":24216},[764,28180,28181,28184,28187],{},[810,28182,28183],{"align":24216},"docker inspect",[810,28185,28186],{"align":24216},"查看容器或镜像的详细信息（JSON 格式）。",[810,28188,28189],{"align":24216},"docker inspect container_id",[764,28191,28192,28195,28198],{},[810,28193,28194],{"align":24216},"docker save",[810,28196,28197],{"align":24216},"将一个镜像保存为 tar 文件。",[810,28199,28200],{"align":24216},"docker save -o myimage.tar myimage",[764,28202,28203,28206,28209],{},[810,28204,28205],{"align":24216},"docker load",[810,28207,28208],{"align":24216},"从 tar 文件中加载镜像。",[810,28210,28211],{"align":24216},"docker load -i myimage.tar",[764,28213,28214,28217,28220],{},[810,28215,28216],{"align":24216},"docker tag",[810,28218,28219],{"align":24216},"为镜像添加标签（tag）。",[810,28221,28222],{"align":24216},"docker tag myimage myimage:v1",[764,28224,28225,28228,28231],{},[810,28226,28227],{"align":24216},"docker buildx build",[810,28229,28230],{"align":24216},"使用 Buildx 构建多架构镜像。",[810,28232,28233],{"align":24216},"docker buildx build -t myimage .",[764,28235,28236,28239,28242],{},[810,28237,28238],{"align":24216},"docker buildx create",[810,28240,28241],{"align":24216},"创建一个新的 Buildx 构建实例。",[810,28243,28244],{"align":24216},"docker buildx create –use",[764,28246,28247,28250,28253],{},[810,28248,28249],{"align":24216},"docker buildx ls",[810,28251,28252],{"align":24216},"列出所有可用的 Buildx 构建实例。",[810,28254,28249],{"align":24216},[764,28256,28257,28260,28263],{},[810,28258,28259],{"align":24216},"docker buildx use",[810,28261,28262],{"align":24216},"设置当前的 Buildx 构建实例。",[810,28264,28265],{"align":24216},"docker buildx use mybuilder",[764,28267,28268,28271,28274],{},[810,28269,28270],{"align":24216},"docker buildx bake",[810,28272,28273],{"align":24216},"使用 Bake 文件批量构建镜像。",[810,28275,28276],{"align":24216},"docker buildx bake -f bake.hcl",[764,28278,28279,28282,28285],{},[810,28280,28281],{"align":24216},"docker buildx build –push",[810,28283,28284],{"align":24216},"构建镜像并推送到镜像仓库。",[810,28286,28287],{"align":24216},"docker buildx build –push -t myimage .",[764,28289,28290,28293,28296],{},[810,28291,28292],{"align":24216},"docker buildx build –platform",[810,28294,28295],{"align":24216},"构建镜像并为多个平台生成支持。",[810,28297,28298],{"align":24216},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28300,28301],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28303,28304],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28306,28307],{},"docker images 可以查看已经下载的镜像",[19,28309,28310],{},[519,28311],{"alt":31,"src":28312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28314,28315],{},[770,28316,28317],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28319,28320],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28322,28323],{},"docker container logs 查看容器日志",[19,28325,28326],{},"docker top 查看容器里的进程",[19,28328,28329],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,28331,28333],{"className":24302,"code":28332,"language":24304,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,28334,28335],{"__ignoreMap":31},[36,28336,28337,28340,28343,28346],{"class":38,"line":39},[36,28338,28339],{"class":2443},"如：docker",[36,28341,28342],{"class":405}," cp",[36,28344,28345],{"class":405}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,28347,28348],{"class":405}," \u002Fmydata\u002Fnginx\n",[19,28350,28351],{},"docker run时在启动容器的时候会有几个常用的选项：",[1620,28353,28354,28357,28360],{},[582,28355,28356],{},"-d选项：表示后台运行",[582,28358,28359],{},"-P选项：随机端口映射",[582,28361,28362],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[596,28364,28366],{"id":28365},"_53run命令的参数非常重要",[770,28367,28368],{},"5.3.run命令的参数（非常重要）",[758,28370,28371,28384],{},[761,28372,28373],{},[764,28374,28375,28378,28381],{},[767,28376,28377],{"align":24216},"参数\u002F配置",[767,28379,28380],{"align":24216},"功能说明",[767,28382,28383],{"align":24216},"重要性与参考依据",[805,28385,28386,28397,28408,28419,28430,28441,28452,28463,28474,28485,28496,28507,28518,28529,28540],{},[764,28387,28388,28391,28394],{},[810,28389,28390],{"align":24216},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[810,28392,28393],{"align":24216},"指定容器名称，便于后续管理",[810,28395,28396],{"align":24216},"替代随机生成的容器名。",[764,28398,28399,28402,28405],{},[810,28400,28401],{"align":24216},"–gpus all",[810,28403,28404],{"align":24216},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[810,28406,28407],{"align":24216},"用于CUDA加速等GPU依赖任务。",[764,28409,28410,28413,28416],{},[810,28411,28412],{"align":24216},"-e NVIDIA_DRIVER_CAPABILITIES=all",[810,28414,28415],{"align":24216},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[810,28417,28418],{"align":24216},"确保容器内GPU功能完整67。",[764,28420,28421,28424,28427],{},[810,28422,28423],{"align":24216},"-dit",[810,28425,28426],{"align":24216},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[810,28428,28429],{"align":24216},"允许容器在后台运行并支持交互操作。",[764,28431,28432,28435,28438],{},[810,28433,28434],{"align":24216},"–privileged",[810,28436,28437],{"align":24216},"赋予容器完全主机权限（可访问设备、内核模块等）",[810,28439,28440],{"align":24216},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[764,28442,28443,28446,28449],{},[810,28444,28445],{"align":24216},"–net=host",[810,28447,28448],{"align":24216},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[810,28450,28451],{"align":24216},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[764,28453,28454,28457,28460],{},[810,28455,28456],{"align":24216},"–group-add audio–group-add video–group-add dialout",[810,28458,28459],{"align":24216},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[810,28461,28462],{"align":24216},"避免权限问题（如避免无法调用摄像头、麦克风）。",[764,28464,28465,28468,28471],{},[810,28466,28467],{"align":24216},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[810,28469,28470],{"align":24216},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[810,28472,28473],{"align":24216},"支持容器内运行图形界面应用（如OpenCV可视化）。",[764,28475,28476,28479,28482],{},[810,28477,28478],{"align":24216},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[810,28480,28481],{"align":24216},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[810,28483,28484],{"align":24216},"实现容器内图形显示。",[764,28486,28487,28490,28493],{},[810,28488,28489],{"align":24216},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[810,28491,28492],{"align":24216},"挂载X11认证文件（只读）",[810,28494,28495],{"align":24216},"确保容器有权连接宿主机显示服务。",[764,28497,28498,28501,28504],{},[810,28499,28500],{"align":24216},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[810,28502,28503],{"align":24216},"挂载Wayland显示协议相关目录",[810,28505,28506],{"align":24216},"支持Wayland协议的图形显示。",[764,28508,28509,28512,28515],{},[810,28510,28511],{"align":24216},"–ulimit nofile=1024:524288",[810,28513,28514],{"align":24216},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[810,28516,28517],{"align":24216},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[764,28519,28520,28523,28526],{},[810,28521,28522],{"align":24216},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[810,28524,28525],{"align":24216},"挂载宿主机用户目录到容器内同名路径",[810,28527,28528],{"align":24216},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[764,28530,28531,28534,28537],{},[810,28532,28533],{"align":24216},"-w \u002Fhome\u002Ftungchiahui",[810,28535,28536],{"align":24216},"设置容器启动后的默认工作目录",[810,28538,28539],{"align":24216},"直接进入项目路径，方便执行命令2324。",[764,28541,28542,28545,28548],{},[810,28543,28544],{"align":24216},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[810,28546,28547],{"align":24216},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[810,28549,28550],{"align":24216},"提供预配置的深度学习与机器人开发环境。",[19,28552,28553,28554,28556,28557,28560],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,28555,25057],{},"加不加",[33,28558,28559],{},"sudo -E","都无所谓。",[19,28562,28563,28564,28566,28567,28569,28570,28573,28574,28576],{},"用户已经被加到docker组了，不用",[33,28565,25057],{},"也行跑，其次，",[33,28568,25057],{},"运行的话，你的",[33,28571,28572],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,28575,28572],{},"更不可能变了。",[26,28578,28580],{"className":24302,"code":28579,"language":24304,"meta":31,"style":31},"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",[33,28581,28582,28595,28605,28615,28627,28634,28641,28648,28658,28667,28676,28690,28702,28714,28723,28733,28742,28757,28790,28817,28828,28835],{"__ignoreMap":31},[36,28583,28584,28586,28588,28590,28593],{"class":38,"line":39},[36,28585,25057],{"class":2443},[36,28587,26801],{"class":405},[36,28589,27711],{"class":405},[36,28591,28592],{"class":53}," --name=ros_opencv_cuda",[36,28594,25159],{"class":53},[36,28596,28597,28600,28603],{"class":38,"line":66},[36,28598,28599],{"class":42},"--gpus ",[36,28601,28602],{"class":405},"all",[36,28604,25159],{"class":53},[36,28606,28607,28610,28613],{"class":38,"line":73},[36,28608,28609],{"class":42},"-e ",[36,28611,28612],{"class":405},"NVIDIA_DRIVER_CAPABILITIES=all",[36,28614,25159],{"class":53},[36,28616,28617,28619,28622,28625],{"class":38,"line":79},[36,28618,28609],{"class":42},[36,28620,28621],{"class":405},"DISPLAY=",[36,28623,28624],{"class":42},"$DISPLAY ",[36,28626,26656],{"class":53},[36,28628,28629,28632],{"class":38,"line":85},[36,28630,28631],{"class":42},"-dit ",[36,28633,26656],{"class":53},[36,28635,28636,28639],{"class":38,"line":419},[36,28637,28638],{"class":42},"--privileged ",[36,28640,26656],{"class":53},[36,28642,28643,28646],{"class":38,"line":425},[36,28644,28645],{"class":42},"--net=host ",[36,28647,26656],{"class":53},[36,28649,28650,28653,28656],{"class":38,"line":431},[36,28651,28652],{"class":42},"--group-add ",[36,28654,28655],{"class":405},"audio",[36,28657,25159],{"class":53},[36,28659,28660,28662,28665],{"class":38,"line":437},[36,28661,28652],{"class":42},[36,28663,28664],{"class":405},"video",[36,28666,25159],{"class":53},[36,28668,28669,28671,28674],{"class":38,"line":443},[36,28670,28652],{"class":42},[36,28672,28673],{"class":405},"dialout",[36,28675,25159],{"class":53},[36,28677,28678,28680,28683,28685,28688],{"class":38,"line":2092},[36,28679,28609],{"class":42},[36,28681,28682],{"class":405},"XAUTHORITY=",[36,28684,28572],{"class":42},[36,28686,28687],{"class":405},"\u002F.Xauthority",[36,28689,25159],{"class":53},[36,28691,28692,28694,28697,28700],{"class":38,"line":2097},[36,28693,28609],{"class":42},[36,28695,28696],{"class":405},"WAYLAND_DISPLAY=",[36,28698,28699],{"class":42},"$WAYLAND_DISPLAY ",[36,28701,26656],{"class":53},[36,28703,28704,28706,28709,28712],{"class":38,"line":2103},[36,28705,28609],{"class":42},[36,28707,28708],{"class":405},"XDG_RUNTIME_DIR=",[36,28710,28711],{"class":42},"$XDG_RUNTIME_DIR ",[36,28713,26656],{"class":53},[36,28715,28716,28718,28721],{"class":38,"line":2108},[36,28717,28609],{"class":42},[36,28719,28720],{"class":405},"QT_QPA_PLATFORM=xcb",[36,28722,25159],{"class":53},[36,28724,28725,28728,28731],{"class":38,"line":2122},[36,28726,28727],{"class":42},"-v ",[36,28729,28730],{"class":405},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,28732,25159],{"class":53},[36,28734,28735,28737,28740],{"class":38,"line":2127},[36,28736,28727],{"class":42},[36,28738,28739],{"class":405},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,28741,25159],{"class":53},[36,28743,28744,28747,28750,28752,28755],{"class":38,"line":2133},[36,28745,28746],{"class":42},"-v $HOME",[36,28748,28749],{"class":405},"\u002F.Xauthority:",[36,28751,28572],{"class":42},[36,28753,28754],{"class":405},"\u002F.Xauthority:ro",[36,28756,25159],{"class":53},[36,28758,28759,28761,28764,28766,28769,28772,28774,28777,28779,28781,28783,28785,28788],{"class":38,"line":2154},[36,28760,28727],{"class":42},[36,28762,28763],{"class":405},"\u002Frun\u002Fuser\u002F",[36,28765,25580],{"class":42},[36,28767,28768],{"class":2443},"id",[36,28770,28771],{"class":53}," -u",[36,28773,231],{"class":42},[36,28775,28776],{"class":405},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,28778,25580],{"class":42},[36,28780,28768],{"class":2443},[36,28782,28771],{"class":53},[36,28784,231],{"class":42},[36,28786,28787],{"class":405},"\u002Fwayland-0",[36,28789,25159],{"class":53},[36,28791,28792,28794,28796,28798,28800,28802,28804,28807,28809,28811,28813,28815],{"class":38,"line":2159},[36,28793,28727],{"class":42},[36,28795,28763],{"class":405},[36,28797,25580],{"class":42},[36,28799,28768],{"class":2443},[36,28801,28771],{"class":53},[36,28803,231],{"class":42},[36,28805,28806],{"class":405},":\u002Frun\u002Fuser\u002F",[36,28808,25580],{"class":42},[36,28810,28768],{"class":2443},[36,28812,28771],{"class":53},[36,28814,14194],{"class":42},[36,28816,26656],{"class":53},[36,28818,28819,28821,28823,28826],{"class":38,"line":2173},[36,28820,28746],{"class":42},[36,28822,1472],{"class":405},[36,28824,28825],{"class":42},"$HOME ",[36,28827,26656],{"class":53},[36,28829,28830,28833],{"class":38,"line":2178},[36,28831,28832],{"class":42},"-w $HOME ",[36,28834,26656],{"class":53},[36,28836,28837],{"class":38,"line":2207},[36,28838,28839],{"class":42},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28841,9505],{},[579,28843,28844,28852,28855,28858],{},[582,28845,28846,14275,28848,28851],{},[33,28847,28612],{},[33,28849,28850],{},"--gpus all","没有英伟达显卡请注释。",[582,28853,28854],{},"--name后面请自己为容器起名。",[582,28856,28857],{},"最后一行仓库名称请你自己找对应的镜像填上。",[582,28859,28860,28861,28866],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24033,28862,28863],{},[770,28864,28865],{},"请不要加","。",[26,28868,28870],{"className":24302,"code":28869,"language":24304,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,28871,28872],{"__ignoreMap":31},[36,28873,28874,28877,28880],{"class":38,"line":39},[36,28875,28876],{"class":2443},"--ulimit",[36,28878,28879],{"class":405}," nofile=1024:524288",[36,28881,25159],{"class":53},[19,28883,28884,28885,28890],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24033,28886,28887],{},[770,28888,28889],{},"不建议","**.**",[26,28892,28894],{"className":24302,"code":28893,"language":24304,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[33,28895,28896,28923,28932],{"__ignoreMap":31},[36,28897,28898,28901,28904,28906,28908,28910,28912,28914,28916,28919,28921],{"class":38,"line":39},[36,28899,28900],{"class":2443},"--user",[36,28902,28903],{"class":42}," $(",[36,28905,28768],{"class":2443},[36,28907,28771],{"class":53},[36,28909,231],{"class":42},[36,28911,1472],{"class":405},[36,28913,25580],{"class":42},[36,28915,28768],{"class":2443},[36,28917,28918],{"class":53}," -g",[36,28920,14194],{"class":42},[36,28922,26656],{"class":53},[36,28924,28925,28927,28930],{"class":38,"line":66},[36,28926,28727],{"class":42},[36,28928,28929],{"class":405},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,28931,25159],{"class":53},[36,28933,28934,28936,28939],{"class":38,"line":73},[36,28935,28727],{"class":42},[36,28937,28938],{"class":405},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,28940,25159],{"class":53},[539,28942,28943],{},"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":31,"searchDepth":66,"depth":66,"links":28945},[28946,28947,28948],{"id":27944,"depth":73,"text":27945},{"id":27954,"depth":73,"text":27955},{"id":28365,"depth":73,"text":28368},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27936,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28955,"title":28956,"body":28957,"description":31,"extension":551,"meta":30580,"navigation":553,"path":30581,"seo":30582,"stem":30583,"__hash__":30584},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28958,"toc":30575},[28959,28962,28966,28969,29191,29195,29199,29202,29308,29313,29316,29321,29324,29329,29332,29337,29340,29352,29355,29360,29367,29395,29402,29478,29483,29486,29509,29511,29586,29591,29594,29598,29606,29611,29616,29620,29631,29637,29640,29643,29667,29670,29673,29701,29704,29707,30172,30175,30180,30185,30189,30212,30217,30221,30225,30228,30231,30234,30261,30264,30267,30285,30288,30291,30313,30321,30326,30331,30335,30338,30341,30344,30347,30392,30395,30413,30416,30421,30424,30445,30448,30504,30507,30512,30516,30519,30526,30529,30532,30537,30540,30556,30559,30572],[10,28960,28956],{"id":28961},"_6手动创建docker镜像",[596,28963,28965],{"id":28964},"_61dockerfile","6.1.DockerFile",[19,28967,28968],{},"常用命令：",[758,28970,28971,28982],{},[761,28972,28973],{},[764,28974,28975,28978,28980],{},[767,28976,28977],{"align":24216},"指令",[767,28979,26350],{"align":24216},[767,28981,27973],{"align":24216},[805,28983,28984,28994,29010,29021,29032,29043,29054,29065,29076,29090,29104,29115,29129,29140,29151,29165,29180],{},[764,28985,28986,28988,28991],{},[810,28987,27851],{"align":24216},[810,28989,28990],{"align":24216},"指定基础镜像，是 Dockerfile 的起点",[810,28992,28993],{"align":24216},"FROM ubuntu:22.04",[764,28995,28996,28999,29002],{},[810,28997,28998],{"align":24216},"LABEL",[810,29000,29001],{"align":24216},"添加元数据（如作者、版本等）",[810,29003,29004,29005,29009],{"align":24216},"LABEL maintainer=”",[43,29006,29008],{"href":29007},"mailto:you@example.com","you@example.com","”",[764,29011,29012,29015,29018],{},[810,29013,29014],{"align":24216},"ENV",[810,29016,29017],{"align":24216},"设置环境变量",[810,29019,29020],{"align":24216},"ENV PORT=8080",[764,29022,29023,29026,29029],{},[810,29024,29025],{"align":24216},"ARG",[810,29027,29028],{"align":24216},"构建参数，只在构建期间可用",[810,29030,29031],{"align":24216},"ARG VERSION=1.0",[764,29033,29034,29037,29040],{},[810,29035,29036],{"align":24216},"RUN",[810,29038,29039],{"align":24216},"构建镜像时运行命令",[810,29041,29042],{"align":24216},"RUN apt-get update && apt-get install -y curl",[764,29044,29045,29048,29051],{},[810,29046,29047],{"align":24216},"COPY",[810,29049,29050],{"align":24216},"复制文件到镜像中",[810,29052,29053],{"align":24216},"COPY . \u002Fapp",[764,29055,29056,29059,29062],{},[810,29057,29058],{"align":24216},"ADD",[810,29060,29061],{"align":24216},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[810,29063,29064],{"align":24216},"ADD archive.tar.gz \u002Fdata\u002F",[764,29066,29067,29070,29073],{},[810,29068,29069],{"align":24216},"WORKDIR",[810,29071,29072],{"align":24216},"设置工作目录",[810,29074,29075],{"align":24216},"WORKDIR \u002Fopt",[764,29077,29078,29081,29084],{},[810,29079,29080],{"align":24216},"CMD",[810,29082,29083],{"align":24216},"设置容器启动时默认命令（可被 docker run 覆盖）",[810,29085,29086,29087],{"align":24216},"CMD ",[36,29088,29089],{},"“node”, “index.js”",[764,29091,29092,29095,29098],{},[810,29093,29094],{"align":24216},"ENTRYPOINT",[810,29096,29097],{"align":24216},"设置容器启动时固定命令（通常用于 CLI 工具等）",[810,29099,29100,29101],{"align":24216},"ENTRYPOINT ",[36,29102,29103],{},"“python3”",[764,29105,29106,29109,29112],{},[810,29107,29108],{"align":24216},"EXPOSE",[810,29110,29111],{"align":24216},"声明镜像内服务监听的端口（不会自动映射）",[810,29113,29114],{"align":24216},"EXPOSE 80",[764,29116,29117,29120,29123],{},[810,29118,29119],{"align":24216},"VOLUME",[810,29121,29122],{"align":24216},"声明数据卷挂载点",[810,29124,29125,29126],{"align":24216},"VOLUME ",[36,29127,29128],{},"“\u002Fdata”",[764,29130,29131,29134,29137],{},[810,29132,29133],{"align":24216},"USER",[810,29135,29136],{"align":24216},"设置后续命令执行的用户",[810,29138,29139],{"align":24216},"USER appuser",[764,29141,29142,29145,29148],{},[810,29143,29144],{"align":24216},"ONBUILD",[810,29146,29147],{"align":24216},"当镜像作为其他镜像基础镜像时触发的构建指令",[810,29149,29150],{"align":24216},"ONBUILD COPY . \u002Fsrc",[764,29152,29153,29156,29159],{},[810,29154,29155],{"align":24216},"SHELL",[810,29157,29158],{"align":24216},"更改默认 shell，比如将 sh -c 改为 bash -c",[810,29160,29161,29162],{"align":24216},"SHELL ",[36,29163,29164],{},"“\u002Fbin\u002Fbash”, “-c”",[764,29166,29167,29170,29173],{},[810,29168,29169],{"align":24216},"HEALTHCHECK",[810,29171,29172],{"align":24216},"定义容器运行时的健康检查命令",[810,29174,29175,29176],{"align":24216},"`HEALTHCHECK CMD curl –fail ",[43,29177,29178],{"href":29178,"rel":29179},"http:\u002F\u002Flocalhost:8080",[24345],[764,29181,29182,29185,29188],{},[810,29183,29184],{"align":24216},"STOPSIGNAL",[810,29186,29187],{"align":24216},"容器停止时发送的信号",[810,29189,29190],{"align":24216},"STOPSIGNAL SIGKILL",[596,29192,29194],{"id":29193},"_62自己创建容器","6.2.自己创建容器",[22478,29196,29198],{"id":29197},"_621手动创建","6.2.1.手动创建",[19,29200,29201],{},"在x86电脑上编译x86的：",[26,29203,29205],{"className":24302,"code":29204,"language":24304,"meta":31,"style":31},"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",[33,29206,29207,29223,29227,29240,29244,29257,29261,29274,29278,29291,29295],{"__ignoreMap":31},[36,29208,29209,29211,29214,29217,29220],{"class":38,"line":39},[36,29210,27034],{"class":2443},[36,29212,29213],{"class":405}," build",[36,29215,29216],{"class":53}," -t",[36,29218,29219],{"class":405}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,29221,29222],{"class":405}," .\n",[36,29224,29225],{"class":38,"line":66},[36,29226,2880],{"emptyLinePlaceholder":553},[36,29228,29229,29231,29233,29235,29238],{"class":38,"line":73},[36,29230,27034],{"class":2443},[36,29232,29213],{"class":405},[36,29234,29216],{"class":53},[36,29236,29237],{"class":405}," ros-noetic-focal:latest",[36,29239,29222],{"class":405},[36,29241,29242],{"class":38,"line":79},[36,29243,2880],{"emptyLinePlaceholder":553},[36,29245,29246,29248,29250,29252,29255],{"class":38,"line":85},[36,29247,27034],{"class":2443},[36,29249,29213],{"class":405},[36,29251,29216],{"class":53},[36,29253,29254],{"class":405}," ros-humble-jammy:latest",[36,29256,29222],{"class":405},[36,29258,29259],{"class":38,"line":419},[36,29260,2880],{"emptyLinePlaceholder":553},[36,29262,29263,29265,29267,29269,29272],{"class":38,"line":425},[36,29264,27034],{"class":2443},[36,29266,29213],{"class":405},[36,29268,29216],{"class":53},[36,29270,29271],{"class":405}," ros-jazzy-noble:latest",[36,29273,29222],{"class":405},[36,29275,29276],{"class":38,"line":431},[36,29277,2880],{"emptyLinePlaceholder":553},[36,29279,29280,29282,29284,29286,29289],{"class":38,"line":437},[36,29281,27034],{"class":2443},[36,29283,29213],{"class":405},[36,29285,29216],{"class":53},[36,29287,29288],{"class":405}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,29290,29222],{"class":405},[36,29292,29293],{"class":38,"line":443},[36,29294,2880],{"emptyLinePlaceholder":553},[36,29296,29297,29299,29301,29303,29306],{"class":38,"line":2092},[36,29298,27034],{"class":2443},[36,29300,29213],{"class":405},[36,29302,29216],{"class":53},[36,29304,29305],{"class":405}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,29307,29222],{"class":405},[19,29309,29310],{},[519,29311],{"alt":31,"src":29312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29314,29315],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29317,29318],{},[519,29319],{"alt":31,"src":29320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29322,29323],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[579,29325,29326],{},[582,29327,29328],{},"创建 Docker Hub 账户",[19,29330,29331],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[579,29333,29334],{"start":66},[582,29335,29336],{},"登录 Docker Hub",[19,29338,29339],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,29341,29343],{"className":24302,"code":29342,"language":24304,"meta":31,"style":31},"docker login\n",[33,29344,29345],{"__ignoreMap":31},[36,29346,29347,29349],{"class":38,"line":39},[36,29348,27034],{"class":2443},[36,29350,29351],{"class":405}," login\n",[19,29353,29354],{},"输入你的 Docker Hub 用户名和密码进行验证。",[579,29356,29357],{},[582,29358,29359],{},"为你的镜像打标签",[19,29361,29362,29363,29366],{},"Docker Hub 使用 ",[33,29364,29365],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,29368,29370],{"className":24302,"code":29369,"language":24304,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,29371,29372],{"__ignoreMap":31},[36,29373,29374,29376,29379,29381,29384,29387,29390,29392],{"class":38,"line":39},[36,29375,27034],{"class":2443},[36,29377,29378],{"class":405}," tag",[36,29380,29271],{"class":405},[36,29382,29383],{"class":46}," \u003C",[36,29385,29386],{"class":405},"你的用户",[36,29388,29389],{"class":42},"名",[36,29391,1573],{"class":46},[36,29393,29394],{"class":405},"\u002Fros-jazzy-noble:latest\n",[19,29396,29397,29398,29401],{},"例如，如果你的 Docker Hub 用户名是 ",[33,29399,29400],{},"tungchiahui","，你应该执行：",[26,29403,29405],{"className":24302,"code":29404,"language":24304,"meta":31,"style":31},"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",[33,29406,29407,29418,29422,29433,29437,29448,29452,29463,29467],{"__ignoreMap":31},[36,29408,29409,29411,29413,29415],{"class":38,"line":39},[36,29410,27034],{"class":2443},[36,29412,29378],{"class":405},[36,29414,29237],{"class":405},[36,29416,29417],{"class":405}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,29419,29420],{"class":38,"line":66},[36,29421,2880],{"emptyLinePlaceholder":553},[36,29423,29424,29426,29428,29430],{"class":38,"line":73},[36,29425,27034],{"class":2443},[36,29427,29378],{"class":405},[36,29429,29254],{"class":405},[36,29431,29432],{"class":405}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,29434,29435],{"class":38,"line":79},[36,29436,2880],{"emptyLinePlaceholder":553},[36,29438,29439,29441,29443,29445],{"class":38,"line":85},[36,29440,27034],{"class":2443},[36,29442,29378],{"class":405},[36,29444,29271],{"class":405},[36,29446,29447],{"class":405}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,29449,29450],{"class":38,"line":419},[36,29451,2880],{"emptyLinePlaceholder":553},[36,29453,29454,29456,29458,29460],{"class":38,"line":425},[36,29455,27034],{"class":2443},[36,29457,29378],{"class":405},[36,29459,29288],{"class":405},[36,29461,29462],{"class":405}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,29464,29465],{"class":38,"line":431},[36,29466,2880],{"emptyLinePlaceholder":553},[36,29468,29469,29471,29473,29475],{"class":38,"line":437},[36,29470,27034],{"class":2443},[36,29472,29378],{"class":405},[36,29474,29305],{"class":405},[36,29476,29477],{"class":405}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[579,29479,29480],{"start":66},[582,29481,29482],{},"推送镜像到 Docker Hub",[19,29484,29485],{},"使用以下命令将镜像推送到 Docker Hub：",[26,29487,29489],{"className":24302,"code":29488,"language":24304,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,29490,29491],{"__ignoreMap":31},[36,29492,29493,29495,29498,29500,29502,29504,29506],{"class":38,"line":39},[36,29494,27034],{"class":2443},[36,29496,29497],{"class":405}," push",[36,29499,29383],{"class":46},[36,29501,29386],{"class":405},[36,29503,29389],{"class":42},[36,29505,1573],{"class":46},[36,29507,29508],{"class":405},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29510,15113],{},[26,29512,29514],{"className":24302,"code":29513,"language":24304,"meta":31,"style":31},"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",[33,29515,29516,29524,29528,29536,29540,29548,29552,29561,29565,29573,29577],{"__ignoreMap":31},[36,29517,29518,29520,29522],{"class":38,"line":39},[36,29519,27034],{"class":2443},[36,29521,29497],{"class":405},[36,29523,29417],{"class":405},[36,29525,29526],{"class":38,"line":66},[36,29527,2880],{"emptyLinePlaceholder":553},[36,29529,29530,29532,29534],{"class":38,"line":73},[36,29531,27034],{"class":2443},[36,29533,29497],{"class":405},[36,29535,29432],{"class":405},[36,29537,29538],{"class":38,"line":79},[36,29539,2880],{"emptyLinePlaceholder":553},[36,29541,29542,29544,29546],{"class":38,"line":85},[36,29543,27034],{"class":2443},[36,29545,29497],{"class":405},[36,29547,29447],{"class":405},[36,29549,29550],{"class":38,"line":419},[36,29551,2880],{"emptyLinePlaceholder":553},[36,29553,29554,29556,29558],{"class":38,"line":425},[36,29555,27034],{"class":2443},[36,29557,29497],{"class":405},[36,29559,29560],{"class":405}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,29562,29563],{"class":38,"line":431},[36,29564,2880],{"emptyLinePlaceholder":553},[36,29566,29567,29569,29571],{"class":38,"line":437},[36,29568,27034],{"class":2443},[36,29570,29497],{"class":405},[36,29572,29477],{"class":405},[36,29574,29575],{"class":38,"line":443},[36,29576,2880],{"emptyLinePlaceholder":553},[36,29578,29579,29581,29583],{"class":38,"line":2092},[36,29580,27034],{"class":2443},[36,29582,29497],{"class":405},[36,29584,29585],{"class":405}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[579,29587,29588],{"start":73},[582,29589,29590],{},"验证推送成功",[19,29592,29593],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29595,29596],{},[770,29597,4264],{},[1620,29599,29600,29603],{},[582,29601,29602],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[582,29604,29605],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29607,29608],{},[519,29609],{"alt":31,"src":29610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29612,29613],{},[519,29614],{"alt":31,"src":29615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22478,29617,29619],{"id":29618},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29621,29622,29623,29626,29627,29630],{},"如果您想在 ",[770,29624,29625],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[770,29628,29629],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29632,29633,29634],{},"1. ",[770,29635,29636],{},"启用 Docker 跨平台构建",[19,29638,29639],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29641,29642],{},"第一步：启用 buildx（只需执行一次）",[26,29644,29646],{"className":24302,"code":29645,"language":24304,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,29647,29648],{"__ignoreMap":31},[36,29649,29650,29652,29655,29658,29661,29664],{"class":38,"line":39},[36,29651,27034],{"class":2443},[36,29653,29654],{"class":405}," buildx",[36,29656,29657],{"class":405}," create",[36,29659,29660],{"class":53}," --name",[36,29662,29663],{"class":405}," multiarch_builder",[36,29665,29666],{"class":53}," --use\n",[19,29668,29669],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29671,29672],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,29674,29676],{"className":24302,"code":29675,"language":24304,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,29677,29678],{"__ignoreMap":31},[36,29679,29680,29682,29684,29686,29689,29692,29695,29698],{"class":38,"line":39},[36,29681,27034],{"class":2443},[36,29683,27711],{"class":405},[36,29685,27714],{"class":53},[36,29687,29688],{"class":53}," --privileged",[36,29690,29691],{"class":405}," multiarch\u002Fqemu-user-static",[36,29693,29694],{"class":53}," --reset",[36,29696,29697],{"class":53}," -p",[36,29699,29700],{"class":405}," yes\n",[19,29702,29703],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29705,29706],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,29708,29710],{"className":24302,"code":29709,"language":24304,"meta":31,"style":31},"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",[33,29711,29712,29754,29758,29763,29773,29783,29792,29798,29802,29806,29816,29824,29833,29839,29843,29847,29857,29865,29874,29880,29884,29888,29898,29906,29915,29921,29925,29929,29939,29947,29956,29962,29966,29970,29980,29988,29997,30003,30007,30011,30021,30029,30038,30044,30048,30052,30062,30070,30079,30085,30089,30093,30103,30111,30120,30126,30130,30134,30145,30153,30162,30168],{"__ignoreMap":31},[36,29713,29714,29716,29718,29720,29723,29726,29728,29730,29733,29735,29737,29739,29741,29744,29747,29749,29752],{"class":38,"line":39},[36,29715,27034],{"class":2443},[36,29717,29654],{"class":405},[36,29719,29213],{"class":405},[36,29721,29722],{"class":53}," --platform",[36,29724,29725],{"class":405}," linux\u002Famd64,linux\u002Farm64",[36,29727,29216],{"class":53},[36,29729,29383],{"class":46},[36,29731,29732],{"class":405},"你的镜像",[36,29734,29389],{"class":42},[36,29736,1573],{"class":46},[36,29738,1472],{"class":405},[36,29740,1523],{"class":46},[36,29742,29743],{"class":405},"标",[36,29745,29746],{"class":42},"签",[36,29748,1573],{"class":46},[36,29750,29751],{"class":53}," --push",[36,29753,29222],{"class":405},[36,29755,29756],{"class":38,"line":66},[36,29757,2880],{"emptyLinePlaceholder":553},[36,29759,29760],{"class":38,"line":73},[36,29761,29762],{"class":69},"# 例子：\n",[36,29764,29765,29767,29769,29771],{"class":38,"line":79},[36,29766,27034],{"class":2443},[36,29768,29654],{"class":405},[36,29770,29213],{"class":405},[36,29772,25159],{"class":53},[36,29774,29775,29778,29781],{"class":38,"line":85},[36,29776,29777],{"class":42},"--platform ",[36,29779,29780],{"class":405},"linux\u002Famd64,linux\u002Farm64",[36,29782,25159],{"class":53},[36,29784,29785,29787,29790],{"class":38,"line":419},[36,29786,29216],{"class":53},[36,29788,29789],{"class":405}," tungchiahui\u002Fros:noetic-focal",[36,29791,25159],{"class":53},[36,29793,29794,29796],{"class":38,"line":425},[36,29795,29751],{"class":53},[36,29797,25159],{"class":53},[36,29799,29800],{"class":38,"line":431},[36,29801,29222],{"class":405},[36,29803,29804],{"class":38,"line":437},[36,29805,2880],{"emptyLinePlaceholder":553},[36,29807,29808,29810,29812,29814],{"class":38,"line":443},[36,29809,27034],{"class":2443},[36,29811,29654],{"class":405},[36,29813,29213],{"class":405},[36,29815,25159],{"class":53},[36,29817,29818,29820,29822],{"class":38,"line":2092},[36,29819,29777],{"class":42},[36,29821,29780],{"class":405},[36,29823,25159],{"class":53},[36,29825,29826,29828,29831],{"class":38,"line":2097},[36,29827,29216],{"class":53},[36,29829,29830],{"class":405}," tungchiahui\u002Fros:humble-jammy",[36,29832,25159],{"class":53},[36,29834,29835,29837],{"class":38,"line":2103},[36,29836,29751],{"class":53},[36,29838,25159],{"class":53},[36,29840,29841],{"class":38,"line":2108},[36,29842,29222],{"class":405},[36,29844,29845],{"class":38,"line":2122},[36,29846,2880],{"emptyLinePlaceholder":553},[36,29848,29849,29851,29853,29855],{"class":38,"line":2127},[36,29850,27034],{"class":2443},[36,29852,29654],{"class":405},[36,29854,29213],{"class":405},[36,29856,25159],{"class":53},[36,29858,29859,29861,29863],{"class":38,"line":2133},[36,29860,29777],{"class":42},[36,29862,29780],{"class":405},[36,29864,25159],{"class":53},[36,29866,29867,29869,29872],{"class":38,"line":2154},[36,29868,29216],{"class":53},[36,29870,29871],{"class":405}," tungchiahui\u002Fros:jazzy-noble",[36,29873,25159],{"class":53},[36,29875,29876,29878],{"class":38,"line":2159},[36,29877,29751],{"class":53},[36,29879,25159],{"class":53},[36,29881,29882],{"class":38,"line":2173},[36,29883,29222],{"class":405},[36,29885,29886],{"class":38,"line":2178},[36,29887,2880],{"emptyLinePlaceholder":553},[36,29889,29890,29892,29894,29896],{"class":38,"line":2207},[36,29891,26801],{"class":2443},[36,29893,29654],{"class":405},[36,29895,29213],{"class":405},[36,29897,25159],{"class":53},[36,29899,29900,29902,29904],{"class":38,"line":2212},[36,29901,29777],{"class":42},[36,29903,29780],{"class":405},[36,29905,25159],{"class":53},[36,29907,29908,29910,29913],{"class":38,"line":2229},[36,29909,29216],{"class":53},[36,29911,29912],{"class":405}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,29914,25159],{"class":53},[36,29916,29917,29919],{"class":38,"line":2234},[36,29918,29751],{"class":53},[36,29920,25159],{"class":53},[36,29922,29923],{"class":38,"line":2239},[36,29924,29222],{"class":405},[36,29926,29927],{"class":38,"line":2244},[36,29928,2880],{"emptyLinePlaceholder":553},[36,29930,29931,29933,29935,29937],{"class":38,"line":2258},[36,29932,27034],{"class":2443},[36,29934,29654],{"class":405},[36,29936,29213],{"class":405},[36,29938,25159],{"class":53},[36,29940,29941,29943,29945],{"class":38,"line":2263},[36,29942,29777],{"class":42},[36,29944,29780],{"class":405},[36,29946,25159],{"class":53},[36,29948,29949,29951,29954],{"class":38,"line":3057},[36,29950,29216],{"class":53},[36,29952,29953],{"class":405}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,29955,25159],{"class":53},[36,29957,29958,29960],{"class":38,"line":3071},[36,29959,29751],{"class":53},[36,29961,25159],{"class":53},[36,29963,29964],{"class":38,"line":3079},[36,29965,29222],{"class":405},[36,29967,29968],{"class":38,"line":3084},[36,29969,2880],{"emptyLinePlaceholder":553},[36,29971,29972,29974,29976,29978],{"class":38,"line":3090},[36,29973,26801],{"class":2443},[36,29975,29654],{"class":405},[36,29977,29213],{"class":405},[36,29979,25159],{"class":53},[36,29981,29982,29984,29986],{"class":38,"line":3096},[36,29983,29777],{"class":42},[36,29985,29780],{"class":405},[36,29987,25159],{"class":53},[36,29989,29990,29992,29995],{"class":38,"line":3101},[36,29991,29216],{"class":53},[36,29993,29994],{"class":405}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,29996,25159],{"class":53},[36,29998,29999,30001],{"class":38,"line":8428},[36,30000,29751],{"class":53},[36,30002,25159],{"class":53},[36,30004,30005],{"class":38,"line":8452},[36,30006,29222],{"class":405},[36,30008,30009],{"class":38,"line":8457},[36,30010,2880],{"emptyLinePlaceholder":553},[36,30012,30013,30015,30017,30019],{"class":38,"line":8463},[36,30014,27034],{"class":2443},[36,30016,29654],{"class":405},[36,30018,29213],{"class":405},[36,30020,25159],{"class":53},[36,30022,30023,30025,30027],{"class":38,"line":8490},[36,30024,29777],{"class":42},[36,30026,29780],{"class":405},[36,30028,25159],{"class":53},[36,30030,30031,30033,30036],{"class":38,"line":8495},[36,30032,29216],{"class":53},[36,30034,30035],{"class":405}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,30037,25159],{"class":53},[36,30039,30040,30042],{"class":38,"line":8501},[36,30041,29751],{"class":53},[36,30043,25159],{"class":53},[36,30045,30046],{"class":38,"line":8513},[36,30047,29222],{"class":405},[36,30049,30050],{"class":38,"line":8525},[36,30051,2880],{"emptyLinePlaceholder":553},[36,30053,30054,30056,30058,30060],{"class":38,"line":8537},[36,30055,27034],{"class":2443},[36,30057,29654],{"class":405},[36,30059,29213],{"class":405},[36,30061,25159],{"class":53},[36,30063,30064,30066,30068],{"class":38,"line":10196},[36,30065,29777],{"class":42},[36,30067,29780],{"class":405},[36,30069,25159],{"class":53},[36,30071,30072,30074,30077],{"class":38,"line":10221},[36,30073,29216],{"class":53},[36,30075,30076],{"class":405}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30078,25159],{"class":53},[36,30080,30081,30083],{"class":38,"line":10244},[36,30082,29751],{"class":53},[36,30084,25159],{"class":53},[36,30086,30087],{"class":38,"line":10268},[36,30088,29222],{"class":405},[36,30090,30091],{"class":38,"line":10273},[36,30092,2880],{"emptyLinePlaceholder":553},[36,30094,30095,30097,30099,30101],{"class":38,"line":10278},[36,30096,26801],{"class":2443},[36,30098,29654],{"class":405},[36,30100,29213],{"class":405},[36,30102,25159],{"class":53},[36,30104,30105,30107,30109],{"class":38,"line":10283},[36,30106,29777],{"class":42},[36,30108,29780],{"class":405},[36,30110,25159],{"class":53},[36,30112,30113,30115,30118],{"class":38,"line":10292},[36,30114,29216],{"class":53},[36,30116,30117],{"class":405}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,30119,25159],{"class":53},[36,30121,30122,30124],{"class":38,"line":10297},[36,30123,29751],{"class":53},[36,30125,25159],{"class":53},[36,30127,30128],{"class":38,"line":10303},[36,30129,29222],{"class":405},[36,30131,30132],{"class":38,"line":10324},[36,30133,2880],{"emptyLinePlaceholder":553},[36,30135,30136,30139,30141,30143],{"class":38,"line":10330},[36,30137,30138],{"class":2443},"  docker",[36,30140,29654],{"class":405},[36,30142,29213],{"class":405},[36,30144,25159],{"class":53},[36,30146,30147,30149,30151],{"class":38,"line":10344},[36,30148,29777],{"class":42},[36,30150,29780],{"class":405},[36,30152,25159],{"class":53},[36,30154,30155,30157,30160],{"class":38,"line":10350},[36,30156,29216],{"class":53},[36,30158,30159],{"class":405}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30161,25159],{"class":53},[36,30163,30164,30166],{"class":38,"line":10377},[36,30165,29751],{"class":53},[36,30167,25159],{"class":53},[36,30169,30170],{"class":38,"line":10386},[36,30171,29222],{"class":405},[19,30173,30174],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30176,30177],{},[519,30178],{"alt":31,"src":30179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30181,30182],{},[519,30183],{"alt":31,"src":30184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22478,30186,30188],{"id":30187},"_623清除构建缓存","6.2.3.清除构建缓存",[26,30190,30192],{"className":24302,"code":30191,"language":24304,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,30193,30194,30199],{"__ignoreMap":31},[36,30195,30196],{"class":38,"line":39},[36,30197,30198],{"class":69},"# 清理BuildKit构建缓存\n",[36,30200,30201,30203,30206,30209],{"class":38,"line":66},[36,30202,27034],{"class":2443},[36,30204,30205],{"class":405}," builder",[36,30207,30208],{"class":405}," prune",[36,30210,30211],{"class":53}," -f\n",[19,30213,30214],{},[519,30215],{"alt":31,"src":30216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[596,30218,30220],{"id":30219},"_63补充","6.3.补充",[22478,30222,30224],{"id":30223},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30226,30227],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30229,30230],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30232,30233],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,30235,30237],{"className":24302,"code":30236,"language":24304,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,30238,30239,30246],{"__ignoreMap":31},[36,30240,30241,30243],{"class":38,"line":39},[36,30242,27851],{"class":2443},[36,30244,30245],{"class":405}," nginx\n",[36,30247,30248,30250,30253,30256,30258],{"class":38,"line":66},[36,30249,29036],{"class":2443},[36,30251,30252],{"class":405}," echo",[36,30254,30255],{"class":405}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,30257,26703],{"class":46},[36,30259,30260],{"class":405}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30262,30263],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30265,30266],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,30268,30270],{"className":24302,"code":30269,"language":24304,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,30271,30272],{"__ignoreMap":31},[36,30273,30274,30276,30278,30280,30283],{"class":38,"line":39},[36,30275,27034],{"class":2443},[36,30277,29213],{"class":405},[36,30279,29216],{"class":53},[36,30281,30282],{"class":405}," nginx:tuling",[36,30284,29222],{"class":405},[19,30286,30287],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30289,30290],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,30292,30294],{"className":24302,"code":30293,"language":24304,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,30295,30296],{"__ignoreMap":31},[36,30297,30298,30300,30302,30305,30307,30310],{"class":38,"line":39},[36,30299,27034],{"class":2443},[36,30301,27711],{"class":405},[36,30303,30304],{"class":53}," -d",[36,30306,29697],{"class":53},[36,30308,30309],{"class":405}," 92:80",[36,30311,30312],{"class":405}," nginx:tuling\n",[19,30314,30315,30316],{},"4、访问 ",[43,30317,30320],{"href":30318,"rel":30319},"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",[24345],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30322,30323],{},[519,30324],{"alt":31,"src":30325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30327,30328],{},[519,30329],{"alt":31,"src":30330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22478,30332,30334],{"id":30333},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30336,30337],{},"只需要知道大体流程即可",[19,30339,30340],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30342,30343],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30345,30346],{},"2、在Dockerfile中添加以下内容",[26,30348,30350],{"className":26572,"code":30349,"language":26574,"meta":31,"style":31},"# 基于哪个镜像\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",[33,30351,30352,30357,30362,30367,30372,30377,30382,30387],{"__ignoreMap":31},[36,30353,30354],{"class":38,"line":39},[36,30355,30356],{},"# 基于哪个镜像\n",[36,30358,30359],{"class":38,"line":66},[36,30360,30361],{},"From java:8\n",[36,30363,30364],{"class":38,"line":73},[36,30365,30366],{},"# 复制文件到容器\n",[36,30368,30369],{"class":38,"line":79},[36,30370,30371],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,30373,30374],{"class":38,"line":85},[36,30375,30376],{},"# 声明需要暴露的端口\n",[36,30378,30379],{"class":38,"line":419},[36,30380,30381],{},"EXPOSE 8877\n",[36,30383,30384],{"class":38,"line":425},[36,30385,30386],{},"# 配置容器启动后执行的命令\n",[36,30388,30389],{"class":38,"line":431},[36,30390,30391],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30393,30394],{},"3、使用docker build命令构建镜像",[26,30396,30398],{"className":24302,"code":30397,"language":24304,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,30399,30400],{"__ignoreMap":31},[36,30401,30402,30404,30406,30408,30411],{"class":38,"line":39},[36,30403,27034],{"class":2443},[36,30405,29213],{"class":405},[36,30407,29216],{"class":53},[36,30409,30410],{"class":405}," tulingmall-member:0.0.5",[36,30412,29222],{"class":405},[19,30414,30415],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30417,30418],{},[519,30419],{"alt":31,"src":30420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30422,30423],{},"4、启动镜像，加-d可在后台启动",[26,30425,30427],{"className":24302,"code":30426,"language":24304,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,30428,30429],{"__ignoreMap":31},[36,30430,30431,30433,30435,30437,30439,30442],{"class":38,"line":39},[36,30432,27034],{"class":2443},[36,30434,27711],{"class":405},[36,30436,30304],{"class":53},[36,30438,29697],{"class":53},[36,30440,30441],{"class":405}," 8877:8877",[36,30443,30444],{"class":405}," tulingmall-member:0.0.5\n",[19,30446,30447],{},"加上JVM参数：",[26,30449,30451],{"className":24302,"code":30450,"language":24304,"meta":31,"style":31},"# --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",[33,30452,30453,30458,30473,30483,30492,30499],{"__ignoreMap":31},[36,30454,30455],{"class":38,"line":39},[36,30456,30457],{"class":69},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,30459,30460,30462,30464,30467,30469,30471],{"class":38,"line":66},[36,30461,27034],{"class":2443},[36,30463,27711],{"class":405},[36,30465,30466],{"class":53},"  -d",[36,30468,29697],{"class":53},[36,30470,30441],{"class":405},[36,30472,25159],{"class":53},[36,30474,30475,30477,30480],{"class":38,"line":73},[36,30476,28609],{"class":42},[36,30478,30479],{"class":405},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,30481,30482],{"class":53},"  \\\n",[36,30484,30485,30487,30490],{"class":38,"line":79},[36,30486,28609],{"class":42},[36,30488,30489],{"class":405},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,30491,30482],{"class":53},[36,30493,30494,30497],{"class":38,"line":85},[36,30495,30496],{"class":42},"--cap-add=SYS_PTRACE  ",[36,30498,26656],{"class":53},[36,30500,30501],{"class":38,"line":419},[36,30502,30503],{"class":42},"tulingmall-member:0.0.5\n",[19,30505,30506],{},"5、访问会员服务接口",[19,30508,30509],{},[519,30510],{"alt":31,"src":30511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22478,30513,30515],{"id":30514},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30517,30518],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30520,30521,30522],{},"阿里云docker镜像仓库：",[43,30523,30524],{"href":30524,"rel":30525},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24345],[19,30527,30528],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30530,30531],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30533,30534],{},[519,30535],{"alt":31,"src":30536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30538,30539],{},"要把镜像推送到镜像仓库",[26,30541,30543],{"className":24302,"code":30542,"language":24304,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,30544,30545],{"__ignoreMap":31},[36,30546,30547,30549,30551,30553],{"class":38,"line":39},[36,30548,27034],{"class":2443},[36,30550,29378],{"class":405},[36,30552,30410],{"class":405},[36,30554,30555],{"class":405}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30557,30558],{},"最后将镜像推送到远程仓库",[26,30560,30562],{"className":24302,"code":30561,"language":24304,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,30563,30564],{"__ignoreMap":31},[36,30565,30566,30568,30570],{"class":38,"line":39},[36,30567,27034],{"class":2443},[36,30569,29497],{"class":405},[36,30571,30555],{"class":405},[539,30573,30574],{},"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":31,"searchDepth":66,"depth":66,"links":30576},[30577,30578,30579],{"id":28964,"depth":73,"text":28965},{"id":29193,"depth":73,"text":29194},{"id":30219,"depth":73,"text":30220},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28956,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30586,"title":30587,"body":30588,"description":31,"extension":551,"meta":30731,"navigation":553,"path":30732,"seo":30733,"stem":30734,"__hash__":30735},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30589,"toc":30729},[30590,30593,30598,30603,30606,30611,30616,30619,30624,30629,30632,30637,30640,30643,30646,30649,30652,30655,30675,30697,30700,30703,30723,30726],[10,30591,30587],{"id":30592},"_7vscode远程开发",[579,30594,30595],{},[582,30596,30597],{},"插件1：微软Docker工具",[19,30599,30600],{},[519,30601],{"alt":31,"src":30602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30604,30605],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30607,30608],{},[519,30609],{"alt":31,"src":30610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[579,30612,30613],{"start":66},[582,30614,30615],{},"插件2：微软Docker远程开发工具",[19,30617,30618],{},"下面这是远程开发的插件。",[19,30620,30621],{},[519,30622],{"alt":31,"src":30623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30625,30626],{},[519,30627],{"alt":31,"src":30628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30630,30631],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30633,30634],{},[519,30635],{"alt":31,"src":30636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30638,30639],{},"安装完拓展之后，vscode进行链接：",[19,30641,30642],{},"1.按ctrl+shift+p",[19,30644,30645],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30647,30648],{},"3.选择目前运行的容器",[19,30650,30651],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30653,30654],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,30656,30658],{"className":24302,"code":30657,"language":24304,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,30659,30660],{"__ignoreMap":31},[36,30661,30662,30664,30666,30669,30672],{"class":38,"line":39},[36,30663,27034],{"class":2443},[36,30665,27711],{"class":405},[36,30667,30668],{"class":53}," -v",[36,30670,30671],{"class":405}," 主机目录:容器目录",[36,30673,30674],{"class":405}," image-name\n",[26,30676,30678],{"className":24302,"code":30677,"language":24304,"meta":31,"style":31},"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",[33,30679,30680],{"__ignoreMap":31},[36,30681,30682,30684,30686,30689,30691,30694],{"class":38,"line":39},[36,30683,27034],{"class":2443},[36,30685,27711],{"class":405},[36,30687,30688],{"class":53}," -it",[36,30690,30668],{"class":53},[36,30692,30693],{"class":405}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,30695,30696],{"class":405}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30698,30699],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30701,30702],{},"查看挂载情况：",[26,30704,30706],{"className":24302,"code":30705,"language":24304,"meta":31,"style":31},"mount | grep -i project\n",[33,30707,30708],{"__ignoreMap":31},[36,30709,30710,30713,30715,30718,30720],{"class":38,"line":39},[36,30711,30712],{"class":2443},"mount",[36,30714,25590],{"class":46},[36,30716,30717],{"class":2443}," grep",[36,30719,26911],{"class":53},[36,30721,30722],{"class":405}," project\n",[19,30724,30725],{},"也可以通过ls来进行查看",[539,30727,30728],{},"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":31,"searchDepth":66,"depth":66,"links":30730},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30587,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30737,"title":30738,"body":30739,"description":550,"extension":551,"meta":30743,"navigation":553,"path":30745,"seo":30746,"stem":30747,"__hash__":30748},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30740,"toc":30741},[],{"title":31,"searchDepth":66,"depth":66,"links":30742},[],{"category":30744},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30738,"description":550},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30750,"title":30751,"body":30752,"description":550,"extension":551,"meta":30756,"navigation":553,"path":30757,"seo":30758,"stem":30759,"__hash__":30760},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30753,"toc":30754},[],{"title":31,"searchDepth":66,"depth":66,"links":30755},[],{"category":30744},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30751,"description":550},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30762,"title":30763,"body":30764,"description":550,"extension":551,"meta":31054,"navigation":553,"path":31055,"seo":31056,"stem":31057,"__hash__":31058},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30765,"toc":31052},[30766,30769,30777,30792,30797,30848,30851,30857,31041,31046,31049],[10,30767,30763],{"id":30768},"_1验证深度学习环境",[19,30770,30771,30772],{},"关于环境的安装，看",[43,30773,30776],{"href":30774,"rel":30775},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24345],"Pytorch-->深度学习",[19,30778,30779,30780,30783,30784,30787,30788,30791],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,30781,30782],{},"pytorch-cuda=12.4"," 是一个“ ",[770,30785,30786],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[770,30789,30790],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30793,30794],{},[519,30795],{"alt":31,"src":30796},"\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",[26,30798,30800],{"className":24302,"code":30799,"language":24304,"meta":31,"style":31},"# 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",[33,30801,30802,30807],{"__ignoreMap":31},[36,30803,30804],{"class":38,"line":39},[36,30805,30806],{"class":69},"# CUDA 12.4\n",[36,30808,30809,30812,30814,30817,30820,30823,30826,30829,30831,30834,30837,30840,30843,30845],{"class":38,"line":66},[36,30810,30811],{"class":2443},"conda",[36,30813,24314],{"class":405},[36,30815,30816],{"class":405}," pytorch==",[36,30818,30819],{"class":53},"2.5.1",[36,30821,30822],{"class":405}," torchvision==",[36,30824,30825],{"class":53},"0.20.1",[36,30827,30828],{"class":405}," torchaudio==",[36,30830,30819],{"class":53},[36,30832,30833],{"class":405}," pytorch-cuda=",[36,30835,30836],{"class":53},"12.4",[36,30838,30839],{"class":53}," -c",[36,30841,30842],{"class":405}," pytorch",[36,30844,30839],{"class":53},[36,30846,30847],{"class":405}," nvidia\n",[19,30849,30850],{},"）：",[19,30852,30853],{},[43,30854,30855],{"href":30855,"rel":30856},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24345],[26,30858,30860],{"className":28,"code":30859,"language":30,"meta":31,"style":31},"# 对深度学习环境进行测试\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",[33,30861,30862,30867,30875,30880,30890,30906,30911,30921,30958,30965,30976,30992,30997,31007,31019,31029],{"__ignoreMap":31},[36,30863,30864],{"class":38,"line":39},[36,30865,30866],{"class":69},"# 对深度学习环境进行测试\n",[36,30868,30869,30872],{"class":38,"line":66},[36,30870,30871],{"class":46},"import",[36,30873,30874],{"class":42}," torch\n",[36,30876,30877],{"class":38,"line":73},[36,30878,30879],{"class":69},"# 查看cuda是否被激活\n",[36,30881,30882,30885,30887],{"class":38,"line":79},[36,30883,30884],{"class":42},"flag",[36,30886,47],{"class":46},[36,30888,30889],{"class":42},"torch.cuda.is_available()\n",[36,30891,30892,30895,30897,30900,30903],{"class":38,"line":85},[36,30893,30894],{"class":53},"print",[36,30896,345],{"class":42},[36,30898,30899],{"class":405},"\"cuda:\"",[36,30901,30902],{"class":42},", flag)   ",[36,30904,30905],{"class":69},"#返回true的话说明被激活\n",[36,30907,30908],{"class":38,"line":419},[36,30909,30910],{"class":69},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,30912,30913,30916,30918],{"class":38,"line":425},[36,30914,30915],{"class":42},"ngpu",[36,30917,47],{"class":46},[36,30919,30920],{"class":53},"1\n",[36,30922,30923,30926,30928,30931,30934,30936,30939,30942,30945,30947,30949,30951,30953,30956],{"class":38,"line":431},[36,30924,30925],{"class":42},"device",[36,30927,47],{"class":46},[36,30929,30930],{"class":42},"torch.device(",[36,30932,30933],{"class":405},"\"cuda:0\"",[36,30935,2184],{"class":46},[36,30937,30938],{"class":42},"(torch.cuda.is_available() ",[36,30940,30941],{"class":46},"and",[36,30943,30944],{"class":42}," ngpu",[36,30946,1573],{"class":46},[36,30948,812],{"class":53},[36,30950,14194],{"class":42},[36,30952,2181],{"class":46},[36,30954,30955],{"class":405}," \"cpu\"",[36,30957,63],{"class":42},[36,30959,30960,30962],{"class":38,"line":437},[36,30961,30894],{"class":53},[36,30963,30964],{"class":42},"(device)\n",[36,30966,30967,30969,30972,30974],{"class":38,"line":443},[36,30968,30894],{"class":53},[36,30970,30971],{"class":42},"(torch.cuda.get_device_name(",[36,30973,812],{"class":53},[36,30975,370],{"class":42},[36,30977,30978,30980,30983,30985,30987,30989],{"class":38,"line":2092},[36,30979,30894],{"class":53},[36,30981,30982],{"class":42},"(torch.rand(",[36,30984,127],{"class":53},[36,30986,57],{"class":42},[36,30988,127],{"class":53},[36,30990,30991],{"class":42},").cuda())\n",[36,30993,30994],{"class":38,"line":2097},[36,30995,30996],{"class":69},"# 查看cuda和cudnn的版本\n",[36,30998,30999,31002,31004],{"class":38,"line":2103},[36,31000,31001],{"class":42},"cuda_version",[36,31003,47],{"class":46},[36,31005,31006],{"class":42},"torch.version.cuda\n",[36,31008,31009,31011,31013,31016],{"class":38,"line":2108},[36,31010,30894],{"class":53},[36,31012,345],{"class":42},[36,31014,31015],{"class":405},"\"cuda version\"",[36,31017,31018],{"class":42},",cuda_version)\n",[36,31020,31021,31024,31026],{"class":38,"line":2122},[36,31022,31023],{"class":42},"cudnn_version",[36,31025,47],{"class":46},[36,31027,31028],{"class":42},"torch.backends.cudnn.version()\n",[36,31030,31031,31033,31035,31038],{"class":38,"line":2127},[36,31032,30894],{"class":53},[36,31034,345],{"class":42},[36,31036,31037],{"class":405},"\"cudnn version\"",[36,31039,31040],{"class":42},",cudnn_version)\n",[19,31042,31043],{},[519,31044],{"alt":31,"src":31045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31047,31048],{},"cuda:0 指的是一块显卡",[539,31050,31051],{},"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":31,"searchDepth":66,"depth":66,"links":31053},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30763,"description":550},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31060,"title":31061,"body":31062,"description":550,"extension":551,"meta":50865,"navigation":553,"path":50866,"seo":50867,"stem":50868,"__hash__":50869},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31063,"toc":50859},[31064,31067,31071,31075,31078,31083,31088,31091,31096,31101,31106,31109,31113,31118,31122,31127,31130,31135,31138,31141,31144,31147,31152,31155,31160,31165,31170,31175,31178,31182,31185,31190,31794,31799,31802,31807,31810,31813,32276,32279,32282,32285,32288,34339,34342,34347,34352,35147,35150,35155,35933,35937,37596,37600,38314,38318,38322,38327,38332,38337,38340,38345,38350,38355,38360,38365,38369,38374,39656,39661,39664,39667,39670,39825,39828,39831,41047,41052,41747,41751,41755,41760,41765,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,41908,41913,41918,41922,41926,41929,43407,43411,45058,45062,45756,45760,45763,45766,46310,46313,46317,46320,47717,47721,47724,48302,50089,50093,50096,50856],[10,31065,31061],{"id":31066},"_2经典神经网络",[596,31068,31070],{"id":31069},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22478,31072,31074],{"id":31073},"_211原理介绍","2.1.1.原理介绍",[19,31076,31077],{},"LeNet-5",[579,31079,31080],{},[582,31081,31082],{},"原理",[19,31084,31085],{},[519,31086],{"alt":31,"src":31087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31089,31090],{},"B是batch批次；C是channel通道",[579,31092,31093],{"start":66},[582,31094,31095],{},"网络参数详细",[19,31097,31098],{},[519,31099],{"alt":31,"src":31100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31102,31103],{},[519,31104],{"alt":31,"src":31105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31107,31108],{},"AlexNet",[579,31110,31111],{},[582,31112,31082],{},[19,31114,31115],{},[519,31116],{"alt":31,"src":31117},"\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",[579,31119,31120],{"start":66},[582,31121,31095],{},[19,31123,31124],{},[519,31125],{"alt":31,"src":31126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31128,31129],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31131,31132],{},[519,31133],{"alt":31,"src":31134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31136,31137],{},"数据处理中的图像增强操作:",[19,31139,31140],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31142,31143],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31145,31146],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31148,31149],{},[519,31150],{"alt":31,"src":31151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,31153,31154],{},"提升网络精确度的方法：LRN正则化",[19,31156,31157],{},[519,31158],{"alt":31,"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-010.png",[19,31161,31162],{},[519,31163],{"alt":31,"src":31164},"\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",[579,31166,31167],{"start":73},[582,31168,31169],{},"AlexNet的总结",[19,31171,31172],{},[519,31173],{"alt":31,"src":31174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,31176,31177],{},"比LeNet模型要深一丢丢",[22478,31179,31181],{"id":31180},"_212代码实现","2.1.2.代码实现",[19,31183,31184],{},"（1）LeNet",[579,31186,31187],{},[582,31188,31189],{},"模型搭建",[26,31191,31193],{"className":28,"code":31192,"language":30,"meta":31,"style":31},"# 导入库\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",[33,31194,31195,31200,31206,31211,31224,31229,31241,31245,31265,31270,31275,31286,31291,31310,31314,31319,31368,31380,31385,31414,31449,31476,31481,31493,31498,31518,31537,31556,31560,31565,31575,31592,31603,31618,31629,31640,31655,31670,31681,31688,31692,31706,31711,31734,31739,31744,31749,31753,31758,31763,31773],{"__ignoreMap":31},[36,31196,31197],{"class":38,"line":39},[36,31198,31199],{"class":69},"# 导入库\n",[36,31201,31202,31204],{"class":38,"line":66},[36,31203,30871],{"class":46},[36,31205,30874],{"class":42},[36,31207,31208],{"class":38,"line":73},[36,31209,31210],{"class":69},"# 导入神经网络层\n",[36,31212,31213,31216,31219,31221],{"class":38,"line":79},[36,31214,31215],{"class":46},"from",[36,31217,31218],{"class":42}," torch ",[36,31220,30871],{"class":46},[36,31222,31223],{"class":42}," nn\n",[36,31225,31226],{"class":38,"line":85},[36,31227,31228],{"class":69},"# 导入展示神经网络参数的包\n",[36,31230,31231,31233,31236,31238],{"class":38,"line":419},[36,31232,31215],{"class":46},[36,31234,31235],{"class":42}," torchsummary ",[36,31237,30871],{"class":46},[36,31239,31240],{"class":42}," summary\n",[36,31242,31243],{"class":38,"line":425},[36,31244,2880],{"emptyLinePlaceholder":553},[36,31246,31247,31249,31252,31254,31257,31259,31262],{"class":38,"line":431},[36,31248,15174],{"class":46},[36,31250,31251],{"class":2443}," LeNet",[36,31253,345],{"class":42},[36,31255,31256],{"class":2443},"nn",[36,31258,1171],{"class":42},[36,31260,31261],{"class":2443},"Module",[36,31263,31264],{"class":42},"):\n",[36,31266,31267],{"class":38,"line":437},[36,31268,31269],{"class":69},"    # 模型初始化:\n",[36,31271,31272],{"class":38,"line":443},[36,31273,31274],{"class":69},"    # 定义一些网络层和激活函数\n",[36,31276,31277,31280,31283],{"class":38,"line":2092},[36,31278,31279],{"class":46},"    def",[36,31281,31282],{"class":53}," __init__",[36,31284,31285],{"class":42},"(self):\n",[36,31287,31288],{"class":38,"line":2097},[36,31289,31290],{"class":69},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,31292,31293,31296,31299,31302,31305,31308],{"class":38,"line":2103},[36,31294,31295],{"class":53},"        super",[36,31297,31298],{"class":42},"(LeNet,",[36,31300,31301],{"class":53},"self",[36,31303,31304],{"class":42},").",[36,31306,31307],{"class":53},"__init__",[36,31309,2456],{"class":42},[36,31311,31312],{"class":38,"line":2108},[36,31313,2880],{"emptyLinePlaceholder":553},[36,31315,31316],{"class":38,"line":2122},[36,31317,31318],{"class":69},"        # 定义网络层\n",[36,31320,31321,31324,31327,31329,31332,31335,31337,31339,31341,31344,31346,31348,31350,31353,31355,31357,31359,31362,31364,31366],{"class":38,"line":2127},[36,31322,31323],{"class":53},"        self",[36,31325,31326],{"class":42},".c1",[36,31328,47],{"class":46},[36,31330,31331],{"class":42},"nn.Conv2d(",[36,31333,31334],{"class":5696},"in_channels",[36,31336,47],{"class":46},[36,31338,54],{"class":53},[36,31340,57],{"class":42},[36,31342,31343],{"class":5696},"out_channels",[36,31345,47],{"class":46},[36,31347,101],{"class":53},[36,31349,57],{"class":42},[36,31351,31352],{"class":5696},"kernel_size",[36,31354,47],{"class":46},[36,31356,938],{"class":53},[36,31358,57],{"class":42},[36,31360,31361],{"class":5696},"padding",[36,31363,47],{"class":46},[36,31365,96],{"class":53},[36,31367,63],{"class":42},[36,31369,31370,31372,31375,31377],{"class":38,"line":2133},[36,31371,31323],{"class":53},[36,31373,31374],{"class":42},".sig",[36,31376,47],{"class":46},[36,31378,31379],{"class":42},"nn.Sigmoid()\n",[36,31381,31382],{"class":38,"line":2154},[36,31383,31384],{"class":69},"        # 定义池化\n",[36,31386,31387,31389,31392,31394,31397,31399,31401,31403,31405,31408,31410,31412],{"class":38,"line":2159},[36,31388,31323],{"class":53},[36,31390,31391],{"class":42},".s2",[36,31393,47],{"class":46},[36,31395,31396],{"class":42},"nn.AvgPool2d(",[36,31398,31352],{"class":5696},[36,31400,47],{"class":46},[36,31402,96],{"class":53},[36,31404,57],{"class":42},[36,31406,31407],{"class":5696},"stride",[36,31409,47],{"class":46},[36,31411,96],{"class":53},[36,31413,63],{"class":42},[36,31415,31416,31418,31421,31423,31425,31427,31429,31431,31433,31435,31437,31439,31441,31443,31445,31447],{"class":38,"line":2173},[36,31417,31323],{"class":53},[36,31419,31420],{"class":42},".c3",[36,31422,47],{"class":46},[36,31424,31331],{"class":42},[36,31426,31334],{"class":5696},[36,31428,47],{"class":46},[36,31430,101],{"class":53},[36,31432,57],{"class":42},[36,31434,31343],{"class":5696},[36,31436,47],{"class":46},[36,31438,1214],{"class":53},[36,31440,57],{"class":42},[36,31442,31352],{"class":5696},[36,31444,47],{"class":46},[36,31446,938],{"class":53},[36,31448,63],{"class":42},[36,31450,31451,31453,31456,31458,31460,31462,31464,31466,31468,31470,31472,31474],{"class":38,"line":2178},[36,31452,31323],{"class":53},[36,31454,31455],{"class":42},".s4",[36,31457,47],{"class":46},[36,31459,31396],{"class":42},[36,31461,31352],{"class":5696},[36,31463,47],{"class":46},[36,31465,96],{"class":53},[36,31467,57],{"class":42},[36,31469,31407],{"class":5696},[36,31471,47],{"class":46},[36,31473,96],{"class":53},[36,31475,63],{"class":42},[36,31477,31478],{"class":38,"line":2207},[36,31479,31480],{"class":69},"        # 定义平展层\n",[36,31482,31483,31485,31488,31490],{"class":38,"line":2212},[36,31484,31323],{"class":53},[36,31486,31487],{"class":42},".flatten",[36,31489,47],{"class":46},[36,31491,31492],{"class":42},"nn.Flatten()\n",[36,31494,31495],{"class":38,"line":2229},[36,31496,31497],{"class":69},"        # 定义全连接层\n",[36,31499,31500,31502,31505,31507,31510,31512,31514,31516],{"class":38,"line":2234},[36,31501,31323],{"class":53},[36,31503,31504],{"class":42},".f5",[36,31506,47],{"class":46},[36,31508,31509],{"class":42},"nn.Linear(",[36,31511,4467],{"class":53},[36,31513,57],{"class":42},[36,31515,1430],{"class":53},[36,31517,63],{"class":42},[36,31519,31520,31522,31525,31527,31529,31531,31533,31535],{"class":38,"line":2239},[36,31521,31323],{"class":53},[36,31523,31524],{"class":42},".f6",[36,31526,47],{"class":46},[36,31528,31509],{"class":42},[36,31530,1430],{"class":53},[36,31532,57],{"class":42},[36,31534,1324],{"class":53},[36,31536,63],{"class":42},[36,31538,31539,31541,31544,31546,31548,31550,31552,31554],{"class":38,"line":2244},[36,31540,31323],{"class":53},[36,31542,31543],{"class":42},".f7",[36,31545,47],{"class":46},[36,31547,31509],{"class":42},[36,31549,1324],{"class":53},[36,31551,57],{"class":42},[36,31553,1062],{"class":53},[36,31555,63],{"class":42},[36,31557,31558],{"class":38,"line":2258},[36,31559,2880],{"emptyLinePlaceholder":553},[36,31561,31562],{"class":38,"line":2263},[36,31563,31564],{"class":69},"    # 写工具->写前向传播\n",[36,31566,31567,31569,31572],{"class":38,"line":3057},[36,31568,31279],{"class":46},[36,31570,31571],{"class":2443}," forward",[36,31573,31574],{"class":42},"(self,x):\n",[36,31576,31577,31580,31582,31584,31587,31589],{"class":38,"line":3071},[36,31578,31579],{"class":42},"        x",[36,31581,47],{"class":46},[36,31583,31301],{"class":53},[36,31585,31586],{"class":42},".sig(",[36,31588,31301],{"class":53},[36,31590,31591],{"class":42},".c1(x))\n",[36,31593,31594,31596,31598,31600],{"class":38,"line":3079},[36,31595,31579],{"class":42},[36,31597,47],{"class":46},[36,31599,31301],{"class":53},[36,31601,31602],{"class":42},".s2(x)\n",[36,31604,31605,31607,31609,31611,31613,31615],{"class":38,"line":3084},[36,31606,31579],{"class":42},[36,31608,47],{"class":46},[36,31610,31301],{"class":53},[36,31612,31586],{"class":42},[36,31614,31301],{"class":53},[36,31616,31617],{"class":42},".c3(x))\n",[36,31619,31620,31622,31624,31626],{"class":38,"line":3090},[36,31621,31579],{"class":42},[36,31623,47],{"class":46},[36,31625,31301],{"class":53},[36,31627,31628],{"class":42},".s4(x)\n",[36,31630,31631,31633,31635,31637],{"class":38,"line":3096},[36,31632,31579],{"class":42},[36,31634,47],{"class":46},[36,31636,31301],{"class":53},[36,31638,31639],{"class":42},".flatten(x)\n",[36,31641,31642,31644,31646,31648,31650,31652],{"class":38,"line":3101},[36,31643,31579],{"class":42},[36,31645,47],{"class":46},[36,31647,31301],{"class":53},[36,31649,31586],{"class":42},[36,31651,31301],{"class":53},[36,31653,31654],{"class":42},".f5(x))\n",[36,31656,31657,31659,31661,31663,31665,31667],{"class":38,"line":8428},[36,31658,31579],{"class":42},[36,31660,47],{"class":46},[36,31662,31301],{"class":53},[36,31664,31586],{"class":42},[36,31666,31301],{"class":53},[36,31668,31669],{"class":42},".f6(x))\n",[36,31671,31672,31674,31676,31678],{"class":38,"line":8452},[36,31673,31579],{"class":42},[36,31675,47],{"class":46},[36,31677,31301],{"class":53},[36,31679,31680],{"class":42},".f7(x)\n",[36,31682,31683,31685],{"class":38,"line":8457},[36,31684,15232],{"class":46},[36,31686,31687],{"class":42}," x\n",[36,31689,31690],{"class":38,"line":8463},[36,31691,2880],{"emptyLinePlaceholder":553},[36,31693,31694,31696,31699,31701,31704],{"class":38,"line":8490},[36,31695,2011],{"class":46},[36,31697,31698],{"class":53}," __name__",[36,31700,3429],{"class":46},[36,31702,31703],{"class":405},"\"__main__\"",[36,31705,4219],{"class":42},[36,31707,31708],{"class":38,"line":8495},[36,31709,31710],{"class":69},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,31712,31713,31716,31718,31720,31723,31725,31728,31730,31732],{"class":38,"line":8501},[36,31714,31715],{"class":42},"    device",[36,31717,47],{"class":46},[36,31719,30930],{"class":42},[36,31721,31722],{"class":405},"\"cuda\"",[36,31724,2184],{"class":46},[36,31726,31727],{"class":42}," torch.cuda.is_available() ",[36,31729,2181],{"class":46},[36,31731,30955],{"class":405},[36,31733,63],{"class":42},[36,31735,31736],{"class":38,"line":8513},[36,31737,31738],{"class":69},"    # 如果就是想指定用cpu用下方代码:\n",[36,31740,31741],{"class":38,"line":8525},[36,31742,31743],{"class":69},"    # device=\"cpu\"\n",[36,31745,31746],{"class":38,"line":8537},[36,31747,31748],{"class":69},"    # print(device)\n",[36,31750,31751],{"class":38,"line":10196},[36,31752,2880],{"emptyLinePlaceholder":553},[36,31754,31755],{"class":38,"line":10221},[36,31756,31757],{"class":69},"    # 实例化模型\n",[36,31759,31760],{"class":38,"line":10244},[36,31761,31762],{"class":69},"    # 将模型放到设备中去运行\n",[36,31764,31765,31768,31770],{"class":38,"line":10268},[36,31766,31767],{"class":42},"    model",[36,31769,47],{"class":46},[36,31771,31772],{"class":42},"LeNet().to(device)\n",[36,31774,31775,31778,31781,31783,31785,31787,31789,31791],{"class":38,"line":10273},[36,31776,31777],{"class":53},"    print",[36,31779,31780],{"class":42},"(summary(model,(",[36,31782,54],{"class":53},[36,31784,57],{"class":42},[36,31786,1514],{"class":53},[36,31788,57],{"class":42},[36,31790,1514],{"class":53},[36,31792,31793],{"class":42},")))\n",[19,31795,31796],{},[519,31797],{"alt":31,"src":31798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,31800,31801],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[579,31803,31804],{"start":66},[582,31805,31806],{},"训练",[19,31808,31809],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31811,31812],{},"在训练之前可以将数据展示看一下",[26,31814,31816],{"className":28,"code":31815,"language":30,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\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",[33,31817,31818,31823,31828,31840,31852,31865,31870,31882,31887,31899,31904,31916,31920,31924,31945,31957,31962,31982,31993,31997,32002,32020,32031,32036,32047,32052,32063,32067,32072,32087,32100,32105,32110,32123,32136,32149,32154,32158,32163,32183,32200,32220,32233,32246,32256,32271],{"__ignoreMap":31},[36,31819,31820],{"class":38,"line":39},[36,31821,31822],{"class":69},"# 建立画图的函数，用于展示数据\n",[36,31824,31825],{"class":38,"line":66},[36,31826,31827],{"class":69},"# torchvision中包含很多内置的数据集\n",[36,31829,31830,31832,31835,31837],{"class":38,"line":73},[36,31831,31215],{"class":46},[36,31833,31834],{"class":42}," sklearn.externals.array_api_compat.torch ",[36,31836,30871],{"class":46},[36,31838,31839],{"class":42}," squeeze\n",[36,31841,31842,31844,31847,31849],{"class":38,"line":79},[36,31843,31215],{"class":46},[36,31845,31846],{"class":42}," torchvision.datasets ",[36,31848,30871],{"class":46},[36,31850,31851],{"class":42}," FashionMNIST\n",[36,31853,31854,31856,31859,31862],{"class":38,"line":85},[36,31855,30871],{"class":46},[36,31857,31858],{"class":42}," numpy ",[36,31860,31861],{"class":46},"as",[36,31863,31864],{"class":42}," np\n",[36,31866,31867],{"class":38,"line":419},[36,31868,31869],{"class":69},"# 引入处理数据集的包\n",[36,31871,31872,31874,31877,31879],{"class":38,"line":425},[36,31873,31215],{"class":46},[36,31875,31876],{"class":42}," torchvision ",[36,31878,30871],{"class":46},[36,31880,31881],{"class":42}," transforms\n",[36,31883,31884],{"class":38,"line":431},[36,31885,31886],{"class":69},"# 从torch库中引入数据处理的包\n",[36,31888,31889,31891,31894,31896],{"class":38,"line":437},[36,31890,30871],{"class":46},[36,31892,31893],{"class":42}," torch.utils.data ",[36,31895,31861],{"class":46},[36,31897,31898],{"class":42}," Data\n",[36,31900,31901],{"class":38,"line":443},[36,31902,31903],{"class":69},"# 导入画图的库\n",[36,31905,31906,31908,31911,31913],{"class":38,"line":2092},[36,31907,30871],{"class":46},[36,31909,31910],{"class":42}," matplotlib.pyplot ",[36,31912,31861],{"class":46},[36,31914,31915],{"class":42}," plt\n",[36,31917,31918],{"class":38,"line":2097},[36,31919,2880],{"emptyLinePlaceholder":553},[36,31921,31922],{"class":38,"line":2103},[36,31923,2880],{"emptyLinePlaceholder":553},[36,31925,31926,31929,31931,31934,31937,31939,31942],{"class":38,"line":2108},[36,31927,31928],{"class":42},"train_data",[36,31930,47],{"class":46},[36,31932,31933],{"class":42},"FashionMNIST(",[36,31935,31936],{"class":5696},"root",[36,31938,47],{"class":46},[36,31940,31941],{"class":405},"'.\u002Fdata'",[36,31943,31944],{"class":42},",\n",[36,31946,31947,31950,31952,31955],{"class":38,"line":2122},[36,31948,31949],{"class":5696},"                        train",[36,31951,47],{"class":46},[36,31953,31954],{"class":53},"True",[36,31956,31944],{"class":42},[36,31958,31959],{"class":38,"line":2127},[36,31960,31961],{"class":69},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,31963,31964,31967,31969,31972,31974,31976,31979],{"class":38,"line":2133},[36,31965,31966],{"class":5696},"                        transform",[36,31968,47],{"class":46},[36,31970,31971],{"class":42},"transforms.Compose([transforms.Resize(",[36,31973,531],{"class":5696},[36,31975,47],{"class":46},[36,31977,31978],{"class":53},"224",[36,31980,31981],{"class":42},"),transforms.ToTensor()]),\n",[36,31983,31984,31987,31989,31991],{"class":38,"line":2154},[36,31985,31986],{"class":5696},"                        download",[36,31988,47],{"class":46},[36,31990,31954],{"class":53},[36,31992,63],{"class":42},[36,31994,31995],{"class":38,"line":2159},[36,31996,2880],{"emptyLinePlaceholder":553},[36,31998,31999],{"class":38,"line":2173},[36,32000,32001],{"class":69},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,32003,32004,32007,32009,32012,32015,32017],{"class":38,"line":2178},[36,32005,32006],{"class":42},"train_loader",[36,32008,47],{"class":46},[36,32010,32011],{"class":42},"Data.DataLoader(",[36,32013,32014],{"class":5696},"dataset",[36,32016,47],{"class":46},[36,32018,32019],{"class":42},"train_data,\n",[36,32021,32022,32025,32027,32029],{"class":38,"line":2207},[36,32023,32024],{"class":5696},"                             batch_size",[36,32026,47],{"class":46},[36,32028,824],{"class":53},[36,32030,31944],{"class":42},[36,32032,32033],{"class":38,"line":2212},[36,32034,32035],{"class":69},"                             # 数据是否打乱\n",[36,32037,32038,32041,32043,32045],{"class":38,"line":2229},[36,32039,32040],{"class":5696},"                             shuffle",[36,32042,47],{"class":46},[36,32044,31954],{"class":53},[36,32046,31944],{"class":42},[36,32048,32049],{"class":38,"line":2234},[36,32050,32051],{"class":69},"                             # 规定加载数据的进程\n",[36,32053,32054,32057,32059,32061],{"class":38,"line":2239},[36,32055,32056],{"class":5696},"                             num_workers",[36,32058,47],{"class":46},[36,32060,812],{"class":53},[36,32062,63],{"class":42},[36,32064,32065],{"class":38,"line":2244},[36,32066,2880],{"emptyLinePlaceholder":553},[36,32068,32069],{"class":38,"line":2258},[36,32070,32071],{"class":69},"# 获得一个batch的数据\n",[36,32073,32074,32076,32079,32081,32084],{"class":38,"line":2263},[36,32075,3505],{"class":46},[36,32077,32078],{"class":42}," step,(b_x,b_y) ",[36,32080,26524],{"class":46},[36,32082,32083],{"class":53}," enumerate",[36,32085,32086],{"class":42},"(train_loader):\n",[36,32088,32089,32091,32094,32096,32098],{"class":38,"line":3057},[36,32090,3581],{"class":46},[36,32092,32093],{"class":42}," step ",[36,32095,1573],{"class":46},[36,32097,4573],{"class":53},[36,32099,4219],{"class":42},[36,32101,32102],{"class":38,"line":3071},[36,32103,32104],{"class":46},"        break\n",[36,32106,32107],{"class":38,"line":3079},[36,32108,32109],{"class":69},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,32111,32112,32115,32117,32120],{"class":38,"line":3084},[36,32113,32114],{"class":42},"batch_x",[36,32116,47],{"class":46},[36,32118,32119],{"class":42},"b_x.squeeze().numpy()  ",[36,32121,32122],{"class":69},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,32124,32125,32128,32130,32133],{"class":38,"line":3090},[36,32126,32127],{"class":42},"batch_y",[36,32129,47],{"class":46},[36,32131,32132],{"class":42},"b_y.numpy()   ",[36,32134,32135],{"class":69},"#将张量转换成功numpy数组\n",[36,32137,32138,32141,32143,32146],{"class":38,"line":3096},[36,32139,32140],{"class":42},"class_label",[36,32142,47],{"class":46},[36,32144,32145],{"class":42},"train_data.classes  ",[36,32147,32148],{"class":69},"#训练集标签\n",[36,32150,32151],{"class":38,"line":3101},[36,32152,32153],{"class":69},"# print(class_label)\n",[36,32155,32156],{"class":38,"line":8428},[36,32157,2880],{"emptyLinePlaceholder":553},[36,32159,32160],{"class":38,"line":8452},[36,32161,32162],{"class":69},"# 可视化一个batch的图像\n",[36,32164,32165,32168,32171,32173,32175,32177,32179,32181],{"class":38,"line":8457},[36,32166,32167],{"class":42},"plt.figure(",[36,32169,32170],{"class":5696},"figsize",[36,32172,47],{"class":46},[36,32174,345],{"class":42},[36,32176,154],{"class":53},[36,32178,57],{"class":42},[36,32180,938],{"class":53},[36,32182,370],{"class":42},[36,32184,32185,32187,32190,32192,32195,32197],{"class":38,"line":8463},[36,32186,3505],{"class":46},[36,32188,32189],{"class":42}," ii ",[36,32191,26524],{"class":46},[36,32193,32194],{"class":42}," np.arange(",[36,32196,7838],{"class":53},[36,32198,32199],{"class":42},"(batch_y)):\n",[36,32201,32202,32205,32207,32209,32211,32214,32216,32218],{"class":38,"line":8490},[36,32203,32204],{"class":42},"    plt.subplot(",[36,32206,912],{"class":53},[36,32208,57],{"class":42},[36,32210,1214],{"class":53},[36,32212,32213],{"class":42},",ii ",[36,32215,1097],{"class":46},[36,32217,25599],{"class":53},[36,32219,63],{"class":42},[36,32221,32222,32225,32228,32230],{"class":38,"line":8495},[36,32223,32224],{"class":42},"    plt.imshow(batch_x[ii,:,:],",[36,32226,32227],{"class":5696},"cmap",[36,32229,47],{"class":46},[36,32231,32232],{"class":42},"plt.cm.gray)\n",[36,32234,32235,32238,32240,32242,32244],{"class":38,"line":8501},[36,32236,32237],{"class":42},"    plt.title(class_label[batch_y[ii]],",[36,32239,531],{"class":5696},[36,32241,47],{"class":46},[36,32243,1062],{"class":53},[36,32245,63],{"class":42},[36,32247,32248,32251,32254],{"class":38,"line":8513},[36,32249,32250],{"class":42},"    plt.axis(",[36,32252,32253],{"class":405},"\"off\"",[36,32255,63],{"class":42},[36,32257,32258,32261,32264,32266,32269],{"class":38,"line":8525},[36,32259,32260],{"class":42},"    plt.subplots_adjust(",[36,32262,32263],{"class":5696},"wspace",[36,32265,47],{"class":46},[36,32267,32268],{"class":53},"0.05",[36,32270,63],{"class":42},[36,32272,32273],{"class":38,"line":8537},[36,32274,32275],{"class":42},"plt.show()\n",[19,32277,32278],{},"用matplotlib进行展示的过程可以后续再补",[19,32280,32281],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32283,32284],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32286,32287],{},"模型训练：",[26,32289,32291],{"className":28,"code":32290,"language":30,"meta":31,"style":31},"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",[33,32292,32293,32300,32307,32311,32323,32329,32340,32350,32360,32370,32380,32385,32397,32407,32411,32415,32420,32431,32444,32455,32472,32483,32522,32538,32550,32561,32566,32577,32593,32604,32615,32626,32633,32637,32642,32647,32651,32656,32666,32687,32691,32695,32700,32705,32710,32730,32734,32739,32749,32753,32758,32767,32772,32777,32782,32792,32796,32800,32805,32810,32820,32825,32835,32840,32849,32854,32863,32868,32877,32881,32886,32896,32900,32904,32909,32924,32952,32967,32971,32976,32981,32990,32995,33004,33009,33018,33023,33032,33037,33046,33051,33060,33065,33078,33083,33093,33098,33108,33114,33120,33126,33132,33143,33149,33169,33175,33186,33192,33198,33204,33210,33216,33222,33228,33248,33254,33270,33276,33290,33296,33311,33317,33326,33332,33341,33347,33353,33362,33368,33379,33385,33404,33410,33421,33427,33447,33463,33469,33483,33489,33495,33506,33512,33518,33528,33534,33545,33551,33561,33566,33572,33621,33668,33673,33679,33698,33704,33724,33730,33736,33746,33751,33757,33773,33818,33824,33830,33836,33847,33853,33859,33865,33883,33897,33906,33915,33924,33933,33939,33945,33953,33958,33964,33975,33981,34001,34007,34013,34019,34036,34042,34048,34054,34060,34066,34093,34117,34123,34129,34135,34146,34157,34163,34180,34203,34226,34232,34237,34246,34256,34262,34267,34273,34286,34292,34303,34314,34333],{"__ignoreMap":31},[36,32294,32295,32297],{"class":38,"line":39},[36,32296,30871],{"class":46},[36,32298,32299],{"class":42}," copy\n",[36,32301,32302,32304],{"class":38,"line":66},[36,32303,30871],{"class":46},[36,32305,32306],{"class":42}," time\n",[36,32308,32309],{"class":38,"line":73},[36,32310,2880],{"emptyLinePlaceholder":553},[36,32312,32313,32315,32318,32320],{"class":38,"line":79},[36,32314,30871],{"class":46},[36,32316,32317],{"class":42}," pandas ",[36,32319,31861],{"class":46},[36,32321,32322],{"class":42}," pd\n",[36,32324,32325,32327],{"class":38,"line":85},[36,32326,30871],{"class":46},[36,32328,30874],{"class":42},[36,32330,32331,32333,32335,32337],{"class":38,"line":419},[36,32332,31215],{"class":46},[36,32334,31893],{"class":42},[36,32336,30871],{"class":46},[36,32338,32339],{"class":42}," Dataset\n",[36,32341,32342,32344,32346,32348],{"class":38,"line":425},[36,32343,31215],{"class":46},[36,32345,31846],{"class":42},[36,32347,30871],{"class":46},[36,32349,31851],{"class":42},[36,32351,32352,32354,32356,32358],{"class":38,"line":431},[36,32353,31215],{"class":46},[36,32355,31876],{"class":42},[36,32357,30871],{"class":46},[36,32359,31881],{"class":42},[36,32361,32362,32364,32366,32368],{"class":38,"line":437},[36,32363,30871],{"class":46},[36,32365,31893],{"class":42},[36,32367,31861],{"class":46},[36,32369,31898],{"class":42},[36,32371,32372,32374,32376,32378],{"class":38,"line":443},[36,32373,30871],{"class":46},[36,32375,31910],{"class":42},[36,32377,31861],{"class":46},[36,32379,31915],{"class":42},[36,32381,32382],{"class":38,"line":2092},[36,32383,32384],{"class":69},"# 导入模型\n",[36,32386,32387,32389,32392,32394],{"class":38,"line":2097},[36,32388,31215],{"class":46},[36,32390,32391],{"class":42}," model ",[36,32393,30871],{"class":46},[36,32395,32396],{"class":42}," LeNet\n",[36,32398,32399,32401,32403,32405],{"class":38,"line":2103},[36,32400,31215],{"class":46},[36,32402,31218],{"class":42},[36,32404,30871],{"class":46},[36,32406,31223],{"class":42},[36,32408,32409],{"class":38,"line":2108},[36,32410,2880],{"emptyLinePlaceholder":553},[36,32412,32413],{"class":38,"line":2122},[36,32414,2880],{"emptyLinePlaceholder":553},[36,32416,32417],{"class":38,"line":2127},[36,32418,32419],{"class":69},"# 处理训练集与验证集函数--->划分数据集\n",[36,32421,32422,32425,32428],{"class":38,"line":2133},[36,32423,32424],{"class":46},"def",[36,32426,32427],{"class":2443}," train_val_data_process",[36,32429,32430],{"class":42},"():\n",[36,32432,32433,32436,32438,32440,32442],{"class":38,"line":2154},[36,32434,32435],{"class":42},"    train_data",[36,32437,47],{"class":46},[36,32439,31933],{"class":42},[36,32441,31941],{"class":405},[36,32443,31944],{"class":42},[36,32445,32446,32449,32451,32453],{"class":38,"line":2159},[36,32447,32448],{"class":5696},"                            train",[36,32450,47],{"class":46},[36,32452,31954],{"class":53},[36,32454,31944],{"class":42},[36,32456,32457,32460,32462,32464,32466,32468,32470],{"class":38,"line":2173},[36,32458,32459],{"class":5696},"                            transform",[36,32461,47],{"class":46},[36,32463,31971],{"class":42},[36,32465,531],{"class":5696},[36,32467,47],{"class":46},[36,32469,1514],{"class":53},[36,32471,31981],{"class":42},[36,32473,32474,32477,32479,32481],{"class":38,"line":2178},[36,32475,32476],{"class":5696},"                            download",[36,32478,47],{"class":46},[36,32480,31954],{"class":53},[36,32482,63],{"class":42},[36,32484,32485,32488,32490,32493,32496,32498,32501,32503,32505,32508,32510,32512,32515,32517,32519],{"class":38,"line":2207},[36,32486,32487],{"class":42},"    train_data,val_data",[36,32489,47],{"class":46},[36,32491,32492],{"class":42},"Data.random_split(train_data,[",[36,32494,32495],{"class":53},"round",[36,32497,345],{"class":42},[36,32499,32500],{"class":53},"0.8",[36,32502,1071],{"class":46},[36,32504,7838],{"class":53},[36,32506,32507],{"class":42},"(train_data)),",[36,32509,32495],{"class":53},[36,32511,345],{"class":42},[36,32513,32514],{"class":53},"0.2",[36,32516,1071],{"class":46},[36,32518,7838],{"class":53},[36,32520,32521],{"class":42},"(train_data))])\n",[36,32523,32524,32527,32529,32532,32534,32536],{"class":38,"line":2212},[36,32525,32526],{"class":42},"    train_dataloader ",[36,32528,47],{"class":46},[36,32530,32531],{"class":42}," Data.DataLoader(",[36,32533,32014],{"class":5696},[36,32535,47],{"class":46},[36,32537,32019],{"class":42},[36,32539,32540,32543,32545,32548],{"class":38,"line":2229},[36,32541,32542],{"class":5696},"                                       batch_size",[36,32544,47],{"class":46},[36,32546,32547],{"class":53},"128",[36,32549,31944],{"class":42},[36,32551,32552,32555,32557,32559],{"class":38,"line":2234},[36,32553,32554],{"class":5696},"                                       shuffle",[36,32556,47],{"class":46},[36,32558,31954],{"class":53},[36,32560,31944],{"class":42},[36,32562,32563],{"class":38,"line":2239},[36,32564,32565],{"class":69},"                                       # 规定8个进程\n",[36,32567,32568,32571,32573,32575],{"class":38,"line":2244},[36,32569,32570],{"class":5696},"                                       num_workers",[36,32572,47],{"class":46},[36,32574,1012],{"class":53},[36,32576,63],{"class":42},[36,32578,32579,32582,32584,32586,32588,32590],{"class":38,"line":2258},[36,32580,32581],{"class":42},"    val_dataloader",[36,32583,47],{"class":46},[36,32585,32011],{"class":42},[36,32587,32014],{"class":5696},[36,32589,47],{"class":46},[36,32591,32592],{"class":42},"val_data,\n",[36,32594,32595,32598,32600,32602],{"class":38,"line":2263},[36,32596,32597],{"class":5696},"                                   batch_size",[36,32599,47],{"class":46},[36,32601,32547],{"class":53},[36,32603,31944],{"class":42},[36,32605,32606,32609,32611,32613],{"class":38,"line":3057},[36,32607,32608],{"class":5696},"                                   shuffle",[36,32610,47],{"class":46},[36,32612,31954],{"class":53},[36,32614,31944],{"class":42},[36,32616,32617,32620,32622,32624],{"class":38,"line":3071},[36,32618,32619],{"class":5696},"                                   num_workers",[36,32621,47],{"class":46},[36,32623,1012],{"class":53},[36,32625,63],{"class":42},[36,32627,32628,32630],{"class":38,"line":3079},[36,32629,4570],{"class":46},[36,32631,32632],{"class":42}," train_dataloader,val_dataloader\n",[36,32634,32635],{"class":38,"line":3084},[36,32636,2880],{"emptyLinePlaceholder":553},[36,32638,32639],{"class":38,"line":3090},[36,32640,32641],{"class":69},"# 验证是否出错\n",[36,32643,32644],{"class":38,"line":3096},[36,32645,32646],{"class":69},"# train_val_data_process()\n",[36,32648,32649],{"class":38,"line":3101},[36,32650,2880],{"emptyLinePlaceholder":553},[36,32652,32653],{"class":38,"line":8428},[36,32654,32655],{"class":69},"# 定义模型训练函数\n",[36,32657,32658,32660,32663],{"class":38,"line":8452},[36,32659,32424],{"class":46},[36,32661,32662],{"class":2443}," train_model_process",[36,32664,32665],{"class":42},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,32667,32668,32670,32672,32674,32676,32678,32680,32682,32685],{"class":38,"line":8457},[36,32669,31715],{"class":42},[36,32671,47],{"class":46},[36,32673,30930],{"class":42},[36,32675,31722],{"class":405},[36,32677,2184],{"class":46},[36,32679,31727],{"class":42},[36,32681,2181],{"class":46},[36,32683,32684],{"class":405}," 'cpu'",[36,32686,63],{"class":42},[36,32688,32689],{"class":38,"line":8463},[36,32690,2880],{"emptyLinePlaceholder":553},[36,32692,32693],{"class":38,"line":8490},[36,32694,2880],{"emptyLinePlaceholder":553},[36,32696,32697],{"class":38,"line":8495},[36,32698,32699],{"class":69},"    # 定义优化器\n",[36,32701,32702],{"class":38,"line":8501},[36,32703,32704],{"class":69},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,32706,32707],{"class":38,"line":8513},[36,32708,32709],{"class":69},"    # lr为学习率\n",[36,32711,32712,32715,32717,32720,32723,32725,32728],{"class":38,"line":8525},[36,32713,32714],{"class":42},"    optimizer",[36,32716,47],{"class":46},[36,32718,32719],{"class":42},"torch.optim.Adam(model.parameters(),",[36,32721,32722],{"class":5696},"lr",[36,32724,47],{"class":46},[36,32726,32727],{"class":53},"0.001",[36,32729,63],{"class":42},[36,32731,32732],{"class":38,"line":8537},[36,32733,2880],{"emptyLinePlaceholder":553},[36,32735,32736],{"class":38,"line":10196},[36,32737,32738],{"class":69},"    # 定义损失函数使用交叉熵损失函数\n",[36,32740,32741,32744,32746],{"class":38,"line":10221},[36,32742,32743],{"class":42},"    criterion",[36,32745,47],{"class":46},[36,32747,32748],{"class":42},"nn.CrossEntropyLoss()\n",[36,32750,32751],{"class":38,"line":10244},[36,32752,2880],{"emptyLinePlaceholder":553},[36,32754,32755],{"class":38,"line":10268},[36,32756,32757],{"class":69},"    # 将模型放到GPU中进行训练\n",[36,32759,32760,32762,32764],{"class":38,"line":10273},[36,32761,31767],{"class":42},[36,32763,47],{"class":46},[36,32765,32766],{"class":42},"model.to(device)\n",[36,32768,32769],{"class":38,"line":10278},[36,32770,32771],{"class":69},"    # 复制当前模型的参数\n",[36,32773,32774],{"class":38,"line":10283},[36,32775,32776],{"class":69},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,32778,32779],{"class":38,"line":10292},[36,32780,32781],{"class":69},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,32783,32784,32787,32789],{"class":38,"line":10297},[36,32785,32786],{"class":42},"    best_model_wts",[36,32788,47],{"class":46},[36,32790,32791],{"class":42},"copy.deepcopy(model.state_dict())\n",[36,32793,32794],{"class":38,"line":10303},[36,32795,2880],{"emptyLinePlaceholder":553},[36,32797,32798],{"class":38,"line":10324},[36,32799,2880],{"emptyLinePlaceholder":553},[36,32801,32802],{"class":38,"line":10330},[36,32803,32804],{"class":69},"    # 初始化参数\n",[36,32806,32807],{"class":38,"line":10344},[36,32808,32809],{"class":69},"    # 最高准确度\n",[36,32811,32812,32815,32817],{"class":38,"line":10350},[36,32813,32814],{"class":42},"    best_acc",[36,32816,47],{"class":46},[36,32818,32819],{"class":53},"0.0\n",[36,32821,32822],{"class":38,"line":10377},[36,32823,32824],{"class":69},"    # 训练集损失列表\n",[36,32826,32827,32830,32832],{"class":38,"line":10386},[36,32828,32829],{"class":42},"    train_loss_all",[36,32831,47],{"class":46},[36,32833,32834],{"class":42},"[]\n",[36,32836,32837],{"class":38,"line":10392},[36,32838,32839],{"class":69},"    # 验证集函数列表\n",[36,32841,32842,32845,32847],{"class":38,"line":10400},[36,32843,32844],{"class":42},"    val_loss_all",[36,32846,47],{"class":46},[36,32848,32834],{"class":42},[36,32850,32851],{"class":38,"line":10405},[36,32852,32853],{"class":69},"    # 训练集准确度列表\n",[36,32855,32856,32859,32861],{"class":38,"line":17084},[36,32857,32858],{"class":42},"    train_acc_all",[36,32860,47],{"class":46},[36,32862,32834],{"class":42},[36,32864,32865],{"class":38,"line":17090},[36,32866,32867],{"class":69},"    # 验证集准确度列表\n",[36,32869,32870,32873,32875],{"class":38,"line":17113},[36,32871,32872],{"class":42},"    val_acc_all",[36,32874,47],{"class":46},[36,32876,32834],{"class":42},[36,32878,32879],{"class":38,"line":17119},[36,32880,2880],{"emptyLinePlaceholder":553},[36,32882,32883],{"class":38,"line":17142},[36,32884,32885],{"class":69},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,32887,32888,32891,32893],{"class":38,"line":17156},[36,32889,32890],{"class":42},"    since",[36,32892,47],{"class":46},[36,32894,32895],{"class":42},"time.time()\n",[36,32897,32898],{"class":38,"line":17176},[36,32899,2880],{"emptyLinePlaceholder":553},[36,32901,32902],{"class":38,"line":17182},[36,32903,2880],{"emptyLinePlaceholder":553},[36,32905,32906],{"class":38,"line":17193},[36,32907,32908],{"class":69},"    # 准备工作完成--->开始训练模型\n",[36,32910,32911,32913,32916,32918,32921],{"class":38,"line":17216},[36,32912,3681],{"class":46},[36,32914,32915],{"class":42}," epoch ",[36,32917,26524],{"class":46},[36,32919,32920],{"class":53}," range",[36,32922,32923],{"class":42},"(num_epochs):\n",[36,32925,32926,32929,32931,32934,32937,32939,32941,32943,32946,32948,32950],{"class":38,"line":17238},[36,32927,32928],{"class":53},"        print",[36,32930,345],{"class":42},[36,32932,32933],{"class":405},"\"Epoch ",[36,32935,32936],{"class":53},"{}",[36,32938,1197],{"class":405},[36,32940,32936],{"class":53},[36,32942,870],{"class":405},[36,32944,32945],{"class":42},".format(epoch,num_epochs",[36,32947,173],{"class":46},[36,32949,54],{"class":53},[36,32951,370],{"class":42},[36,32953,32954,32956,32958,32961,32963,32965],{"class":38,"line":17243},[36,32955,32928],{"class":53},[36,32957,345],{"class":42},[36,32959,32960],{"class":405},"\"-\"",[36,32962,1071],{"class":46},[36,32964,1062],{"class":53},[36,32966,63],{"class":42},[36,32968,32969],{"class":38,"line":17249},[36,32970,2880],{"emptyLinePlaceholder":553},[36,32972,32973],{"class":38,"line":17263},[36,32974,32975],{"class":69},"        # 初始化参数\n",[36,32977,32978],{"class":38,"line":17276},[36,32979,32980],{"class":69},"        # 训练集损失函数\n",[36,32982,32983,32986,32988],{"class":38,"line":17281},[36,32984,32985],{"class":42},"        train_loss",[36,32987,47],{"class":46},[36,32989,32819],{"class":53},[36,32991,32992],{"class":38,"line":17295},[36,32993,32994],{"class":69},"        # 训练集准确度\n",[36,32996,32997,33000,33002],{"class":38,"line":17300},[36,32998,32999],{"class":42},"        train_corrects",[36,33001,47],{"class":46},[36,33003,3565],{"class":53},[36,33005,33006],{"class":38,"line":17306},[36,33007,33008],{"class":69},"        # 验证集损失函数\n",[36,33010,33011,33014,33016],{"class":38,"line":17311},[36,33012,33013],{"class":42},"        val_loss",[36,33015,47],{"class":46},[36,33017,32819],{"class":53},[36,33019,33020],{"class":38,"line":17325},[36,33021,33022],{"class":69},"        # 验证集准确度\n",[36,33024,33025,33028,33030],{"class":38,"line":17330},[36,33026,33027],{"class":42},"        val_corrects",[36,33029,47],{"class":46},[36,33031,3565],{"class":53},[36,33033,33034],{"class":38,"line":17335},[36,33035,33036],{"class":69},"        # 训练集样本数量\n",[36,33038,33039,33042,33044],{"class":38,"line":17349},[36,33040,33041],{"class":42},"        train_num",[36,33043,47],{"class":46},[36,33045,3565],{"class":53},[36,33047,33048],{"class":38,"line":17361},[36,33049,33050],{"class":69},"        # 验证集样本数量\n",[36,33052,33053,33056,33058],{"class":38,"line":17366},[36,33054,33055],{"class":42},"        val_num",[36,33057,47],{"class":46},[36,33059,3565],{"class":53},[36,33061,33062],{"class":38,"line":17379},[36,33063,33064],{"class":69},"        # 将数据放到设备,并开始训练\n",[36,33066,33067,33069,33071,33073,33075],{"class":38,"line":17384},[36,33068,3883],{"class":46},[36,33070,32078],{"class":42},[36,33072,26524],{"class":46},[36,33074,32083],{"class":53},[36,33076,33077],{"class":42},"(train_dataloader):\n",[36,33079,33080],{"class":38,"line":17389},[36,33081,33082],{"class":69},"            # 将特征放入到训练设备\n",[36,33084,33085,33088,33090],{"class":38,"line":17394},[36,33086,33087],{"class":42},"            b_x",[36,33089,47],{"class":46},[36,33091,33092],{"class":42},"b_x.to(device)\n",[36,33094,33095],{"class":38,"line":17407},[36,33096,33097],{"class":69},"            # 将标签放入到训练设备当中\n",[36,33099,33100,33103,33105],{"class":38,"line":17412},[36,33101,33102],{"class":42},"            b_y",[36,33104,47],{"class":46},[36,33106,33107],{"class":42},"b_y.to(device)\n",[36,33109,33111],{"class":38,"line":33110},98,[36,33112,33113],{"class":69},"            # 设置模型为训练模式\n",[36,33115,33117],{"class":38,"line":33116},99,[36,33118,33119],{"class":42},"            model.train()\n",[36,33121,33123],{"class":38,"line":33122},100,[36,33124,33125],{"class":69},"            # 将数据放到模型当中,开始前向传播\n",[36,33127,33129],{"class":38,"line":33128},101,[36,33130,33131],{"class":69},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,33133,33135,33138,33140],{"class":38,"line":33134},102,[36,33136,33137],{"class":42},"            output",[36,33139,47],{"class":46},[36,33141,33142],{"class":42},"model(b_x)\n",[36,33144,33146],{"class":38,"line":33145},103,[36,33147,33148],{"class":69},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,33150,33152,33155,33157,33160,33163,33165,33167],{"class":38,"line":33151},104,[36,33153,33154],{"class":42},"            pre_lab",[36,33156,47],{"class":46},[36,33158,33159],{"class":42},"torch.argmax(output,",[36,33161,33162],{"class":5696},"dim",[36,33164,47],{"class":46},[36,33166,54],{"class":53},[36,33168,63],{"class":42},[36,33170,33172],{"class":38,"line":33171},105,[36,33173,33174],{"class":69},"            # 计算每一个batch的损失函数\n",[36,33176,33178,33181,33183],{"class":38,"line":33177},106,[36,33179,33180],{"class":42},"            loss",[36,33182,47],{"class":46},[36,33184,33185],{"class":42},"criterion(output,b_y)\n",[36,33187,33189],{"class":38,"line":33188},107,[36,33190,33191],{"class":69},"            # 将梯度初始化为0\n",[36,33193,33195],{"class":38,"line":33194},108,[36,33196,33197],{"class":42},"            optimizer.zero_grad()\n",[36,33199,33201],{"class":38,"line":33200},109,[36,33202,33203],{"class":69},"            # 梯度置为0后再进行反向传播\n",[36,33205,33207],{"class":38,"line":33206},110,[36,33208,33209],{"class":42},"            loss.backward()\n",[36,33211,33213],{"class":38,"line":33212},111,[36,33214,33215],{"class":69},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,33217,33219],{"class":38,"line":33218},112,[36,33220,33221],{"class":42},"            optimizer.step()\n",[36,33223,33225],{"class":38,"line":33224},113,[36,33226,33227],{"class":69},"            # loss.item()指的是batch的平均损失\n",[36,33229,33231,33234,33236,33239,33241,33244,33246],{"class":38,"line":33230},114,[36,33232,33233],{"class":42},"            train_loss",[36,33235,9957],{"class":46},[36,33237,33238],{"class":42},"loss.item()",[36,33240,1071],{"class":46},[36,33242,33243],{"class":42},"b_x.size(",[36,33245,812],{"class":53},[36,33247,63],{"class":42},[36,33249,33251],{"class":38,"line":33250},115,[36,33252,33253],{"class":69},"            # 计算每个批次中正确预测的数量\n",[36,33255,33257,33260,33262,33265,33267],{"class":38,"line":33256},116,[36,33258,33259],{"class":42},"            train_corrects",[36,33261,9957],{"class":46},[36,33263,33264],{"class":42},"torch.sum(pre_lab",[36,33266,3429],{"class":46},[36,33268,33269],{"class":42},"b_y.data)\n",[36,33271,33273],{"class":38,"line":33272},117,[36,33274,33275],{"class":69},"            # 计算目前为止一共处理了多少样本\n",[36,33277,33279,33282,33284,33286,33288],{"class":38,"line":33278},118,[36,33280,33281],{"class":42},"            train_num",[36,33283,9957],{"class":46},[36,33285,33243],{"class":42},[36,33287,812],{"class":53},[36,33289,63],{"class":42},[36,33291,33293],{"class":38,"line":33292},119,[36,33294,33295],{"class":69},"        # 验证数据\n",[36,33297,33299,33301,33304,33306,33308],{"class":38,"line":33298},120,[36,33300,3883],{"class":46},[36,33302,33303],{"class":42}," step ,(b_x,b_y) ",[36,33305,26524],{"class":46},[36,33307,32083],{"class":53},[36,33309,33310],{"class":42},"(val_dataloader):\n",[36,33312,33314],{"class":38,"line":33313},121,[36,33315,33316],{"class":69},"            # 将特征放到验证设备当中\n",[36,33318,33320,33322,33324],{"class":38,"line":33319},122,[36,33321,33087],{"class":42},[36,33323,47],{"class":46},[36,33325,33092],{"class":42},[36,33327,33329],{"class":38,"line":33328},123,[36,33330,33331],{"class":69},"            # 将标签放到放到训练设备当中\n",[36,33333,33335,33337,33339],{"class":38,"line":33334},124,[36,33336,33102],{"class":42},[36,33338,47],{"class":46},[36,33340,33107],{"class":42},[36,33342,33344],{"class":38,"line":33343},125,[36,33345,33346],{"class":69},"            # 开启验证模式，设置模型为评估模式\n",[36,33348,33350],{"class":38,"line":33349},126,[36,33351,33352],{"class":42},"            model.eval()\n",[36,33354,33356,33359],{"class":38,"line":33355},127,[36,33357,33358],{"class":46},"            with",[36,33360,33361],{"class":42}," torch.no_grad():\n",[36,33363,33365],{"class":38,"line":33364},128,[36,33366,33367],{"class":69},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,33369,33371,33374,33376],{"class":38,"line":33370},129,[36,33372,33373],{"class":42},"                output ",[36,33375,47],{"class":46},[36,33377,33378],{"class":42}," model(b_x)\n",[36,33380,33382],{"class":38,"line":33381},130,[36,33383,33384],{"class":69},"                # 查找每一行中最大值对应的下标\n",[36,33386,33388,33391,33393,33396,33398,33400,33402],{"class":38,"line":33387},131,[36,33389,33390],{"class":42},"                pre_lab ",[36,33392,47],{"class":46},[36,33394,33395],{"class":42}," torch.argmax(output, ",[36,33397,33162],{"class":5696},[36,33399,47],{"class":46},[36,33401,54],{"class":53},[36,33403,63],{"class":42},[36,33405,33407],{"class":38,"line":33406},132,[36,33408,33409],{"class":69},"                # 计算验证集上的当前 batch 损失\n",[36,33411,33413,33416,33418],{"class":38,"line":33412},133,[36,33414,33415],{"class":42},"                val_batch_loss ",[36,33417,47],{"class":46},[36,33419,33420],{"class":42}," criterion(output, b_y)\n",[36,33422,33424],{"class":38,"line":33423},134,[36,33425,33426],{"class":69},"                # 对损失函数进行累加（按样本数加权）\n",[36,33428,33430,33433,33435,33438,33440,33443,33445],{"class":38,"line":33429},135,[36,33431,33432],{"class":42},"                val_loss ",[36,33434,9957],{"class":46},[36,33436,33437],{"class":42}," val_batch_loss.item() ",[36,33439,1071],{"class":46},[36,33441,33442],{"class":42}," b_x.size(",[36,33444,812],{"class":53},[36,33446,63],{"class":42},[36,33448,33450,33453,33455,33458,33460],{"class":38,"line":33449},136,[36,33451,33452],{"class":42},"                val_corrects ",[36,33454,9957],{"class":46},[36,33456,33457],{"class":42}," torch.sum(pre_lab ",[36,33459,3429],{"class":46},[36,33461,33462],{"class":42}," b_y.data)\n",[36,33464,33466],{"class":38,"line":33465},137,[36,33467,33468],{"class":69},"                # 当前用于验证的样本数量\n",[36,33470,33472,33475,33477,33479,33481],{"class":38,"line":33471},138,[36,33473,33474],{"class":42},"            val_num ",[36,33476,9957],{"class":46},[36,33478,33442],{"class":42},[36,33480,812],{"class":53},[36,33482,63],{"class":42},[36,33484,33486],{"class":38,"line":33485},139,[36,33487,33488],{"class":69},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,33490,33492],{"class":38,"line":33491},140,[36,33493,33494],{"class":69},"        # 计算并保存训练集的loss值\n",[36,33496,33498,33501,33503],{"class":38,"line":33497},141,[36,33499,33500],{"class":42},"        train_loss_all.append(train_loss",[36,33502,1197],{"class":46},[36,33504,33505],{"class":42},"train_num)\n",[36,33507,33509],{"class":38,"line":33508},142,[36,33510,33511],{"class":69},"        # 取双精度\n",[36,33513,33515],{"class":38,"line":33514},143,[36,33516,33517],{"class":69},"        # 计算并保存训练集的准确率\n",[36,33519,33521,33524,33526],{"class":38,"line":33520},144,[36,33522,33523],{"class":42},"        train_acc_all.append(train_corrects.double().item()",[36,33525,1197],{"class":46},[36,33527,33505],{"class":42},[36,33529,33531],{"class":38,"line":33530},145,[36,33532,33533],{"class":69},"        # 计算并保存验证集的loss值\n",[36,33535,33537,33540,33542],{"class":38,"line":33536},146,[36,33538,33539],{"class":42},"        val_loss_all.append(val_loss",[36,33541,1197],{"class":46},[36,33543,33544],{"class":42},"val_num)\n",[36,33546,33548],{"class":38,"line":33547},147,[36,33549,33550],{"class":69},"        # 计算并保存验证集的准确率\n",[36,33552,33554,33557,33559],{"class":38,"line":33553},148,[36,33555,33556],{"class":42},"        val_acc_all.append(val_corrects.double().item()",[36,33558,1197],{"class":46},[36,33560,33544],{"class":42},[36,33562,33564],{"class":38,"line":33563},149,[36,33565,2880],{"emptyLinePlaceholder":553},[36,33567,33569],{"class":38,"line":33568},150,[36,33570,33571],{"class":69},"        # 打印训练一轮的loss值和准确率\n",[36,33573,33575,33577,33579,33581,33583,33586,33588,33591,33593,33596,33598,33600,33602,33604,33607,33609,33611,33614,33616,33618],{"class":38,"line":33574},151,[36,33576,32928],{"class":53},[36,33578,345],{"class":42},[36,33580,4072],{"class":405},[36,33582,32936],{"class":53},[36,33584,33585],{"class":405},"train loss:",[36,33587,1509],{"class":53},[36,33589,33590],{"class":46},":.4f",[36,33592,1559],{"class":53},[36,33594,33595],{"class":405}," train acc:",[36,33597,1509],{"class":53},[36,33599,33590],{"class":46},[36,33601,1559],{"class":53},[36,33603,4072],{"class":405},[36,33605,33606],{"class":42},".format(epoch,train_loss_all[",[36,33608,173],{"class":46},[36,33610,54],{"class":53},[36,33612,33613],{"class":42},"],train_acc_all[",[36,33615,173],{"class":46},[36,33617,54],{"class":53},[36,33619,33620],{"class":42},"]))\n",[36,33622,33624,33626,33628,33630,33632,33635,33637,33639,33641,33644,33646,33648,33650,33652,33655,33657,33659,33662,33664,33666],{"class":38,"line":33623},152,[36,33625,32928],{"class":53},[36,33627,345],{"class":42},[36,33629,4072],{"class":405},[36,33631,32936],{"class":53},[36,33633,33634],{"class":405},"val loss:",[36,33636,1509],{"class":53},[36,33638,33590],{"class":46},[36,33640,1559],{"class":53},[36,33642,33643],{"class":405}," val acc:",[36,33645,1509],{"class":53},[36,33647,33590],{"class":46},[36,33649,1559],{"class":53},[36,33651,4072],{"class":405},[36,33653,33654],{"class":42},".format(epoch,val_loss_all[",[36,33656,173],{"class":46},[36,33658,54],{"class":53},[36,33660,33661],{"class":42},"],val_acc_all[",[36,33663,173],{"class":46},[36,33665,54],{"class":53},[36,33667,33620],{"class":42},[36,33669,33671],{"class":38,"line":33670},153,[36,33672,2880],{"emptyLinePlaceholder":553},[36,33674,33676],{"class":38,"line":33675},154,[36,33677,33678],{"class":69},"        # 判断准确度--->保存最优模型\n",[36,33680,33682,33684,33687,33689,33691,33693,33695],{"class":38,"line":33681},155,[36,33683,2977],{"class":46},[36,33685,33686],{"class":42}," val_acc_all[",[36,33688,173],{"class":46},[36,33690,54],{"class":53},[36,33692,1553],{"class":42},[36,33694,1573],{"class":46},[36,33696,33697],{"class":42},"best_acc:\n",[36,33699,33701],{"class":38,"line":33700},156,[36,33702,33703],{"class":69},"            # 保存当前模型准确度\n",[36,33705,33707,33710,33712,33714,33717,33719,33721],{"class":38,"line":33706},157,[36,33708,33709],{"class":42},"            best_acc:",[36,33711,666],{"class":53},[36,33713,47],{"class":46},[36,33715,33716],{"class":42},"val_acc_all[",[36,33718,173],{"class":46},[36,33720,54],{"class":53},[36,33722,33723],{"class":42},"]\n",[36,33725,33727],{"class":38,"line":33726},158,[36,33728,33729],{"class":69},"            # 保存当前的准确度\n",[36,33731,33733],{"class":38,"line":33732},159,[36,33734,33735],{"class":69},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,33737,33739,33742,33744],{"class":38,"line":33738},160,[36,33740,33741],{"class":42},"            best_model_wts",[36,33743,47],{"class":46},[36,33745,32791],{"class":42},[36,33747,33749],{"class":38,"line":33748},161,[36,33750,2880],{"emptyLinePlaceholder":553},[36,33752,33754],{"class":38,"line":33753},162,[36,33755,33756],{"class":69},"        # 计算耗时\n",[36,33758,33760,33763,33765,33768,33770],{"class":38,"line":33759},163,[36,33761,33762],{"class":42},"        time_use",[36,33764,47],{"class":46},[36,33766,33767],{"class":42},"time.time()",[36,33769,173],{"class":46},[36,33771,33772],{"class":42},"since\n",[36,33774,33776,33778,33780,33783,33785,33788,33790,33792,33794,33796,33798,33801,33804,33807,33809,33812,33814,33816],{"class":38,"line":33775},164,[36,33777,32928],{"class":53},[36,33779,345],{"class":42},[36,33781,33782],{"class":405},"'训练和验证耗费的时间",[36,33784,1509],{"class":53},[36,33786,33787],{"class":46},":.0f",[36,33789,1559],{"class":53},[36,33791,1157],{"class":405},[36,33793,1509],{"class":53},[36,33795,33787],{"class":46},[36,33797,1559],{"class":53},[36,33799,33800],{"class":405},"s'",[36,33802,33803],{"class":42},".format(time_use",[36,33805,33806],{"class":46},"\u002F\u002F",[36,33808,1520],{"class":53},[36,33810,33811],{"class":42},",time_use",[36,33813,947],{"class":46},[36,33815,1520],{"class":53},[36,33817,370],{"class":42},[36,33819,33821],{"class":38,"line":33820},165,[36,33822,33823],{"class":69},"    # 选择最优参数\n",[36,33825,33827],{"class":38,"line":33826},166,[36,33828,33829],{"class":69},"    # 加载最高准确率下的模型参数\n",[36,33831,33833],{"class":38,"line":33832},167,[36,33834,33835],{"class":69},"    # model.load_state_dict(best_model_wts)\n",[36,33837,33839,33842,33845],{"class":38,"line":33838},168,[36,33840,33841],{"class":42},"    torch.save(model.state_dict(best_model_wts), ",[36,33843,33844],{"class":405},"'.\u002Fbest_model.pth'",[36,33846,63],{"class":42},[36,33848,33850],{"class":38,"line":33849},169,[36,33851,33852],{"class":69},"    # 或者写成\n",[36,33854,33856],{"class":38,"line":33855},170,[36,33857,33858],{"class":69},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,33860,33862],{"class":38,"line":33861},171,[36,33863,33864],{"class":69},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,33866,33868,33871,33873,33876,33879,33881],{"class":38,"line":33867},172,[36,33869,33870],{"class":42},"    train_process",[36,33872,47],{"class":46},[36,33874,33875],{"class":42},"pd.DataFrame(",[36,33877,33878],{"class":5696},"data",[36,33880,47],{"class":46},[36,33882,2026],{"class":42},[36,33884,33886,33889,33891,33894],{"class":38,"line":33885},173,[36,33887,33888],{"class":405},"        \"epoch\"",[36,33890,1472],{"class":42},[36,33892,33893],{"class":53},"range",[36,33895,33896],{"class":42},"(num_epochs),\n",[36,33898,33900,33903],{"class":38,"line":33899},174,[36,33901,33902],{"class":405},"        \"train_loss_all\"",[36,33904,33905],{"class":42},":train_loss_all,\n",[36,33907,33909,33912],{"class":38,"line":33908},175,[36,33910,33911],{"class":405},"        \"val_loss_all\"",[36,33913,33914],{"class":42},":val_loss_all,\n",[36,33916,33918,33921],{"class":38,"line":33917},176,[36,33919,33920],{"class":405},"        \"train_acc_all\"",[36,33922,33923],{"class":42},":train_acc_all,\n",[36,33925,33927,33930],{"class":38,"line":33926},177,[36,33928,33929],{"class":405},"        \"val_acc_all\"",[36,33931,33932],{"class":42},":val_acc_all\n",[36,33934,33936],{"class":38,"line":33935},178,[36,33937,33938],{"class":42},"    })\n",[36,33940,33942],{"class":38,"line":33941},179,[36,33943,33944],{"class":69},"    # 返回训练保存的过程\n",[36,33946,33948,33950],{"class":38,"line":33947},180,[36,33949,4570],{"class":46},[36,33951,33952],{"class":42}," train_process\n",[36,33954,33956],{"class":38,"line":33955},181,[36,33957,2880],{"emptyLinePlaceholder":553},[36,33959,33961],{"class":38,"line":33960},182,[36,33962,33963],{"class":69},"# 将loss值和精度按照图片的形式展示出来\n",[36,33965,33967,33969,33972],{"class":38,"line":33966},183,[36,33968,32424],{"class":46},[36,33970,33971],{"class":2443}," matplot_acc_loss",[36,33973,33974],{"class":42},"(train_process):\n",[36,33976,33978],{"class":38,"line":33977},184,[36,33979,33980],{"class":69},"    # 设置图的大小\n",[36,33982,33984,33987,33989,33991,33993,33995,33997,33999],{"class":38,"line":33983},185,[36,33985,33986],{"class":42},"    plt.figure(",[36,33988,32170],{"class":5696},[36,33990,47],{"class":46},[36,33992,345],{"class":42},[36,33994,154],{"class":53},[36,33996,57],{"class":42},[36,33998,912],{"class":53},[36,34000,370],{"class":42},[36,34002,34004],{"class":38,"line":34003},186,[36,34005,34006],{"class":69},"    # 设置图中有几张图\n",[36,34008,34010],{"class":38,"line":34009},187,[36,34011,34012],{"class":69},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,34014,34016],{"class":38,"line":34015},188,[36,34017,34018],{"class":69},"    # ①loss图\n",[36,34020,34022,34024,34026,34028,34030,34032,34034],{"class":38,"line":34021},189,[36,34023,32204],{"class":42},[36,34025,54],{"class":53},[36,34027,57],{"class":42},[36,34029,96],{"class":53},[36,34031,57],{"class":42},[36,34033,54],{"class":53},[36,34035,63],{"class":42},[36,34037,34039],{"class":38,"line":34038},190,[36,34040,34041],{"class":69},"    # 补充:\n",[36,34043,34045],{"class":38,"line":34044},191,[36,34046,34047],{"class":69},"    # plt.subplot(nrows, ncols, index)\n",[36,34049,34051],{"class":38,"line":34050},192,[36,34052,34053],{"class":69},"    # nrows：行数\n",[36,34055,34057],{"class":38,"line":34056},193,[36,34058,34059],{"class":69},"    # ncols：列数\n",[36,34061,34063],{"class":38,"line":34062},194,[36,34064,34065],{"class":69},"    # index：目前选中第几个子图（从1开始）\n",[36,34067,34069,34072,34075,34078,34081,34083,34086,34088,34091],{"class":38,"line":34068},195,[36,34070,34071],{"class":42},"    plt.plot(train_process[",[36,34073,34074],{"class":405},"\"epoch\"",[36,34076,34077],{"class":42},"],train_process.train_loss_all,",[36,34079,34080],{"class":405},"'ro-'",[36,34082,57],{"class":42},[36,34084,34085],{"class":5696},"label",[36,34087,47],{"class":46},[36,34089,34090],{"class":405},"'train loss'",[36,34092,63],{"class":42},[36,34094,34096,34098,34100,34103,34106,34108,34110,34112,34115],{"class":38,"line":34095},196,[36,34097,34071],{"class":42},[36,34099,34074],{"class":405},[36,34101,34102],{"class":42},"],train_process.val_loss_all,",[36,34104,34105],{"class":405},"'bs--'",[36,34107,57],{"class":42},[36,34109,34085],{"class":5696},[36,34111,47],{"class":46},[36,34113,34114],{"class":405},"'val loss'",[36,34116,63],{"class":42},[36,34118,34120],{"class":38,"line":34119},197,[36,34121,34122],{"class":69},"    # 添加一个图例\n",[36,34124,34126],{"class":38,"line":34125},198,[36,34127,34128],{"class":42},"    plt.legend()\n",[36,34130,34132],{"class":38,"line":34131},199,[36,34133,34134],{"class":69},"    # 给轴添加标签\n",[36,34136,34138,34141,34144],{"class":38,"line":34137},200,[36,34139,34140],{"class":42},"    plt.xlabel(",[36,34142,34143],{"class":405},"'epoch'",[36,34145,63],{"class":42},[36,34147,34149,34152,34155],{"class":38,"line":34148},201,[36,34150,34151],{"class":42},"    plt.ylabel(",[36,34153,34154],{"class":405},"'loss'",[36,34156,63],{"class":42},[36,34158,34160],{"class":38,"line":34159},202,[36,34161,34162],{"class":69},"    # ②准确度图\n",[36,34164,34166,34168,34170,34172,34174,34176,34178],{"class":38,"line":34165},203,[36,34167,32204],{"class":42},[36,34169,54],{"class":53},[36,34171,57],{"class":42},[36,34173,96],{"class":53},[36,34175,57],{"class":42},[36,34177,96],{"class":53},[36,34179,63],{"class":42},[36,34181,34183,34185,34187,34190,34192,34194,34196,34198,34201],{"class":38,"line":34182},204,[36,34184,34071],{"class":42},[36,34186,34074],{"class":405},[36,34188,34189],{"class":42},"],train_process.train_acc_all,",[36,34191,34080],{"class":405},[36,34193,57],{"class":42},[36,34195,34085],{"class":5696},[36,34197,47],{"class":46},[36,34199,34200],{"class":405},"'train acc'",[36,34202,63],{"class":42},[36,34204,34206,34208,34210,34213,34215,34217,34219,34221,34224],{"class":38,"line":34205},205,[36,34207,34071],{"class":42},[36,34209,34074],{"class":405},[36,34211,34212],{"class":42},"],train_process.val_acc_all,",[36,34214,34105],{"class":405},[36,34216,57],{"class":42},[36,34218,34085],{"class":5696},[36,34220,47],{"class":46},[36,34222,34223],{"class":405},"'val acc'",[36,34225,63],{"class":42},[36,34227,34229],{"class":38,"line":34228},206,[36,34230,34231],{"class":69},"    # 添加图例\n",[36,34233,34235],{"class":38,"line":34234},207,[36,34236,34128],{"class":42},[36,34238,34240,34242,34244],{"class":38,"line":34239},208,[36,34241,34140],{"class":42},[36,34243,34074],{"class":405},[36,34245,63],{"class":42},[36,34247,34249,34251,34254],{"class":38,"line":34248},209,[36,34250,34151],{"class":42},[36,34252,34253],{"class":405},"\"acc\"",[36,34255,63],{"class":42},[36,34257,34259],{"class":38,"line":34258},210,[36,34260,34261],{"class":42},"    plt.show()\n",[36,34263,34265],{"class":38,"line":34264},211,[36,34266,2880],{"emptyLinePlaceholder":553},[36,34268,34270],{"class":38,"line":34269},212,[36,34271,34272],{"class":69},"# 正式开始训练:\n",[36,34274,34276,34278,34280,34282,34284],{"class":38,"line":34275},213,[36,34277,2011],{"class":46},[36,34279,31698],{"class":53},[36,34281,3429],{"class":46},[36,34283,31703],{"class":405},[36,34285,4219],{"class":42},[36,34287,34289],{"class":38,"line":34288},214,[36,34290,34291],{"class":69},"    # 将模型实例化\n",[36,34293,34295,34298,34300],{"class":38,"line":34294},215,[36,34296,34297],{"class":42},"    LeNet",[36,34299,47],{"class":46},[36,34301,34302],{"class":42},"LeNet()\n",[36,34304,34306,34309,34311],{"class":38,"line":34305},216,[36,34307,34308],{"class":42},"    train_dataloader,val_dataloader",[36,34310,47],{"class":46},[36,34312,34313],{"class":42},"train_val_data_process()\n",[36,34315,34317,34319,34321,34324,34327,34329,34331],{"class":38,"line":34316},217,[36,34318,33870],{"class":42},[36,34320,47],{"class":46},[36,34322,34323],{"class":42},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,34325,34326],{"class":5696},"num_epochs",[36,34328,47],{"class":46},[36,34330,1313],{"class":53},[36,34332,63],{"class":42},[36,34334,34336],{"class":38,"line":34335},218,[36,34337,34338],{"class":42},"    matplot_acc_loss(train_process)\n",[19,34340,34341],{},"画图的补充点学习：",[19,34343,34344],{},[519,34345],{"alt":31,"src":34346},"\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",[579,34348,34349],{"start":73},[582,34350,34351],{},"测试",[26,34353,34355],{"className":28,"code":34354,"language":30,"meta":31,"style":31},"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",[33,34356,34357,34363,34373,34385,34395,34400,34410,34420,34424,34429,34438,34455,34467,34484,34495,34511,34516,34527,34538,34549,34556,34560,34565,34575,34580,34597,34605,34609,34614,34623,34632,34636,34641,34646,34651,34658,34663,34675,34685,34695,34700,34704,34709,34718,34723,34739,34744,34749,34754,34768,34773,34787,34791,34796,34811,34816,34828,34832,34837,34849,34854,34862,34867,34872,34882,34887,34896,34901,34906,34910,34915,34920,34936,34944,34949,34954,35013,35019,35024,35035,35043,35051,35055,35060,35064,35069,35077,35082,35098,35103,35113,35123],{"__ignoreMap":31},[36,34358,34359,34361],{"class":38,"line":39},[36,34360,30871],{"class":46},[36,34362,30874],{"class":42},[36,34364,34365,34367,34369,34371],{"class":38,"line":66},[36,34366,30871],{"class":46},[36,34368,31893],{"class":42},[36,34370,31861],{"class":46},[36,34372,31898],{"class":42},[36,34374,34375,34377,34380,34382],{"class":38,"line":73},[36,34376,31215],{"class":46},[36,34378,34379],{"class":42}," jupyter_client.consoleapp ",[36,34381,30871],{"class":46},[36,34383,34384],{"class":42}," classes\n",[36,34386,34387,34389,34391,34393],{"class":38,"line":79},[36,34388,31215],{"class":46},[36,34390,31876],{"class":42},[36,34392,30871],{"class":46},[36,34394,31881],{"class":42},[36,34396,34397],{"class":38,"line":85},[36,34398,34399],{"class":69},"# 导入数据集\n",[36,34401,34402,34404,34406,34408],{"class":38,"line":419},[36,34403,31215],{"class":46},[36,34405,31846],{"class":42},[36,34407,30871],{"class":46},[36,34409,31851],{"class":42},[36,34411,34412,34414,34416,34418],{"class":38,"line":425},[36,34413,31215],{"class":46},[36,34415,32391],{"class":42},[36,34417,30871],{"class":46},[36,34419,32396],{"class":42},[36,34421,34422],{"class":38,"line":431},[36,34423,2880],{"emptyLinePlaceholder":553},[36,34425,34426],{"class":38,"line":437},[36,34427,34428],{"class":69},"# 测试数据处理\n",[36,34430,34431,34433,34436],{"class":38,"line":443},[36,34432,32424],{"class":46},[36,34434,34435],{"class":2443}," test_data_process",[36,34437,32430],{"class":42},[36,34439,34440,34443,34445,34447,34449,34451,34453],{"class":38,"line":2092},[36,34441,34442],{"class":42},"    test_data",[36,34444,47],{"class":46},[36,34446,31933],{"class":42},[36,34448,31936],{"class":5696},[36,34450,47],{"class":46},[36,34452,31941],{"class":405},[36,34454,31944],{"class":42},[36,34456,34457,34460,34462,34465],{"class":38,"line":2097},[36,34458,34459],{"class":5696},"                           train",[36,34461,47],{"class":46},[36,34463,34464],{"class":53},"False",[36,34466,31944],{"class":42},[36,34468,34469,34472,34474,34476,34478,34480,34482],{"class":38,"line":2103},[36,34470,34471],{"class":5696},"                           transform",[36,34473,47],{"class":46},[36,34475,31971],{"class":42},[36,34477,531],{"class":5696},[36,34479,47],{"class":46},[36,34481,1514],{"class":53},[36,34483,31981],{"class":42},[36,34485,34486,34489,34491,34493],{"class":38,"line":2108},[36,34487,34488],{"class":5696},"                           download",[36,34490,47],{"class":46},[36,34492,31954],{"class":53},[36,34494,63],{"class":42},[36,34496,34497,34500,34502,34504,34506,34508],{"class":38,"line":2122},[36,34498,34499],{"class":42},"    test_dataloader",[36,34501,47],{"class":46},[36,34503,32011],{"class":42},[36,34505,32014],{"class":5696},[36,34507,47],{"class":46},[36,34509,34510],{"class":42},"test_data,\n",[36,34512,34513],{"class":38,"line":2127},[36,34514,34515],{"class":69},"                                    # 这里是一张一张进行测试\n",[36,34517,34518,34521,34523,34525],{"class":38,"line":2133},[36,34519,34520],{"class":5696},"                                    batch_size",[36,34522,47],{"class":46},[36,34524,54],{"class":53},[36,34526,31944],{"class":42},[36,34528,34529,34532,34534,34536],{"class":38,"line":2154},[36,34530,34531],{"class":5696},"                                    shuffle",[36,34533,47],{"class":46},[36,34535,31954],{"class":53},[36,34537,31944],{"class":42},[36,34539,34540,34543,34545,34547],{"class":38,"line":2159},[36,34541,34542],{"class":5696},"                                    num_workers",[36,34544,47],{"class":46},[36,34546,812],{"class":53},[36,34548,63],{"class":42},[36,34550,34551,34553],{"class":38,"line":2173},[36,34552,4570],{"class":46},[36,34554,34555],{"class":42}," test_dataloader\n",[36,34557,34558],{"class":38,"line":2178},[36,34559,2880],{"emptyLinePlaceholder":553},[36,34561,34562],{"class":38,"line":2207},[36,34563,34564],{"class":69},"# 定义模型测试函数\n",[36,34566,34567,34569,34572],{"class":38,"line":2212},[36,34568,32424],{"class":46},[36,34570,34571],{"class":2443}," test_model_process",[36,34573,34574],{"class":42},"(model,test_dataloader):\n",[36,34576,34577],{"class":38,"line":2229},[36,34578,34579],{"class":69},"    # 将模型放到设备当中，先进行判断\n",[36,34581,34582,34584,34586,34588,34590,34592,34594],{"class":38,"line":2234},[36,34583,31715],{"class":42},[36,34585,47],{"class":46},[36,34587,31722],{"class":405},[36,34589,2184],{"class":46},[36,34591,31727],{"class":42},[36,34593,2181],{"class":46},[36,34595,34596],{"class":405}," \"cpu\"\n",[36,34598,34599,34601,34603],{"class":38,"line":2239},[36,34600,31767],{"class":42},[36,34602,47],{"class":46},[36,34604,32766],{"class":42},[36,34606,34607],{"class":38,"line":2244},[36,34608,2880],{"emptyLinePlaceholder":553},[36,34610,34611],{"class":38,"line":2258},[36,34612,34613],{"class":69},"    # 设置初始化参数\n",[36,34615,34616,34619,34621],{"class":38,"line":2263},[36,34617,34618],{"class":42},"    test_corrects",[36,34620,47],{"class":46},[36,34622,32819],{"class":53},[36,34624,34625,34628,34630],{"class":38,"line":3057},[36,34626,34627],{"class":42},"    test_num",[36,34629,47],{"class":46},[36,34631,3565],{"class":53},[36,34633,34634],{"class":38,"line":3071},[36,34635,2880],{"emptyLinePlaceholder":553},[36,34637,34638],{"class":38,"line":3079},[36,34639,34640],{"class":69},"    # 进行模型测试\n",[36,34642,34643],{"class":38,"line":3084},[36,34644,34645],{"class":69},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,34647,34648],{"class":38,"line":3090},[36,34649,34650],{"class":69},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,34652,34653,34656],{"class":38,"line":3096},[36,34654,34655],{"class":46},"    with",[36,34657,33361],{"class":42},[36,34659,34660],{"class":38,"line":3101},[36,34661,34662],{"class":69},"        # 从数据中进行\n",[36,34664,34665,34667,34670,34672],{"class":38,"line":8428},[36,34666,3883],{"class":46},[36,34668,34669],{"class":42}," test_data_x,test_data_y ",[36,34671,26524],{"class":46},[36,34673,34674],{"class":42}," test_dataloader:\n",[36,34676,34677,34680,34682],{"class":38,"line":8452},[36,34678,34679],{"class":42},"            test_data_x",[36,34681,47],{"class":46},[36,34683,34684],{"class":42},"test_data_x.to(device)\n",[36,34686,34687,34690,34692],{"class":38,"line":8457},[36,34688,34689],{"class":42},"            test_data_y",[36,34691,47],{"class":46},[36,34693,34694],{"class":42},"test_data_y.to(device)\n",[36,34696,34697],{"class":38,"line":8463},[36,34698,34699],{"class":69},"            # 设置为验证模式\n",[36,34701,34702],{"class":38,"line":8490},[36,34703,33352],{"class":42},[36,34705,34706],{"class":38,"line":8495},[36,34707,34708],{"class":69},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,34710,34711,34713,34715],{"class":38,"line":8501},[36,34712,33137],{"class":42},[36,34714,47],{"class":46},[36,34716,34717],{"class":42},"model(test_data_x)\n",[36,34719,34720],{"class":38,"line":8513},[36,34721,34722],{"class":69},"            # 查找每一行中最大值对应的下标\n",[36,34724,34725,34727,34729,34731,34733,34735,34737],{"class":38,"line":8525},[36,34726,33154],{"class":42},[36,34728,47],{"class":46},[36,34730,33159],{"class":42},[36,34732,33162],{"class":5696},[36,34734,47],{"class":46},[36,34736,54],{"class":53},[36,34738,63],{"class":42},[36,34740,34741],{"class":38,"line":8537},[36,34742,34743],{"class":69},"            # 计算正确率\n",[36,34745,34746],{"class":38,"line":10196},[36,34747,34748],{"class":69},"            # .data表示是一个不带梯度信息的tensor\n",[36,34750,34751],{"class":38,"line":10221},[36,34752,34753],{"class":69},"            # 如果预测正确，则准确度test_corrects加1\n",[36,34755,34756,34759,34761,34763,34765],{"class":38,"line":10244},[36,34757,34758],{"class":42},"            test_corrects",[36,34760,9957],{"class":46},[36,34762,33264],{"class":42},[36,34764,3429],{"class":46},[36,34766,34767],{"class":42},"test_data_y.data)\n",[36,34769,34770],{"class":38,"line":10268},[36,34771,34772],{"class":69},"            # 将所有的测试样本进行累计\n",[36,34774,34775,34778,34780,34783,34785],{"class":38,"line":10273},[36,34776,34777],{"class":42},"            test_num",[36,34779,9957],{"class":46},[36,34781,34782],{"class":42},"test_data_x.size(",[36,34784,812],{"class":53},[36,34786,63],{"class":42},[36,34788,34789],{"class":38,"line":10278},[36,34790,2880],{"emptyLinePlaceholder":553},[36,34792,34793],{"class":38,"line":10283},[36,34794,34795],{"class":69},"        # 计算准确度\n",[36,34797,34798,34801,34803,34806,34808],{"class":38,"line":10292},[36,34799,34800],{"class":42},"        test_acc",[36,34802,47],{"class":46},[36,34804,34805],{"class":42},"test_corrects.double().item()",[36,34807,1197],{"class":46},[36,34809,34810],{"class":42},"test_num\n",[36,34812,34813],{"class":38,"line":10297},[36,34814,34815],{"class":69},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,34817,34818,34820,34822,34825],{"class":38,"line":10303},[36,34819,32928],{"class":53},[36,34821,345],{"class":42},[36,34823,34824],{"class":405},"\"测试的准确率：\"",[36,34826,34827],{"class":42},",test_acc)\n",[36,34829,34830],{"class":38,"line":10324},[36,34831,2880],{"emptyLinePlaceholder":553},[36,34833,34834],{"class":38,"line":10330},[36,34835,34836],{"class":69},"# 实现模型的测试功能\n",[36,34838,34839,34841,34843,34845,34847],{"class":38,"line":10344},[36,34840,2011],{"class":46},[36,34842,31698],{"class":53},[36,34844,3429],{"class":46},[36,34846,31703],{"class":405},[36,34848,4219],{"class":42},[36,34850,34851],{"class":38,"line":10350},[36,34852,34853],{"class":69},"    # 加载模型\n",[36,34855,34856,34858,34860],{"class":38,"line":10377},[36,34857,31767],{"class":42},[36,34859,47],{"class":46},[36,34861,34302],{"class":42},[36,34863,34864],{"class":38,"line":10386},[36,34865,34866],{"class":69},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,34868,34869],{"class":38,"line":10392},[36,34870,34871],{"class":69},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,34873,34874,34877,34880],{"class":38,"line":10400},[36,34875,34876],{"class":42},"    model.load_state_dict(torch.load(",[36,34878,34879],{"class":405},"'best_model.pth'",[36,34881,370],{"class":42},[36,34883,34884],{"class":38,"line":10405},[36,34885,34886],{"class":69},"    # 数据加载\n",[36,34888,34889,34891,34893],{"class":38,"line":17084},[36,34890,34499],{"class":42},[36,34892,47],{"class":46},[36,34894,34895],{"class":42},"test_data_process()\n",[36,34897,34898],{"class":38,"line":17090},[36,34899,34900],{"class":69},"    # 加载模型测试的函数\n",[36,34902,34903],{"class":38,"line":17113},[36,34904,34905],{"class":42},"    test_model_process(model,test_dataloader)\n",[36,34907,34908],{"class":38,"line":17119},[36,34909,2880],{"emptyLinePlaceholder":553},[36,34911,34912],{"class":38,"line":17142},[36,34913,34914],{"class":69},"    # 验证集推理实现：\n",[36,34916,34917],{"class":38,"line":17156},[36,34918,34919],{"class":69},"    # 加载数据加载的更详细一些\n",[36,34921,34922,34924,34926,34928,34930,34932,34934],{"class":38,"line":17176},[36,34923,31715],{"class":42},[36,34925,47],{"class":46},[36,34927,31722],{"class":405},[36,34929,2184],{"class":46},[36,34931,31727],{"class":42},[36,34933,2181],{"class":46},[36,34935,34596],{"class":405},[36,34937,34938,34940,34942],{"class":38,"line":17182},[36,34939,31767],{"class":42},[36,34941,47],{"class":46},[36,34943,32766],{"class":42},[36,34945,34946],{"class":38,"line":17193},[36,34947,34948],{"class":69},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,34950,34951],{"class":38,"line":17216},[36,34952,34953],{"class":69},"    # 顺序不可改变\n",[36,34955,34956,34959,34961,34963,34966,34968,34971,34973,34976,34978,34981,34983,34986,34988,34991,34993,34996,34998,35001,35003,35006,35008,35011],{"class":38,"line":17238},[36,34957,34958],{"class":42},"    classes",[36,34960,47],{"class":46},[36,34962,1503],{"class":42},[36,34964,34965],{"class":405},"'T-shirt\u002Ftop'",[36,34967,57],{"class":42},[36,34969,34970],{"class":405},"'Trouser'",[36,34972,57],{"class":42},[36,34974,34975],{"class":405},"'Pullover'",[36,34977,57],{"class":42},[36,34979,34980],{"class":405},"'Dress'",[36,34982,57],{"class":42},[36,34984,34985],{"class":405},"'Coat'",[36,34987,57],{"class":42},[36,34989,34990],{"class":405},"'Sandal'",[36,34992,57],{"class":42},[36,34994,34995],{"class":405},"'Shirt'",[36,34997,57],{"class":42},[36,34999,35000],{"class":405},"'Sneaker'",[36,35002,57],{"class":42},[36,35004,35005],{"class":405},"'Bag'",[36,35007,57],{"class":42},[36,35009,35010],{"class":405},"'Ankle boot'",[36,35012,33723],{"class":42},[36,35014,35015,35017],{"class":38,"line":17243},[36,35016,34655],{"class":46},[36,35018,33361],{"class":42},[36,35020,35021],{"class":38,"line":17249},[36,35022,35023],{"class":69},"        # 将数据和标签都放到设备当中\n",[36,35025,35026,35028,35031,35033],{"class":38,"line":17263},[36,35027,3883],{"class":46},[36,35029,35030],{"class":42}," b_x,b_y ",[36,35032,26524],{"class":46},[36,35034,34674],{"class":42},[36,35036,35037,35039,35041],{"class":38,"line":17276},[36,35038,33087],{"class":42},[36,35040,47],{"class":46},[36,35042,33092],{"class":42},[36,35044,35045,35047,35049],{"class":38,"line":17281},[36,35046,33102],{"class":42},[36,35048,47],{"class":46},[36,35050,33107],{"class":42},[36,35052,35053],{"class":38,"line":17295},[36,35054,2880],{"emptyLinePlaceholder":553},[36,35056,35057],{"class":38,"line":17300},[36,35058,35059],{"class":69},"            # 设置模型为验证模式\n",[36,35061,35062],{"class":38,"line":17306},[36,35063,33352],{"class":42},[36,35065,35066],{"class":38,"line":17311},[36,35067,35068],{"class":69},"            # 模型推理结果\n",[36,35070,35071,35073,35075],{"class":38,"line":17325},[36,35072,33137],{"class":42},[36,35074,47],{"class":46},[36,35076,33142],{"class":42},[36,35078,35079],{"class":38,"line":17330},[36,35080,35081],{"class":69},"            # 获取最大下标，最大下标就是类别号\n",[36,35083,35084,35086,35088,35090,35092,35094,35096],{"class":38,"line":17335},[36,35085,33154],{"class":42},[36,35087,47],{"class":46},[36,35089,33159],{"class":42},[36,35091,33162],{"class":5696},[36,35093,47],{"class":46},[36,35095,54],{"class":53},[36,35097,63],{"class":42},[36,35099,35100],{"class":38,"line":17349},[36,35101,35102],{"class":69},"            # 取出张量中的数值\n",[36,35104,35105,35108,35110],{"class":38,"line":17361},[36,35106,35107],{"class":42},"            result",[36,35109,47],{"class":46},[36,35111,35112],{"class":42},"pre_lab.item()\n",[36,35114,35115,35118,35120],{"class":38,"line":17366},[36,35116,35117],{"class":42},"            label",[36,35119,47],{"class":46},[36,35121,35122],{"class":42},"b_y.item()\n",[36,35124,35125,35128,35130,35133,35136,35139,35141,35144],{"class":38,"line":17379},[36,35126,35127],{"class":53},"            print",[36,35129,345],{"class":42},[36,35131,35132],{"class":405},"\"预测值：\"",[36,35134,35135],{"class":42},",classes[result],",[36,35137,35138],{"class":405},"\"------\"",[36,35140,57],{"class":42},[36,35142,35143],{"class":405},"\"真实值：\"",[36,35145,35146],{"class":42},",classes[label])\n",[19,35148,35149],{},"（2）AlexNet",[579,35151,35152],{},[582,35153,35154],{},"神经网络构建",[26,35156,35158],{"className":28,"code":35157,"language":30,"meta":31,"style":31},"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",[33,35159,35160,35166,35176,35186,35198,35202,35219,35227,35242,35254,35296,35323,35366,35392,35436,35479,35522,35549,35553,35563,35568,35596,35615,35634,35638,35643,35651,35666,35676,35690,35700,35715,35730,35745,35756,35760,35765,35775,35790,35795,35809,35824,35836,35841,35852,35857,35863,35868,35880,35900,35905,35914],{"__ignoreMap":31},[36,35161,35162,35164],{"class":38,"line":39},[36,35163,30871],{"class":46},[36,35165,30874],{"class":42},[36,35167,35168,35170,35172,35174],{"class":38,"line":66},[36,35169,31215],{"class":46},[36,35171,31218],{"class":42},[36,35173,30871],{"class":46},[36,35175,31223],{"class":42},[36,35177,35178,35180,35182,35184],{"class":38,"line":73},[36,35179,31215],{"class":46},[36,35181,31235],{"class":42},[36,35183,30871],{"class":46},[36,35185,31240],{"class":42},[36,35187,35188,35190,35193,35195],{"class":38,"line":79},[36,35189,30871],{"class":46},[36,35191,35192],{"class":42}," torch.nn.functional ",[36,35194,31861],{"class":46},[36,35196,35197],{"class":42}," F\n",[36,35199,35200],{"class":38,"line":85},[36,35201,2880],{"emptyLinePlaceholder":553},[36,35203,35204,35206,35209,35211,35213,35215,35217],{"class":38,"line":419},[36,35205,15174],{"class":46},[36,35207,35208],{"class":2443}," AlexNet",[36,35210,345],{"class":42},[36,35212,31256],{"class":2443},[36,35214,1171],{"class":42},[36,35216,31261],{"class":2443},[36,35218,31264],{"class":42},[36,35220,35221,35223,35225],{"class":38,"line":425},[36,35222,31279],{"class":46},[36,35224,31282],{"class":53},[36,35226,31285],{"class":42},[36,35228,35229,35231,35234,35236,35238,35240],{"class":38,"line":431},[36,35230,31295],{"class":53},[36,35232,35233],{"class":42},"(AlexNet,",[36,35235,31301],{"class":53},[36,35237,31304],{"class":42},[36,35239,31307],{"class":53},[36,35241,2456],{"class":42},[36,35243,35244,35246,35249,35251],{"class":38,"line":437},[36,35245,31323],{"class":53},[36,35247,35248],{"class":42},".ReLu",[36,35250,47],{"class":46},[36,35252,35253],{"class":42},"nn.ReLU()\n",[36,35255,35256,35258,35260,35262,35264,35266,35268,35270,35272,35274,35276,35278,35280,35282,35284,35286,35288,35290,35292,35294],{"class":38,"line":443},[36,35257,31323],{"class":53},[36,35259,31326],{"class":42},[36,35261,47],{"class":46},[36,35263,31331],{"class":42},[36,35265,31334],{"class":5696},[36,35267,47],{"class":46},[36,35269,54],{"class":53},[36,35271,57],{"class":42},[36,35273,31343],{"class":5696},[36,35275,47],{"class":46},[36,35277,830],{"class":53},[36,35279,57],{"class":42},[36,35281,31352],{"class":5696},[36,35283,47],{"class":46},[36,35285,1088],{"class":53},[36,35287,57],{"class":42},[36,35289,31407],{"class":5696},[36,35291,47],{"class":46},[36,35293,912],{"class":53},[36,35295,63],{"class":42},[36,35297,35298,35300,35302,35304,35307,35309,35311,35313,35315,35317,35319,35321],{"class":38,"line":2092},[36,35299,31323],{"class":53},[36,35301,31391],{"class":42},[36,35303,47],{"class":46},[36,35305,35306],{"class":42},"nn.MaxPool2d(",[36,35308,31352],{"class":5696},[36,35310,47],{"class":46},[36,35312,127],{"class":53},[36,35314,57],{"class":42},[36,35316,31407],{"class":5696},[36,35318,47],{"class":46},[36,35320,96],{"class":53},[36,35322,63],{"class":42},[36,35324,35325,35327,35329,35331,35333,35335,35337,35339,35341,35343,35345,35348,35350,35352,35354,35356,35358,35360,35362,35364],{"class":38,"line":2097},[36,35326,31323],{"class":53},[36,35328,31420],{"class":42},[36,35330,47],{"class":46},[36,35332,31331],{"class":42},[36,35334,31334],{"class":5696},[36,35336,47],{"class":46},[36,35338,830],{"class":53},[36,35340,57],{"class":42},[36,35342,31343],{"class":5696},[36,35344,47],{"class":46},[36,35346,35347],{"class":53},"256",[36,35349,57],{"class":42},[36,35351,31352],{"class":5696},[36,35353,47],{"class":46},[36,35355,938],{"class":53},[36,35357,57],{"class":42},[36,35359,31361],{"class":5696},[36,35361,47],{"class":46},[36,35363,96],{"class":53},[36,35365,63],{"class":42},[36,35367,35368,35370,35372,35374,35376,35378,35380,35382,35384,35386,35388,35390],{"class":38,"line":2103},[36,35369,31323],{"class":53},[36,35371,31455],{"class":42},[36,35373,47],{"class":46},[36,35375,35306],{"class":42},[36,35377,31352],{"class":5696},[36,35379,47],{"class":46},[36,35381,127],{"class":53},[36,35383,57],{"class":42},[36,35385,31407],{"class":5696},[36,35387,47],{"class":46},[36,35389,96],{"class":53},[36,35391,63],{"class":42},[36,35393,35394,35396,35399,35401,35403,35405,35407,35409,35411,35413,35415,35418,35420,35422,35424,35426,35428,35430,35432,35434],{"class":38,"line":2108},[36,35395,31323],{"class":53},[36,35397,35398],{"class":42},".c5",[36,35400,47],{"class":46},[36,35402,31331],{"class":42},[36,35404,31334],{"class":5696},[36,35406,47],{"class":46},[36,35408,35347],{"class":53},[36,35410,57],{"class":42},[36,35412,31343],{"class":5696},[36,35414,47],{"class":46},[36,35416,35417],{"class":53},"384",[36,35419,57],{"class":42},[36,35421,31352],{"class":5696},[36,35423,47],{"class":46},[36,35425,127],{"class":53},[36,35427,57],{"class":42},[36,35429,31361],{"class":5696},[36,35431,47],{"class":46},[36,35433,54],{"class":53},[36,35435,63],{"class":42},[36,35437,35438,35440,35443,35445,35447,35449,35451,35453,35455,35457,35459,35461,35463,35465,35467,35469,35471,35473,35475,35477],{"class":38,"line":2122},[36,35439,31323],{"class":53},[36,35441,35442],{"class":42},".c6",[36,35444,47],{"class":46},[36,35446,31331],{"class":42},[36,35448,31334],{"class":5696},[36,35450,47],{"class":46},[36,35452,35417],{"class":53},[36,35454,57],{"class":42},[36,35456,31343],{"class":5696},[36,35458,47],{"class":46},[36,35460,35417],{"class":53},[36,35462,57],{"class":42},[36,35464,31352],{"class":5696},[36,35466,47],{"class":46},[36,35468,127],{"class":53},[36,35470,57],{"class":42},[36,35472,31361],{"class":5696},[36,35474,47],{"class":46},[36,35476,54],{"class":53},[36,35478,63],{"class":42},[36,35480,35481,35483,35486,35488,35490,35492,35494,35496,35498,35500,35502,35504,35506,35508,35510,35512,35514,35516,35518,35520],{"class":38,"line":2127},[36,35482,31323],{"class":53},[36,35484,35485],{"class":42},".c7",[36,35487,47],{"class":46},[36,35489,31331],{"class":42},[36,35491,31334],{"class":5696},[36,35493,47],{"class":46},[36,35495,35417],{"class":53},[36,35497,57],{"class":42},[36,35499,31343],{"class":5696},[36,35501,47],{"class":46},[36,35503,35347],{"class":53},[36,35505,57],{"class":42},[36,35507,31352],{"class":5696},[36,35509,47],{"class":46},[36,35511,127],{"class":53},[36,35513,57],{"class":42},[36,35515,31361],{"class":5696},[36,35517,47],{"class":46},[36,35519,54],{"class":53},[36,35521,63],{"class":42},[36,35523,35524,35526,35529,35531,35533,35535,35537,35539,35541,35543,35545,35547],{"class":38,"line":2133},[36,35525,31323],{"class":53},[36,35527,35528],{"class":42},".s8",[36,35530,47],{"class":46},[36,35532,35306],{"class":42},[36,35534,31352],{"class":5696},[36,35536,47],{"class":46},[36,35538,127],{"class":53},[36,35540,57],{"class":42},[36,35542,31407],{"class":5696},[36,35544,47],{"class":46},[36,35546,96],{"class":53},[36,35548,63],{"class":42},[36,35550,35551],{"class":38,"line":2154},[36,35552,31480],{"class":69},[36,35554,35555,35557,35559,35561],{"class":38,"line":2159},[36,35556,31323],{"class":53},[36,35558,31487],{"class":42},[36,35560,47],{"class":46},[36,35562,31492],{"class":42},[36,35564,35565],{"class":38,"line":2173},[36,35566,35567],{"class":69},"       # 定义全连接层\n",[36,35569,35570,35572,35575,35577,35579,35581,35583,35585,35587,35589,35591,35594],{"class":38,"line":2178},[36,35571,31323],{"class":53},[36,35573,35574],{"class":42},".f1",[36,35576,47],{"class":46},[36,35578,31509],{"class":42},[36,35580,101],{"class":53},[36,35582,1071],{"class":46},[36,35584,101],{"class":53},[36,35586,1071],{"class":46},[36,35588,35347],{"class":53},[36,35590,57],{"class":42},[36,35592,35593],{"class":53},"4096",[36,35595,63],{"class":42},[36,35597,35598,35600,35603,35605,35607,35609,35611,35613],{"class":38,"line":2207},[36,35599,31323],{"class":53},[36,35601,35602],{"class":42},".f2",[36,35604,47],{"class":46},[36,35606,31509],{"class":42},[36,35608,35593],{"class":53},[36,35610,57],{"class":42},[36,35612,35593],{"class":53},[36,35614,63],{"class":42},[36,35616,35617,35619,35622,35624,35626,35628,35630,35632],{"class":38,"line":2212},[36,35618,31323],{"class":53},[36,35620,35621],{"class":42},".f3",[36,35623,47],{"class":46},[36,35625,31509],{"class":42},[36,35627,35593],{"class":53},[36,35629,57],{"class":42},[36,35631,1062],{"class":53},[36,35633,63],{"class":42},[36,35635,35636],{"class":38,"line":2229},[36,35637,2880],{"emptyLinePlaceholder":553},[36,35639,35640],{"class":38,"line":2234},[36,35641,35642],{"class":69},"    # 定义前向传播\n",[36,35644,35645,35647,35649],{"class":38,"line":2239},[36,35646,31279],{"class":46},[36,35648,31571],{"class":2443},[36,35650,31574],{"class":42},[36,35652,35653,35655,35657,35659,35662,35664],{"class":38,"line":2244},[36,35654,31579],{"class":42},[36,35656,47],{"class":46},[36,35658,31301],{"class":53},[36,35660,35661],{"class":42},".ReLu(",[36,35663,31301],{"class":53},[36,35665,31591],{"class":42},[36,35667,35668,35670,35672,35674],{"class":38,"line":2258},[36,35669,31579],{"class":42},[36,35671,47],{"class":46},[36,35673,31301],{"class":53},[36,35675,31602],{"class":42},[36,35677,35678,35680,35682,35684,35686,35688],{"class":38,"line":2263},[36,35679,31579],{"class":42},[36,35681,47],{"class":46},[36,35683,31301],{"class":53},[36,35685,35661],{"class":42},[36,35687,31301],{"class":53},[36,35689,31617],{"class":42},[36,35691,35692,35694,35696,35698],{"class":38,"line":3057},[36,35693,31579],{"class":42},[36,35695,47],{"class":46},[36,35697,31301],{"class":53},[36,35699,31628],{"class":42},[36,35701,35702,35704,35706,35708,35710,35712],{"class":38,"line":3071},[36,35703,31579],{"class":42},[36,35705,47],{"class":46},[36,35707,31301],{"class":53},[36,35709,35661],{"class":42},[36,35711,31301],{"class":53},[36,35713,35714],{"class":42},".c5(x))\n",[36,35716,35717,35719,35721,35723,35725,35727],{"class":38,"line":3079},[36,35718,31579],{"class":42},[36,35720,47],{"class":46},[36,35722,31301],{"class":53},[36,35724,35661],{"class":42},[36,35726,31301],{"class":53},[36,35728,35729],{"class":42},".c6(x))\n",[36,35731,35732,35734,35736,35738,35740,35742],{"class":38,"line":3084},[36,35733,31579],{"class":42},[36,35735,47],{"class":46},[36,35737,31301],{"class":53},[36,35739,35661],{"class":42},[36,35741,31301],{"class":53},[36,35743,35744],{"class":42},".c7(x))\n",[36,35746,35747,35749,35751,35753],{"class":38,"line":3090},[36,35748,31579],{"class":42},[36,35750,47],{"class":46},[36,35752,31301],{"class":53},[36,35754,35755],{"class":42},".s8(x)\n",[36,35757,35758],{"class":38,"line":3096},[36,35759,2880],{"emptyLinePlaceholder":553},[36,35761,35762],{"class":38,"line":3101},[36,35763,35764],{"class":69},"        # 展平加线性全连接层\n",[36,35766,35767,35769,35771,35773],{"class":38,"line":8428},[36,35768,31579],{"class":42},[36,35770,47],{"class":46},[36,35772,31301],{"class":53},[36,35774,31639],{"class":42},[36,35776,35777,35779,35781,35783,35785,35787],{"class":38,"line":8452},[36,35778,31579],{"class":42},[36,35780,47],{"class":46},[36,35782,31301],{"class":53},[36,35784,35661],{"class":42},[36,35786,31301],{"class":53},[36,35788,35789],{"class":42},".f1(x))\n",[36,35791,35792],{"class":38,"line":8457},[36,35793,35794],{"class":69},"        # 还需要dropout对神经元随机进行失活\n",[36,35796,35797,35799,35801,35804,35807],{"class":38,"line":8463},[36,35798,31579],{"class":42},[36,35800,47],{"class":46},[36,35802,35803],{"class":42},"F.dropout(x,",[36,35805,35806],{"class":53},"0.5",[36,35808,63],{"class":42},[36,35810,35811,35813,35815,35817,35819,35821],{"class":38,"line":8490},[36,35812,31579],{"class":42},[36,35814,47],{"class":46},[36,35816,31301],{"class":53},[36,35818,35661],{"class":42},[36,35820,31301],{"class":53},[36,35822,35823],{"class":42},".f2(x))\n",[36,35825,35826,35828,35830,35832,35834],{"class":38,"line":8495},[36,35827,31579],{"class":42},[36,35829,47],{"class":46},[36,35831,35803],{"class":42},[36,35833,35806],{"class":53},[36,35835,63],{"class":42},[36,35837,35838],{"class":38,"line":8501},[36,35839,35840],{"class":69},"        # 直接输出\n",[36,35842,35843,35845,35847,35849],{"class":38,"line":8513},[36,35844,31579],{"class":42},[36,35846,47],{"class":46},[36,35848,31301],{"class":53},[36,35850,35851],{"class":42},".f3(x)\n",[36,35853,35854],{"class":38,"line":8525},[36,35855,35856],{"class":69},"        # 前向传播输出\n",[36,35858,35859,35861],{"class":38,"line":8537},[36,35860,15232],{"class":46},[36,35862,31687],{"class":42},[36,35864,35865],{"class":38,"line":10196},[36,35866,35867],{"class":69},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,35869,35870,35872,35874,35876,35878],{"class":38,"line":10221},[36,35871,2011],{"class":46},[36,35873,31698],{"class":53},[36,35875,3429],{"class":46},[36,35877,31703],{"class":405},[36,35879,4219],{"class":42},[36,35881,35882,35884,35886,35888,35890,35892,35894,35896,35898],{"class":38,"line":10244},[36,35883,31715],{"class":42},[36,35885,47],{"class":46},[36,35887,30930],{"class":42},[36,35889,31722],{"class":405},[36,35891,2184],{"class":46},[36,35893,31727],{"class":42},[36,35895,2181],{"class":46},[36,35897,30955],{"class":405},[36,35899,63],{"class":42},[36,35901,35902],{"class":38,"line":10268},[36,35903,35904],{"class":69},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,35906,35907,35909,35911],{"class":38,"line":10273},[36,35908,31767],{"class":42},[36,35910,47],{"class":46},[36,35912,35913],{"class":42},"AlexNet().to(device)\n",[36,35915,35916,35918,35920,35922,35924,35927,35929,35931],{"class":38,"line":10278},[36,35917,31777],{"class":53},[36,35919,31780],{"class":42},[36,35921,54],{"class":53},[36,35923,57],{"class":42},[36,35925,35926],{"class":53},"227",[36,35928,57],{"class":42},[36,35930,35926],{"class":53},[36,35932,31793],{"class":42},[579,35934,35935],{"start":66},[582,35936,31806],{},[26,35938,35940],{"className":28,"code":35939,"language":30,"meta":31,"style":31},"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",[33,35941,35942,35948,35954,35964,35970,35980,35990,36000,36010,36020,36024,36035,36045,36049,36053,36057,36065,36077,36087,36103,36113,36145,36159,36169,36179,36183,36193,36207,36217,36227,36237,36243,36247,36251,36255,36259,36263,36271,36291,36295,36299,36303,36307,36311,36327,36331,36335,36343,36347,36351,36359,36363,36367,36371,36379,36383,36387,36391,36395,36403,36407,36415,36419,36427,36431,36439,36443,36451,36455,36459,36467,36471,36475,36479,36491,36515,36529,36533,36537,36541,36549,36553,36561,36565,36573,36577,36585,36589,36597,36601,36609,36613,36625,36629,36637,36641,36649,36653,36657,36661,36665,36673,36677,36693,36697,36705,36709,36713,36717,36721,36725,36729,36733,36749,36753,36765,36769,36781,36785,36797,36801,36809,36813,36821,36825,36829,36834,36840,36844,36853,36857,36874,36878,36887,36891,36909,36922,36927,36940,36944,36948,36956,36960,36964,36972,36976,36984,36988,36996,37000,37004,37046,37088,37092,37096,37112,37116,37132,37136,37140,37148,37152,37156,37168,37206,37211,37216,37225,37229,37243,37253,37259,37265,37271,37277,37281,37285,37291,37295,37299,37307,37311,37329,37333,37337,37341,37357,37361,37365,37369,37373,37377,37397,37417,37421,37425,37429,37437,37445,37449,37465,37485,37505,37509,37513,37521,37529,37533,37537,37541,37553,37557,37567,37575,37592],{"__ignoreMap":31},[36,35943,35944,35946],{"class":38,"line":39},[36,35945,30871],{"class":46},[36,35947,32299],{"class":42},[36,35949,35950,35952],{"class":38,"line":66},[36,35951,30871],{"class":46},[36,35953,32306],{"class":42},[36,35955,35956,35958,35960,35962],{"class":38,"line":73},[36,35957,30871],{"class":46},[36,35959,32317],{"class":42},[36,35961,31861],{"class":46},[36,35963,32322],{"class":42},[36,35965,35966,35968],{"class":38,"line":79},[36,35967,30871],{"class":46},[36,35969,30874],{"class":42},[36,35971,35972,35974,35976,35978],{"class":38,"line":85},[36,35973,31215],{"class":46},[36,35975,31893],{"class":42},[36,35977,30871],{"class":46},[36,35979,32339],{"class":42},[36,35981,35982,35984,35986,35988],{"class":38,"line":419},[36,35983,31215],{"class":46},[36,35985,31846],{"class":42},[36,35987,30871],{"class":46},[36,35989,31851],{"class":42},[36,35991,35992,35994,35996,35998],{"class":38,"line":425},[36,35993,31215],{"class":46},[36,35995,31876],{"class":42},[36,35997,30871],{"class":46},[36,35999,31881],{"class":42},[36,36001,36002,36004,36006,36008],{"class":38,"line":431},[36,36003,30871],{"class":46},[36,36005,31893],{"class":42},[36,36007,31861],{"class":46},[36,36009,31898],{"class":42},[36,36011,36012,36014,36016,36018],{"class":38,"line":437},[36,36013,30871],{"class":46},[36,36015,31910],{"class":42},[36,36017,31861],{"class":46},[36,36019,31915],{"class":42},[36,36021,36022],{"class":38,"line":443},[36,36023,32384],{"class":69},[36,36025,36026,36028,36030,36032],{"class":38,"line":2092},[36,36027,31215],{"class":46},[36,36029,32391],{"class":42},[36,36031,30871],{"class":46},[36,36033,36034],{"class":42}," AlexNet\n",[36,36036,36037,36039,36041,36043],{"class":38,"line":2097},[36,36038,31215],{"class":46},[36,36040,31218],{"class":42},[36,36042,30871],{"class":46},[36,36044,31223],{"class":42},[36,36046,36047],{"class":38,"line":2103},[36,36048,2880],{"emptyLinePlaceholder":553},[36,36050,36051],{"class":38,"line":2108},[36,36052,2880],{"emptyLinePlaceholder":553},[36,36054,36055],{"class":38,"line":2122},[36,36056,32419],{"class":69},[36,36058,36059,36061,36063],{"class":38,"line":2127},[36,36060,32424],{"class":46},[36,36062,32427],{"class":2443},[36,36064,32430],{"class":42},[36,36066,36067,36069,36071,36073,36075],{"class":38,"line":2133},[36,36068,32435],{"class":42},[36,36070,47],{"class":46},[36,36072,31933],{"class":42},[36,36074,31941],{"class":405},[36,36076,31944],{"class":42},[36,36078,36079,36081,36083,36085],{"class":38,"line":2154},[36,36080,32448],{"class":5696},[36,36082,47],{"class":46},[36,36084,31954],{"class":53},[36,36086,31944],{"class":42},[36,36088,36089,36091,36093,36095,36097,36099,36101],{"class":38,"line":2159},[36,36090,32459],{"class":5696},[36,36092,47],{"class":46},[36,36094,31971],{"class":42},[36,36096,531],{"class":5696},[36,36098,47],{"class":46},[36,36100,35926],{"class":53},[36,36102,31981],{"class":42},[36,36104,36105,36107,36109,36111],{"class":38,"line":2173},[36,36106,32476],{"class":5696},[36,36108,47],{"class":46},[36,36110,31954],{"class":53},[36,36112,63],{"class":42},[36,36114,36115,36117,36119,36121,36123,36125,36127,36129,36131,36133,36135,36137,36139,36141,36143],{"class":38,"line":2178},[36,36116,32487],{"class":42},[36,36118,47],{"class":46},[36,36120,32492],{"class":42},[36,36122,32495],{"class":53},[36,36124,345],{"class":42},[36,36126,32500],{"class":53},[36,36128,1071],{"class":46},[36,36130,7838],{"class":53},[36,36132,32507],{"class":42},[36,36134,32495],{"class":53},[36,36136,345],{"class":42},[36,36138,32514],{"class":53},[36,36140,1071],{"class":46},[36,36142,7838],{"class":53},[36,36144,32521],{"class":42},[36,36146,36147,36149,36151,36153,36155,36157],{"class":38,"line":2207},[36,36148,32526],{"class":42},[36,36150,47],{"class":46},[36,36152,32531],{"class":42},[36,36154,32014],{"class":5696},[36,36156,47],{"class":46},[36,36158,32019],{"class":42},[36,36160,36161,36163,36165,36167],{"class":38,"line":2212},[36,36162,32542],{"class":5696},[36,36164,47],{"class":46},[36,36166,32547],{"class":53},[36,36168,31944],{"class":42},[36,36170,36171,36173,36175,36177],{"class":38,"line":2229},[36,36172,32554],{"class":5696},[36,36174,47],{"class":46},[36,36176,31954],{"class":53},[36,36178,31944],{"class":42},[36,36180,36181],{"class":38,"line":2234},[36,36182,32565],{"class":69},[36,36184,36185,36187,36189,36191],{"class":38,"line":2239},[36,36186,32570],{"class":5696},[36,36188,47],{"class":46},[36,36190,1012],{"class":53},[36,36192,63],{"class":42},[36,36194,36195,36197,36199,36201,36203,36205],{"class":38,"line":2244},[36,36196,32581],{"class":42},[36,36198,47],{"class":46},[36,36200,32011],{"class":42},[36,36202,32014],{"class":5696},[36,36204,47],{"class":46},[36,36206,32592],{"class":42},[36,36208,36209,36211,36213,36215],{"class":38,"line":2258},[36,36210,32597],{"class":5696},[36,36212,47],{"class":46},[36,36214,32547],{"class":53},[36,36216,31944],{"class":42},[36,36218,36219,36221,36223,36225],{"class":38,"line":2263},[36,36220,32608],{"class":5696},[36,36222,47],{"class":46},[36,36224,31954],{"class":53},[36,36226,31944],{"class":42},[36,36228,36229,36231,36233,36235],{"class":38,"line":3057},[36,36230,32619],{"class":5696},[36,36232,47],{"class":46},[36,36234,1012],{"class":53},[36,36236,63],{"class":42},[36,36238,36239,36241],{"class":38,"line":3071},[36,36240,4570],{"class":46},[36,36242,32632],{"class":42},[36,36244,36245],{"class":38,"line":3079},[36,36246,2880],{"emptyLinePlaceholder":553},[36,36248,36249],{"class":38,"line":3084},[36,36250,32641],{"class":69},[36,36252,36253],{"class":38,"line":3090},[36,36254,32646],{"class":69},[36,36256,36257],{"class":38,"line":3096},[36,36258,2880],{"emptyLinePlaceholder":553},[36,36260,36261],{"class":38,"line":3101},[36,36262,32655],{"class":69},[36,36264,36265,36267,36269],{"class":38,"line":8428},[36,36266,32424],{"class":46},[36,36268,32662],{"class":2443},[36,36270,32665],{"class":42},[36,36272,36273,36275,36277,36279,36281,36283,36285,36287,36289],{"class":38,"line":8452},[36,36274,31715],{"class":42},[36,36276,47],{"class":46},[36,36278,30930],{"class":42},[36,36280,31722],{"class":405},[36,36282,2184],{"class":46},[36,36284,31727],{"class":42},[36,36286,2181],{"class":46},[36,36288,32684],{"class":405},[36,36290,63],{"class":42},[36,36292,36293],{"class":38,"line":8457},[36,36294,2880],{"emptyLinePlaceholder":553},[36,36296,36297],{"class":38,"line":8463},[36,36298,2880],{"emptyLinePlaceholder":553},[36,36300,36301],{"class":38,"line":8490},[36,36302,32699],{"class":69},[36,36304,36305],{"class":38,"line":8495},[36,36306,32704],{"class":69},[36,36308,36309],{"class":38,"line":8501},[36,36310,32709],{"class":69},[36,36312,36313,36315,36317,36319,36321,36323,36325],{"class":38,"line":8513},[36,36314,32714],{"class":42},[36,36316,47],{"class":46},[36,36318,32719],{"class":42},[36,36320,32722],{"class":5696},[36,36322,47],{"class":46},[36,36324,32727],{"class":53},[36,36326,63],{"class":42},[36,36328,36329],{"class":38,"line":8525},[36,36330,2880],{"emptyLinePlaceholder":553},[36,36332,36333],{"class":38,"line":8537},[36,36334,32738],{"class":69},[36,36336,36337,36339,36341],{"class":38,"line":10196},[36,36338,32743],{"class":42},[36,36340,47],{"class":46},[36,36342,32748],{"class":42},[36,36344,36345],{"class":38,"line":10221},[36,36346,2880],{"emptyLinePlaceholder":553},[36,36348,36349],{"class":38,"line":10244},[36,36350,32757],{"class":69},[36,36352,36353,36355,36357],{"class":38,"line":10268},[36,36354,31767],{"class":42},[36,36356,47],{"class":46},[36,36358,32766],{"class":42},[36,36360,36361],{"class":38,"line":10273},[36,36362,32771],{"class":69},[36,36364,36365],{"class":38,"line":10278},[36,36366,32776],{"class":69},[36,36368,36369],{"class":38,"line":10283},[36,36370,32781],{"class":69},[36,36372,36373,36375,36377],{"class":38,"line":10292},[36,36374,32786],{"class":42},[36,36376,47],{"class":46},[36,36378,32791],{"class":42},[36,36380,36381],{"class":38,"line":10297},[36,36382,2880],{"emptyLinePlaceholder":553},[36,36384,36385],{"class":38,"line":10303},[36,36386,2880],{"emptyLinePlaceholder":553},[36,36388,36389],{"class":38,"line":10324},[36,36390,32804],{"class":69},[36,36392,36393],{"class":38,"line":10330},[36,36394,32809],{"class":69},[36,36396,36397,36399,36401],{"class":38,"line":10344},[36,36398,32814],{"class":42},[36,36400,47],{"class":46},[36,36402,32819],{"class":53},[36,36404,36405],{"class":38,"line":10350},[36,36406,32824],{"class":69},[36,36408,36409,36411,36413],{"class":38,"line":10377},[36,36410,32829],{"class":42},[36,36412,47],{"class":46},[36,36414,32834],{"class":42},[36,36416,36417],{"class":38,"line":10386},[36,36418,32839],{"class":69},[36,36420,36421,36423,36425],{"class":38,"line":10392},[36,36422,32844],{"class":42},[36,36424,47],{"class":46},[36,36426,32834],{"class":42},[36,36428,36429],{"class":38,"line":10400},[36,36430,32853],{"class":69},[36,36432,36433,36435,36437],{"class":38,"line":10405},[36,36434,32858],{"class":42},[36,36436,47],{"class":46},[36,36438,32834],{"class":42},[36,36440,36441],{"class":38,"line":17084},[36,36442,32867],{"class":69},[36,36444,36445,36447,36449],{"class":38,"line":17090},[36,36446,32872],{"class":42},[36,36448,47],{"class":46},[36,36450,32834],{"class":42},[36,36452,36453],{"class":38,"line":17113},[36,36454,2880],{"emptyLinePlaceholder":553},[36,36456,36457],{"class":38,"line":17119},[36,36458,32885],{"class":69},[36,36460,36461,36463,36465],{"class":38,"line":17142},[36,36462,32890],{"class":42},[36,36464,47],{"class":46},[36,36466,32895],{"class":42},[36,36468,36469],{"class":38,"line":17156},[36,36470,2880],{"emptyLinePlaceholder":553},[36,36472,36473],{"class":38,"line":17176},[36,36474,2880],{"emptyLinePlaceholder":553},[36,36476,36477],{"class":38,"line":17182},[36,36478,32908],{"class":69},[36,36480,36481,36483,36485,36487,36489],{"class":38,"line":17193},[36,36482,3681],{"class":46},[36,36484,32915],{"class":42},[36,36486,26524],{"class":46},[36,36488,32920],{"class":53},[36,36490,32923],{"class":42},[36,36492,36493,36495,36497,36499,36501,36503,36505,36507,36509,36511,36513],{"class":38,"line":17216},[36,36494,32928],{"class":53},[36,36496,345],{"class":42},[36,36498,32933],{"class":405},[36,36500,32936],{"class":53},[36,36502,1197],{"class":405},[36,36504,32936],{"class":53},[36,36506,870],{"class":405},[36,36508,32945],{"class":42},[36,36510,173],{"class":46},[36,36512,54],{"class":53},[36,36514,370],{"class":42},[36,36516,36517,36519,36521,36523,36525,36527],{"class":38,"line":17238},[36,36518,32928],{"class":53},[36,36520,345],{"class":42},[36,36522,32960],{"class":405},[36,36524,1071],{"class":46},[36,36526,1062],{"class":53},[36,36528,63],{"class":42},[36,36530,36531],{"class":38,"line":17243},[36,36532,2880],{"emptyLinePlaceholder":553},[36,36534,36535],{"class":38,"line":17249},[36,36536,32975],{"class":69},[36,36538,36539],{"class":38,"line":17263},[36,36540,32980],{"class":69},[36,36542,36543,36545,36547],{"class":38,"line":17276},[36,36544,32985],{"class":42},[36,36546,47],{"class":46},[36,36548,32819],{"class":53},[36,36550,36551],{"class":38,"line":17281},[36,36552,32994],{"class":69},[36,36554,36555,36557,36559],{"class":38,"line":17295},[36,36556,32999],{"class":42},[36,36558,47],{"class":46},[36,36560,3565],{"class":53},[36,36562,36563],{"class":38,"line":17300},[36,36564,33008],{"class":69},[36,36566,36567,36569,36571],{"class":38,"line":17306},[36,36568,33013],{"class":42},[36,36570,47],{"class":46},[36,36572,32819],{"class":53},[36,36574,36575],{"class":38,"line":17311},[36,36576,33022],{"class":69},[36,36578,36579,36581,36583],{"class":38,"line":17325},[36,36580,33027],{"class":42},[36,36582,47],{"class":46},[36,36584,3565],{"class":53},[36,36586,36587],{"class":38,"line":17330},[36,36588,33036],{"class":69},[36,36590,36591,36593,36595],{"class":38,"line":17335},[36,36592,33041],{"class":42},[36,36594,47],{"class":46},[36,36596,3565],{"class":53},[36,36598,36599],{"class":38,"line":17349},[36,36600,33050],{"class":69},[36,36602,36603,36605,36607],{"class":38,"line":17361},[36,36604,33055],{"class":42},[36,36606,47],{"class":46},[36,36608,3565],{"class":53},[36,36610,36611],{"class":38,"line":17366},[36,36612,33064],{"class":69},[36,36614,36615,36617,36619,36621,36623],{"class":38,"line":17379},[36,36616,3883],{"class":46},[36,36618,32078],{"class":42},[36,36620,26524],{"class":46},[36,36622,32083],{"class":53},[36,36624,33077],{"class":42},[36,36626,36627],{"class":38,"line":17384},[36,36628,33082],{"class":69},[36,36630,36631,36633,36635],{"class":38,"line":17389},[36,36632,33087],{"class":42},[36,36634,47],{"class":46},[36,36636,33092],{"class":42},[36,36638,36639],{"class":38,"line":17394},[36,36640,33097],{"class":69},[36,36642,36643,36645,36647],{"class":38,"line":17407},[36,36644,33102],{"class":42},[36,36646,47],{"class":46},[36,36648,33107],{"class":42},[36,36650,36651],{"class":38,"line":17412},[36,36652,33113],{"class":69},[36,36654,36655],{"class":38,"line":33110},[36,36656,33119],{"class":42},[36,36658,36659],{"class":38,"line":33116},[36,36660,33125],{"class":69},[36,36662,36663],{"class":38,"line":33122},[36,36664,33131],{"class":69},[36,36666,36667,36669,36671],{"class":38,"line":33128},[36,36668,33137],{"class":42},[36,36670,47],{"class":46},[36,36672,33142],{"class":42},[36,36674,36675],{"class":38,"line":33134},[36,36676,33148],{"class":69},[36,36678,36679,36681,36683,36685,36687,36689,36691],{"class":38,"line":33145},[36,36680,33154],{"class":42},[36,36682,47],{"class":46},[36,36684,33159],{"class":42},[36,36686,33162],{"class":5696},[36,36688,47],{"class":46},[36,36690,54],{"class":53},[36,36692,63],{"class":42},[36,36694,36695],{"class":38,"line":33151},[36,36696,33174],{"class":69},[36,36698,36699,36701,36703],{"class":38,"line":33171},[36,36700,33180],{"class":42},[36,36702,47],{"class":46},[36,36704,33185],{"class":42},[36,36706,36707],{"class":38,"line":33177},[36,36708,33191],{"class":69},[36,36710,36711],{"class":38,"line":33188},[36,36712,33197],{"class":42},[36,36714,36715],{"class":38,"line":33194},[36,36716,33203],{"class":69},[36,36718,36719],{"class":38,"line":33200},[36,36720,33209],{"class":42},[36,36722,36723],{"class":38,"line":33206},[36,36724,33215],{"class":69},[36,36726,36727],{"class":38,"line":33212},[36,36728,33221],{"class":42},[36,36730,36731],{"class":38,"line":33218},[36,36732,33227],{"class":69},[36,36734,36735,36737,36739,36741,36743,36745,36747],{"class":38,"line":33224},[36,36736,33233],{"class":42},[36,36738,9957],{"class":46},[36,36740,33238],{"class":42},[36,36742,1071],{"class":46},[36,36744,33243],{"class":42},[36,36746,812],{"class":53},[36,36748,63],{"class":42},[36,36750,36751],{"class":38,"line":33230},[36,36752,33253],{"class":69},[36,36754,36755,36757,36759,36761,36763],{"class":38,"line":33250},[36,36756,33259],{"class":42},[36,36758,9957],{"class":46},[36,36760,33264],{"class":42},[36,36762,3429],{"class":46},[36,36764,33269],{"class":42},[36,36766,36767],{"class":38,"line":33256},[36,36768,33275],{"class":69},[36,36770,36771,36773,36775,36777,36779],{"class":38,"line":33272},[36,36772,33281],{"class":42},[36,36774,9957],{"class":46},[36,36776,33243],{"class":42},[36,36778,812],{"class":53},[36,36780,63],{"class":42},[36,36782,36783],{"class":38,"line":33278},[36,36784,33295],{"class":69},[36,36786,36787,36789,36791,36793,36795],{"class":38,"line":33292},[36,36788,3883],{"class":46},[36,36790,33303],{"class":42},[36,36792,26524],{"class":46},[36,36794,32083],{"class":53},[36,36796,33310],{"class":42},[36,36798,36799],{"class":38,"line":33298},[36,36800,33316],{"class":69},[36,36802,36803,36805,36807],{"class":38,"line":33313},[36,36804,33087],{"class":42},[36,36806,47],{"class":46},[36,36808,33092],{"class":42},[36,36810,36811],{"class":38,"line":33319},[36,36812,33331],{"class":69},[36,36814,36815,36817,36819],{"class":38,"line":33328},[36,36816,33102],{"class":42},[36,36818,47],{"class":46},[36,36820,33107],{"class":42},[36,36822,36823],{"class":38,"line":33334},[36,36824,33346],{"class":69},[36,36826,36827],{"class":38,"line":33343},[36,36828,33352],{"class":42},[36,36830,36831],{"class":38,"line":33349},[36,36832,36833],{"class":69},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,36835,36836,36838],{"class":38,"line":33355},[36,36837,33358],{"class":46},[36,36839,33361],{"class":42},[36,36841,36842],{"class":38,"line":33364},[36,36843,33367],{"class":69},[36,36845,36846,36849,36851],{"class":38,"line":33370},[36,36847,36848],{"class":42},"                output",[36,36850,47],{"class":46},[36,36852,33142],{"class":42},[36,36854,36855],{"class":38,"line":33381},[36,36856,33384],{"class":69},[36,36858,36859,36862,36864,36866,36868,36870,36872],{"class":38,"line":33387},[36,36860,36861],{"class":42},"                pre_lab",[36,36863,47],{"class":46},[36,36865,33159],{"class":42},[36,36867,33162],{"class":5696},[36,36869,47],{"class":46},[36,36871,54],{"class":53},[36,36873,63],{"class":42},[36,36875,36876],{"class":38,"line":33406},[36,36877,33409],{"class":69},[36,36879,36880,36883,36885],{"class":38,"line":33412},[36,36881,36882],{"class":42},"                val_batch_loss",[36,36884,47],{"class":46},[36,36886,33185],{"class":42},[36,36888,36889],{"class":38,"line":33423},[36,36890,33426],{"class":69},[36,36892,36893,36896,36898,36901,36903,36905,36907],{"class":38,"line":33429},[36,36894,36895],{"class":42},"                val_loss",[36,36897,9957],{"class":46},[36,36899,36900],{"class":42},"val_batch_loss.item()",[36,36902,1071],{"class":46},[36,36904,33243],{"class":42},[36,36906,812],{"class":53},[36,36908,63],{"class":42},[36,36910,36911,36914,36916,36918,36920],{"class":38,"line":33449},[36,36912,36913],{"class":42},"                val_corrects",[36,36915,9957],{"class":46},[36,36917,33264],{"class":42},[36,36919,3429],{"class":46},[36,36921,33269],{"class":42},[36,36923,36924],{"class":38,"line":33465},[36,36925,36926],{"class":69},"            # 当前用于验证的样本数量\n",[36,36928,36929,36932,36934,36936,36938],{"class":38,"line":33471},[36,36930,36931],{"class":42},"            val_num",[36,36933,9957],{"class":46},[36,36935,33243],{"class":42},[36,36937,812],{"class":53},[36,36939,63],{"class":42},[36,36941,36942],{"class":38,"line":33485},[36,36943,33488],{"class":69},[36,36945,36946],{"class":38,"line":33491},[36,36947,33494],{"class":69},[36,36949,36950,36952,36954],{"class":38,"line":33497},[36,36951,33500],{"class":42},[36,36953,1197],{"class":46},[36,36955,33505],{"class":42},[36,36957,36958],{"class":38,"line":33508},[36,36959,33511],{"class":69},[36,36961,36962],{"class":38,"line":33514},[36,36963,33517],{"class":69},[36,36965,36966,36968,36970],{"class":38,"line":33520},[36,36967,33523],{"class":42},[36,36969,1197],{"class":46},[36,36971,33505],{"class":42},[36,36973,36974],{"class":38,"line":33530},[36,36975,33533],{"class":69},[36,36977,36978,36980,36982],{"class":38,"line":33536},[36,36979,33539],{"class":42},[36,36981,1197],{"class":46},[36,36983,33544],{"class":42},[36,36985,36986],{"class":38,"line":33547},[36,36987,33550],{"class":69},[36,36989,36990,36992,36994],{"class":38,"line":33553},[36,36991,33556],{"class":42},[36,36993,1197],{"class":46},[36,36995,33544],{"class":42},[36,36997,36998],{"class":38,"line":33563},[36,36999,2880],{"emptyLinePlaceholder":553},[36,37001,37002],{"class":38,"line":33568},[36,37003,33571],{"class":69},[36,37005,37006,37008,37010,37012,37014,37016,37018,37020,37022,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042,37044],{"class":38,"line":33574},[36,37007,32928],{"class":53},[36,37009,345],{"class":42},[36,37011,4072],{"class":405},[36,37013,32936],{"class":53},[36,37015,33585],{"class":405},[36,37017,1509],{"class":53},[36,37019,33590],{"class":46},[36,37021,1559],{"class":53},[36,37023,33595],{"class":405},[36,37025,1509],{"class":53},[36,37027,33590],{"class":46},[36,37029,1559],{"class":53},[36,37031,4072],{"class":405},[36,37033,33606],{"class":42},[36,37035,173],{"class":46},[36,37037,54],{"class":53},[36,37039,33613],{"class":42},[36,37041,173],{"class":46},[36,37043,54],{"class":53},[36,37045,33620],{"class":42},[36,37047,37048,37050,37052,37054,37056,37058,37060,37062,37064,37066,37068,37070,37072,37074,37076,37078,37080,37082,37084,37086],{"class":38,"line":33623},[36,37049,32928],{"class":53},[36,37051,345],{"class":42},[36,37053,4072],{"class":405},[36,37055,32936],{"class":53},[36,37057,33634],{"class":405},[36,37059,1509],{"class":53},[36,37061,33590],{"class":46},[36,37063,1559],{"class":53},[36,37065,33643],{"class":405},[36,37067,1509],{"class":53},[36,37069,33590],{"class":46},[36,37071,1559],{"class":53},[36,37073,4072],{"class":405},[36,37075,33654],{"class":42},[36,37077,173],{"class":46},[36,37079,54],{"class":53},[36,37081,33661],{"class":42},[36,37083,173],{"class":46},[36,37085,54],{"class":53},[36,37087,33620],{"class":42},[36,37089,37090],{"class":38,"line":33670},[36,37091,2880],{"emptyLinePlaceholder":553},[36,37093,37094],{"class":38,"line":33675},[36,37095,33678],{"class":69},[36,37097,37098,37100,37102,37104,37106,37108,37110],{"class":38,"line":33681},[36,37099,2977],{"class":46},[36,37101,33686],{"class":42},[36,37103,173],{"class":46},[36,37105,54],{"class":53},[36,37107,1553],{"class":42},[36,37109,1573],{"class":46},[36,37111,33697],{"class":42},[36,37113,37114],{"class":38,"line":33700},[36,37115,33703],{"class":69},[36,37117,37118,37120,37122,37124,37126,37128,37130],{"class":38,"line":33706},[36,37119,33709],{"class":42},[36,37121,666],{"class":53},[36,37123,47],{"class":46},[36,37125,33716],{"class":42},[36,37127,173],{"class":46},[36,37129,54],{"class":53},[36,37131,33723],{"class":42},[36,37133,37134],{"class":38,"line":33726},[36,37135,33729],{"class":69},[36,37137,37138],{"class":38,"line":33732},[36,37139,33735],{"class":69},[36,37141,37142,37144,37146],{"class":38,"line":33738},[36,37143,33741],{"class":42},[36,37145,47],{"class":46},[36,37147,32791],{"class":42},[36,37149,37150],{"class":38,"line":33748},[36,37151,2880],{"emptyLinePlaceholder":553},[36,37153,37154],{"class":38,"line":33753},[36,37155,33756],{"class":69},[36,37157,37158,37160,37162,37164,37166],{"class":38,"line":33759},[36,37159,33762],{"class":42},[36,37161,47],{"class":46},[36,37163,33767],{"class":42},[36,37165,173],{"class":46},[36,37167,33772],{"class":42},[36,37169,37170,37172,37174,37176,37178,37180,37182,37184,37186,37188,37190,37192,37194,37196,37198,37200,37202,37204],{"class":38,"line":33775},[36,37171,32928],{"class":53},[36,37173,345],{"class":42},[36,37175,33782],{"class":405},[36,37177,1509],{"class":53},[36,37179,33787],{"class":46},[36,37181,1559],{"class":53},[36,37183,1157],{"class":405},[36,37185,1509],{"class":53},[36,37187,33787],{"class":46},[36,37189,1559],{"class":53},[36,37191,33800],{"class":405},[36,37193,33803],{"class":42},[36,37195,33806],{"class":46},[36,37197,1520],{"class":53},[36,37199,33811],{"class":42},[36,37201,947],{"class":46},[36,37203,1520],{"class":53},[36,37205,370],{"class":42},[36,37207,37208],{"class":38,"line":33820},[36,37209,37210],{"class":69},"    # 选择最优参数并保存\n",[36,37212,37213],{"class":38,"line":33826},[36,37214,37215],{"class":69},"    # 保存最佳模型权重字典\n",[36,37217,37218,37221,37223],{"class":38,"line":33832},[36,37219,37220],{"class":42},"    torch.save(best_model_wts,",[36,37222,33844],{"class":405},[36,37224,63],{"class":42},[36,37226,37227],{"class":38,"line":33838},[36,37228,33864],{"class":69},[36,37230,37231,37233,37235,37237,37239,37241],{"class":38,"line":33849},[36,37232,33870],{"class":42},[36,37234,47],{"class":46},[36,37236,33875],{"class":42},[36,37238,33878],{"class":5696},[36,37240,47],{"class":46},[36,37242,2026],{"class":42},[36,37244,37245,37247,37249,37251],{"class":38,"line":33855},[36,37246,33888],{"class":405},[36,37248,1472],{"class":42},[36,37250,33893],{"class":53},[36,37252,33896],{"class":42},[36,37254,37255,37257],{"class":38,"line":33861},[36,37256,33902],{"class":405},[36,37258,33905],{"class":42},[36,37260,37261,37263],{"class":38,"line":33867},[36,37262,33911],{"class":405},[36,37264,33914],{"class":42},[36,37266,37267,37269],{"class":38,"line":33885},[36,37268,33920],{"class":405},[36,37270,33923],{"class":42},[36,37272,37273,37275],{"class":38,"line":33899},[36,37274,33929],{"class":405},[36,37276,33932],{"class":42},[36,37278,37279],{"class":38,"line":33908},[36,37280,33938],{"class":42},[36,37282,37283],{"class":38,"line":33917},[36,37284,33944],{"class":69},[36,37286,37287,37289],{"class":38,"line":33926},[36,37288,4570],{"class":46},[36,37290,33952],{"class":42},[36,37292,37293],{"class":38,"line":33935},[36,37294,2880],{"emptyLinePlaceholder":553},[36,37296,37297],{"class":38,"line":33941},[36,37298,33963],{"class":69},[36,37300,37301,37303,37305],{"class":38,"line":33947},[36,37302,32424],{"class":46},[36,37304,33971],{"class":2443},[36,37306,33974],{"class":42},[36,37308,37309],{"class":38,"line":33955},[36,37310,33980],{"class":69},[36,37312,37313,37315,37317,37319,37321,37323,37325,37327],{"class":38,"line":33960},[36,37314,33986],{"class":42},[36,37316,32170],{"class":5696},[36,37318,47],{"class":46},[36,37320,345],{"class":42},[36,37322,154],{"class":53},[36,37324,57],{"class":42},[36,37326,912],{"class":53},[36,37328,370],{"class":42},[36,37330,37331],{"class":38,"line":33966},[36,37332,34006],{"class":69},[36,37334,37335],{"class":38,"line":33977},[36,37336,34012],{"class":69},[36,37338,37339],{"class":38,"line":33983},[36,37340,34018],{"class":69},[36,37342,37343,37345,37347,37349,37351,37353,37355],{"class":38,"line":34003},[36,37344,32204],{"class":42},[36,37346,54],{"class":53},[36,37348,57],{"class":42},[36,37350,96],{"class":53},[36,37352,57],{"class":42},[36,37354,54],{"class":53},[36,37356,63],{"class":42},[36,37358,37359],{"class":38,"line":34009},[36,37360,34041],{"class":69},[36,37362,37363],{"class":38,"line":34015},[36,37364,34047],{"class":69},[36,37366,37367],{"class":38,"line":34021},[36,37368,34053],{"class":69},[36,37370,37371],{"class":38,"line":34038},[36,37372,34059],{"class":69},[36,37374,37375],{"class":38,"line":34044},[36,37376,34065],{"class":69},[36,37378,37379,37381,37383,37385,37387,37389,37391,37393,37395],{"class":38,"line":34050},[36,37380,34071],{"class":42},[36,37382,34074],{"class":405},[36,37384,34077],{"class":42},[36,37386,34080],{"class":405},[36,37388,57],{"class":42},[36,37390,34085],{"class":5696},[36,37392,47],{"class":46},[36,37394,34090],{"class":405},[36,37396,63],{"class":42},[36,37398,37399,37401,37403,37405,37407,37409,37411,37413,37415],{"class":38,"line":34056},[36,37400,34071],{"class":42},[36,37402,34074],{"class":405},[36,37404,34102],{"class":42},[36,37406,34105],{"class":405},[36,37408,57],{"class":42},[36,37410,34085],{"class":5696},[36,37412,47],{"class":46},[36,37414,34114],{"class":405},[36,37416,63],{"class":42},[36,37418,37419],{"class":38,"line":34062},[36,37420,34122],{"class":69},[36,37422,37423],{"class":38,"line":34068},[36,37424,34128],{"class":42},[36,37426,37427],{"class":38,"line":34095},[36,37428,34134],{"class":69},[36,37430,37431,37433,37435],{"class":38,"line":34119},[36,37432,34140],{"class":42},[36,37434,34143],{"class":405},[36,37436,63],{"class":42},[36,37438,37439,37441,37443],{"class":38,"line":34125},[36,37440,34151],{"class":42},[36,37442,34154],{"class":405},[36,37444,63],{"class":42},[36,37446,37447],{"class":38,"line":34131},[36,37448,34162],{"class":69},[36,37450,37451,37453,37455,37457,37459,37461,37463],{"class":38,"line":34137},[36,37452,32204],{"class":42},[36,37454,54],{"class":53},[36,37456,57],{"class":42},[36,37458,96],{"class":53},[36,37460,57],{"class":42},[36,37462,96],{"class":53},[36,37464,63],{"class":42},[36,37466,37467,37469,37471,37473,37475,37477,37479,37481,37483],{"class":38,"line":34148},[36,37468,34071],{"class":42},[36,37470,34074],{"class":405},[36,37472,34189],{"class":42},[36,37474,34080],{"class":405},[36,37476,57],{"class":42},[36,37478,34085],{"class":5696},[36,37480,47],{"class":46},[36,37482,34200],{"class":405},[36,37484,63],{"class":42},[36,37486,37487,37489,37491,37493,37495,37497,37499,37501,37503],{"class":38,"line":34159},[36,37488,34071],{"class":42},[36,37490,34074],{"class":405},[36,37492,34212],{"class":42},[36,37494,34105],{"class":405},[36,37496,57],{"class":42},[36,37498,34085],{"class":5696},[36,37500,47],{"class":46},[36,37502,34223],{"class":405},[36,37504,63],{"class":42},[36,37506,37507],{"class":38,"line":34165},[36,37508,34231],{"class":69},[36,37510,37511],{"class":38,"line":34182},[36,37512,34128],{"class":42},[36,37514,37515,37517,37519],{"class":38,"line":34205},[36,37516,34140],{"class":42},[36,37518,34074],{"class":405},[36,37520,63],{"class":42},[36,37522,37523,37525,37527],{"class":38,"line":34228},[36,37524,34151],{"class":42},[36,37526,34253],{"class":405},[36,37528,63],{"class":42},[36,37530,37531],{"class":38,"line":34234},[36,37532,34261],{"class":42},[36,37534,37535],{"class":38,"line":34239},[36,37536,2880],{"emptyLinePlaceholder":553},[36,37538,37539],{"class":38,"line":34248},[36,37540,34272],{"class":69},[36,37542,37543,37545,37547,37549,37551],{"class":38,"line":34258},[36,37544,2011],{"class":46},[36,37546,31698],{"class":53},[36,37548,3429],{"class":46},[36,37550,31703],{"class":405},[36,37552,4219],{"class":42},[36,37554,37555],{"class":38,"line":34264},[36,37556,34291],{"class":69},[36,37558,37559,37562,37564],{"class":38,"line":34269},[36,37560,37561],{"class":42},"    AlexNet",[36,37563,47],{"class":46},[36,37565,37566],{"class":42},"AlexNet()\n",[36,37568,37569,37571,37573],{"class":38,"line":34275},[36,37570,34308],{"class":42},[36,37572,47],{"class":46},[36,37574,34313],{"class":42},[36,37576,37577,37579,37581,37584,37586,37588,37590],{"class":38,"line":34288},[36,37578,33870],{"class":42},[36,37580,47],{"class":46},[36,37582,37583],{"class":42},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,37585,34326],{"class":5696},[36,37587,47],{"class":46},[36,37589,1313],{"class":53},[36,37591,63],{"class":42},[36,37593,37594],{"class":38,"line":34294},[36,37595,34338],{"class":42},[579,37597,37598],{"start":73},[582,37599,34351],{},[26,37601,37603],{"className":28,"code":37602,"language":30,"meta":31,"style":31},"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",[33,37604,37605,37611,37621,37631,37641,37645,37655,37665,37676,37680,37684,37688,37696,37712,37722,37738,37748,37762,37766,37776,37786,37796,37802,37806,37810,37818,37822,37838,37846,37850,37854,37862,37870,37874,37878,37882,37886,37892,37896,37906,37914,37922,37926,37930,37934,37942,37946,37962,37966,37970,37974,37986,37990,38002,38006,38010,38022,38026,38036,38040,38044,38056,38060,38068,38072,38076,38084,38088,38096,38100,38104,38108,38112,38116,38132,38140,38144,38148,38196,38202,38206,38216,38224,38232,38236,38240,38244,38248,38256,38260,38276,38280,38288,38296],{"__ignoreMap":31},[36,37606,37607,37609],{"class":38,"line":39},[36,37608,30871],{"class":46},[36,37610,30874],{"class":42},[36,37612,37613,37615,37617,37619],{"class":38,"line":66},[36,37614,30871],{"class":46},[36,37616,31893],{"class":42},[36,37618,31861],{"class":46},[36,37620,31898],{"class":42},[36,37622,37623,37625,37627,37629],{"class":38,"line":73},[36,37624,31215],{"class":46},[36,37626,34379],{"class":42},[36,37628,30871],{"class":46},[36,37630,34384],{"class":42},[36,37632,37633,37635,37637,37639],{"class":38,"line":79},[36,37634,31215],{"class":46},[36,37636,31876],{"class":42},[36,37638,30871],{"class":46},[36,37640,31881],{"class":42},[36,37642,37643],{"class":38,"line":85},[36,37644,34399],{"class":69},[36,37646,37647,37649,37651,37653],{"class":38,"line":419},[36,37648,31215],{"class":46},[36,37650,31846],{"class":42},[36,37652,30871],{"class":46},[36,37654,31851],{"class":42},[36,37656,37657,37659,37661,37663],{"class":38,"line":425},[36,37658,31215],{"class":46},[36,37660,32391],{"class":42},[36,37662,30871],{"class":46},[36,37664,36034],{"class":42},[36,37666,37667,37669,37672,37674],{"class":38,"line":431},[36,37668,31215],{"class":46},[36,37670,37671],{"class":42}," 练习.AlexNet.model ",[36,37673,30871],{"class":46},[36,37675,36034],{"class":42},[36,37677,37678],{"class":38,"line":437},[36,37679,2880],{"emptyLinePlaceholder":553},[36,37681,37682],{"class":38,"line":443},[36,37683,2880],{"emptyLinePlaceholder":553},[36,37685,37686],{"class":38,"line":2092},[36,37687,34428],{"class":69},[36,37689,37690,37692,37694],{"class":38,"line":2097},[36,37691,32424],{"class":46},[36,37693,34435],{"class":2443},[36,37695,32430],{"class":42},[36,37697,37698,37700,37702,37704,37706,37708,37710],{"class":38,"line":2103},[36,37699,34442],{"class":42},[36,37701,47],{"class":46},[36,37703,31933],{"class":42},[36,37705,31936],{"class":5696},[36,37707,47],{"class":46},[36,37709,31941],{"class":405},[36,37711,31944],{"class":42},[36,37713,37714,37716,37718,37720],{"class":38,"line":2108},[36,37715,34459],{"class":5696},[36,37717,47],{"class":46},[36,37719,34464],{"class":53},[36,37721,31944],{"class":42},[36,37723,37724,37726,37728,37730,37732,37734,37736],{"class":38,"line":2122},[36,37725,34471],{"class":5696},[36,37727,47],{"class":46},[36,37729,31971],{"class":42},[36,37731,531],{"class":5696},[36,37733,47],{"class":46},[36,37735,35926],{"class":53},[36,37737,31981],{"class":42},[36,37739,37740,37742,37744,37746],{"class":38,"line":2127},[36,37741,34488],{"class":5696},[36,37743,47],{"class":46},[36,37745,31954],{"class":53},[36,37747,63],{"class":42},[36,37749,37750,37752,37754,37756,37758,37760],{"class":38,"line":2133},[36,37751,34499],{"class":42},[36,37753,47],{"class":46},[36,37755,32011],{"class":42},[36,37757,32014],{"class":5696},[36,37759,47],{"class":46},[36,37761,34510],{"class":42},[36,37763,37764],{"class":38,"line":2154},[36,37765,34515],{"class":69},[36,37767,37768,37770,37772,37774],{"class":38,"line":2159},[36,37769,34520],{"class":5696},[36,37771,47],{"class":46},[36,37773,54],{"class":53},[36,37775,31944],{"class":42},[36,37777,37778,37780,37782,37784],{"class":38,"line":2173},[36,37779,34531],{"class":5696},[36,37781,47],{"class":46},[36,37783,31954],{"class":53},[36,37785,31944],{"class":42},[36,37787,37788,37790,37792,37794],{"class":38,"line":2178},[36,37789,34542],{"class":5696},[36,37791,47],{"class":46},[36,37793,812],{"class":53},[36,37795,63],{"class":42},[36,37797,37798,37800],{"class":38,"line":2207},[36,37799,4570],{"class":46},[36,37801,34555],{"class":42},[36,37803,37804],{"class":38,"line":2212},[36,37805,2880],{"emptyLinePlaceholder":553},[36,37807,37808],{"class":38,"line":2229},[36,37809,34564],{"class":69},[36,37811,37812,37814,37816],{"class":38,"line":2234},[36,37813,32424],{"class":46},[36,37815,34571],{"class":2443},[36,37817,34574],{"class":42},[36,37819,37820],{"class":38,"line":2239},[36,37821,34579],{"class":69},[36,37823,37824,37826,37828,37830,37832,37834,37836],{"class":38,"line":2244},[36,37825,31715],{"class":42},[36,37827,47],{"class":46},[36,37829,31722],{"class":405},[36,37831,2184],{"class":46},[36,37833,31727],{"class":42},[36,37835,2181],{"class":46},[36,37837,34596],{"class":405},[36,37839,37840,37842,37844],{"class":38,"line":2258},[36,37841,31767],{"class":42},[36,37843,47],{"class":46},[36,37845,32766],{"class":42},[36,37847,37848],{"class":38,"line":2263},[36,37849,2880],{"emptyLinePlaceholder":553},[36,37851,37852],{"class":38,"line":3057},[36,37853,34613],{"class":69},[36,37855,37856,37858,37860],{"class":38,"line":3071},[36,37857,34618],{"class":42},[36,37859,47],{"class":46},[36,37861,32819],{"class":53},[36,37863,37864,37866,37868],{"class":38,"line":3079},[36,37865,34627],{"class":42},[36,37867,47],{"class":46},[36,37869,3565],{"class":53},[36,37871,37872],{"class":38,"line":3084},[36,37873,2880],{"emptyLinePlaceholder":553},[36,37875,37876],{"class":38,"line":3090},[36,37877,34640],{"class":69},[36,37879,37880],{"class":38,"line":3096},[36,37881,34645],{"class":69},[36,37883,37884],{"class":38,"line":3101},[36,37885,34650],{"class":69},[36,37887,37888,37890],{"class":38,"line":8428},[36,37889,34655],{"class":46},[36,37891,33361],{"class":42},[36,37893,37894],{"class":38,"line":8452},[36,37895,34662],{"class":69},[36,37897,37898,37900,37902,37904],{"class":38,"line":8457},[36,37899,3883],{"class":46},[36,37901,34669],{"class":42},[36,37903,26524],{"class":46},[36,37905,34674],{"class":42},[36,37907,37908,37910,37912],{"class":38,"line":8463},[36,37909,34679],{"class":42},[36,37911,47],{"class":46},[36,37913,34684],{"class":42},[36,37915,37916,37918,37920],{"class":38,"line":8490},[36,37917,34689],{"class":42},[36,37919,47],{"class":46},[36,37921,34694],{"class":42},[36,37923,37924],{"class":38,"line":8495},[36,37925,34699],{"class":69},[36,37927,37928],{"class":38,"line":8501},[36,37929,33352],{"class":42},[36,37931,37932],{"class":38,"line":8513},[36,37933,34708],{"class":69},[36,37935,37936,37938,37940],{"class":38,"line":8525},[36,37937,33137],{"class":42},[36,37939,47],{"class":46},[36,37941,34717],{"class":42},[36,37943,37944],{"class":38,"line":8537},[36,37945,34722],{"class":69},[36,37947,37948,37950,37952,37954,37956,37958,37960],{"class":38,"line":10196},[36,37949,33154],{"class":42},[36,37951,47],{"class":46},[36,37953,33159],{"class":42},[36,37955,33162],{"class":5696},[36,37957,47],{"class":46},[36,37959,54],{"class":53},[36,37961,63],{"class":42},[36,37963,37964],{"class":38,"line":10221},[36,37965,34743],{"class":69},[36,37967,37968],{"class":38,"line":10244},[36,37969,34748],{"class":69},[36,37971,37972],{"class":38,"line":10268},[36,37973,34753],{"class":69},[36,37975,37976,37978,37980,37982,37984],{"class":38,"line":10273},[36,37977,34758],{"class":42},[36,37979,9957],{"class":46},[36,37981,33264],{"class":42},[36,37983,3429],{"class":46},[36,37985,34767],{"class":42},[36,37987,37988],{"class":38,"line":10278},[36,37989,34772],{"class":69},[36,37991,37992,37994,37996,37998,38000],{"class":38,"line":10283},[36,37993,34777],{"class":42},[36,37995,9957],{"class":46},[36,37997,34782],{"class":42},[36,37999,812],{"class":53},[36,38001,63],{"class":42},[36,38003,38004],{"class":38,"line":10292},[36,38005,2880],{"emptyLinePlaceholder":553},[36,38007,38008],{"class":38,"line":10297},[36,38009,34795],{"class":69},[36,38011,38012,38014,38016,38018,38020],{"class":38,"line":10303},[36,38013,34800],{"class":42},[36,38015,47],{"class":46},[36,38017,34805],{"class":42},[36,38019,1197],{"class":46},[36,38021,34810],{"class":42},[36,38023,38024],{"class":38,"line":10324},[36,38025,34815],{"class":69},[36,38027,38028,38030,38032,38034],{"class":38,"line":10330},[36,38029,32928],{"class":53},[36,38031,345],{"class":42},[36,38033,34824],{"class":405},[36,38035,34827],{"class":42},[36,38037,38038],{"class":38,"line":10344},[36,38039,2880],{"emptyLinePlaceholder":553},[36,38041,38042],{"class":38,"line":10350},[36,38043,34836],{"class":69},[36,38045,38046,38048,38050,38052,38054],{"class":38,"line":10377},[36,38047,2011],{"class":46},[36,38049,31698],{"class":53},[36,38051,3429],{"class":46},[36,38053,31703],{"class":405},[36,38055,4219],{"class":42},[36,38057,38058],{"class":38,"line":10386},[36,38059,34853],{"class":69},[36,38061,38062,38064,38066],{"class":38,"line":10392},[36,38063,31767],{"class":42},[36,38065,47],{"class":46},[36,38067,37566],{"class":42},[36,38069,38070],{"class":38,"line":10400},[36,38071,34866],{"class":69},[36,38073,38074],{"class":38,"line":10405},[36,38075,34871],{"class":69},[36,38077,38078,38080,38082],{"class":38,"line":17084},[36,38079,34876],{"class":42},[36,38081,34879],{"class":405},[36,38083,370],{"class":42},[36,38085,38086],{"class":38,"line":17090},[36,38087,34886],{"class":69},[36,38089,38090,38092,38094],{"class":38,"line":17113},[36,38091,34499],{"class":42},[36,38093,47],{"class":46},[36,38095,34895],{"class":42},[36,38097,38098],{"class":38,"line":17119},[36,38099,34900],{"class":69},[36,38101,38102],{"class":38,"line":17142},[36,38103,34905],{"class":42},[36,38105,38106],{"class":38,"line":17156},[36,38107,2880],{"emptyLinePlaceholder":553},[36,38109,38110],{"class":38,"line":17176},[36,38111,34914],{"class":69},[36,38113,38114],{"class":38,"line":17182},[36,38115,34919],{"class":69},[36,38117,38118,38120,38122,38124,38126,38128,38130],{"class":38,"line":17193},[36,38119,31715],{"class":42},[36,38121,47],{"class":46},[36,38123,31722],{"class":405},[36,38125,2184],{"class":46},[36,38127,31727],{"class":42},[36,38129,2181],{"class":46},[36,38131,34596],{"class":405},[36,38133,38134,38136,38138],{"class":38,"line":17216},[36,38135,31767],{"class":42},[36,38137,47],{"class":46},[36,38139,32766],{"class":42},[36,38141,38142],{"class":38,"line":17238},[36,38143,34948],{"class":69},[36,38145,38146],{"class":38,"line":17243},[36,38147,34953],{"class":69},[36,38149,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194],{"class":38,"line":17249},[36,38151,34958],{"class":42},[36,38153,47],{"class":46},[36,38155,1503],{"class":42},[36,38157,34965],{"class":405},[36,38159,57],{"class":42},[36,38161,34970],{"class":405},[36,38163,57],{"class":42},[36,38165,34975],{"class":405},[36,38167,57],{"class":42},[36,38169,34980],{"class":405},[36,38171,57],{"class":42},[36,38173,34985],{"class":405},[36,38175,57],{"class":42},[36,38177,34990],{"class":405},[36,38179,57],{"class":42},[36,38181,34995],{"class":405},[36,38183,57],{"class":42},[36,38185,35000],{"class":405},[36,38187,57],{"class":42},[36,38189,35005],{"class":405},[36,38191,57],{"class":42},[36,38193,35010],{"class":405},[36,38195,33723],{"class":42},[36,38197,38198,38200],{"class":38,"line":17263},[36,38199,34655],{"class":46},[36,38201,33361],{"class":42},[36,38203,38204],{"class":38,"line":17276},[36,38205,35023],{"class":69},[36,38207,38208,38210,38212,38214],{"class":38,"line":17281},[36,38209,3883],{"class":46},[36,38211,35030],{"class":42},[36,38213,26524],{"class":46},[36,38215,34674],{"class":42},[36,38217,38218,38220,38222],{"class":38,"line":17295},[36,38219,33087],{"class":42},[36,38221,47],{"class":46},[36,38223,33092],{"class":42},[36,38225,38226,38228,38230],{"class":38,"line":17300},[36,38227,33102],{"class":42},[36,38229,47],{"class":46},[36,38231,33107],{"class":42},[36,38233,38234],{"class":38,"line":17306},[36,38235,2880],{"emptyLinePlaceholder":553},[36,38237,38238],{"class":38,"line":17311},[36,38239,35059],{"class":69},[36,38241,38242],{"class":38,"line":17325},[36,38243,33352],{"class":42},[36,38245,38246],{"class":38,"line":17330},[36,38247,35068],{"class":69},[36,38249,38250,38252,38254],{"class":38,"line":17335},[36,38251,33137],{"class":42},[36,38253,47],{"class":46},[36,38255,33142],{"class":42},[36,38257,38258],{"class":38,"line":17349},[36,38259,35081],{"class":69},[36,38261,38262,38264,38266,38268,38270,38272,38274],{"class":38,"line":17361},[36,38263,33154],{"class":42},[36,38265,47],{"class":46},[36,38267,33159],{"class":42},[36,38269,33162],{"class":5696},[36,38271,47],{"class":46},[36,38273,54],{"class":53},[36,38275,63],{"class":42},[36,38277,38278],{"class":38,"line":17366},[36,38279,35102],{"class":69},[36,38281,38282,38284,38286],{"class":38,"line":17379},[36,38283,35107],{"class":42},[36,38285,47],{"class":46},[36,38287,35112],{"class":42},[36,38289,38290,38292,38294],{"class":38,"line":17384},[36,38291,35117],{"class":42},[36,38293,47],{"class":46},[36,38295,35122],{"class":42},[36,38297,38298,38300,38302,38304,38306,38308,38310,38312],{"class":38,"line":17389},[36,38299,35127],{"class":53},[36,38301,345],{"class":42},[36,38303,35132],{"class":405},[36,38305,35135],{"class":42},[36,38307,35138],{"class":405},[36,38309,57],{"class":42},[36,38311,35143],{"class":405},[36,38313,35146],{"class":42},[596,38315,38317],{"id":38316},"_22vgg","2.2.VGG",[22478,38319,38321],{"id":38320},"_221原理","2.2.1.原理",[19,38323,38324],{},[519,38325],{"alt":31,"src":38326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,38328,38329],{},[519,38330],{"alt":31,"src":38331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,38333,38334],{},[519,38335],{"alt":31,"src":38336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,38338,38339],{},"参数详细描述：",[19,38341,38342],{},[519,38343],{"alt":31,"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-018.png",[19,38346,38347],{},[519,38348],{"alt":31,"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-019.png",[19,38351,38352],{},[519,38353],{"alt":31,"src":38354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,38356,38357],{},[519,38358],{"alt":31,"src":38359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,38361,38362],{},[519,38363],{"alt":31,"src":38364},"\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",[22478,38366,38368],{"id":38367},"_222代码实现","2.2.2.代码实现",[579,38370,38371],{},[582,38372,38373],{},"网络搭建",[26,38375,38377],{"className":28,"code":38376,"language":30,"meta":31,"style":31},"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",[33,38378,38379,38385,38397,38407,38417,38421,38438,38446,38465,38470,38475,38487,38525,38530,38566,38570,38599,38604,38609,38620,38656,38660,38696,38700,38728,38732,38737,38748,38784,38788,38824,38828,38864,38868,38896,38900,38905,38916,38953,38957,38993,38997,39033,39037,39065,39069,39074,39085,39121,39125,39161,39165,39201,39205,39233,39237,39242,39253,39258,39263,39268,39289,39293,39305,39309,39321,39325,39329,39334,39339,39354,39359,39369,39374,39389,39394,39413,39418,39427,39432,39442,39447,39452,39466,39471,39485,39493,39497,39501,39509,39520,39531,39542,39553,39564,39575,39581,39585,39590,39603,39623,39629,39638],{"__ignoreMap":31},[36,38380,38381,38383],{"class":38,"line":39},[36,38382,30871],{"class":46},[36,38384,30874],{"class":42},[36,38386,38387,38389,38392,38394],{"class":38,"line":66},[36,38388,31215],{"class":46},[36,38390,38391],{"class":42}," sympy.core.sympify ",[36,38393,30871],{"class":46},[36,38395,38396],{"class":42}," kernS\n",[36,38398,38399,38401,38403,38405],{"class":38,"line":73},[36,38400,31215],{"class":46},[36,38402,31218],{"class":42},[36,38404,30871],{"class":46},[36,38406,31223],{"class":42},[36,38408,38409,38411,38413,38415],{"class":38,"line":79},[36,38410,31215],{"class":46},[36,38412,31235],{"class":42},[36,38414,30871],{"class":46},[36,38416,31240],{"class":42},[36,38418,38419],{"class":38,"line":85},[36,38420,2880],{"emptyLinePlaceholder":553},[36,38422,38423,38425,38428,38430,38432,38434,38436],{"class":38,"line":419},[36,38424,15174],{"class":46},[36,38426,38427],{"class":2443}," VGG16",[36,38429,345],{"class":42},[36,38431,31256],{"class":2443},[36,38433,1171],{"class":42},[36,38435,31261],{"class":2443},[36,38437,31264],{"class":42},[36,38439,38440,38442,38444],{"class":38,"line":425},[36,38441,31279],{"class":46},[36,38443,31282],{"class":53},[36,38445,31285],{"class":42},[36,38447,38448,38450,38452,38455,38457,38459,38461,38463],{"class":38,"line":431},[36,38449,31295],{"class":53},[36,38451,345],{"class":42},[36,38453,38454],{"class":53},"VGG16",[36,38456,12915],{"class":42},[36,38458,31301],{"class":53},[36,38460,31304],{"class":42},[36,38462,31307],{"class":53},[36,38464,2456],{"class":42},[36,38466,38467],{"class":38,"line":437},[36,38468,38469],{"class":69},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,38471,38472],{"class":38,"line":443},[36,38473,38474],{"class":69},"        # 这里用的是灰度图\n",[36,38476,38477,38479,38482,38484],{"class":38,"line":2092},[36,38478,31323],{"class":53},[36,38480,38481],{"class":42},".block1",[36,38483,47],{"class":46},[36,38485,38486],{"class":42},"nn.Sequential(\n",[36,38488,38489,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520,38522],{"class":38,"line":2097},[36,38490,38491],{"class":42},"            nn.Conv2d(",[36,38493,31334],{"class":5696},[36,38495,47],{"class":46},[36,38497,54],{"class":53},[36,38499,57],{"class":42},[36,38501,31343],{"class":5696},[36,38503,47],{"class":46},[36,38505,824],{"class":53},[36,38507,57],{"class":42},[36,38509,31352],{"class":5696},[36,38511,47],{"class":46},[36,38513,127],{"class":53},[36,38515,57],{"class":42},[36,38517,31361],{"class":5696},[36,38519,47],{"class":46},[36,38521,54],{"class":53},[36,38523,38524],{"class":42},"),\n",[36,38526,38527],{"class":38,"line":2103},[36,38528,38529],{"class":42},"            nn.ReLU(),\n",[36,38531,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564],{"class":38,"line":2108},[36,38533,38491],{"class":42},[36,38535,31334],{"class":5696},[36,38537,47],{"class":46},[36,38539,824],{"class":53},[36,38541,57],{"class":42},[36,38543,31343],{"class":5696},[36,38545,47],{"class":46},[36,38547,824],{"class":53},[36,38549,57],{"class":42},[36,38551,31352],{"class":5696},[36,38553,47],{"class":46},[36,38555,127],{"class":53},[36,38557,57],{"class":42},[36,38559,31361],{"class":5696},[36,38561,47],{"class":46},[36,38563,54],{"class":53},[36,38565,38524],{"class":42},[36,38567,38568],{"class":38,"line":2122},[36,38569,38529],{"class":42},[36,38571,38572,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597],{"class":38,"line":2127},[36,38573,38574],{"class":42},"            nn.MaxPool2d(",[36,38576,31352],{"class":5696},[36,38578,47],{"class":46},[36,38580,96],{"class":53},[36,38582,57],{"class":42},[36,38584,31407],{"class":5696},[36,38586,47],{"class":46},[36,38588,96],{"class":53},[36,38590,57],{"class":42},[36,38592,31361],{"class":5696},[36,38594,47],{"class":46},[36,38596,812],{"class":53},[36,38598,63],{"class":42},[36,38600,38601],{"class":38,"line":2133},[36,38602,38603],{"class":42},"        )\n",[36,38605,38606],{"class":38,"line":2154},[36,38607,38608],{"class":69},"        # 第二层\n",[36,38610,38611,38613,38616,38618],{"class":38,"line":2159},[36,38612,31323],{"class":53},[36,38614,38615],{"class":42},".block2",[36,38617,47],{"class":46},[36,38619,38486],{"class":42},[36,38621,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654],{"class":38,"line":2173},[36,38623,38491],{"class":42},[36,38625,31334],{"class":5696},[36,38627,47],{"class":46},[36,38629,824],{"class":53},[36,38631,57],{"class":42},[36,38633,31343],{"class":5696},[36,38635,47],{"class":46},[36,38637,32547],{"class":53},[36,38639,57],{"class":42},[36,38641,31352],{"class":5696},[36,38643,47],{"class":46},[36,38645,127],{"class":53},[36,38647,57],{"class":42},[36,38649,31361],{"class":5696},[36,38651,47],{"class":46},[36,38653,54],{"class":53},[36,38655,38524],{"class":42},[36,38657,38658],{"class":38,"line":2178},[36,38659,38529],{"class":42},[36,38661,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694],{"class":38,"line":2207},[36,38663,38491],{"class":42},[36,38665,31334],{"class":5696},[36,38667,47],{"class":46},[36,38669,32547],{"class":53},[36,38671,57],{"class":42},[36,38673,31343],{"class":5696},[36,38675,47],{"class":46},[36,38677,32547],{"class":53},[36,38679,57],{"class":42},[36,38681,31352],{"class":5696},[36,38683,47],{"class":46},[36,38685,127],{"class":53},[36,38687,57],{"class":42},[36,38689,31361],{"class":5696},[36,38691,47],{"class":46},[36,38693,54],{"class":53},[36,38695,38524],{"class":42},[36,38697,38698],{"class":38,"line":2212},[36,38699,38529],{"class":42},[36,38701,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726],{"class":38,"line":2229},[36,38703,38574],{"class":42},[36,38705,31352],{"class":5696},[36,38707,47],{"class":46},[36,38709,96],{"class":53},[36,38711,57],{"class":42},[36,38713,31407],{"class":5696},[36,38715,47],{"class":46},[36,38717,96],{"class":53},[36,38719,57],{"class":42},[36,38721,31361],{"class":5696},[36,38723,47],{"class":46},[36,38725,812],{"class":53},[36,38727,63],{"class":42},[36,38729,38730],{"class":38,"line":2234},[36,38731,38603],{"class":42},[36,38733,38734],{"class":38,"line":2239},[36,38735,38736],{"class":69},"        # 第三层\n",[36,38738,38739,38741,38744,38746],{"class":38,"line":2244},[36,38740,31323],{"class":53},[36,38742,38743],{"class":42},".block3",[36,38745,47],{"class":46},[36,38747,38486],{"class":42},[36,38749,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782],{"class":38,"line":2258},[36,38751,38491],{"class":42},[36,38753,31334],{"class":5696},[36,38755,47],{"class":46},[36,38757,32547],{"class":53},[36,38759,57],{"class":42},[36,38761,31343],{"class":5696},[36,38763,47],{"class":46},[36,38765,35347],{"class":53},[36,38767,57],{"class":42},[36,38769,31352],{"class":5696},[36,38771,47],{"class":46},[36,38773,127],{"class":53},[36,38775,57],{"class":42},[36,38777,31361],{"class":5696},[36,38779,47],{"class":46},[36,38781,54],{"class":53},[36,38783,38524],{"class":42},[36,38785,38786],{"class":38,"line":2263},[36,38787,38529],{"class":42},[36,38789,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822],{"class":38,"line":3057},[36,38791,38491],{"class":42},[36,38793,31334],{"class":5696},[36,38795,47],{"class":46},[36,38797,35347],{"class":53},[36,38799,57],{"class":42},[36,38801,31343],{"class":5696},[36,38803,47],{"class":46},[36,38805,35347],{"class":53},[36,38807,57],{"class":42},[36,38809,31352],{"class":5696},[36,38811,47],{"class":46},[36,38813,127],{"class":53},[36,38815,57],{"class":42},[36,38817,31361],{"class":5696},[36,38819,47],{"class":46},[36,38821,54],{"class":53},[36,38823,38524],{"class":42},[36,38825,38826],{"class":38,"line":3071},[36,38827,38529],{"class":42},[36,38829,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862],{"class":38,"line":3079},[36,38831,38491],{"class":42},[36,38833,31334],{"class":5696},[36,38835,47],{"class":46},[36,38837,35347],{"class":53},[36,38839,57],{"class":42},[36,38841,31343],{"class":5696},[36,38843,47],{"class":46},[36,38845,35347],{"class":53},[36,38847,57],{"class":42},[36,38849,31352],{"class":5696},[36,38851,47],{"class":46},[36,38853,127],{"class":53},[36,38855,57],{"class":42},[36,38857,31361],{"class":5696},[36,38859,47],{"class":46},[36,38861,54],{"class":53},[36,38863,38524],{"class":42},[36,38865,38866],{"class":38,"line":3084},[36,38867,38529],{"class":42},[36,38869,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892,38894],{"class":38,"line":3090},[36,38871,38574],{"class":42},[36,38873,31352],{"class":5696},[36,38875,47],{"class":46},[36,38877,96],{"class":53},[36,38879,57],{"class":42},[36,38881,31407],{"class":5696},[36,38883,47],{"class":46},[36,38885,96],{"class":53},[36,38887,57],{"class":42},[36,38889,31361],{"class":5696},[36,38891,47],{"class":46},[36,38893,812],{"class":53},[36,38895,63],{"class":42},[36,38897,38898],{"class":38,"line":3096},[36,38899,38603],{"class":42},[36,38901,38902],{"class":38,"line":3101},[36,38903,38904],{"class":69},"        # 第四层\n",[36,38906,38907,38909,38912,38914],{"class":38,"line":8428},[36,38908,31323],{"class":53},[36,38910,38911],{"class":42},".block4",[36,38913,47],{"class":46},[36,38915,38486],{"class":42},[36,38917,38918,38920,38922,38924,38926,38928,38930,38932,38935,38937,38939,38941,38943,38945,38947,38949,38951],{"class":38,"line":8452},[36,38919,38491],{"class":42},[36,38921,31334],{"class":5696},[36,38923,47],{"class":46},[36,38925,35347],{"class":53},[36,38927,57],{"class":42},[36,38929,31343],{"class":5696},[36,38931,47],{"class":46},[36,38933,38934],{"class":53},"512",[36,38936,57],{"class":42},[36,38938,31352],{"class":5696},[36,38940,47],{"class":46},[36,38942,127],{"class":53},[36,38944,57],{"class":42},[36,38946,31361],{"class":5696},[36,38948,47],{"class":46},[36,38950,54],{"class":53},[36,38952,38524],{"class":42},[36,38954,38955],{"class":38,"line":8457},[36,38956,38529],{"class":42},[36,38958,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977,38979,38981,38983,38985,38987,38989,38991],{"class":38,"line":8463},[36,38960,38491],{"class":42},[36,38962,31334],{"class":5696},[36,38964,47],{"class":46},[36,38966,38934],{"class":53},[36,38968,57],{"class":42},[36,38970,31343],{"class":5696},[36,38972,47],{"class":46},[36,38974,38934],{"class":53},[36,38976,57],{"class":42},[36,38978,31352],{"class":5696},[36,38980,47],{"class":46},[36,38982,127],{"class":53},[36,38984,57],{"class":42},[36,38986,31361],{"class":5696},[36,38988,47],{"class":46},[36,38990,54],{"class":53},[36,38992,38524],{"class":42},[36,38994,38995],{"class":38,"line":8490},[36,38996,38529],{"class":42},[36,38998,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019,39021,39023,39025,39027,39029,39031],{"class":38,"line":8495},[36,39000,38491],{"class":42},[36,39002,31334],{"class":5696},[36,39004,47],{"class":46},[36,39006,38934],{"class":53},[36,39008,57],{"class":42},[36,39010,31343],{"class":5696},[36,39012,47],{"class":46},[36,39014,38934],{"class":53},[36,39016,57],{"class":42},[36,39018,31352],{"class":5696},[36,39020,47],{"class":46},[36,39022,127],{"class":53},[36,39024,57],{"class":42},[36,39026,31361],{"class":5696},[36,39028,47],{"class":46},[36,39030,54],{"class":53},[36,39032,38524],{"class":42},[36,39034,39035],{"class":38,"line":8501},[36,39036,38529],{"class":42},[36,39038,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063],{"class":38,"line":8513},[36,39040,38574],{"class":42},[36,39042,31352],{"class":5696},[36,39044,47],{"class":46},[36,39046,96],{"class":53},[36,39048,57],{"class":42},[36,39050,31407],{"class":5696},[36,39052,47],{"class":46},[36,39054,96],{"class":53},[36,39056,57],{"class":42},[36,39058,31361],{"class":5696},[36,39060,47],{"class":46},[36,39062,812],{"class":53},[36,39064,63],{"class":42},[36,39066,39067],{"class":38,"line":8525},[36,39068,38603],{"class":42},[36,39070,39071],{"class":38,"line":8537},[36,39072,39073],{"class":69},"        # 第五层\n",[36,39075,39076,39078,39081,39083],{"class":38,"line":10196},[36,39077,31323],{"class":53},[36,39079,39080],{"class":42},".block5",[36,39082,47],{"class":46},[36,39084,38486],{"class":42},[36,39086,39087,39089,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115,39117,39119],{"class":38,"line":10221},[36,39088,38491],{"class":42},[36,39090,31334],{"class":5696},[36,39092,47],{"class":46},[36,39094,38934],{"class":53},[36,39096,57],{"class":42},[36,39098,31343],{"class":5696},[36,39100,47],{"class":46},[36,39102,38934],{"class":53},[36,39104,57],{"class":42},[36,39106,31352],{"class":5696},[36,39108,47],{"class":46},[36,39110,127],{"class":53},[36,39112,57],{"class":42},[36,39114,31361],{"class":5696},[36,39116,47],{"class":46},[36,39118,54],{"class":53},[36,39120,38524],{"class":42},[36,39122,39123],{"class":38,"line":10244},[36,39124,38529],{"class":42},[36,39126,39127,39129,39131,39133,39135,39137,39139,39141,39143,39145,39147,39149,39151,39153,39155,39157,39159],{"class":38,"line":10268},[36,39128,38491],{"class":42},[36,39130,31334],{"class":5696},[36,39132,47],{"class":46},[36,39134,38934],{"class":53},[36,39136,57],{"class":42},[36,39138,31343],{"class":5696},[36,39140,47],{"class":46},[36,39142,38934],{"class":53},[36,39144,57],{"class":42},[36,39146,31352],{"class":5696},[36,39148,47],{"class":46},[36,39150,127],{"class":53},[36,39152,57],{"class":42},[36,39154,31361],{"class":5696},[36,39156,47],{"class":46},[36,39158,54],{"class":53},[36,39160,38524],{"class":42},[36,39162,39163],{"class":38,"line":10273},[36,39164,38529],{"class":42},[36,39166,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199],{"class":38,"line":10278},[36,39168,38491],{"class":42},[36,39170,31334],{"class":5696},[36,39172,47],{"class":46},[36,39174,38934],{"class":53},[36,39176,57],{"class":42},[36,39178,31343],{"class":5696},[36,39180,47],{"class":46},[36,39182,38934],{"class":53},[36,39184,57],{"class":42},[36,39186,31352],{"class":5696},[36,39188,47],{"class":46},[36,39190,127],{"class":53},[36,39192,57],{"class":42},[36,39194,31361],{"class":5696},[36,39196,47],{"class":46},[36,39198,54],{"class":53},[36,39200,38524],{"class":42},[36,39202,39203],{"class":38,"line":10283},[36,39204,38529],{"class":42},[36,39206,39207,39209,39211,39213,39215,39217,39219,39221,39223,39225,39227,39229,39231],{"class":38,"line":10292},[36,39208,38574],{"class":42},[36,39210,31352],{"class":5696},[36,39212,47],{"class":46},[36,39214,96],{"class":53},[36,39216,57],{"class":42},[36,39218,31407],{"class":5696},[36,39220,47],{"class":46},[36,39222,96],{"class":53},[36,39224,57],{"class":42},[36,39226,31361],{"class":5696},[36,39228,47],{"class":46},[36,39230,812],{"class":53},[36,39232,63],{"class":42},[36,39234,39235],{"class":38,"line":10297},[36,39236,38603],{"class":42},[36,39238,39239],{"class":38,"line":10303},[36,39240,39241],{"class":69},"        # 全连接层\n",[36,39243,39244,39246,39249,39251],{"class":38,"line":10324},[36,39245,31323],{"class":53},[36,39247,39248],{"class":42},".block6",[36,39250,47],{"class":46},[36,39252,38486],{"class":42},[36,39254,39255],{"class":38,"line":10330},[36,39256,39257],{"class":69},"            # 平展操作\n",[36,39259,39260],{"class":38,"line":10344},[36,39261,39262],{"class":69},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,39264,39265],{"class":38,"line":10350},[36,39266,39267],{"class":42},"            nn.Flatten(),\n",[36,39269,39270,39273,39275,39277,39279,39281,39283,39285,39287],{"class":38,"line":10377},[36,39271,39272],{"class":42},"            nn.Linear(",[36,39274,987],{"class":53},[36,39276,1071],{"class":46},[36,39278,987],{"class":53},[36,39280,1071],{"class":46},[36,39282,38934],{"class":53},[36,39284,57],{"class":42},[36,39286,35347],{"class":53},[36,39288,38524],{"class":42},[36,39290,39291],{"class":38,"line":10386},[36,39292,38529],{"class":42},[36,39294,39295,39297,39299,39301,39303],{"class":38,"line":10392},[36,39296,39272],{"class":42},[36,39298,35347],{"class":53},[36,39300,57],{"class":42},[36,39302,32547],{"class":53},[36,39304,38524],{"class":42},[36,39306,39307],{"class":38,"line":10400},[36,39308,38529],{"class":42},[36,39310,39311,39313,39315,39317,39319],{"class":38,"line":10405},[36,39312,39272],{"class":42},[36,39314,32547],{"class":53},[36,39316,57],{"class":42},[36,39318,1062],{"class":53},[36,39320,63],{"class":42},[36,39322,39323],{"class":38,"line":17084},[36,39324,38603],{"class":42},[36,39326,39327],{"class":38,"line":17090},[36,39328,2880],{"emptyLinePlaceholder":553},[36,39330,39331],{"class":38,"line":17113},[36,39332,39333],{"class":69},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,39335,39336],{"class":38,"line":17119},[36,39337,39338],{"class":69},"        # 循环遍历模型\n",[36,39340,39341,39343,39346,39348,39351],{"class":38,"line":17142},[36,39342,3883],{"class":46},[36,39344,39345],{"class":42}," m ",[36,39347,26524],{"class":46},[36,39349,39350],{"class":53}," self",[36,39352,39353],{"class":42},".modules():\n",[36,39355,39356],{"class":38,"line":17156},[36,39357,39358],{"class":69},"            # print(m)\n",[36,39360,39361,39363,39366],{"class":38,"line":17176},[36,39362,5122],{"class":46},[36,39364,39365],{"class":53}," isinstance",[36,39367,39368],{"class":42},"(m,nn.Conv2d):\n",[36,39370,39371],{"class":38,"line":17182},[36,39372,39373],{"class":69},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,39375,39376,39379,39382,39384,39387],{"class":38,"line":17193},[36,39377,39378],{"class":42},"                nn.init.kaiming_normal_(m.weight,",[36,39380,39381],{"class":5696},"nonlinearity",[36,39383,47],{"class":46},[36,39385,39386],{"class":405},"'relu'",[36,39388,63],{"class":42},[36,39390,39391],{"class":38,"line":17216},[36,39392,39393],{"class":69},"                # 判断b参数是否存在\n",[36,39395,39396,39399,39402,39405,39408,39411],{"class":38,"line":17238},[36,39397,39398],{"class":46},"                if",[36,39400,39401],{"class":42}," m.bias ",[36,39403,39404],{"class":46},"is",[36,39406,39407],{"class":46}," not",[36,39409,39410],{"class":53}," None",[36,39412,4219],{"class":42},[36,39414,39415],{"class":38,"line":17243},[36,39416,39417],{"class":69},"                    # 如果参数不存在的化初始化b=0\n",[36,39419,39420,39423,39425],{"class":38,"line":17249},[36,39421,39422],{"class":42},"                    nn.init.constant_(m.bias,",[36,39424,812],{"class":53},[36,39426,63],{"class":42},[36,39428,39429],{"class":38,"line":17263},[36,39430,39431],{"class":69},"            # 全连接层初始化\n",[36,39433,39434,39437,39439],{"class":38,"line":17276},[36,39435,39436],{"class":46},"            elif",[36,39438,39365],{"class":53},[36,39440,39441],{"class":42},"(m,nn.Linear):\n",[36,39443,39444],{"class":38,"line":17281},[36,39445,39446],{"class":69},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,39448,39449],{"class":38,"line":17295},[36,39450,39451],{"class":69},"                # 均值为0，方差为0.01\n",[36,39453,39454,39457,39459,39461,39464],{"class":38,"line":17300},[36,39455,39456],{"class":42},"                nn.init.normal_(m.weight,",[36,39458,812],{"class":53},[36,39460,57],{"class":42},[36,39462,39463],{"class":53},"0.01",[36,39465,63],{"class":42},[36,39467,39468],{"class":38,"line":17306},[36,39469,39470],{"class":69},"                # 初始化b参数\n",[36,39472,39473,39475,39477,39479,39481,39483],{"class":38,"line":17311},[36,39474,39398],{"class":46},[36,39476,39401],{"class":42},[36,39478,39404],{"class":46},[36,39480,39407],{"class":46},[36,39482,39410],{"class":53},[36,39484,4219],{"class":42},[36,39486,39487,39489,39491],{"class":38,"line":17325},[36,39488,39422],{"class":42},[36,39490,812],{"class":53},[36,39492,63],{"class":42},[36,39494,39495],{"class":38,"line":17330},[36,39496,2880],{"emptyLinePlaceholder":553},[36,39498,39499],{"class":38,"line":17335},[36,39500,35642],{"class":69},[36,39502,39503,39505,39507],{"class":38,"line":17349},[36,39504,31279],{"class":46},[36,39506,31571],{"class":2443},[36,39508,31574],{"class":42},[36,39510,39511,39513,39515,39517],{"class":38,"line":17361},[36,39512,31579],{"class":42},[36,39514,47],{"class":46},[36,39516,31301],{"class":53},[36,39518,39519],{"class":42},".block1(x)\n",[36,39521,39522,39524,39526,39528],{"class":38,"line":17366},[36,39523,31579],{"class":42},[36,39525,47],{"class":46},[36,39527,31301],{"class":53},[36,39529,39530],{"class":42},".block2(x)\n",[36,39532,39533,39535,39537,39539],{"class":38,"line":17379},[36,39534,31579],{"class":42},[36,39536,47],{"class":46},[36,39538,31301],{"class":53},[36,39540,39541],{"class":42},".block3(x)\n",[36,39543,39544,39546,39548,39550],{"class":38,"line":17384},[36,39545,31579],{"class":42},[36,39547,47],{"class":46},[36,39549,31301],{"class":53},[36,39551,39552],{"class":42},".block4(x)\n",[36,39554,39555,39557,39559,39561],{"class":38,"line":17389},[36,39556,31579],{"class":42},[36,39558,47],{"class":46},[36,39560,31301],{"class":53},[36,39562,39563],{"class":42},".block5(x)\n",[36,39565,39566,39568,39570,39572],{"class":38,"line":17394},[36,39567,31579],{"class":42},[36,39569,47],{"class":46},[36,39571,31301],{"class":53},[36,39573,39574],{"class":42},".block6(x)\n",[36,39576,39577,39579],{"class":38,"line":17407},[36,39578,15232],{"class":46},[36,39580,31687],{"class":42},[36,39582,39583],{"class":38,"line":17412},[36,39584,2880],{"emptyLinePlaceholder":553},[36,39586,39587],{"class":38,"line":33110},[36,39588,39589],{"class":69},"# 验证模型\n",[36,39591,39592,39594,39596,39598,39601],{"class":38,"line":33116},[36,39593,2011],{"class":46},[36,39595,31698],{"class":53},[36,39597,3429],{"class":46},[36,39599,39600],{"class":405},"'__main__'",[36,39602,4219],{"class":42},[36,39604,39605,39607,39609,39611,39613,39615,39617,39619,39621],{"class":38,"line":33122},[36,39606,31715],{"class":42},[36,39608,47],{"class":46},[36,39610,30930],{"class":42},[36,39612,31722],{"class":405},[36,39614,2184],{"class":46},[36,39616,31727],{"class":42},[36,39618,2181],{"class":46},[36,39620,30955],{"class":405},[36,39622,63],{"class":42},[36,39624,39625,39627],{"class":38,"line":33128},[36,39626,31777],{"class":53},[36,39628,30964],{"class":42},[36,39630,39631,39633,39635],{"class":38,"line":33134},[36,39632,31767],{"class":42},[36,39634,47],{"class":46},[36,39636,39637],{"class":42},"VGG16().to(device)\n",[36,39639,39640,39642,39644,39646,39648,39650,39652,39654],{"class":38,"line":33145},[36,39641,31777],{"class":53},[36,39643,31780],{"class":42},[36,39645,54],{"class":53},[36,39647,57],{"class":42},[36,39649,31978],{"class":53},[36,39651,57],{"class":42},[36,39653,31978],{"class":53},[36,39655,31793],{"class":42},[579,39657,39658],{"start":66},[582,39659,39660],{},"训练代码",[19,39662,39663],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39665,39666],{},"解决方式:",[19,39668,39669],{},"①权重初始化",[26,39671,39673],{"className":28,"code":39672,"language":30,"meta":31,"style":31},"# 权重初始化,保证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",[33,39674,39675,39680,39685,39697,39702,39710,39715,39728,39733,39747,39752,39761,39766,39775,39780,39785,39798,39803,39817],{"__ignoreMap":31},[36,39676,39677],{"class":38,"line":39},[36,39678,39679],{"class":69},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,39681,39682],{"class":38,"line":66},[36,39683,39684],{"class":69},"# 循环遍历模型\n",[36,39686,39687,39689,39691,39693,39695],{"class":38,"line":73},[36,39688,3505],{"class":46},[36,39690,39345],{"class":42},[36,39692,26524],{"class":46},[36,39694,39350],{"class":53},[36,39696,39353],{"class":42},[36,39698,39699],{"class":38,"line":79},[36,39700,39701],{"class":69},"    # print(m)\n",[36,39703,39704,39706,39708],{"class":38,"line":85},[36,39705,3581],{"class":46},[36,39707,39365],{"class":53},[36,39709,39368],{"class":42},[36,39711,39712],{"class":38,"line":419},[36,39713,39714],{"class":69},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,39716,39717,39720,39722,39724,39726],{"class":38,"line":425},[36,39718,39719],{"class":42},"        nn.init.kaiming_normal_(m.weight,",[36,39721,39381],{"class":5696},[36,39723,47],{"class":46},[36,39725,39386],{"class":405},[36,39727,63],{"class":42},[36,39729,39730],{"class":38,"line":431},[36,39731,39732],{"class":69},"        # 判断b参数是否存在\n",[36,39734,39735,39737,39739,39741,39743,39745],{"class":38,"line":437},[36,39736,2977],{"class":46},[36,39738,39401],{"class":42},[36,39740,39404],{"class":46},[36,39742,39407],{"class":46},[36,39744,39410],{"class":53},[36,39746,4219],{"class":42},[36,39748,39749],{"class":38,"line":443},[36,39750,39751],{"class":69},"            # 如果参数不存在的化初始化b=0\n",[36,39753,39754,39757,39759],{"class":38,"line":2092},[36,39755,39756],{"class":42},"            nn.init.constant_(m.bias,",[36,39758,812],{"class":53},[36,39760,63],{"class":42},[36,39762,39763],{"class":38,"line":2097},[36,39764,39765],{"class":69},"    # 全连接层初始化\n",[36,39767,39768,39771,39773],{"class":38,"line":2103},[36,39769,39770],{"class":46},"    elif",[36,39772,39365],{"class":53},[36,39774,39441],{"class":42},[36,39776,39777],{"class":38,"line":2108},[36,39778,39779],{"class":69},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,39781,39782],{"class":38,"line":2122},[36,39783,39784],{"class":69},"        # 均值为0，方差为0.01\n",[36,39786,39787,39790,39792,39794,39796],{"class":38,"line":2127},[36,39788,39789],{"class":42},"        nn.init.normal_(m.weight,",[36,39791,812],{"class":53},[36,39793,57],{"class":42},[36,39795,39463],{"class":53},[36,39797,63],{"class":42},[36,39799,39800],{"class":38,"line":2133},[36,39801,39802],{"class":69},"        # 初始化b参数\n",[36,39804,39805,39807,39809,39811,39813,39815],{"class":38,"line":2154},[36,39806,2977],{"class":46},[36,39808,39401],{"class":42},[36,39810,39404],{"class":46},[36,39812,39407],{"class":46},[36,39814,39410],{"class":53},[36,39816,4219],{"class":42},[36,39818,39819,39821,39823],{"class":38,"line":2159},[36,39820,39756],{"class":42},[36,39822,812],{"class":53},[36,39824,63],{"class":42},[19,39826,39827],{},"②尽可能地增加批次",[19,39829,39830],{},"训练完整代码：",[26,39832,39833],{"className":28,"code":38376,"language":30,"meta":31,"style":31},[33,39834,39835,39841,39851,39861,39871,39875,39891,39899,39917,39921,39925,39935,39971,39975,40011,40015,40043,40047,40051,40061,40097,40101,40137,40141,40169,40173,40177,40187,40223,40227,40263,40267,40303,40307,40335,40339,40343,40353,40389,40393,40429,40433,40469,40473,40501,40505,40509,40519,40555,40559,40595,40599,40635,40639,40667,40671,40675,40685,40689,40693,40697,40717,40721,40733,40737,40749,40753,40757,40761,40765,40777,40781,40789,40793,40805,40809,40823,40827,40835,40839,40847,40851,40855,40867,40871,40885,40893,40897,40901,40909,40919,40929,40939,40949,40959,40969,40975,40979,40983,40995,41015,41021,41029],{"__ignoreMap":31},[36,39836,39837,39839],{"class":38,"line":39},[36,39838,30871],{"class":46},[36,39840,30874],{"class":42},[36,39842,39843,39845,39847,39849],{"class":38,"line":66},[36,39844,31215],{"class":46},[36,39846,38391],{"class":42},[36,39848,30871],{"class":46},[36,39850,38396],{"class":42},[36,39852,39853,39855,39857,39859],{"class":38,"line":73},[36,39854,31215],{"class":46},[36,39856,31218],{"class":42},[36,39858,30871],{"class":46},[36,39860,31223],{"class":42},[36,39862,39863,39865,39867,39869],{"class":38,"line":79},[36,39864,31215],{"class":46},[36,39866,31235],{"class":42},[36,39868,30871],{"class":46},[36,39870,31240],{"class":42},[36,39872,39873],{"class":38,"line":85},[36,39874,2880],{"emptyLinePlaceholder":553},[36,39876,39877,39879,39881,39883,39885,39887,39889],{"class":38,"line":419},[36,39878,15174],{"class":46},[36,39880,38427],{"class":2443},[36,39882,345],{"class":42},[36,39884,31256],{"class":2443},[36,39886,1171],{"class":42},[36,39888,31261],{"class":2443},[36,39890,31264],{"class":42},[36,39892,39893,39895,39897],{"class":38,"line":425},[36,39894,31279],{"class":46},[36,39896,31282],{"class":53},[36,39898,31285],{"class":42},[36,39900,39901,39903,39905,39907,39909,39911,39913,39915],{"class":38,"line":431},[36,39902,31295],{"class":53},[36,39904,345],{"class":42},[36,39906,38454],{"class":53},[36,39908,12915],{"class":42},[36,39910,31301],{"class":53},[36,39912,31304],{"class":42},[36,39914,31307],{"class":53},[36,39916,2456],{"class":42},[36,39918,39919],{"class":38,"line":437},[36,39920,38469],{"class":69},[36,39922,39923],{"class":38,"line":443},[36,39924,38474],{"class":69},[36,39926,39927,39929,39931,39933],{"class":38,"line":2092},[36,39928,31323],{"class":53},[36,39930,38481],{"class":42},[36,39932,47],{"class":46},[36,39934,38486],{"class":42},[36,39936,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969],{"class":38,"line":2097},[36,39938,38491],{"class":42},[36,39940,31334],{"class":5696},[36,39942,47],{"class":46},[36,39944,54],{"class":53},[36,39946,57],{"class":42},[36,39948,31343],{"class":5696},[36,39950,47],{"class":46},[36,39952,824],{"class":53},[36,39954,57],{"class":42},[36,39956,31352],{"class":5696},[36,39958,47],{"class":46},[36,39960,127],{"class":53},[36,39962,57],{"class":42},[36,39964,31361],{"class":5696},[36,39966,47],{"class":46},[36,39968,54],{"class":53},[36,39970,38524],{"class":42},[36,39972,39973],{"class":38,"line":2103},[36,39974,38529],{"class":42},[36,39976,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009],{"class":38,"line":2108},[36,39978,38491],{"class":42},[36,39980,31334],{"class":5696},[36,39982,47],{"class":46},[36,39984,824],{"class":53},[36,39986,57],{"class":42},[36,39988,31343],{"class":5696},[36,39990,47],{"class":46},[36,39992,824],{"class":53},[36,39994,57],{"class":42},[36,39996,31352],{"class":5696},[36,39998,47],{"class":46},[36,40000,127],{"class":53},[36,40002,57],{"class":42},[36,40004,31361],{"class":5696},[36,40006,47],{"class":46},[36,40008,54],{"class":53},[36,40010,38524],{"class":42},[36,40012,40013],{"class":38,"line":2122},[36,40014,38529],{"class":42},[36,40016,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041],{"class":38,"line":2127},[36,40018,38574],{"class":42},[36,40020,31352],{"class":5696},[36,40022,47],{"class":46},[36,40024,96],{"class":53},[36,40026,57],{"class":42},[36,40028,31407],{"class":5696},[36,40030,47],{"class":46},[36,40032,96],{"class":53},[36,40034,57],{"class":42},[36,40036,31361],{"class":5696},[36,40038,47],{"class":46},[36,40040,812],{"class":53},[36,40042,63],{"class":42},[36,40044,40045],{"class":38,"line":2133},[36,40046,38603],{"class":42},[36,40048,40049],{"class":38,"line":2154},[36,40050,38608],{"class":69},[36,40052,40053,40055,40057,40059],{"class":38,"line":2159},[36,40054,31323],{"class":53},[36,40056,38615],{"class":42},[36,40058,47],{"class":46},[36,40060,38486],{"class":42},[36,40062,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095],{"class":38,"line":2173},[36,40064,38491],{"class":42},[36,40066,31334],{"class":5696},[36,40068,47],{"class":46},[36,40070,824],{"class":53},[36,40072,57],{"class":42},[36,40074,31343],{"class":5696},[36,40076,47],{"class":46},[36,40078,32547],{"class":53},[36,40080,57],{"class":42},[36,40082,31352],{"class":5696},[36,40084,47],{"class":46},[36,40086,127],{"class":53},[36,40088,57],{"class":42},[36,40090,31361],{"class":5696},[36,40092,47],{"class":46},[36,40094,54],{"class":53},[36,40096,38524],{"class":42},[36,40098,40099],{"class":38,"line":2178},[36,40100,38529],{"class":42},[36,40102,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135],{"class":38,"line":2207},[36,40104,38491],{"class":42},[36,40106,31334],{"class":5696},[36,40108,47],{"class":46},[36,40110,32547],{"class":53},[36,40112,57],{"class":42},[36,40114,31343],{"class":5696},[36,40116,47],{"class":46},[36,40118,32547],{"class":53},[36,40120,57],{"class":42},[36,40122,31352],{"class":5696},[36,40124,47],{"class":46},[36,40126,127],{"class":53},[36,40128,57],{"class":42},[36,40130,31361],{"class":5696},[36,40132,47],{"class":46},[36,40134,54],{"class":53},[36,40136,38524],{"class":42},[36,40138,40139],{"class":38,"line":2212},[36,40140,38529],{"class":42},[36,40142,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167],{"class":38,"line":2229},[36,40144,38574],{"class":42},[36,40146,31352],{"class":5696},[36,40148,47],{"class":46},[36,40150,96],{"class":53},[36,40152,57],{"class":42},[36,40154,31407],{"class":5696},[36,40156,47],{"class":46},[36,40158,96],{"class":53},[36,40160,57],{"class":42},[36,40162,31361],{"class":5696},[36,40164,47],{"class":46},[36,40166,812],{"class":53},[36,40168,63],{"class":42},[36,40170,40171],{"class":38,"line":2234},[36,40172,38603],{"class":42},[36,40174,40175],{"class":38,"line":2239},[36,40176,38736],{"class":69},[36,40178,40179,40181,40183,40185],{"class":38,"line":2244},[36,40180,31323],{"class":53},[36,40182,38743],{"class":42},[36,40184,47],{"class":46},[36,40186,38486],{"class":42},[36,40188,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221],{"class":38,"line":2258},[36,40190,38491],{"class":42},[36,40192,31334],{"class":5696},[36,40194,47],{"class":46},[36,40196,32547],{"class":53},[36,40198,57],{"class":42},[36,40200,31343],{"class":5696},[36,40202,47],{"class":46},[36,40204,35347],{"class":53},[36,40206,57],{"class":42},[36,40208,31352],{"class":5696},[36,40210,47],{"class":46},[36,40212,127],{"class":53},[36,40214,57],{"class":42},[36,40216,31361],{"class":5696},[36,40218,47],{"class":46},[36,40220,54],{"class":53},[36,40222,38524],{"class":42},[36,40224,40225],{"class":38,"line":2263},[36,40226,38529],{"class":42},[36,40228,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261],{"class":38,"line":3057},[36,40230,38491],{"class":42},[36,40232,31334],{"class":5696},[36,40234,47],{"class":46},[36,40236,35347],{"class":53},[36,40238,57],{"class":42},[36,40240,31343],{"class":5696},[36,40242,47],{"class":46},[36,40244,35347],{"class":53},[36,40246,57],{"class":42},[36,40248,31352],{"class":5696},[36,40250,47],{"class":46},[36,40252,127],{"class":53},[36,40254,57],{"class":42},[36,40256,31361],{"class":5696},[36,40258,47],{"class":46},[36,40260,54],{"class":53},[36,40262,38524],{"class":42},[36,40264,40265],{"class":38,"line":3071},[36,40266,38529],{"class":42},[36,40268,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301],{"class":38,"line":3079},[36,40270,38491],{"class":42},[36,40272,31334],{"class":5696},[36,40274,47],{"class":46},[36,40276,35347],{"class":53},[36,40278,57],{"class":42},[36,40280,31343],{"class":5696},[36,40282,47],{"class":46},[36,40284,35347],{"class":53},[36,40286,57],{"class":42},[36,40288,31352],{"class":5696},[36,40290,47],{"class":46},[36,40292,127],{"class":53},[36,40294,57],{"class":42},[36,40296,31361],{"class":5696},[36,40298,47],{"class":46},[36,40300,54],{"class":53},[36,40302,38524],{"class":42},[36,40304,40305],{"class":38,"line":3084},[36,40306,38529],{"class":42},[36,40308,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331,40333],{"class":38,"line":3090},[36,40310,38574],{"class":42},[36,40312,31352],{"class":5696},[36,40314,47],{"class":46},[36,40316,96],{"class":53},[36,40318,57],{"class":42},[36,40320,31407],{"class":5696},[36,40322,47],{"class":46},[36,40324,96],{"class":53},[36,40326,57],{"class":42},[36,40328,31361],{"class":5696},[36,40330,47],{"class":46},[36,40332,812],{"class":53},[36,40334,63],{"class":42},[36,40336,40337],{"class":38,"line":3096},[36,40338,38603],{"class":42},[36,40340,40341],{"class":38,"line":3101},[36,40342,38904],{"class":69},[36,40344,40345,40347,40349,40351],{"class":38,"line":8428},[36,40346,31323],{"class":53},[36,40348,38911],{"class":42},[36,40350,47],{"class":46},[36,40352,38486],{"class":42},[36,40354,40355,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387],{"class":38,"line":8452},[36,40356,38491],{"class":42},[36,40358,31334],{"class":5696},[36,40360,47],{"class":46},[36,40362,35347],{"class":53},[36,40364,57],{"class":42},[36,40366,31343],{"class":5696},[36,40368,47],{"class":46},[36,40370,38934],{"class":53},[36,40372,57],{"class":42},[36,40374,31352],{"class":5696},[36,40376,47],{"class":46},[36,40378,127],{"class":53},[36,40380,57],{"class":42},[36,40382,31361],{"class":5696},[36,40384,47],{"class":46},[36,40386,54],{"class":53},[36,40388,38524],{"class":42},[36,40390,40391],{"class":38,"line":8457},[36,40392,38529],{"class":42},[36,40394,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413,40415,40417,40419,40421,40423,40425,40427],{"class":38,"line":8463},[36,40396,38491],{"class":42},[36,40398,31334],{"class":5696},[36,40400,47],{"class":46},[36,40402,38934],{"class":53},[36,40404,57],{"class":42},[36,40406,31343],{"class":5696},[36,40408,47],{"class":46},[36,40410,38934],{"class":53},[36,40412,57],{"class":42},[36,40414,31352],{"class":5696},[36,40416,47],{"class":46},[36,40418,127],{"class":53},[36,40420,57],{"class":42},[36,40422,31361],{"class":5696},[36,40424,47],{"class":46},[36,40426,54],{"class":53},[36,40428,38524],{"class":42},[36,40430,40431],{"class":38,"line":8490},[36,40432,38529],{"class":42},[36,40434,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467],{"class":38,"line":8495},[36,40436,38491],{"class":42},[36,40438,31334],{"class":5696},[36,40440,47],{"class":46},[36,40442,38934],{"class":53},[36,40444,57],{"class":42},[36,40446,31343],{"class":5696},[36,40448,47],{"class":46},[36,40450,38934],{"class":53},[36,40452,57],{"class":42},[36,40454,31352],{"class":5696},[36,40456,47],{"class":46},[36,40458,127],{"class":53},[36,40460,57],{"class":42},[36,40462,31361],{"class":5696},[36,40464,47],{"class":46},[36,40466,54],{"class":53},[36,40468,38524],{"class":42},[36,40470,40471],{"class":38,"line":8501},[36,40472,38529],{"class":42},[36,40474,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499],{"class":38,"line":8513},[36,40476,38574],{"class":42},[36,40478,31352],{"class":5696},[36,40480,47],{"class":46},[36,40482,96],{"class":53},[36,40484,57],{"class":42},[36,40486,31407],{"class":5696},[36,40488,47],{"class":46},[36,40490,96],{"class":53},[36,40492,57],{"class":42},[36,40494,31361],{"class":5696},[36,40496,47],{"class":46},[36,40498,812],{"class":53},[36,40500,63],{"class":42},[36,40502,40503],{"class":38,"line":8525},[36,40504,38603],{"class":42},[36,40506,40507],{"class":38,"line":8537},[36,40508,39073],{"class":69},[36,40510,40511,40513,40515,40517],{"class":38,"line":10196},[36,40512,31323],{"class":53},[36,40514,39080],{"class":42},[36,40516,47],{"class":46},[36,40518,38486],{"class":42},[36,40520,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553],{"class":38,"line":10221},[36,40522,38491],{"class":42},[36,40524,31334],{"class":5696},[36,40526,47],{"class":46},[36,40528,38934],{"class":53},[36,40530,57],{"class":42},[36,40532,31343],{"class":5696},[36,40534,47],{"class":46},[36,40536,38934],{"class":53},[36,40538,57],{"class":42},[36,40540,31352],{"class":5696},[36,40542,47],{"class":46},[36,40544,127],{"class":53},[36,40546,57],{"class":42},[36,40548,31361],{"class":5696},[36,40550,47],{"class":46},[36,40552,54],{"class":53},[36,40554,38524],{"class":42},[36,40556,40557],{"class":38,"line":10244},[36,40558,38529],{"class":42},[36,40560,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593],{"class":38,"line":10268},[36,40562,38491],{"class":42},[36,40564,31334],{"class":5696},[36,40566,47],{"class":46},[36,40568,38934],{"class":53},[36,40570,57],{"class":42},[36,40572,31343],{"class":5696},[36,40574,47],{"class":46},[36,40576,38934],{"class":53},[36,40578,57],{"class":42},[36,40580,31352],{"class":5696},[36,40582,47],{"class":46},[36,40584,127],{"class":53},[36,40586,57],{"class":42},[36,40588,31361],{"class":5696},[36,40590,47],{"class":46},[36,40592,54],{"class":53},[36,40594,38524],{"class":42},[36,40596,40597],{"class":38,"line":10273},[36,40598,38529],{"class":42},[36,40600,40601,40603,40605,40607,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633],{"class":38,"line":10278},[36,40602,38491],{"class":42},[36,40604,31334],{"class":5696},[36,40606,47],{"class":46},[36,40608,38934],{"class":53},[36,40610,57],{"class":42},[36,40612,31343],{"class":5696},[36,40614,47],{"class":46},[36,40616,38934],{"class":53},[36,40618,57],{"class":42},[36,40620,31352],{"class":5696},[36,40622,47],{"class":46},[36,40624,127],{"class":53},[36,40626,57],{"class":42},[36,40628,31361],{"class":5696},[36,40630,47],{"class":46},[36,40632,54],{"class":53},[36,40634,38524],{"class":42},[36,40636,40637],{"class":38,"line":10283},[36,40638,38529],{"class":42},[36,40640,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665],{"class":38,"line":10292},[36,40642,38574],{"class":42},[36,40644,31352],{"class":5696},[36,40646,47],{"class":46},[36,40648,96],{"class":53},[36,40650,57],{"class":42},[36,40652,31407],{"class":5696},[36,40654,47],{"class":46},[36,40656,96],{"class":53},[36,40658,57],{"class":42},[36,40660,31361],{"class":5696},[36,40662,47],{"class":46},[36,40664,812],{"class":53},[36,40666,63],{"class":42},[36,40668,40669],{"class":38,"line":10297},[36,40670,38603],{"class":42},[36,40672,40673],{"class":38,"line":10303},[36,40674,39241],{"class":69},[36,40676,40677,40679,40681,40683],{"class":38,"line":10324},[36,40678,31323],{"class":53},[36,40680,39248],{"class":42},[36,40682,47],{"class":46},[36,40684,38486],{"class":42},[36,40686,40687],{"class":38,"line":10330},[36,40688,39257],{"class":69},[36,40690,40691],{"class":38,"line":10344},[36,40692,39262],{"class":69},[36,40694,40695],{"class":38,"line":10350},[36,40696,39267],{"class":42},[36,40698,40699,40701,40703,40705,40707,40709,40711,40713,40715],{"class":38,"line":10377},[36,40700,39272],{"class":42},[36,40702,987],{"class":53},[36,40704,1071],{"class":46},[36,40706,987],{"class":53},[36,40708,1071],{"class":46},[36,40710,38934],{"class":53},[36,40712,57],{"class":42},[36,40714,35347],{"class":53},[36,40716,38524],{"class":42},[36,40718,40719],{"class":38,"line":10386},[36,40720,38529],{"class":42},[36,40722,40723,40725,40727,40729,40731],{"class":38,"line":10392},[36,40724,39272],{"class":42},[36,40726,35347],{"class":53},[36,40728,57],{"class":42},[36,40730,32547],{"class":53},[36,40732,38524],{"class":42},[36,40734,40735],{"class":38,"line":10400},[36,40736,38529],{"class":42},[36,40738,40739,40741,40743,40745,40747],{"class":38,"line":10405},[36,40740,39272],{"class":42},[36,40742,32547],{"class":53},[36,40744,57],{"class":42},[36,40746,1062],{"class":53},[36,40748,63],{"class":42},[36,40750,40751],{"class":38,"line":17084},[36,40752,38603],{"class":42},[36,40754,40755],{"class":38,"line":17090},[36,40756,2880],{"emptyLinePlaceholder":553},[36,40758,40759],{"class":38,"line":17113},[36,40760,39333],{"class":69},[36,40762,40763],{"class":38,"line":17119},[36,40764,39338],{"class":69},[36,40766,40767,40769,40771,40773,40775],{"class":38,"line":17142},[36,40768,3883],{"class":46},[36,40770,39345],{"class":42},[36,40772,26524],{"class":46},[36,40774,39350],{"class":53},[36,40776,39353],{"class":42},[36,40778,40779],{"class":38,"line":17156},[36,40780,39358],{"class":69},[36,40782,40783,40785,40787],{"class":38,"line":17176},[36,40784,5122],{"class":46},[36,40786,39365],{"class":53},[36,40788,39368],{"class":42},[36,40790,40791],{"class":38,"line":17182},[36,40792,39373],{"class":69},[36,40794,40795,40797,40799,40801,40803],{"class":38,"line":17193},[36,40796,39378],{"class":42},[36,40798,39381],{"class":5696},[36,40800,47],{"class":46},[36,40802,39386],{"class":405},[36,40804,63],{"class":42},[36,40806,40807],{"class":38,"line":17216},[36,40808,39393],{"class":69},[36,40810,40811,40813,40815,40817,40819,40821],{"class":38,"line":17238},[36,40812,39398],{"class":46},[36,40814,39401],{"class":42},[36,40816,39404],{"class":46},[36,40818,39407],{"class":46},[36,40820,39410],{"class":53},[36,40822,4219],{"class":42},[36,40824,40825],{"class":38,"line":17243},[36,40826,39417],{"class":69},[36,40828,40829,40831,40833],{"class":38,"line":17249},[36,40830,39422],{"class":42},[36,40832,812],{"class":53},[36,40834,63],{"class":42},[36,40836,40837],{"class":38,"line":17263},[36,40838,39431],{"class":69},[36,40840,40841,40843,40845],{"class":38,"line":17276},[36,40842,39436],{"class":46},[36,40844,39365],{"class":53},[36,40846,39441],{"class":42},[36,40848,40849],{"class":38,"line":17281},[36,40850,39446],{"class":69},[36,40852,40853],{"class":38,"line":17295},[36,40854,39451],{"class":69},[36,40856,40857,40859,40861,40863,40865],{"class":38,"line":17300},[36,40858,39456],{"class":42},[36,40860,812],{"class":53},[36,40862,57],{"class":42},[36,40864,39463],{"class":53},[36,40866,63],{"class":42},[36,40868,40869],{"class":38,"line":17306},[36,40870,39470],{"class":69},[36,40872,40873,40875,40877,40879,40881,40883],{"class":38,"line":17311},[36,40874,39398],{"class":46},[36,40876,39401],{"class":42},[36,40878,39404],{"class":46},[36,40880,39407],{"class":46},[36,40882,39410],{"class":53},[36,40884,4219],{"class":42},[36,40886,40887,40889,40891],{"class":38,"line":17325},[36,40888,39422],{"class":42},[36,40890,812],{"class":53},[36,40892,63],{"class":42},[36,40894,40895],{"class":38,"line":17330},[36,40896,2880],{"emptyLinePlaceholder":553},[36,40898,40899],{"class":38,"line":17335},[36,40900,35642],{"class":69},[36,40902,40903,40905,40907],{"class":38,"line":17349},[36,40904,31279],{"class":46},[36,40906,31571],{"class":2443},[36,40908,31574],{"class":42},[36,40910,40911,40913,40915,40917],{"class":38,"line":17361},[36,40912,31579],{"class":42},[36,40914,47],{"class":46},[36,40916,31301],{"class":53},[36,40918,39519],{"class":42},[36,40920,40921,40923,40925,40927],{"class":38,"line":17366},[36,40922,31579],{"class":42},[36,40924,47],{"class":46},[36,40926,31301],{"class":53},[36,40928,39530],{"class":42},[36,40930,40931,40933,40935,40937],{"class":38,"line":17379},[36,40932,31579],{"class":42},[36,40934,47],{"class":46},[36,40936,31301],{"class":53},[36,40938,39541],{"class":42},[36,40940,40941,40943,40945,40947],{"class":38,"line":17384},[36,40942,31579],{"class":42},[36,40944,47],{"class":46},[36,40946,31301],{"class":53},[36,40948,39552],{"class":42},[36,40950,40951,40953,40955,40957],{"class":38,"line":17389},[36,40952,31579],{"class":42},[36,40954,47],{"class":46},[36,40956,31301],{"class":53},[36,40958,39563],{"class":42},[36,40960,40961,40963,40965,40967],{"class":38,"line":17394},[36,40962,31579],{"class":42},[36,40964,47],{"class":46},[36,40966,31301],{"class":53},[36,40968,39574],{"class":42},[36,40970,40971,40973],{"class":38,"line":17407},[36,40972,15232],{"class":46},[36,40974,31687],{"class":42},[36,40976,40977],{"class":38,"line":17412},[36,40978,2880],{"emptyLinePlaceholder":553},[36,40980,40981],{"class":38,"line":33110},[36,40982,39589],{"class":69},[36,40984,40985,40987,40989,40991,40993],{"class":38,"line":33116},[36,40986,2011],{"class":46},[36,40988,31698],{"class":53},[36,40990,3429],{"class":46},[36,40992,39600],{"class":405},[36,40994,4219],{"class":42},[36,40996,40997,40999,41001,41003,41005,41007,41009,41011,41013],{"class":38,"line":33122},[36,40998,31715],{"class":42},[36,41000,47],{"class":46},[36,41002,30930],{"class":42},[36,41004,31722],{"class":405},[36,41006,2184],{"class":46},[36,41008,31727],{"class":42},[36,41010,2181],{"class":46},[36,41012,30955],{"class":405},[36,41014,63],{"class":42},[36,41016,41017,41019],{"class":38,"line":33128},[36,41018,31777],{"class":53},[36,41020,30964],{"class":42},[36,41022,41023,41025,41027],{"class":38,"line":33134},[36,41024,31767],{"class":42},[36,41026,47],{"class":46},[36,41028,39637],{"class":42},[36,41030,41031,41033,41035,41037,41039,41041,41043,41045],{"class":38,"line":33145},[36,41032,31777],{"class":53},[36,41034,31780],{"class":42},[36,41036,54],{"class":53},[36,41038,57],{"class":42},[36,41040,31978],{"class":53},[36,41042,57],{"class":42},[36,41044,31978],{"class":53},[36,41046,31793],{"class":42},[579,41048,41049],{"start":73},[582,41050,41051],{},"测试代码",[26,41053,41055],{"className":28,"code":41054,"language":30,"meta":31,"style":31},"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",[33,41056,41057,41063,41073,41083,41087,41097,41108,41112,41116,41120,41128,41144,41154,41170,41180,41194,41198,41208,41218,41228,41234,41238,41242,41250,41254,41270,41278,41282,41286,41294,41302,41306,41310,41314,41318,41324,41328,41338,41346,41354,41358,41362,41366,41374,41378,41394,41398,41402,41406,41418,41422,41434,41438,41442,41454,41458,41468,41472,41476,41488,41492,41501,41505,41509,41517,41521,41529,41533,41537,41541,41545,41549,41565,41573,41577,41581,41629,41635,41639,41649,41657,41665,41669,41673,41677,41681,41689,41693,41709,41713,41721,41729],{"__ignoreMap":31},[36,41058,41059,41061],{"class":38,"line":39},[36,41060,30871],{"class":46},[36,41062,30874],{"class":42},[36,41064,41065,41067,41069,41071],{"class":38,"line":66},[36,41066,30871],{"class":46},[36,41068,31893],{"class":42},[36,41070,31861],{"class":46},[36,41072,31898],{"class":42},[36,41074,41075,41077,41079,41081],{"class":38,"line":73},[36,41076,31215],{"class":46},[36,41078,31876],{"class":42},[36,41080,30871],{"class":46},[36,41082,31881],{"class":42},[36,41084,41085],{"class":38,"line":79},[36,41086,34399],{"class":69},[36,41088,41089,41091,41093,41095],{"class":38,"line":85},[36,41090,31215],{"class":46},[36,41092,31846],{"class":42},[36,41094,30871],{"class":46},[36,41096,31851],{"class":42},[36,41098,41099,41101,41103,41105],{"class":38,"line":419},[36,41100,31215],{"class":46},[36,41102,32391],{"class":42},[36,41104,30871],{"class":46},[36,41106,41107],{"class":53}," VGG16\n",[36,41109,41110],{"class":38,"line":425},[36,41111,2880],{"emptyLinePlaceholder":553},[36,41113,41114],{"class":38,"line":431},[36,41115,2880],{"emptyLinePlaceholder":553},[36,41117,41118],{"class":38,"line":437},[36,41119,34428],{"class":69},[36,41121,41122,41124,41126],{"class":38,"line":443},[36,41123,32424],{"class":46},[36,41125,34435],{"class":2443},[36,41127,32430],{"class":42},[36,41129,41130,41132,41134,41136,41138,41140,41142],{"class":38,"line":2092},[36,41131,34442],{"class":42},[36,41133,47],{"class":46},[36,41135,31933],{"class":42},[36,41137,31936],{"class":5696},[36,41139,47],{"class":46},[36,41141,31941],{"class":405},[36,41143,31944],{"class":42},[36,41145,41146,41148,41150,41152],{"class":38,"line":2097},[36,41147,34459],{"class":5696},[36,41149,47],{"class":46},[36,41151,34464],{"class":53},[36,41153,31944],{"class":42},[36,41155,41156,41158,41160,41162,41164,41166,41168],{"class":38,"line":2103},[36,41157,34471],{"class":5696},[36,41159,47],{"class":46},[36,41161,31971],{"class":42},[36,41163,531],{"class":5696},[36,41165,47],{"class":46},[36,41167,31978],{"class":53},[36,41169,31981],{"class":42},[36,41171,41172,41174,41176,41178],{"class":38,"line":2108},[36,41173,34488],{"class":5696},[36,41175,47],{"class":46},[36,41177,31954],{"class":53},[36,41179,63],{"class":42},[36,41181,41182,41184,41186,41188,41190,41192],{"class":38,"line":2122},[36,41183,34499],{"class":42},[36,41185,47],{"class":46},[36,41187,32011],{"class":42},[36,41189,32014],{"class":5696},[36,41191,47],{"class":46},[36,41193,34510],{"class":42},[36,41195,41196],{"class":38,"line":2127},[36,41197,34515],{"class":69},[36,41199,41200,41202,41204,41206],{"class":38,"line":2133},[36,41201,34520],{"class":5696},[36,41203,47],{"class":46},[36,41205,54],{"class":53},[36,41207,31944],{"class":42},[36,41209,41210,41212,41214,41216],{"class":38,"line":2154},[36,41211,34531],{"class":5696},[36,41213,47],{"class":46},[36,41215,31954],{"class":53},[36,41217,31944],{"class":42},[36,41219,41220,41222,41224,41226],{"class":38,"line":2159},[36,41221,34542],{"class":5696},[36,41223,47],{"class":46},[36,41225,812],{"class":53},[36,41227,63],{"class":42},[36,41229,41230,41232],{"class":38,"line":2173},[36,41231,4570],{"class":46},[36,41233,34555],{"class":42},[36,41235,41236],{"class":38,"line":2178},[36,41237,2880],{"emptyLinePlaceholder":553},[36,41239,41240],{"class":38,"line":2207},[36,41241,34564],{"class":69},[36,41243,41244,41246,41248],{"class":38,"line":2212},[36,41245,32424],{"class":46},[36,41247,34571],{"class":2443},[36,41249,34574],{"class":42},[36,41251,41252],{"class":38,"line":2229},[36,41253,34579],{"class":69},[36,41255,41256,41258,41260,41262,41264,41266,41268],{"class":38,"line":2234},[36,41257,31715],{"class":42},[36,41259,47],{"class":46},[36,41261,31722],{"class":405},[36,41263,2184],{"class":46},[36,41265,31727],{"class":42},[36,41267,2181],{"class":46},[36,41269,34596],{"class":405},[36,41271,41272,41274,41276],{"class":38,"line":2239},[36,41273,31767],{"class":42},[36,41275,47],{"class":46},[36,41277,32766],{"class":42},[36,41279,41280],{"class":38,"line":2244},[36,41281,2880],{"emptyLinePlaceholder":553},[36,41283,41284],{"class":38,"line":2258},[36,41285,34613],{"class":69},[36,41287,41288,41290,41292],{"class":38,"line":2263},[36,41289,34618],{"class":42},[36,41291,47],{"class":46},[36,41293,32819],{"class":53},[36,41295,41296,41298,41300],{"class":38,"line":3057},[36,41297,34627],{"class":42},[36,41299,47],{"class":46},[36,41301,3565],{"class":53},[36,41303,41304],{"class":38,"line":3071},[36,41305,2880],{"emptyLinePlaceholder":553},[36,41307,41308],{"class":38,"line":3079},[36,41309,34640],{"class":69},[36,41311,41312],{"class":38,"line":3084},[36,41313,34645],{"class":69},[36,41315,41316],{"class":38,"line":3090},[36,41317,34650],{"class":69},[36,41319,41320,41322],{"class":38,"line":3096},[36,41321,34655],{"class":46},[36,41323,33361],{"class":42},[36,41325,41326],{"class":38,"line":3101},[36,41327,34662],{"class":69},[36,41329,41330,41332,41334,41336],{"class":38,"line":8428},[36,41331,3883],{"class":46},[36,41333,34669],{"class":42},[36,41335,26524],{"class":46},[36,41337,34674],{"class":42},[36,41339,41340,41342,41344],{"class":38,"line":8452},[36,41341,34679],{"class":42},[36,41343,47],{"class":46},[36,41345,34684],{"class":42},[36,41347,41348,41350,41352],{"class":38,"line":8457},[36,41349,34689],{"class":42},[36,41351,47],{"class":46},[36,41353,34694],{"class":42},[36,41355,41356],{"class":38,"line":8463},[36,41357,34699],{"class":69},[36,41359,41360],{"class":38,"line":8490},[36,41361,33352],{"class":42},[36,41363,41364],{"class":38,"line":8495},[36,41365,34708],{"class":69},[36,41367,41368,41370,41372],{"class":38,"line":8501},[36,41369,33137],{"class":42},[36,41371,47],{"class":46},[36,41373,34717],{"class":42},[36,41375,41376],{"class":38,"line":8513},[36,41377,34722],{"class":69},[36,41379,41380,41382,41384,41386,41388,41390,41392],{"class":38,"line":8525},[36,41381,33154],{"class":42},[36,41383,47],{"class":46},[36,41385,33159],{"class":42},[36,41387,33162],{"class":5696},[36,41389,47],{"class":46},[36,41391,54],{"class":53},[36,41393,63],{"class":42},[36,41395,41396],{"class":38,"line":8537},[36,41397,34743],{"class":69},[36,41399,41400],{"class":38,"line":10196},[36,41401,34748],{"class":69},[36,41403,41404],{"class":38,"line":10221},[36,41405,34753],{"class":69},[36,41407,41408,41410,41412,41414,41416],{"class":38,"line":10244},[36,41409,34758],{"class":42},[36,41411,9957],{"class":46},[36,41413,33264],{"class":42},[36,41415,3429],{"class":46},[36,41417,34767],{"class":42},[36,41419,41420],{"class":38,"line":10268},[36,41421,34772],{"class":69},[36,41423,41424,41426,41428,41430,41432],{"class":38,"line":10273},[36,41425,34777],{"class":42},[36,41427,9957],{"class":46},[36,41429,34782],{"class":42},[36,41431,812],{"class":53},[36,41433,63],{"class":42},[36,41435,41436],{"class":38,"line":10278},[36,41437,2880],{"emptyLinePlaceholder":553},[36,41439,41440],{"class":38,"line":10283},[36,41441,34795],{"class":69},[36,41443,41444,41446,41448,41450,41452],{"class":38,"line":10292},[36,41445,34800],{"class":42},[36,41447,47],{"class":46},[36,41449,34805],{"class":42},[36,41451,1197],{"class":46},[36,41453,34810],{"class":42},[36,41455,41456],{"class":38,"line":10297},[36,41457,34815],{"class":69},[36,41459,41460,41462,41464,41466],{"class":38,"line":10303},[36,41461,32928],{"class":53},[36,41463,345],{"class":42},[36,41465,34824],{"class":405},[36,41467,34827],{"class":42},[36,41469,41470],{"class":38,"line":10324},[36,41471,2880],{"emptyLinePlaceholder":553},[36,41473,41474],{"class":38,"line":10330},[36,41475,34836],{"class":69},[36,41477,41478,41480,41482,41484,41486],{"class":38,"line":10344},[36,41479,2011],{"class":46},[36,41481,31698],{"class":53},[36,41483,3429],{"class":46},[36,41485,31703],{"class":405},[36,41487,4219],{"class":42},[36,41489,41490],{"class":38,"line":10350},[36,41491,34853],{"class":69},[36,41493,41494,41496,41498],{"class":38,"line":10377},[36,41495,31767],{"class":42},[36,41497,47],{"class":46},[36,41499,41500],{"class":42},"VGG16()\n",[36,41502,41503],{"class":38,"line":10386},[36,41504,34866],{"class":69},[36,41506,41507],{"class":38,"line":10392},[36,41508,34871],{"class":69},[36,41510,41511,41513,41515],{"class":38,"line":10400},[36,41512,34876],{"class":42},[36,41514,34879],{"class":405},[36,41516,370],{"class":42},[36,41518,41519],{"class":38,"line":10405},[36,41520,34886],{"class":69},[36,41522,41523,41525,41527],{"class":38,"line":17084},[36,41524,34499],{"class":42},[36,41526,47],{"class":46},[36,41528,34895],{"class":42},[36,41530,41531],{"class":38,"line":17090},[36,41532,34900],{"class":69},[36,41534,41535],{"class":38,"line":17113},[36,41536,34905],{"class":42},[36,41538,41539],{"class":38,"line":17119},[36,41540,2880],{"emptyLinePlaceholder":553},[36,41542,41543],{"class":38,"line":17142},[36,41544,34914],{"class":69},[36,41546,41547],{"class":38,"line":17156},[36,41548,34919],{"class":69},[36,41550,41551,41553,41555,41557,41559,41561,41563],{"class":38,"line":17176},[36,41552,31715],{"class":42},[36,41554,47],{"class":46},[36,41556,31722],{"class":405},[36,41558,2184],{"class":46},[36,41560,31727],{"class":42},[36,41562,2181],{"class":46},[36,41564,34596],{"class":405},[36,41566,41567,41569,41571],{"class":38,"line":17182},[36,41568,31767],{"class":42},[36,41570,47],{"class":46},[36,41572,32766],{"class":42},[36,41574,41575],{"class":38,"line":17193},[36,41576,34948],{"class":69},[36,41578,41579],{"class":38,"line":17216},[36,41580,34953],{"class":69},[36,41582,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605,41607,41609,41611,41613,41615,41617,41619,41621,41623,41625,41627],{"class":38,"line":17238},[36,41584,34958],{"class":42},[36,41586,47],{"class":46},[36,41588,1503],{"class":42},[36,41590,34965],{"class":405},[36,41592,57],{"class":42},[36,41594,34970],{"class":405},[36,41596,57],{"class":42},[36,41598,34975],{"class":405},[36,41600,57],{"class":42},[36,41602,34980],{"class":405},[36,41604,57],{"class":42},[36,41606,34985],{"class":405},[36,41608,57],{"class":42},[36,41610,34990],{"class":405},[36,41612,57],{"class":42},[36,41614,34995],{"class":405},[36,41616,57],{"class":42},[36,41618,35000],{"class":405},[36,41620,57],{"class":42},[36,41622,35005],{"class":405},[36,41624,57],{"class":42},[36,41626,35010],{"class":405},[36,41628,33723],{"class":42},[36,41630,41631,41633],{"class":38,"line":17243},[36,41632,34655],{"class":46},[36,41634,33361],{"class":42},[36,41636,41637],{"class":38,"line":17249},[36,41638,35023],{"class":69},[36,41640,41641,41643,41645,41647],{"class":38,"line":17263},[36,41642,3883],{"class":46},[36,41644,35030],{"class":42},[36,41646,26524],{"class":46},[36,41648,34674],{"class":42},[36,41650,41651,41653,41655],{"class":38,"line":17276},[36,41652,33087],{"class":42},[36,41654,47],{"class":46},[36,41656,33092],{"class":42},[36,41658,41659,41661,41663],{"class":38,"line":17281},[36,41660,33102],{"class":42},[36,41662,47],{"class":46},[36,41664,33107],{"class":42},[36,41666,41667],{"class":38,"line":17295},[36,41668,2880],{"emptyLinePlaceholder":553},[36,41670,41671],{"class":38,"line":17300},[36,41672,35059],{"class":69},[36,41674,41675],{"class":38,"line":17306},[36,41676,33352],{"class":42},[36,41678,41679],{"class":38,"line":17311},[36,41680,35068],{"class":69},[36,41682,41683,41685,41687],{"class":38,"line":17325},[36,41684,33137],{"class":42},[36,41686,47],{"class":46},[36,41688,33142],{"class":42},[36,41690,41691],{"class":38,"line":17330},[36,41692,35081],{"class":69},[36,41694,41695,41697,41699,41701,41703,41705,41707],{"class":38,"line":17335},[36,41696,33154],{"class":42},[36,41698,47],{"class":46},[36,41700,33159],{"class":42},[36,41702,33162],{"class":5696},[36,41704,47],{"class":46},[36,41706,54],{"class":53},[36,41708,63],{"class":42},[36,41710,41711],{"class":38,"line":17349},[36,41712,35102],{"class":69},[36,41714,41715,41717,41719],{"class":38,"line":17361},[36,41716,35107],{"class":42},[36,41718,47],{"class":46},[36,41720,35112],{"class":42},[36,41722,41723,41725,41727],{"class":38,"line":17366},[36,41724,35117],{"class":42},[36,41726,47],{"class":46},[36,41728,35122],{"class":42},[36,41730,41731,41733,41735,41737,41739,41741,41743,41745],{"class":38,"line":17379},[36,41732,35127],{"class":53},[36,41734,345],{"class":42},[36,41736,35132],{"class":405},[36,41738,35135],{"class":42},[36,41740,35138],{"class":405},[36,41742,57],{"class":42},[36,41744,35143],{"class":405},[36,41746,35146],{"class":42},[596,41748,41750],{"id":41749},"_23googlenet","2.3.GoogLeNet",[22478,41752,41754],{"id":41753},"_231原理","2.3.1.原理",[579,41756,41757],{},[582,41758,41759],{},"网络结构",[19,41761,41762],{},[519,41763],{"alt":31,"src":41764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,41766,41767],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41769,41770],{},[519,41771],{"alt":31,"src":41772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,41774,41775],{},[519,41776],{"alt":31,"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-025.png",[19,41779,41780],{},[519,41781],{"alt":31,"src":41782},"\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",[579,41784,41785],{"start":66},[582,41786,41787],{},"1x1卷积的优点",[19,41789,41790],{},[519,41791],{"alt":31,"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-027.png",[579,41794,41795],{"start":73},[582,41796,41797],{},"全局平均池化层优点",[19,41799,41800],{},[519,41801],{"alt":31,"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-028.png",[19,41804,41805],{},[519,41806],{"alt":31,"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-029.png",[579,41809,41810],{"start":79},[582,41811,41812],{},"参数详细描述",[19,41814,41815],{},[519,41816],{"alt":31,"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-030.png",[19,41819,41820],{},[519,41821],{"alt":31,"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-031.png",[19,41824,41825],{},[519,41826],{"alt":31,"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-032.png",[19,41829,41830],{},[519,41831],{"alt":31,"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-033.png",[19,41834,41835],{},[519,41836],{"alt":31,"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-034.png",[19,41839,41840],{},[519,41841],{"alt":31,"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-035.png",[19,41844,41845],{},[519,41846],{"alt":31,"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-036.png",[19,41849,41850],{},[519,41851],{"alt":31,"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-037.png",[19,41854,41855],{},[519,41856],{"alt":31,"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-038.png",[19,41859,41860],{},[519,41861],{"alt":31,"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-039.png",[19,41864,41865],{},[519,41866],{"alt":31,"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-040.png",[19,41869,41870],{},[519,41871],{"alt":31,"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-041.png",[19,41874,41875],{},[519,41876],{"alt":31,"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-042.png",[19,41879,41880],{},[519,41881],{"alt":31,"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-043.png",[19,41884,41885],{},[519,41886],{"alt":31,"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-044.png",[19,41889,41890],{},[519,41891],{"alt":31,"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-045.png",[19,41894,41895],{},[519,41896],{"alt":31,"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-046.png",[19,41899,41900],{},[519,41901],{"alt":31,"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-047.png",[19,41904,41905],{},[519,41906],{"alt":31,"src":41907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,41909,41910],{},[519,41911],{"alt":31,"src":41912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,41914,41915],{},[519,41916],{"alt":31,"src":41917},"\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",[22478,41919,41921],{"id":41920},"_232代码实现","2.3.2.代码实现",[579,41923,41924],{},[582,41925,31189],{},[19,41927,41928],{},"根据原理一步一步搭建即可",[26,41930,41932],{"className":28,"code":41931,"language":30,"meta":31,"style":31},"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",[33,41933,41934,41940,41950,41960,41964,41981,41990,42005,42015,42020,42053,42058,42095,42142,42147,42183,42230,42235,42240,42275,42307,42311,42319,42335,42359,42384,42405,42410,42425,42429,42433,42438,42455,42460,42469,42484,42495,42539,42543,42571,42575,42586,42614,42618,42655,42659,42687,42691,42702,42738,42770,42798,42802,42813,42847,42879,42911,42944,42978,43006,43010,43021,43054,43086,43100,43104,43117,43121,43126,43138,43146,43168,43173,43178,43183,43188,43193,43198,43212,43220,43229,43242,43257,43266,43270,43278,43289,43300,43311,43322,43333,43339,43343,43348,43360,43380,43389],{"__ignoreMap":31},[36,41935,41936,41938],{"class":38,"line":39},[36,41937,30871],{"class":46},[36,41939,30874],{"class":42},[36,41941,41942,41944,41946,41948],{"class":38,"line":66},[36,41943,31215],{"class":46},[36,41945,31218],{"class":42},[36,41947,30871],{"class":46},[36,41949,31223],{"class":42},[36,41951,41952,41954,41956,41958],{"class":38,"line":73},[36,41953,31215],{"class":46},[36,41955,31235],{"class":42},[36,41957,30871],{"class":46},[36,41959,31240],{"class":42},[36,41961,41962],{"class":38,"line":79},[36,41963,2880],{"emptyLinePlaceholder":553},[36,41965,41966,41968,41971,41973,41975,41977,41979],{"class":38,"line":85},[36,41967,15174],{"class":46},[36,41969,41970],{"class":2443}," Inception",[36,41972,345],{"class":42},[36,41974,31256],{"class":2443},[36,41976,1171],{"class":42},[36,41978,31261],{"class":2443},[36,41980,31264],{"class":42},[36,41982,41983,41985,41987],{"class":38,"line":419},[36,41984,31279],{"class":46},[36,41986,31282],{"class":53},[36,41988,41989],{"class":42},"(self,in_channels,c1,c2,c3,c4):\n",[36,41991,41992,41994,41997,41999,42001,42003],{"class":38,"line":425},[36,41993,31295],{"class":53},[36,41995,41996],{"class":42},"(Inception,",[36,41998,31301],{"class":53},[36,42000,31304],{"class":42},[36,42002,31307],{"class":53},[36,42004,2456],{"class":42},[36,42006,42007,42009,42011,42013],{"class":38,"line":431},[36,42008,31323],{"class":53},[36,42010,35248],{"class":42},[36,42012,47],{"class":46},[36,42014,35253],{"class":42},[36,42016,42017],{"class":38,"line":437},[36,42018,42019],{"class":69},"        # 路线1：定义1*1卷积\n",[36,42021,42022,42024,42027,42029,42031,42033,42035,42038,42040,42042,42045,42047,42049,42051],{"class":38,"line":443},[36,42023,31323],{"class":53},[36,42025,42026],{"class":42},".p1_1",[36,42028,47],{"class":46},[36,42030,31331],{"class":42},[36,42032,31334],{"class":5696},[36,42034,47],{"class":46},[36,42036,42037],{"class":42},"in_channels,",[36,42039,31343],{"class":5696},[36,42041,47],{"class":46},[36,42043,42044],{"class":42},"c1,",[36,42046,31352],{"class":5696},[36,42048,47],{"class":46},[36,42050,54],{"class":53},[36,42052,63],{"class":42},[36,42054,42055],{"class":38,"line":2092},[36,42056,42057],{"class":69},"        # 路线2：定义1*1卷积和3*3\n",[36,42059,42060,42062,42065,42067,42069,42071,42073,42075,42077,42079,42082,42084,42087,42089,42091,42093],{"class":38,"line":2097},[36,42061,31323],{"class":53},[36,42063,42064],{"class":42},".p2_1",[36,42066,47],{"class":46},[36,42068,31331],{"class":42},[36,42070,31334],{"class":5696},[36,42072,47],{"class":46},[36,42074,42037],{"class":42},[36,42076,31343],{"class":5696},[36,42078,47],{"class":46},[36,42080,42081],{"class":42},"c2[",[36,42083,812],{"class":53},[36,42085,42086],{"class":42},"],",[36,42088,31352],{"class":5696},[36,42090,47],{"class":46},[36,42092,54],{"class":53},[36,42094,63],{"class":42},[36,42096,42097,42099,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140],{"class":38,"line":2103},[36,42098,31323],{"class":53},[36,42100,42101],{"class":42},".p2_2",[36,42103,47],{"class":46},[36,42105,31331],{"class":42},[36,42107,31334],{"class":5696},[36,42109,47],{"class":46},[36,42111,42081],{"class":42},[36,42113,812],{"class":53},[36,42115,42086],{"class":42},[36,42117,31343],{"class":5696},[36,42119,47],{"class":46},[36,42121,42081],{"class":42},[36,42123,54],{"class":53},[36,42125,42086],{"class":42},[36,42127,31352],{"class":5696},[36,42129,47],{"class":46},[36,42131,127],{"class":53},[36,42133,57],{"class":42},[36,42135,31361],{"class":5696},[36,42137,47],{"class":46},[36,42139,54],{"class":53},[36,42141,63],{"class":42},[36,42143,42144],{"class":38,"line":2108},[36,42145,42146],{"class":69},"        # 路线3：定义1*1卷积和5*5\n",[36,42148,42149,42151,42154,42156,42158,42160,42162,42164,42166,42168,42171,42173,42175,42177,42179,42181],{"class":38,"line":2122},[36,42150,31323],{"class":53},[36,42152,42153],{"class":42},".p3_1",[36,42155,47],{"class":46},[36,42157,31331],{"class":42},[36,42159,31334],{"class":5696},[36,42161,47],{"class":46},[36,42163,42037],{"class":42},[36,42165,31343],{"class":5696},[36,42167,47],{"class":46},[36,42169,42170],{"class":42},"c3[",[36,42172,812],{"class":53},[36,42174,42086],{"class":42},[36,42176,31352],{"class":5696},[36,42178,47],{"class":46},[36,42180,54],{"class":53},[36,42182,63],{"class":42},[36,42184,42185,42187,42190,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228],{"class":38,"line":2127},[36,42186,31323],{"class":53},[36,42188,42189],{"class":42},".p3_2",[36,42191,47],{"class":46},[36,42193,31331],{"class":42},[36,42195,31334],{"class":5696},[36,42197,47],{"class":46},[36,42199,42170],{"class":42},[36,42201,812],{"class":53},[36,42203,42086],{"class":42},[36,42205,31343],{"class":5696},[36,42207,47],{"class":46},[36,42209,42170],{"class":42},[36,42211,54],{"class":53},[36,42213,42086],{"class":42},[36,42215,31352],{"class":5696},[36,42217,47],{"class":46},[36,42219,938],{"class":53},[36,42221,57],{"class":42},[36,42223,31361],{"class":5696},[36,42225,47],{"class":46},[36,42227,96],{"class":53},[36,42229,63],{"class":42},[36,42231,42232],{"class":38,"line":2133},[36,42233,42234],{"class":69},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,42236,42237],{"class":38,"line":2154},[36,42238,42239],{"class":69},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,42241,42242,42244,42247,42249,42251,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273],{"class":38,"line":2159},[36,42243,31323],{"class":53},[36,42245,42246],{"class":42},".p4_1",[36,42248,47],{"class":46},[36,42250,35306],{"class":42},[36,42252,31352],{"class":5696},[36,42254,47],{"class":46},[36,42256,127],{"class":53},[36,42258,57],{"class":42},[36,42260,31407],{"class":5696},[36,42262,47],{"class":46},[36,42264,54],{"class":53},[36,42266,57],{"class":42},[36,42268,31361],{"class":5696},[36,42270,47],{"class":46},[36,42272,54],{"class":53},[36,42274,63],{"class":42},[36,42276,42277,42279,42282,42284,42286,42288,42290,42292,42294,42296,42299,42301,42303,42305],{"class":38,"line":2173},[36,42278,31323],{"class":53},[36,42280,42281],{"class":42},".p4_2",[36,42283,47],{"class":46},[36,42285,31331],{"class":42},[36,42287,31334],{"class":5696},[36,42289,47],{"class":46},[36,42291,42037],{"class":42},[36,42293,31343],{"class":5696},[36,42295,47],{"class":46},[36,42297,42298],{"class":42},"c4,",[36,42300,31352],{"class":5696},[36,42302,47],{"class":46},[36,42304,54],{"class":53},[36,42306,63],{"class":42},[36,42308,42309],{"class":38,"line":2178},[36,42310,2880],{"emptyLinePlaceholder":553},[36,42312,42313,42315,42317],{"class":38,"line":2207},[36,42314,31279],{"class":46},[36,42316,31571],{"class":2443},[36,42318,31574],{"class":42},[36,42320,42321,42324,42326,42328,42330,42332],{"class":38,"line":2212},[36,42322,42323],{"class":42},"        p1",[36,42325,47],{"class":46},[36,42327,31301],{"class":53},[36,42329,35661],{"class":42},[36,42331,31301],{"class":53},[36,42333,42334],{"class":42},".p1_1(x))\n",[36,42336,42337,42339,42341,42343,42345,42347,42350,42352,42354,42356],{"class":38,"line":2229},[36,42338,7565],{"class":42},[36,42340,47],{"class":46},[36,42342,31301],{"class":53},[36,42344,35661],{"class":42},[36,42346,31301],{"class":53},[36,42348,42349],{"class":42},".p2_2(",[36,42351,31301],{"class":53},[36,42353,35661],{"class":42},[36,42355,31301],{"class":53},[36,42357,42358],{"class":42},".p2_1(x))))\n",[36,42360,42361,42364,42366,42368,42370,42372,42375,42377,42379,42381],{"class":38,"line":2234},[36,42362,42363],{"class":42},"        p3",[36,42365,47],{"class":46},[36,42367,31301],{"class":53},[36,42369,35661],{"class":42},[36,42371,31301],{"class":53},[36,42373,42374],{"class":42},".p3_2(",[36,42376,31301],{"class":53},[36,42378,35661],{"class":42},[36,42380,31301],{"class":53},[36,42382,42383],{"class":42},".p3_1(x))))\n",[36,42385,42386,42389,42391,42393,42395,42397,42400,42402],{"class":38,"line":2239},[36,42387,42388],{"class":42},"        p4",[36,42390,47],{"class":46},[36,42392,31301],{"class":53},[36,42394,35661],{"class":42},[36,42396,31301],{"class":53},[36,42398,42399],{"class":42},".p4_2(",[36,42401,31301],{"class":53},[36,42403,42404],{"class":42},".p4_1(x)))\n",[36,42406,42407],{"class":38,"line":2244},[36,42408,42409],{"class":69},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,42411,42412,42414,42417,42419,42421,42423],{"class":38,"line":2258},[36,42413,15232],{"class":46},[36,42415,42416],{"class":42}," torch.cat((p1,p2,p3,p4),",[36,42418,33162],{"class":5696},[36,42420,47],{"class":46},[36,42422,54],{"class":53},[36,42424,63],{"class":42},[36,42426,42427],{"class":38,"line":2263},[36,42428,2880],{"emptyLinePlaceholder":553},[36,42430,42431],{"class":38,"line":3057},[36,42432,2880],{"emptyLinePlaceholder":553},[36,42434,42435],{"class":38,"line":3071},[36,42436,42437],{"class":69},"# 搭建GoogLeNet网络\n",[36,42439,42440,42442,42445,42447,42449,42451,42453],{"class":38,"line":3079},[36,42441,15174],{"class":46},[36,42443,42444],{"class":2443}," GoogLeNet",[36,42446,345],{"class":42},[36,42448,31256],{"class":2443},[36,42450,1171],{"class":42},[36,42452,31261],{"class":2443},[36,42454,31264],{"class":42},[36,42456,42457],{"class":38,"line":3084},[36,42458,42459],{"class":69},"    # 必须把Inception导入到里边\n",[36,42461,42462,42464,42466],{"class":38,"line":3090},[36,42463,31279],{"class":46},[36,42465,31282],{"class":53},[36,42467,42468],{"class":42},"(self,Inception):\n",[36,42470,42471,42473,42476,42478,42480,42482],{"class":38,"line":3096},[36,42472,31295],{"class":53},[36,42474,42475],{"class":42},"(GoogLeNet,",[36,42477,31301],{"class":53},[36,42479,31304],{"class":42},[36,42481,31307],{"class":53},[36,42483,2456],{"class":42},[36,42485,42486,42488,42491,42493],{"class":38,"line":3101},[36,42487,31323],{"class":53},[36,42489,42490],{"class":42},".b1",[36,42492,47],{"class":46},[36,42494,38486],{"class":42},[36,42496,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537],{"class":38,"line":8428},[36,42498,38491],{"class":42},[36,42500,31334],{"class":5696},[36,42502,47],{"class":46},[36,42504,54],{"class":53},[36,42506,57],{"class":42},[36,42508,31343],{"class":5696},[36,42510,47],{"class":46},[36,42512,824],{"class":53},[36,42514,57],{"class":42},[36,42516,31352],{"class":5696},[36,42518,47],{"class":46},[36,42520,987],{"class":53},[36,42522,57],{"class":42},[36,42524,31407],{"class":5696},[36,42526,47],{"class":46},[36,42528,96],{"class":53},[36,42530,57],{"class":42},[36,42532,31361],{"class":5696},[36,42534,47],{"class":46},[36,42536,127],{"class":53},[36,42538,38524],{"class":42},[36,42540,42541],{"class":38,"line":8452},[36,42542,38529],{"class":42},[36,42544,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569],{"class":38,"line":8457},[36,42546,38574],{"class":42},[36,42548,31352],{"class":5696},[36,42550,47],{"class":46},[36,42552,127],{"class":53},[36,42554,57],{"class":42},[36,42556,31407],{"class":5696},[36,42558,47],{"class":46},[36,42560,96],{"class":53},[36,42562,57],{"class":42},[36,42564,31361],{"class":5696},[36,42566,47],{"class":46},[36,42568,54],{"class":53},[36,42570,63],{"class":42},[36,42572,42573],{"class":38,"line":8463},[36,42574,38603],{"class":42},[36,42576,42577,42579,42582,42584],{"class":38,"line":8490},[36,42578,31323],{"class":53},[36,42580,42581],{"class":42},".b2",[36,42583,47],{"class":46},[36,42585,38486],{"class":42},[36,42587,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612],{"class":38,"line":8495},[36,42589,38491],{"class":42},[36,42591,31334],{"class":5696},[36,42593,47],{"class":46},[36,42595,824],{"class":53},[36,42597,57],{"class":42},[36,42599,31343],{"class":5696},[36,42601,47],{"class":46},[36,42603,824],{"class":53},[36,42605,57],{"class":42},[36,42607,31352],{"class":5696},[36,42609,47],{"class":46},[36,42611,54],{"class":53},[36,42613,38524],{"class":42},[36,42615,42616],{"class":38,"line":8501},[36,42617,38529],{"class":42},[36,42619,42620,42622,42624,42626,42628,42630,42632,42634,42637,42639,42641,42643,42645,42647,42649,42651,42653],{"class":38,"line":8513},[36,42621,38491],{"class":42},[36,42623,31334],{"class":5696},[36,42625,47],{"class":46},[36,42627,824],{"class":53},[36,42629,57],{"class":42},[36,42631,31343],{"class":5696},[36,42633,47],{"class":46},[36,42635,42636],{"class":53},"192",[36,42638,57],{"class":42},[36,42640,31352],{"class":5696},[36,42642,47],{"class":46},[36,42644,127],{"class":53},[36,42646,57],{"class":42},[36,42648,31361],{"class":5696},[36,42650,47],{"class":46},[36,42652,54],{"class":53},[36,42654,38524],{"class":42},[36,42656,42657],{"class":38,"line":8525},[36,42658,38529],{"class":42},[36,42660,42661,42663,42665,42667,42669,42671,42673,42675,42677,42679,42681,42683,42685],{"class":38,"line":8537},[36,42662,38574],{"class":42},[36,42664,31352],{"class":5696},[36,42666,47],{"class":46},[36,42668,127],{"class":53},[36,42670,57],{"class":42},[36,42672,31407],{"class":5696},[36,42674,47],{"class":46},[36,42676,96],{"class":53},[36,42678,57],{"class":42},[36,42680,31361],{"class":5696},[36,42682,47],{"class":46},[36,42684,54],{"class":53},[36,42686,63],{"class":42},[36,42688,42689],{"class":38,"line":10196},[36,42690,38603],{"class":42},[36,42692,42693,42695,42698,42700],{"class":38,"line":10221},[36,42694,31323],{"class":53},[36,42696,42697],{"class":42},".b3",[36,42699,47],{"class":46},[36,42701,38486],{"class":42},[36,42703,42704,42707,42709,42711,42713,42716,42718,42720,42722,42725,42727,42729,42731,42734,42736],{"class":38,"line":10244},[36,42705,42706],{"class":42},"            Inception(",[36,42708,42636],{"class":53},[36,42710,57],{"class":42},[36,42712,824],{"class":53},[36,42714,42715],{"class":42},",(",[36,42717,830],{"class":53},[36,42719,57],{"class":42},[36,42721,32547],{"class":53},[36,42723,42724],{"class":42},"),(",[36,42726,1214],{"class":53},[36,42728,57],{"class":42},[36,42730,818],{"class":53},[36,42732,42733],{"class":42},"),",[36,42735,818],{"class":53},[36,42737,38524],{"class":42},[36,42739,42740,42742,42744,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768],{"class":38,"line":10268},[36,42741,42706],{"class":42},[36,42743,35347],{"class":53},[36,42745,57],{"class":42},[36,42747,32547],{"class":53},[36,42749,42715],{"class":42},[36,42751,32547],{"class":53},[36,42753,57],{"class":42},[36,42755,42636],{"class":53},[36,42757,42724],{"class":42},[36,42759,818],{"class":53},[36,42761,57],{"class":42},[36,42763,830],{"class":53},[36,42765,42733],{"class":42},[36,42767,824],{"class":53},[36,42769,38524],{"class":42},[36,42771,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796],{"class":38,"line":10273},[36,42773,38574],{"class":42},[36,42775,31352],{"class":5696},[36,42777,47],{"class":46},[36,42779,127],{"class":53},[36,42781,57],{"class":42},[36,42783,31407],{"class":5696},[36,42785,47],{"class":46},[36,42787,96],{"class":53},[36,42789,57],{"class":42},[36,42791,31361],{"class":5696},[36,42793,47],{"class":46},[36,42795,54],{"class":53},[36,42797,63],{"class":42},[36,42799,42800],{"class":38,"line":10278},[36,42801,38603],{"class":42},[36,42803,42804,42806,42809,42811],{"class":38,"line":10283},[36,42805,31323],{"class":53},[36,42807,42808],{"class":42},".b4",[36,42810,47],{"class":46},[36,42812,38486],{"class":42},[36,42814,42815,42817,42820,42822,42824,42826,42828,42830,42833,42835,42837,42839,42841,42843,42845],{"class":38,"line":10292},[36,42816,42706],{"class":42},[36,42818,42819],{"class":53},"480",[36,42821,57],{"class":42},[36,42823,42636],{"class":53},[36,42825,42715],{"class":42},[36,42827,830],{"class":53},[36,42829,57],{"class":42},[36,42831,42832],{"class":53},"208",[36,42834,42724],{"class":42},[36,42836,1214],{"class":53},[36,42838,57],{"class":42},[36,42840,1220],{"class":53},[36,42842,42733],{"class":42},[36,42844,824],{"class":53},[36,42846,38524],{"class":42},[36,42848,42849,42851,42853,42855,42857,42859,42861,42863,42865,42867,42869,42871,42873,42875,42877],{"class":38,"line":10297},[36,42850,42706],{"class":42},[36,42852,38934],{"class":53},[36,42854,57],{"class":42},[36,42856,21528],{"class":53},[36,42858,42715],{"class":42},[36,42860,1231],{"class":53},[36,42862,57],{"class":42},[36,42864,31978],{"class":53},[36,42866,42724],{"class":42},[36,42868,1413],{"class":53},[36,42870,57],{"class":42},[36,42872,824],{"class":53},[36,42874,42733],{"class":42},[36,42876,824],{"class":53},[36,42878,38524],{"class":42},[36,42880,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901,42903,42905,42907,42909],{"class":38,"line":10303},[36,42882,42706],{"class":42},[36,42884,38934],{"class":53},[36,42886,57],{"class":42},[36,42888,32547],{"class":53},[36,42890,42715],{"class":42},[36,42892,32547],{"class":53},[36,42894,57],{"class":42},[36,42896,35347],{"class":53},[36,42898,42724],{"class":42},[36,42900,1413],{"class":53},[36,42902,57],{"class":42},[36,42904,824],{"class":53},[36,42906,42733],{"class":42},[36,42908,824],{"class":53},[36,42910,38524],{"class":42},[36,42912,42913,42915,42917,42919,42921,42923,42925,42927,42930,42932,42934,42936,42938,42940,42942],{"class":38,"line":10324},[36,42914,42706],{"class":42},[36,42916,38934],{"class":53},[36,42918,57],{"class":42},[36,42920,1231],{"class":53},[36,42922,42715],{"class":42},[36,42924,32547],{"class":53},[36,42926,57],{"class":42},[36,42928,42929],{"class":53},"288",[36,42931,42724],{"class":42},[36,42933,818],{"class":53},[36,42935,57],{"class":42},[36,42937,824],{"class":53},[36,42939,42733],{"class":42},[36,42941,824],{"class":53},[36,42943,38524],{"class":42},[36,42945,42946,42948,42951,42953,42955,42957,42959,42961,42964,42966,42968,42970,42972,42974,42976],{"class":38,"line":10330},[36,42947,42706],{"class":42},[36,42949,42950],{"class":53},"528",[36,42952,57],{"class":42},[36,42954,35347],{"class":53},[36,42956,42715],{"class":42},[36,42958,21528],{"class":53},[36,42960,57],{"class":42},[36,42962,42963],{"class":53},"320",[36,42965,42724],{"class":42},[36,42967,818],{"class":53},[36,42969,57],{"class":42},[36,42971,32547],{"class":53},[36,42973,42733],{"class":42},[36,42975,32547],{"class":53},[36,42977,38524],{"class":42},[36,42979,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004],{"class":38,"line":10344},[36,42981,38574],{"class":42},[36,42983,31352],{"class":5696},[36,42985,47],{"class":46},[36,42987,127],{"class":53},[36,42989,57],{"class":42},[36,42991,31407],{"class":5696},[36,42993,47],{"class":46},[36,42995,96],{"class":53},[36,42997,57],{"class":42},[36,42999,31361],{"class":5696},[36,43001,47],{"class":46},[36,43003,54],{"class":53},[36,43005,63],{"class":42},[36,43007,43008],{"class":38,"line":10350},[36,43009,38603],{"class":42},[36,43011,43012,43014,43017,43019],{"class":38,"line":10377},[36,43013,31323],{"class":53},[36,43015,43016],{"class":42},".b5",[36,43018,47],{"class":46},[36,43020,38486],{"class":42},[36,43022,43023,43025,43028,43030,43032,43034,43036,43038,43040,43042,43044,43046,43048,43050,43052],{"class":38,"line":10386},[36,43024,42706],{"class":42},[36,43026,43027],{"class":53},"832",[36,43029,57],{"class":42},[36,43031,35347],{"class":53},[36,43033,42715],{"class":42},[36,43035,21528],{"class":53},[36,43037,57],{"class":42},[36,43039,42963],{"class":53},[36,43041,42724],{"class":42},[36,43043,818],{"class":53},[36,43045,57],{"class":42},[36,43047,32547],{"class":53},[36,43049,42733],{"class":42},[36,43051,32547],{"class":53},[36,43053,38524],{"class":42},[36,43055,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084],{"class":38,"line":10392},[36,43057,42706],{"class":42},[36,43059,43027],{"class":53},[36,43061,57],{"class":42},[36,43063,35417],{"class":53},[36,43065,42715],{"class":42},[36,43067,42636],{"class":53},[36,43069,57],{"class":42},[36,43071,35417],{"class":53},[36,43073,42724],{"class":42},[36,43075,1220],{"class":53},[36,43077,57],{"class":42},[36,43079,32547],{"class":53},[36,43081,42733],{"class":42},[36,43083,32547],{"class":53},[36,43085,38524],{"class":42},[36,43087,43088,43091,43093,43095,43097],{"class":38,"line":10400},[36,43089,43090],{"class":42},"            nn.AdaptiveAvgPool2d((",[36,43092,54],{"class":53},[36,43094,57],{"class":42},[36,43096,54],{"class":53},[36,43098,43099],{"class":42},")),\n",[36,43101,43102],{"class":38,"line":10405},[36,43103,39267],{"class":42},[36,43105,43106,43108,43111,43113,43115],{"class":38,"line":17084},[36,43107,39272],{"class":42},[36,43109,43110],{"class":53},"1024",[36,43112,57],{"class":42},[36,43114,1062],{"class":53},[36,43116,63],{"class":42},[36,43118,43119],{"class":38,"line":17090},[36,43120,38603],{"class":42},[36,43122,43123],{"class":38,"line":17113},[36,43124,43125],{"class":69},"        # 对模型参数初始化\n",[36,43127,43128,43130,43132,43134,43136],{"class":38,"line":17119},[36,43129,3883],{"class":46},[36,43131,39345],{"class":42},[36,43133,26524],{"class":46},[36,43135,39350],{"class":53},[36,43137,39353],{"class":42},[36,43139,43140,43142,43144],{"class":38,"line":17142},[36,43141,5122],{"class":46},[36,43143,39365],{"class":53},[36,43145,39368],{"class":42},[36,43147,43148,43150,43153,43155,43158,43160,43162,43164,43166],{"class":38,"line":17156},[36,43149,39378],{"class":42},[36,43151,43152],{"class":5696},"mode",[36,43154,47],{"class":46},[36,43156,43157],{"class":405},"'fan_out'",[36,43159,57],{"class":42},[36,43161,39381],{"class":5696},[36,43163,47],{"class":46},[36,43165,39386],{"class":405},[36,43167,63],{"class":42},[36,43169,43170],{"class":38,"line":17176},[36,43171,43172],{"class":69},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,43174,43175],{"class":38,"line":17182},[36,43176,43177],{"class":69},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,43179,43180],{"class":38,"line":17193},[36,43181,43182],{"class":69},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,43184,43185],{"class":38,"line":17216},[36,43186,43187],{"class":69},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,43189,43190],{"class":38,"line":17238},[36,43191,43192],{"class":69},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,43194,43195],{"class":38,"line":17243},[36,43196,43197],{"class":69},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,43199,43200,43202,43204,43206,43208,43210],{"class":38,"line":17249},[36,43201,39398],{"class":46},[36,43203,39401],{"class":42},[36,43205,39404],{"class":46},[36,43207,39407],{"class":46},[36,43209,39410],{"class":53},[36,43211,4219],{"class":42},[36,43213,43214,43216,43218],{"class":38,"line":17263},[36,43215,39422],{"class":42},[36,43217,812],{"class":53},[36,43219,63],{"class":42},[36,43221,43222,43225,43227],{"class":38,"line":17276},[36,43223,43224],{"class":46},"                elif",[36,43226,39365],{"class":53},[36,43228,39441],{"class":42},[36,43230,43231,43234,43236,43238,43240],{"class":38,"line":17281},[36,43232,43233],{"class":42},"                    nn.init.normal_(m.weight,",[36,43235,812],{"class":53},[36,43237,57],{"class":42},[36,43239,39463],{"class":53},[36,43241,63],{"class":42},[36,43243,43244,43247,43249,43251,43253,43255],{"class":38,"line":17295},[36,43245,43246],{"class":46},"                    if",[36,43248,39401],{"class":42},[36,43250,39404],{"class":46},[36,43252,39407],{"class":46},[36,43254,39410],{"class":53},[36,43256,4219],{"class":42},[36,43258,43259,43262,43264],{"class":38,"line":17300},[36,43260,43261],{"class":42},"                        nn.init.constant_(m.bias,",[36,43263,812],{"class":53},[36,43265,63],{"class":42},[36,43267,43268],{"class":38,"line":17306},[36,43269,35642],{"class":69},[36,43271,43272,43274,43276],{"class":38,"line":17311},[36,43273,31279],{"class":46},[36,43275,31571],{"class":2443},[36,43277,31574],{"class":42},[36,43279,43280,43282,43284,43286],{"class":38,"line":17325},[36,43281,31579],{"class":42},[36,43283,47],{"class":46},[36,43285,31301],{"class":53},[36,43287,43288],{"class":42},".b1(x)\n",[36,43290,43291,43293,43295,43297],{"class":38,"line":17330},[36,43292,31579],{"class":42},[36,43294,47],{"class":46},[36,43296,31301],{"class":53},[36,43298,43299],{"class":42},".b2(x)\n",[36,43301,43302,43304,43306,43308],{"class":38,"line":17335},[36,43303,31579],{"class":42},[36,43305,47],{"class":46},[36,43307,31301],{"class":53},[36,43309,43310],{"class":42},".b3(x)\n",[36,43312,43313,43315,43317,43319],{"class":38,"line":17349},[36,43314,31579],{"class":42},[36,43316,47],{"class":46},[36,43318,31301],{"class":53},[36,43320,43321],{"class":42},".b4(x)\n",[36,43323,43324,43326,43328,43330],{"class":38,"line":17361},[36,43325,31579],{"class":42},[36,43327,47],{"class":46},[36,43329,31301],{"class":53},[36,43331,43332],{"class":42},".b5(x)\n",[36,43334,43335,43337],{"class":38,"line":17366},[36,43336,15232],{"class":46},[36,43338,31687],{"class":42},[36,43340,43341],{"class":38,"line":17379},[36,43342,2880],{"emptyLinePlaceholder":553},[36,43344,43345],{"class":38,"line":17384},[36,43346,43347],{"class":69},"# 模型展示\n",[36,43349,43350,43352,43354,43356,43358],{"class":38,"line":17389},[36,43351,2011],{"class":46},[36,43353,31698],{"class":53},[36,43355,3429],{"class":46},[36,43357,31703],{"class":405},[36,43359,4219],{"class":42},[36,43361,43362,43364,43366,43368,43370,43372,43374,43376,43378],{"class":38,"line":17394},[36,43363,31715],{"class":42},[36,43365,47],{"class":46},[36,43367,30930],{"class":42},[36,43369,31722],{"class":405},[36,43371,2184],{"class":46},[36,43373,31727],{"class":42},[36,43375,2181],{"class":46},[36,43377,30955],{"class":405},[36,43379,63],{"class":42},[36,43381,43382,43384,43386],{"class":38,"line":17407},[36,43383,31767],{"class":42},[36,43385,47],{"class":46},[36,43387,43388],{"class":42},"GoogLeNet(Inception).to(device)\n",[36,43390,43391,43393,43395,43397,43399,43401,43403,43405],{"class":38,"line":17412},[36,43392,31777],{"class":53},[36,43394,31780],{"class":42},[36,43396,54],{"class":53},[36,43398,57],{"class":42},[36,43400,31978],{"class":53},[36,43402,57],{"class":42},[36,43404,31978],{"class":53},[36,43406,31793],{"class":42},[579,43408,43409],{"start":66},[582,43410,39660],{},[26,43412,43414],{"className":28,"code":43413,"language":30,"meta":31,"style":31},"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",[33,43415,43416,43422,43428,43438,43444,43454,43464,43474,43484,43494,43498,43509,43519,43523,43527,43531,43539,43551,43561,43577,43587,43619,43633,43643,43653,43657,43667,43681,43691,43701,43711,43717,43721,43725,43729,43733,43737,43745,43765,43769,43773,43777,43781,43785,43801,43805,43809,43817,43821,43825,43833,43837,43841,43845,43853,43857,43861,43865,43869,43877,43881,43889,43893,43901,43905,43913,43917,43925,43929,43933,43941,43945,43949,43953,43965,43989,44003,44007,44011,44015,44023,44027,44035,44039,44047,44051,44059,44063,44071,44075,44083,44087,44099,44103,44111,44115,44123,44127,44131,44135,44139,44147,44151,44167,44171,44179,44183,44187,44191,44195,44199,44203,44207,44223,44227,44239,44243,44255,44259,44271,44275,44283,44287,44295,44299,44303,44307,44313,44317,44325,44329,44345,44349,44357,44361,44377,44389,44393,44405,44409,44413,44421,44425,44429,44437,44441,44449,44453,44461,44465,44469,44511,44553,44557,44561,44577,44581,44597,44601,44605,44613,44617,44621,44633,44671,44675,44679,44687,44691,44705,44715,44721,44727,44733,44739,44743,44747,44753,44757,44761,44769,44773,44791,44795,44799,44803,44819,44823,44827,44831,44835,44839,44859,44879,44883,44887,44891,44899,44907,44911,44927,44947,44967,44971,44975,44983,44991,44995,44999,45003,45015,45019,45029,45037,45054],{"__ignoreMap":31},[36,43417,43418,43420],{"class":38,"line":39},[36,43419,30871],{"class":46},[36,43421,32299],{"class":42},[36,43423,43424,43426],{"class":38,"line":66},[36,43425,30871],{"class":46},[36,43427,32306],{"class":42},[36,43429,43430,43432,43434,43436],{"class":38,"line":73},[36,43431,30871],{"class":46},[36,43433,32317],{"class":42},[36,43435,31861],{"class":46},[36,43437,32322],{"class":42},[36,43439,43440,43442],{"class":38,"line":79},[36,43441,30871],{"class":46},[36,43443,30874],{"class":42},[36,43445,43446,43448,43450,43452],{"class":38,"line":85},[36,43447,31215],{"class":46},[36,43449,31893],{"class":42},[36,43451,30871],{"class":46},[36,43453,32339],{"class":42},[36,43455,43456,43458,43460,43462],{"class":38,"line":419},[36,43457,31215],{"class":46},[36,43459,31846],{"class":42},[36,43461,30871],{"class":46},[36,43463,31851],{"class":42},[36,43465,43466,43468,43470,43472],{"class":38,"line":425},[36,43467,31215],{"class":46},[36,43469,31876],{"class":42},[36,43471,30871],{"class":46},[36,43473,31881],{"class":42},[36,43475,43476,43478,43480,43482],{"class":38,"line":431},[36,43477,30871],{"class":46},[36,43479,31893],{"class":42},[36,43481,31861],{"class":46},[36,43483,31898],{"class":42},[36,43485,43486,43488,43490,43492],{"class":38,"line":437},[36,43487,30871],{"class":46},[36,43489,31910],{"class":42},[36,43491,31861],{"class":46},[36,43493,31915],{"class":42},[36,43495,43496],{"class":38,"line":443},[36,43497,32384],{"class":69},[36,43499,43500,43502,43504,43506],{"class":38,"line":2092},[36,43501,31215],{"class":46},[36,43503,32391],{"class":42},[36,43505,30871],{"class":46},[36,43507,43508],{"class":42}," GoogLeNet, Inception\n",[36,43510,43511,43513,43515,43517],{"class":38,"line":2097},[36,43512,31215],{"class":46},[36,43514,31218],{"class":42},[36,43516,30871],{"class":46},[36,43518,31223],{"class":42},[36,43520,43521],{"class":38,"line":2103},[36,43522,2880],{"emptyLinePlaceholder":553},[36,43524,43525],{"class":38,"line":2108},[36,43526,2880],{"emptyLinePlaceholder":553},[36,43528,43529],{"class":38,"line":2122},[36,43530,32419],{"class":69},[36,43532,43533,43535,43537],{"class":38,"line":2127},[36,43534,32424],{"class":46},[36,43536,32427],{"class":2443},[36,43538,32430],{"class":42},[36,43540,43541,43543,43545,43547,43549],{"class":38,"line":2133},[36,43542,32435],{"class":42},[36,43544,47],{"class":46},[36,43546,31933],{"class":42},[36,43548,31941],{"class":405},[36,43550,31944],{"class":42},[36,43552,43553,43555,43557,43559],{"class":38,"line":2154},[36,43554,32448],{"class":5696},[36,43556,47],{"class":46},[36,43558,31954],{"class":53},[36,43560,31944],{"class":42},[36,43562,43563,43565,43567,43569,43571,43573,43575],{"class":38,"line":2159},[36,43564,32459],{"class":5696},[36,43566,47],{"class":46},[36,43568,31971],{"class":42},[36,43570,531],{"class":5696},[36,43572,47],{"class":46},[36,43574,35926],{"class":53},[36,43576,31981],{"class":42},[36,43578,43579,43581,43583,43585],{"class":38,"line":2173},[36,43580,32476],{"class":5696},[36,43582,47],{"class":46},[36,43584,31954],{"class":53},[36,43586,63],{"class":42},[36,43588,43589,43591,43593,43595,43597,43599,43601,43603,43605,43607,43609,43611,43613,43615,43617],{"class":38,"line":2178},[36,43590,32487],{"class":42},[36,43592,47],{"class":46},[36,43594,32492],{"class":42},[36,43596,32495],{"class":53},[36,43598,345],{"class":42},[36,43600,32500],{"class":53},[36,43602,1071],{"class":46},[36,43604,7838],{"class":53},[36,43606,32507],{"class":42},[36,43608,32495],{"class":53},[36,43610,345],{"class":42},[36,43612,32514],{"class":53},[36,43614,1071],{"class":46},[36,43616,7838],{"class":53},[36,43618,32521],{"class":42},[36,43620,43621,43623,43625,43627,43629,43631],{"class":38,"line":2207},[36,43622,32526],{"class":42},[36,43624,47],{"class":46},[36,43626,32531],{"class":42},[36,43628,32014],{"class":5696},[36,43630,47],{"class":46},[36,43632,32019],{"class":42},[36,43634,43635,43637,43639,43641],{"class":38,"line":2212},[36,43636,32542],{"class":5696},[36,43638,47],{"class":46},[36,43640,818],{"class":53},[36,43642,31944],{"class":42},[36,43644,43645,43647,43649,43651],{"class":38,"line":2229},[36,43646,32554],{"class":5696},[36,43648,47],{"class":46},[36,43650,31954],{"class":53},[36,43652,31944],{"class":42},[36,43654,43655],{"class":38,"line":2234},[36,43656,32565],{"class":69},[36,43658,43659,43661,43663,43665],{"class":38,"line":2239},[36,43660,32570],{"class":5696},[36,43662,47],{"class":46},[36,43664,1012],{"class":53},[36,43666,63],{"class":42},[36,43668,43669,43671,43673,43675,43677,43679],{"class":38,"line":2244},[36,43670,32581],{"class":42},[36,43672,47],{"class":46},[36,43674,32011],{"class":42},[36,43676,32014],{"class":5696},[36,43678,47],{"class":46},[36,43680,32592],{"class":42},[36,43682,43683,43685,43687,43689],{"class":38,"line":2258},[36,43684,32597],{"class":5696},[36,43686,47],{"class":46},[36,43688,818],{"class":53},[36,43690,31944],{"class":42},[36,43692,43693,43695,43697,43699],{"class":38,"line":2263},[36,43694,32608],{"class":5696},[36,43696,47],{"class":46},[36,43698,31954],{"class":53},[36,43700,31944],{"class":42},[36,43702,43703,43705,43707,43709],{"class":38,"line":3057},[36,43704,32619],{"class":5696},[36,43706,47],{"class":46},[36,43708,1012],{"class":53},[36,43710,63],{"class":42},[36,43712,43713,43715],{"class":38,"line":3071},[36,43714,4570],{"class":46},[36,43716,32632],{"class":42},[36,43718,43719],{"class":38,"line":3079},[36,43720,2880],{"emptyLinePlaceholder":553},[36,43722,43723],{"class":38,"line":3084},[36,43724,32641],{"class":69},[36,43726,43727],{"class":38,"line":3090},[36,43728,32646],{"class":69},[36,43730,43731],{"class":38,"line":3096},[36,43732,2880],{"emptyLinePlaceholder":553},[36,43734,43735],{"class":38,"line":3101},[36,43736,32655],{"class":69},[36,43738,43739,43741,43743],{"class":38,"line":8428},[36,43740,32424],{"class":46},[36,43742,32662],{"class":2443},[36,43744,32665],{"class":42},[36,43746,43747,43749,43751,43753,43755,43757,43759,43761,43763],{"class":38,"line":8452},[36,43748,31715],{"class":42},[36,43750,47],{"class":46},[36,43752,30930],{"class":42},[36,43754,31722],{"class":405},[36,43756,2184],{"class":46},[36,43758,31727],{"class":42},[36,43760,2181],{"class":46},[36,43762,32684],{"class":405},[36,43764,63],{"class":42},[36,43766,43767],{"class":38,"line":8457},[36,43768,2880],{"emptyLinePlaceholder":553},[36,43770,43771],{"class":38,"line":8463},[36,43772,2880],{"emptyLinePlaceholder":553},[36,43774,43775],{"class":38,"line":8490},[36,43776,32699],{"class":69},[36,43778,43779],{"class":38,"line":8495},[36,43780,32704],{"class":69},[36,43782,43783],{"class":38,"line":8501},[36,43784,32709],{"class":69},[36,43786,43787,43789,43791,43793,43795,43797,43799],{"class":38,"line":8513},[36,43788,32714],{"class":42},[36,43790,47],{"class":46},[36,43792,32719],{"class":42},[36,43794,32722],{"class":5696},[36,43796,47],{"class":46},[36,43798,32727],{"class":53},[36,43800,63],{"class":42},[36,43802,43803],{"class":38,"line":8525},[36,43804,2880],{"emptyLinePlaceholder":553},[36,43806,43807],{"class":38,"line":8537},[36,43808,32738],{"class":69},[36,43810,43811,43813,43815],{"class":38,"line":10196},[36,43812,32743],{"class":42},[36,43814,47],{"class":46},[36,43816,32748],{"class":42},[36,43818,43819],{"class":38,"line":10221},[36,43820,2880],{"emptyLinePlaceholder":553},[36,43822,43823],{"class":38,"line":10244},[36,43824,32757],{"class":69},[36,43826,43827,43829,43831],{"class":38,"line":10268},[36,43828,31767],{"class":42},[36,43830,47],{"class":46},[36,43832,32766],{"class":42},[36,43834,43835],{"class":38,"line":10273},[36,43836,32771],{"class":69},[36,43838,43839],{"class":38,"line":10278},[36,43840,32776],{"class":69},[36,43842,43843],{"class":38,"line":10283},[36,43844,32781],{"class":69},[36,43846,43847,43849,43851],{"class":38,"line":10292},[36,43848,32786],{"class":42},[36,43850,47],{"class":46},[36,43852,32791],{"class":42},[36,43854,43855],{"class":38,"line":10297},[36,43856,2880],{"emptyLinePlaceholder":553},[36,43858,43859],{"class":38,"line":10303},[36,43860,2880],{"emptyLinePlaceholder":553},[36,43862,43863],{"class":38,"line":10324},[36,43864,32804],{"class":69},[36,43866,43867],{"class":38,"line":10330},[36,43868,32809],{"class":69},[36,43870,43871,43873,43875],{"class":38,"line":10344},[36,43872,32814],{"class":42},[36,43874,47],{"class":46},[36,43876,32819],{"class":53},[36,43878,43879],{"class":38,"line":10350},[36,43880,32824],{"class":69},[36,43882,43883,43885,43887],{"class":38,"line":10377},[36,43884,32829],{"class":42},[36,43886,47],{"class":46},[36,43888,32834],{"class":42},[36,43890,43891],{"class":38,"line":10386},[36,43892,32839],{"class":69},[36,43894,43895,43897,43899],{"class":38,"line":10392},[36,43896,32844],{"class":42},[36,43898,47],{"class":46},[36,43900,32834],{"class":42},[36,43902,43903],{"class":38,"line":10400},[36,43904,32853],{"class":69},[36,43906,43907,43909,43911],{"class":38,"line":10405},[36,43908,32858],{"class":42},[36,43910,47],{"class":46},[36,43912,32834],{"class":42},[36,43914,43915],{"class":38,"line":17084},[36,43916,32867],{"class":69},[36,43918,43919,43921,43923],{"class":38,"line":17090},[36,43920,32872],{"class":42},[36,43922,47],{"class":46},[36,43924,32834],{"class":42},[36,43926,43927],{"class":38,"line":17113},[36,43928,2880],{"emptyLinePlaceholder":553},[36,43930,43931],{"class":38,"line":17119},[36,43932,32885],{"class":69},[36,43934,43935,43937,43939],{"class":38,"line":17142},[36,43936,32890],{"class":42},[36,43938,47],{"class":46},[36,43940,32895],{"class":42},[36,43942,43943],{"class":38,"line":17156},[36,43944,2880],{"emptyLinePlaceholder":553},[36,43946,43947],{"class":38,"line":17176},[36,43948,2880],{"emptyLinePlaceholder":553},[36,43950,43951],{"class":38,"line":17182},[36,43952,32908],{"class":69},[36,43954,43955,43957,43959,43961,43963],{"class":38,"line":17193},[36,43956,3681],{"class":46},[36,43958,32915],{"class":42},[36,43960,26524],{"class":46},[36,43962,32920],{"class":53},[36,43964,32923],{"class":42},[36,43966,43967,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987],{"class":38,"line":17216},[36,43968,32928],{"class":53},[36,43970,345],{"class":42},[36,43972,32933],{"class":405},[36,43974,32936],{"class":53},[36,43976,1197],{"class":405},[36,43978,32936],{"class":53},[36,43980,870],{"class":405},[36,43982,32945],{"class":42},[36,43984,173],{"class":46},[36,43986,54],{"class":53},[36,43988,370],{"class":42},[36,43990,43991,43993,43995,43997,43999,44001],{"class":38,"line":17238},[36,43992,32928],{"class":53},[36,43994,345],{"class":42},[36,43996,32960],{"class":405},[36,43998,1071],{"class":46},[36,44000,1062],{"class":53},[36,44002,63],{"class":42},[36,44004,44005],{"class":38,"line":17243},[36,44006,2880],{"emptyLinePlaceholder":553},[36,44008,44009],{"class":38,"line":17249},[36,44010,32975],{"class":69},[36,44012,44013],{"class":38,"line":17263},[36,44014,32980],{"class":69},[36,44016,44017,44019,44021],{"class":38,"line":17276},[36,44018,32985],{"class":42},[36,44020,47],{"class":46},[36,44022,32819],{"class":53},[36,44024,44025],{"class":38,"line":17281},[36,44026,32994],{"class":69},[36,44028,44029,44031,44033],{"class":38,"line":17295},[36,44030,32999],{"class":42},[36,44032,47],{"class":46},[36,44034,3565],{"class":53},[36,44036,44037],{"class":38,"line":17300},[36,44038,33008],{"class":69},[36,44040,44041,44043,44045],{"class":38,"line":17306},[36,44042,33013],{"class":42},[36,44044,47],{"class":46},[36,44046,32819],{"class":53},[36,44048,44049],{"class":38,"line":17311},[36,44050,33022],{"class":69},[36,44052,44053,44055,44057],{"class":38,"line":17325},[36,44054,33027],{"class":42},[36,44056,47],{"class":46},[36,44058,3565],{"class":53},[36,44060,44061],{"class":38,"line":17330},[36,44062,33036],{"class":69},[36,44064,44065,44067,44069],{"class":38,"line":17335},[36,44066,33041],{"class":42},[36,44068,47],{"class":46},[36,44070,3565],{"class":53},[36,44072,44073],{"class":38,"line":17349},[36,44074,33050],{"class":69},[36,44076,44077,44079,44081],{"class":38,"line":17361},[36,44078,33055],{"class":42},[36,44080,47],{"class":46},[36,44082,3565],{"class":53},[36,44084,44085],{"class":38,"line":17366},[36,44086,33064],{"class":69},[36,44088,44089,44091,44093,44095,44097],{"class":38,"line":17379},[36,44090,3883],{"class":46},[36,44092,32078],{"class":42},[36,44094,26524],{"class":46},[36,44096,32083],{"class":53},[36,44098,33077],{"class":42},[36,44100,44101],{"class":38,"line":17384},[36,44102,33082],{"class":69},[36,44104,44105,44107,44109],{"class":38,"line":17389},[36,44106,33087],{"class":42},[36,44108,47],{"class":46},[36,44110,33092],{"class":42},[36,44112,44113],{"class":38,"line":17394},[36,44114,33097],{"class":69},[36,44116,44117,44119,44121],{"class":38,"line":17407},[36,44118,33102],{"class":42},[36,44120,47],{"class":46},[36,44122,33107],{"class":42},[36,44124,44125],{"class":38,"line":17412},[36,44126,33113],{"class":69},[36,44128,44129],{"class":38,"line":33110},[36,44130,33119],{"class":42},[36,44132,44133],{"class":38,"line":33116},[36,44134,33125],{"class":69},[36,44136,44137],{"class":38,"line":33122},[36,44138,33131],{"class":69},[36,44140,44141,44143,44145],{"class":38,"line":33128},[36,44142,33137],{"class":42},[36,44144,47],{"class":46},[36,44146,33142],{"class":42},[36,44148,44149],{"class":38,"line":33134},[36,44150,33148],{"class":69},[36,44152,44153,44155,44157,44159,44161,44163,44165],{"class":38,"line":33145},[36,44154,33154],{"class":42},[36,44156,47],{"class":46},[36,44158,33159],{"class":42},[36,44160,33162],{"class":5696},[36,44162,47],{"class":46},[36,44164,54],{"class":53},[36,44166,63],{"class":42},[36,44168,44169],{"class":38,"line":33151},[36,44170,33174],{"class":69},[36,44172,44173,44175,44177],{"class":38,"line":33171},[36,44174,33180],{"class":42},[36,44176,47],{"class":46},[36,44178,33185],{"class":42},[36,44180,44181],{"class":38,"line":33177},[36,44182,33191],{"class":69},[36,44184,44185],{"class":38,"line":33188},[36,44186,33197],{"class":42},[36,44188,44189],{"class":38,"line":33194},[36,44190,33203],{"class":69},[36,44192,44193],{"class":38,"line":33200},[36,44194,33209],{"class":42},[36,44196,44197],{"class":38,"line":33206},[36,44198,33215],{"class":69},[36,44200,44201],{"class":38,"line":33212},[36,44202,33221],{"class":42},[36,44204,44205],{"class":38,"line":33218},[36,44206,33227],{"class":69},[36,44208,44209,44211,44213,44215,44217,44219,44221],{"class":38,"line":33224},[36,44210,33233],{"class":42},[36,44212,9957],{"class":46},[36,44214,33238],{"class":42},[36,44216,1071],{"class":46},[36,44218,33243],{"class":42},[36,44220,812],{"class":53},[36,44222,63],{"class":42},[36,44224,44225],{"class":38,"line":33230},[36,44226,33253],{"class":69},[36,44228,44229,44231,44233,44235,44237],{"class":38,"line":33250},[36,44230,33259],{"class":42},[36,44232,9957],{"class":46},[36,44234,33264],{"class":42},[36,44236,3429],{"class":46},[36,44238,33269],{"class":42},[36,44240,44241],{"class":38,"line":33256},[36,44242,33275],{"class":69},[36,44244,44245,44247,44249,44251,44253],{"class":38,"line":33272},[36,44246,33281],{"class":42},[36,44248,9957],{"class":46},[36,44250,33243],{"class":42},[36,44252,812],{"class":53},[36,44254,63],{"class":42},[36,44256,44257],{"class":38,"line":33278},[36,44258,33295],{"class":69},[36,44260,44261,44263,44265,44267,44269],{"class":38,"line":33292},[36,44262,3883],{"class":46},[36,44264,33303],{"class":42},[36,44266,26524],{"class":46},[36,44268,32083],{"class":53},[36,44270,33310],{"class":42},[36,44272,44273],{"class":38,"line":33298},[36,44274,33316],{"class":69},[36,44276,44277,44279,44281],{"class":38,"line":33313},[36,44278,33087],{"class":42},[36,44280,47],{"class":46},[36,44282,33092],{"class":42},[36,44284,44285],{"class":38,"line":33319},[36,44286,33331],{"class":69},[36,44288,44289,44291,44293],{"class":38,"line":33328},[36,44290,33102],{"class":42},[36,44292,47],{"class":46},[36,44294,33107],{"class":42},[36,44296,44297],{"class":38,"line":33334},[36,44298,33346],{"class":69},[36,44300,44301],{"class":38,"line":33343},[36,44302,33352],{"class":42},[36,44304,44305],{"class":38,"line":33349},[36,44306,36833],{"class":69},[36,44308,44309,44311],{"class":38,"line":33355},[36,44310,33358],{"class":46},[36,44312,33361],{"class":42},[36,44314,44315],{"class":38,"line":33364},[36,44316,33367],{"class":69},[36,44318,44319,44321,44323],{"class":38,"line":33370},[36,44320,36848],{"class":42},[36,44322,47],{"class":46},[36,44324,33142],{"class":42},[36,44326,44327],{"class":38,"line":33381},[36,44328,33384],{"class":69},[36,44330,44331,44333,44335,44337,44339,44341,44343],{"class":38,"line":33387},[36,44332,36861],{"class":42},[36,44334,47],{"class":46},[36,44336,33159],{"class":42},[36,44338,33162],{"class":5696},[36,44340,47],{"class":46},[36,44342,54],{"class":53},[36,44344,63],{"class":42},[36,44346,44347],{"class":38,"line":33406},[36,44348,33409],{"class":69},[36,44350,44351,44353,44355],{"class":38,"line":33412},[36,44352,36882],{"class":42},[36,44354,47],{"class":46},[36,44356,33185],{"class":42},[36,44358,44359],{"class":38,"line":33423},[36,44360,33426],{"class":69},[36,44362,44363,44365,44367,44369,44371,44373,44375],{"class":38,"line":33429},[36,44364,36895],{"class":42},[36,44366,9957],{"class":46},[36,44368,36900],{"class":42},[36,44370,1071],{"class":46},[36,44372,33243],{"class":42},[36,44374,812],{"class":53},[36,44376,63],{"class":42},[36,44378,44379,44381,44383,44385,44387],{"class":38,"line":33449},[36,44380,36913],{"class":42},[36,44382,9957],{"class":46},[36,44384,33264],{"class":42},[36,44386,3429],{"class":46},[36,44388,33269],{"class":42},[36,44390,44391],{"class":38,"line":33465},[36,44392,36926],{"class":69},[36,44394,44395,44397,44399,44401,44403],{"class":38,"line":33471},[36,44396,36931],{"class":42},[36,44398,9957],{"class":46},[36,44400,33243],{"class":42},[36,44402,812],{"class":53},[36,44404,63],{"class":42},[36,44406,44407],{"class":38,"line":33485},[36,44408,33488],{"class":69},[36,44410,44411],{"class":38,"line":33491},[36,44412,33494],{"class":69},[36,44414,44415,44417,44419],{"class":38,"line":33497},[36,44416,33500],{"class":42},[36,44418,1197],{"class":46},[36,44420,33505],{"class":42},[36,44422,44423],{"class":38,"line":33508},[36,44424,33511],{"class":69},[36,44426,44427],{"class":38,"line":33514},[36,44428,33517],{"class":69},[36,44430,44431,44433,44435],{"class":38,"line":33520},[36,44432,33523],{"class":42},[36,44434,1197],{"class":46},[36,44436,33505],{"class":42},[36,44438,44439],{"class":38,"line":33530},[36,44440,33533],{"class":69},[36,44442,44443,44445,44447],{"class":38,"line":33536},[36,44444,33539],{"class":42},[36,44446,1197],{"class":46},[36,44448,33544],{"class":42},[36,44450,44451],{"class":38,"line":33547},[36,44452,33550],{"class":69},[36,44454,44455,44457,44459],{"class":38,"line":33553},[36,44456,33556],{"class":42},[36,44458,1197],{"class":46},[36,44460,33544],{"class":42},[36,44462,44463],{"class":38,"line":33563},[36,44464,2880],{"emptyLinePlaceholder":553},[36,44466,44467],{"class":38,"line":33568},[36,44468,33571],{"class":69},[36,44470,44471,44473,44475,44477,44479,44481,44483,44485,44487,44489,44491,44493,44495,44497,44499,44501,44503,44505,44507,44509],{"class":38,"line":33574},[36,44472,32928],{"class":53},[36,44474,345],{"class":42},[36,44476,4072],{"class":405},[36,44478,32936],{"class":53},[36,44480,33585],{"class":405},[36,44482,1509],{"class":53},[36,44484,33590],{"class":46},[36,44486,1559],{"class":53},[36,44488,33595],{"class":405},[36,44490,1509],{"class":53},[36,44492,33590],{"class":46},[36,44494,1559],{"class":53},[36,44496,4072],{"class":405},[36,44498,33606],{"class":42},[36,44500,173],{"class":46},[36,44502,54],{"class":53},[36,44504,33613],{"class":42},[36,44506,173],{"class":46},[36,44508,54],{"class":53},[36,44510,33620],{"class":42},[36,44512,44513,44515,44517,44519,44521,44523,44525,44527,44529,44531,44533,44535,44537,44539,44541,44543,44545,44547,44549,44551],{"class":38,"line":33623},[36,44514,32928],{"class":53},[36,44516,345],{"class":42},[36,44518,4072],{"class":405},[36,44520,32936],{"class":53},[36,44522,33634],{"class":405},[36,44524,1509],{"class":53},[36,44526,33590],{"class":46},[36,44528,1559],{"class":53},[36,44530,33643],{"class":405},[36,44532,1509],{"class":53},[36,44534,33590],{"class":46},[36,44536,1559],{"class":53},[36,44538,4072],{"class":405},[36,44540,33654],{"class":42},[36,44542,173],{"class":46},[36,44544,54],{"class":53},[36,44546,33661],{"class":42},[36,44548,173],{"class":46},[36,44550,54],{"class":53},[36,44552,33620],{"class":42},[36,44554,44555],{"class":38,"line":33670},[36,44556,2880],{"emptyLinePlaceholder":553},[36,44558,44559],{"class":38,"line":33675},[36,44560,33678],{"class":69},[36,44562,44563,44565,44567,44569,44571,44573,44575],{"class":38,"line":33681},[36,44564,2977],{"class":46},[36,44566,33686],{"class":42},[36,44568,173],{"class":46},[36,44570,54],{"class":53},[36,44572,1553],{"class":42},[36,44574,1573],{"class":46},[36,44576,33697],{"class":42},[36,44578,44579],{"class":38,"line":33700},[36,44580,33703],{"class":69},[36,44582,44583,44585,44587,44589,44591,44593,44595],{"class":38,"line":33706},[36,44584,33709],{"class":42},[36,44586,666],{"class":53},[36,44588,47],{"class":46},[36,44590,33716],{"class":42},[36,44592,173],{"class":46},[36,44594,54],{"class":53},[36,44596,33723],{"class":42},[36,44598,44599],{"class":38,"line":33726},[36,44600,33729],{"class":69},[36,44602,44603],{"class":38,"line":33732},[36,44604,33735],{"class":69},[36,44606,44607,44609,44611],{"class":38,"line":33738},[36,44608,33741],{"class":42},[36,44610,47],{"class":46},[36,44612,32791],{"class":42},[36,44614,44615],{"class":38,"line":33748},[36,44616,2880],{"emptyLinePlaceholder":553},[36,44618,44619],{"class":38,"line":33753},[36,44620,33756],{"class":69},[36,44622,44623,44625,44627,44629,44631],{"class":38,"line":33759},[36,44624,33762],{"class":42},[36,44626,47],{"class":46},[36,44628,33767],{"class":42},[36,44630,173],{"class":46},[36,44632,33772],{"class":42},[36,44634,44635,44637,44639,44641,44643,44645,44647,44649,44651,44653,44655,44657,44659,44661,44663,44665,44667,44669],{"class":38,"line":33775},[36,44636,32928],{"class":53},[36,44638,345],{"class":42},[36,44640,33782],{"class":405},[36,44642,1509],{"class":53},[36,44644,33787],{"class":46},[36,44646,1559],{"class":53},[36,44648,1157],{"class":405},[36,44650,1509],{"class":53},[36,44652,33787],{"class":46},[36,44654,1559],{"class":53},[36,44656,33800],{"class":405},[36,44658,33803],{"class":42},[36,44660,33806],{"class":46},[36,44662,1520],{"class":53},[36,44664,33811],{"class":42},[36,44666,947],{"class":46},[36,44668,1520],{"class":53},[36,44670,370],{"class":42},[36,44672,44673],{"class":38,"line":33820},[36,44674,37210],{"class":69},[36,44676,44677],{"class":38,"line":33826},[36,44678,37215],{"class":69},[36,44680,44681,44683,44685],{"class":38,"line":33832},[36,44682,37220],{"class":42},[36,44684,33844],{"class":405},[36,44686,63],{"class":42},[36,44688,44689],{"class":38,"line":33838},[36,44690,33864],{"class":69},[36,44692,44693,44695,44697,44699,44701,44703],{"class":38,"line":33849},[36,44694,33870],{"class":42},[36,44696,47],{"class":46},[36,44698,33875],{"class":42},[36,44700,33878],{"class":5696},[36,44702,47],{"class":46},[36,44704,2026],{"class":42},[36,44706,44707,44709,44711,44713],{"class":38,"line":33855},[36,44708,33888],{"class":405},[36,44710,1472],{"class":42},[36,44712,33893],{"class":53},[36,44714,33896],{"class":42},[36,44716,44717,44719],{"class":38,"line":33861},[36,44718,33902],{"class":405},[36,44720,33905],{"class":42},[36,44722,44723,44725],{"class":38,"line":33867},[36,44724,33911],{"class":405},[36,44726,33914],{"class":42},[36,44728,44729,44731],{"class":38,"line":33885},[36,44730,33920],{"class":405},[36,44732,33923],{"class":42},[36,44734,44735,44737],{"class":38,"line":33899},[36,44736,33929],{"class":405},[36,44738,33932],{"class":42},[36,44740,44741],{"class":38,"line":33908},[36,44742,33938],{"class":42},[36,44744,44745],{"class":38,"line":33917},[36,44746,33944],{"class":69},[36,44748,44749,44751],{"class":38,"line":33926},[36,44750,4570],{"class":46},[36,44752,33952],{"class":42},[36,44754,44755],{"class":38,"line":33935},[36,44756,2880],{"emptyLinePlaceholder":553},[36,44758,44759],{"class":38,"line":33941},[36,44760,33963],{"class":69},[36,44762,44763,44765,44767],{"class":38,"line":33947},[36,44764,32424],{"class":46},[36,44766,33971],{"class":2443},[36,44768,33974],{"class":42},[36,44770,44771],{"class":38,"line":33955},[36,44772,33980],{"class":69},[36,44774,44775,44777,44779,44781,44783,44785,44787,44789],{"class":38,"line":33960},[36,44776,33986],{"class":42},[36,44778,32170],{"class":5696},[36,44780,47],{"class":46},[36,44782,345],{"class":42},[36,44784,154],{"class":53},[36,44786,57],{"class":42},[36,44788,912],{"class":53},[36,44790,370],{"class":42},[36,44792,44793],{"class":38,"line":33966},[36,44794,34006],{"class":69},[36,44796,44797],{"class":38,"line":33977},[36,44798,34012],{"class":69},[36,44800,44801],{"class":38,"line":33983},[36,44802,34018],{"class":69},[36,44804,44805,44807,44809,44811,44813,44815,44817],{"class":38,"line":34003},[36,44806,32204],{"class":42},[36,44808,54],{"class":53},[36,44810,57],{"class":42},[36,44812,96],{"class":53},[36,44814,57],{"class":42},[36,44816,54],{"class":53},[36,44818,63],{"class":42},[36,44820,44821],{"class":38,"line":34009},[36,44822,34041],{"class":69},[36,44824,44825],{"class":38,"line":34015},[36,44826,34047],{"class":69},[36,44828,44829],{"class":38,"line":34021},[36,44830,34053],{"class":69},[36,44832,44833],{"class":38,"line":34038},[36,44834,34059],{"class":69},[36,44836,44837],{"class":38,"line":34044},[36,44838,34065],{"class":69},[36,44840,44841,44843,44845,44847,44849,44851,44853,44855,44857],{"class":38,"line":34050},[36,44842,34071],{"class":42},[36,44844,34074],{"class":405},[36,44846,34077],{"class":42},[36,44848,34080],{"class":405},[36,44850,57],{"class":42},[36,44852,34085],{"class":5696},[36,44854,47],{"class":46},[36,44856,34090],{"class":405},[36,44858,63],{"class":42},[36,44860,44861,44863,44865,44867,44869,44871,44873,44875,44877],{"class":38,"line":34056},[36,44862,34071],{"class":42},[36,44864,34074],{"class":405},[36,44866,34102],{"class":42},[36,44868,34105],{"class":405},[36,44870,57],{"class":42},[36,44872,34085],{"class":5696},[36,44874,47],{"class":46},[36,44876,34114],{"class":405},[36,44878,63],{"class":42},[36,44880,44881],{"class":38,"line":34062},[36,44882,34122],{"class":69},[36,44884,44885],{"class":38,"line":34068},[36,44886,34128],{"class":42},[36,44888,44889],{"class":38,"line":34095},[36,44890,34134],{"class":69},[36,44892,44893,44895,44897],{"class":38,"line":34119},[36,44894,34140],{"class":42},[36,44896,34143],{"class":405},[36,44898,63],{"class":42},[36,44900,44901,44903,44905],{"class":38,"line":34125},[36,44902,34151],{"class":42},[36,44904,34154],{"class":405},[36,44906,63],{"class":42},[36,44908,44909],{"class":38,"line":34131},[36,44910,34162],{"class":69},[36,44912,44913,44915,44917,44919,44921,44923,44925],{"class":38,"line":34137},[36,44914,32204],{"class":42},[36,44916,54],{"class":53},[36,44918,57],{"class":42},[36,44920,96],{"class":53},[36,44922,57],{"class":42},[36,44924,96],{"class":53},[36,44926,63],{"class":42},[36,44928,44929,44931,44933,44935,44937,44939,44941,44943,44945],{"class":38,"line":34148},[36,44930,34071],{"class":42},[36,44932,34074],{"class":405},[36,44934,34189],{"class":42},[36,44936,34080],{"class":405},[36,44938,57],{"class":42},[36,44940,34085],{"class":5696},[36,44942,47],{"class":46},[36,44944,34200],{"class":405},[36,44946,63],{"class":42},[36,44948,44949,44951,44953,44955,44957,44959,44961,44963,44965],{"class":38,"line":34159},[36,44950,34071],{"class":42},[36,44952,34074],{"class":405},[36,44954,34212],{"class":42},[36,44956,34105],{"class":405},[36,44958,57],{"class":42},[36,44960,34085],{"class":5696},[36,44962,47],{"class":46},[36,44964,34223],{"class":405},[36,44966,63],{"class":42},[36,44968,44969],{"class":38,"line":34165},[36,44970,34231],{"class":69},[36,44972,44973],{"class":38,"line":34182},[36,44974,34128],{"class":42},[36,44976,44977,44979,44981],{"class":38,"line":34205},[36,44978,34140],{"class":42},[36,44980,34074],{"class":405},[36,44982,63],{"class":42},[36,44984,44985,44987,44989],{"class":38,"line":34228},[36,44986,34151],{"class":42},[36,44988,34253],{"class":405},[36,44990,63],{"class":42},[36,44992,44993],{"class":38,"line":34234},[36,44994,34261],{"class":42},[36,44996,44997],{"class":38,"line":34239},[36,44998,2880],{"emptyLinePlaceholder":553},[36,45000,45001],{"class":38,"line":34248},[36,45002,34272],{"class":69},[36,45004,45005,45007,45009,45011,45013],{"class":38,"line":34258},[36,45006,2011],{"class":46},[36,45008,31698],{"class":53},[36,45010,3429],{"class":46},[36,45012,31703],{"class":405},[36,45014,4219],{"class":42},[36,45016,45017],{"class":38,"line":34264},[36,45018,34291],{"class":69},[36,45020,45021,45024,45026],{"class":38,"line":34269},[36,45022,45023],{"class":42},"    GoogLeNet",[36,45025,47],{"class":46},[36,45027,45028],{"class":42},"GoogLeNet(Inception)\n",[36,45030,45031,45033,45035],{"class":38,"line":34275},[36,45032,34308],{"class":42},[36,45034,47],{"class":46},[36,45036,34313],{"class":42},[36,45038,45039,45041,45043,45046,45048,45050,45052],{"class":38,"line":34288},[36,45040,33870],{"class":42},[36,45042,47],{"class":46},[36,45044,45045],{"class":42},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,45047,34326],{"class":5696},[36,45049,47],{"class":46},[36,45051,1564],{"class":53},[36,45053,63],{"class":42},[36,45055,45056],{"class":38,"line":34294},[36,45057,34338],{"class":42},[579,45059,45060],{"start":73},[582,45061,41051],{},[26,45063,45065],{"className":28,"code":45064,"language":30,"meta":31,"style":31},"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",[33,45066,45067,45073,45083,45093,45097,45107,45118,45122,45126,45130,45138,45154,45164,45180,45190,45204,45208,45218,45228,45238,45244,45248,45252,45260,45264,45280,45288,45292,45296,45304,45312,45316,45320,45324,45328,45334,45338,45348,45356,45364,45368,45372,45376,45384,45388,45404,45408,45412,45416,45428,45432,45444,45448,45452,45464,45468,45478,45482,45486,45498,45502,45510,45514,45518,45526,45530,45538,45542,45546,45550,45554,45558,45574,45582,45586,45590,45638,45644,45648,45658,45666,45674,45678,45682,45686,45690,45698,45702,45718,45722,45730,45738],{"__ignoreMap":31},[36,45068,45069,45071],{"class":38,"line":39},[36,45070,30871],{"class":46},[36,45072,30874],{"class":42},[36,45074,45075,45077,45079,45081],{"class":38,"line":66},[36,45076,30871],{"class":46},[36,45078,31893],{"class":42},[36,45080,31861],{"class":46},[36,45082,31898],{"class":42},[36,45084,45085,45087,45089,45091],{"class":38,"line":73},[36,45086,31215],{"class":46},[36,45088,31876],{"class":42},[36,45090,30871],{"class":46},[36,45092,31881],{"class":42},[36,45094,45095],{"class":38,"line":79},[36,45096,34399],{"class":69},[36,45098,45099,45101,45103,45105],{"class":38,"line":85},[36,45100,31215],{"class":46},[36,45102,31846],{"class":42},[36,45104,30871],{"class":46},[36,45106,31851],{"class":42},[36,45108,45109,45111,45113,45115],{"class":38,"line":419},[36,45110,31215],{"class":46},[36,45112,32391],{"class":42},[36,45114,30871],{"class":46},[36,45116,45117],{"class":42}," GoogLeNet,Inception\n",[36,45119,45120],{"class":38,"line":425},[36,45121,2880],{"emptyLinePlaceholder":553},[36,45123,45124],{"class":38,"line":431},[36,45125,2880],{"emptyLinePlaceholder":553},[36,45127,45128],{"class":38,"line":437},[36,45129,34428],{"class":69},[36,45131,45132,45134,45136],{"class":38,"line":443},[36,45133,32424],{"class":46},[36,45135,34435],{"class":2443},[36,45137,32430],{"class":42},[36,45139,45140,45142,45144,45146,45148,45150,45152],{"class":38,"line":2092},[36,45141,34442],{"class":42},[36,45143,47],{"class":46},[36,45145,31933],{"class":42},[36,45147,31936],{"class":5696},[36,45149,47],{"class":46},[36,45151,31941],{"class":405},[36,45153,31944],{"class":42},[36,45155,45156,45158,45160,45162],{"class":38,"line":2097},[36,45157,34459],{"class":5696},[36,45159,47],{"class":46},[36,45161,34464],{"class":53},[36,45163,31944],{"class":42},[36,45165,45166,45168,45170,45172,45174,45176,45178],{"class":38,"line":2103},[36,45167,34471],{"class":5696},[36,45169,47],{"class":46},[36,45171,31971],{"class":42},[36,45173,531],{"class":5696},[36,45175,47],{"class":46},[36,45177,35926],{"class":53},[36,45179,31981],{"class":42},[36,45181,45182,45184,45186,45188],{"class":38,"line":2108},[36,45183,34488],{"class":5696},[36,45185,47],{"class":46},[36,45187,31954],{"class":53},[36,45189,63],{"class":42},[36,45191,45192,45194,45196,45198,45200,45202],{"class":38,"line":2122},[36,45193,34499],{"class":42},[36,45195,47],{"class":46},[36,45197,32011],{"class":42},[36,45199,32014],{"class":5696},[36,45201,47],{"class":46},[36,45203,34510],{"class":42},[36,45205,45206],{"class":38,"line":2127},[36,45207,34515],{"class":69},[36,45209,45210,45212,45214,45216],{"class":38,"line":2133},[36,45211,34520],{"class":5696},[36,45213,47],{"class":46},[36,45215,54],{"class":53},[36,45217,31944],{"class":42},[36,45219,45220,45222,45224,45226],{"class":38,"line":2154},[36,45221,34531],{"class":5696},[36,45223,47],{"class":46},[36,45225,31954],{"class":53},[36,45227,31944],{"class":42},[36,45229,45230,45232,45234,45236],{"class":38,"line":2159},[36,45231,34542],{"class":5696},[36,45233,47],{"class":46},[36,45235,812],{"class":53},[36,45237,63],{"class":42},[36,45239,45240,45242],{"class":38,"line":2173},[36,45241,4570],{"class":46},[36,45243,34555],{"class":42},[36,45245,45246],{"class":38,"line":2178},[36,45247,2880],{"emptyLinePlaceholder":553},[36,45249,45250],{"class":38,"line":2207},[36,45251,34564],{"class":69},[36,45253,45254,45256,45258],{"class":38,"line":2212},[36,45255,32424],{"class":46},[36,45257,34571],{"class":2443},[36,45259,34574],{"class":42},[36,45261,45262],{"class":38,"line":2229},[36,45263,34579],{"class":69},[36,45265,45266,45268,45270,45272,45274,45276,45278],{"class":38,"line":2234},[36,45267,31715],{"class":42},[36,45269,47],{"class":46},[36,45271,31722],{"class":405},[36,45273,2184],{"class":46},[36,45275,31727],{"class":42},[36,45277,2181],{"class":46},[36,45279,34596],{"class":405},[36,45281,45282,45284,45286],{"class":38,"line":2239},[36,45283,31767],{"class":42},[36,45285,47],{"class":46},[36,45287,32766],{"class":42},[36,45289,45290],{"class":38,"line":2244},[36,45291,2880],{"emptyLinePlaceholder":553},[36,45293,45294],{"class":38,"line":2258},[36,45295,34613],{"class":69},[36,45297,45298,45300,45302],{"class":38,"line":2263},[36,45299,34618],{"class":42},[36,45301,47],{"class":46},[36,45303,32819],{"class":53},[36,45305,45306,45308,45310],{"class":38,"line":3057},[36,45307,34627],{"class":42},[36,45309,47],{"class":46},[36,45311,3565],{"class":53},[36,45313,45314],{"class":38,"line":3071},[36,45315,2880],{"emptyLinePlaceholder":553},[36,45317,45318],{"class":38,"line":3079},[36,45319,34640],{"class":69},[36,45321,45322],{"class":38,"line":3084},[36,45323,34645],{"class":69},[36,45325,45326],{"class":38,"line":3090},[36,45327,34650],{"class":69},[36,45329,45330,45332],{"class":38,"line":3096},[36,45331,34655],{"class":46},[36,45333,33361],{"class":42},[36,45335,45336],{"class":38,"line":3101},[36,45337,34662],{"class":69},[36,45339,45340,45342,45344,45346],{"class":38,"line":8428},[36,45341,3883],{"class":46},[36,45343,34669],{"class":42},[36,45345,26524],{"class":46},[36,45347,34674],{"class":42},[36,45349,45350,45352,45354],{"class":38,"line":8452},[36,45351,34679],{"class":42},[36,45353,47],{"class":46},[36,45355,34684],{"class":42},[36,45357,45358,45360,45362],{"class":38,"line":8457},[36,45359,34689],{"class":42},[36,45361,47],{"class":46},[36,45363,34694],{"class":42},[36,45365,45366],{"class":38,"line":8463},[36,45367,34699],{"class":69},[36,45369,45370],{"class":38,"line":8490},[36,45371,33352],{"class":42},[36,45373,45374],{"class":38,"line":8495},[36,45375,34708],{"class":69},[36,45377,45378,45380,45382],{"class":38,"line":8501},[36,45379,33137],{"class":42},[36,45381,47],{"class":46},[36,45383,34717],{"class":42},[36,45385,45386],{"class":38,"line":8513},[36,45387,34722],{"class":69},[36,45389,45390,45392,45394,45396,45398,45400,45402],{"class":38,"line":8525},[36,45391,33154],{"class":42},[36,45393,47],{"class":46},[36,45395,33159],{"class":42},[36,45397,33162],{"class":5696},[36,45399,47],{"class":46},[36,45401,54],{"class":53},[36,45403,63],{"class":42},[36,45405,45406],{"class":38,"line":8537},[36,45407,34743],{"class":69},[36,45409,45410],{"class":38,"line":10196},[36,45411,34748],{"class":69},[36,45413,45414],{"class":38,"line":10221},[36,45415,34753],{"class":69},[36,45417,45418,45420,45422,45424,45426],{"class":38,"line":10244},[36,45419,34758],{"class":42},[36,45421,9957],{"class":46},[36,45423,33264],{"class":42},[36,45425,3429],{"class":46},[36,45427,34767],{"class":42},[36,45429,45430],{"class":38,"line":10268},[36,45431,34772],{"class":69},[36,45433,45434,45436,45438,45440,45442],{"class":38,"line":10273},[36,45435,34777],{"class":42},[36,45437,9957],{"class":46},[36,45439,34782],{"class":42},[36,45441,812],{"class":53},[36,45443,63],{"class":42},[36,45445,45446],{"class":38,"line":10278},[36,45447,2880],{"emptyLinePlaceholder":553},[36,45449,45450],{"class":38,"line":10283},[36,45451,34795],{"class":69},[36,45453,45454,45456,45458,45460,45462],{"class":38,"line":10292},[36,45455,34800],{"class":42},[36,45457,47],{"class":46},[36,45459,34805],{"class":42},[36,45461,1197],{"class":46},[36,45463,34810],{"class":42},[36,45465,45466],{"class":38,"line":10297},[36,45467,34815],{"class":69},[36,45469,45470,45472,45474,45476],{"class":38,"line":10303},[36,45471,32928],{"class":53},[36,45473,345],{"class":42},[36,45475,34824],{"class":405},[36,45477,34827],{"class":42},[36,45479,45480],{"class":38,"line":10324},[36,45481,2880],{"emptyLinePlaceholder":553},[36,45483,45484],{"class":38,"line":10330},[36,45485,34836],{"class":69},[36,45487,45488,45490,45492,45494,45496],{"class":38,"line":10344},[36,45489,2011],{"class":46},[36,45491,31698],{"class":53},[36,45493,3429],{"class":46},[36,45495,31703],{"class":405},[36,45497,4219],{"class":42},[36,45499,45500],{"class":38,"line":10350},[36,45501,34853],{"class":69},[36,45503,45504,45506,45508],{"class":38,"line":10377},[36,45505,31767],{"class":42},[36,45507,47],{"class":46},[36,45509,45028],{"class":42},[36,45511,45512],{"class":38,"line":10386},[36,45513,34866],{"class":69},[36,45515,45516],{"class":38,"line":10392},[36,45517,34871],{"class":69},[36,45519,45520,45522,45524],{"class":38,"line":10400},[36,45521,34876],{"class":42},[36,45523,34879],{"class":405},[36,45525,370],{"class":42},[36,45527,45528],{"class":38,"line":10405},[36,45529,34886],{"class":69},[36,45531,45532,45534,45536],{"class":38,"line":17084},[36,45533,34499],{"class":42},[36,45535,47],{"class":46},[36,45537,34895],{"class":42},[36,45539,45540],{"class":38,"line":17090},[36,45541,34900],{"class":69},[36,45543,45544],{"class":38,"line":17113},[36,45545,34905],{"class":42},[36,45547,45548],{"class":38,"line":17119},[36,45549,2880],{"emptyLinePlaceholder":553},[36,45551,45552],{"class":38,"line":17142},[36,45553,34914],{"class":69},[36,45555,45556],{"class":38,"line":17156},[36,45557,34919],{"class":69},[36,45559,45560,45562,45564,45566,45568,45570,45572],{"class":38,"line":17176},[36,45561,31715],{"class":42},[36,45563,47],{"class":46},[36,45565,31722],{"class":405},[36,45567,2184],{"class":46},[36,45569,31727],{"class":42},[36,45571,2181],{"class":46},[36,45573,34596],{"class":405},[36,45575,45576,45578,45580],{"class":38,"line":17182},[36,45577,31767],{"class":42},[36,45579,47],{"class":46},[36,45581,32766],{"class":42},[36,45583,45584],{"class":38,"line":17193},[36,45585,34948],{"class":69},[36,45587,45588],{"class":38,"line":17216},[36,45589,34953],{"class":69},[36,45591,45592,45594,45596,45598,45600,45602,45604,45606,45608,45610,45612,45614,45616,45618,45620,45622,45624,45626,45628,45630,45632,45634,45636],{"class":38,"line":17238},[36,45593,34958],{"class":42},[36,45595,47],{"class":46},[36,45597,1503],{"class":42},[36,45599,34965],{"class":405},[36,45601,57],{"class":42},[36,45603,34970],{"class":405},[36,45605,57],{"class":42},[36,45607,34975],{"class":405},[36,45609,57],{"class":42},[36,45611,34980],{"class":405},[36,45613,57],{"class":42},[36,45615,34985],{"class":405},[36,45617,57],{"class":42},[36,45619,34990],{"class":405},[36,45621,57],{"class":42},[36,45623,34995],{"class":405},[36,45625,57],{"class":42},[36,45627,35000],{"class":405},[36,45629,57],{"class":42},[36,45631,35005],{"class":405},[36,45633,57],{"class":42},[36,45635,35010],{"class":405},[36,45637,33723],{"class":42},[36,45639,45640,45642],{"class":38,"line":17243},[36,45641,34655],{"class":46},[36,45643,33361],{"class":42},[36,45645,45646],{"class":38,"line":17249},[36,45647,35023],{"class":69},[36,45649,45650,45652,45654,45656],{"class":38,"line":17263},[36,45651,3883],{"class":46},[36,45653,35030],{"class":42},[36,45655,26524],{"class":46},[36,45657,34674],{"class":42},[36,45659,45660,45662,45664],{"class":38,"line":17276},[36,45661,33087],{"class":42},[36,45663,47],{"class":46},[36,45665,33092],{"class":42},[36,45667,45668,45670,45672],{"class":38,"line":17281},[36,45669,33102],{"class":42},[36,45671,47],{"class":46},[36,45673,33107],{"class":42},[36,45675,45676],{"class":38,"line":17295},[36,45677,2880],{"emptyLinePlaceholder":553},[36,45679,45680],{"class":38,"line":17300},[36,45681,35059],{"class":69},[36,45683,45684],{"class":38,"line":17306},[36,45685,33352],{"class":42},[36,45687,45688],{"class":38,"line":17311},[36,45689,35068],{"class":69},[36,45691,45692,45694,45696],{"class":38,"line":17325},[36,45693,33137],{"class":42},[36,45695,47],{"class":46},[36,45697,33142],{"class":42},[36,45699,45700],{"class":38,"line":17330},[36,45701,35081],{"class":69},[36,45703,45704,45706,45708,45710,45712,45714,45716],{"class":38,"line":17335},[36,45705,33154],{"class":42},[36,45707,47],{"class":46},[36,45709,33159],{"class":42},[36,45711,33162],{"class":5696},[36,45713,47],{"class":46},[36,45715,54],{"class":53},[36,45717,63],{"class":42},[36,45719,45720],{"class":38,"line":17349},[36,45721,35102],{"class":69},[36,45723,45724,45726,45728],{"class":38,"line":17361},[36,45725,35107],{"class":42},[36,45727,47],{"class":46},[36,45729,35112],{"class":42},[36,45731,45732,45734,45736],{"class":38,"line":17366},[36,45733,35117],{"class":42},[36,45735,47],{"class":46},[36,45737,35122],{"class":42},[36,45739,45740,45742,45744,45746,45748,45750,45752,45754],{"class":38,"line":17379},[36,45741,35127],{"class":53},[36,45743,345],{"class":42},[36,45745,35132],{"class":405},[36,45747,35135],{"class":42},[36,45749,35138],{"class":405},[36,45751,57],{"class":42},[36,45753,35143],{"class":405},[36,45755,35146],{"class":42},[596,45757,45759],{"id":45758},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45761,45762],{},"猫狗分类任务",[19,45764,45765],{},"划分数据集和验证集",[26,45767,45769],{"className":28,"code":45768,"language":30,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\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",[33,45770,45771,45776,45783,45788,45799,45806,45810,45820,45834,45843,45847,45852,45862,45882,45886,45891,45901,45912,45925,45929,45934,45943,45953,45964,45968,45973,45983,45987,45992,45997,46002,46007,46012,46016,46026,46053,46066,46078,46105,46110,46115,46129,46134,46146,46161,46176,46184,46188,46193,46199,46211,46224,46229,46234,46239,46289,46295,46299],{"__ignoreMap":31},[36,45772,45773],{"class":38,"line":39},[36,45774,45775],{"class":69},"# 创建脚本，用于划分数据集和验证集\n",[36,45777,45778,45780],{"class":38,"line":66},[36,45779,30871],{"class":46},[36,45781,45782],{"class":42}," os\n",[36,45784,45785],{"class":38,"line":73},[36,45786,45787],{"class":69},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,45789,45790,45792,45795,45797],{"class":38,"line":79},[36,45791,31215],{"class":46},[36,45793,45794],{"class":42}," shutil ",[36,45796,30871],{"class":46},[36,45798,32299],{"class":42},[36,45800,45801,45803],{"class":38,"line":85},[36,45802,30871],{"class":46},[36,45804,45805],{"class":42}," random\n",[36,45807,45808],{"class":38,"line":419},[36,45809,2880],{"emptyLinePlaceholder":553},[36,45811,45812,45814,45817],{"class":38,"line":425},[36,45813,32424],{"class":46},[36,45815,45816],{"class":2443}," mkfile",[36,45818,45819],{"class":42},"(file):\n",[36,45821,45822,45824,45826,45829,45832],{"class":38,"line":431},[36,45823,3581],{"class":46},[36,45825,39407],{"class":46},[36,45827,45828],{"class":42}," os.path.exists(",[36,45830,45831],{"class":5696},"file",[36,45833,31264],{"class":42},[36,45835,45836,45839,45841],{"class":38,"line":437},[36,45837,45838],{"class":42},"        os.makedirs(",[36,45840,45831],{"class":5696},[36,45842,63],{"class":42},[36,45844,45845],{"class":38,"line":443},[36,45846,2880],{"emptyLinePlaceholder":553},[36,45848,45849],{"class":38,"line":2092},[36,45850,45851],{"class":69},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,45853,45854,45857,45859],{"class":38,"line":2097},[36,45855,45856],{"class":42},"file_path",[36,45858,47],{"class":46},[36,45860,45861],{"class":405},"'data_cat_dog'\n",[36,45863,45864,45867,45869,45872,45874,45877,45879],{"class":38,"line":2103},[36,45865,45866],{"class":42},"flower_class",[36,45868,47],{"class":46},[36,45870,45871],{"class":42},"[cla ",[36,45873,3505],{"class":46},[36,45875,45876],{"class":42}," cla ",[36,45878,26524],{"class":46},[36,45880,45881],{"class":42}," os.listdir(file_path)]\n",[36,45883,45884],{"class":38,"line":2108},[36,45885,2880],{"emptyLinePlaceholder":553},[36,45887,45888],{"class":38,"line":2122},[36,45889,45890],{"class":69},"# 创建训练集train文件夹\n",[36,45892,45893,45896,45899],{"class":38,"line":2127},[36,45894,45895],{"class":42},"mkfile(",[36,45897,45898],{"class":405},"'data\u002Ftrain'",[36,45900,63],{"class":42},[36,45902,45903,45905,45907,45909],{"class":38,"line":2133},[36,45904,3505],{"class":46},[36,45906,45876],{"class":42},[36,45908,26524],{"class":46},[36,45910,45911],{"class":42}," flower_class:\n",[36,45913,45914,45917,45920,45922],{"class":38,"line":2154},[36,45915,45916],{"class":42},"    mkfile(",[36,45918,45919],{"class":405},"'data\u002Ftrain\u002F'",[36,45921,1097],{"class":46},[36,45923,45924],{"class":42},"cla)\n",[36,45926,45927],{"class":38,"line":2159},[36,45928,2880],{"emptyLinePlaceholder":553},[36,45930,45931],{"class":38,"line":2173},[36,45932,45933],{"class":69},"# 创建验证集val文件夹\n",[36,45935,45936,45938,45941],{"class":38,"line":2178},[36,45937,45895],{"class":42},[36,45939,45940],{"class":405},"'data\u002Ftest'",[36,45942,63],{"class":42},[36,45944,45945,45947,45949,45951],{"class":38,"line":2207},[36,45946,3505],{"class":46},[36,45948,45876],{"class":42},[36,45950,26524],{"class":46},[36,45952,45911],{"class":42},[36,45954,45955,45957,45960,45962],{"class":38,"line":2212},[36,45956,45916],{"class":42},[36,45958,45959],{"class":405},"'data\u002Ftest\u002F'",[36,45961,1097],{"class":46},[36,45963,45924],{"class":42},[36,45965,45966],{"class":38,"line":2229},[36,45967,2880],{"emptyLinePlaceholder":553},[36,45969,45970],{"class":38,"line":2234},[36,45971,45972],{"class":69},"# 划分比例，训练集：测试集=9：1\n",[36,45974,45975,45978,45980],{"class":38,"line":2239},[36,45976,45977],{"class":42},"split_rate",[36,45979,47],{"class":46},[36,45981,45982],{"class":53},"0.1\n",[36,45984,45985],{"class":38,"line":2244},[36,45986,2880],{"emptyLinePlaceholder":553},[36,45988,45989],{"class":38,"line":2258},[36,45990,45991],{"class":69},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,45993,45994],{"class":38,"line":2263},[36,45995,45996],{"class":69},"# cla_path：当前类别的原始图片路径\n",[36,45998,45999],{"class":38,"line":3057},[36,46000,46001],{"class":69},"# images：当前类别下所有图片的文件名列表\n",[36,46003,46004],{"class":38,"line":3071},[36,46005,46006],{"class":69},"# num：该类别图片总数\n",[36,46008,46009],{"class":38,"line":3079},[36,46010,46011],{"class":69},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,46013,46014],{"class":38,"line":3084},[36,46015,2880],{"emptyLinePlaceholder":553},[36,46017,46018,46020,46022,46024],{"class":38,"line":3090},[36,46019,3505],{"class":46},[36,46021,45876],{"class":42},[36,46023,26524],{"class":46},[36,46025,45911],{"class":42},[36,46027,46028,46031,46033,46036,46038,46041,46044,46046,46048,46050],{"class":38,"line":3096},[36,46029,46030],{"class":42},"    cla_path ",[36,46032,47],{"class":46},[36,46034,46035],{"class":42}," file_path ",[36,46037,1097],{"class":46},[36,46039,46040],{"class":405}," '\u002F'",[36,46042,46043],{"class":46}," +",[36,46045,45876],{"class":42},[36,46047,1097],{"class":46},[36,46049,46040],{"class":405},[36,46051,46052],{"class":69},"  # 某一类别的子目录\n",[36,46054,46055,46058,46060,46063],{"class":38,"line":3101},[36,46056,46057],{"class":42},"    images ",[36,46059,47],{"class":46},[36,46061,46062],{"class":42}," os.listdir(cla_path)  ",[36,46064,46065],{"class":69},"# iamges 列表存储了该目录下所有图像的名称\n",[36,46067,46068,46071,46073,46075],{"class":38,"line":8428},[36,46069,46070],{"class":42},"    num ",[36,46072,47],{"class":46},[36,46074,7811],{"class":53},[36,46076,46077],{"class":42},"(images)\n",[36,46079,46080,46083,46085,46088,46090,46092,46094,46097,46099,46102],{"class":38,"line":8452},[36,46081,46082],{"class":42},"    eval_index ",[36,46084,47],{"class":46},[36,46086,46087],{"class":42}," random.sample(images, ",[36,46089,1109],{"class":5696},[36,46091,47],{"class":46},[36,46093,631],{"class":53},[36,46095,46096],{"class":42},"(num ",[36,46098,1071],{"class":46},[36,46100,46101],{"class":42}," split_rate))  ",[36,46103,46104],{"class":69},"# 从images列表中随机抽取 k 个图像名称\n",[36,46106,46107],{"class":38,"line":8457},[36,46108,46109],{"class":69},"    # 遍历该类别下的所有图片\n",[36,46111,46112],{"class":38,"line":8463},[36,46113,46114],{"class":69},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,46116,46117,46119,46122,46124,46126],{"class":38,"line":8490},[36,46118,3681],{"class":46},[36,46120,46121],{"class":42}," index, image ",[36,46123,26524],{"class":46},[36,46125,32083],{"class":53},[36,46127,46128],{"class":42},"(images):\n",[36,46130,46131],{"class":38,"line":8495},[36,46132,46133],{"class":69},"        # eval_index 中保存验证集val的图像名称\n",[36,46135,46136,46138,46141,46143],{"class":38,"line":8501},[36,46137,2977],{"class":46},[36,46139,46140],{"class":42}," image ",[36,46142,26524],{"class":46},[36,46144,46145],{"class":42}," eval_index:\n",[36,46147,46148,46151,46153,46156,46158],{"class":38,"line":8513},[36,46149,46150],{"class":42},"            image_path ",[36,46152,47],{"class":46},[36,46154,46155],{"class":42}," cla_path ",[36,46157,1097],{"class":46},[36,46159,46160],{"class":42}," image\n",[36,46162,46163,46166,46168,46171,46173],{"class":38,"line":8525},[36,46164,46165],{"class":42},"            new_path ",[36,46167,47],{"class":46},[36,46169,46170],{"class":405}," 'data\u002Ftest\u002F'",[36,46172,46043],{"class":46},[36,46174,46175],{"class":42}," cla\n",[36,46177,46178,46181],{"class":38,"line":8537},[36,46179,46180],{"class":42},"            copy(image_path, new_path)  ",[36,46182,46183],{"class":69},"# 将选中的图像复制到新路径\n",[36,46185,46186],{"class":38,"line":10196},[36,46187,2880],{"emptyLinePlaceholder":553},[36,46189,46190],{"class":38,"line":10221},[36,46191,46192],{"class":69},"        # 其余的图像保存在训练集train中\n",[36,46194,46195,46197],{"class":38,"line":10244},[36,46196,3014],{"class":46},[36,46198,4219],{"class":42},[36,46200,46201,46203,46205,46207,46209],{"class":38,"line":10268},[36,46202,46150],{"class":42},[36,46204,47],{"class":46},[36,46206,46155],{"class":42},[36,46208,1097],{"class":46},[36,46210,46160],{"class":42},[36,46212,46213,46215,46217,46220,46222],{"class":38,"line":10273},[36,46214,46165],{"class":42},[36,46216,47],{"class":46},[36,46218,46219],{"class":405}," 'data\u002Ftrain\u002F'",[36,46221,46043],{"class":46},[36,46223,46175],{"class":42},[36,46225,46226],{"class":38,"line":10278},[36,46227,46228],{"class":42},"            copy(image_path, new_path)\n",[36,46230,46231],{"class":38,"line":10283},[36,46232,46233],{"class":69},"            # 打印进度条信息\n",[36,46235,46236],{"class":38,"line":10292},[36,46237,46238],{"class":69},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,46240,46241,46243,46245,46247,46250,46252,46254,46257,46259,46261,46263,46266,46269,46271,46273,46276,46279,46281,46283,46286],{"class":38,"line":10297},[36,46242,32928],{"class":53},[36,46244,345],{"class":42},[36,46246,870],{"class":405},[36,46248,46249],{"class":53},"\\r",[36,46251,1503],{"class":405},[36,46253,32936],{"class":53},[36,46255,46256],{"class":405},"] processing [",[36,46258,32936],{"class":53},[36,46260,1197],{"class":405},[36,46262,32936],{"class":53},[36,46264,46265],{"class":405},"]\"",[36,46267,46268],{"class":42},".format(cla, index ",[36,46270,1097],{"class":46},[36,46272,25599],{"class":53},[36,46274,46275],{"class":42},", num), ",[36,46277,46278],{"class":5696},"end",[36,46280,47],{"class":46},[36,46282,8132],{"class":405},[36,46284,46285],{"class":42},")  ",[36,46287,46288],{"class":69},"# processing bar\n",[36,46290,46291,46293],{"class":38,"line":10303},[36,46292,31777],{"class":53},[36,46294,2456],{"class":42},[36,46296,46297],{"class":38,"line":10324},[36,46298,2880],{"emptyLinePlaceholder":553},[36,46300,46301,46303,46305,46308],{"class":38,"line":10330},[36,46302,30894],{"class":53},[36,46304,345],{"class":42},[36,46306,46307],{"class":405},"\"processing done!\"",[36,46309,63],{"class":42},[19,46311,46312],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22478,46314,46316],{"id":46315},"_242模型代码","2.4.2.模型代码",[19,46318,46319],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,46321,46323],{"className":28,"code":46322,"language":30,"meta":31,"style":31},"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",[33,46324,46325,46331,46341,46351,46355,46371,46379,46393,46403,46407,46437,46441,46475,46521,46525,46559,46605,46609,46613,46647,46677,46681,46689,46703,46725,46747,46765,46769,46783,46787,46791,46807,46811,46819,46833,46843,46887,46891,46919,46923,46933,46961,46965,47001,47005,47033,47037,47047,47079,47111,47139,47143,47153,47185,47217,47249,47281,47313,47341,47345,47355,47387,47419,47431,47435,47447,47451,47455,47467,47475,47495,47499,47503,47507,47511,47515,47519,47533,47541,47549,47561,47575,47583,47587,47595,47605,47615,47625,47635,47645,47651,47655,47659,47671,47691,47699],{"__ignoreMap":31},[36,46326,46327,46329],{"class":38,"line":39},[36,46328,30871],{"class":46},[36,46330,30874],{"class":42},[36,46332,46333,46335,46337,46339],{"class":38,"line":66},[36,46334,31215],{"class":46},[36,46336,31218],{"class":42},[36,46338,30871],{"class":46},[36,46340,31223],{"class":42},[36,46342,46343,46345,46347,46349],{"class":38,"line":73},[36,46344,31215],{"class":46},[36,46346,31235],{"class":42},[36,46348,30871],{"class":46},[36,46350,31240],{"class":42},[36,46352,46353],{"class":38,"line":79},[36,46354,2880],{"emptyLinePlaceholder":553},[36,46356,46357,46359,46361,46363,46365,46367,46369],{"class":38,"line":85},[36,46358,15174],{"class":46},[36,46360,41970],{"class":2443},[36,46362,345],{"class":42},[36,46364,31256],{"class":2443},[36,46366,1171],{"class":42},[36,46368,31261],{"class":2443},[36,46370,31264],{"class":42},[36,46372,46373,46375,46377],{"class":38,"line":419},[36,46374,31279],{"class":46},[36,46376,31282],{"class":53},[36,46378,41989],{"class":42},[36,46380,46381,46383,46385,46387,46389,46391],{"class":38,"line":425},[36,46382,31295],{"class":53},[36,46384,41996],{"class":42},[36,46386,31301],{"class":53},[36,46388,31304],{"class":42},[36,46390,31307],{"class":53},[36,46392,2456],{"class":42},[36,46394,46395,46397,46399,46401],{"class":38,"line":431},[36,46396,31323],{"class":53},[36,46398,35248],{"class":42},[36,46400,47],{"class":46},[36,46402,35253],{"class":42},[36,46404,46405],{"class":38,"line":437},[36,46406,42019],{"class":69},[36,46408,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429,46431,46433,46435],{"class":38,"line":443},[36,46410,31323],{"class":53},[36,46412,42026],{"class":42},[36,46414,47],{"class":46},[36,46416,31331],{"class":42},[36,46418,31334],{"class":5696},[36,46420,47],{"class":46},[36,46422,42037],{"class":42},[36,46424,31343],{"class":5696},[36,46426,47],{"class":46},[36,46428,42044],{"class":42},[36,46430,31352],{"class":5696},[36,46432,47],{"class":46},[36,46434,54],{"class":53},[36,46436,63],{"class":42},[36,46438,46439],{"class":38,"line":2092},[36,46440,42057],{"class":69},[36,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473],{"class":38,"line":2097},[36,46444,31323],{"class":53},[36,46446,42064],{"class":42},[36,46448,47],{"class":46},[36,46450,31331],{"class":42},[36,46452,31334],{"class":5696},[36,46454,47],{"class":46},[36,46456,42037],{"class":42},[36,46458,31343],{"class":5696},[36,46460,47],{"class":46},[36,46462,42081],{"class":42},[36,46464,812],{"class":53},[36,46466,42086],{"class":42},[36,46468,31352],{"class":5696},[36,46470,47],{"class":46},[36,46472,54],{"class":53},[36,46474,63],{"class":42},[36,46476,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519],{"class":38,"line":2103},[36,46478,31323],{"class":53},[36,46480,42101],{"class":42},[36,46482,47],{"class":46},[36,46484,31331],{"class":42},[36,46486,31334],{"class":5696},[36,46488,47],{"class":46},[36,46490,42081],{"class":42},[36,46492,812],{"class":53},[36,46494,42086],{"class":42},[36,46496,31343],{"class":5696},[36,46498,47],{"class":46},[36,46500,42081],{"class":42},[36,46502,54],{"class":53},[36,46504,42086],{"class":42},[36,46506,31352],{"class":5696},[36,46508,47],{"class":46},[36,46510,127],{"class":53},[36,46512,57],{"class":42},[36,46514,31361],{"class":5696},[36,46516,47],{"class":46},[36,46518,54],{"class":53},[36,46520,63],{"class":42},[36,46522,46523],{"class":38,"line":2108},[36,46524,42146],{"class":69},[36,46526,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557],{"class":38,"line":2122},[36,46528,31323],{"class":53},[36,46530,42153],{"class":42},[36,46532,47],{"class":46},[36,46534,31331],{"class":42},[36,46536,31334],{"class":5696},[36,46538,47],{"class":46},[36,46540,42037],{"class":42},[36,46542,31343],{"class":5696},[36,46544,47],{"class":46},[36,46546,42170],{"class":42},[36,46548,812],{"class":53},[36,46550,42086],{"class":42},[36,46552,31352],{"class":5696},[36,46554,47],{"class":46},[36,46556,54],{"class":53},[36,46558,63],{"class":42},[36,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603],{"class":38,"line":2127},[36,46562,31323],{"class":53},[36,46564,42189],{"class":42},[36,46566,47],{"class":46},[36,46568,31331],{"class":42},[36,46570,31334],{"class":5696},[36,46572,47],{"class":46},[36,46574,42170],{"class":42},[36,46576,812],{"class":53},[36,46578,42086],{"class":42},[36,46580,31343],{"class":5696},[36,46582,47],{"class":46},[36,46584,42170],{"class":42},[36,46586,54],{"class":53},[36,46588,42086],{"class":42},[36,46590,31352],{"class":5696},[36,46592,47],{"class":46},[36,46594,938],{"class":53},[36,46596,57],{"class":42},[36,46598,31361],{"class":5696},[36,46600,47],{"class":46},[36,46602,96],{"class":53},[36,46604,63],{"class":42},[36,46606,46607],{"class":38,"line":2133},[36,46608,42234],{"class":69},[36,46610,46611],{"class":38,"line":2154},[36,46612,42239],{"class":69},[36,46614,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645],{"class":38,"line":2159},[36,46616,31323],{"class":53},[36,46618,42246],{"class":42},[36,46620,47],{"class":46},[36,46622,35306],{"class":42},[36,46624,31352],{"class":5696},[36,46626,47],{"class":46},[36,46628,127],{"class":53},[36,46630,57],{"class":42},[36,46632,31407],{"class":5696},[36,46634,47],{"class":46},[36,46636,54],{"class":53},[36,46638,57],{"class":42},[36,46640,31361],{"class":5696},[36,46642,47],{"class":46},[36,46644,54],{"class":53},[36,46646,63],{"class":42},[36,46648,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675],{"class":38,"line":2173},[36,46650,31323],{"class":53},[36,46652,42281],{"class":42},[36,46654,47],{"class":46},[36,46656,31331],{"class":42},[36,46658,31334],{"class":5696},[36,46660,47],{"class":46},[36,46662,42037],{"class":42},[36,46664,31343],{"class":5696},[36,46666,47],{"class":46},[36,46668,42298],{"class":42},[36,46670,31352],{"class":5696},[36,46672,47],{"class":46},[36,46674,54],{"class":53},[36,46676,63],{"class":42},[36,46678,46679],{"class":38,"line":2178},[36,46680,2880],{"emptyLinePlaceholder":553},[36,46682,46683,46685,46687],{"class":38,"line":2207},[36,46684,31279],{"class":46},[36,46686,31571],{"class":2443},[36,46688,31574],{"class":42},[36,46690,46691,46693,46695,46697,46699,46701],{"class":38,"line":2212},[36,46692,42323],{"class":42},[36,46694,47],{"class":46},[36,46696,31301],{"class":53},[36,46698,35661],{"class":42},[36,46700,31301],{"class":53},[36,46702,42334],{"class":42},[36,46704,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723],{"class":38,"line":2229},[36,46706,7565],{"class":42},[36,46708,47],{"class":46},[36,46710,31301],{"class":53},[36,46712,35661],{"class":42},[36,46714,31301],{"class":53},[36,46716,42349],{"class":42},[36,46718,31301],{"class":53},[36,46720,35661],{"class":42},[36,46722,31301],{"class":53},[36,46724,42358],{"class":42},[36,46726,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745],{"class":38,"line":2234},[36,46728,42363],{"class":42},[36,46730,47],{"class":46},[36,46732,31301],{"class":53},[36,46734,35661],{"class":42},[36,46736,31301],{"class":53},[36,46738,42374],{"class":42},[36,46740,31301],{"class":53},[36,46742,35661],{"class":42},[36,46744,31301],{"class":53},[36,46746,42383],{"class":42},[36,46748,46749,46751,46753,46755,46757,46759,46761,46763],{"class":38,"line":2239},[36,46750,42388],{"class":42},[36,46752,47],{"class":46},[36,46754,31301],{"class":53},[36,46756,35661],{"class":42},[36,46758,31301],{"class":53},[36,46760,42399],{"class":42},[36,46762,31301],{"class":53},[36,46764,42404],{"class":42},[36,46766,46767],{"class":38,"line":2244},[36,46768,42409],{"class":69},[36,46770,46771,46773,46775,46777,46779,46781],{"class":38,"line":2258},[36,46772,15232],{"class":46},[36,46774,42416],{"class":42},[36,46776,33162],{"class":5696},[36,46778,47],{"class":46},[36,46780,54],{"class":53},[36,46782,63],{"class":42},[36,46784,46785],{"class":38,"line":2263},[36,46786,2880],{"emptyLinePlaceholder":553},[36,46788,46789],{"class":38,"line":3057},[36,46790,42437],{"class":69},[36,46792,46793,46795,46797,46799,46801,46803,46805],{"class":38,"line":3071},[36,46794,15174],{"class":46},[36,46796,42444],{"class":2443},[36,46798,345],{"class":42},[36,46800,31256],{"class":2443},[36,46802,1171],{"class":42},[36,46804,31261],{"class":2443},[36,46806,31264],{"class":42},[36,46808,46809],{"class":38,"line":3079},[36,46810,42459],{"class":69},[36,46812,46813,46815,46817],{"class":38,"line":3084},[36,46814,31279],{"class":46},[36,46816,31282],{"class":53},[36,46818,42468],{"class":42},[36,46820,46821,46823,46825,46827,46829,46831],{"class":38,"line":3090},[36,46822,31295],{"class":53},[36,46824,42475],{"class":42},[36,46826,31301],{"class":53},[36,46828,31304],{"class":42},[36,46830,31307],{"class":53},[36,46832,2456],{"class":42},[36,46834,46835,46837,46839,46841],{"class":38,"line":3096},[36,46836,31323],{"class":53},[36,46838,42490],{"class":42},[36,46840,47],{"class":46},[36,46842,38486],{"class":42},[36,46844,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885],{"class":38,"line":3101},[36,46846,38491],{"class":42},[36,46848,31334],{"class":5696},[36,46850,47],{"class":46},[36,46852,127],{"class":53},[36,46854,57],{"class":42},[36,46856,31343],{"class":5696},[36,46858,47],{"class":46},[36,46860,824],{"class":53},[36,46862,57],{"class":42},[36,46864,31352],{"class":5696},[36,46866,47],{"class":46},[36,46868,987],{"class":53},[36,46870,57],{"class":42},[36,46872,31407],{"class":5696},[36,46874,47],{"class":46},[36,46876,96],{"class":53},[36,46878,57],{"class":42},[36,46880,31361],{"class":5696},[36,46882,47],{"class":46},[36,46884,127],{"class":53},[36,46886,38524],{"class":42},[36,46888,46889],{"class":38,"line":8428},[36,46890,38529],{"class":42},[36,46892,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917],{"class":38,"line":8452},[36,46894,38574],{"class":42},[36,46896,31352],{"class":5696},[36,46898,47],{"class":46},[36,46900,127],{"class":53},[36,46902,57],{"class":42},[36,46904,31407],{"class":5696},[36,46906,47],{"class":46},[36,46908,96],{"class":53},[36,46910,57],{"class":42},[36,46912,31361],{"class":5696},[36,46914,47],{"class":46},[36,46916,54],{"class":53},[36,46918,63],{"class":42},[36,46920,46921],{"class":38,"line":8457},[36,46922,38603],{"class":42},[36,46924,46925,46927,46929,46931],{"class":38,"line":8463},[36,46926,31323],{"class":53},[36,46928,42581],{"class":42},[36,46930,47],{"class":46},[36,46932,38486],{"class":42},[36,46934,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959],{"class":38,"line":8490},[36,46936,38491],{"class":42},[36,46938,31334],{"class":5696},[36,46940,47],{"class":46},[36,46942,824],{"class":53},[36,46944,57],{"class":42},[36,46946,31343],{"class":5696},[36,46948,47],{"class":46},[36,46950,824],{"class":53},[36,46952,57],{"class":42},[36,46954,31352],{"class":5696},[36,46956,47],{"class":46},[36,46958,54],{"class":53},[36,46960,38524],{"class":42},[36,46962,46963],{"class":38,"line":8495},[36,46964,38529],{"class":42},[36,46966,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999],{"class":38,"line":8501},[36,46968,38491],{"class":42},[36,46970,31334],{"class":5696},[36,46972,47],{"class":46},[36,46974,824],{"class":53},[36,46976,57],{"class":42},[36,46978,31343],{"class":5696},[36,46980,47],{"class":46},[36,46982,42636],{"class":53},[36,46984,57],{"class":42},[36,46986,31352],{"class":5696},[36,46988,47],{"class":46},[36,46990,127],{"class":53},[36,46992,57],{"class":42},[36,46994,31361],{"class":5696},[36,46996,47],{"class":46},[36,46998,54],{"class":53},[36,47000,38524],{"class":42},[36,47002,47003],{"class":38,"line":8513},[36,47004,38529],{"class":42},[36,47006,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031],{"class":38,"line":8525},[36,47008,38574],{"class":42},[36,47010,31352],{"class":5696},[36,47012,47],{"class":46},[36,47014,127],{"class":53},[36,47016,57],{"class":42},[36,47018,31407],{"class":5696},[36,47020,47],{"class":46},[36,47022,96],{"class":53},[36,47024,57],{"class":42},[36,47026,31361],{"class":5696},[36,47028,47],{"class":46},[36,47030,54],{"class":53},[36,47032,63],{"class":42},[36,47034,47035],{"class":38,"line":8537},[36,47036,38603],{"class":42},[36,47038,47039,47041,47043,47045],{"class":38,"line":10196},[36,47040,31323],{"class":53},[36,47042,42697],{"class":42},[36,47044,47],{"class":46},[36,47046,38486],{"class":42},[36,47048,47049,47051,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077],{"class":38,"line":10221},[36,47050,42706],{"class":42},[36,47052,42636],{"class":53},[36,47054,57],{"class":42},[36,47056,824],{"class":53},[36,47058,42715],{"class":42},[36,47060,830],{"class":53},[36,47062,57],{"class":42},[36,47064,32547],{"class":53},[36,47066,42724],{"class":42},[36,47068,1214],{"class":53},[36,47070,57],{"class":42},[36,47072,818],{"class":53},[36,47074,42733],{"class":42},[36,47076,818],{"class":53},[36,47078,38524],{"class":42},[36,47080,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107,47109],{"class":38,"line":10244},[36,47082,42706],{"class":42},[36,47084,35347],{"class":53},[36,47086,57],{"class":42},[36,47088,32547],{"class":53},[36,47090,42715],{"class":42},[36,47092,32547],{"class":53},[36,47094,57],{"class":42},[36,47096,42636],{"class":53},[36,47098,42724],{"class":42},[36,47100,818],{"class":53},[36,47102,57],{"class":42},[36,47104,830],{"class":53},[36,47106,42733],{"class":42},[36,47108,824],{"class":53},[36,47110,38524],{"class":42},[36,47112,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137],{"class":38,"line":10268},[36,47114,38574],{"class":42},[36,47116,31352],{"class":5696},[36,47118,47],{"class":46},[36,47120,127],{"class":53},[36,47122,57],{"class":42},[36,47124,31407],{"class":5696},[36,47126,47],{"class":46},[36,47128,96],{"class":53},[36,47130,57],{"class":42},[36,47132,31361],{"class":5696},[36,47134,47],{"class":46},[36,47136,54],{"class":53},[36,47138,63],{"class":42},[36,47140,47141],{"class":38,"line":10273},[36,47142,38603],{"class":42},[36,47144,47145,47147,47149,47151],{"class":38,"line":10278},[36,47146,31323],{"class":53},[36,47148,42808],{"class":42},[36,47150,47],{"class":46},[36,47152,38486],{"class":42},[36,47154,47155,47157,47159,47161,47163,47165,47167,47169,47171,47173,47175,47177,47179,47181,47183],{"class":38,"line":10283},[36,47156,42706],{"class":42},[36,47158,42819],{"class":53},[36,47160,57],{"class":42},[36,47162,42636],{"class":53},[36,47164,42715],{"class":42},[36,47166,830],{"class":53},[36,47168,57],{"class":42},[36,47170,42832],{"class":53},[36,47172,42724],{"class":42},[36,47174,1214],{"class":53},[36,47176,57],{"class":42},[36,47178,1220],{"class":53},[36,47180,42733],{"class":42},[36,47182,824],{"class":53},[36,47184,38524],{"class":42},[36,47186,47187,47189,47191,47193,47195,47197,47199,47201,47203,47205,47207,47209,47211,47213,47215],{"class":38,"line":10292},[36,47188,42706],{"class":42},[36,47190,38934],{"class":53},[36,47192,57],{"class":42},[36,47194,21528],{"class":53},[36,47196,42715],{"class":42},[36,47198,1231],{"class":53},[36,47200,57],{"class":42},[36,47202,31978],{"class":53},[36,47204,42724],{"class":42},[36,47206,1413],{"class":53},[36,47208,57],{"class":42},[36,47210,824],{"class":53},[36,47212,42733],{"class":42},[36,47214,824],{"class":53},[36,47216,38524],{"class":42},[36,47218,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247],{"class":38,"line":10297},[36,47220,42706],{"class":42},[36,47222,38934],{"class":53},[36,47224,57],{"class":42},[36,47226,32547],{"class":53},[36,47228,42715],{"class":42},[36,47230,32547],{"class":53},[36,47232,57],{"class":42},[36,47234,35347],{"class":53},[36,47236,42724],{"class":42},[36,47238,1413],{"class":53},[36,47240,57],{"class":42},[36,47242,824],{"class":53},[36,47244,42733],{"class":42},[36,47246,824],{"class":53},[36,47248,38524],{"class":42},[36,47250,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277,47279],{"class":38,"line":10303},[36,47252,42706],{"class":42},[36,47254,38934],{"class":53},[36,47256,57],{"class":42},[36,47258,1231],{"class":53},[36,47260,42715],{"class":42},[36,47262,32547],{"class":53},[36,47264,57],{"class":42},[36,47266,42929],{"class":53},[36,47268,42724],{"class":42},[36,47270,818],{"class":53},[36,47272,57],{"class":42},[36,47274,824],{"class":53},[36,47276,42733],{"class":42},[36,47278,824],{"class":53},[36,47280,38524],{"class":42},[36,47282,47283,47285,47287,47289,47291,47293,47295,47297,47299,47301,47303,47305,47307,47309,47311],{"class":38,"line":10324},[36,47284,42706],{"class":42},[36,47286,42950],{"class":53},[36,47288,57],{"class":42},[36,47290,35347],{"class":53},[36,47292,42715],{"class":42},[36,47294,21528],{"class":53},[36,47296,57],{"class":42},[36,47298,42963],{"class":53},[36,47300,42724],{"class":42},[36,47302,818],{"class":53},[36,47304,57],{"class":42},[36,47306,32547],{"class":53},[36,47308,42733],{"class":42},[36,47310,32547],{"class":53},[36,47312,38524],{"class":42},[36,47314,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339],{"class":38,"line":10330},[36,47316,38574],{"class":42},[36,47318,31352],{"class":5696},[36,47320,47],{"class":46},[36,47322,127],{"class":53},[36,47324,57],{"class":42},[36,47326,31407],{"class":5696},[36,47328,47],{"class":46},[36,47330,96],{"class":53},[36,47332,57],{"class":42},[36,47334,31361],{"class":5696},[36,47336,47],{"class":46},[36,47338,54],{"class":53},[36,47340,63],{"class":42},[36,47342,47343],{"class":38,"line":10344},[36,47344,38603],{"class":42},[36,47346,47347,47349,47351,47353],{"class":38,"line":10350},[36,47348,31323],{"class":53},[36,47350,43016],{"class":42},[36,47352,47],{"class":46},[36,47354,38486],{"class":42},[36,47356,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385],{"class":38,"line":10377},[36,47358,42706],{"class":42},[36,47360,43027],{"class":53},[36,47362,57],{"class":42},[36,47364,35347],{"class":53},[36,47366,42715],{"class":42},[36,47368,21528],{"class":53},[36,47370,57],{"class":42},[36,47372,42963],{"class":53},[36,47374,42724],{"class":42},[36,47376,818],{"class":53},[36,47378,57],{"class":42},[36,47380,32547],{"class":53},[36,47382,42733],{"class":42},[36,47384,32547],{"class":53},[36,47386,38524],{"class":42},[36,47388,47389,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417],{"class":38,"line":10386},[36,47390,42706],{"class":42},[36,47392,43027],{"class":53},[36,47394,57],{"class":42},[36,47396,35417],{"class":53},[36,47398,42715],{"class":42},[36,47400,42636],{"class":53},[36,47402,57],{"class":42},[36,47404,35417],{"class":53},[36,47406,42724],{"class":42},[36,47408,1220],{"class":53},[36,47410,57],{"class":42},[36,47412,32547],{"class":53},[36,47414,42733],{"class":42},[36,47416,32547],{"class":53},[36,47418,38524],{"class":42},[36,47420,47421,47423,47425,47427,47429],{"class":38,"line":10392},[36,47422,43090],{"class":42},[36,47424,54],{"class":53},[36,47426,57],{"class":42},[36,47428,54],{"class":53},[36,47430,43099],{"class":42},[36,47432,47433],{"class":38,"line":10400},[36,47434,39267],{"class":42},[36,47436,47437,47439,47441,47443,47445],{"class":38,"line":10405},[36,47438,39272],{"class":42},[36,47440,43110],{"class":53},[36,47442,57],{"class":42},[36,47444,96],{"class":53},[36,47446,63],{"class":42},[36,47448,47449],{"class":38,"line":17084},[36,47450,38603],{"class":42},[36,47452,47453],{"class":38,"line":17090},[36,47454,43125],{"class":69},[36,47456,47457,47459,47461,47463,47465],{"class":38,"line":17113},[36,47458,3883],{"class":46},[36,47460,39345],{"class":42},[36,47462,26524],{"class":46},[36,47464,39350],{"class":53},[36,47466,39353],{"class":42},[36,47468,47469,47471,47473],{"class":38,"line":17119},[36,47470,5122],{"class":46},[36,47472,39365],{"class":53},[36,47474,39368],{"class":42},[36,47476,47477,47479,47481,47483,47485,47487,47489,47491,47493],{"class":38,"line":17142},[36,47478,39378],{"class":42},[36,47480,43152],{"class":5696},[36,47482,47],{"class":46},[36,47484,43157],{"class":405},[36,47486,57],{"class":42},[36,47488,39381],{"class":5696},[36,47490,47],{"class":46},[36,47492,39386],{"class":405},[36,47494,63],{"class":42},[36,47496,47497],{"class":38,"line":17156},[36,47498,43172],{"class":69},[36,47500,47501],{"class":38,"line":17176},[36,47502,43177],{"class":69},[36,47504,47505],{"class":38,"line":17182},[36,47506,43182],{"class":69},[36,47508,47509],{"class":38,"line":17193},[36,47510,43187],{"class":69},[36,47512,47513],{"class":38,"line":17216},[36,47514,43192],{"class":69},[36,47516,47517],{"class":38,"line":17238},[36,47518,43197],{"class":69},[36,47520,47521,47523,47525,47527,47529,47531],{"class":38,"line":17243},[36,47522,39398],{"class":46},[36,47524,39401],{"class":42},[36,47526,39404],{"class":46},[36,47528,39407],{"class":46},[36,47530,39410],{"class":53},[36,47532,4219],{"class":42},[36,47534,47535,47537,47539],{"class":38,"line":17249},[36,47536,39422],{"class":42},[36,47538,812],{"class":53},[36,47540,63],{"class":42},[36,47542,47543,47545,47547],{"class":38,"line":17263},[36,47544,43224],{"class":46},[36,47546,39365],{"class":53},[36,47548,39441],{"class":42},[36,47550,47551,47553,47555,47557,47559],{"class":38,"line":17276},[36,47552,43233],{"class":42},[36,47554,812],{"class":53},[36,47556,57],{"class":42},[36,47558,39463],{"class":53},[36,47560,63],{"class":42},[36,47562,47563,47565,47567,47569,47571,47573],{"class":38,"line":17281},[36,47564,43246],{"class":46},[36,47566,39401],{"class":42},[36,47568,39404],{"class":46},[36,47570,39407],{"class":46},[36,47572,39410],{"class":53},[36,47574,4219],{"class":42},[36,47576,47577,47579,47581],{"class":38,"line":17295},[36,47578,43261],{"class":42},[36,47580,812],{"class":53},[36,47582,63],{"class":42},[36,47584,47585],{"class":38,"line":17300},[36,47586,35642],{"class":69},[36,47588,47589,47591,47593],{"class":38,"line":17306},[36,47590,31279],{"class":46},[36,47592,31571],{"class":2443},[36,47594,31574],{"class":42},[36,47596,47597,47599,47601,47603],{"class":38,"line":17311},[36,47598,31579],{"class":42},[36,47600,47],{"class":46},[36,47602,31301],{"class":53},[36,47604,43288],{"class":42},[36,47606,47607,47609,47611,47613],{"class":38,"line":17325},[36,47608,31579],{"class":42},[36,47610,47],{"class":46},[36,47612,31301],{"class":53},[36,47614,43299],{"class":42},[36,47616,47617,47619,47621,47623],{"class":38,"line":17330},[36,47618,31579],{"class":42},[36,47620,47],{"class":46},[36,47622,31301],{"class":53},[36,47624,43310],{"class":42},[36,47626,47627,47629,47631,47633],{"class":38,"line":17335},[36,47628,31579],{"class":42},[36,47630,47],{"class":46},[36,47632,31301],{"class":53},[36,47634,43321],{"class":42},[36,47636,47637,47639,47641,47643],{"class":38,"line":17349},[36,47638,31579],{"class":42},[36,47640,47],{"class":46},[36,47642,31301],{"class":53},[36,47644,43332],{"class":42},[36,47646,47647,47649],{"class":38,"line":17361},[36,47648,15232],{"class":46},[36,47650,31687],{"class":42},[36,47652,47653],{"class":38,"line":17366},[36,47654,2880],{"emptyLinePlaceholder":553},[36,47656,47657],{"class":38,"line":17379},[36,47658,43347],{"class":69},[36,47660,47661,47663,47665,47667,47669],{"class":38,"line":17384},[36,47662,2011],{"class":46},[36,47664,31698],{"class":53},[36,47666,3429],{"class":46},[36,47668,31703],{"class":405},[36,47670,4219],{"class":42},[36,47672,47673,47675,47677,47679,47681,47683,47685,47687,47689],{"class":38,"line":17389},[36,47674,31715],{"class":42},[36,47676,47],{"class":46},[36,47678,30930],{"class":42},[36,47680,31722],{"class":405},[36,47682,2184],{"class":46},[36,47684,31727],{"class":42},[36,47686,2181],{"class":46},[36,47688,30955],{"class":405},[36,47690,63],{"class":42},[36,47692,47693,47695,47697],{"class":38,"line":17394},[36,47694,31767],{"class":42},[36,47696,47],{"class":46},[36,47698,43388],{"class":42},[36,47700,47701,47703,47705,47707,47709,47711,47713,47715],{"class":38,"line":17407},[36,47702,31777],{"class":53},[36,47704,31780],{"class":42},[36,47706,54],{"class":53},[36,47708,57],{"class":42},[36,47710,31978],{"class":53},[36,47712,57],{"class":42},[36,47714,31978],{"class":53},[36,47716,31793],{"class":42},[22478,47718,47720],{"id":47719},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47722,47723],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,47725,47727],{"className":28,"code":47726,"language":30,"meta":31,"style":31},"# 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",[33,47728,47729,47734,47747,47752,47758,47763,47773,47777,47782,47792,47796,47801,47811,47828,47832,47837,47849,47861,47892,47901,47911,47921,47925,47930,47945,47949,47954,47959,47964,47974,47979,48004,48008,48013,48028,48032,48045,48049,48054,48059,48064,48069,48074,48084,48094,48117,48125,48133,48141,48145,48157,48161,48166,48170,48174,48181,48201,48225,48232,48246,48251,48256,48260,48274,48278,48290],{"__ignoreMap":31},[36,47730,47731],{"class":38,"line":39},[36,47732,47733],{"class":69},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,47735,47736,47738,47741,47744],{"class":38,"line":66},[36,47737,31215],{"class":46},[36,47739,47740],{"class":53}," PIL",[36,47742,47743],{"class":46}," import",[36,47745,47746],{"class":42}," Image\n",[36,47748,47749],{"class":38,"line":73},[36,47750,47751],{"class":69},"# os 用来处理文件夹和文件路径\n",[36,47753,47754,47756],{"class":38,"line":79},[36,47755,30871],{"class":46},[36,47757,45782],{"class":42},[36,47759,47760],{"class":38,"line":85},[36,47761,47762],{"class":69},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,47764,47765,47767,47769,47771],{"class":38,"line":419},[36,47766,30871],{"class":46},[36,47768,31858],{"class":42},[36,47770,31861],{"class":46},[36,47772,31864],{"class":42},[36,47774,47775],{"class":38,"line":425},[36,47776,2880],{"emptyLinePlaceholder":553},[36,47778,47779],{"class":38,"line":431},[36,47780,47781],{"class":69},"# 文件夹路径，包含所有图片文件\n",[36,47783,47784,47787,47789],{"class":38,"line":437},[36,47785,47786],{"class":42},"folder_path ",[36,47788,47],{"class":46},[36,47790,47791],{"class":405}," 'data_cat_dog'\n",[36,47793,47794],{"class":38,"line":443},[36,47795,2880],{"emptyLinePlaceholder":553},[36,47797,47798],{"class":38,"line":2092},[36,47799,47800],{"class":69},"# 初始化累积变量\n",[36,47802,47803,47806,47808],{"class":38,"line":2097},[36,47804,47805],{"class":42},"total_pixels ",[36,47807,47],{"class":46},[36,47809,47810],{"class":53}," 0\n",[36,47812,47813,47816,47818,47821,47823,47825],{"class":38,"line":2103},[36,47814,47815],{"class":42},"sum_normalized_pixel_values ",[36,47817,47],{"class":46},[36,47819,47820],{"class":42}," np.zeros(",[36,47822,127],{"class":53},[36,47824,46285],{"class":42},[36,47826,47827],{"class":69},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,47829,47830],{"class":38,"line":2108},[36,47831,2880],{"emptyLinePlaceholder":553},[36,47833,47834],{"class":38,"line":2122},[36,47835,47836],{"class":69},"# 遍历文件夹中的图片文件\n",[36,47838,47839,47841,47844,47846],{"class":38,"line":2127},[36,47840,3505],{"class":46},[36,47842,47843],{"class":42}," root, dirs, files ",[36,47845,26524],{"class":46},[36,47847,47848],{"class":42}," os.walk(folder_path):\n",[36,47850,47851,47853,47856,47858],{"class":38,"line":2133},[36,47852,3681],{"class":46},[36,47854,47855],{"class":42}," filename ",[36,47857,26524],{"class":46},[36,47859,47860],{"class":42}," files:\n",[36,47862,47863,47865,47868,47871,47873,47876,47878,47881,47883,47886,47889],{"class":38,"line":2154},[36,47864,2977],{"class":46},[36,47866,47867],{"class":42}," filename.endswith((",[36,47869,47870],{"class":405},"'.jpg'",[36,47872,12915],{"class":42},[36,47874,47875],{"class":405},"'.jpeg'",[36,47877,12915],{"class":42},[36,47879,47880],{"class":405},"'.png'",[36,47882,12915],{"class":42},[36,47884,47885],{"class":405},"'.bmp'",[36,47887,47888],{"class":42},")):  ",[36,47890,47891],{"class":69},"# 可根据实际情况添加其他格式\n",[36,47893,47894,47896,47898],{"class":38,"line":2159},[36,47895,46150],{"class":42},[36,47897,47],{"class":46},[36,47899,47900],{"class":42}," os.path.join(root, filename)\n",[36,47902,47903,47906,47908],{"class":38,"line":2173},[36,47904,47905],{"class":42},"            image ",[36,47907,47],{"class":46},[36,47909,47910],{"class":42}," Image.open(image_path)\n",[36,47912,47913,47916,47918],{"class":38,"line":2178},[36,47914,47915],{"class":42},"            image_array ",[36,47917,47],{"class":46},[36,47919,47920],{"class":42}," np.array(image)\n",[36,47922,47923],{"class":38,"line":2207},[36,47924,2880],{"emptyLinePlaceholder":553},[36,47926,47927],{"class":38,"line":2212},[36,47928,47929],{"class":69},"            # 归一化像素值到0-1之间\n",[36,47931,47932,47935,47937,47940,47942],{"class":38,"line":2229},[36,47933,47934],{"class":42},"            normalized_image_array ",[36,47936,47],{"class":46},[36,47938,47939],{"class":42}," image_array ",[36,47941,1197],{"class":46},[36,47943,47944],{"class":53}," 255.0\n",[36,47946,47947],{"class":38,"line":2234},[36,47948,2880],{"emptyLinePlaceholder":553},[36,47950,47951],{"class":38,"line":2239},[36,47952,47953],{"class":69},"            # print(image_path)\n",[36,47955,47956],{"class":38,"line":2244},[36,47957,47958],{"class":69},"            # print(normalized_image_array.shape)\n",[36,47960,47961],{"class":38,"line":2258},[36,47962,47963],{"class":69},"            # 累积归一化后的像素值和像素数量\n",[36,47965,47966,47969,47971],{"class":38,"line":2263},[36,47967,47968],{"class":42},"            total_pixels ",[36,47970,9957],{"class":46},[36,47972,47973],{"class":42}," normalized_image_array.size\n",[36,47975,47976],{"class":38,"line":3057},[36,47977,47978],{"class":69},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,47980,47981,47984,47986,47989,47992,47994,47996,47998,48000,48002],{"class":38,"line":3071},[36,47982,47983],{"class":42},"            sum_normalized_pixel_values ",[36,47985,9957],{"class":46},[36,47987,47988],{"class":42}," np.sum(normalized_image_array, ",[36,47990,47991],{"class":5696},"axis",[36,47993,47],{"class":46},[36,47995,345],{"class":42},[36,47997,812],{"class":53},[36,47999,12915],{"class":42},[36,48001,54],{"class":53},[36,48003,370],{"class":42},[36,48005,48006],{"class":38,"line":3079},[36,48007,2880],{"emptyLinePlaceholder":553},[36,48009,48010],{"class":38,"line":3084},[36,48011,48012],{"class":69},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,48014,48015,48018,48020,48023,48025],{"class":38,"line":3090},[36,48016,48017],{"class":42},"mean ",[36,48019,47],{"class":46},[36,48021,48022],{"class":42}," sum_normalized_pixel_values ",[36,48024,1197],{"class":46},[36,48026,48027],{"class":42}," total_pixels\n",[36,48029,48030],{"class":38,"line":3096},[36,48031,2880],{"emptyLinePlaceholder":553},[36,48033,48034,48037,48039,48041,48043],{"class":38,"line":3101},[36,48035,48036],{"class":42},"sum_squared_diff ",[36,48038,47],{"class":46},[36,48040,47820],{"class":42},[36,48042,127],{"class":53},[36,48044,63],{"class":42},[36,48046,48047],{"class":38,"line":8428},[36,48048,2880],{"emptyLinePlaceholder":553},[36,48050,48051],{"class":38,"line":8452},[36,48052,48053],{"class":69},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,48055,48056],{"class":38,"line":8457},[36,48057,48058],{"class":69},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,48060,48061],{"class":38,"line":8463},[36,48062,48063],{"class":69},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,48065,48066],{"class":38,"line":8490},[36,48067,48068],{"class":69},"# Image.open(image_path)：打开图片\n",[36,48070,48071],{"class":38,"line":8495},[36,48072,48073],{"class":69},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,48075,48076,48078,48080,48082],{"class":38,"line":8501},[36,48077,3505],{"class":46},[36,48079,47843],{"class":42},[36,48081,26524],{"class":46},[36,48083,47848],{"class":42},[36,48085,48086,48088,48090,48092],{"class":38,"line":8513},[36,48087,3681],{"class":46},[36,48089,47855],{"class":42},[36,48091,26524],{"class":46},[36,48093,47860],{"class":42},[36,48095,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114],{"class":38,"line":8525},[36,48097,2977],{"class":46},[36,48099,47867],{"class":42},[36,48101,47870],{"class":405},[36,48103,12915],{"class":42},[36,48105,47875],{"class":405},[36,48107,12915],{"class":42},[36,48109,47880],{"class":405},[36,48111,12915],{"class":42},[36,48113,47885],{"class":405},[36,48115,48116],{"class":42},")):\n",[36,48118,48119,48121,48123],{"class":38,"line":8537},[36,48120,46150],{"class":42},[36,48122,47],{"class":46},[36,48124,47900],{"class":42},[36,48126,48127,48129,48131],{"class":38,"line":10196},[36,48128,47905],{"class":42},[36,48130,47],{"class":46},[36,48132,47910],{"class":42},[36,48134,48135,48137,48139],{"class":38,"line":10221},[36,48136,47915],{"class":42},[36,48138,47],{"class":46},[36,48140,47920],{"class":42},[36,48142,48143],{"class":38,"line":10244},[36,48144,47929],{"class":69},[36,48146,48147,48149,48151,48153,48155],{"class":38,"line":10268},[36,48148,47934],{"class":42},[36,48150,47],{"class":46},[36,48152,47939],{"class":42},[36,48154,1197],{"class":46},[36,48156,47944],{"class":53},[36,48158,48159],{"class":38,"line":10273},[36,48160,47958],{"class":69},[36,48162,48163],{"class":38,"line":10278},[36,48164,48165],{"class":69},"            # print(mean.shape)\n",[36,48167,48168],{"class":38,"line":10283},[36,48169,47953],{"class":69},[36,48171,48172],{"class":38,"line":10292},[36,48173,2880],{"emptyLinePlaceholder":553},[36,48175,48176,48179],{"class":38,"line":10297},[36,48177,48178],{"class":46},"            try",[36,48180,4219],{"class":42},[36,48182,48183,48186,48188,48191,48193,48196,48198],{"class":38,"line":10303},[36,48184,48185],{"class":42},"                diff ",[36,48187,47],{"class":46},[36,48189,48190],{"class":42}," (normalized_image_array ",[36,48192,173],{"class":46},[36,48194,48195],{"class":42}," mean) ",[36,48197,11141],{"class":46},[36,48199,48200],{"class":53}," 2\n",[36,48202,48203,48206,48208,48211,48213,48215,48217,48219,48221,48223],{"class":38,"line":10324},[36,48204,48205],{"class":42},"                sum_squared_diff ",[36,48207,9957],{"class":46},[36,48209,48210],{"class":42}," np.sum(diff, ",[36,48212,47991],{"class":5696},[36,48214,47],{"class":46},[36,48216,345],{"class":42},[36,48218,812],{"class":53},[36,48220,12915],{"class":42},[36,48222,54],{"class":53},[36,48224,370],{"class":42},[36,48226,48227,48230],{"class":38,"line":10330},[36,48228,48229],{"class":46},"            except",[36,48231,4219],{"class":42},[36,48233,48234,48237,48239,48241,48244],{"class":38,"line":10344},[36,48235,48236],{"class":53},"                print",[36,48238,345],{"class":42},[36,48240,677],{"class":46},[36,48242,48243],{"class":405},"\"捕获到自定义异常\"",[36,48245,63],{"class":42},[36,48247,48248],{"class":38,"line":10350},[36,48249,48250],{"class":69},"            # diff = (normalized_image_array - mean) ** 2\n",[36,48252,48253],{"class":38,"line":10377},[36,48254,48255],{"class":69},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,48257,48258],{"class":38,"line":10386},[36,48259,2880],{"emptyLinePlaceholder":553},[36,48261,48262,48265,48267,48270,48272],{"class":38,"line":10392},[36,48263,48264],{"class":42},"variance ",[36,48266,47],{"class":46},[36,48268,48269],{"class":42}," sum_squared_diff ",[36,48271,1197],{"class":46},[36,48273,48027],{"class":42},[36,48275,48276],{"class":38,"line":10400},[36,48277,2880],{"emptyLinePlaceholder":553},[36,48279,48280,48282,48284,48287],{"class":38,"line":10405},[36,48281,30894],{"class":53},[36,48283,345],{"class":42},[36,48285,48286],{"class":405},"\"Mean:\"",[36,48288,48289],{"class":42},", mean)\n",[36,48291,48292,48294,48296,48299],{"class":38,"line":17084},[36,48293,30894],{"class":53},[36,48295,345],{"class":42},[36,48297,48298],{"class":405},"\"Variance:\"",[36,48300,48301],{"class":42},", variance)\n",[26,48303,48305],{"className":28,"code":48304,"language":30,"meta":31,"style":31},"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",[33,48306,48307,48313,48319,48329,48335,48345,48359,48369,48379,48389,48393,48403,48413,48417,48421,48429,48434,48439,48458,48462,48467,48472,48477,48482,48523,48528,48538,48543,48556,48561,48566,48571,48576,48581,48585,48590,48595,48617,48621,48653,48667,48677,48687,48691,48701,48715,48725,48735,48745,48751,48755,48759,48763,48767,48771,48779,48799,48803,48807,48811,48815,48831,48835,48839,48847,48851,48855,48863,48867,48871,48875,48883,48887,48891,48895,48903,48907,48915,48919,48927,48931,48939,48943,48951,48955,48959,48967,48971,48975,48987,49011,49025,49029,49033,49037,49045,49049,49057,49061,49069,49073,49081,49085,49093,49097,49105,49109,49121,49125,49133,49137,49145,49149,49153,49157,49161,49169,49173,49189,49193,49201,49205,49209,49213,49217,49221,49225,49229,49245,49249,49261,49265,49277,49281,49293,49297,49305,49309,49317,49321,49325,49329,49335,49339,49347,49351,49367,49371,49379,49383,49399,49411,49415,49427,49431,49435,49443,49447,49451,49459,49463,49471,49475,49483,49487,49491,49533,49575,49579,49583,49599,49603,49619,49623,49627,49635,49639,49643,49655,49693,49697,49701,49709,49713,49727,49737,49743,49749,49755,49761,49765,49769,49775,49779,49783,49791,49795,49813,49817,49821,49825,49841,49845,49849,49853,49857,49861,49881,49901,49905,49909,49913,49921,49929,49933,49949,49969,49989,49993,49998,50007,50016,50021,50026,50031,50044,50049,50058,50067,50084],{"__ignoreMap":31},[36,48308,48309,48311],{"class":38,"line":39},[36,48310,30871],{"class":46},[36,48312,32299],{"class":42},[36,48314,48315,48317],{"class":38,"line":66},[36,48316,30871],{"class":46},[36,48318,32306],{"class":42},[36,48320,48321,48323,48325,48327],{"class":38,"line":73},[36,48322,30871],{"class":46},[36,48324,32317],{"class":42},[36,48326,31861],{"class":46},[36,48328,32322],{"class":42},[36,48330,48331,48333],{"class":38,"line":79},[36,48332,30871],{"class":46},[36,48334,30874],{"class":42},[36,48336,48337,48339,48341,48343],{"class":38,"line":85},[36,48338,31215],{"class":46},[36,48340,31893],{"class":42},[36,48342,30871],{"class":46},[36,48344,32339],{"class":42},[36,48346,48347,48349,48351,48353,48356],{"class":38,"line":419},[36,48348,31215],{"class":46},[36,48350,31846],{"class":42},[36,48352,30871],{"class":46},[36,48354,48355],{"class":42}," ImageFolder ",[36,48357,48358],{"class":69},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,48360,48361,48363,48365,48367],{"class":38,"line":425},[36,48362,31215],{"class":46},[36,48364,31876],{"class":42},[36,48366,30871],{"class":46},[36,48368,31881],{"class":42},[36,48370,48371,48373,48375,48377],{"class":38,"line":431},[36,48372,30871],{"class":46},[36,48374,31893],{"class":42},[36,48376,31861],{"class":46},[36,48378,31898],{"class":42},[36,48380,48381,48383,48385,48387],{"class":38,"line":437},[36,48382,30871],{"class":46},[36,48384,31910],{"class":42},[36,48386,31861],{"class":46},[36,48388,31915],{"class":42},[36,48390,48391],{"class":38,"line":443},[36,48392,32384],{"class":69},[36,48394,48395,48397,48399,48401],{"class":38,"line":2092},[36,48396,31215],{"class":46},[36,48398,32391],{"class":42},[36,48400,30871],{"class":46},[36,48402,43508],{"class":42},[36,48404,48405,48407,48409,48411],{"class":38,"line":2097},[36,48406,31215],{"class":46},[36,48408,31218],{"class":42},[36,48410,30871],{"class":46},[36,48412,31223],{"class":42},[36,48414,48415],{"class":38,"line":2103},[36,48416,2880],{"emptyLinePlaceholder":553},[36,48418,48419],{"class":38,"line":2108},[36,48420,32419],{"class":69},[36,48422,48423,48425,48427],{"class":38,"line":2122},[36,48424,32424],{"class":46},[36,48426,32427],{"class":2443},[36,48428,32430],{"class":42},[36,48430,48431],{"class":38,"line":2127},[36,48432,48433],{"class":69},"    # 导入自己的数据集，并进行数据处理\n",[36,48435,48436],{"class":38,"line":2133},[36,48437,48438],{"class":69},"    # 定义数据集的路径\n",[36,48440,48441,48444,48446,48448,48450,48452,48456],{"class":38,"line":2154},[36,48442,48443],{"class":53},"    ROOT_PATH",[36,48445,47],{"class":46},[36,48447,1283],{"class":46},[36,48449,870],{"class":405},[36,48451,1171],{"class":53},[36,48453,48455],{"class":48454},"sA_wV","\u002Fdata\u002Ftrain",[36,48457,25614],{"class":405},[36,48459,48460],{"class":38,"line":2159},[36,48461,2880],{"emptyLinePlaceholder":553},[36,48463,48464],{"class":38,"line":2173},[36,48465,48466],{"class":69},"    # 定义归一化方法\n",[36,48468,48469],{"class":38,"line":2178},[36,48470,48471],{"class":69},"    # 这里需要先计算一下数据集的均值和方差\n",[36,48473,48474],{"class":38,"line":2207},[36,48475,48476],{"class":69},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,48478,48479],{"class":38,"line":2212},[36,48480,48481],{"class":69},"    # 第一个参数是均值，第二个参数是方差\n",[36,48483,48484,48487,48489,48492,48495,48497,48500,48502,48505,48508,48511,48513,48516,48518,48521],{"class":38,"line":2229},[36,48485,48486],{"class":42},"    normalize",[36,48488,47],{"class":46},[36,48490,48491],{"class":42},"transforms.Normalize([",[36,48493,48494],{"class":53},"0.162",[36,48496,57],{"class":42},[36,48498,48499],{"class":53},"0.151",[36,48501,57],{"class":42},[36,48503,48504],{"class":53},"0.138",[36,48506,48507],{"class":42},"],[",[36,48509,48510],{"class":53},"0.058",[36,48512,57],{"class":42},[36,48514,48515],{"class":53},"0.052",[36,48517,57],{"class":42},[36,48519,48520],{"class":53},"0.048",[36,48522,5137],{"class":42},[36,48524,48525],{"class":38,"line":2234},[36,48526,48527],{"class":69},"    # 定义数据集处理方法变量\n",[36,48529,48530,48533,48535],{"class":38,"line":2239},[36,48531,48532],{"class":42},"    train_transform",[36,48534,47],{"class":46},[36,48536,48537],{"class":42},"transforms.Compose([\n",[36,48539,48540],{"class":38,"line":2244},[36,48541,48542],{"class":69},"        # 调整图像大小为224*224\n",[36,48544,48545,48548,48550,48552,48554],{"class":38,"line":2258},[36,48546,48547],{"class":42},"        transforms.Resize((",[36,48549,31978],{"class":53},[36,48551,57],{"class":42},[36,48553,31978],{"class":53},[36,48555,43099],{"class":42},[36,48557,48558],{"class":38,"line":2263},[36,48559,48560],{"class":69},"        # 将图像转换为张量\n",[36,48562,48563],{"class":38,"line":3057},[36,48564,48565],{"class":42},"        transforms.ToTensor(),\n",[36,48567,48568],{"class":38,"line":3071},[36,48569,48570],{"class":42},"        normalize])\n",[36,48572,48573],{"class":38,"line":3079},[36,48574,48575],{"class":69},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,48577,48578],{"class":38,"line":3084},[36,48579,48580],{"class":69},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,48582,48583],{"class":38,"line":3090},[36,48584,2880],{"emptyLinePlaceholder":553},[36,48586,48587],{"class":38,"line":3096},[36,48588,48589],{"class":69},"    # 加载数据集\n",[36,48591,48592],{"class":38,"line":3101},[36,48593,48594],{"class":69},"    # 传入数据集路径与处理方法\n",[36,48596,48597,48599,48601,48604,48607,48609,48612,48614],{"class":38,"line":8428},[36,48598,32435],{"class":42},[36,48600,47],{"class":46},[36,48602,48603],{"class":42},"ImageFolder(",[36,48605,48606],{"class":53},"ROOT_PATH",[36,48608,57],{"class":42},[36,48610,48611],{"class":5696},"transform",[36,48613,47],{"class":46},[36,48615,48616],{"class":42},"train_transform)\n",[36,48618,48619],{"class":38,"line":8452},[36,48620,2880],{"emptyLinePlaceholder":553},[36,48622,48623,48625,48627,48629,48631,48633,48635,48637,48639,48641,48643,48645,48647,48649,48651],{"class":38,"line":8457},[36,48624,32487],{"class":42},[36,48626,47],{"class":46},[36,48628,32492],{"class":42},[36,48630,32495],{"class":53},[36,48632,345],{"class":42},[36,48634,32500],{"class":53},[36,48636,1071],{"class":46},[36,48638,7838],{"class":53},[36,48640,32507],{"class":42},[36,48642,32495],{"class":53},[36,48644,345],{"class":42},[36,48646,32514],{"class":53},[36,48648,1071],{"class":46},[36,48650,7838],{"class":53},[36,48652,32521],{"class":42},[36,48654,48655,48657,48659,48661,48663,48665],{"class":38,"line":8463},[36,48656,32526],{"class":42},[36,48658,47],{"class":46},[36,48660,32531],{"class":42},[36,48662,32014],{"class":5696},[36,48664,47],{"class":46},[36,48666,32019],{"class":42},[36,48668,48669,48671,48673,48675],{"class":38,"line":8490},[36,48670,32542],{"class":5696},[36,48672,47],{"class":46},[36,48674,818],{"class":53},[36,48676,31944],{"class":42},[36,48678,48679,48681,48683,48685],{"class":38,"line":8495},[36,48680,32554],{"class":5696},[36,48682,47],{"class":46},[36,48684,31954],{"class":53},[36,48686,31944],{"class":42},[36,48688,48689],{"class":38,"line":8501},[36,48690,32565],{"class":69},[36,48692,48693,48695,48697,48699],{"class":38,"line":8513},[36,48694,32570],{"class":5696},[36,48696,47],{"class":46},[36,48698,1012],{"class":53},[36,48700,63],{"class":42},[36,48702,48703,48705,48707,48709,48711,48713],{"class":38,"line":8525},[36,48704,32581],{"class":42},[36,48706,47],{"class":46},[36,48708,32011],{"class":42},[36,48710,32014],{"class":5696},[36,48712,47],{"class":46},[36,48714,32592],{"class":42},[36,48716,48717,48719,48721,48723],{"class":38,"line":8537},[36,48718,32597],{"class":5696},[36,48720,47],{"class":46},[36,48722,818],{"class":53},[36,48724,31944],{"class":42},[36,48726,48727,48729,48731,48733],{"class":38,"line":10196},[36,48728,32608],{"class":5696},[36,48730,47],{"class":46},[36,48732,31954],{"class":53},[36,48734,31944],{"class":42},[36,48736,48737,48739,48741,48743],{"class":38,"line":10221},[36,48738,32619],{"class":5696},[36,48740,47],{"class":46},[36,48742,1012],{"class":53},[36,48744,63],{"class":42},[36,48746,48747,48749],{"class":38,"line":10244},[36,48748,4570],{"class":46},[36,48750,32632],{"class":42},[36,48752,48753],{"class":38,"line":10268},[36,48754,2880],{"emptyLinePlaceholder":553},[36,48756,48757],{"class":38,"line":10273},[36,48758,32641],{"class":69},[36,48760,48761],{"class":38,"line":10278},[36,48762,32646],{"class":69},[36,48764,48765],{"class":38,"line":10283},[36,48766,2880],{"emptyLinePlaceholder":553},[36,48768,48769],{"class":38,"line":10292},[36,48770,32655],{"class":69},[36,48772,48773,48775,48777],{"class":38,"line":10297},[36,48774,32424],{"class":46},[36,48776,32662],{"class":2443},[36,48778,32665],{"class":42},[36,48780,48781,48783,48785,48787,48789,48791,48793,48795,48797],{"class":38,"line":10303},[36,48782,31715],{"class":42},[36,48784,47],{"class":46},[36,48786,30930],{"class":42},[36,48788,31722],{"class":405},[36,48790,2184],{"class":46},[36,48792,31727],{"class":42},[36,48794,2181],{"class":46},[36,48796,32684],{"class":405},[36,48798,63],{"class":42},[36,48800,48801],{"class":38,"line":10324},[36,48802,2880],{"emptyLinePlaceholder":553},[36,48804,48805],{"class":38,"line":10330},[36,48806,32699],{"class":69},[36,48808,48809],{"class":38,"line":10344},[36,48810,32704],{"class":69},[36,48812,48813],{"class":38,"line":10350},[36,48814,32709],{"class":69},[36,48816,48817,48819,48821,48823,48825,48827,48829],{"class":38,"line":10377},[36,48818,32714],{"class":42},[36,48820,47],{"class":46},[36,48822,32719],{"class":42},[36,48824,32722],{"class":5696},[36,48826,47],{"class":46},[36,48828,32727],{"class":53},[36,48830,63],{"class":42},[36,48832,48833],{"class":38,"line":10386},[36,48834,2880],{"emptyLinePlaceholder":553},[36,48836,48837],{"class":38,"line":10392},[36,48838,32738],{"class":69},[36,48840,48841,48843,48845],{"class":38,"line":10400},[36,48842,32743],{"class":42},[36,48844,47],{"class":46},[36,48846,32748],{"class":42},[36,48848,48849],{"class":38,"line":10405},[36,48850,2880],{"emptyLinePlaceholder":553},[36,48852,48853],{"class":38,"line":17084},[36,48854,32757],{"class":69},[36,48856,48857,48859,48861],{"class":38,"line":17090},[36,48858,31767],{"class":42},[36,48860,47],{"class":46},[36,48862,32766],{"class":42},[36,48864,48865],{"class":38,"line":17113},[36,48866,32771],{"class":69},[36,48868,48869],{"class":38,"line":17119},[36,48870,32776],{"class":69},[36,48872,48873],{"class":38,"line":17142},[36,48874,32781],{"class":69},[36,48876,48877,48879,48881],{"class":38,"line":17156},[36,48878,32786],{"class":42},[36,48880,47],{"class":46},[36,48882,32791],{"class":42},[36,48884,48885],{"class":38,"line":17176},[36,48886,2880],{"emptyLinePlaceholder":553},[36,48888,48889],{"class":38,"line":17182},[36,48890,32804],{"class":69},[36,48892,48893],{"class":38,"line":17193},[36,48894,32809],{"class":69},[36,48896,48897,48899,48901],{"class":38,"line":17216},[36,48898,32814],{"class":42},[36,48900,47],{"class":46},[36,48902,32819],{"class":53},[36,48904,48905],{"class":38,"line":17238},[36,48906,32824],{"class":69},[36,48908,48909,48911,48913],{"class":38,"line":17243},[36,48910,32829],{"class":42},[36,48912,47],{"class":46},[36,48914,32834],{"class":42},[36,48916,48917],{"class":38,"line":17249},[36,48918,32839],{"class":69},[36,48920,48921,48923,48925],{"class":38,"line":17263},[36,48922,32844],{"class":42},[36,48924,47],{"class":46},[36,48926,32834],{"class":42},[36,48928,48929],{"class":38,"line":17276},[36,48930,32853],{"class":69},[36,48932,48933,48935,48937],{"class":38,"line":17281},[36,48934,32858],{"class":42},[36,48936,47],{"class":46},[36,48938,32834],{"class":42},[36,48940,48941],{"class":38,"line":17295},[36,48942,32867],{"class":69},[36,48944,48945,48947,48949],{"class":38,"line":17300},[36,48946,32872],{"class":42},[36,48948,47],{"class":46},[36,48950,32834],{"class":42},[36,48952,48953],{"class":38,"line":17306},[36,48954,2880],{"emptyLinePlaceholder":553},[36,48956,48957],{"class":38,"line":17311},[36,48958,32885],{"class":69},[36,48960,48961,48963,48965],{"class":38,"line":17325},[36,48962,32890],{"class":42},[36,48964,47],{"class":46},[36,48966,32895],{"class":42},[36,48968,48969],{"class":38,"line":17330},[36,48970,2880],{"emptyLinePlaceholder":553},[36,48972,48973],{"class":38,"line":17335},[36,48974,32908],{"class":69},[36,48976,48977,48979,48981,48983,48985],{"class":38,"line":17349},[36,48978,3681],{"class":46},[36,48980,32915],{"class":42},[36,48982,26524],{"class":46},[36,48984,32920],{"class":53},[36,48986,32923],{"class":42},[36,48988,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009],{"class":38,"line":17361},[36,48990,32928],{"class":53},[36,48992,345],{"class":42},[36,48994,32933],{"class":405},[36,48996,32936],{"class":53},[36,48998,1197],{"class":405},[36,49000,32936],{"class":53},[36,49002,870],{"class":405},[36,49004,32945],{"class":42},[36,49006,173],{"class":46},[36,49008,54],{"class":53},[36,49010,370],{"class":42},[36,49012,49013,49015,49017,49019,49021,49023],{"class":38,"line":17366},[36,49014,32928],{"class":53},[36,49016,345],{"class":42},[36,49018,32960],{"class":405},[36,49020,1071],{"class":46},[36,49022,1062],{"class":53},[36,49024,63],{"class":42},[36,49026,49027],{"class":38,"line":17379},[36,49028,2880],{"emptyLinePlaceholder":553},[36,49030,49031],{"class":38,"line":17384},[36,49032,32975],{"class":69},[36,49034,49035],{"class":38,"line":17389},[36,49036,32980],{"class":69},[36,49038,49039,49041,49043],{"class":38,"line":17394},[36,49040,32985],{"class":42},[36,49042,47],{"class":46},[36,49044,32819],{"class":53},[36,49046,49047],{"class":38,"line":17407},[36,49048,32994],{"class":69},[36,49050,49051,49053,49055],{"class":38,"line":17412},[36,49052,32999],{"class":42},[36,49054,47],{"class":46},[36,49056,3565],{"class":53},[36,49058,49059],{"class":38,"line":33110},[36,49060,33008],{"class":69},[36,49062,49063,49065,49067],{"class":38,"line":33116},[36,49064,33013],{"class":42},[36,49066,47],{"class":46},[36,49068,32819],{"class":53},[36,49070,49071],{"class":38,"line":33122},[36,49072,33022],{"class":69},[36,49074,49075,49077,49079],{"class":38,"line":33128},[36,49076,33027],{"class":42},[36,49078,47],{"class":46},[36,49080,3565],{"class":53},[36,49082,49083],{"class":38,"line":33134},[36,49084,33036],{"class":69},[36,49086,49087,49089,49091],{"class":38,"line":33145},[36,49088,33041],{"class":42},[36,49090,47],{"class":46},[36,49092,3565],{"class":53},[36,49094,49095],{"class":38,"line":33151},[36,49096,33050],{"class":69},[36,49098,49099,49101,49103],{"class":38,"line":33171},[36,49100,33055],{"class":42},[36,49102,47],{"class":46},[36,49104,3565],{"class":53},[36,49106,49107],{"class":38,"line":33177},[36,49108,33064],{"class":69},[36,49110,49111,49113,49115,49117,49119],{"class":38,"line":33188},[36,49112,3883],{"class":46},[36,49114,32078],{"class":42},[36,49116,26524],{"class":46},[36,49118,32083],{"class":53},[36,49120,33077],{"class":42},[36,49122,49123],{"class":38,"line":33194},[36,49124,33082],{"class":69},[36,49126,49127,49129,49131],{"class":38,"line":33200},[36,49128,33087],{"class":42},[36,49130,47],{"class":46},[36,49132,33092],{"class":42},[36,49134,49135],{"class":38,"line":33206},[36,49136,33097],{"class":69},[36,49138,49139,49141,49143],{"class":38,"line":33212},[36,49140,33102],{"class":42},[36,49142,47],{"class":46},[36,49144,33107],{"class":42},[36,49146,49147],{"class":38,"line":33218},[36,49148,33113],{"class":69},[36,49150,49151],{"class":38,"line":33224},[36,49152,33119],{"class":42},[36,49154,49155],{"class":38,"line":33230},[36,49156,33125],{"class":69},[36,49158,49159],{"class":38,"line":33250},[36,49160,33131],{"class":69},[36,49162,49163,49165,49167],{"class":38,"line":33256},[36,49164,33137],{"class":42},[36,49166,47],{"class":46},[36,49168,33142],{"class":42},[36,49170,49171],{"class":38,"line":33272},[36,49172,33148],{"class":69},[36,49174,49175,49177,49179,49181,49183,49185,49187],{"class":38,"line":33278},[36,49176,33154],{"class":42},[36,49178,47],{"class":46},[36,49180,33159],{"class":42},[36,49182,33162],{"class":5696},[36,49184,47],{"class":46},[36,49186,54],{"class":53},[36,49188,63],{"class":42},[36,49190,49191],{"class":38,"line":33292},[36,49192,33174],{"class":69},[36,49194,49195,49197,49199],{"class":38,"line":33298},[36,49196,33180],{"class":42},[36,49198,47],{"class":46},[36,49200,33185],{"class":42},[36,49202,49203],{"class":38,"line":33313},[36,49204,33191],{"class":69},[36,49206,49207],{"class":38,"line":33319},[36,49208,33197],{"class":42},[36,49210,49211],{"class":38,"line":33328},[36,49212,33203],{"class":69},[36,49214,49215],{"class":38,"line":33334},[36,49216,33209],{"class":42},[36,49218,49219],{"class":38,"line":33343},[36,49220,33215],{"class":69},[36,49222,49223],{"class":38,"line":33349},[36,49224,33221],{"class":42},[36,49226,49227],{"class":38,"line":33355},[36,49228,33227],{"class":69},[36,49230,49231,49233,49235,49237,49239,49241,49243],{"class":38,"line":33364},[36,49232,33233],{"class":42},[36,49234,9957],{"class":46},[36,49236,33238],{"class":42},[36,49238,1071],{"class":46},[36,49240,33243],{"class":42},[36,49242,812],{"class":53},[36,49244,63],{"class":42},[36,49246,49247],{"class":38,"line":33370},[36,49248,33253],{"class":69},[36,49250,49251,49253,49255,49257,49259],{"class":38,"line":33381},[36,49252,33259],{"class":42},[36,49254,9957],{"class":46},[36,49256,33264],{"class":42},[36,49258,3429],{"class":46},[36,49260,33269],{"class":42},[36,49262,49263],{"class":38,"line":33387},[36,49264,33275],{"class":69},[36,49266,49267,49269,49271,49273,49275],{"class":38,"line":33406},[36,49268,33281],{"class":42},[36,49270,9957],{"class":46},[36,49272,33243],{"class":42},[36,49274,812],{"class":53},[36,49276,63],{"class":42},[36,49278,49279],{"class":38,"line":33412},[36,49280,33295],{"class":69},[36,49282,49283,49285,49287,49289,49291],{"class":38,"line":33423},[36,49284,3883],{"class":46},[36,49286,33303],{"class":42},[36,49288,26524],{"class":46},[36,49290,32083],{"class":53},[36,49292,33310],{"class":42},[36,49294,49295],{"class":38,"line":33429},[36,49296,33316],{"class":69},[36,49298,49299,49301,49303],{"class":38,"line":33449},[36,49300,33087],{"class":42},[36,49302,47],{"class":46},[36,49304,33092],{"class":42},[36,49306,49307],{"class":38,"line":33465},[36,49308,33331],{"class":69},[36,49310,49311,49313,49315],{"class":38,"line":33471},[36,49312,33102],{"class":42},[36,49314,47],{"class":46},[36,49316,33107],{"class":42},[36,49318,49319],{"class":38,"line":33485},[36,49320,33346],{"class":69},[36,49322,49323],{"class":38,"line":33491},[36,49324,33352],{"class":42},[36,49326,49327],{"class":38,"line":33497},[36,49328,36833],{"class":69},[36,49330,49331,49333],{"class":38,"line":33508},[36,49332,33358],{"class":46},[36,49334,33361],{"class":42},[36,49336,49337],{"class":38,"line":33514},[36,49338,33367],{"class":69},[36,49340,49341,49343,49345],{"class":38,"line":33520},[36,49342,36848],{"class":42},[36,49344,47],{"class":46},[36,49346,33142],{"class":42},[36,49348,49349],{"class":38,"line":33530},[36,49350,33384],{"class":69},[36,49352,49353,49355,49357,49359,49361,49363,49365],{"class":38,"line":33536},[36,49354,36861],{"class":42},[36,49356,47],{"class":46},[36,49358,33159],{"class":42},[36,49360,33162],{"class":5696},[36,49362,47],{"class":46},[36,49364,54],{"class":53},[36,49366,63],{"class":42},[36,49368,49369],{"class":38,"line":33547},[36,49370,33409],{"class":69},[36,49372,49373,49375,49377],{"class":38,"line":33553},[36,49374,36882],{"class":42},[36,49376,47],{"class":46},[36,49378,33185],{"class":42},[36,49380,49381],{"class":38,"line":33563},[36,49382,33426],{"class":69},[36,49384,49385,49387,49389,49391,49393,49395,49397],{"class":38,"line":33568},[36,49386,36895],{"class":42},[36,49388,9957],{"class":46},[36,49390,36900],{"class":42},[36,49392,1071],{"class":46},[36,49394,33243],{"class":42},[36,49396,812],{"class":53},[36,49398,63],{"class":42},[36,49400,49401,49403,49405,49407,49409],{"class":38,"line":33574},[36,49402,36913],{"class":42},[36,49404,9957],{"class":46},[36,49406,33264],{"class":42},[36,49408,3429],{"class":46},[36,49410,33269],{"class":42},[36,49412,49413],{"class":38,"line":33623},[36,49414,36926],{"class":69},[36,49416,49417,49419,49421,49423,49425],{"class":38,"line":33670},[36,49418,36931],{"class":42},[36,49420,9957],{"class":46},[36,49422,33243],{"class":42},[36,49424,812],{"class":53},[36,49426,63],{"class":42},[36,49428,49429],{"class":38,"line":33675},[36,49430,33488],{"class":69},[36,49432,49433],{"class":38,"line":33681},[36,49434,33494],{"class":69},[36,49436,49437,49439,49441],{"class":38,"line":33700},[36,49438,33500],{"class":42},[36,49440,1197],{"class":46},[36,49442,33505],{"class":42},[36,49444,49445],{"class":38,"line":33706},[36,49446,33511],{"class":69},[36,49448,49449],{"class":38,"line":33726},[36,49450,33517],{"class":69},[36,49452,49453,49455,49457],{"class":38,"line":33732},[36,49454,33523],{"class":42},[36,49456,1197],{"class":46},[36,49458,33505],{"class":42},[36,49460,49461],{"class":38,"line":33738},[36,49462,33533],{"class":69},[36,49464,49465,49467,49469],{"class":38,"line":33748},[36,49466,33539],{"class":42},[36,49468,1197],{"class":46},[36,49470,33544],{"class":42},[36,49472,49473],{"class":38,"line":33753},[36,49474,33550],{"class":69},[36,49476,49477,49479,49481],{"class":38,"line":33759},[36,49478,33556],{"class":42},[36,49480,1197],{"class":46},[36,49482,33544],{"class":42},[36,49484,49485],{"class":38,"line":33775},[36,49486,2880],{"emptyLinePlaceholder":553},[36,49488,49489],{"class":38,"line":33820},[36,49490,33571],{"class":69},[36,49492,49493,49495,49497,49499,49501,49503,49505,49507,49509,49511,49513,49515,49517,49519,49521,49523,49525,49527,49529,49531],{"class":38,"line":33826},[36,49494,32928],{"class":53},[36,49496,345],{"class":42},[36,49498,4072],{"class":405},[36,49500,32936],{"class":53},[36,49502,33585],{"class":405},[36,49504,1509],{"class":53},[36,49506,33590],{"class":46},[36,49508,1559],{"class":53},[36,49510,33595],{"class":405},[36,49512,1509],{"class":53},[36,49514,33590],{"class":46},[36,49516,1559],{"class":53},[36,49518,4072],{"class":405},[36,49520,33606],{"class":42},[36,49522,173],{"class":46},[36,49524,54],{"class":53},[36,49526,33613],{"class":42},[36,49528,173],{"class":46},[36,49530,54],{"class":53},[36,49532,33620],{"class":42},[36,49534,49535,49537,49539,49541,49543,49545,49547,49549,49551,49553,49555,49557,49559,49561,49563,49565,49567,49569,49571,49573],{"class":38,"line":33832},[36,49536,32928],{"class":53},[36,49538,345],{"class":42},[36,49540,4072],{"class":405},[36,49542,32936],{"class":53},[36,49544,33634],{"class":405},[36,49546,1509],{"class":53},[36,49548,33590],{"class":46},[36,49550,1559],{"class":53},[36,49552,33643],{"class":405},[36,49554,1509],{"class":53},[36,49556,33590],{"class":46},[36,49558,1559],{"class":53},[36,49560,4072],{"class":405},[36,49562,33654],{"class":42},[36,49564,173],{"class":46},[36,49566,54],{"class":53},[36,49568,33661],{"class":42},[36,49570,173],{"class":46},[36,49572,54],{"class":53},[36,49574,33620],{"class":42},[36,49576,49577],{"class":38,"line":33838},[36,49578,2880],{"emptyLinePlaceholder":553},[36,49580,49581],{"class":38,"line":33849},[36,49582,33678],{"class":69},[36,49584,49585,49587,49589,49591,49593,49595,49597],{"class":38,"line":33855},[36,49586,2977],{"class":46},[36,49588,33686],{"class":42},[36,49590,173],{"class":46},[36,49592,54],{"class":53},[36,49594,1553],{"class":42},[36,49596,1573],{"class":46},[36,49598,33697],{"class":42},[36,49600,49601],{"class":38,"line":33861},[36,49602,33703],{"class":69},[36,49604,49605,49607,49609,49611,49613,49615,49617],{"class":38,"line":33867},[36,49606,33709],{"class":42},[36,49608,666],{"class":53},[36,49610,47],{"class":46},[36,49612,33716],{"class":42},[36,49614,173],{"class":46},[36,49616,54],{"class":53},[36,49618,33723],{"class":42},[36,49620,49621],{"class":38,"line":33885},[36,49622,33729],{"class":69},[36,49624,49625],{"class":38,"line":33899},[36,49626,33735],{"class":69},[36,49628,49629,49631,49633],{"class":38,"line":33908},[36,49630,33741],{"class":42},[36,49632,47],{"class":46},[36,49634,32791],{"class":42},[36,49636,49637],{"class":38,"line":33917},[36,49638,2880],{"emptyLinePlaceholder":553},[36,49640,49641],{"class":38,"line":33926},[36,49642,33756],{"class":69},[36,49644,49645,49647,49649,49651,49653],{"class":38,"line":33935},[36,49646,33762],{"class":42},[36,49648,47],{"class":46},[36,49650,33767],{"class":42},[36,49652,173],{"class":46},[36,49654,33772],{"class":42},[36,49656,49657,49659,49661,49663,49665,49667,49669,49671,49673,49675,49677,49679,49681,49683,49685,49687,49689,49691],{"class":38,"line":33941},[36,49658,32928],{"class":53},[36,49660,345],{"class":42},[36,49662,33782],{"class":405},[36,49664,1509],{"class":53},[36,49666,33787],{"class":46},[36,49668,1559],{"class":53},[36,49670,1157],{"class":405},[36,49672,1509],{"class":53},[36,49674,33787],{"class":46},[36,49676,1559],{"class":53},[36,49678,33800],{"class":405},[36,49680,33803],{"class":42},[36,49682,33806],{"class":46},[36,49684,1520],{"class":53},[36,49686,33811],{"class":42},[36,49688,947],{"class":46},[36,49690,1520],{"class":53},[36,49692,370],{"class":42},[36,49694,49695],{"class":38,"line":33947},[36,49696,37210],{"class":69},[36,49698,49699],{"class":38,"line":33955},[36,49700,37215],{"class":69},[36,49702,49703,49705,49707],{"class":38,"line":33960},[36,49704,37220],{"class":42},[36,49706,33844],{"class":405},[36,49708,63],{"class":42},[36,49710,49711],{"class":38,"line":33966},[36,49712,33864],{"class":69},[36,49714,49715,49717,49719,49721,49723,49725],{"class":38,"line":33977},[36,49716,33870],{"class":42},[36,49718,47],{"class":46},[36,49720,33875],{"class":42},[36,49722,33878],{"class":5696},[36,49724,47],{"class":46},[36,49726,2026],{"class":42},[36,49728,49729,49731,49733,49735],{"class":38,"line":33983},[36,49730,33888],{"class":405},[36,49732,1472],{"class":42},[36,49734,33893],{"class":53},[36,49736,33896],{"class":42},[36,49738,49739,49741],{"class":38,"line":34003},[36,49740,33902],{"class":405},[36,49742,33905],{"class":42},[36,49744,49745,49747],{"class":38,"line":34009},[36,49746,33911],{"class":405},[36,49748,33914],{"class":42},[36,49750,49751,49753],{"class":38,"line":34015},[36,49752,33920],{"class":405},[36,49754,33923],{"class":42},[36,49756,49757,49759],{"class":38,"line":34021},[36,49758,33929],{"class":405},[36,49760,33932],{"class":42},[36,49762,49763],{"class":38,"line":34038},[36,49764,33938],{"class":42},[36,49766,49767],{"class":38,"line":34044},[36,49768,33944],{"class":69},[36,49770,49771,49773],{"class":38,"line":34050},[36,49772,4570],{"class":46},[36,49774,33952],{"class":42},[36,49776,49777],{"class":38,"line":34056},[36,49778,2880],{"emptyLinePlaceholder":553},[36,49780,49781],{"class":38,"line":34062},[36,49782,33963],{"class":69},[36,49784,49785,49787,49789],{"class":38,"line":34068},[36,49786,32424],{"class":46},[36,49788,33971],{"class":2443},[36,49790,33974],{"class":42},[36,49792,49793],{"class":38,"line":34095},[36,49794,33980],{"class":69},[36,49796,49797,49799,49801,49803,49805,49807,49809,49811],{"class":38,"line":34119},[36,49798,33986],{"class":42},[36,49800,32170],{"class":5696},[36,49802,47],{"class":46},[36,49804,345],{"class":42},[36,49806,154],{"class":53},[36,49808,57],{"class":42},[36,49810,912],{"class":53},[36,49812,370],{"class":42},[36,49814,49815],{"class":38,"line":34125},[36,49816,34006],{"class":69},[36,49818,49819],{"class":38,"line":34131},[36,49820,34012],{"class":69},[36,49822,49823],{"class":38,"line":34137},[36,49824,34018],{"class":69},[36,49826,49827,49829,49831,49833,49835,49837,49839],{"class":38,"line":34148},[36,49828,32204],{"class":42},[36,49830,54],{"class":53},[36,49832,57],{"class":42},[36,49834,96],{"class":53},[36,49836,57],{"class":42},[36,49838,54],{"class":53},[36,49840,63],{"class":42},[36,49842,49843],{"class":38,"line":34159},[36,49844,34041],{"class":69},[36,49846,49847],{"class":38,"line":34165},[36,49848,34047],{"class":69},[36,49850,49851],{"class":38,"line":34182},[36,49852,34053],{"class":69},[36,49854,49855],{"class":38,"line":34205},[36,49856,34059],{"class":69},[36,49858,49859],{"class":38,"line":34228},[36,49860,34065],{"class":69},[36,49862,49863,49865,49867,49869,49871,49873,49875,49877,49879],{"class":38,"line":34234},[36,49864,34071],{"class":42},[36,49866,34074],{"class":405},[36,49868,34077],{"class":42},[36,49870,34080],{"class":405},[36,49872,57],{"class":42},[36,49874,34085],{"class":5696},[36,49876,47],{"class":46},[36,49878,34090],{"class":405},[36,49880,63],{"class":42},[36,49882,49883,49885,49887,49889,49891,49893,49895,49897,49899],{"class":38,"line":34239},[36,49884,34071],{"class":42},[36,49886,34074],{"class":405},[36,49888,34102],{"class":42},[36,49890,34105],{"class":405},[36,49892,57],{"class":42},[36,49894,34085],{"class":5696},[36,49896,47],{"class":46},[36,49898,34114],{"class":405},[36,49900,63],{"class":42},[36,49902,49903],{"class":38,"line":34248},[36,49904,34122],{"class":69},[36,49906,49907],{"class":38,"line":34258},[36,49908,34128],{"class":42},[36,49910,49911],{"class":38,"line":34264},[36,49912,34134],{"class":69},[36,49914,49915,49917,49919],{"class":38,"line":34269},[36,49916,34140],{"class":42},[36,49918,34143],{"class":405},[36,49920,63],{"class":42},[36,49922,49923,49925,49927],{"class":38,"line":34275},[36,49924,34151],{"class":42},[36,49926,34154],{"class":405},[36,49928,63],{"class":42},[36,49930,49931],{"class":38,"line":34288},[36,49932,34162],{"class":69},[36,49934,49935,49937,49939,49941,49943,49945,49947],{"class":38,"line":34294},[36,49936,32204],{"class":42},[36,49938,54],{"class":53},[36,49940,57],{"class":42},[36,49942,96],{"class":53},[36,49944,57],{"class":42},[36,49946,96],{"class":53},[36,49948,63],{"class":42},[36,49950,49951,49953,49955,49957,49959,49961,49963,49965,49967],{"class":38,"line":34305},[36,49952,34071],{"class":42},[36,49954,34074],{"class":405},[36,49956,34189],{"class":42},[36,49958,34080],{"class":405},[36,49960,57],{"class":42},[36,49962,34085],{"class":5696},[36,49964,47],{"class":46},[36,49966,34200],{"class":405},[36,49968,63],{"class":42},[36,49970,49971,49973,49975,49977,49979,49981,49983,49985,49987],{"class":38,"line":34316},[36,49972,34071],{"class":42},[36,49974,34074],{"class":405},[36,49976,34212],{"class":42},[36,49978,34105],{"class":405},[36,49980,57],{"class":42},[36,49982,34085],{"class":5696},[36,49984,47],{"class":46},[36,49986,34223],{"class":405},[36,49988,63],{"class":42},[36,49990,49991],{"class":38,"line":34335},[36,49992,34231],{"class":69},[36,49994,49996],{"class":38,"line":49995},219,[36,49997,34128],{"class":42},[36,49999,50001,50003,50005],{"class":38,"line":50000},220,[36,50002,34140],{"class":42},[36,50004,34074],{"class":405},[36,50006,63],{"class":42},[36,50008,50010,50012,50014],{"class":38,"line":50009},221,[36,50011,34151],{"class":42},[36,50013,34253],{"class":405},[36,50015,63],{"class":42},[36,50017,50019],{"class":38,"line":50018},222,[36,50020,34261],{"class":42},[36,50022,50024],{"class":38,"line":50023},223,[36,50025,2880],{"emptyLinePlaceholder":553},[36,50027,50029],{"class":38,"line":50028},224,[36,50030,34272],{"class":69},[36,50032,50034,50036,50038,50040,50042],{"class":38,"line":50033},225,[36,50035,2011],{"class":46},[36,50037,31698],{"class":53},[36,50039,3429],{"class":46},[36,50041,31703],{"class":405},[36,50043,4219],{"class":42},[36,50045,50047],{"class":38,"line":50046},226,[36,50048,34291],{"class":69},[36,50050,50052,50054,50056],{"class":38,"line":50051},227,[36,50053,45023],{"class":42},[36,50055,47],{"class":46},[36,50057,45028],{"class":42},[36,50059,50061,50063,50065],{"class":38,"line":50060},228,[36,50062,34308],{"class":42},[36,50064,47],{"class":46},[36,50066,34313],{"class":42},[36,50068,50070,50072,50074,50076,50078,50080,50082],{"class":38,"line":50069},229,[36,50071,33870],{"class":42},[36,50073,47],{"class":46},[36,50075,45045],{"class":42},[36,50077,34326],{"class":5696},[36,50079,47],{"class":46},[36,50081,1520],{"class":53},[36,50083,63],{"class":42},[36,50085,50087],{"class":38,"line":50086},230,[36,50088,34338],{"class":42},[22478,50090,50092],{"id":50091},"_242测试代码","2.4.2.测试代码",[19,50094,50095],{},"使用测试集进行测试与推理",[26,50097,50099],{"className":28,"code":50098,"language":30,"meta":31,"style":31},"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",[33,50100,50101,50107,50117,50127,50138,50148,50152,50156,50164,50169,50173,50190,50194,50198,50202,50206,50210,50242,50246,50254,50258,50270,50274,50278,50282,50286,50290,50294,50298,50302,50320,50334,50338,50348,50358,50368,50374,50378,50382,50390,50394,50410,50418,50422,50426,50434,50442,50446,50450,50454,50458,50464,50468,50478,50486,50494,50498,50502,50506,50514,50518,50534,50538,50542,50546,50558,50562,50574,50578,50582,50594,50598,50608,50612,50616,50628,50632,50640,50644,50648,50656,50660,50668,50672,50676,50680,50684,50688,50704,50712,50716,50720,50738,50744,50748,50758,50766,50774,50778,50782,50786,50790,50798,50802,50818,50822,50830,50838],{"__ignoreMap":31},[36,50102,50103,50105],{"class":38,"line":39},[36,50104,30871],{"class":46},[36,50106,30874],{"class":42},[36,50108,50109,50111,50113,50115],{"class":38,"line":66},[36,50110,30871],{"class":46},[36,50112,31893],{"class":42},[36,50114,31861],{"class":46},[36,50116,31898],{"class":42},[36,50118,50119,50121,50123,50125],{"class":38,"line":73},[36,50120,31215],{"class":46},[36,50122,31876],{"class":42},[36,50124,30871],{"class":46},[36,50126,31881],{"class":42},[36,50128,50129,50131,50133,50135],{"class":38,"line":79},[36,50130,31215],{"class":46},[36,50132,31846],{"class":42},[36,50134,30871],{"class":46},[36,50136,50137],{"class":42}," ImageFolder\n",[36,50139,50140,50142,50144,50146],{"class":38,"line":85},[36,50141,31215],{"class":46},[36,50143,32391],{"class":42},[36,50145,30871],{"class":46},[36,50147,45117],{"class":42},[36,50149,50150],{"class":38,"line":419},[36,50151,2880],{"emptyLinePlaceholder":553},[36,50153,50154],{"class":38,"line":425},[36,50155,34428],{"class":69},[36,50157,50158,50160,50162],{"class":38,"line":431},[36,50159,32424],{"class":46},[36,50161,34435],{"class":2443},[36,50163,32430],{"class":42},[36,50165,50166],{"class":38,"line":437},[36,50167,50168],{"class":69},"   # 导入自己的数据集，并进行数据处理\n",[36,50170,50171],{"class":38,"line":443},[36,50172,48438],{"class":69},[36,50174,50175,50177,50179,50181,50183,50185,50188],{"class":38,"line":2092},[36,50176,48443],{"class":53},[36,50178,47],{"class":46},[36,50180,1283],{"class":46},[36,50182,870],{"class":405},[36,50184,1171],{"class":53},[36,50186,50187],{"class":48454},"\u002Fdata\u002Ftest",[36,50189,25614],{"class":405},[36,50191,50192],{"class":38,"line":2097},[36,50193,2880],{"emptyLinePlaceholder":553},[36,50195,50196],{"class":38,"line":2103},[36,50197,48466],{"class":69},[36,50199,50200],{"class":38,"line":2108},[36,50201,48471],{"class":69},[36,50203,50204],{"class":38,"line":2122},[36,50205,48476],{"class":69},[36,50207,50208],{"class":38,"line":2127},[36,50209,48481],{"class":69},[36,50211,50212,50214,50216,50218,50220,50222,50224,50226,50228,50230,50232,50234,50236,50238,50240],{"class":38,"line":2133},[36,50213,48486],{"class":42},[36,50215,47],{"class":46},[36,50217,48491],{"class":42},[36,50219,48494],{"class":53},[36,50221,57],{"class":42},[36,50223,48499],{"class":53},[36,50225,57],{"class":42},[36,50227,48504],{"class":53},[36,50229,48507],{"class":42},[36,50231,48510],{"class":53},[36,50233,57],{"class":42},[36,50235,48515],{"class":53},[36,50237,57],{"class":42},[36,50239,48520],{"class":53},[36,50241,5137],{"class":42},[36,50243,50244],{"class":38,"line":2154},[36,50245,48527],{"class":69},[36,50247,50248,50250,50252],{"class":38,"line":2159},[36,50249,48532],{"class":42},[36,50251,47],{"class":46},[36,50253,48537],{"class":42},[36,50255,50256],{"class":38,"line":2173},[36,50257,48542],{"class":69},[36,50259,50260,50262,50264,50266,50268],{"class":38,"line":2178},[36,50261,48547],{"class":42},[36,50263,31978],{"class":53},[36,50265,57],{"class":42},[36,50267,31978],{"class":53},[36,50269,43099],{"class":42},[36,50271,50272],{"class":38,"line":2207},[36,50273,48560],{"class":69},[36,50275,50276],{"class":38,"line":2212},[36,50277,48565],{"class":42},[36,50279,50280],{"class":38,"line":2229},[36,50281,48570],{"class":42},[36,50283,50284],{"class":38,"line":2234},[36,50285,48575],{"class":69},[36,50287,50288],{"class":38,"line":2239},[36,50289,48580],{"class":69},[36,50291,50292],{"class":38,"line":2244},[36,50293,2880],{"emptyLinePlaceholder":553},[36,50295,50296],{"class":38,"line":2258},[36,50297,48589],{"class":69},[36,50299,50300],{"class":38,"line":2263},[36,50301,48594],{"class":69},[36,50303,50304,50306,50308,50310,50312,50314,50316,50318],{"class":38,"line":3057},[36,50305,34442],{"class":42},[36,50307,47],{"class":46},[36,50309,48603],{"class":42},[36,50311,48606],{"class":53},[36,50313,57],{"class":42},[36,50315,48611],{"class":5696},[36,50317,47],{"class":46},[36,50319,48616],{"class":42},[36,50321,50322,50324,50326,50328,50330,50332],{"class":38,"line":3071},[36,50323,34499],{"class":42},[36,50325,47],{"class":46},[36,50327,32011],{"class":42},[36,50329,32014],{"class":5696},[36,50331,47],{"class":46},[36,50333,34510],{"class":42},[36,50335,50336],{"class":38,"line":3079},[36,50337,34515],{"class":69},[36,50339,50340,50342,50344,50346],{"class":38,"line":3084},[36,50341,34520],{"class":5696},[36,50343,47],{"class":46},[36,50345,54],{"class":53},[36,50347,31944],{"class":42},[36,50349,50350,50352,50354,50356],{"class":38,"line":3090},[36,50351,34531],{"class":5696},[36,50353,47],{"class":46},[36,50355,31954],{"class":53},[36,50357,31944],{"class":42},[36,50359,50360,50362,50364,50366],{"class":38,"line":3096},[36,50361,34542],{"class":5696},[36,50363,47],{"class":46},[36,50365,812],{"class":53},[36,50367,63],{"class":42},[36,50369,50370,50372],{"class":38,"line":3101},[36,50371,4570],{"class":46},[36,50373,34555],{"class":42},[36,50375,50376],{"class":38,"line":8428},[36,50377,2880],{"emptyLinePlaceholder":553},[36,50379,50380],{"class":38,"line":8452},[36,50381,34564],{"class":69},[36,50383,50384,50386,50388],{"class":38,"line":8457},[36,50385,32424],{"class":46},[36,50387,34571],{"class":2443},[36,50389,34574],{"class":42},[36,50391,50392],{"class":38,"line":8463},[36,50393,34579],{"class":69},[36,50395,50396,50398,50400,50402,50404,50406,50408],{"class":38,"line":8490},[36,50397,31715],{"class":42},[36,50399,47],{"class":46},[36,50401,31722],{"class":405},[36,50403,2184],{"class":46},[36,50405,31727],{"class":42},[36,50407,2181],{"class":46},[36,50409,34596],{"class":405},[36,50411,50412,50414,50416],{"class":38,"line":8495},[36,50413,31767],{"class":42},[36,50415,47],{"class":46},[36,50417,32766],{"class":42},[36,50419,50420],{"class":38,"line":8501},[36,50421,2880],{"emptyLinePlaceholder":553},[36,50423,50424],{"class":38,"line":8513},[36,50425,34613],{"class":69},[36,50427,50428,50430,50432],{"class":38,"line":8525},[36,50429,34618],{"class":42},[36,50431,47],{"class":46},[36,50433,32819],{"class":53},[36,50435,50436,50438,50440],{"class":38,"line":8537},[36,50437,34627],{"class":42},[36,50439,47],{"class":46},[36,50441,3565],{"class":53},[36,50443,50444],{"class":38,"line":10196},[36,50445,2880],{"emptyLinePlaceholder":553},[36,50447,50448],{"class":38,"line":10221},[36,50449,34640],{"class":69},[36,50451,50452],{"class":38,"line":10244},[36,50453,34645],{"class":69},[36,50455,50456],{"class":38,"line":10268},[36,50457,34650],{"class":69},[36,50459,50460,50462],{"class":38,"line":10273},[36,50461,34655],{"class":46},[36,50463,33361],{"class":42},[36,50465,50466],{"class":38,"line":10278},[36,50467,34662],{"class":69},[36,50469,50470,50472,50474,50476],{"class":38,"line":10283},[36,50471,3883],{"class":46},[36,50473,34669],{"class":42},[36,50475,26524],{"class":46},[36,50477,34674],{"class":42},[36,50479,50480,50482,50484],{"class":38,"line":10292},[36,50481,34679],{"class":42},[36,50483,47],{"class":46},[36,50485,34684],{"class":42},[36,50487,50488,50490,50492],{"class":38,"line":10297},[36,50489,34689],{"class":42},[36,50491,47],{"class":46},[36,50493,34694],{"class":42},[36,50495,50496],{"class":38,"line":10303},[36,50497,34699],{"class":69},[36,50499,50500],{"class":38,"line":10324},[36,50501,33352],{"class":42},[36,50503,50504],{"class":38,"line":10330},[36,50505,34708],{"class":69},[36,50507,50508,50510,50512],{"class":38,"line":10344},[36,50509,33137],{"class":42},[36,50511,47],{"class":46},[36,50513,34717],{"class":42},[36,50515,50516],{"class":38,"line":10350},[36,50517,34722],{"class":69},[36,50519,50520,50522,50524,50526,50528,50530,50532],{"class":38,"line":10377},[36,50521,33154],{"class":42},[36,50523,47],{"class":46},[36,50525,33159],{"class":42},[36,50527,33162],{"class":5696},[36,50529,47],{"class":46},[36,50531,54],{"class":53},[36,50533,63],{"class":42},[36,50535,50536],{"class":38,"line":10386},[36,50537,34743],{"class":69},[36,50539,50540],{"class":38,"line":10392},[36,50541,34748],{"class":69},[36,50543,50544],{"class":38,"line":10400},[36,50545,34753],{"class":69},[36,50547,50548,50550,50552,50554,50556],{"class":38,"line":10405},[36,50549,34758],{"class":42},[36,50551,9957],{"class":46},[36,50553,33264],{"class":42},[36,50555,3429],{"class":46},[36,50557,34767],{"class":42},[36,50559,50560],{"class":38,"line":17084},[36,50561,34772],{"class":69},[36,50563,50564,50566,50568,50570,50572],{"class":38,"line":17090},[36,50565,34777],{"class":42},[36,50567,9957],{"class":46},[36,50569,34782],{"class":42},[36,50571,812],{"class":53},[36,50573,63],{"class":42},[36,50575,50576],{"class":38,"line":17113},[36,50577,2880],{"emptyLinePlaceholder":553},[36,50579,50580],{"class":38,"line":17119},[36,50581,34795],{"class":69},[36,50583,50584,50586,50588,50590,50592],{"class":38,"line":17142},[36,50585,34800],{"class":42},[36,50587,47],{"class":46},[36,50589,34805],{"class":42},[36,50591,1197],{"class":46},[36,50593,34810],{"class":42},[36,50595,50596],{"class":38,"line":17156},[36,50597,34815],{"class":69},[36,50599,50600,50602,50604,50606],{"class":38,"line":17176},[36,50601,32928],{"class":53},[36,50603,345],{"class":42},[36,50605,34824],{"class":405},[36,50607,34827],{"class":42},[36,50609,50610],{"class":38,"line":17182},[36,50611,2880],{"emptyLinePlaceholder":553},[36,50613,50614],{"class":38,"line":17193},[36,50615,34836],{"class":69},[36,50617,50618,50620,50622,50624,50626],{"class":38,"line":17216},[36,50619,2011],{"class":46},[36,50621,31698],{"class":53},[36,50623,3429],{"class":46},[36,50625,31703],{"class":405},[36,50627,4219],{"class":42},[36,50629,50630],{"class":38,"line":17238},[36,50631,34853],{"class":69},[36,50633,50634,50636,50638],{"class":38,"line":17243},[36,50635,31767],{"class":42},[36,50637,47],{"class":46},[36,50639,45028],{"class":42},[36,50641,50642],{"class":38,"line":17249},[36,50643,34866],{"class":69},[36,50645,50646],{"class":38,"line":17263},[36,50647,34871],{"class":69},[36,50649,50650,50652,50654],{"class":38,"line":17276},[36,50651,34876],{"class":42},[36,50653,34879],{"class":405},[36,50655,370],{"class":42},[36,50657,50658],{"class":38,"line":17281},[36,50659,34886],{"class":69},[36,50661,50662,50664,50666],{"class":38,"line":17295},[36,50663,34499],{"class":42},[36,50665,47],{"class":46},[36,50667,34895],{"class":42},[36,50669,50670],{"class":38,"line":17300},[36,50671,34900],{"class":69},[36,50673,50674],{"class":38,"line":17306},[36,50675,34905],{"class":42},[36,50677,50678],{"class":38,"line":17311},[36,50679,2880],{"emptyLinePlaceholder":553},[36,50681,50682],{"class":38,"line":17325},[36,50683,34914],{"class":69},[36,50685,50686],{"class":38,"line":17330},[36,50687,34919],{"class":69},[36,50689,50690,50692,50694,50696,50698,50700,50702],{"class":38,"line":17335},[36,50691,31715],{"class":42},[36,50693,47],{"class":46},[36,50695,31722],{"class":405},[36,50697,2184],{"class":46},[36,50699,31727],{"class":42},[36,50701,2181],{"class":46},[36,50703,34596],{"class":405},[36,50705,50706,50708,50710],{"class":38,"line":17349},[36,50707,31767],{"class":42},[36,50709,47],{"class":46},[36,50711,32766],{"class":42},[36,50713,50714],{"class":38,"line":17361},[36,50715,34948],{"class":69},[36,50717,50718],{"class":38,"line":17366},[36,50719,34953],{"class":69},[36,50721,50722,50724,50726,50728,50731,50733,50736],{"class":38,"line":17379},[36,50723,34958],{"class":42},[36,50725,47],{"class":46},[36,50727,1503],{"class":42},[36,50729,50730],{"class":405},"'猫'",[36,50732,57],{"class":42},[36,50734,50735],{"class":405},"'狗'",[36,50737,33723],{"class":42},[36,50739,50740,50742],{"class":38,"line":17384},[36,50741,34655],{"class":46},[36,50743,33361],{"class":42},[36,50745,50746],{"class":38,"line":17389},[36,50747,35023],{"class":69},[36,50749,50750,50752,50754,50756],{"class":38,"line":17394},[36,50751,3883],{"class":46},[36,50753,35030],{"class":42},[36,50755,26524],{"class":46},[36,50757,34674],{"class":42},[36,50759,50760,50762,50764],{"class":38,"line":17407},[36,50761,33087],{"class":42},[36,50763,47],{"class":46},[36,50765,33092],{"class":42},[36,50767,50768,50770,50772],{"class":38,"line":17412},[36,50769,33102],{"class":42},[36,50771,47],{"class":46},[36,50773,33107],{"class":42},[36,50775,50776],{"class":38,"line":33110},[36,50777,2880],{"emptyLinePlaceholder":553},[36,50779,50780],{"class":38,"line":33116},[36,50781,35059],{"class":69},[36,50783,50784],{"class":38,"line":33122},[36,50785,33352],{"class":42},[36,50787,50788],{"class":38,"line":33128},[36,50789,35068],{"class":69},[36,50791,50792,50794,50796],{"class":38,"line":33134},[36,50793,33137],{"class":42},[36,50795,47],{"class":46},[36,50797,33142],{"class":42},[36,50799,50800],{"class":38,"line":33145},[36,50801,35081],{"class":69},[36,50803,50804,50806,50808,50810,50812,50814,50816],{"class":38,"line":33151},[36,50805,33154],{"class":42},[36,50807,47],{"class":46},[36,50809,33159],{"class":42},[36,50811,33162],{"class":5696},[36,50813,47],{"class":46},[36,50815,54],{"class":53},[36,50817,63],{"class":42},[36,50819,50820],{"class":38,"line":33171},[36,50821,35102],{"class":69},[36,50823,50824,50826,50828],{"class":38,"line":33177},[36,50825,35107],{"class":42},[36,50827,47],{"class":46},[36,50829,35112],{"class":42},[36,50831,50832,50834,50836],{"class":38,"line":33188},[36,50833,35117],{"class":42},[36,50835,47],{"class":46},[36,50837,35122],{"class":42},[36,50839,50840,50842,50844,50846,50848,50850,50852,50854],{"class":38,"line":33194},[36,50841,35127],{"class":53},[36,50843,345],{"class":42},[36,50845,35132],{"class":405},[36,50847,35135],{"class":42},[36,50849,35138],{"class":405},[36,50851,57],{"class":42},[36,50853,35143],{"class":405},[36,50855,35146],{"class":42},[539,50857,50858],{},"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":31,"searchDepth":66,"depth":66,"links":50860},[50861,50862,50863,50864],{"id":31069,"depth":73,"text":31070},{"id":38316,"depth":73,"text":38317},{"id":41749,"depth":73,"text":41750},{"id":45758,"depth":73,"text":45759},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31061,"description":550},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50871,"title":50872,"body":50873,"description":550,"extension":551,"meta":50880,"navigation":553,"path":50881,"seo":50882,"stem":50883,"__hash__":50884},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50874,"toc":50878},[50875],[10,50876,50872],{"id":50877},"_3yolo模型学习",{"title":31,"searchDepth":66,"depth":66,"links":50879},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50872,"description":550},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50886,"title":50887,"body":50888,"description":50895,"extension":551,"meta":50896,"navigation":553,"path":50898,"seo":50899,"stem":50900,"__hash__":50901},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50889,"toc":50893},[50890],[19,50891,50892],{},"yolo模型还未补充",{"title":31,"searchDepth":66,"depth":66,"links":50894},[],"深度学习学习",{"category":50897},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50887,"description":50895},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50903,"title":50904,"body":50905,"description":550,"extension":551,"meta":50930,"navigation":553,"path":50931,"seo":50932,"stem":50933,"__hash__":50934},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50906,"toc":50928},[50907,50910,50913,50918,50925],[10,50908,50904],{"id":50909},"_1工具",[19,50911,50912],{},"提示错误插件：有问题会提前报错",[19,50914,50915],{},[519,50916],{"alt":31,"src":50917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50919,50920],{},[43,50921,50924],{"href":50922,"rel":50923},"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",[24345],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50926,50927],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":66,"depth":66,"links":50929},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50904,"description":550},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50936,"title":50937,"body":50938,"description":550,"extension":551,"meta":53802,"navigation":553,"path":53803,"seo":53804,"stem":53805,"__hash__":53806},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50939,"toc":53753},[50940,50943,50947,50951,50956,50959,50964,50968,50975,50980,50987,50992,50999,51004,51008,51013,51016,51020,51025,51029,51034,51037,51040,51043,51046,51049,51052,51055,51058,51063,51068,51073,51077,51080,51083,51087,51092,51095,51103,51108,51125,51133,51138,51143,51148,51153,51158,51161,51166,51171,51175,51184,51189,51194,51198,51203,51206,51210,51215,51223,51228,51233,51236,51241,51246,51251,51254,51257,51260,51265,51270,51273,51278,51281,51286,51289,51292,51295,51300,51303,51306,51321,51326,51331,51336,51339,51342,51345,51359,51362,51367,51372,51375,51378,51381,51384,51387,51390,51393,51397,51401,51406,51410,51413,51418,51423,51426,51431,51434,51438,51443,51446,51449,51452,51455,51458,51461,51464,51467,51470,51474,51479,51484,51489,51492,51495,51499,51504,51507,51511,51514,51517,51522,51525,51528,51532,51536,51539,51544,51549,51552,51581,51586,51591,51596,51601,51605,51610,51614,51619,51622,51626,51630,51635,51639,51644,51649,51653,51658,51661,51663,51666,51671,51675,51680,51684,51688,51693,51698,51703,51708,51712,51717,51722,51727,51730,51733,51738,51741,51746,51751,51756,51761,51765,52572,52576,52919,52924,52927,52930,52933,52936,52939,52942,52945,52948,52950,52953,52955,52958,52962,52967,52970,52973,52976,52980,52985,52990,53010,53013,53017,53022,53027,53044,53048,53077,53081,53103,53105,53144,53152,53158,53162,53165,53168,53173,53178,53181,53184,53187,53192,53197,53200,53203,53206,53209,53212,53215,53218,53221,53224,53227,53230,53232,53235,53238,53241,53244,53247,53250,53253,53256,53260,53265,53268,53273,53276,53279,53282,53285,53288,53291,53294,53296,53299,53302,53305,53308,53311,53314,53318,53321,53330,53333,53338,53341,53346,53349,53352,53355,53358,53361,53364,53367,53371,53375,53378,53381,53386,53391,53396,53400,53405,53410,53413,53416,53419,53422,53425,53430,53433,53438,53440,53445,53448,53452,53457,53460,53463,53468,53472,53475,53480,53483,53486,53515,53520,53523,53526,53529,53532,53535,53539,53542,53628,53632,53635,53640,53645,53652,53655,53658,53661,53664,53667,53672,53677,53680,53683,53686,53689,53692,53695,53698,53701,53704,53706,53709,53713,53718,53723,53728,53731,53736,53741,53744,53747,53750],[10,50941,50937],{"id":50942},"_2基础语法",[14,50944,50946],{"id":50945},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[596,50948,50950],{"id":50949},"_211-js组成","2.1.1 js组成",[579,50952,50953],{},[582,50954,50955],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50957,50958],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[579,50960,50961],{"start":66},[582,50962,50963],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[596,50965,50967],{"id":50966},"_212-js书写位置","2.1.2 js书写位置",[579,50969,50970],{},[582,50971,50972],{},[770,50973,50974],{},"内部 JavaScript",[19,50976,50977],{},[519,50978],{"alt":31,"src":50979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[579,50981,50982],{"start":66},[582,50983,50984],{},[770,50985,50986],{},"外部 JavaScript",[19,50988,50989],{},[519,50990],{"alt":31,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[579,50993,50994],{"start":73},[582,50995,50996],{},[770,50997,50998],{},"内联 JavaScript",[19,51000,51001],{},[519,51002],{"alt":31,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[596,51005,51007],{"id":51006},"_213-javascript注释","2.1.3 JavaScript注释",[19,51009,51010],{},[519,51011],{"alt":31,"src":51012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51014,51015],{},"alt+shift+a一定要记住！",[596,51017,51019],{"id":51018},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51021,51022],{},[519,51023],{"alt":31,"src":51024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[596,51026,51028],{"id":51027},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[579,51030,51031],{},[582,51032,51033],{},"输出语法：",[19,51035,51036],{},"①document.write('要出的内容')",[19,51038,51039],{},"向body内输出内容；",[19,51041,51042],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51044,51045],{},"②alert('要出的内容')",[19,51047,51048],{},"页面弹出警告对话框",[19,51050,51051],{},"③console.log('控制台打印')",[19,51053,51054],{},"控制台输出语法，程序员调试使用",[19,51056,51057],{},"输入log就行，自动生成：",[19,51059,51060],{},[519,51061],{"alt":31,"src":51062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[579,51064,51065],{"start":66},[582,51066,51067],{},"输入语法：",[19,51069,51070],{},[519,51071],{"alt":31,"src":51072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[596,51074,51076],{"id":51075},"_2116-字面量","21.1.6 字面量",[19,51078,51079],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51081,51082],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51084,51086],{"id":51085},"_22-变量","2.2 变量",[579,51088,51089],{},[582,51090,51091],{},"变量声明",[19,51093,51094],{},"let 变量名",[1620,51096,51097,51100],{},[582,51098,51099],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[582,51101,51102],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[579,51104,51105],{"start":66},[582,51106,51107],{},"变量赋值",[26,51109,51113],{"className":51110,"code":51111,"language":51112,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,51114,51115,51120],{"__ignoreMap":31},[36,51116,51117],{"class":38,"line":39},[36,51118,51119],{"class":42},"let age\n",[36,51121,51122],{"class":38,"line":66},[36,51123,51124],{"class":42},"age=18\n",[579,51126,51127,51130],{"start":73},[582,51128,51129],{},"连这些（变量的初始化）：let age=18",[582,51131,51132],{},"更新变量",[19,51134,51135],{},[519,51136],{"alt":31,"src":51137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[579,51139,51140],{"start":85},[582,51141,51142],{},"声明多个变量",[19,51144,51145],{},[519,51146],{"alt":31,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[579,51149,51150],{"start":419},[582,51151,51152],{},"变量命名规则与规范",[19,51154,51155],{},[519,51156],{"alt":31,"src":51157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51159,51160],{},"遵守小驼峰！",[579,51162,51163],{"start":425},[582,51164,51165],{},"变量拓展-let和var的区别",[19,51167,51168],{},[519,51169],{"alt":31,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51172,51174],{"id":51173},"_23-数组","2.3 数组",[26,51176,51178],{"className":51110,"code":51177,"language":51112,"meta":31,"style":31},"let arr = []\n",[33,51179,51180],{"__ignoreMap":31},[36,51181,51182],{"class":38,"line":39},[36,51183,51177],{"class":42},[19,51185,51186],{},[519,51187],{"alt":31,"src":51188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51190,51191],{},[519,51192],{"alt":31,"src":51193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51195,51197],{"id":51196},"_24-常量","2.4 常量",[19,51199,51200],{},[519,51201],{"alt":31,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51204,51205],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51207,51209],{"id":51208},"_25-数据类型","2.5 数据类型",[19,51211,51212],{},[519,51213],{"alt":31,"src":51214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[579,51216,51217,51220],{},[582,51218,51219],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[582,51221,51222],{},"算数运算符：",[19,51224,51225],{},[519,51226],{"alt":31,"src":51227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[579,51229,51230],{"start":73},[582,51231,51232],{},"数字类型（Number）",[19,51234,51235],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51237,51238],{},[519,51239],{"alt":31,"src":51240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[579,51242,51243],{"start":79},[582,51244,51245],{},"字符串类型（string）",[19,51247,51248],{},[519,51249],{"alt":31,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51252,51253],{},"反引号也是可以使用的",[19,51255,51256],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51258,51259],{},"例如：document.write(\"我今年\"+age+\"岁\")",[579,51261,51262],{"start":85},[582,51263,51264],{},"模板字符串",[19,51266,51267],{},[519,51268],{"alt":31,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51271,51272],{},"类似于python的字符串格式化",[579,51274,51275],{"start":419},[582,51276,51277],{},"布尔类型",[19,51279,51280],{},"true 和 false",[579,51282,51283],{"start":425},[582,51284,51285],{},"未定义类型（underfined）",[19,51287,51288],{},"表示没有赋值",[19,51290,51291],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51293,51294],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[579,51296,51297],{"start":431},[582,51298,51299],{},"null（空类型）",[19,51301,51302],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51304,51305],{},"赋值了，但是内容为空",[26,51307,51309],{"className":51110,"code":51308,"language":51112,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,51310,51311,51316],{"__ignoreMap":31},[36,51312,51313],{"class":38,"line":39},[36,51314,51315],{"class":42},"typeof null\n",[36,51317,51318],{"class":38,"line":66},[36,51319,51320],{"class":42},"输出的是'object'，是一个对象数据类型\n",[579,51322,51323],{"start":437},[582,51324,51325],{},"控制台检测数据类型",[19,51327,51328],{},[519,51329],{"alt":31,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[579,51332,51333],{"start":443},[582,51334,51335],{},"类型转换",[19,51337,51338],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51340,51341],{},"转换方式：隐式转换和显示转换",[19,51343,51344],{},"①隐式转换",[1620,51346,51347,51350,51353,51356],{},[582,51348,51349],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[582,51351,51352],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[582,51354,51355],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[582,51357,51358],{},"任何数据和字符串相加结果都是字符串",[19,51360,51361],{},"②显示转换",[19,51363,51364],{},[519,51365],{"alt":31,"src":51366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51368,51369],{},[519,51370],{"alt":31,"src":51371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51373,51374],{},"在输入的时候要用好隐式转换，简单写起来",[19,51376,51377],{},"let num = +prompt(’请输入数字：‘)",[19,51379,51380],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51382,51383],{},"console.log(parseInt('12.333px'))",[19,51385,51386],{},"输出为：12",[19,51388,51389],{},"console.log(parseInt('a'a'a12.333px'))",[19,51391,51392],{},"输出：NaN",[14,51394,51396],{"id":51395},"_26-运算符","2.6 运算符",[596,51398,51400],{"id":51399},"_261-赋值运算符","2.6.1 赋值运算符",[19,51402,51403],{},[519,51404],{"alt":31,"src":51405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[596,51407,51409],{"id":51408},"_262-一元运算符","2.6.2 一元运算符",[19,51411,51412],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51414,51415],{},[519,51416],{"alt":31,"src":51417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51419,51420],{},[519,51421],{"alt":31,"src":51422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51424,51425],{},"两者的区别：",[19,51427,51428],{},[519,51429],{"alt":31,"src":51430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51432,51433],{},"前置先自加；后置后加，代码执行完之后再加",[596,51435,51437],{"id":51436},"_263-比较运算符","2.6.3 比较运算符",[19,51439,51440],{},[519,51441],{"alt":31,"src":51442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51444,51445],{},"比较运算符也有隐式转换",[19,51447,51448],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51450,51451],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51453,51454],{},"要使用三等，开发的时候",[19,51456,51457],{},"NaN不等于任何人，包括它自己",[19,51459,51460],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51462,51463],{},"7\u002F10=0.7",[19,51465,51466],{},"最后：0.5+0.2=0.7",[19,51468,51469],{},"字符串比较，比较的是字符对应的ASCII码",[596,51471,51473],{"id":51472},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51475,51476],{},[519,51477],{"alt":31,"src":51478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51480,51481],{},[519,51482],{"alt":31,"src":51483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51485,51486],{},[519,51487],{"alt":31,"src":51488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51490,51491],{},"上述题目选D",[19,51493,51494],{},"与真2假1；或真1假2",[596,51496,51498],{"id":51497},"_265-运算符优先级","2.6.5 运算符优先级",[19,51500,51501],{},[519,51502],{"alt":31,"src":51503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51505,51506],{},"先算逻辑与，后算逻辑或",[14,51508,51510],{"id":51509},"_27-语句","2.7 语句",[19,51512,51513],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51515,51516],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51518,51519],{},[519,51520],{"alt":31,"src":51521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51523,51524],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51526,51527],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[596,51529,51531],{"id":51530},"_271-分支语句","2.7.1 分支语句",[22478,51533,51535],{"id":51534},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51537,51538],{},"if语句单行简单的话，可以不写{}，写在一行就行",[579,51540,51541],{},[582,51542,51543],{},"单分支语句",[19,51545,51546],{},[519,51547],{"alt":31,"src":51548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51550,51551],{},"除了0，所有数字都为真",[26,51553,51555],{"className":51110,"code":51554,"language":51112,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,51556,51557,51562,51567,51572,51576],{"__ignoreMap":31},[36,51558,51559],{"class":38,"line":39},[36,51560,51561],{"class":42},"if（0) {\n",[36,51563,51564],{"class":38,"line":66},[36,51565,51566],{"class":42},"    let a=1\n",[36,51568,51569],{"class":38,"line":73},[36,51570,51571],{"class":42},"    alert(typeof a)\n",[36,51573,51574],{"class":38,"line":79},[36,51575,2045],{"class":42},[36,51577,51578],{"class":38,"line":85},[36,51579,51580],{"class":42},"不输出，括号为假\n",[579,51582,51583],{"start":66},[582,51584,51585],{},"双分支语句",[19,51587,51588],{},[519,51589],{"alt":31,"src":51590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[579,51592,51593],{"start":73},[582,51594,51595],{},"多分支语句",[19,51597,51598],{},[519,51599],{"alt":31,"src":51600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22478,51602,51604],{"id":51603},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51606,51607],{},[519,51608],{"alt":31,"src":51609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22478,51611,51613],{"id":51612},"_2713-switch语句","2.7.1.3 switch语句",[19,51615,51616],{},[519,51617],{"alt":31,"src":51618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51620,51621],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[596,51623,51625],{"id":51624},"_272-循环语句","2.7.2 循环语句",[22478,51627,51629],{"id":51628},"_2721-断点演示","2.7.2.1 断点演示",[19,51631,51632],{},[519,51633],{"alt":31,"src":51634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22478,51636,51638],{"id":51637},"_2722-while循环","2.7.2.2 while循环",[19,51640,51641],{},[519,51642],{"alt":31,"src":51643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51645,51646],{},[519,51647],{"alt":31,"src":51648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22478,51650,51652],{"id":51651},"_2723-for循环","2.7.2.3 for循环",[19,51654,51655],{},[519,51656],{"alt":31,"src":51657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51659,51660],{},"for(;;) {",[19,51662,1559],{},[19,51664,51665],{},"表示无限循环",[19,51667,51668],{},[519,51669],{"alt":31,"src":51670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22478,51672,51674],{"id":51673},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51676,51677],{},[519,51678],{"alt":31,"src":51679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51681,51683],{"id":51682},"_28-数组","2.8 数组",[596,51685,51687],{"id":51686},"_281-基础认识","2.8.1 基础认识",[19,51689,51690],{},[519,51691],{"alt":31,"src":51692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51694,51695],{},[519,51696],{"alt":31,"src":51697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51699,51700],{},[519,51701],{"alt":31,"src":51702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51704,51705],{},[519,51706],{"alt":31,"src":51707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[596,51709,51711],{"id":51710},"_282-操作数组","2.8.2 操作数组",[19,51713,51714],{},[519,51715],{"alt":31,"src":51716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[579,51718,51719],{},[582,51720,51721],{},"添加元素",[19,51723,51724],{},[519,51725],{"alt":31,"src":51726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51728,51729],{},"console.log(arr.push('green'))",[19,51731,51732],{},"输出结果：为新数组的长度",[19,51734,51735],{},[519,51736],{"alt":31,"src":51737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51739,51740],{},"push用的非常多，一定要记住",[579,51742,51743],{},[582,51744,51745],{},"删除元素",[19,51747,51748],{},[519,51749],{"alt":31,"src":51750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51752,51753],{},[519,51754],{"alt":31,"src":51755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51757,51758],{},[519,51759],{"alt":31,"src":51760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[596,51762,51764],{"id":51763},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,51766,51768],{"className":51110,"code":51767,"language":51112,"meta":31,"style":31},"\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",[33,51769,51770,51785,51801,51805,51814,51832,51856,51878,51892,51900,51907,51919,51930,51934,51938,51945,51957,51972,51985,52004,52021,52036,52048,52060,52072,52076,52080,52091,52101,52113,52125,52137,52148,52152,52156,52168,52172,52186,52190,52194,52205,52219,52231,52245,52249,52258,52267,52271,52280,52284,52293,52298,52303,52316,52344,52349,52354,52379,52384,52388,52393,52398,52413,52417,52422,52452,52464,52480,52496,52510,52515,52522,52526,52531,52544,52552,52560,52564],{"__ignoreMap":31},[36,51771,51772,51775,51779,51782],{"class":38,"line":39},[36,51773,51774],{"class":42},"\u003C!",[36,51776,51778],{"class":51777},"s9eBZ","DOCTYPE",[36,51780,51781],{"class":2443}," html",[36,51783,51784],{"class":42},">\n",[36,51786,51787,51789,51791,51794,51796,51799],{"class":38,"line":66},[36,51788,1523],{"class":42},[36,51790,51112],{"class":51777},[36,51792,51793],{"class":2443}," lang",[36,51795,47],{"class":42},[36,51797,51798],{"class":405},"\"en\"",[36,51800,51784],{"class":42},[36,51802,51803],{"class":38,"line":73},[36,51804,2880],{"emptyLinePlaceholder":553},[36,51806,51807,51809,51812],{"class":38,"line":79},[36,51808,1523],{"class":42},[36,51810,51811],{"class":51777},"head",[36,51813,51784],{"class":42},[36,51815,51816,51819,51822,51825,51827,51830],{"class":38,"line":85},[36,51817,51818],{"class":42},"    \u003C",[36,51820,51821],{"class":51777},"meta",[36,51823,51824],{"class":2443}," charset",[36,51826,47],{"class":42},[36,51828,51829],{"class":405},"\"UTF-8\"",[36,51831,51784],{"class":42},[36,51833,51834,51836,51838,51841,51843,51846,51849,51851,51854],{"class":38,"line":419},[36,51835,51818],{"class":42},[36,51837,51821],{"class":51777},[36,51839,51840],{"class":2443}," http-equiv",[36,51842,47],{"class":42},[36,51844,51845],{"class":405},"\"X-UA-Compatible\"",[36,51847,51848],{"class":2443}," content",[36,51850,47],{"class":42},[36,51852,51853],{"class":405},"\"IE=edge\"",[36,51855,51784],{"class":42},[36,51857,51858,51860,51862,51864,51866,51869,51871,51873,51876],{"class":38,"line":425},[36,51859,51818],{"class":42},[36,51861,51821],{"class":51777},[36,51863,15400],{"class":2443},[36,51865,47],{"class":42},[36,51867,51868],{"class":405},"\"viewport\"",[36,51870,51848],{"class":2443},[36,51872,47],{"class":42},[36,51874,51875],{"class":405},"\"width=device-width, initial-scale=1.0\"",[36,51877,51784],{"class":42},[36,51879,51880,51882,51885,51888,51890],{"class":38,"line":431},[36,51881,51818],{"class":42},[36,51883,51884],{"class":51777},"title",[36,51886,51887],{"class":42},">Document\u003C\u002F",[36,51889,51884],{"class":51777},[36,51891,51784],{"class":42},[36,51893,51894,51896,51898],{"class":38,"line":437},[36,51895,51818],{"class":42},[36,51897,539],{"class":51777},[36,51899,51784],{"class":42},[36,51901,51902,51905],{"class":38,"line":443},[36,51903,51904],{"class":51777},"        *",[36,51906,16052],{"class":42},[36,51908,51909,51912,51915,51917],{"class":38,"line":2092},[36,51910,51911],{"class":53},"            margin",[36,51913,51914],{"class":42},": ",[36,51916,812],{"class":53},[36,51918,1774],{"class":42},[36,51920,51921,51924,51926,51928],{"class":38,"line":2097},[36,51922,51923],{"class":53},"            padding",[36,51925,51914],{"class":42},[36,51927,812],{"class":53},[36,51929,1774],{"class":42},[36,51931,51932],{"class":38,"line":2103},[36,51933,3009],{"class":42},[36,51935,51936],{"class":38,"line":2108},[36,51937,2880],{"emptyLinePlaceholder":553},[36,51939,51940,51943],{"class":38,"line":2122},[36,51941,51942],{"class":2443},"        .box",[36,51944,16052],{"class":42},[36,51946,51947,51950,51952,51955],{"class":38,"line":2127},[36,51948,51949],{"class":53},"            display",[36,51951,51914],{"class":42},[36,51953,51954],{"class":53},"flex",[36,51956,1774],{"class":42},[36,51958,51959,51962,51964,51967,51970],{"class":38,"line":2133},[36,51960,51961],{"class":53},"            width",[36,51963,51914],{"class":42},[36,51965,51966],{"class":53},"700",[36,51968,51969],{"class":46},"px",[36,51971,1774],{"class":42},[36,51973,51974,51977,51979,51981,51983],{"class":38,"line":2154},[36,51975,51976],{"class":53},"            height",[36,51978,51914],{"class":42},[36,51980,4453],{"class":53},[36,51982,51969],{"class":46},[36,51984,1774],{"class":42},[36,51986,51987,51990,51992,51994,51996,51999,52002],{"class":38,"line":2159},[36,51988,51989],{"class":53},"            border-left",[36,51991,51914],{"class":42},[36,51993,54],{"class":53},[36,51995,51969],{"class":46},[36,51997,51998],{"class":53}," solid",[36,52000,52001],{"class":53}," pink",[36,52003,1774],{"class":42},[36,52005,52006,52009,52011,52013,52015,52017,52019],{"class":38,"line":2173},[36,52007,52008],{"class":53},"            border-bottom",[36,52010,51914],{"class":42},[36,52012,54],{"class":53},[36,52014,51969],{"class":46},[36,52016,51998],{"class":53},[36,52018,52001],{"class":53},[36,52020,1774],{"class":42},[36,52022,52023,52025,52027,52029,52031,52034],{"class":38,"line":2178},[36,52024,51911],{"class":53},[36,52026,51914],{"class":42},[36,52028,1269],{"class":53},[36,52030,51969],{"class":46},[36,52032,52033],{"class":53}," auto",[36,52035,1774],{"class":42},[36,52037,52038,52041,52043,52046],{"class":38,"line":2207},[36,52039,52040],{"class":53},"            justify-content",[36,52042,51914],{"class":42},[36,52044,52045],{"class":53},"space-around",[36,52047,1774],{"class":42},[36,52049,52050,52053,52055,52058],{"class":38,"line":2212},[36,52051,52052],{"class":53},"            align-items",[36,52054,51914],{"class":42},[36,52056,52057],{"class":53},"flex-end",[36,52059,1774],{"class":42},[36,52061,52062,52065,52067,52070],{"class":38,"line":2229},[36,52063,52064],{"class":53},"            text-align",[36,52066,51914],{"class":42},[36,52068,52069],{"class":53},"center",[36,52071,1774],{"class":42},[36,52073,52074],{"class":38,"line":2234},[36,52075,3009],{"class":42},[36,52077,52078],{"class":38,"line":2239},[36,52079,2880],{"emptyLinePlaceholder":553},[36,52081,52082,52084,52086,52089],{"class":38,"line":2244},[36,52083,51942],{"class":2443},[36,52085,1573],{"class":46},[36,52087,52088],{"class":51777},"div",[36,52090,16052],{"class":42},[36,52092,52093,52095,52097,52099],{"class":38,"line":2258},[36,52094,51949],{"class":53},[36,52096,51914],{"class":42},[36,52098,51954],{"class":53},[36,52100,1774],{"class":42},[36,52102,52103,52105,52107,52109,52111],{"class":38,"line":2263},[36,52104,51961],{"class":53},[36,52106,51914],{"class":42},[36,52108,1269],{"class":53},[36,52110,51969],{"class":46},[36,52112,1774],{"class":42},[36,52114,52115,52118,52120,52123],{"class":38,"line":3057},[36,52116,52117],{"class":53},"            background-color",[36,52119,51914],{"class":42},[36,52121,52122],{"class":53},"pink",[36,52124,1774],{"class":42},[36,52126,52127,52130,52132,52135],{"class":38,"line":3071},[36,52128,52129],{"class":53},"            flex-direction",[36,52131,51914],{"class":42},[36,52133,52134],{"class":53},"column",[36,52136,1774],{"class":42},[36,52138,52139,52141,52143,52146],{"class":38,"line":3079},[36,52140,52040],{"class":53},[36,52142,51914],{"class":42},[36,52144,52145],{"class":53},"space-between",[36,52147,1774],{"class":42},[36,52149,52150],{"class":38,"line":3084},[36,52151,3009],{"class":42},[36,52153,52154],{"class":38,"line":3090},[36,52155,2880],{"emptyLinePlaceholder":553},[36,52157,52158,52160,52163,52166],{"class":38,"line":3096},[36,52159,51942],{"class":2443},[36,52161,52162],{"class":51777}," div",[36,52164,52165],{"class":51777}," span",[36,52167,16052],{"class":42},[36,52169,52170],{"class":38,"line":3101},[36,52171,2880],{"emptyLinePlaceholder":553},[36,52173,52174,52177,52179,52182,52184],{"class":38,"line":8428},[36,52175,52176],{"class":53},"            margin-top",[36,52178,51914],{"class":42},[36,52180,52181],{"class":53},"-20",[36,52183,51969],{"class":46},[36,52185,1774],{"class":42},[36,52187,52188],{"class":38,"line":8452},[36,52189,3009],{"class":42},[36,52191,52192],{"class":38,"line":8457},[36,52193,2880],{"emptyLinePlaceholder":553},[36,52195,52196,52198,52200,52203],{"class":38,"line":8463},[36,52197,51942],{"class":2443},[36,52199,52162],{"class":51777},[36,52201,52202],{"class":51777}," h4",[36,52204,16052],{"class":42},[36,52206,52207,52210,52212,52215,52217],{"class":38,"line":8490},[36,52208,52209],{"class":53},"            margin-bottom",[36,52211,51914],{"class":42},[36,52213,52214],{"class":53},"-35",[36,52216,51969],{"class":46},[36,52218,1774],{"class":42},[36,52220,52221,52223,52225,52227,52229],{"class":38,"line":8495},[36,52222,51961],{"class":53},[36,52224,51914],{"class":42},[36,52226,974],{"class":53},[36,52228,51969],{"class":46},[36,52230,1774],{"class":42},[36,52232,52233,52236,52238,52241,52243],{"class":38,"line":8501},[36,52234,52235],{"class":53},"            margin-left",[36,52237,51914],{"class":42},[36,52239,52240],{"class":53},"-10",[36,52242,51969],{"class":46},[36,52244,1774],{"class":42},[36,52246,52247],{"class":38,"line":8513},[36,52248,3009],{"class":42},[36,52250,52251,52254,52256],{"class":38,"line":8525},[36,52252,52253],{"class":42},"    \u003C\u002F",[36,52255,539],{"class":51777},[36,52257,51784],{"class":42},[36,52259,52260,52263,52265],{"class":38,"line":8537},[36,52261,52262],{"class":42},"\u003C\u002F",[36,52264,51811],{"class":51777},[36,52266,51784],{"class":42},[36,52268,52269],{"class":38,"line":10196},[36,52270,2880],{"emptyLinePlaceholder":553},[36,52272,52273,52275,52278],{"class":38,"line":10221},[36,52274,1523],{"class":42},[36,52276,52277],{"class":51777},"body",[36,52279,51784],{"class":42},[36,52281,52282],{"class":38,"line":10244},[36,52283,2880],{"emptyLinePlaceholder":553},[36,52285,52286,52288,52291],{"class":38,"line":10268},[36,52287,51818],{"class":42},[36,52289,52290],{"class":51777},"script",[36,52292,51784],{"class":42},[36,52294,52295],{"class":38,"line":10273},[36,52296,52297],{"class":69},"        \u002F\u002F 1. 四次弹框效果\n",[36,52299,52300],{"class":38,"line":10278},[36,52301,52302],{"class":69},"        \u002F\u002F 声明一个新的数组\n",[36,52304,52305,52308,52311,52313],{"class":38,"line":10283},[36,52306,52307],{"class":46},"        let",[36,52309,52310],{"class":42}," arr ",[36,52312,47],{"class":46},[36,52314,52315],{"class":42}," []\n",[36,52317,52318,52320,52322,52325,52327,52329,52331,52333,52335,52338,52340,52342],{"class":38,"line":10292},[36,52319,3883],{"class":46},[36,52321,2138],{"class":42},[36,52323,52324],{"class":46},"let",[36,52326,9918],{"class":42},[36,52328,47],{"class":46},[36,52330,25599],{"class":53},[36,52332,9925],{"class":42},[36,52334,2068],{"class":46},[36,52336,52337],{"class":53}," 4",[36,52339,3694],{"class":42},[36,52341,2772],{"class":46},[36,52343,12922],{"class":42},[36,52345,52346],{"class":38,"line":10297},[36,52347,52348],{"class":69},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,52350,52351],{"class":38,"line":10303},[36,52352,52353],{"class":69},"            \u002F\u002F arr.push(num)\n",[36,52355,52356,52359,52362,52364,52367,52369,52372,52374,52377],{"class":38,"line":10324},[36,52357,52358],{"class":42},"            arr.",[36,52360,52361],{"class":2443},"push",[36,52363,345],{"class":42},[36,52365,52366],{"class":2443},"prompt",[36,52368,345],{"class":42},[36,52370,52371],{"class":405},"`请输入第${",[36,52373,1057],{"class":42},[36,52375,52376],{"class":405},"}季度的数据:`",[36,52378,370],{"class":42},[36,52380,52381],{"class":38,"line":10330},[36,52382,52383],{"class":69},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,52385,52386],{"class":38,"line":10344},[36,52387,3009],{"class":42},[36,52389,52390],{"class":38,"line":10350},[36,52391,52392],{"class":69},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,52394,52395],{"class":38,"line":10377},[36,52396,52397],{"class":69},"        \u002F\u002F 盒子开头\n",[36,52399,52400,52403,52406,52408,52411],{"class":38,"line":10386},[36,52401,52402],{"class":42},"        document.",[36,52404,52405],{"class":2443},"write",[36,52407,345],{"class":42},[36,52409,52410],{"class":405},"` \u003Cdiv class=\"box\">`",[36,52412,63],{"class":42},[36,52414,52415],{"class":38,"line":10392},[36,52416,2880],{"emptyLinePlaceholder":553},[36,52418,52419],{"class":38,"line":10400},[36,52420,52421],{"class":69},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,52423,52424,52426,52428,52430,52432,52434,52436,52438,52440,52443,52446,52448,52450],{"class":38,"line":10405},[36,52425,3883],{"class":46},[36,52427,2138],{"class":42},[36,52429,52324],{"class":46},[36,52431,9918],{"class":42},[36,52433,47],{"class":46},[36,52435,4573],{"class":53},[36,52437,9925],{"class":42},[36,52439,1523],{"class":46},[36,52441,52442],{"class":42}," arr.",[36,52444,52445],{"class":53},"length",[36,52447,3694],{"class":42},[36,52449,2772],{"class":46},[36,52451,12922],{"class":42},[36,52453,52454,52457,52459,52461],{"class":38,"line":17084},[36,52455,52456],{"class":42},"            document.",[36,52458,52405],{"class":2443},[36,52460,345],{"class":42},[36,52462,52463],{"class":405},"`\n",[36,52465,52466,52469,52471,52473,52475,52477],{"class":38,"line":17090},[36,52467,52468],{"class":405},"              \u003Cdiv style=\"height: ${",[36,52470,4360],{"class":42},[36,52472,1503],{"class":405},[36,52474,1057],{"class":42},[36,52476,1553],{"class":405},[36,52478,52479],{"class":405},"}px;\">\n",[36,52481,52482,52485,52487,52489,52491,52493],{"class":38,"line":17113},[36,52483,52484],{"class":405},"                \u003Cspan>${",[36,52486,4360],{"class":42},[36,52488,1503],{"class":405},[36,52490,1057],{"class":42},[36,52492,1553],{"class":405},[36,52494,52495],{"class":405},"}\u003C\u002Fspan>\n",[36,52497,52498,52501,52503,52505,52507],{"class":38,"line":17119},[36,52499,52500],{"class":405},"                \u003Ch4>第${",[36,52502,1057],{"class":42},[36,52504,46043],{"class":46},[36,52506,25599],{"class":53},[36,52508,52509],{"class":405},"}季度\u003C\u002Fh4>\n",[36,52511,52512],{"class":38,"line":17142},[36,52513,52514],{"class":405},"              \u003C\u002Fdiv>          \n",[36,52516,52517,52520],{"class":38,"line":17156},[36,52518,52519],{"class":405},"            `",[36,52521,63],{"class":42},[36,52523,52524],{"class":38,"line":17176},[36,52525,3009],{"class":42},[36,52527,52528],{"class":38,"line":17182},[36,52529,52530],{"class":69},"        \u002F\u002F 盒子结尾\n",[36,52532,52533,52535,52537,52539,52542],{"class":38,"line":17193},[36,52534,52402],{"class":42},[36,52536,52405],{"class":2443},[36,52538,345],{"class":42},[36,52540,52541],{"class":405},"` \u003C\u002Fdiv>`",[36,52543,63],{"class":42},[36,52545,52546,52548,52550],{"class":38,"line":17216},[36,52547,52253],{"class":42},[36,52549,52290],{"class":51777},[36,52551,51784],{"class":42},[36,52553,52554,52556,52558],{"class":38,"line":17238},[36,52555,52262],{"class":42},[36,52557,52277],{"class":51777},[36,52559,51784],{"class":42},[36,52561,52562],{"class":38,"line":17243},[36,52563,2880],{"emptyLinePlaceholder":553},[36,52565,52566,52568,52570],{"class":38,"line":17249},[36,52567,52262],{"class":42},[36,52569,51112],{"class":51777},[36,52571,51784],{"class":42},[596,52573,52575],{"id":52574},"_284-冒泡排序","2.8.4 冒泡排序",[26,52577,52579],{"className":51110,"code":52578,"language":51112,"meta":31,"style":31},"\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",[33,52580,52581,52591,52605,52609,52617,52632,52652,52664,52672,52676,52684,52692,52724,52757,52794,52799,52818,52823,52836,52851,52867,52871,52876,52880,52890,52899,52907,52911],{"__ignoreMap":31},[36,52582,52583,52585,52587,52589],{"class":38,"line":39},[36,52584,51774],{"class":42},[36,52586,51778],{"class":51777},[36,52588,51781],{"class":2443},[36,52590,51784],{"class":42},[36,52592,52593,52595,52597,52599,52601,52603],{"class":38,"line":66},[36,52594,1523],{"class":42},[36,52596,51112],{"class":51777},[36,52598,51793],{"class":2443},[36,52600,47],{"class":42},[36,52602,51798],{"class":405},[36,52604,51784],{"class":42},[36,52606,52607],{"class":38,"line":73},[36,52608,2880],{"emptyLinePlaceholder":553},[36,52610,52611,52613,52615],{"class":38,"line":79},[36,52612,1523],{"class":42},[36,52614,51811],{"class":51777},[36,52616,51784],{"class":42},[36,52618,52619,52622,52624,52626,52628,52630],{"class":38,"line":85},[36,52620,52621],{"class":42},"  \u003C",[36,52623,51821],{"class":51777},[36,52625,51824],{"class":2443},[36,52627,47],{"class":42},[36,52629,51829],{"class":405},[36,52631,51784],{"class":42},[36,52633,52634,52636,52638,52640,52642,52644,52646,52648,52650],{"class":38,"line":419},[36,52635,52621],{"class":42},[36,52637,51821],{"class":51777},[36,52639,15400],{"class":2443},[36,52641,47],{"class":42},[36,52643,51868],{"class":405},[36,52645,51848],{"class":2443},[36,52647,47],{"class":42},[36,52649,51875],{"class":405},[36,52651,51784],{"class":42},[36,52653,52654,52656,52658,52660,52662],{"class":38,"line":425},[36,52655,52621],{"class":42},[36,52657,51884],{"class":51777},[36,52659,51887],{"class":42},[36,52661,51884],{"class":51777},[36,52663,51784],{"class":42},[36,52665,52666,52668,52670],{"class":38,"line":431},[36,52667,52262],{"class":42},[36,52669,51811],{"class":51777},[36,52671,51784],{"class":42},[36,52673,52674],{"class":38,"line":437},[36,52675,2880],{"emptyLinePlaceholder":553},[36,52677,52678,52680,52682],{"class":38,"line":443},[36,52679,1523],{"class":42},[36,52681,52277],{"class":51777},[36,52683,51784],{"class":42},[36,52685,52686,52688,52690],{"class":38,"line":2092},[36,52687,52621],{"class":42},[36,52689,52290],{"class":51777},[36,52691,51784],{"class":42},[36,52693,52694,52697,52699,52701,52704,52706,52708,52710,52712,52714,52716,52718,52720,52722],{"class":38,"line":2097},[36,52695,52696],{"class":46},"    let",[36,52698,52310],{"class":42},[36,52700,47],{"class":46},[36,52702,52703],{"class":42}," [",[36,52705,938],{"class":53},[36,52707,12915],{"class":42},[36,52709,912],{"class":53},[36,52711,12915],{"class":42},[36,52713,127],{"class":53},[36,52715,12915],{"class":42},[36,52717,96],{"class":53},[36,52719,12915],{"class":42},[36,52721,54],{"class":53},[36,52723,33723],{"class":42},[36,52725,52726,52728,52730,52732,52734,52736,52738,52740,52742,52744,52746,52749,52751,52753,52755],{"class":38,"line":2103},[36,52727,3681],{"class":46},[36,52729,2138],{"class":42},[36,52731,52324],{"class":46},[36,52733,9918],{"class":42},[36,52735,47],{"class":46},[36,52737,4573],{"class":53},[36,52739,9925],{"class":42},[36,52741,1523],{"class":46},[36,52743,52442],{"class":42},[36,52745,52445],{"class":53},[36,52747,52748],{"class":46}," -",[36,52750,25599],{"class":53},[36,52752,3694],{"class":42},[36,52754,2772],{"class":46},[36,52756,12922],{"class":42},[36,52758,52759,52762,52764,52766,52768,52770,52772,52774,52776,52778,52780,52782,52784,52786,52788,52790,52792],{"class":38,"line":2108},[36,52760,52761],{"class":46},"      for",[36,52763,2138],{"class":42},[36,52765,52324],{"class":46},[36,52767,9980],{"class":42},[36,52769,47],{"class":46},[36,52771,4573],{"class":53},[36,52773,9987],{"class":42},[36,52775,1523],{"class":46},[36,52777,52442],{"class":42},[36,52779,52445],{"class":53},[36,52781,52748],{"class":46},[36,52783,9918],{"class":42},[36,52785,173],{"class":46},[36,52787,25599],{"class":53},[36,52789,9994],{"class":42},[36,52791,2772],{"class":46},[36,52793,12922],{"class":42},[36,52795,52796],{"class":38,"line":2122},[36,52797,52798],{"class":69},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,52800,52801,52803,52806,52808,52811,52813,52815],{"class":38,"line":2127},[36,52802,2977],{"class":46},[36,52804,52805],{"class":42}," (arr[j] ",[36,52807,1573],{"class":46},[36,52809,52810],{"class":42}," arr[j ",[36,52812,1097],{"class":46},[36,52814,25599],{"class":53},[36,52816,52817],{"class":42},"]) {\n",[36,52819,52820],{"class":38,"line":2133},[36,52821,52822],{"class":69},"          \u002F\u002F 交换两个变量\n",[36,52824,52825,52828,52831,52833],{"class":38,"line":2154},[36,52826,52827],{"class":46},"          let",[36,52829,52830],{"class":42}," tmp ",[36,52832,47],{"class":46},[36,52834,52835],{"class":42}," arr[j]\n",[36,52837,52838,52841,52843,52845,52847,52849],{"class":38,"line":2159},[36,52839,52840],{"class":42},"          arr[j] ",[36,52842,47],{"class":46},[36,52844,52810],{"class":42},[36,52846,1097],{"class":46},[36,52848,25599],{"class":53},[36,52850,33723],{"class":42},[36,52852,52853,52856,52858,52860,52862,52864],{"class":38,"line":2173},[36,52854,52855],{"class":42},"          arr[j ",[36,52857,1097],{"class":46},[36,52859,25599],{"class":53},[36,52861,4923],{"class":42},[36,52863,47],{"class":46},[36,52865,52866],{"class":42}," tmp\n",[36,52868,52869],{"class":38,"line":2178},[36,52870,3009],{"class":42},[36,52872,52873],{"class":38,"line":2207},[36,52874,52875],{"class":42},"      }\n",[36,52877,52878],{"class":38,"line":2212},[36,52879,2667],{"class":42},[36,52881,52882,52885,52887],{"class":38,"line":2229},[36,52883,52884],{"class":42},"    document.",[36,52886,52405],{"class":2443},[36,52888,52889],{"class":42},"(arr)\n",[36,52891,52892,52895,52897],{"class":38,"line":2234},[36,52893,52894],{"class":42},"  \u003C\u002F",[36,52896,52290],{"class":51777},[36,52898,51784],{"class":42},[36,52900,52901,52903,52905],{"class":38,"line":2239},[36,52902,52262],{"class":42},[36,52904,52277],{"class":51777},[36,52906,51784],{"class":42},[36,52908,52909],{"class":38,"line":2244},[36,52910,2880],{"emptyLinePlaceholder":553},[36,52912,52913,52915,52917],{"class":38,"line":2258},[36,52914,52262],{"class":42},[36,52916,51112],{"class":51777},[36,52918,51784],{"class":42},[19,52920,52921],{},[519,52922],{"alt":31,"src":52923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52925,52926],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52928,52929],{},"let arr = [4, 2, 5, 1, 3]",[19,52931,52932],{},"\u002F\u002F 1.升序排列写法",[19,52934,52935],{},"arr.sort(function (a, b) {",[19,52937,52938],{},"return a - b",[19,52940,52941],{},"})",[19,52943,52944],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52946,52947],{},"\u002F\u002F 降序排列写法",[19,52949,52935],{},[19,52951,52952],{},"return b - a",[19,52954,52941],{},[19,52956,52957],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52959,52961],{"id":52960},"_29-函数","2.9 函数",[19,52963,52964],{},[519,52965],{"alt":31,"src":52966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52968,52969],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52971,52972],{},"函数的声明用function",[19,52974,52975],{},"函数里边可以嵌套函数",[596,52977,52979],{"id":52978},"_291-函数传参","2.9.1 函数传参",[19,52981,52982],{},[519,52983],{"alt":31,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52986,52987],{},[519,52988],{"alt":31,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1620,52991,52992,52995,52998,53001,53004,53007],{},[582,52993,52994],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[582,52996,52997],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[582,52999,53000],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[582,53002,53003],{},"开发中尽量保持形参和实参个数一致",[582,53005,53006],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[582,53008,53009],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53011,53012],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[596,53014,53016],{"id":53015},"_292-函数的返回值","2.9.2 函数的返回值",[19,53018,53019],{},[519,53020],{"alt":31,"src":53021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53023,53024],{},[519,53025],{"alt":31,"src":53026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1620,53028,53029,53032,53035,53038,53041],{},[582,53030,53031],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[582,53033,53034],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[582,53036,53037],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[582,53039,53040],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[582,53042,53043],{},"断点调试:进入函数内部看执行过程F11",[596,53045,53047],{"id":53046},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,53049,53051],{"className":51110,"code":53050,"language":51112,"meta":31,"style":31},"    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",[33,53052,53053,53058,53063,53067,53072],{"__ignoreMap":31},[36,53054,53055],{"class":38,"line":39},[36,53056,53057],{"class":42},"    function fn(a, b) {\n",[36,53059,53060],{"class":38,"line":66},[36,53061,53062],{"class":42},"      console.log(a + b);\n",[36,53064,53065],{"class":38,"line":73},[36,53066,2667],{"class":42},[36,53068,53069],{"class":38,"line":79},[36,53070,53071],{"class":42},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,53073,53074],{"class":38,"line":85},[36,53075,53076],{"class":42},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[596,53078,53080],{"id":53079},"_294-作用域","2.9.4 作用域",[1620,53082,53083,53089,53094,53097,53100],{},[582,53084,53085,53086],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[770,53087,53088],{},"作用域",[582,53090,53091],{},[770,53092,53093],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[582,53095,53096],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[582,53098,53099],{},"函数内部可以直接所使用全局变量",[582,53101,53102],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53104,15113],{},[26,53106,53108],{"className":51110,"code":53107,"language":51112,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[33,53109,53110,53115,53120,53124,53129,53134,53139],{"__ignoreMap":31},[36,53111,53112],{"class":38,"line":39},[36,53113,53114],{"class":42},"    function fun() {\n",[36,53116,53117],{"class":38,"line":66},[36,53118,53119],{"class":42},"      num = 10\n",[36,53121,53122],{"class":38,"line":73},[36,53123,2667],{"class":42},[36,53125,53126],{"class":38,"line":79},[36,53127,53128],{"class":42},"    fun()\n",[36,53130,53131],{"class":38,"line":85},[36,53132,53133],{"class":42},"    console.log(num)\n",[36,53135,53136],{"class":38,"line":419},[36,53137,53138],{"class":42},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,53140,53141],{"class":38,"line":425},[36,53142,53143],{"class":42},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1620,53145,53146,53149],{},[582,53147,53148],{},"函数内部的形参可以看做是局部变量",[582,53150,53151],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53153,53154,53155],{},"变量访问原则： ",[770,53156,53157],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[596,53159,53161],{"id":53160},"_295-匿名函数","2.9.5 匿名函数",[19,53163,53164],{},"函数可以分为具名函数和匿名函数",[19,53166,53167],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[579,53169,53170],{},[582,53171,53172],{},"函数表达式",[19,53174,53175],{},[519,53176],{"alt":31,"src":53177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53179,53180],{},"里边也可以写参数",[19,53182,53183],{},"具名函数调用位置可以随意调整；",[19,53185,53186],{},"匿名函数函数表达式形式只能在声明后才可以使用",[579,53188,53189],{"start":66},[582,53190,53191],{},"立即执行函数",[19,53193,53194],{},[519,53195],{"alt":31,"src":53196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53198,53199],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53201,53202],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53204,53205],{},"(function () {})();",[19,53207,53208],{},"不要落下最后的;",[19,53210,53211],{},"立即执行函数必须要加;",[19,53213,53214],{},"分号写前写后都没问题",[19,53216,53217],{},"写前：",[19,53219,53220],{},"(function() {})()",[19,53222,53223],{},";(function () {})();",[19,53225,53226],{},"写后:",[19,53228,53229],{},"(function() {})();",[19,53231,53205],{},[19,53233,53234],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53236,53237],{},"还有一种写法：",[19,53239,53240],{},"(function(){}());",[19,53242,53243],{},"或者:",[19,53245,53246],{},"!function(){}();",[19,53248,53249],{},"立即执行函数有时候也是可以加名字的：",[19,53251,53252],{},"(function flexible(window,document) {}(window,document));",[19,53254,53255],{},"省一些调用方法",[596,53257,53259],{"id":53258},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53261,53262],{},[519,53263],{"alt":31,"src":53264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53266,53267],{},"这样就不用非得给x,y初始化了",[19,53269,53270],{},[519,53271],{"alt":31,"src":53272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53274,53275],{},"代码执行时先看左边",[19,53277,53278],{},"例如：console.log(false && 3+5)",[19,53280,53281],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53283,53284],{},"&&都是真时，就返回最后一个真值",[19,53286,53287],{},"console.log(11 && 22)",[19,53289,53290],{},"输出22",[19,53292,53293],{},"逻辑与：遇真则真",[19,53295,15113],{},[19,53297,53298],{},"let age=1",[19,53300,53301],{},"console.log(11 || age++)",[19,53303,53304],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53306,53307],{},"console.log(11 || 22)",[19,53309,53310],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53312,53313],{},"||如果都是假的话，就取最后一个假的值了",[596,53315,53317],{"id":53316},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53319,53320],{},"显示转换：",[19,53322,53323,53326,53327],{},[770,53324,53325],{},"记忆","： ",[770,53328,53329],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53331,53332],{},"空字符串为假，其他字符串全为真",[19,53334,53335],{},[519,53336],{"alt":31,"src":53337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53339,53340],{},"隐式转换：",[19,53342,53343],{},[519,53344],{"alt":31,"src":53345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53347,53348],{},"隐式转换:",[19,53350,53351],{},"null+3=3",[19,53353,53354],{},"undefined+3=NaN",[19,53356,53357],{},"null==undefined 输出true,他两个都当0看",[19,53359,53360],{},"null===undefined 输出false",[19,53362,53363],{},"undefined做任何操作都是NaN",[19,53365,53366],{},"NaN不等于NaN，NaN表示计算错误",[14,53368,53370],{"id":53369},"_210-对象","2.10 对象",[596,53372,53374],{"id":53373},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53376,53377],{},"对象也是一种数据类型，里边的数据是无序的",[19,53379,53380],{},"对象由属性和方法组成",[19,53382,53383],{},[519,53384],{"alt":31,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53387,53388],{},[519,53389],{"alt":31,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53392,53393],{},[519,53394],{"alt":31,"src":53395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[596,53397,53399],{"id":53398},"_2102-对象属性","2.10.2 对象属性",[19,53401,53402],{},[519,53403],{"alt":31,"src":53404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[579,53406,53407],{},[582,53408,53409],{},"查询对象",[19,53411,53412],{},"对象名.属性 goods.uname",[19,53414,53415],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53417,53418],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53420,53421],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53423,53424],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[579,53426,53427],{"start":66},[582,53428,53429],{},"重新赋值",[19,53431,53432],{},"对象名.属性=新值",[579,53434,53435],{"start":73},[582,53436,53437],{},"增加新数据",[19,53439,53432],{},[579,53441,53442],{"start":79},[582,53443,53444],{},"删除对象中的属性",[19,53446,53447],{},"delete 对象名.属性",[596,53449,53451],{"id":53450},"_2103-对象方法","2.10.3 对象方法",[19,53453,53454],{},[519,53455],{"alt":31,"src":53456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53458,53459],{},"后边跟的是匿名函数",[19,53461,53462],{},"对象外面的叫函数；对象内部的叫方法",[19,53464,53465],{},[519,53466],{"alt":31,"src":53467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[596,53469,53471],{"id":53470},"_2104-遍历对象","2.10.4 遍历对象",[19,53473,53474],{},"理解为加括号的python字典遍历",[19,53476,53477],{},[519,53478],{"alt":31,"src":53479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53481,53482],{},"k是字符串类型",[19,53484,53485],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,53487,53489],{"className":51110,"code":53488,"language":51112,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[33,53490,53491,53496,53501,53506,53511],{"__ignoreMap":31},[36,53492,53493],{"class":38,"line":39},[36,53494,53495],{"class":42},"   let arr = [1, 2, 3]\n",[36,53497,53498],{"class":38,"line":66},[36,53499,53500],{"class":42},"    for (let k in arr) {\n",[36,53502,53503],{"class":38,"line":73},[36,53504,53505],{"class":42},"      console.log(k)\n",[36,53507,53508],{"class":38,"line":79},[36,53509,53510],{"class":42},"      console.log(arr[k])\n",[36,53512,53513],{"class":38,"line":85},[36,53514,2667],{"class":42},[19,53516,53517],{},[519,53518],{"alt":31,"src":53519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53521,53522],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53524,53525],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53527,53528],{},"for in 得到的k是属性名",[52290,53530,53531],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,53533,53534],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[596,53536,53538],{"id":53537},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53540,53541],{},"数组中放对象信息",[26,53543,53547],{"className":53544,"code":53545,"language":53546,"meta":31,"style":31},"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",[33,53548,53549,53557,53562,53567,53572,53577,53582,53587,53592,53597,53602,53607,53612,53616,53620],{"__ignoreMap":31},[36,53550,53551,53553,53555],{"class":38,"line":39},[36,53552,1523],{"class":42},[36,53554,52290],{"class":51777},[36,53556,51784],{"class":42},[36,53558,53559],{"class":38,"line":66},[36,53560,53561],{"class":42},"    let students = [\n",[36,53563,53564],{"class":38,"line":73},[36,53565,53566],{"class":42},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,53568,53569],{"class":38,"line":79},[36,53570,53571],{"class":42},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,53573,53574],{"class":38,"line":85},[36,53575,53576],{"class":42},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,53578,53579],{"class":38,"line":419},[36,53580,53581],{"class":42},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,53583,53584],{"class":38,"line":425},[36,53585,53586],{"class":42},"    ]\n",[36,53588,53589],{"class":38,"line":431},[36,53590,53591],{"class":42},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,53593,53594],{"class":38,"line":437},[36,53595,53596],{"class":42},"      for (let k in students[i]) {\n",[36,53598,53599],{"class":38,"line":443},[36,53600,53601],{"class":42},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,53603,53604],{"class":38,"line":2092},[36,53605,53606],{"class":42},"        \u002F\u002F输出每个人的名字：\n",[36,53608,53609],{"class":38,"line":2097},[36,53610,53611],{"class":42},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,53613,53614],{"class":38,"line":2103},[36,53615,52875],{"class":42},[36,53617,53618],{"class":38,"line":2108},[36,53619,2667],{"class":42},[36,53621,53622,53624,53626],{"class":38,"line":2122},[36,53623,52894],{"class":42},[36,53625,52290],{"class":51777},[36,53627,51784],{"class":42},[596,53629,53631],{"id":53630},"_2106-内置对象","2.10.6 内置对象",[19,53633,53634],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[579,53636,53637],{},[582,53638,53639],{},"数学对象Math",[19,53641,53642],{},[519,53643],{"alt":31,"src":53644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53646,53647],{},[43,53648,53651],{"href":53649,"rel":53650},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24345],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53653,53654],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53656,53657],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53659,53660],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53662,53663],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53665,53666],{},"null属于对象数据类型",[579,53668,53669],{"start":66},[582,53670,53671],{},"生成任意范围随机数",[19,53673,53674],{},[519,53675],{"alt":31,"src":53676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53678,53679],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53681,53682],{},"乘以几就取不到几",[19,53684,53685],{},"取数组中的随机元素：",[19,53687,53688],{},"let arr = ['red', 'green', 'blue']",[19,53690,53691],{},"let random = Math.floor(Math.random() * arr.length)",[19,53693,53694],{},"console.log(arr[random])",[19,53696,53697],{},"这个函数得到的是全闭区间",[19,53699,53700],{},"function getRandom(N, M) {",[19,53702,53703],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53705,1559],{},[19,53707,53708],{},"console.log(getRandom(4, 8))",[596,53710,53712],{"id":53711},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53714,53715],{},[519,53716],{"alt":31,"src":53717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53719,53720],{},[519,53721],{"alt":31,"src":53722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53724,53725],{},[519,53726],{"alt":31,"src":53727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53729,53730],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53732,53733],{},[519,53734],{"alt":31,"src":53735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53737,53738],{},[519,53739],{"alt":31,"src":53740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53742,53743],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53745,53746],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53748,53749],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[539,53751,53752],{},"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":31,"searchDepth":66,"depth":66,"links":53754},[53755,53763,53764,53765,53766,53767,53774,53778,53784,53793],{"id":50945,"depth":66,"text":50946,"children":53756},[53757,53758,53759,53760,53761,53762],{"id":50949,"depth":73,"text":50950},{"id":50966,"depth":73,"text":50967},{"id":51006,"depth":73,"text":51007},{"id":51018,"depth":73,"text":51019},{"id":51027,"depth":73,"text":51028},{"id":51075,"depth":73,"text":51076},{"id":51085,"depth":66,"text":51086},{"id":51173,"depth":66,"text":51174},{"id":51196,"depth":66,"text":51197},{"id":51208,"depth":66,"text":51209},{"id":51395,"depth":66,"text":51396,"children":53768},[53769,53770,53771,53772,53773],{"id":51399,"depth":73,"text":51400},{"id":51408,"depth":73,"text":51409},{"id":51436,"depth":73,"text":51437},{"id":51472,"depth":73,"text":51473},{"id":51497,"depth":73,"text":51498},{"id":51509,"depth":66,"text":51510,"children":53775},[53776,53777],{"id":51530,"depth":73,"text":51531},{"id":51624,"depth":73,"text":51625},{"id":51682,"depth":66,"text":51683,"children":53779},[53780,53781,53782,53783],{"id":51686,"depth":73,"text":51687},{"id":51710,"depth":73,"text":51711},{"id":51763,"depth":73,"text":51764},{"id":52574,"depth":73,"text":52575},{"id":52960,"depth":66,"text":52961,"children":53785},[53786,53787,53788,53789,53790,53791,53792],{"id":52978,"depth":73,"text":52979},{"id":53015,"depth":73,"text":53016},{"id":53046,"depth":73,"text":53047},{"id":53079,"depth":73,"text":53080},{"id":53160,"depth":73,"text":53161},{"id":53258,"depth":73,"text":53259},{"id":53316,"depth":73,"text":53317},{"id":53369,"depth":66,"text":53370,"children":53794},[53795,53796,53797,53798,53799,53800,53801],{"id":53373,"depth":73,"text":53374},{"id":53398,"depth":73,"text":53399},{"id":53450,"depth":73,"text":53451},{"id":53470,"depth":73,"text":53471},{"id":53537,"depth":73,"text":53538},{"id":53630,"depth":73,"text":53631},{"id":53711,"depth":73,"text":53712},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50937,"description":550},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53808,"title":53809,"body":53810,"description":550,"extension":551,"meta":77150,"navigation":553,"path":77151,"seo":77152,"stem":77153,"__hash__":77154},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53811,"toc":77090},[53812,53815,53818,53821,53826,53829,53832,53835,53839,53843,53849,53854,53862,53869,53872,53876,53881,53886,53891,53894,53897,53908,53911,53915,53918,53921,53926,53931,53936,53939,53942,54034,54037,54042,54045,54050,54053,54056,54061,54064,54069,54073,54076,54090,54094,54099,54102,54105,54109,54114,54117,54121,54125,54130,54134,54139,54142,54145,54148,54151,54154,54157,54162,54167,54195,54198,54201,54204,54209,54212,54215,54218,54221,54225,54254,54258,54263,54268,54271,54274,54277,54282,54397,54402,54407,54568,54573,54576,54580,54585,54590,54593,54596,54599,54602,54605,54608,54611,54614,54617,54620,54623,54626,54629,54632,54634,54637,54640,54643,54648,54652,55049,55052,55058,55062,55067,56349,56354,56357,56360,56363,56368,57564,57568,57574,57579,57582,57587,57592,57596,57600,57605,57608,57613,57616,57619,57623,58531,58534,58538,58759,58762,58765,58768,58994,58997,59221,59224,59228,59233,59236,59239,59467,59470,59503,59506,59510,59515,59519,59522,59525,59528,59531,59534,59537,59540,59545,60825,60829,60832,61925,61929,61932,61935,61938,61941,61945,61948,61951,61953,61961,63442,63446,63449,63452,63455,63664,63667,63671,63675,63680,63685,63688,63691,63696,63700,63705,63708,63817,63821,63826,63831,63834,63837,63841,63846,63851,63856,63859,63862,63873,63876,63881,63886,63889,63892,63965,63969,63974,63977,63979,63990,63994,63999,65325,65328,65331,65334,65336,65339,65342,65345,65348,65351,65354,65357,65360,65363,65366,65369,65372,65374,65376,65379,65383,66477,66480,66483,66499,66513,66516,66521,66527,66532,66536,66540,66545,66549,66554,66996,67001,67004,67008,67013,67016,67019,67023,67028,67032,67037,67042,67046,67051,67056,67059,67064,67069,67073,67078,67083,67187,67190,67194,67199,67565,67568,67571,67574,67577,67580,67583,67586,67589,68885,68889,68894,68899,68902,68905,68908,68911,68913,68918,68923,68926,68930,68935,68940,68945,68948,68951,68954,68957,68960,68965,68968,68972,68977,68982,68986,68991,68994,68999,69002,69005,69008,69011,69014,69019,69022,69025,69028,69031,69035,69040,69043,69047,69052,69055,69058,69062,69091,69094,69098,69102,69107,69111,69116,69119,69122,69125,69128,69131,69134,69137,69140,69143,69146,69149,69152,69155,69158,69162,69167,69172,69175,69179,69183,69188,69191,69195,69198,69201,69206,69211,69216,69221,69226,69229,69232,69237,69242,69246,69251,69254,69259,69262,69265,69268,69271,69276,69279,69288,69292,69297,69300,69303,69307,69310,69315,69319,69322,69328,69334,69338,69364,69367,70928,70931,71427,71430,71435,71440,71445,71449,71454,71459,71464,71468,71473,71476,71479,71482,71485,71489,71492,71497,71500,71505,71509,71514,71517,71522,71527,71532,71535,71538,71543,71548,71551,71554,71558,71561,71566,71569,71574,71577,71582,71587,71592,71595,71600,71665,71668,71679,71683,71688,71860,71864,71869,71872,71875,71878,71882,71893,71897,71900,71905,71910,71913,71916,71919,71922,71925,71927,71930,71933,71936,71941,71944,71949,71952,71956,71959,71962,71976,71980,71983,72038,72043,72046,72049,72054,72057,72061,72066,72196,72200,72205,72210,72291,72296,72300,72303,72308,72313,72319,72322,72325,72328,72332,72337,72340,72351,72355,72372,75419,75423,75426,75429,75432,75453,75457,75460,75468,75471,75476,75479,75482,75487,75492,75496,75517,75521,75526,75529,75532,75535,75538,75542,75547,75550,75554,75559,75562,75567,75570,75575,75578,75583,76786,76790,76795,76798,76803,77087],[10,53813,53809],{"id":53814},"_3web-apis",[19,53816,53817],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53819,53820],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53822,53823],{},[519,53824],{"alt":31,"src":53825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53827,53828],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53830,53831],{},"建议数组和对象使用 const 来声明",[19,53833,53834],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53836,53838],{"id":53837},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[596,53840,53842],{"id":53841},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53844,53845,53848],{},[33,53846,53847],{},"document"," = HTML 文件解析后的对象化表示；",[19,53850,53851,53853],{},[33,53852,53847],{}," ≠ HTML 文件本身",[19,53855,53856,53861],{},[770,53857,53858],{},[33,53859,53860],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53863,53864,53868],{},[770,53865,53866],{},[33,53867,53847],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53870,53871],{},"document实际上为window.document的简写",[596,53873,53875],{"id":53874},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53877,53878],{},[519,53879],{"alt":31,"src":53880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53882,53883],{},[519,53884],{"alt":31,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53887,53888],{},[519,53889],{"alt":31,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53892,53893],{},"console.dir()",[19,53895,53896],{},"dir用来打印对象",[1620,53898,53899,53902,53905],{},[582,53900,53901],{},"任何一个标签，都是一个对象",[582,53903,53904],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[582,53906,53907],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53909,53910],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[596,53912,53914],{"id":53913},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53916,53917],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53919,53920],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53922,53923],{},[770,53924,53925],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[579,53927,53928],{},[582,53929,53930],{},"利用CSS选择器来获取标签元素",[19,53932,53933],{},[519,53934],{"alt":31,"src":53935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53937,53938],{},"里边的选择器必须必须加引号！！！",[19,53940,53941],{},"只选择第一个元素",[26,53943,53945],{"className":53544,"code":53944,"language":53546,"meta":31,"style":31},"\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",[33,53946,53947,53955,53976,53995,54003,54008,54013,54018,54026],{"__ignoreMap":31},[36,53948,53949,53951,53953],{"class":38,"line":39},[36,53950,1523],{"class":42},[36,53952,52277],{"class":51777},[36,53954,51784],{"class":42},[36,53956,53957,53959,53961,53964,53966,53969,53972,53974],{"class":38,"line":66},[36,53958,52621],{"class":42},[36,53960,52088],{"class":51777},[36,53962,53963],{"class":2443}," class",[36,53965,47],{"class":42},[36,53967,53968],{"class":405},"\"box\"",[36,53970,53971],{"class":42},">123\u003C\u002F",[36,53973,52088],{"class":51777},[36,53975,51784],{"class":42},[36,53977,53978,53980,53982,53984,53986,53988,53991,53993],{"class":38,"line":73},[36,53979,52621],{"class":42},[36,53981,52088],{"class":51777},[36,53983,53963],{"class":2443},[36,53985,47],{"class":42},[36,53987,53968],{"class":405},[36,53989,53990],{"class":42},">456\u003C\u002F",[36,53992,52088],{"class":51777},[36,53994,51784],{"class":42},[36,53996,53997,53999,54001],{"class":38,"line":79},[36,53998,52621],{"class":42},[36,54000,52290],{"class":51777},[36,54002,51784],{"class":42},[36,54004,54005],{"class":38,"line":85},[36,54006,54007],{"class":42},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,54009,54010],{"class":38,"line":419},[36,54011,54012],{"class":42},"    const box = document.querySelector('div')\n",[36,54014,54015],{"class":38,"line":425},[36,54016,54017],{"class":42},"    console.dir(box)\n",[36,54019,54020,54022,54024],{"class":38,"line":431},[36,54021,52894],{"class":42},[36,54023,52290],{"class":51777},[36,54025,51784],{"class":42},[36,54027,54028,54030,54032],{"class":38,"line":437},[36,54029,52262],{"class":42},[36,54031,52277],{"class":51777},[36,54033,51784],{"class":42},[19,54035,54036],{},"只选123，不选456",[19,54038,54039],{},[519,54040],{"alt":31,"src":54041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54043,54044],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54046,54047],{},[519,54048],{"alt":31,"src":54049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54051,54052],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54054,54055],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[579,54057,54058],{"start":66},[582,54059,54060],{},"其他方法来获取标签元素",[19,54062,54063],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54065,54066],{},[519,54067],{"alt":31,"src":54068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[596,54070,54072],{"id":54071},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54074,54075],{},"设置修改DOM元素内容有两种方式：",[1620,54077,54078,54081,54084,54087],{},[582,54079,54080],{},"元素.innerText=''",[582,54082,54083],{},"元素.innerHTML=''",[582,54085,54086],{},"不写字符串输出数字也是可以的",[582,54088,54089],{},"元素.innerHtml=1",[22478,54091,54093],{"id":54092},"_3131-innertext","3.1.3.1 innerText",[19,54095,54096],{},[519,54097],{"alt":31,"src":54098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54100,54101],{},"思路：实现了修改盒子中的内容！",[19,54103,54104],{},"它只显示纯文本，不解析标签",[22478,54106,54108],{"id":54107},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54110,54111],{},[519,54112],{"alt":31,"src":54113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54115,54116],{},"相比于innerText，他的强大之处在于可以解析标签",[596,54118,54120],{"id":54119},"_314-操作元素属性","3.1.4 操作元素属性",[22478,54122,54124],{"id":54123},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54126,54127],{},[519,54128],{"alt":31,"src":54129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22478,54131,54133],{"id":54132},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54135,54136],{},[519,54137],{"alt":31,"src":54138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54140,54141],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54143,54144],{},"div.style.backgroundColor = 'hotpink'",[19,54146,54147],{},"如果按照css的写法，-表示减，就会出错",[19,54149,54150],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54152,54153],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54155,54156],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54158,54159],{},[519,54160],{"alt":31,"src":54161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54163,54164],{},[519,54165],{"alt":31,"src":54166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[579,54168,54169,54172,54175,54178,54181,54184],{},[582,54170,54171],{},"className这个方式就是修改很多样式的时候来使用的！",[582,54173,54174],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[582,54176,54177],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[582,54179,54180],{},"className为属性名，如果还用class的话就导致与关键字冲突",[582,54182,54183],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[582,54185,54186,54187,54192],{},"解析标签的时候就变为了",[52088,54188],{"className":54189},[54190,54191],"nav","box",[54193,54194],"br",{},[19,54196,54197],{},"例子：",[52088,54199],{"className":54200},[54190],[52290,54202,54203],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54205,54206],{},[519,54207],{"alt":31,"src":54208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54210,54211],{},"追加和删除类名用classList",[19,54213,54214],{},"常用于类似于开关的操作",[19,54216,54217],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54219,54220],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22478,54222,54224],{"id":54223},"_3143-牢记点","3.1.4.3 牢记点",[579,54226,54227,54230,54233,54236,54239,54242,54245,54248,54251],{},[582,54228,54229],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[582,54231,54232],{},"使用style属性操作css时不要忘记引号",[582,54234,54235],{},"使用className或者classList时也不要忘记引号",[582,54237,54238],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[582,54240,54241],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[582,54243,54244],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[582,54246,54247],{},"若： let arr=['1','2',3] arr[0]=1",[582,54249,54250],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[582,54252,54253],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[596,54255,54257],{"id":54256},"_315-操作表单元素","3.1.5 操作表单元素",[579,54259,54260],{},[582,54261,54262],{},"天生的属性",[19,54264,54265],{},[519,54266],{"alt":31,"src":54267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54269,54270],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54272,54273],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54275,54276],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54278,54279],{},[519,54280],{"alt":31,"src":54281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,54283,54285],{"className":51110,"code":54284,"language":51112,"meta":31,"style":31},"在复选框中如果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",[33,54286,54287,54292,54324,54329,54334,54339,54344,54348,54353,54358,54375,54387,54392],{"__ignoreMap":31},[36,54288,54289],{"class":38,"line":39},[36,54290,54291],{"class":42},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,54293,54294,54296,54299,54302,54304,54307,54309,54311,54313,54315,54317,54319,54322],{"class":38,"line":66},[36,54295,1523],{"class":42},[36,54297,54298],{"class":51777},"input",[36,54300,54301],{"class":2443}," type",[36,54303,47],{"class":42},[36,54305,54306],{"class":405},"\"checkbox\"",[36,54308,15400],{"class":2443},[36,54310,47],{"class":42},[36,54312,8132],{"class":405},[36,54314,15439],{"class":2443},[36,54316,47],{"class":42},[36,54318,8132],{"class":405},[36,54320,54321],{"class":2443}," checked",[36,54323,51784],{"class":42},[36,54325,54326],{"class":38,"line":73},[36,54327,54328],{"class":42},"不选的话：\n",[36,54330,54331],{"class":38,"line":79},[36,54332,54333],{"class":42},"const input = document.querySelector('input')\n",[36,54335,54336],{"class":38,"line":85},[36,54337,54338],{"class":42},"input.checked=false\n",[36,54340,54341],{"class":38,"line":419},[36,54342,54343],{"class":42},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,54345,54346],{"class":38,"line":425},[36,54347,2880],{"emptyLinePlaceholder":553},[36,54349,54350],{"class":38,"line":431},[36,54351,54352],{"class":42},"禁用按钮：\n",[36,54354,54355],{"class":38,"line":437},[36,54356,54357],{"class":42},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,54359,54360,54362,54365,54368,54371,54373],{"class":38,"line":443},[36,54361,1523],{"class":42},[36,54363,54364],{"class":51777},"button",[36,54366,54367],{"class":2443}," disabled",[36,54369,54370],{"class":42},">点击\u003C\u002F",[36,54372,54364],{"class":51777},[36,54374,51784],{"class":42},[36,54376,54377,54379,54381,54383,54385],{"class":38,"line":2092},[36,54378,1523],{"class":42},[36,54380,54364],{"class":51777},[36,54382,54370],{"class":42},[36,54384,54364],{"class":51777},[36,54386,51784],{"class":42},[36,54388,54389],{"class":38,"line":2097},[36,54390,54391],{"class":42},"const bt = document.querySelector('button')\n",[36,54393,54394],{"class":38,"line":2103},[36,54395,54396],{"class":42},"bt.disabled = false\n",[579,54398,54399],{"start":66},[582,54400,54401],{},"自定义属性",[19,54403,54404],{},[519,54405],{"alt":31,"src":54406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,54408,54410],{"className":53544,"code":54409,"language":53546,"meta":31,"style":31},"\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",[33,54411,54412,54420,54448,54467,54486,54505,54524,54532,54537,54542,54547,54552,54560],{"__ignoreMap":31},[36,54413,54414,54416,54418],{"class":38,"line":39},[36,54415,1523],{"class":42},[36,54417,52277],{"class":51777},[36,54419,51784],{"class":42},[36,54421,54422,54424,54426,54429,54431,54433,54436,54438,54441,54444,54446],{"class":38,"line":66},[36,54423,52621],{"class":42},[36,54425,52088],{"class":51777},[36,54427,54428],{"class":2443}," data-id",[36,54430,47],{"class":42},[36,54432,4158],{"class":405},[36,54434,54435],{"class":2443}," data-spm",[36,54437,47],{"class":42},[36,54439,54440],{"class":405},"\"我不知道\"",[36,54442,54443],{"class":42},">1\u003C\u002F",[36,54445,52088],{"class":51777},[36,54447,51784],{"class":42},[36,54449,54450,54452,54454,54456,54458,54460,54463,54465],{"class":38,"line":73},[36,54451,52621],{"class":42},[36,54453,52088],{"class":51777},[36,54455,54428],{"class":2443},[36,54457,47],{"class":42},[36,54459,4181],{"class":405},[36,54461,54462],{"class":42},">2\u003C\u002F",[36,54464,52088],{"class":51777},[36,54466,51784],{"class":42},[36,54468,54469,54471,54473,54475,54477,54479,54482,54484],{"class":38,"line":79},[36,54470,52621],{"class":42},[36,54472,52088],{"class":51777},[36,54474,54428],{"class":2443},[36,54476,47],{"class":42},[36,54478,4194],{"class":405},[36,54480,54481],{"class":42},">3\u003C\u002F",[36,54483,52088],{"class":51777},[36,54485,51784],{"class":42},[36,54487,54488,54490,54492,54494,54496,54498,54501,54503],{"class":38,"line":85},[36,54489,52621],{"class":42},[36,54491,52088],{"class":51777},[36,54493,54428],{"class":2443},[36,54495,47],{"class":42},[36,54497,4207],{"class":405},[36,54499,54500],{"class":42},">4\u003C\u002F",[36,54502,52088],{"class":51777},[36,54504,51784],{"class":42},[36,54506,54507,54509,54511,54513,54515,54517,54520,54522],{"class":38,"line":419},[36,54508,52621],{"class":42},[36,54510,52088],{"class":51777},[36,54512,54428],{"class":2443},[36,54514,47],{"class":42},[36,54516,4228],{"class":405},[36,54518,54519],{"class":42},">5\u003C\u002F",[36,54521,52088],{"class":51777},[36,54523,51784],{"class":42},[36,54525,54526,54528,54530],{"class":38,"line":425},[36,54527,52621],{"class":42},[36,54529,52290],{"class":51777},[36,54531,51784],{"class":42},[36,54533,54534],{"class":38,"line":431},[36,54535,54536],{"class":42},"    const one = document.querySelector('div')\n",[36,54538,54539],{"class":38,"line":437},[36,54540,54541],{"class":42},"    console.log(one.dataset)\n",[36,54543,54544],{"class":38,"line":443},[36,54545,54546],{"class":42},"    console.log(one.dataset.id)\n",[36,54548,54549],{"class":38,"line":2092},[36,54550,54551],{"class":42},"    console.log(one.dataset.spm)\n",[36,54553,54554,54556,54558],{"class":38,"line":2097},[36,54555,52894],{"class":42},[36,54557,52290],{"class":51777},[36,54559,51784],{"class":42},[36,54561,54562,54564,54566],{"class":38,"line":2103},[36,54563,52262],{"class":42},[36,54565,52277],{"class":51777},[36,54567,51784],{"class":42},[19,54569,54570],{},[519,54571],{"alt":31,"src":54572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54574,54575],{},"document.querySelector选择的是第一个对象（元素）",[596,54577,54579],{"id":54578},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54581,54582],{},[519,54583],{"alt":31,"src":54584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54586,54587],{},[519,54588],{"alt":31,"src":54589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54591,54592],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52290,54594,54595],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54597,54598],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52290,54600,54601],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,54603,54604],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54606,54607],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54609,54610],{},"单位为毫秒！！！",[19,54612,54613],{},"可以搭配匿名函数来用！！！",[19,54615,54616],{},"setInterval(function () {",[19,54618,54619],{},"alert('两秒执行一次')",[19,54621,54622],{},"}, 2000)",[19,54624,54625],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54627,54628],{},"function fn() {",[19,54630,54631],{},"document.write(1)",[19,54633,1559],{},[19,54635,54636],{},"setInterval(fn, 1000)",[19,54638,54639],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54641,54642],{},"setInterval('fn()', 1000)",[19,54644,54645],{},[519,54646],{"alt":31,"src":54647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22478,54649,54651],{"id":54650},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,54653,54655],{"className":51110,"code":54654,"language":51112,"meta":31,"style":31},"\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",[33,54656,54657,54667,54681,54685,54693,54707,54727,54739,54747,54751,54759,54796,54801,54806,54811,54819,54827,54849,54857,54862,54884,54889,54894,54905,54910,54930,54938,54953,54968,54979,54984,54994,55004,55008,55017,55021,55029,55037,55041],{"__ignoreMap":31},[36,54658,54659,54661,54663,54665],{"class":38,"line":39},[36,54660,51774],{"class":42},[36,54662,51778],{"class":51777},[36,54664,51781],{"class":2443},[36,54666,51784],{"class":42},[36,54668,54669,54671,54673,54675,54677,54679],{"class":38,"line":66},[36,54670,1523],{"class":42},[36,54672,51112],{"class":51777},[36,54674,51793],{"class":2443},[36,54676,47],{"class":42},[36,54678,51798],{"class":405},[36,54680,51784],{"class":42},[36,54682,54683],{"class":38,"line":73},[36,54684,2880],{"emptyLinePlaceholder":553},[36,54686,54687,54689,54691],{"class":38,"line":79},[36,54688,1523],{"class":42},[36,54690,51811],{"class":51777},[36,54692,51784],{"class":42},[36,54694,54695,54697,54699,54701,54703,54705],{"class":38,"line":85},[36,54696,52621],{"class":42},[36,54698,51821],{"class":51777},[36,54700,51824],{"class":2443},[36,54702,47],{"class":42},[36,54704,51829],{"class":405},[36,54706,51784],{"class":42},[36,54708,54709,54711,54713,54715,54717,54719,54721,54723,54725],{"class":38,"line":419},[36,54710,52621],{"class":42},[36,54712,51821],{"class":51777},[36,54714,15400],{"class":2443},[36,54716,47],{"class":42},[36,54718,51868],{"class":405},[36,54720,51848],{"class":2443},[36,54722,47],{"class":42},[36,54724,51875],{"class":405},[36,54726,51784],{"class":42},[36,54728,54729,54731,54733,54735,54737],{"class":38,"line":425},[36,54730,52621],{"class":42},[36,54732,51884],{"class":51777},[36,54734,51887],{"class":42},[36,54736,51884],{"class":51777},[36,54738,51784],{"class":42},[36,54740,54741,54743,54745],{"class":38,"line":431},[36,54742,52262],{"class":42},[36,54744,51811],{"class":51777},[36,54746,51784],{"class":42},[36,54748,54749],{"class":38,"line":437},[36,54750,2880],{"emptyLinePlaceholder":553},[36,54752,54753,54755,54757],{"class":38,"line":443},[36,54754,1523],{"class":42},[36,54756,52277],{"class":51777},[36,54758,51784],{"class":42},[36,54760,54761,54763,54766,54768,54770,54772,54774,54776,54778,54781,54783,54786,54789,54791,54794],{"class":38,"line":2092},[36,54762,52621],{"class":42},[36,54764,54765],{"class":51777},"textarea",[36,54767,15400],{"class":2443},[36,54769,47],{"class":42},[36,54771,8132],{"class":405},[36,54773,15439],{"class":2443},[36,54775,47],{"class":42},[36,54777,8132],{"class":405},[36,54779,54780],{"class":2443}," cols",[36,54782,47],{"class":42},[36,54784,54785],{"class":405},"\"30\"",[36,54787,54788],{"class":2443}," rows",[36,54790,47],{"class":42},[36,54792,54793],{"class":405},"\"10\"",[36,54795,51784],{"class":42},[36,54797,54798],{"class":38,"line":2097},[36,54799,54800],{"class":42},"        用户注册协议\n",[36,54802,54803],{"class":38,"line":2103},[36,54804,54805],{"class":42},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,54807,54808],{"class":38,"line":2108},[36,54809,54810],{"class":42},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,54812,54813,54815,54817],{"class":38,"line":2122},[36,54814,52253],{"class":42},[36,54816,54765],{"class":51777},[36,54818,51784],{"class":42},[36,54820,54821,54823,54825],{"class":38,"line":2127},[36,54822,52621],{"class":42},[36,54824,54193],{"class":51777},[36,54826,51784],{"class":42},[36,54828,54829,54831,54833,54835,54837,54840,54842,54845,54847],{"class":38,"line":2133},[36,54830,52621],{"class":42},[36,54832,54364],{"class":51777},[36,54834,53963],{"class":2443},[36,54836,47],{"class":42},[36,54838,54839],{"class":405},"\"btn\"",[36,54841,54367],{"class":2443},[36,54843,54844],{"class":42},">我已经阅读用户协议(5)\u003C\u002F",[36,54846,54364],{"class":51777},[36,54848,51784],{"class":42},[36,54850,54851,54853,54855],{"class":38,"line":2154},[36,54852,52621],{"class":42},[36,54854,52290],{"class":51777},[36,54856,51784],{"class":42},[36,54858,54859],{"class":38,"line":2159},[36,54860,54861],{"class":69},"    \u002F\u002F 1. 获取元素\n",[36,54863,54864,54866,54869,54871,54874,54877,54879,54882],{"class":38,"line":2173},[36,54865,11701],{"class":46},[36,54867,54868],{"class":53}," btn",[36,54870,14044],{"class":46},[36,54872,54873],{"class":42}," document.",[36,54875,54876],{"class":2443},"querySelector",[36,54878,345],{"class":42},[36,54880,54881],{"class":405},"'.btn'",[36,54883,63],{"class":42},[36,54885,54886],{"class":38,"line":2178},[36,54887,54888],{"class":69},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,54890,54891],{"class":38,"line":2207},[36,54892,54893],{"class":69},"    \u002F\u002F 2. 倒计时\n",[36,54895,54896,54898,54900,54902],{"class":38,"line":2212},[36,54897,52696],{"class":46},[36,54899,9918],{"class":42},[36,54901,47],{"class":46},[36,54903,54904],{"class":53}," 5\n",[36,54906,54907],{"class":38,"line":2229},[36,54908,54909],{"class":69},"    \u002F\u002F 2.1 开启定时器\n",[36,54911,54912,54914,54917,54919,54922,54924,54927],{"class":38,"line":2234},[36,54913,52696],{"class":46},[36,54915,54916],{"class":42}," n ",[36,54918,47],{"class":46},[36,54920,54921],{"class":2443}," setInterval",[36,54923,345],{"class":42},[36,54925,54926],{"class":46},"function",[36,54928,54929],{"class":42}," () {\n",[36,54931,54932,54935],{"class":38,"line":2239},[36,54933,54934],{"class":42},"      i",[36,54936,54937],{"class":46},"--\n",[36,54939,54940,54943,54945,54948,54950],{"class":38,"line":2244},[36,54941,54942],{"class":42},"      btn.innerHTML ",[36,54944,47],{"class":46},[36,54946,54947],{"class":405}," `我已经阅读用户协议(${",[36,54949,1057],{"class":42},[36,54951,54952],{"class":405},"})`\n",[36,54954,54955,54958,54961,54964,54966],{"class":38,"line":2258},[36,54956,54957],{"class":46},"      if",[36,54959,54960],{"class":42}," (i ",[36,54962,54963],{"class":46},"===",[36,54965,4573],{"class":53},[36,54967,12922],{"class":42},[36,54969,54970,54973,54976],{"class":38,"line":2263},[36,54971,54972],{"class":2443},"        clearInterval",[36,54974,54975],{"class":42},"(n)  ",[36,54977,54978],{"class":69},"\u002F\u002F 关闭定时器\n",[36,54980,54981],{"class":38,"line":3057},[36,54982,54983],{"class":69},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,54985,54986,54989,54991],{"class":38,"line":3071},[36,54987,54988],{"class":42},"        btn.disabled ",[36,54990,47],{"class":46},[36,54992,54993],{"class":53}," false\n",[36,54995,54996,54999,55001],{"class":38,"line":3079},[36,54997,54998],{"class":42},"        btn.innerHTML ",[36,55000,47],{"class":46},[36,55002,55003],{"class":405}," '同意'\n",[36,55005,55006],{"class":38,"line":3084},[36,55007,52875],{"class":42},[36,55009,55010,55013,55015],{"class":38,"line":3090},[36,55011,55012],{"class":42},"    }, ",[36,55014,6890],{"class":53},[36,55016,63],{"class":42},[36,55018,55019],{"class":38,"line":3096},[36,55020,2880],{"emptyLinePlaceholder":553},[36,55022,55023,55025,55027],{"class":38,"line":3101},[36,55024,52894],{"class":42},[36,55026,52290],{"class":51777},[36,55028,51784],{"class":42},[36,55030,55031,55033,55035],{"class":38,"line":8428},[36,55032,52262],{"class":42},[36,55034,52277],{"class":51777},[36,55036,51784],{"class":42},[36,55038,55039],{"class":38,"line":8452},[36,55040,2880],{"emptyLinePlaceholder":553},[36,55042,55043,55045,55047],{"class":38,"line":8457},[36,55044,52262],{"class":42},[36,55046,51112],{"class":51777},[36,55048,51784],{"class":42},[19,55050,55051],{},"不要一直想着用死循环,避免死循环",[19,55053,55054,55057],{},[33,55055,55056],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22478,55059,55061],{"id":55060},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[579,55063,55064],{},[582,55065,55066],{},"法1",[26,55068,55070],{"className":51110,"code":55069,"language":51112,"meta":31,"style":31},"\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",[33,55071,55072,55082,55096,55100,55108,55122,55142,55154,55162,55168,55179,55190,55194,55198,55205,55217,55221,55225,55232,55244,55258,55271,55285,55289,55293,55300,55311,55322,55333,55345,55357,55369,55373,55377,55385,55395,55408,55420,55433,55437,55441,55448,55458,55470,55482,55493,55504,55514,55526,55538,55542,55546,55555,55567,55579,55607,55620,55624,55628,55635,55646,55650,55658,55666,55670,55678,55692,55707,55731,55739,55754,55767,55775,55796,55808,55820,55832,55844,55856,55868,55880,55889,55897,55905,55913,55925,55948,55967,55986,56005,56024,56043,56062,56082,56086,56106,56125,56145,56166,56177,56194,56204,56214,56224,56229,56234,56239,56244,56269,56282,56286,56309,56313,56321,56329,56337,56341],{"__ignoreMap":31},[36,55073,55074,55076,55078,55080],{"class":38,"line":39},[36,55075,51774],{"class":42},[36,55077,51778],{"class":51777},[36,55079,51781],{"class":2443},[36,55081,51784],{"class":42},[36,55083,55084,55086,55088,55090,55092,55094],{"class":38,"line":66},[36,55085,1523],{"class":42},[36,55087,51112],{"class":51777},[36,55089,51793],{"class":2443},[36,55091,47],{"class":42},[36,55093,51798],{"class":405},[36,55095,51784],{"class":42},[36,55097,55098],{"class":38,"line":73},[36,55099,2880],{"emptyLinePlaceholder":553},[36,55101,55102,55104,55106],{"class":38,"line":79},[36,55103,1523],{"class":42},[36,55105,51811],{"class":51777},[36,55107,51784],{"class":42},[36,55109,55110,55112,55114,55116,55118,55120],{"class":38,"line":85},[36,55111,52621],{"class":42},[36,55113,51821],{"class":51777},[36,55115,51824],{"class":2443},[36,55117,47],{"class":42},[36,55119,51829],{"class":405},[36,55121,51784],{"class":42},[36,55123,55124,55126,55128,55130,55132,55134,55136,55138,55140],{"class":38,"line":419},[36,55125,52621],{"class":42},[36,55127,51821],{"class":51777},[36,55129,15400],{"class":2443},[36,55131,47],{"class":42},[36,55133,51868],{"class":405},[36,55135,51848],{"class":2443},[36,55137,47],{"class":42},[36,55139,51875],{"class":405},[36,55141,51784],{"class":42},[36,55143,55144,55146,55148,55150,55152],{"class":38,"line":425},[36,55145,52621],{"class":42},[36,55147,51884],{"class":51777},[36,55149,51887],{"class":42},[36,55151,51884],{"class":51777},[36,55153,51784],{"class":42},[36,55155,55156,55158,55160],{"class":38,"line":431},[36,55157,52621],{"class":42},[36,55159,539],{"class":51777},[36,55161,51784],{"class":42},[36,55163,55164,55166],{"class":38,"line":437},[36,55165,6883],{"class":51777},[36,55167,16052],{"class":42},[36,55169,55170,55173,55175,55177],{"class":38,"line":443},[36,55171,55172],{"class":53},"      padding",[36,55174,51914],{"class":42},[36,55176,812],{"class":53},[36,55178,1774],{"class":42},[36,55180,55181,55184,55186,55188],{"class":38,"line":2092},[36,55182,55183],{"class":53},"      margin",[36,55185,51914],{"class":42},[36,55187,812],{"class":53},[36,55189,1774],{"class":42},[36,55191,55192],{"class":38,"line":2097},[36,55193,2667],{"class":42},[36,55195,55196],{"class":38,"line":2103},[36,55197,2880],{"emptyLinePlaceholder":553},[36,55199,55200,55203],{"class":38,"line":2108},[36,55201,55202],{"class":51777},"    li",[36,55204,16052],{"class":42},[36,55206,55207,55210,55212,55215],{"class":38,"line":2122},[36,55208,55209],{"class":53},"      list-style",[36,55211,51914],{"class":42},[36,55213,55214],{"class":53},"none",[36,55216,1774],{"class":42},[36,55218,55219],{"class":38,"line":2127},[36,55220,2667],{"class":42},[36,55222,55223],{"class":38,"line":2133},[36,55224,2880],{"emptyLinePlaceholder":553},[36,55226,55227,55230],{"class":38,"line":2154},[36,55228,55229],{"class":2443},"    .box",[36,55231,16052],{"class":42},[36,55233,55234,55237,55239,55242],{"class":38,"line":2159},[36,55235,55236],{"class":53},"      position",[36,55238,51914],{"class":42},[36,55240,55241],{"class":53},"relative",[36,55243,1774],{"class":42},[36,55245,55246,55249,55251,55254,55256],{"class":38,"line":2173},[36,55247,55248],{"class":53},"      width",[36,55250,51914],{"class":42},[36,55252,55253],{"class":53},"976",[36,55255,51969],{"class":46},[36,55257,1774],{"class":42},[36,55259,55260,55263,55265,55267,55269],{"class":38,"line":2178},[36,55261,55262],{"class":53},"      height",[36,55264,51914],{"class":42},[36,55266,2019],{"class":53},[36,55268,51969],{"class":46},[36,55270,1774],{"class":42},[36,55272,55273,55275,55277,55279,55281,55283],{"class":38,"line":2207},[36,55274,55183],{"class":53},[36,55276,51914],{"class":42},[36,55278,930],{"class":53},[36,55280,51969],{"class":46},[36,55282,52033],{"class":53},[36,55284,1774],{"class":42},[36,55286,55287],{"class":38,"line":2212},[36,55288,2667],{"class":42},[36,55290,55291],{"class":38,"line":2229},[36,55292,2880],{"emptyLinePlaceholder":553},[36,55294,55295,55298],{"class":38,"line":2234},[36,55296,55297],{"class":2443},"    .slider-footer",[36,55299,16052],{"class":42},[36,55301,55302,55304,55306,55309],{"class":38,"line":2239},[36,55303,55236],{"class":53},[36,55305,51914],{"class":42},[36,55307,55308],{"class":53},"absolute",[36,55310,1774],{"class":42},[36,55312,55313,55316,55318,55320],{"class":38,"line":2244},[36,55314,55315],{"class":53},"      left",[36,55317,51914],{"class":42},[36,55319,812],{"class":53},[36,55321,1774],{"class":42},[36,55323,55324,55327,55329,55331],{"class":38,"line":2258},[36,55325,55326],{"class":53},"      bottom",[36,55328,51914],{"class":42},[36,55330,812],{"class":53},[36,55332,1774],{"class":42},[36,55334,55335,55337,55339,55341,55343],{"class":38,"line":2263},[36,55336,55248],{"class":53},[36,55338,51914],{"class":42},[36,55340,930],{"class":53},[36,55342,947],{"class":46},[36,55344,1774],{"class":42},[36,55346,55347,55349,55351,55353,55355],{"class":38,"line":3057},[36,55348,55262],{"class":53},[36,55350,51914],{"class":42},[36,55352,1188],{"class":53},[36,55354,947],{"class":46},[36,55356,1774],{"class":42},[36,55358,55359,55362,55364,55367],{"class":38,"line":3071},[36,55360,55361],{"class":53},"      background-color",[36,55363,51914],{"class":42},[36,55365,55366],{"class":53},"skyblue",[36,55368,1774],{"class":42},[36,55370,55371],{"class":38,"line":3079},[36,55372,2667],{"class":42},[36,55374,55375],{"class":38,"line":3084},[36,55376,2880],{"emptyLinePlaceholder":553},[36,55378,55379,55381,55383],{"class":38,"line":3090},[36,55380,55297],{"class":2443},[36,55382,7305],{"class":51777},[36,55384,16052],{"class":42},[36,55386,55387,55389,55391,55393],{"class":38,"line":3096},[36,55388,55236],{"class":53},[36,55390,51914],{"class":42},[36,55392,55308],{"class":53},[36,55394,1774],{"class":42},[36,55396,55397,55400,55402,55404,55406],{"class":38,"line":3101},[36,55398,55399],{"class":53},"      font-size",[36,55401,51914],{"class":42},[36,55403,1514],{"class":53},[36,55405,51969],{"class":46},[36,55407,1774],{"class":42},[36,55409,55410,55412,55414,55416,55418],{"class":38,"line":8428},[36,55411,55315],{"class":53},[36,55413,51914],{"class":42},[36,55415,1313],{"class":53},[36,55417,51969],{"class":46},[36,55419,1774],{"class":42},[36,55421,55422,55425,55427,55429,55431],{"class":38,"line":8452},[36,55423,55424],{"class":53},"      top",[36,55426,51914],{"class":42},[36,55428,938],{"class":53},[36,55430,51969],{"class":46},[36,55432,1774],{"class":42},[36,55434,55435],{"class":38,"line":8457},[36,55436,2667],{"class":42},[36,55438,55439],{"class":38,"line":8463},[36,55440,2880],{"emptyLinePlaceholder":553},[36,55442,55443,55446],{"class":38,"line":8490},[36,55444,55445],{"class":51777},"    ul",[36,55447,16052],{"class":42},[36,55449,55450,55452,55454,55456],{"class":38,"line":8495},[36,55451,55236],{"class":53},[36,55453,51914],{"class":42},[36,55455,55308],{"class":53},[36,55457,1774],{"class":42},[36,55459,55460,55462,55464,55466,55468],{"class":38,"line":8501},[36,55461,55424],{"class":53},[36,55463,51914],{"class":42},[36,55465,1394],{"class":53},[36,55467,51969],{"class":46},[36,55469,1774],{"class":42},[36,55471,55472,55474,55476,55478,55480],{"class":38,"line":8513},[36,55473,55315],{"class":53},[36,55475,51914],{"class":42},[36,55477,1313],{"class":53},[36,55479,51969],{"class":46},[36,55481,1774],{"class":42},[36,55483,55484,55487,55489,55491],{"class":38,"line":8525},[36,55485,55486],{"class":53},"      display",[36,55488,51914],{"class":42},[36,55490,51954],{"class":53},[36,55492,1774],{"class":42},[36,55494,55495,55498,55500,55502],{"class":38,"line":8537},[36,55496,55497],{"class":53},"      justify-content",[36,55499,51914],{"class":42},[36,55501,52145],{"class":53},[36,55503,1774],{"class":42},[36,55505,55506,55508,55510,55512],{"class":38,"line":10196},[36,55507,55236],{"class":53},[36,55509,51914],{"class":42},[36,55511,55308],{"class":53},[36,55513,1774],{"class":42},[36,55515,55516,55518,55520,55522,55524],{"class":38,"line":10221},[36,55517,55248],{"class":53},[36,55519,51914],{"class":42},[36,55521,4472],{"class":53},[36,55523,51969],{"class":46},[36,55525,1774],{"class":42},[36,55527,55528,55530,55532,55534,55536],{"class":38,"line":10244},[36,55529,55262],{"class":53},[36,55531,51914],{"class":42},[36,55533,1313],{"class":53},[36,55535,51969],{"class":46},[36,55537,1774],{"class":42},[36,55539,55540],{"class":38,"line":10268},[36,55541,2667],{"class":42},[36,55543,55544],{"class":38,"line":10273},[36,55545,2880],{"emptyLinePlaceholder":553},[36,55547,55548,55550,55553],{"class":38,"line":10278},[36,55549,55445],{"class":51777},[36,55551,55552],{"class":51777}," li",[36,55554,16052],{"class":42},[36,55556,55557,55559,55561,55563,55565],{"class":38,"line":10283},[36,55558,55248],{"class":53},[36,55560,51914],{"class":42},[36,55562,1313],{"class":53},[36,55564,51969],{"class":46},[36,55566,1774],{"class":42},[36,55568,55569,55571,55573,55575,55577],{"class":38,"line":10292},[36,55570,55262],{"class":53},[36,55572,51914],{"class":42},[36,55574,1313],{"class":53},[36,55576,51969],{"class":46},[36,55578,1774],{"class":42},[36,55580,55581,55583,55585,55588,55590,55592,55594,55596,55598,55600,55602,55605],{"class":38,"line":10297},[36,55582,55361],{"class":53},[36,55584,51914],{"class":42},[36,55586,55587],{"class":53},"rgba",[36,55589,345],{"class":42},[36,55591,812],{"class":53},[36,55593,12915],{"class":42},[36,55595,812],{"class":53},[36,55597,12915],{"class":42},[36,55599,812],{"class":53},[36,55601,12915],{"class":42},[36,55603,55604],{"class":53},".4",[36,55606,3199],{"class":42},[36,55608,55609,55612,55614,55616,55618],{"class":38,"line":10303},[36,55610,55611],{"class":53},"      border-radius",[36,55613,51914],{"class":42},[36,55615,1062],{"class":53},[36,55617,51969],{"class":46},[36,55619,1774],{"class":42},[36,55621,55622],{"class":38,"line":10324},[36,55623,2667],{"class":42},[36,55625,55626],{"class":38,"line":10330},[36,55627,2880],{"emptyLinePlaceholder":553},[36,55629,55630,55633],{"class":38,"line":10344},[36,55631,55632],{"class":2443},"    .activate",[36,55634,16052],{"class":42},[36,55636,55637,55639,55641,55644],{"class":38,"line":10350},[36,55638,55361],{"class":53},[36,55640,51914],{"class":42},[36,55642,55643],{"class":53},"#f7f7f7",[36,55645,1774],{"class":42},[36,55647,55648],{"class":38,"line":10377},[36,55649,2667],{"class":42},[36,55651,55652,55654,55656],{"class":38,"line":10386},[36,55653,52894],{"class":42},[36,55655,539],{"class":51777},[36,55657,51784],{"class":42},[36,55659,55660,55662,55664],{"class":38,"line":10392},[36,55661,52262],{"class":42},[36,55663,51811],{"class":51777},[36,55665,51784],{"class":42},[36,55667,55668],{"class":38,"line":10400},[36,55669,2880],{"emptyLinePlaceholder":553},[36,55671,55672,55674,55676],{"class":38,"line":10405},[36,55673,1523],{"class":42},[36,55675,52277],{"class":51777},[36,55677,51784],{"class":42},[36,55679,55680,55682,55684,55686,55688,55690],{"class":38,"line":17084},[36,55681,52621],{"class":42},[36,55683,52088],{"class":51777},[36,55685,53963],{"class":2443},[36,55687,47],{"class":42},[36,55689,53968],{"class":405},[36,55691,51784],{"class":42},[36,55693,55694,55696,55698,55700,55702,55705],{"class":38,"line":17090},[36,55695,51818],{"class":42},[36,55697,52088],{"class":51777},[36,55699,53963],{"class":2443},[36,55701,47],{"class":42},[36,55703,55704],{"class":405},"\"slider-wrapper\"",[36,55706,51784],{"class":42},[36,55708,55709,55712,55714,55717,55719,55722,55725,55727,55729],{"class":38,"line":17113},[36,55710,55711],{"class":42},"      \u003C",[36,55713,519],{"class":51777},[36,55715,55716],{"class":2443}," src",[36,55718,47],{"class":42},[36,55720,55721],{"class":405},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,55723,55724],{"class":2443}," alt",[36,55726,47],{"class":42},[36,55728,8132],{"class":405},[36,55730,51784],{"class":42},[36,55732,55733,55735,55737],{"class":38,"line":17119},[36,55734,52253],{"class":42},[36,55736,52088],{"class":51777},[36,55738,51784],{"class":42},[36,55740,55741,55743,55745,55747,55749,55752],{"class":38,"line":17142},[36,55742,51818],{"class":42},[36,55744,52088],{"class":51777},[36,55746,53963],{"class":2443},[36,55748,47],{"class":42},[36,55750,55751],{"class":405},"\"slider-footer\"",[36,55753,51784],{"class":42},[36,55755,55756,55758,55760,55763,55765],{"class":38,"line":17156},[36,55757,55711],{"class":42},[36,55759,19],{"class":51777},[36,55761,55762],{"class":42},">对人类来说会不会太超前了?\u003C\u002F",[36,55764,19],{"class":51777},[36,55766,51784],{"class":42},[36,55768,55769,55771,55773],{"class":38,"line":17176},[36,55770,55711],{"class":42},[36,55772,1620],{"class":51777},[36,55774,51784],{"class":42},[36,55776,55777,55780,55782,55784,55786,55789,55792,55794],{"class":38,"line":17182},[36,55778,55779],{"class":42},"        \u003C",[36,55781,582],{"class":51777},[36,55783,53963],{"class":2443},[36,55785,47],{"class":42},[36,55787,55788],{"class":405},"\"activate\"",[36,55790,55791],{"class":42},">\u003C\u002F",[36,55793,582],{"class":51777},[36,55795,51784],{"class":42},[36,55797,55798,55800,55802,55804,55806],{"class":38,"line":17193},[36,55799,55779],{"class":42},[36,55801,582],{"class":51777},[36,55803,55791],{"class":42},[36,55805,582],{"class":51777},[36,55807,51784],{"class":42},[36,55809,55810,55812,55814,55816,55818],{"class":38,"line":17216},[36,55811,55779],{"class":42},[36,55813,582],{"class":51777},[36,55815,55791],{"class":42},[36,55817,582],{"class":51777},[36,55819,51784],{"class":42},[36,55821,55822,55824,55826,55828,55830],{"class":38,"line":17238},[36,55823,55779],{"class":42},[36,55825,582],{"class":51777},[36,55827,55791],{"class":42},[36,55829,582],{"class":51777},[36,55831,51784],{"class":42},[36,55833,55834,55836,55838,55840,55842],{"class":38,"line":17243},[36,55835,55779],{"class":42},[36,55837,582],{"class":51777},[36,55839,55791],{"class":42},[36,55841,582],{"class":51777},[36,55843,51784],{"class":42},[36,55845,55846,55848,55850,55852,55854],{"class":38,"line":17249},[36,55847,55779],{"class":42},[36,55849,582],{"class":51777},[36,55851,55791],{"class":42},[36,55853,582],{"class":51777},[36,55855,51784],{"class":42},[36,55857,55858,55860,55862,55864,55866],{"class":38,"line":17263},[36,55859,55779],{"class":42},[36,55861,582],{"class":51777},[36,55863,55791],{"class":42},[36,55865,582],{"class":51777},[36,55867,51784],{"class":42},[36,55869,55870,55872,55874,55876,55878],{"class":38,"line":17276},[36,55871,55779],{"class":42},[36,55873,582],{"class":51777},[36,55875,55791],{"class":42},[36,55877,582],{"class":51777},[36,55879,51784],{"class":42},[36,55881,55882,55885,55887],{"class":38,"line":17281},[36,55883,55884],{"class":42},"      \u003C\u002F",[36,55886,1620],{"class":51777},[36,55888,51784],{"class":42},[36,55890,55891,55893,55895],{"class":38,"line":17295},[36,55892,52253],{"class":42},[36,55894,52088],{"class":51777},[36,55896,51784],{"class":42},[36,55898,55899,55901,55903],{"class":38,"line":17300},[36,55900,52894],{"class":42},[36,55902,52088],{"class":51777},[36,55904,51784],{"class":42},[36,55906,55907,55909,55911],{"class":38,"line":17306},[36,55908,52621],{"class":42},[36,55910,52290],{"class":51777},[36,55912,51784],{"class":42},[36,55914,55915,55917,55920,55922],{"class":38,"line":17311},[36,55916,11701],{"class":46},[36,55918,55919],{"class":53}," arrImage",[36,55921,14044],{"class":46},[36,55923,55924],{"class":42}," [\n",[36,55926,55927,55930,55933,55936,55939,55942,55945],{"class":38,"line":17325},[36,55928,55929],{"class":42},"      { url: ",[36,55931,55932],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,55934,55935],{"class":42},", title: ",[36,55937,55938],{"class":405},"'对人类来说会不会太超前了?'",[36,55940,55941],{"class":42},", color: ",[36,55943,55944],{"class":405},"'rgba(100,67,68)'",[36,55946,55947],{"class":42}," },\n",[36,55949,55950,55952,55955,55957,55960,55962,55965],{"class":38,"line":17330},[36,55951,55929],{"class":42},[36,55953,55954],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,55956,55935],{"class":42},[36,55958,55959],{"class":405},"'开启剑与雪的黑暗传说!'",[36,55961,55941],{"class":42},[36,55963,55964],{"class":405},"'rgba(43,35,26)'",[36,55966,55947],{"class":42},[36,55968,55969,55971,55974,55976,55979,55981,55984],{"class":38,"line":17335},[36,55970,55929],{"class":42},[36,55972,55973],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,55975,55935],{"class":42},[36,55977,55978],{"class":405},"'真正的jo厨出现了!'",[36,55980,55941],{"class":42},[36,55982,55983],{"class":405},"'rgba(36,31,33)'",[36,55985,55947],{"class":42},[36,55987,55988,55990,55993,55995,55998,56000,56003],{"class":38,"line":17349},[36,55989,55929],{"class":42},[36,55991,55992],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,55994,55935],{"class":42},[36,55996,55997],{"class":405},"'李玉刚:让世界通过b站看到东方大国文化'",[36,55999,55941],{"class":42},[36,56001,56002],{"class":405},"'rgba(139,98,66)'",[36,56004,55947],{"class":42},[36,56006,56007,56009,56012,56014,56017,56019,56022],{"class":38,"line":17361},[36,56008,55929],{"class":42},[36,56010,56011],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,56013,55935],{"class":42},[36,56015,56016],{"class":405},"'快来分享你的寒假日常吧'",[36,56018,55941],{"class":42},[36,56020,56021],{"class":405},"'rgba(67,90,92)'",[36,56023,55947],{"class":42},[36,56025,56026,56028,56031,56033,56036,56038,56041],{"class":38,"line":17366},[36,56027,55929],{"class":42},[36,56029,56030],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,56032,55935],{"class":42},[36,56034,56035],{"class":405},"'哔哩哔哩小年YEAR'",[36,56037,55941],{"class":42},[36,56039,56040],{"class":405},"'rgba(166,131,143)'",[36,56042,55947],{"class":42},[36,56044,56045,56047,56050,56052,56055,56057,56060],{"class":38,"line":17379},[36,56046,55929],{"class":42},[36,56048,56049],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,56051,55935],{"class":42},[36,56053,56054],{"class":405},"'一站式解决你的电脑配置问题'",[36,56056,55941],{"class":42},[36,56058,56059],{"class":405},"'rgba(53,29,25)'",[36,56061,55947],{"class":42},[36,56063,56064,56066,56069,56071,56074,56076,56079],{"class":38,"line":17384},[36,56065,55929],{"class":42},[36,56067,56068],{"class":405},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,56070,55935],{"class":42},[36,56072,56073],{"class":405},"'谁不想和小猫咪贴贴呢?'",[36,56075,55941],{"class":42},[36,56077,56078],{"class":405},"'rgba(99,72,114)'",[36,56080,56081],{"class":42}," }\n",[36,56083,56084],{"class":38,"line":17389},[36,56085,53586],{"class":42},[36,56087,56088,56090,56093,56095,56097,56099,56101,56104],{"class":38,"line":17394},[36,56089,11701],{"class":46},[36,56091,56092],{"class":53}," img",[36,56094,14044],{"class":46},[36,56096,54873],{"class":42},[36,56098,54876],{"class":2443},[36,56100,345],{"class":42},[36,56102,56103],{"class":405},"'.slider-wrapper img'",[36,56105,63],{"class":42},[36,56107,56108,56110,56112,56114,56116,56118,56120,56123],{"class":38,"line":17407},[36,56109,11701],{"class":46},[36,56111,7305],{"class":53},[36,56113,14044],{"class":46},[36,56115,54873],{"class":42},[36,56117,54876],{"class":2443},[36,56119,345],{"class":42},[36,56121,56122],{"class":405},"'.slider-footer p'",[36,56124,63],{"class":42},[36,56126,56127,56129,56132,56134,56136,56138,56140,56143],{"class":38,"line":17412},[36,56128,11701],{"class":46},[36,56130,56131],{"class":53}," color",[36,56133,14044],{"class":46},[36,56135,54873],{"class":42},[36,56137,54876],{"class":2443},[36,56139,345],{"class":42},[36,56141,56142],{"class":405},"'.slider-footer'",[36,56144,63],{"class":42},[36,56146,56147,56149,56152,56154,56156,56159,56161,56164],{"class":38,"line":33110},[36,56148,11701],{"class":46},[36,56150,56151],{"class":53}," lis",[36,56153,14044],{"class":46},[36,56155,54873],{"class":42},[36,56157,56158],{"class":2443},"querySelectorAll",[36,56160,345],{"class":42},[36,56162,56163],{"class":405},"'.slider-footer ul li'",[36,56165,63],{"class":42},[36,56167,56168,56170,56172,56174],{"class":38,"line":33116},[36,56169,52696],{"class":46},[36,56171,9918],{"class":42},[36,56173,47],{"class":46},[36,56175,56176],{"class":53}," 1\n",[36,56178,56179,56181,56184,56186,56188,56190,56192],{"class":38,"line":33122},[36,56180,52696],{"class":46},[36,56182,56183],{"class":42}," timer ",[36,56185,47],{"class":46},[36,56187,54921],{"class":2443},[36,56189,345],{"class":42},[36,56191,54926],{"class":46},[36,56193,54929],{"class":42},[36,56195,56196,56199,56201],{"class":38,"line":33128},[36,56197,56198],{"class":42},"      img.src ",[36,56200,47],{"class":46},[36,56202,56203],{"class":42}," arrImage[i].url\n",[36,56205,56206,56209,56211],{"class":38,"line":33134},[36,56207,56208],{"class":42},"      p.innerHTML ",[36,56210,47],{"class":46},[36,56212,56213],{"class":42}," arrImage[i].title\n",[36,56215,56216,56219,56221],{"class":38,"line":33145},[36,56217,56218],{"class":42},"      color.style.backgroundColor ",[36,56220,47],{"class":46},[36,56222,56223],{"class":42}," arrImage[i].color\n",[36,56225,56226],{"class":38,"line":33151},[36,56227,56228],{"class":69},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,56230,56231],{"class":38,"line":33171},[36,56232,56233],{"class":69},"      \u002F\u002F li.classList.add('activate')\n",[36,56235,56236],{"class":38,"line":33177},[36,56237,56238],{"class":69},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,56240,56241],{"class":38,"line":33188},[36,56242,56243],{"class":69},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,56245,56246,56249,56251,56253,56256,56259,56262,56264,56267],{"class":38,"line":33194},[36,56247,56248],{"class":42},"      document.",[36,56250,54876],{"class":2443},[36,56252,345],{"class":42},[36,56254,56255],{"class":405},"'.activate'",[36,56257,56258],{"class":42},")?.classList.",[36,56260,56261],{"class":2443},"toggle",[36,56263,345],{"class":42},[36,56265,56266],{"class":405},"'activate'",[36,56268,63],{"class":42},[36,56270,56271,56274,56276,56278,56280],{"class":38,"line":33200},[36,56272,56273],{"class":42},"      lis[i].classList.",[36,56275,5814],{"class":2443},[36,56277,345],{"class":42},[36,56279,56266],{"class":405},[36,56281,63],{"class":42},[36,56283,56284],{"class":38,"line":33206},[36,56285,2880],{"emptyLinePlaceholder":553},[36,56287,56288,56291,56293,56295,56297,56299,56301,56303,56306],{"class":38,"line":33212},[36,56289,56290],{"class":42},"      i ",[36,56292,47],{"class":46},[36,56294,54960],{"class":42},[36,56296,1097],{"class":46},[36,56298,25599],{"class":53},[36,56300,14194],{"class":42},[36,56302,947],{"class":46},[36,56304,56305],{"class":42}," arrImage.",[36,56307,56308],{"class":53},"length\n",[36,56310,56311],{"class":38,"line":33218},[36,56312,2880],{"emptyLinePlaceholder":553},[36,56314,56315,56317,56319],{"class":38,"line":33224},[36,56316,55012],{"class":42},[36,56318,6890],{"class":53},[36,56320,63],{"class":42},[36,56322,56323,56325,56327],{"class":38,"line":33230},[36,56324,52894],{"class":42},[36,56326,52290],{"class":51777},[36,56328,51784],{"class":42},[36,56330,56331,56333,56335],{"class":38,"line":33250},[36,56332,52262],{"class":42},[36,56334,52277],{"class":51777},[36,56336,51784],{"class":42},[36,56338,56339],{"class":38,"line":33256},[36,56340,2880],{"emptyLinePlaceholder":553},[36,56342,56343,56345,56347],{"class":38,"line":33272},[36,56344,52262],{"class":42},[36,56346,51112],{"class":51777},[36,56348,51784],{"class":42},[19,56350,56351],{},[519,56352],{"alt":31,"src":56353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56355,56356],{},"?.就是短路保护,确保输出正常进行",[19,56358,56359],{},"不要忘记取余%,有时候可以用",[19,56361,56362],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[579,56364,56365],{"start":66},[582,56366,56367],{},"法2",[26,56369,56371],{"className":51110,"code":56370,"language":51112,"meta":31,"style":31},"\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",[33,56372,56373,56383,56397,56401,56409,56423,56443,56455,56463,56469,56479,56489,56493,56497,56503,56513,56517,56521,56527,56537,56549,56561,56575,56579,56583,56589,56599,56609,56619,56631,56643,56653,56657,56661,56669,56679,56691,56703,56715,56719,56723,56729,56739,56751,56763,56773,56783,56793,56805,56817,56821,56825,56833,56845,56857,56883,56895,56899,56903,56909,56919,56923,56931,56939,56943,56951,56965,56979,56999,57007,57021,57033,57041,57059,57071,57083,57095,57107,57119,57131,57143,57151,57159,57167,57175,57186,57202,57218,57234,57250,57266,57282,57298,57314,57318,57323,57341,57359,57369,57374,57379,57390,57396,57411,57420,57424,57429,57438,57443,57452,57457,57462,57467,57490,57520,57524,57532,57536,57544,57552,57556],{"__ignoreMap":31},[36,56374,56375,56377,56379,56381],{"class":38,"line":39},[36,56376,51774],{"class":42},[36,56378,51778],{"class":51777},[36,56380,51781],{"class":2443},[36,56382,51784],{"class":42},[36,56384,56385,56387,56389,56391,56393,56395],{"class":38,"line":66},[36,56386,1523],{"class":42},[36,56388,51112],{"class":51777},[36,56390,51793],{"class":2443},[36,56392,47],{"class":42},[36,56394,51798],{"class":405},[36,56396,51784],{"class":42},[36,56398,56399],{"class":38,"line":73},[36,56400,2880],{"emptyLinePlaceholder":553},[36,56402,56403,56405,56407],{"class":38,"line":79},[36,56404,1523],{"class":42},[36,56406,51811],{"class":51777},[36,56408,51784],{"class":42},[36,56410,56411,56413,56415,56417,56419,56421],{"class":38,"line":85},[36,56412,52621],{"class":42},[36,56414,51821],{"class":51777},[36,56416,51824],{"class":2443},[36,56418,47],{"class":42},[36,56420,51829],{"class":405},[36,56422,51784],{"class":42},[36,56424,56425,56427,56429,56431,56433,56435,56437,56439,56441],{"class":38,"line":419},[36,56426,52621],{"class":42},[36,56428,51821],{"class":51777},[36,56430,15400],{"class":2443},[36,56432,47],{"class":42},[36,56434,51868],{"class":405},[36,56436,51848],{"class":2443},[36,56438,47],{"class":42},[36,56440,51875],{"class":405},[36,56442,51784],{"class":42},[36,56444,56445,56447,56449,56451,56453],{"class":38,"line":425},[36,56446,52621],{"class":42},[36,56448,51884],{"class":51777},[36,56450,51887],{"class":42},[36,56452,51884],{"class":51777},[36,56454,51784],{"class":42},[36,56456,56457,56459,56461],{"class":38,"line":431},[36,56458,52621],{"class":42},[36,56460,539],{"class":51777},[36,56462,51784],{"class":42},[36,56464,56465,56467],{"class":38,"line":437},[36,56466,6883],{"class":51777},[36,56468,16052],{"class":42},[36,56470,56471,56473,56475,56477],{"class":38,"line":443},[36,56472,55172],{"class":53},[36,56474,51914],{"class":42},[36,56476,812],{"class":53},[36,56478,1774],{"class":42},[36,56480,56481,56483,56485,56487],{"class":38,"line":2092},[36,56482,55183],{"class":53},[36,56484,51914],{"class":42},[36,56486,812],{"class":53},[36,56488,1774],{"class":42},[36,56490,56491],{"class":38,"line":2097},[36,56492,2667],{"class":42},[36,56494,56495],{"class":38,"line":2103},[36,56496,2880],{"emptyLinePlaceholder":553},[36,56498,56499,56501],{"class":38,"line":2108},[36,56500,55202],{"class":51777},[36,56502,16052],{"class":42},[36,56504,56505,56507,56509,56511],{"class":38,"line":2122},[36,56506,55209],{"class":53},[36,56508,51914],{"class":42},[36,56510,55214],{"class":53},[36,56512,1774],{"class":42},[36,56514,56515],{"class":38,"line":2127},[36,56516,2667],{"class":42},[36,56518,56519],{"class":38,"line":2133},[36,56520,2880],{"emptyLinePlaceholder":553},[36,56522,56523,56525],{"class":38,"line":2154},[36,56524,55229],{"class":2443},[36,56526,16052],{"class":42},[36,56528,56529,56531,56533,56535],{"class":38,"line":2159},[36,56530,55236],{"class":53},[36,56532,51914],{"class":42},[36,56534,55241],{"class":53},[36,56536,1774],{"class":42},[36,56538,56539,56541,56543,56545,56547],{"class":38,"line":2173},[36,56540,55248],{"class":53},[36,56542,51914],{"class":42},[36,56544,55253],{"class":53},[36,56546,51969],{"class":46},[36,56548,1774],{"class":42},[36,56550,56551,56553,56555,56557,56559],{"class":38,"line":2178},[36,56552,55262],{"class":53},[36,56554,51914],{"class":42},[36,56556,2019],{"class":53},[36,56558,51969],{"class":46},[36,56560,1774],{"class":42},[36,56562,56563,56565,56567,56569,56571,56573],{"class":38,"line":2207},[36,56564,55183],{"class":53},[36,56566,51914],{"class":42},[36,56568,930],{"class":53},[36,56570,51969],{"class":46},[36,56572,52033],{"class":53},[36,56574,1774],{"class":42},[36,56576,56577],{"class":38,"line":2212},[36,56578,2667],{"class":42},[36,56580,56581],{"class":38,"line":2229},[36,56582,2880],{"emptyLinePlaceholder":553},[36,56584,56585,56587],{"class":38,"line":2234},[36,56586,55297],{"class":2443},[36,56588,16052],{"class":42},[36,56590,56591,56593,56595,56597],{"class":38,"line":2239},[36,56592,55236],{"class":53},[36,56594,51914],{"class":42},[36,56596,55308],{"class":53},[36,56598,1774],{"class":42},[36,56600,56601,56603,56605,56607],{"class":38,"line":2244},[36,56602,55315],{"class":53},[36,56604,51914],{"class":42},[36,56606,812],{"class":53},[36,56608,1774],{"class":42},[36,56610,56611,56613,56615,56617],{"class":38,"line":2258},[36,56612,55326],{"class":53},[36,56614,51914],{"class":42},[36,56616,812],{"class":53},[36,56618,1774],{"class":42},[36,56620,56621,56623,56625,56627,56629],{"class":38,"line":2263},[36,56622,55248],{"class":53},[36,56624,51914],{"class":42},[36,56626,930],{"class":53},[36,56628,947],{"class":46},[36,56630,1774],{"class":42},[36,56632,56633,56635,56637,56639,56641],{"class":38,"line":3057},[36,56634,55262],{"class":53},[36,56636,51914],{"class":42},[36,56638,1188],{"class":53},[36,56640,947],{"class":46},[36,56642,1774],{"class":42},[36,56644,56645,56647,56649,56651],{"class":38,"line":3071},[36,56646,55361],{"class":53},[36,56648,51914],{"class":42},[36,56650,55366],{"class":53},[36,56652,1774],{"class":42},[36,56654,56655],{"class":38,"line":3079},[36,56656,2667],{"class":42},[36,56658,56659],{"class":38,"line":3084},[36,56660,2880],{"emptyLinePlaceholder":553},[36,56662,56663,56665,56667],{"class":38,"line":3090},[36,56664,55297],{"class":2443},[36,56666,7305],{"class":51777},[36,56668,16052],{"class":42},[36,56670,56671,56673,56675,56677],{"class":38,"line":3096},[36,56672,55236],{"class":53},[36,56674,51914],{"class":42},[36,56676,55308],{"class":53},[36,56678,1774],{"class":42},[36,56680,56681,56683,56685,56687,56689],{"class":38,"line":3101},[36,56682,55399],{"class":53},[36,56684,51914],{"class":42},[36,56686,1514],{"class":53},[36,56688,51969],{"class":46},[36,56690,1774],{"class":42},[36,56692,56693,56695,56697,56699,56701],{"class":38,"line":8428},[36,56694,55315],{"class":53},[36,56696,51914],{"class":42},[36,56698,1313],{"class":53},[36,56700,51969],{"class":46},[36,56702,1774],{"class":42},[36,56704,56705,56707,56709,56711,56713],{"class":38,"line":8452},[36,56706,55424],{"class":53},[36,56708,51914],{"class":42},[36,56710,938],{"class":53},[36,56712,51969],{"class":46},[36,56714,1774],{"class":42},[36,56716,56717],{"class":38,"line":8457},[36,56718,2667],{"class":42},[36,56720,56721],{"class":38,"line":8463},[36,56722,2880],{"emptyLinePlaceholder":553},[36,56724,56725,56727],{"class":38,"line":8490},[36,56726,55445],{"class":51777},[36,56728,16052],{"class":42},[36,56730,56731,56733,56735,56737],{"class":38,"line":8495},[36,56732,55236],{"class":53},[36,56734,51914],{"class":42},[36,56736,55308],{"class":53},[36,56738,1774],{"class":42},[36,56740,56741,56743,56745,56747,56749],{"class":38,"line":8501},[36,56742,55424],{"class":53},[36,56744,51914],{"class":42},[36,56746,1394],{"class":53},[36,56748,51969],{"class":46},[36,56750,1774],{"class":42},[36,56752,56753,56755,56757,56759,56761],{"class":38,"line":8513},[36,56754,55315],{"class":53},[36,56756,51914],{"class":42},[36,56758,1313],{"class":53},[36,56760,51969],{"class":46},[36,56762,1774],{"class":42},[36,56764,56765,56767,56769,56771],{"class":38,"line":8525},[36,56766,55486],{"class":53},[36,56768,51914],{"class":42},[36,56770,51954],{"class":53},[36,56772,1774],{"class":42},[36,56774,56775,56777,56779,56781],{"class":38,"line":8537},[36,56776,55497],{"class":53},[36,56778,51914],{"class":42},[36,56780,52145],{"class":53},[36,56782,1774],{"class":42},[36,56784,56785,56787,56789,56791],{"class":38,"line":10196},[36,56786,55236],{"class":53},[36,56788,51914],{"class":42},[36,56790,55308],{"class":53},[36,56792,1774],{"class":42},[36,56794,56795,56797,56799,56801,56803],{"class":38,"line":10221},[36,56796,55248],{"class":53},[36,56798,51914],{"class":42},[36,56800,4472],{"class":53},[36,56802,51969],{"class":46},[36,56804,1774],{"class":42},[36,56806,56807,56809,56811,56813,56815],{"class":38,"line":10244},[36,56808,55262],{"class":53},[36,56810,51914],{"class":42},[36,56812,1313],{"class":53},[36,56814,51969],{"class":46},[36,56816,1774],{"class":42},[36,56818,56819],{"class":38,"line":10268},[36,56820,2667],{"class":42},[36,56822,56823],{"class":38,"line":10273},[36,56824,2880],{"emptyLinePlaceholder":553},[36,56826,56827,56829,56831],{"class":38,"line":10278},[36,56828,55445],{"class":51777},[36,56830,55552],{"class":51777},[36,56832,16052],{"class":42},[36,56834,56835,56837,56839,56841,56843],{"class":38,"line":10283},[36,56836,55248],{"class":53},[36,56838,51914],{"class":42},[36,56840,1313],{"class":53},[36,56842,51969],{"class":46},[36,56844,1774],{"class":42},[36,56846,56847,56849,56851,56853,56855],{"class":38,"line":10292},[36,56848,55262],{"class":53},[36,56850,51914],{"class":42},[36,56852,1313],{"class":53},[36,56854,51969],{"class":46},[36,56856,1774],{"class":42},[36,56858,56859,56861,56863,56865,56867,56869,56871,56873,56875,56877,56879,56881],{"class":38,"line":10297},[36,56860,55361],{"class":53},[36,56862,51914],{"class":42},[36,56864,55587],{"class":53},[36,56866,345],{"class":42},[36,56868,812],{"class":53},[36,56870,12915],{"class":42},[36,56872,812],{"class":53},[36,56874,12915],{"class":42},[36,56876,812],{"class":53},[36,56878,12915],{"class":42},[36,56880,55604],{"class":53},[36,56882,3199],{"class":42},[36,56884,56885,56887,56889,56891,56893],{"class":38,"line":10303},[36,56886,55611],{"class":53},[36,56888,51914],{"class":42},[36,56890,1062],{"class":53},[36,56892,51969],{"class":46},[36,56894,1774],{"class":42},[36,56896,56897],{"class":38,"line":10324},[36,56898,2667],{"class":42},[36,56900,56901],{"class":38,"line":10330},[36,56902,2880],{"emptyLinePlaceholder":553},[36,56904,56905,56907],{"class":38,"line":10344},[36,56906,55632],{"class":2443},[36,56908,16052],{"class":42},[36,56910,56911,56913,56915,56917],{"class":38,"line":10350},[36,56912,55361],{"class":53},[36,56914,51914],{"class":42},[36,56916,55643],{"class":53},[36,56918,1774],{"class":42},[36,56920,56921],{"class":38,"line":10377},[36,56922,2667],{"class":42},[36,56924,56925,56927,56929],{"class":38,"line":10386},[36,56926,52894],{"class":42},[36,56928,539],{"class":51777},[36,56930,51784],{"class":42},[36,56932,56933,56935,56937],{"class":38,"line":10392},[36,56934,52262],{"class":42},[36,56936,51811],{"class":51777},[36,56938,51784],{"class":42},[36,56940,56941],{"class":38,"line":10400},[36,56942,2880],{"emptyLinePlaceholder":553},[36,56944,56945,56947,56949],{"class":38,"line":10405},[36,56946,1523],{"class":42},[36,56948,52277],{"class":51777},[36,56950,51784],{"class":42},[36,56952,56953,56955,56957,56959,56961,56963],{"class":38,"line":17084},[36,56954,52621],{"class":42},[36,56956,52088],{"class":51777},[36,56958,53963],{"class":2443},[36,56960,47],{"class":42},[36,56962,53968],{"class":405},[36,56964,51784],{"class":42},[36,56966,56967,56969,56971,56973,56975,56977],{"class":38,"line":17090},[36,56968,51818],{"class":42},[36,56970,52088],{"class":51777},[36,56972,53963],{"class":2443},[36,56974,47],{"class":42},[36,56976,55704],{"class":405},[36,56978,51784],{"class":42},[36,56980,56981,56983,56985,56987,56989,56991,56993,56995,56997],{"class":38,"line":17113},[36,56982,55711],{"class":42},[36,56984,519],{"class":51777},[36,56986,55716],{"class":2443},[36,56988,47],{"class":42},[36,56990,55721],{"class":405},[36,56992,55724],{"class":2443},[36,56994,47],{"class":42},[36,56996,8132],{"class":405},[36,56998,51784],{"class":42},[36,57000,57001,57003,57005],{"class":38,"line":17119},[36,57002,52253],{"class":42},[36,57004,52088],{"class":51777},[36,57006,51784],{"class":42},[36,57008,57009,57011,57013,57015,57017,57019],{"class":38,"line":17142},[36,57010,51818],{"class":42},[36,57012,52088],{"class":51777},[36,57014,53963],{"class":2443},[36,57016,47],{"class":42},[36,57018,55751],{"class":405},[36,57020,51784],{"class":42},[36,57022,57023,57025,57027,57029,57031],{"class":38,"line":17156},[36,57024,55711],{"class":42},[36,57026,19],{"class":51777},[36,57028,55762],{"class":42},[36,57030,19],{"class":51777},[36,57032,51784],{"class":42},[36,57034,57035,57037,57039],{"class":38,"line":17176},[36,57036,55711],{"class":42},[36,57038,1620],{"class":51777},[36,57040,51784],{"class":42},[36,57042,57043,57045,57047,57049,57051,57053,57055,57057],{"class":38,"line":17182},[36,57044,55779],{"class":42},[36,57046,582],{"class":51777},[36,57048,53963],{"class":2443},[36,57050,47],{"class":42},[36,57052,55788],{"class":405},[36,57054,55791],{"class":42},[36,57056,582],{"class":51777},[36,57058,51784],{"class":42},[36,57060,57061,57063,57065,57067,57069],{"class":38,"line":17193},[36,57062,55779],{"class":42},[36,57064,582],{"class":51777},[36,57066,55791],{"class":42},[36,57068,582],{"class":51777},[36,57070,51784],{"class":42},[36,57072,57073,57075,57077,57079,57081],{"class":38,"line":17216},[36,57074,55779],{"class":42},[36,57076,582],{"class":51777},[36,57078,55791],{"class":42},[36,57080,582],{"class":51777},[36,57082,51784],{"class":42},[36,57084,57085,57087,57089,57091,57093],{"class":38,"line":17238},[36,57086,55779],{"class":42},[36,57088,582],{"class":51777},[36,57090,55791],{"class":42},[36,57092,582],{"class":51777},[36,57094,51784],{"class":42},[36,57096,57097,57099,57101,57103,57105],{"class":38,"line":17243},[36,57098,55779],{"class":42},[36,57100,582],{"class":51777},[36,57102,55791],{"class":42},[36,57104,582],{"class":51777},[36,57106,51784],{"class":42},[36,57108,57109,57111,57113,57115,57117],{"class":38,"line":17249},[36,57110,55779],{"class":42},[36,57112,582],{"class":51777},[36,57114,55791],{"class":42},[36,57116,582],{"class":51777},[36,57118,51784],{"class":42},[36,57120,57121,57123,57125,57127,57129],{"class":38,"line":17263},[36,57122,55779],{"class":42},[36,57124,582],{"class":51777},[36,57126,55791],{"class":42},[36,57128,582],{"class":51777},[36,57130,51784],{"class":42},[36,57132,57133,57135,57137,57139,57141],{"class":38,"line":17276},[36,57134,55779],{"class":42},[36,57136,582],{"class":51777},[36,57138,55791],{"class":42},[36,57140,582],{"class":51777},[36,57142,51784],{"class":42},[36,57144,57145,57147,57149],{"class":38,"line":17281},[36,57146,55884],{"class":42},[36,57148,1620],{"class":51777},[36,57150,51784],{"class":42},[36,57152,57153,57155,57157],{"class":38,"line":17295},[36,57154,52253],{"class":42},[36,57156,52088],{"class":51777},[36,57158,51784],{"class":42},[36,57160,57161,57163,57165],{"class":38,"line":17300},[36,57162,52894],{"class":42},[36,57164,52088],{"class":51777},[36,57166,51784],{"class":42},[36,57168,57169,57171,57173],{"class":38,"line":17306},[36,57170,52621],{"class":42},[36,57172,52290],{"class":51777},[36,57174,51784],{"class":42},[36,57176,57177,57179,57182,57184],{"class":38,"line":17311},[36,57178,11701],{"class":46},[36,57180,57181],{"class":53}," sliderData",[36,57183,14044],{"class":46},[36,57185,55924],{"class":42},[36,57187,57188,57190,57192,57194,57196,57198,57200],{"class":38,"line":17325},[36,57189,55929],{"class":42},[36,57191,55932],{"class":405},[36,57193,55935],{"class":42},[36,57195,55938],{"class":405},[36,57197,55941],{"class":42},[36,57199,55944],{"class":405},[36,57201,55947],{"class":42},[36,57203,57204,57206,57208,57210,57212,57214,57216],{"class":38,"line":17330},[36,57205,55929],{"class":42},[36,57207,55954],{"class":405},[36,57209,55935],{"class":42},[36,57211,55959],{"class":405},[36,57213,55941],{"class":42},[36,57215,55964],{"class":405},[36,57217,55947],{"class":42},[36,57219,57220,57222,57224,57226,57228,57230,57232],{"class":38,"line":17335},[36,57221,55929],{"class":42},[36,57223,55973],{"class":405},[36,57225,55935],{"class":42},[36,57227,55978],{"class":405},[36,57229,55941],{"class":42},[36,57231,55983],{"class":405},[36,57233,55947],{"class":42},[36,57235,57236,57238,57240,57242,57244,57246,57248],{"class":38,"line":17349},[36,57237,55929],{"class":42},[36,57239,55992],{"class":405},[36,57241,55935],{"class":42},[36,57243,55997],{"class":405},[36,57245,55941],{"class":42},[36,57247,56002],{"class":405},[36,57249,55947],{"class":42},[36,57251,57252,57254,57256,57258,57260,57262,57264],{"class":38,"line":17361},[36,57253,55929],{"class":42},[36,57255,56011],{"class":405},[36,57257,55935],{"class":42},[36,57259,56016],{"class":405},[36,57261,55941],{"class":42},[36,57263,56021],{"class":405},[36,57265,55947],{"class":42},[36,57267,57268,57270,57272,57274,57276,57278,57280],{"class":38,"line":17366},[36,57269,55929],{"class":42},[36,57271,56030],{"class":405},[36,57273,55935],{"class":42},[36,57275,56035],{"class":405},[36,57277,55941],{"class":42},[36,57279,56040],{"class":405},[36,57281,55947],{"class":42},[36,57283,57284,57286,57288,57290,57292,57294,57296],{"class":38,"line":17379},[36,57285,55929],{"class":42},[36,57287,56049],{"class":405},[36,57289,55935],{"class":42},[36,57291,56054],{"class":405},[36,57293,55941],{"class":42},[36,57295,56059],{"class":405},[36,57297,55947],{"class":42},[36,57299,57300,57302,57304,57306,57308,57310,57312],{"class":38,"line":17384},[36,57301,55929],{"class":42},[36,57303,56068],{"class":405},[36,57305,55935],{"class":42},[36,57307,56073],{"class":405},[36,57309,55941],{"class":42},[36,57311,56078],{"class":405},[36,57313,56081],{"class":42},[36,57315,57316],{"class":38,"line":17389},[36,57317,53586],{"class":42},[36,57319,57320],{"class":38,"line":17394},[36,57321,57322],{"class":69},"    \u002F\u002F 1.获取元素\n",[36,57324,57325,57327,57329,57331,57333,57335,57337,57339],{"class":38,"line":17407},[36,57326,11701],{"class":46},[36,57328,56092],{"class":53},[36,57330,14044],{"class":46},[36,57332,54873],{"class":42},[36,57334,54876],{"class":2443},[36,57336,345],{"class":42},[36,57338,56103],{"class":405},[36,57340,63],{"class":42},[36,57342,57343,57345,57347,57349,57351,57353,57355,57357],{"class":38,"line":17412},[36,57344,11701],{"class":46},[36,57346,7305],{"class":53},[36,57348,14044],{"class":46},[36,57350,54873],{"class":42},[36,57352,54876],{"class":2443},[36,57354,345],{"class":42},[36,57356,56122],{"class":405},[36,57358,63],{"class":42},[36,57360,57361,57363,57365,57367],{"class":38,"line":33110},[36,57362,52696],{"class":46},[36,57364,9918],{"class":42},[36,57366,47],{"class":46},[36,57368,47810],{"class":53},[36,57370,57371],{"class":38,"line":33116},[36,57372,57373],{"class":69},"    \u002F\u002F 2.开启定时器\n",[36,57375,57376],{"class":38,"line":33122},[36,57377,57378],{"class":69},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,57380,57381,57384,57386,57388],{"class":38,"line":33128},[36,57382,57383],{"class":2443},"    setInterval",[36,57385,345],{"class":42},[36,57387,54926],{"class":46},[36,57389,54929],{"class":42},[36,57391,57392,57394],{"class":38,"line":33134},[36,57393,54934],{"class":42},[36,57395,3182],{"class":46},[36,57397,57398,57400,57402,57404,57407,57409],{"class":38,"line":33145},[36,57399,54957],{"class":46},[36,57401,54960],{"class":42},[36,57403,2190],{"class":46},[36,57405,57406],{"class":42}," sliderData.",[36,57408,52445],{"class":53},[36,57410,12922],{"class":42},[36,57412,57413,57416,57418],{"class":38,"line":33151},[36,57414,57415],{"class":42},"        i ",[36,57417,47],{"class":46},[36,57419,47810],{"class":53},[36,57421,57422],{"class":38,"line":33171},[36,57423,52875],{"class":42},[36,57425,57426],{"class":38,"line":33177},[36,57427,57428],{"class":69},"      \u002F\u002F 更换图片路径\n",[36,57430,57431,57433,57435],{"class":38,"line":33188},[36,57432,56198],{"class":42},[36,57434,47],{"class":46},[36,57436,57437],{"class":42}," sliderData[i].url\n",[36,57439,57440],{"class":38,"line":33194},[36,57441,57442],{"class":69},"      \u002F\u002F 把文字写到p里面\n",[36,57444,57445,57447,57449],{"class":38,"line":33200},[36,57446,56208],{"class":42},[36,57448,47],{"class":46},[36,57450,57451],{"class":42}," sliderData[i].title\n",[36,57453,57454],{"class":38,"line":33206},[36,57455,57456],{"class":69},"      \u002F\u002F 小圆点\n",[36,57458,57459],{"class":38,"line":33212},[36,57460,57461],{"class":69},"      \u002F\u002F 先删除以前的active\n",[36,57463,57464],{"class":38,"line":33218},[36,57465,57466],{"class":69},"      \u002F\u002F 只让当前li添加active\n",[36,57468,57469,57471,57473,57475,57478,57481,57484,57486,57488],{"class":38,"line":33224},[36,57470,56248],{"class":42},[36,57472,54876],{"class":2443},[36,57474,345],{"class":42},[36,57476,57477],{"class":405},"'.slider-footer .activate'",[36,57479,57480],{"class":42},").classList.",[36,57482,57483],{"class":2443},"remove",[36,57485,345],{"class":42},[36,57487,56266],{"class":405},[36,57489,63],{"class":42},[36,57491,57492,57494,57496,57498,57501,57503,57505,57507,57510,57512,57514,57516,57518],{"class":38,"line":33230},[36,57493,56248],{"class":42},[36,57495,54876],{"class":2443},[36,57497,345],{"class":42},[36,57499,57500],{"class":405},"`.slider-footer ul li:nth-child(${",[36,57502,1057],{"class":42},[36,57504,46043],{"class":46},[36,57506,25599],{"class":53},[36,57508,57509],{"class":405},"})`",[36,57511,57480],{"class":42},[36,57513,5814],{"class":2443},[36,57515,345],{"class":42},[36,57517,56266],{"class":405},[36,57519,63],{"class":42},[36,57521,57522],{"class":38,"line":33250},[36,57523,2880],{"emptyLinePlaceholder":553},[36,57525,57526,57528,57530],{"class":38,"line":33256},[36,57527,55012],{"class":42},[36,57529,6890],{"class":53},[36,57531,63],{"class":42},[36,57533,57534],{"class":38,"line":33272},[36,57535,2880],{"emptyLinePlaceholder":553},[36,57537,57538,57540,57542],{"class":38,"line":33278},[36,57539,52894],{"class":42},[36,57541,52290],{"class":51777},[36,57543,51784],{"class":42},[36,57545,57546,57548,57550],{"class":38,"line":33292},[36,57547,52262],{"class":42},[36,57549,52277],{"class":51777},[36,57551,51784],{"class":42},[36,57553,57554],{"class":38,"line":33298},[36,57555,2880],{"emptyLinePlaceholder":553},[36,57557,57558,57560,57562],{"class":38,"line":33313},[36,57559,52262],{"class":42},[36,57561,51112],{"class":51777},[36,57563,51784],{"class":42},[596,57565,57567],{"id":57566},"_317-重要知识点","3.1.7 重要知识点",[19,57569,57570,57571],{},"浏览器在渲染文本时， ",[770,57572,57573],{},"没有空格或换行符就没有“断行点”",[19,57575,57576],{},[519,57577],{"alt":31,"src":57578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57580,57581],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57583,57584],{},[519,57585],{"alt":31,"src":57586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57588,57589],{},[519,57590],{"alt":31,"src":57591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57593,57595],{"id":57594},"_32-dom事件基础","3.2 DOM事件基础",[596,57597,57599],{"id":57598},"_321-事件监听","3.2.1 事件监听",[19,57601,57602],{},[519,57603],{"alt":31,"src":57604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57606,57607],{},"事件监听有响应的发生",[19,57609,57610],{},[519,57611],{"alt":31,"src":57612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57614,57615],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57617,57618],{},"对于有名函数,要执行的函数名后边不要加()",[596,57620,57622],{"id":57621},"_322-随机点名案例","3.2.2 随机点名案例",[26,57624,57626],{"className":51110,"code":57625,"language":51112,"meta":31,"style":31},"\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",[33,57627,57628,57638,57652,57656,57664,57678,57698,57710,57718,57724,57734,57744,57748,57752,57759,57770,57774,57778,57784,57796,57810,57820,57832,57845,57849,57853,57860,57864,57877,57889,57901,57905,57909,57913,57920,57930,57934,57938,57947,57959,57971,57986,57990,57998,58006,58010,58018,58031,58045,58058,58078,58086,58101,58121,58141,58149,58153,58161,58166,58202,58222,58227,58246,58251,58262,58267,58278,58283,58302,58317,58322,58348,58358,58367,58372,58388,58393,58398,58403,58418,58422,58426,58431,58450,58467,58475,58480,58495,58499,58503,58511,58519,58523],{"__ignoreMap":31},[36,57629,57630,57632,57634,57636],{"class":38,"line":39},[36,57631,51774],{"class":42},[36,57633,51778],{"class":51777},[36,57635,51781],{"class":2443},[36,57637,51784],{"class":42},[36,57639,57640,57642,57644,57646,57648,57650],{"class":38,"line":66},[36,57641,1523],{"class":42},[36,57643,51112],{"class":51777},[36,57645,51793],{"class":2443},[36,57647,47],{"class":42},[36,57649,51798],{"class":405},[36,57651,51784],{"class":42},[36,57653,57654],{"class":38,"line":73},[36,57655,2880],{"emptyLinePlaceholder":553},[36,57657,57658,57660,57662],{"class":38,"line":79},[36,57659,1523],{"class":42},[36,57661,51811],{"class":51777},[36,57663,51784],{"class":42},[36,57665,57666,57668,57670,57672,57674,57676],{"class":38,"line":85},[36,57667,52621],{"class":42},[36,57669,51821],{"class":51777},[36,57671,51824],{"class":2443},[36,57673,47],{"class":42},[36,57675,51829],{"class":405},[36,57677,51784],{"class":42},[36,57679,57680,57682,57684,57686,57688,57690,57692,57694,57696],{"class":38,"line":419},[36,57681,52621],{"class":42},[36,57683,51821],{"class":51777},[36,57685,15400],{"class":2443},[36,57687,47],{"class":42},[36,57689,51868],{"class":405},[36,57691,51848],{"class":2443},[36,57693,47],{"class":42},[36,57695,51875],{"class":405},[36,57697,51784],{"class":42},[36,57699,57700,57702,57704,57706,57708],{"class":38,"line":425},[36,57701,52621],{"class":42},[36,57703,51884],{"class":51777},[36,57705,51887],{"class":42},[36,57707,51884],{"class":51777},[36,57709,51784],{"class":42},[36,57711,57712,57714,57716],{"class":38,"line":431},[36,57713,52621],{"class":42},[36,57715,539],{"class":51777},[36,57717,51784],{"class":42},[36,57719,57720,57722],{"class":38,"line":437},[36,57721,6883],{"class":51777},[36,57723,16052],{"class":42},[36,57725,57726,57728,57730,57732],{"class":38,"line":443},[36,57727,55183],{"class":53},[36,57729,51914],{"class":42},[36,57731,812],{"class":53},[36,57733,1774],{"class":42},[36,57735,57736,57738,57740,57742],{"class":38,"line":2092},[36,57737,55172],{"class":53},[36,57739,51914],{"class":42},[36,57741,812],{"class":53},[36,57743,1774],{"class":42},[36,57745,57746],{"class":38,"line":2097},[36,57747,2667],{"class":42},[36,57749,57750],{"class":38,"line":2103},[36,57751,2880],{"emptyLinePlaceholder":553},[36,57753,57754,57757],{"class":38,"line":2108},[36,57755,57756],{"class":51777},"    h2",[36,57758,16052],{"class":42},[36,57760,57761,57764,57766,57768],{"class":38,"line":2122},[36,57762,57763],{"class":53},"      text-align",[36,57765,51914],{"class":42},[36,57767,52069],{"class":53},[36,57769,1774],{"class":42},[36,57771,57772],{"class":38,"line":2127},[36,57773,2667],{"class":42},[36,57775,57776],{"class":38,"line":2133},[36,57777,2880],{"emptyLinePlaceholder":553},[36,57779,57780,57782],{"class":38,"line":2154},[36,57781,55229],{"class":2443},[36,57783,16052],{"class":42},[36,57785,57786,57788,57790,57792,57794],{"class":38,"line":2159},[36,57787,55248],{"class":53},[36,57789,51914],{"class":42},[36,57791,2019],{"class":53},[36,57793,51969],{"class":46},[36,57795,1774],{"class":42},[36,57797,57798,57800,57802,57804,57806,57808],{"class":38,"line":2173},[36,57799,55183],{"class":53},[36,57801,51914],{"class":42},[36,57803,1269],{"class":53},[36,57805,51969],{"class":46},[36,57807,52033],{"class":53},[36,57809,1774],{"class":42},[36,57811,57812,57814,57816,57818],{"class":38,"line":2178},[36,57813,55486],{"class":53},[36,57815,51914],{"class":42},[36,57817,51954],{"class":53},[36,57819,1774],{"class":42},[36,57821,57822,57824,57826,57828,57830],{"class":38,"line":2207},[36,57823,55399],{"class":53},[36,57825,51914],{"class":42},[36,57827,1438],{"class":53},[36,57829,51969],{"class":46},[36,57831,1774],{"class":42},[36,57833,57834,57837,57839,57841,57843],{"class":38,"line":2212},[36,57835,57836],{"class":53},"      line-height",[36,57838,51914],{"class":42},[36,57840,1018],{"class":53},[36,57842,51969],{"class":46},[36,57844,1774],{"class":42},[36,57846,57847],{"class":38,"line":2229},[36,57848,2667],{"class":42},[36,57850,57851],{"class":38,"line":2234},[36,57852,2880],{"emptyLinePlaceholder":553},[36,57854,57855,57858],{"class":38,"line":2239},[36,57856,57857],{"class":2443},"    .qs",[36,57859,16052],{"class":42},[36,57861,57862],{"class":38,"line":2244},[36,57863,2880],{"emptyLinePlaceholder":553},[36,57865,57866,57868,57870,57873,57875],{"class":38,"line":2258},[36,57867,55248],{"class":53},[36,57869,51914],{"class":42},[36,57871,57872],{"class":53},"450",[36,57874,51969],{"class":46},[36,57876,1774],{"class":42},[36,57878,57879,57881,57883,57885,57887],{"class":38,"line":2263},[36,57880,55262],{"class":53},[36,57882,51914],{"class":42},[36,57884,1018],{"class":53},[36,57886,51969],{"class":46},[36,57888,1774],{"class":42},[36,57890,57891,57894,57896,57899],{"class":38,"line":3057},[36,57892,57893],{"class":53},"      color",[36,57895,51914],{"class":42},[36,57897,57898],{"class":53},"red",[36,57900,1774],{"class":42},[36,57902,57903],{"class":38,"line":3071},[36,57904,2880],{"emptyLinePlaceholder":553},[36,57906,57907],{"class":38,"line":3079},[36,57908,2667],{"class":42},[36,57910,57911],{"class":38,"line":3084},[36,57912,2880],{"emptyLinePlaceholder":553},[36,57914,57915,57918],{"class":38,"line":3090},[36,57916,57917],{"class":2443},"    .btns",[36,57919,16052],{"class":42},[36,57921,57922,57924,57926,57928],{"class":38,"line":3096},[36,57923,57763],{"class":53},[36,57925,51914],{"class":42},[36,57927,52069],{"class":53},[36,57929,1774],{"class":42},[36,57931,57932],{"class":38,"line":3101},[36,57933,2667],{"class":42},[36,57935,57936],{"class":38,"line":8428},[36,57937,2880],{"emptyLinePlaceholder":553},[36,57939,57940,57942,57945],{"class":38,"line":8452},[36,57941,57917],{"class":2443},[36,57943,57944],{"class":51777}," button",[36,57946,16052],{"class":42},[36,57948,57949,57951,57953,57955,57957],{"class":38,"line":8457},[36,57950,55248],{"class":53},[36,57952,51914],{"class":42},[36,57954,1430],{"class":53},[36,57956,51969],{"class":46},[36,57958,1774],{"class":42},[36,57960,57961,57963,57965,57967,57969],{"class":38,"line":8463},[36,57962,55262],{"class":53},[36,57964,51914],{"class":42},[36,57966,892],{"class":53},[36,57968,51969],{"class":46},[36,57970,1774],{"class":42},[36,57972,57973,57975,57977,57979,57982,57984],{"class":38,"line":8490},[36,57974,55183],{"class":53},[36,57976,51914],{"class":42},[36,57978,812],{"class":53},[36,57980,57981],{"class":53}," 50",[36,57983,51969],{"class":46},[36,57985,1774],{"class":42},[36,57987,57988],{"class":38,"line":8495},[36,57989,2667],{"class":42},[36,57991,57992,57994,57996],{"class":38,"line":8501},[36,57993,52894],{"class":42},[36,57995,539],{"class":51777},[36,57997,51784],{"class":42},[36,57999,58000,58002,58004],{"class":38,"line":8513},[36,58001,52262],{"class":42},[36,58003,51811],{"class":51777},[36,58005,51784],{"class":42},[36,58007,58008],{"class":38,"line":8525},[36,58009,2880],{"emptyLinePlaceholder":553},[36,58011,58012,58014,58016],{"class":38,"line":8537},[36,58013,1523],{"class":42},[36,58015,52277],{"class":51777},[36,58017,51784],{"class":42},[36,58019,58020,58022,58024,58027,58029],{"class":38,"line":10196},[36,58021,52621],{"class":42},[36,58023,14],{"class":51777},[36,58025,58026],{"class":42},">随机点名\u003C\u002F",[36,58028,14],{"class":51777},[36,58030,51784],{"class":42},[36,58032,58033,58035,58037,58039,58041,58043],{"class":38,"line":10221},[36,58034,52621],{"class":42},[36,58036,52088],{"class":51777},[36,58038,53963],{"class":2443},[36,58040,47],{"class":42},[36,58042,53968],{"class":405},[36,58044,51784],{"class":42},[36,58046,58047,58049,58051,58054,58056],{"class":38,"line":10244},[36,58048,51818],{"class":42},[36,58050,36],{"class":51777},[36,58052,58053],{"class":42},">名字是：\u003C\u002F",[36,58055,36],{"class":51777},[36,58057,51784],{"class":42},[36,58059,58060,58062,58064,58066,58068,58071,58074,58076],{"class":38,"line":10268},[36,58061,51818],{"class":42},[36,58063,52088],{"class":51777},[36,58065,53963],{"class":2443},[36,58067,47],{"class":42},[36,58069,58070],{"class":405},"\"qs\"",[36,58072,58073],{"class":42},">这里显示姓名\u003C\u002F",[36,58075,52088],{"class":51777},[36,58077,51784],{"class":42},[36,58079,58080,58082,58084],{"class":38,"line":10273},[36,58081,52894],{"class":42},[36,58083,52088],{"class":51777},[36,58085,51784],{"class":42},[36,58087,58088,58090,58092,58094,58096,58099],{"class":38,"line":10278},[36,58089,52621],{"class":42},[36,58091,52088],{"class":51777},[36,58093,53963],{"class":2443},[36,58095,47],{"class":42},[36,58097,58098],{"class":405},"\"btns\"",[36,58100,51784],{"class":42},[36,58102,58103,58105,58107,58109,58111,58114,58117,58119],{"class":38,"line":10283},[36,58104,51818],{"class":42},[36,58106,54364],{"class":51777},[36,58108,53963],{"class":2443},[36,58110,47],{"class":42},[36,58112,58113],{"class":405},"\"start\"",[36,58115,58116],{"class":42},">开始\u003C\u002F",[36,58118,54364],{"class":51777},[36,58120,51784],{"class":42},[36,58122,58123,58125,58127,58129,58131,58134,58137,58139],{"class":38,"line":10292},[36,58124,51818],{"class":42},[36,58126,54364],{"class":51777},[36,58128,53963],{"class":2443},[36,58130,47],{"class":42},[36,58132,58133],{"class":405},"\"end\"",[36,58135,58136],{"class":42},">结束\u003C\u002F",[36,58138,54364],{"class":51777},[36,58140,51784],{"class":42},[36,58142,58143,58145,58147],{"class":38,"line":10297},[36,58144,52894],{"class":42},[36,58146,52088],{"class":51777},[36,58148,51784],{"class":42},[36,58150,58151],{"class":38,"line":10303},[36,58152,2880],{"emptyLinePlaceholder":553},[36,58154,58155,58157,58159],{"class":38,"line":10324},[36,58156,52621],{"class":42},[36,58158,52290],{"class":51777},[36,58160,51784],{"class":42},[36,58162,58163],{"class":38,"line":10330},[36,58164,58165],{"class":69},"    \u002F\u002F 数据数组\n",[36,58167,58168,58170,58173,58175,58177,58180,58182,58185,58187,58190,58192,58195,58197,58200],{"class":38,"line":10344},[36,58169,11701],{"class":46},[36,58171,58172],{"class":53}," arr",[36,58174,14044],{"class":46},[36,58176,52703],{"class":42},[36,58178,58179],{"class":405},"'马超'",[36,58181,12915],{"class":42},[36,58183,58184],{"class":405},"'黄忠'",[36,58186,12915],{"class":42},[36,58188,58189],{"class":405},"'赵云'",[36,58191,12915],{"class":42},[36,58193,58194],{"class":405},"'关羽'",[36,58196,12915],{"class":42},[36,58198,58199],{"class":405},"'张飞'",[36,58201,33723],{"class":42},[36,58203,58204,58206,58209,58211,58213,58215,58217,58220],{"class":38,"line":10350},[36,58205,11701],{"class":46},[36,58207,58208],{"class":53}," qs",[36,58210,14044],{"class":46},[36,58212,54873],{"class":42},[36,58214,54876],{"class":2443},[36,58216,345],{"class":42},[36,58218,58219],{"class":405},"'.qs'",[36,58221,63],{"class":42},[36,58223,58224],{"class":38,"line":10377},[36,58225,58226],{"class":69},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,58228,58229,58231,58233,58235,58237,58239,58241,58244],{"class":38,"line":10386},[36,58230,11701],{"class":46},[36,58232,4664],{"class":53},[36,58234,14044],{"class":46},[36,58236,54873],{"class":42},[36,58238,54876],{"class":2443},[36,58240,345],{"class":42},[36,58242,58243],{"class":405},"'.start'",[36,58245,63],{"class":42},[36,58247,58248],{"class":38,"line":10392},[36,58249,58250],{"class":69},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,58252,58253,58255,58258,58260],{"class":38,"line":10400},[36,58254,52696],{"class":46},[36,58256,58257],{"class":42}," timerId ",[36,58259,47],{"class":46},[36,58261,47810],{"class":53},[36,58263,58264],{"class":38,"line":10405},[36,58265,58266],{"class":69},"    \u002F\u002F 随机号要全局变量\n",[36,58268,58269,58271,58274,58276],{"class":38,"line":17084},[36,58270,52696],{"class":46},[36,58272,58273],{"class":42}," random ",[36,58275,47],{"class":46},[36,58277,47810],{"class":53},[36,58279,58280],{"class":38,"line":17090},[36,58281,58282],{"class":69},"    \u002F\u002F 1.1 添加点击事件\n",[36,58284,58285,58288,58291,58293,58296,58298,58300],{"class":38,"line":17113},[36,58286,58287],{"class":42},"    start.",[36,58289,58290],{"class":2443},"addEventListener",[36,58292,345],{"class":42},[36,58294,58295],{"class":405},"'click'",[36,58297,12915],{"class":42},[36,58299,54926],{"class":46},[36,58301,54929],{"class":42},[36,58303,58304,58307,58309,58311,58313,58315],{"class":38,"line":17119},[36,58305,58306],{"class":42},"      timerId ",[36,58308,47],{"class":46},[36,58310,54921],{"class":2443},[36,58312,345],{"class":42},[36,58314,54926],{"class":46},[36,58316,54929],{"class":42},[36,58318,58319],{"class":38,"line":17142},[36,58320,58321],{"class":69},"        \u002F\u002F 随机数\n",[36,58323,58324,58327,58329,58332,58335,58338,58340,58342,58344,58346],{"class":38,"line":17156},[36,58325,58326],{"class":42},"        random ",[36,58328,47],{"class":46},[36,58330,58331],{"class":2443}," parseInt",[36,58333,58334],{"class":42},"(Math.",[36,58336,58337],{"class":2443},"random",[36,58339,13530],{"class":42},[36,58341,1071],{"class":46},[36,58343,52442],{"class":42},[36,58345,52445],{"class":53},[36,58347,63],{"class":42},[36,58349,58350,58353,58355],{"class":38,"line":17176},[36,58351,58352],{"class":42},"        qs.innerHTML ",[36,58354,47],{"class":46},[36,58356,58357],{"class":42}," arr[random]\n",[36,58359,58360,58363,58365],{"class":38,"line":17182},[36,58361,58362],{"class":42},"      }, ",[36,58364,892],{"class":53},[36,58366,63],{"class":42},[36,58368,58369],{"class":38,"line":17193},[36,58370,58371],{"class":69},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,58373,58374,58376,58379,58381,58384,58386],{"class":38,"line":17216},[36,58375,54957],{"class":46},[36,58377,58378],{"class":42}," (arr.",[36,58380,52445],{"class":53},[36,58382,58383],{"class":46}," ===",[36,58385,25599],{"class":53},[36,58387,12922],{"class":42},[36,58389,58390],{"class":38,"line":17238},[36,58391,58392],{"class":69},"        \u002F\u002F start.disabled = true\n",[36,58394,58395],{"class":38,"line":17243},[36,58396,58397],{"class":69},"        \u002F\u002F end.disabled = true\n",[36,58399,58400],{"class":38,"line":17249},[36,58401,58402],{"class":69},"        \u002F\u002F 可以合起来写\n",[36,58404,58405,58408,58410,58413,58415],{"class":38,"line":17263},[36,58406,58407],{"class":42},"        start.disabled ",[36,58409,47],{"class":46},[36,58411,58412],{"class":42}," end.disabled ",[36,58414,47],{"class":46},[36,58416,58417],{"class":53}," true\n",[36,58419,58420],{"class":38,"line":17276},[36,58421,52875],{"class":42},[36,58423,58424],{"class":38,"line":17281},[36,58425,33938],{"class":42},[36,58427,58428],{"class":38,"line":17295},[36,58429,58430],{"class":69},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,58432,58433,58435,58437,58439,58441,58443,58445,58448],{"class":38,"line":17300},[36,58434,11701],{"class":46},[36,58436,4680],{"class":53},[36,58438,14044],{"class":46},[36,58440,54873],{"class":42},[36,58442,54876],{"class":2443},[36,58444,345],{"class":42},[36,58446,58447],{"class":405},"'.end'",[36,58449,63],{"class":42},[36,58451,58452,58455,58457,58459,58461,58463,58465],{"class":38,"line":17306},[36,58453,58454],{"class":42},"    end.",[36,58456,58290],{"class":2443},[36,58458,345],{"class":42},[36,58460,58295],{"class":405},[36,58462,12915],{"class":42},[36,58464,54926],{"class":46},[36,58466,54929],{"class":42},[36,58468,58469,58472],{"class":38,"line":17311},[36,58470,58471],{"class":2443},"      clearInterval",[36,58473,58474],{"class":42},"(timerId)\n",[36,58476,58477],{"class":38,"line":17325},[36,58478,58479],{"class":69},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,58481,58482,58485,58488,58491,58493],{"class":38,"line":17330},[36,58483,58484],{"class":42},"      arr.",[36,58486,58487],{"class":2443},"splice",[36,58489,58490],{"class":42},"(random, ",[36,58492,54],{"class":53},[36,58494,63],{"class":42},[36,58496,58497],{"class":38,"line":17335},[36,58498,33938],{"class":42},[36,58500,58501],{"class":38,"line":17349},[36,58502,2880],{"emptyLinePlaceholder":553},[36,58504,58505,58507,58509],{"class":38,"line":17361},[36,58506,52894],{"class":42},[36,58508,52290],{"class":51777},[36,58510,51784],{"class":42},[36,58512,58513,58515,58517],{"class":38,"line":17366},[36,58514,52262],{"class":42},[36,58516,52277],{"class":51777},[36,58518,51784],{"class":42},[36,58520,58521],{"class":38,"line":17379},[36,58522,2880],{"emptyLinePlaceholder":553},[36,58524,58525,58527,58529],{"class":38,"line":17384},[36,58526,52262],{"class":42},[36,58528,51112],{"class":51777},[36,58530,51784],{"class":42},[19,58532,58533],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[596,58535,58537],{"id":58536},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,58539,58541],{"className":51110,"code":58540,"language":51112,"meta":31,"style":31},"\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",[33,58542,58543,58553,58567,58571,58579,58593,58613,58625,58633,58637,58645,58657,58665,58684,58701,58717,58727,58731,58739,58747,58751],{"__ignoreMap":31},[36,58544,58545,58547,58549,58551],{"class":38,"line":39},[36,58546,51774],{"class":42},[36,58548,51778],{"class":51777},[36,58550,51781],{"class":2443},[36,58552,51784],{"class":42},[36,58554,58555,58557,58559,58561,58563,58565],{"class":38,"line":66},[36,58556,1523],{"class":42},[36,58558,51112],{"class":51777},[36,58560,51793],{"class":2443},[36,58562,47],{"class":42},[36,58564,51798],{"class":405},[36,58566,51784],{"class":42},[36,58568,58569],{"class":38,"line":73},[36,58570,2880],{"emptyLinePlaceholder":553},[36,58572,58573,58575,58577],{"class":38,"line":79},[36,58574,1523],{"class":42},[36,58576,51811],{"class":51777},[36,58578,51784],{"class":42},[36,58580,58581,58583,58585,58587,58589,58591],{"class":38,"line":85},[36,58582,52621],{"class":42},[36,58584,51821],{"class":51777},[36,58586,51824],{"class":2443},[36,58588,47],{"class":42},[36,58590,51829],{"class":405},[36,58592,51784],{"class":42},[36,58594,58595,58597,58599,58601,58603,58605,58607,58609,58611],{"class":38,"line":419},[36,58596,52621],{"class":42},[36,58598,51821],{"class":51777},[36,58600,15400],{"class":2443},[36,58602,47],{"class":42},[36,58604,51868],{"class":405},[36,58606,51848],{"class":2443},[36,58608,47],{"class":42},[36,58610,51875],{"class":405},[36,58612,51784],{"class":42},[36,58614,58615,58617,58619,58621,58623],{"class":38,"line":425},[36,58616,52621],{"class":42},[36,58618,51884],{"class":51777},[36,58620,51887],{"class":42},[36,58622,51884],{"class":51777},[36,58624,51784],{"class":42},[36,58626,58627,58629,58631],{"class":38,"line":431},[36,58628,52262],{"class":42},[36,58630,51811],{"class":51777},[36,58632,51784],{"class":42},[36,58634,58635],{"class":38,"line":437},[36,58636,2880],{"emptyLinePlaceholder":553},[36,58638,58639,58641,58643],{"class":38,"line":443},[36,58640,1523],{"class":42},[36,58642,52277],{"class":51777},[36,58644,51784],{"class":42},[36,58646,58647,58649,58651,58653,58655],{"class":38,"line":2092},[36,58648,52621],{"class":42},[36,58650,54364],{"class":51777},[36,58652,54370],{"class":42},[36,58654,54364],{"class":51777},[36,58656,51784],{"class":42},[36,58658,58659,58661,58663],{"class":38,"line":2097},[36,58660,52621],{"class":42},[36,58662,52290],{"class":51777},[36,58664,51784],{"class":42},[36,58666,58667,58669,58671,58673,58675,58677,58679,58682],{"class":38,"line":2103},[36,58668,11701],{"class":46},[36,58670,54868],{"class":53},[36,58672,14044],{"class":46},[36,58674,54873],{"class":42},[36,58676,54876],{"class":2443},[36,58678,345],{"class":42},[36,58680,58681],{"class":405},"'button'",[36,58683,63],{"class":42},[36,58685,58686,58689,58691,58693,58695,58697,58699],{"class":38,"line":2108},[36,58687,58688],{"class":42},"    btn.",[36,58690,58290],{"class":2443},[36,58692,345],{"class":42},[36,58694,58295],{"class":405},[36,58696,12915],{"class":42},[36,58698,54926],{"class":46},[36,58700,54929],{"class":42},[36,58702,58703,58706,58708,58710,58713,58715],{"class":38,"line":2122},[36,58704,58705],{"class":46},"      const",[36,58707,2720],{"class":53},[36,58709,14044],{"class":46},[36,58711,58712],{"class":42}," Math.",[36,58714,58337],{"class":2443},[36,58716,2456],{"class":42},[36,58718,58719,58722,58725],{"class":38,"line":2127},[36,58720,58721],{"class":42},"      console.",[36,58723,58724],{"class":2443},"log",[36,58726,640],{"class":42},[36,58728,58729],{"class":38,"line":2133},[36,58730,33938],{"class":42},[36,58732,58733,58735,58737],{"class":38,"line":2154},[36,58734,52894],{"class":42},[36,58736,52290],{"class":51777},[36,58738,51784],{"class":42},[36,58740,58741,58743,58745],{"class":38,"line":2159},[36,58742,52262],{"class":42},[36,58744,52277],{"class":51777},[36,58746,51784],{"class":42},[36,58748,58749],{"class":38,"line":2173},[36,58750,2880],{"emptyLinePlaceholder":553},[36,58752,58753,58755,58757],{"class":38,"line":2178},[36,58754,52262],{"class":42},[36,58756,51112],{"class":51777},[36,58758,51784],{"class":42},[19,58760,58761],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58763,58764],{},"常量不可以重新赋值",[19,58766,58767],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,58769,58771],{"className":51110,"code":58770,"language":51112,"meta":31,"style":31},"\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",[33,58772,58773,58783,58797,58801,58809,58823,58843,58855,58863,58867,58875,58887,58895,58906,58924,58940,58954,58962,58966,58974,58982,58986],{"__ignoreMap":31},[36,58774,58775,58777,58779,58781],{"class":38,"line":39},[36,58776,51774],{"class":42},[36,58778,51778],{"class":51777},[36,58780,51781],{"class":2443},[36,58782,51784],{"class":42},[36,58784,58785,58787,58789,58791,58793,58795],{"class":38,"line":66},[36,58786,1523],{"class":42},[36,58788,51112],{"class":51777},[36,58790,51793],{"class":2443},[36,58792,47],{"class":42},[36,58794,51798],{"class":405},[36,58796,51784],{"class":42},[36,58798,58799],{"class":38,"line":73},[36,58800,2880],{"emptyLinePlaceholder":553},[36,58802,58803,58805,58807],{"class":38,"line":79},[36,58804,1523],{"class":42},[36,58806,51811],{"class":51777},[36,58808,51784],{"class":42},[36,58810,58811,58813,58815,58817,58819,58821],{"class":38,"line":85},[36,58812,52621],{"class":42},[36,58814,51821],{"class":51777},[36,58816,51824],{"class":2443},[36,58818,47],{"class":42},[36,58820,51829],{"class":405},[36,58822,51784],{"class":42},[36,58824,58825,58827,58829,58831,58833,58835,58837,58839,58841],{"class":38,"line":419},[36,58826,52621],{"class":42},[36,58828,51821],{"class":51777},[36,58830,15400],{"class":2443},[36,58832,47],{"class":42},[36,58834,51868],{"class":405},[36,58836,51848],{"class":2443},[36,58838,47],{"class":42},[36,58840,51875],{"class":405},[36,58842,51784],{"class":42},[36,58844,58845,58847,58849,58851,58853],{"class":38,"line":425},[36,58846,52621],{"class":42},[36,58848,51884],{"class":51777},[36,58850,51887],{"class":42},[36,58852,51884],{"class":51777},[36,58854,51784],{"class":42},[36,58856,58857,58859,58861],{"class":38,"line":431},[36,58858,52262],{"class":42},[36,58860,51811],{"class":51777},[36,58862,51784],{"class":42},[36,58864,58865],{"class":38,"line":437},[36,58866,2880],{"emptyLinePlaceholder":553},[36,58868,58869,58871,58873],{"class":38,"line":443},[36,58870,1523],{"class":42},[36,58872,52277],{"class":51777},[36,58874,51784],{"class":42},[36,58876,58877,58879,58881,58883,58885],{"class":38,"line":2092},[36,58878,52621],{"class":42},[36,58880,54364],{"class":51777},[36,58882,54370],{"class":42},[36,58884,54364],{"class":51777},[36,58886,51784],{"class":42},[36,58888,58889,58891,58893],{"class":38,"line":2097},[36,58890,52621],{"class":42},[36,58892,52290],{"class":51777},[36,58894,51784],{"class":42},[36,58896,58897,58899,58901,58903],{"class":38,"line":2103},[36,58898,11701],{"class":46},[36,58900,2720],{"class":53},[36,58902,14044],{"class":46},[36,58904,58905],{"class":53}," 10\n",[36,58907,58908,58910,58912,58914,58916,58918,58920,58922],{"class":38,"line":2108},[36,58909,11701],{"class":46},[36,58911,54868],{"class":53},[36,58913,14044],{"class":46},[36,58915,54873],{"class":42},[36,58917,54876],{"class":2443},[36,58919,345],{"class":42},[36,58921,58681],{"class":405},[36,58923,63],{"class":42},[36,58925,58926,58928,58930,58932,58934,58936,58938],{"class":38,"line":2122},[36,58927,58688],{"class":42},[36,58929,58290],{"class":2443},[36,58931,345],{"class":42},[36,58933,58295],{"class":405},[36,58935,12915],{"class":42},[36,58937,54926],{"class":46},[36,58939,54929],{"class":42},[36,58941,58942,58944,58946,58948,58950,58952],{"class":38,"line":2127},[36,58943,58705],{"class":46},[36,58945,2720],{"class":53},[36,58947,14044],{"class":46},[36,58949,58712],{"class":42},[36,58951,58337],{"class":2443},[36,58953,2456],{"class":42},[36,58955,58956,58958,58960],{"class":38,"line":2133},[36,58957,58721],{"class":42},[36,58959,58724],{"class":2443},[36,58961,640],{"class":42},[36,58963,58964],{"class":38,"line":2154},[36,58965,33938],{"class":42},[36,58967,58968,58970,58972],{"class":38,"line":2159},[36,58969,52894],{"class":42},[36,58971,52290],{"class":51777},[36,58973,51784],{"class":42},[36,58975,58976,58978,58980],{"class":38,"line":2173},[36,58977,52262],{"class":42},[36,58979,52277],{"class":51777},[36,58981,51784],{"class":42},[36,58983,58984],{"class":38,"line":2178},[36,58985,2880],{"emptyLinePlaceholder":553},[36,58987,58988,58990,58992],{"class":38,"line":2207},[36,58989,52262],{"class":42},[36,58991,51112],{"class":51777},[36,58993,51784],{"class":42},[19,58995,58996],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,58998,59000],{"className":51110,"code":58999,"language":51112,"meta":31,"style":31},"\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",[33,59001,59002,59012,59026,59030,59038,59052,59072,59084,59092,59096,59104,59116,59124,59134,59152,59168,59181,59189,59193,59201,59209,59213],{"__ignoreMap":31},[36,59003,59004,59006,59008,59010],{"class":38,"line":39},[36,59005,51774],{"class":42},[36,59007,51778],{"class":51777},[36,59009,51781],{"class":2443},[36,59011,51784],{"class":42},[36,59013,59014,59016,59018,59020,59022,59024],{"class":38,"line":66},[36,59015,1523],{"class":42},[36,59017,51112],{"class":51777},[36,59019,51793],{"class":2443},[36,59021,47],{"class":42},[36,59023,51798],{"class":405},[36,59025,51784],{"class":42},[36,59027,59028],{"class":38,"line":73},[36,59029,2880],{"emptyLinePlaceholder":553},[36,59031,59032,59034,59036],{"class":38,"line":79},[36,59033,1523],{"class":42},[36,59035,51811],{"class":51777},[36,59037,51784],{"class":42},[36,59039,59040,59042,59044,59046,59048,59050],{"class":38,"line":85},[36,59041,52621],{"class":42},[36,59043,51821],{"class":51777},[36,59045,51824],{"class":2443},[36,59047,47],{"class":42},[36,59049,51829],{"class":405},[36,59051,51784],{"class":42},[36,59053,59054,59056,59058,59060,59062,59064,59066,59068,59070],{"class":38,"line":419},[36,59055,52621],{"class":42},[36,59057,51821],{"class":51777},[36,59059,15400],{"class":2443},[36,59061,47],{"class":42},[36,59063,51868],{"class":405},[36,59065,51848],{"class":2443},[36,59067,47],{"class":42},[36,59069,51875],{"class":405},[36,59071,51784],{"class":42},[36,59073,59074,59076,59078,59080,59082],{"class":38,"line":425},[36,59075,52621],{"class":42},[36,59077,51884],{"class":51777},[36,59079,51887],{"class":42},[36,59081,51884],{"class":51777},[36,59083,51784],{"class":42},[36,59085,59086,59088,59090],{"class":38,"line":431},[36,59087,52262],{"class":42},[36,59089,51811],{"class":51777},[36,59091,51784],{"class":42},[36,59093,59094],{"class":38,"line":437},[36,59095,2880],{"emptyLinePlaceholder":553},[36,59097,59098,59100,59102],{"class":38,"line":443},[36,59099,1523],{"class":42},[36,59101,52277],{"class":51777},[36,59103,51784],{"class":42},[36,59105,59106,59108,59110,59112,59114],{"class":38,"line":2092},[36,59107,52621],{"class":42},[36,59109,54364],{"class":51777},[36,59111,54370],{"class":42},[36,59113,54364],{"class":51777},[36,59115,51784],{"class":42},[36,59117,59118,59120,59122],{"class":38,"line":2097},[36,59119,52621],{"class":42},[36,59121,52290],{"class":51777},[36,59123,51784],{"class":42},[36,59125,59126,59128,59130,59132],{"class":38,"line":2103},[36,59127,11701],{"class":46},[36,59129,2720],{"class":53},[36,59131,14044],{"class":46},[36,59133,58905],{"class":53},[36,59135,59136,59138,59140,59142,59144,59146,59148,59150],{"class":38,"line":2108},[36,59137,11701],{"class":46},[36,59139,54868],{"class":53},[36,59141,14044],{"class":46},[36,59143,54873],{"class":42},[36,59145,54876],{"class":2443},[36,59147,345],{"class":42},[36,59149,58681],{"class":405},[36,59151,63],{"class":42},[36,59153,59154,59156,59158,59160,59162,59164,59166],{"class":38,"line":2122},[36,59155,58688],{"class":42},[36,59157,58290],{"class":2443},[36,59159,345],{"class":42},[36,59161,58295],{"class":405},[36,59163,12915],{"class":42},[36,59165,54926],{"class":46},[36,59167,54929],{"class":42},[36,59169,59170,59173,59175,59177,59179],{"class":38,"line":2127},[36,59171,59172],{"class":42},"      num ",[36,59174,47],{"class":46},[36,59176,58712],{"class":42},[36,59178,58337],{"class":2443},[36,59180,2456],{"class":42},[36,59182,59183,59185,59187],{"class":38,"line":2133},[36,59184,58721],{"class":42},[36,59186,58724],{"class":2443},[36,59188,640],{"class":42},[36,59190,59191],{"class":38,"line":2154},[36,59192,33938],{"class":42},[36,59194,59195,59197,59199],{"class":38,"line":2159},[36,59196,52894],{"class":42},[36,59198,52290],{"class":51777},[36,59200,51784],{"class":42},[36,59202,59203,59205,59207],{"class":38,"line":2173},[36,59204,52262],{"class":42},[36,59206,52277],{"class":51777},[36,59208,51784],{"class":42},[36,59210,59211],{"class":38,"line":2178},[36,59212,2880],{"emptyLinePlaceholder":553},[36,59214,59215,59217,59219],{"class":38,"line":2207},[36,59216,52262],{"class":42},[36,59218,51112],{"class":51777},[36,59220,51784],{"class":42},[19,59222,59223],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[596,59225,59227],{"id":59226},"_324-事件监听版本","3.2.4 事件监听版本",[19,59229,59230],{},[519,59231],{"alt":31,"src":59232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59234,59235],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59237,59238],{},"这种方式会覆盖前边的事件监听:",[26,59240,59242],{"className":51110,"code":59241,"language":51112,"meta":31,"style":31},"\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",[33,59243,59244,59254,59268,59272,59280,59294,59314,59326,59334,59338,59346,59358,59366,59384,59398,59409,59413,59425,59435,59439,59447,59455,59459],{"__ignoreMap":31},[36,59245,59246,59248,59250,59252],{"class":38,"line":39},[36,59247,51774],{"class":42},[36,59249,51778],{"class":51777},[36,59251,51781],{"class":2443},[36,59253,51784],{"class":42},[36,59255,59256,59258,59260,59262,59264,59266],{"class":38,"line":66},[36,59257,1523],{"class":42},[36,59259,51112],{"class":51777},[36,59261,51793],{"class":2443},[36,59263,47],{"class":42},[36,59265,51798],{"class":405},[36,59267,51784],{"class":42},[36,59269,59270],{"class":38,"line":73},[36,59271,2880],{"emptyLinePlaceholder":553},[36,59273,59274,59276,59278],{"class":38,"line":79},[36,59275,1523],{"class":42},[36,59277,51811],{"class":51777},[36,59279,51784],{"class":42},[36,59281,59282,59284,59286,59288,59290,59292],{"class":38,"line":85},[36,59283,52621],{"class":42},[36,59285,51821],{"class":51777},[36,59287,51824],{"class":2443},[36,59289,47],{"class":42},[36,59291,51829],{"class":405},[36,59293,51784],{"class":42},[36,59295,59296,59298,59300,59302,59304,59306,59308,59310,59312],{"class":38,"line":419},[36,59297,52621],{"class":42},[36,59299,51821],{"class":51777},[36,59301,15400],{"class":2443},[36,59303,47],{"class":42},[36,59305,51868],{"class":405},[36,59307,51848],{"class":2443},[36,59309,47],{"class":42},[36,59311,51875],{"class":405},[36,59313,51784],{"class":42},[36,59315,59316,59318,59320,59322,59324],{"class":38,"line":425},[36,59317,52621],{"class":42},[36,59319,51884],{"class":51777},[36,59321,51887],{"class":42},[36,59323,51884],{"class":51777},[36,59325,51784],{"class":42},[36,59327,59328,59330,59332],{"class":38,"line":431},[36,59329,52262],{"class":42},[36,59331,51811],{"class":51777},[36,59333,51784],{"class":42},[36,59335,59336],{"class":38,"line":437},[36,59337,2880],{"emptyLinePlaceholder":553},[36,59339,59340,59342,59344],{"class":38,"line":443},[36,59341,1523],{"class":42},[36,59343,52277],{"class":51777},[36,59345,51784],{"class":42},[36,59347,59348,59350,59352,59354,59356],{"class":38,"line":2092},[36,59349,52621],{"class":42},[36,59351,54364],{"class":51777},[36,59353,54370],{"class":42},[36,59355,54364],{"class":51777},[36,59357,51784],{"class":42},[36,59359,59360,59362,59364],{"class":38,"line":2097},[36,59361,52621],{"class":42},[36,59363,52290],{"class":51777},[36,59365,51784],{"class":42},[36,59367,59368,59370,59372,59374,59376,59378,59380,59382],{"class":38,"line":2103},[36,59369,11701],{"class":46},[36,59371,54868],{"class":53},[36,59373,14044],{"class":46},[36,59375,54873],{"class":42},[36,59377,54876],{"class":2443},[36,59379,345],{"class":42},[36,59381,58681],{"class":405},[36,59383,63],{"class":42},[36,59385,59386,59388,59391,59393,59396],{"class":38,"line":2108},[36,59387,58688],{"class":42},[36,59389,59390],{"class":2443},"onclick",[36,59392,14044],{"class":46},[36,59394,59395],{"class":46}," function",[36,59397,54929],{"class":42},[36,59399,59400,59403,59405,59407],{"class":38,"line":2122},[36,59401,59402],{"class":2443},"      alert",[36,59404,345],{"class":42},[36,59406,1088],{"class":53},[36,59408,63],{"class":42},[36,59410,59411],{"class":38,"line":2127},[36,59412,2667],{"class":42},[36,59414,59415,59417,59419,59421,59423],{"class":38,"line":2133},[36,59416,58688],{"class":42},[36,59418,59390],{"class":2443},[36,59420,14044],{"class":46},[36,59422,59395],{"class":46},[36,59424,54929],{"class":42},[36,59426,59427,59429,59431,59433],{"class":38,"line":2154},[36,59428,59402],{"class":2443},[36,59430,345],{"class":42},[36,59432,1363],{"class":53},[36,59434,63],{"class":42},[36,59436,59437],{"class":38,"line":2159},[36,59438,2667],{"class":42},[36,59440,59441,59443,59445],{"class":38,"line":2173},[36,59442,52894],{"class":42},[36,59444,52290],{"class":51777},[36,59446,51784],{"class":42},[36,59448,59449,59451,59453],{"class":38,"line":2178},[36,59450,52262],{"class":42},[36,59452,52277],{"class":51777},[36,59454,51784],{"class":42},[36,59456,59457],{"class":38,"line":2207},[36,59458,2880],{"emptyLinePlaceholder":553},[36,59460,59461,59463,59465],{"class":38,"line":2212},[36,59462,52262],{"class":42},[36,59464,51112],{"class":51777},[36,59466,51784],{"class":42},[19,59468,59469],{},"只要点击就输出结果为22,前边11被覆盖了",[26,59471,59473],{"className":51110,"code":59472,"language":51112,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,59474,59475,59480,59485,59489,59494,59499],{"__ignoreMap":31},[36,59476,59477],{"class":38,"line":39},[36,59478,59479],{"class":42},"  btn.addEventListener('click', function () {\n",[36,59481,59482],{"class":38,"line":66},[36,59483,59484],{"class":42},"      alert(11)\n",[36,59486,59487],{"class":38,"line":73},[36,59488,33938],{"class":42},[36,59490,59491],{"class":38,"line":79},[36,59492,59493],{"class":42},"    btn.addEventListener('click', function () {\n",[36,59495,59496],{"class":38,"line":85},[36,59497,59498],{"class":42},"      alert(22)\n",[36,59500,59501],{"class":38,"line":419},[36,59502,33938],{"class":42},[19,59504,59505],{},"点击第一次输出11,第二次点击为22",[596,59507,59509],{"id":59508},"_325-事件类型","3.2.5 事件类型",[19,59511,59512],{},[519,59513],{"alt":31,"src":59514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22478,59516,59518],{"id":59517},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59520,59521],{},"补充知识:",[19,59523,59524],{},"轮播图自动播放模块,可以使用",[19,59526,59527],{},"let timerId = setInterval(function () {",[19,59529,59530],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59532,59533],{},"用js方法模拟进行点击事件,click必须加()",[19,59535,59536],{},"next.click()",[19,59538,59539],{},"}, 1000)",[19,59541,59542],{},[519,59543],{"alt":31,"src":59544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,59546,59548],{"className":53544,"code":59547,"language":53546,"meta":31,"style":31},"\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",[33,59549,59550,59554,59564,59578,59582,59590,59605,59625,59645,59658,59666,59671,59676,59680,59684,59689,59694,59699,59704,59708,59712,59717,59722,59727,59731,59735,59740,59744,59749,59754,59758,59762,59767,59772,59777,59782,59787,59791,59795,59800,59805,59810,59815,59820,59824,59828,59833,59838,59843,59848,59853,59858,59863,59868,59873,59878,59882,59886,59891,59896,59900,59904,59909,59914,59918,59923,59928,59932,59936,59941,59945,59950,59955,59959,59964,59968,59972,59977,59982,59987,59992,59997,60002,60007,60011,60015,60019,60024,60029,60034,60039,60043,60051,60059,60063,60071,60086,60100,60121,60129,60143,60156,60171,60190,60202,60214,60226,60238,60250,60262,60274,60282,60297,60321,60345,60353,60361,60369,60377,60382,60387,60392,60397,60402,60407,60412,60417,60422,60427,60431,60436,60441,60446,60451,60456,60461,60466,60471,60476,60480,60485,60490,60495,60500,60505,60510,60515,60520,60525,60530,60535,60540,60544,60548,60553,60558,60563,60567,60572,60577,60582,60587,60592,60596,60601,60605,60609,60613,60617,60621,60625,60630,60635,60640,60645,60650,60655,60660,60665,60670,60674,60678,60683,60688,60693,60698,60703,60707,60712,60717,60722,60727,60732,60737,60741,60745,60750,60754,60759,60763,60768,60773,60778,60783,60788,60793,60797,60805,60813,60817],{"__ignoreMap":31},[36,59551,59552],{"class":38,"line":39},[36,59553,2880],{"emptyLinePlaceholder":553},[36,59555,59556,59558,59560,59562],{"class":38,"line":66},[36,59557,51774],{"class":42},[36,59559,51778],{"class":46},[36,59561,51781],{"class":53},[36,59563,51784],{"class":42},[36,59565,59566,59568,59570,59572,59574,59576],{"class":38,"line":73},[36,59567,1523],{"class":42},[36,59569,51112],{"class":51777},[36,59571,51793],{"class":2443},[36,59573,47],{"class":42},[36,59575,51798],{"class":405},[36,59577,51784],{"class":42},[36,59579,59580],{"class":38,"line":79},[36,59581,2880],{"emptyLinePlaceholder":553},[36,59583,59584,59586,59588],{"class":38,"line":85},[36,59585,1523],{"class":42},[36,59587,51811],{"class":51777},[36,59589,51784],{"class":42},[36,59591,59592,59594,59596,59598,59600,59602],{"class":38,"line":419},[36,59593,52621],{"class":42},[36,59595,51821],{"class":51777},[36,59597,51824],{"class":2443},[36,59599,47],{"class":42},[36,59601,51829],{"class":405},[36,59603,59604],{"class":42}," \u002F>\n",[36,59606,59607,59609,59611,59613,59615,59617,59619,59621,59623],{"class":38,"line":425},[36,59608,52621],{"class":42},[36,59610,51821],{"class":51777},[36,59612,51840],{"class":2443},[36,59614,47],{"class":42},[36,59616,51845],{"class":405},[36,59618,51848],{"class":2443},[36,59620,47],{"class":42},[36,59622,51853],{"class":405},[36,59624,59604],{"class":42},[36,59626,59627,59629,59631,59633,59635,59637,59639,59641,59643],{"class":38,"line":431},[36,59628,52621],{"class":42},[36,59630,51821],{"class":51777},[36,59632,15400],{"class":2443},[36,59634,47],{"class":42},[36,59636,51868],{"class":405},[36,59638,51848],{"class":2443},[36,59640,47],{"class":42},[36,59642,51875],{"class":405},[36,59644,59604],{"class":42},[36,59646,59647,59649,59651,59654,59656],{"class":38,"line":437},[36,59648,52621],{"class":42},[36,59650,51884],{"class":51777},[36,59652,59653],{"class":42},">轮播图点击切换\u003C\u002F",[36,59655,51884],{"class":51777},[36,59657,51784],{"class":42},[36,59659,59660,59662,59664],{"class":38,"line":443},[36,59661,52621],{"class":42},[36,59663,539],{"class":51777},[36,59665,51784],{"class":42},[36,59667,59668],{"class":38,"line":2092},[36,59669,59670],{"class":42},"    * {\n",[36,59672,59673],{"class":38,"line":2097},[36,59674,59675],{"class":42},"      box-sizing: border-box;\n",[36,59677,59678],{"class":38,"line":2103},[36,59679,2667],{"class":42},[36,59681,59682],{"class":38,"line":2108},[36,59683,2880],{"emptyLinePlaceholder":553},[36,59685,59686],{"class":38,"line":2122},[36,59687,59688],{"class":42},"    .slider {\n",[36,59690,59691],{"class":38,"line":2127},[36,59692,59693],{"class":42},"      width: 560px;\n",[36,59695,59696],{"class":38,"line":2133},[36,59697,59698],{"class":42},"      height: 400px;\n",[36,59700,59701],{"class":38,"line":2154},[36,59702,59703],{"class":42},"      overflow: hidden;\n",[36,59705,59706],{"class":38,"line":2159},[36,59707,2667],{"class":42},[36,59709,59710],{"class":38,"line":2173},[36,59711,2880],{"emptyLinePlaceholder":553},[36,59713,59714],{"class":38,"line":2178},[36,59715,59716],{"class":42},"    .slider-wrapper {\n",[36,59718,59719],{"class":38,"line":2207},[36,59720,59721],{"class":42},"      width: 100%;\n",[36,59723,59724],{"class":38,"line":2212},[36,59725,59726],{"class":42},"      height: 320px;\n",[36,59728,59729],{"class":38,"line":2229},[36,59730,2667],{"class":42},[36,59732,59733],{"class":38,"line":2234},[36,59734,2880],{"emptyLinePlaceholder":553},[36,59736,59737],{"class":38,"line":2239},[36,59738,59739],{"class":42},"    .slider-wrapper img {\n",[36,59741,59742],{"class":38,"line":2244},[36,59743,59721],{"class":42},[36,59745,59746],{"class":38,"line":2258},[36,59747,59748],{"class":42},"      height: 100%;\n",[36,59750,59751],{"class":38,"line":2263},[36,59752,59753],{"class":42},"      display: block;\n",[36,59755,59756],{"class":38,"line":3057},[36,59757,2667],{"class":42},[36,59759,59760],{"class":38,"line":3071},[36,59761,2880],{"emptyLinePlaceholder":553},[36,59763,59764],{"class":38,"line":3079},[36,59765,59766],{"class":42},"    .slider-footer {\n",[36,59768,59769],{"class":38,"line":3084},[36,59770,59771],{"class":42},"      height: 80px;\n",[36,59773,59774],{"class":38,"line":3090},[36,59775,59776],{"class":42},"      background-color: rgb(100, 67, 68);\n",[36,59778,59779],{"class":38,"line":3096},[36,59780,59781],{"class":42},"      padding: 12px 12px 0 12px;\n",[36,59783,59784],{"class":38,"line":3101},[36,59785,59786],{"class":42},"      position: relative;\n",[36,59788,59789],{"class":38,"line":8428},[36,59790,2667],{"class":42},[36,59792,59793],{"class":38,"line":8452},[36,59794,2880],{"emptyLinePlaceholder":553},[36,59796,59797],{"class":38,"line":8457},[36,59798,59799],{"class":42},"    .slider-footer .toggle {\n",[36,59801,59802],{"class":38,"line":8463},[36,59803,59804],{"class":42},"      position: absolute;\n",[36,59806,59807],{"class":38,"line":8490},[36,59808,59809],{"class":42},"      right: 0;\n",[36,59811,59812],{"class":38,"line":8495},[36,59813,59814],{"class":42},"      top: 12px;\n",[36,59816,59817],{"class":38,"line":8501},[36,59818,59819],{"class":42},"      display: flex;\n",[36,59821,59822],{"class":38,"line":8513},[36,59823,2667],{"class":42},[36,59825,59826],{"class":38,"line":8525},[36,59827,2880],{"emptyLinePlaceholder":553},[36,59829,59830],{"class":38,"line":8537},[36,59831,59832],{"class":42},"    .slider-footer .toggle button {\n",[36,59834,59835],{"class":38,"line":10196},[36,59836,59837],{"class":42},"      margin-right: 12px;\n",[36,59839,59840],{"class":38,"line":10221},[36,59841,59842],{"class":42},"      width: 28px;\n",[36,59844,59845],{"class":38,"line":10244},[36,59846,59847],{"class":42},"      height: 28px;\n",[36,59849,59850],{"class":38,"line":10268},[36,59851,59852],{"class":42},"      appearance: none;\n",[36,59854,59855],{"class":38,"line":10273},[36,59856,59857],{"class":42},"      border: none;\n",[36,59859,59860],{"class":38,"line":10278},[36,59861,59862],{"class":42},"      background: rgba(255, 255, 255, 0.1);\n",[36,59864,59865],{"class":38,"line":10283},[36,59866,59867],{"class":42},"      color: #fff;\n",[36,59869,59870],{"class":38,"line":10292},[36,59871,59872],{"class":42},"      border-radius: 4px;\n",[36,59874,59875],{"class":38,"line":10297},[36,59876,59877],{"class":42},"      cursor: pointer;\n",[36,59879,59880],{"class":38,"line":10303},[36,59881,2667],{"class":42},[36,59883,59884],{"class":38,"line":10324},[36,59885,2880],{"emptyLinePlaceholder":553},[36,59887,59888],{"class":38,"line":10330},[36,59889,59890],{"class":42},"    .slider-footer .toggle button:hover {\n",[36,59892,59893],{"class":38,"line":10344},[36,59894,59895],{"class":42},"      background: rgba(255, 255, 255, 0.2);\n",[36,59897,59898],{"class":38,"line":10350},[36,59899,2667],{"class":42},[36,59901,59902],{"class":38,"line":10377},[36,59903,2880],{"emptyLinePlaceholder":553},[36,59905,59906],{"class":38,"line":10386},[36,59907,59908],{"class":42},"    .slider-footer p {\n",[36,59910,59911],{"class":38,"line":10392},[36,59912,59913],{"class":42},"      margin: 0;\n",[36,59915,59916],{"class":38,"line":10400},[36,59917,59867],{"class":42},[36,59919,59920],{"class":38,"line":10405},[36,59921,59922],{"class":42},"      font-size: 18px;\n",[36,59924,59925],{"class":38,"line":17084},[36,59926,59927],{"class":42},"      margin-bottom: 10px;\n",[36,59929,59930],{"class":38,"line":17090},[36,59931,2667],{"class":42},[36,59933,59934],{"class":38,"line":17113},[36,59935,2880],{"emptyLinePlaceholder":553},[36,59937,59938],{"class":38,"line":17119},[36,59939,59940],{"class":42},"    .slider-indicator {\n",[36,59942,59943],{"class":38,"line":17142},[36,59944,59913],{"class":42},[36,59946,59947],{"class":38,"line":17156},[36,59948,59949],{"class":42},"      padding: 0;\n",[36,59951,59952],{"class":38,"line":17176},[36,59953,59954],{"class":42},"      list-style: none;\n",[36,59956,59957],{"class":38,"line":17182},[36,59958,59819],{"class":42},[36,59960,59961],{"class":38,"line":17193},[36,59962,59963],{"class":42},"      align-items: center;\n",[36,59965,59966],{"class":38,"line":17216},[36,59967,2667],{"class":42},[36,59969,59970],{"class":38,"line":17238},[36,59971,2880],{"emptyLinePlaceholder":553},[36,59973,59974],{"class":38,"line":17243},[36,59975,59976],{"class":42},"    .slider-indicator li {\n",[36,59978,59979],{"class":38,"line":17249},[36,59980,59981],{"class":42},"      width: 8px;\n",[36,59983,59984],{"class":38,"line":17263},[36,59985,59986],{"class":42},"      height: 8px;\n",[36,59988,59989],{"class":38,"line":17276},[36,59990,59991],{"class":42},"      margin: 4px;\n",[36,59993,59994],{"class":38,"line":17281},[36,59995,59996],{"class":42},"      border-radius: 50%;\n",[36,59998,59999],{"class":38,"line":17295},[36,60000,60001],{"class":42},"      background: #fff;\n",[36,60003,60004],{"class":38,"line":17300},[36,60005,60006],{"class":42},"      opacity: 0.4;\n",[36,60008,60009],{"class":38,"line":17306},[36,60010,59877],{"class":42},[36,60012,60013],{"class":38,"line":17311},[36,60014,2667],{"class":42},[36,60016,60017],{"class":38,"line":17325},[36,60018,2880],{"emptyLinePlaceholder":553},[36,60020,60021],{"class":38,"line":17330},[36,60022,60023],{"class":42},"    .slider-indicator li.active {\n",[36,60025,60026],{"class":38,"line":17335},[36,60027,60028],{"class":42},"      width: 12px;\n",[36,60030,60031],{"class":38,"line":17349},[36,60032,60033],{"class":42},"      height: 12px;\n",[36,60035,60036],{"class":38,"line":17361},[36,60037,60038],{"class":42},"      opacity: 1;\n",[36,60040,60041],{"class":38,"line":17366},[36,60042,2667],{"class":42},[36,60044,60045,60047,60049],{"class":38,"line":17379},[36,60046,52894],{"class":42},[36,60048,539],{"class":51777},[36,60050,51784],{"class":42},[36,60052,60053,60055,60057],{"class":38,"line":17384},[36,60054,52262],{"class":42},[36,60056,51811],{"class":51777},[36,60058,51784],{"class":42},[36,60060,60061],{"class":38,"line":17389},[36,60062,2880],{"emptyLinePlaceholder":553},[36,60064,60065,60067,60069],{"class":38,"line":17394},[36,60066,1523],{"class":42},[36,60068,52277],{"class":51777},[36,60070,51784],{"class":42},[36,60072,60073,60075,60077,60079,60081,60084],{"class":38,"line":17407},[36,60074,52621],{"class":42},[36,60076,52088],{"class":51777},[36,60078,53963],{"class":2443},[36,60080,47],{"class":42},[36,60082,60083],{"class":405},"\"slider\"",[36,60085,51784],{"class":42},[36,60087,60088,60090,60092,60094,60096,60098],{"class":38,"line":17412},[36,60089,51818],{"class":42},[36,60091,52088],{"class":51777},[36,60093,53963],{"class":2443},[36,60095,47],{"class":42},[36,60097,55704],{"class":405},[36,60099,51784],{"class":42},[36,60101,60102,60104,60106,60108,60110,60113,60115,60117,60119],{"class":38,"line":33110},[36,60103,55711],{"class":42},[36,60105,519],{"class":51777},[36,60107,55716],{"class":2443},[36,60109,47],{"class":42},[36,60111,60112],{"class":405},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,60114,55724],{"class":2443},[36,60116,47],{"class":42},[36,60118,8132],{"class":405},[36,60120,59604],{"class":42},[36,60122,60123,60125,60127],{"class":38,"line":33116},[36,60124,52253],{"class":42},[36,60126,52088],{"class":51777},[36,60128,51784],{"class":42},[36,60130,60131,60133,60135,60137,60139,60141],{"class":38,"line":33122},[36,60132,51818],{"class":42},[36,60134,52088],{"class":51777},[36,60136,53963],{"class":2443},[36,60138,47],{"class":42},[36,60140,55751],{"class":405},[36,60142,51784],{"class":42},[36,60144,60145,60147,60149,60152,60154],{"class":38,"line":33128},[36,60146,55711],{"class":42},[36,60148,19],{"class":51777},[36,60150,60151],{"class":42},">对人类来说会不会太超前了？\u003C\u002F",[36,60153,19],{"class":51777},[36,60155,51784],{"class":42},[36,60157,60158,60160,60162,60164,60166,60169],{"class":38,"line":33134},[36,60159,55711],{"class":42},[36,60161,1620],{"class":51777},[36,60163,53963],{"class":2443},[36,60165,47],{"class":42},[36,60167,60168],{"class":405},"\"slider-indicator\"",[36,60170,51784],{"class":42},[36,60172,60173,60175,60177,60179,60181,60184,60186,60188],{"class":38,"line":33145},[36,60174,55779],{"class":42},[36,60176,582],{"class":51777},[36,60178,53963],{"class":2443},[36,60180,47],{"class":42},[36,60182,60183],{"class":405},"\"active\"",[36,60185,55791],{"class":42},[36,60187,582],{"class":51777},[36,60189,51784],{"class":42},[36,60191,60192,60194,60196,60198,60200],{"class":38,"line":33151},[36,60193,55779],{"class":42},[36,60195,582],{"class":51777},[36,60197,55791],{"class":42},[36,60199,582],{"class":51777},[36,60201,51784],{"class":42},[36,60203,60204,60206,60208,60210,60212],{"class":38,"line":33171},[36,60205,55779],{"class":42},[36,60207,582],{"class":51777},[36,60209,55791],{"class":42},[36,60211,582],{"class":51777},[36,60213,51784],{"class":42},[36,60215,60216,60218,60220,60222,60224],{"class":38,"line":33177},[36,60217,55779],{"class":42},[36,60219,582],{"class":51777},[36,60221,55791],{"class":42},[36,60223,582],{"class":51777},[36,60225,51784],{"class":42},[36,60227,60228,60230,60232,60234,60236],{"class":38,"line":33188},[36,60229,55779],{"class":42},[36,60231,582],{"class":51777},[36,60233,55791],{"class":42},[36,60235,582],{"class":51777},[36,60237,51784],{"class":42},[36,60239,60240,60242,60244,60246,60248],{"class":38,"line":33194},[36,60241,55779],{"class":42},[36,60243,582],{"class":51777},[36,60245,55791],{"class":42},[36,60247,582],{"class":51777},[36,60249,51784],{"class":42},[36,60251,60252,60254,60256,60258,60260],{"class":38,"line":33200},[36,60253,55779],{"class":42},[36,60255,582],{"class":51777},[36,60257,55791],{"class":42},[36,60259,582],{"class":51777},[36,60261,51784],{"class":42},[36,60263,60264,60266,60268,60270,60272],{"class":38,"line":33206},[36,60265,55779],{"class":42},[36,60267,582],{"class":51777},[36,60269,55791],{"class":42},[36,60271,582],{"class":51777},[36,60273,51784],{"class":42},[36,60275,60276,60278,60280],{"class":38,"line":33212},[36,60277,55884],{"class":42},[36,60279,1620],{"class":51777},[36,60281,51784],{"class":42},[36,60283,60284,60286,60288,60290,60292,60295],{"class":38,"line":33218},[36,60285,55711],{"class":42},[36,60287,52088],{"class":51777},[36,60289,53963],{"class":2443},[36,60291,47],{"class":42},[36,60293,60294],{"class":405},"\"toggle\"",[36,60296,51784],{"class":42},[36,60298,60299,60301,60303,60305,60307,60310,60312,60315,60317,60319],{"class":38,"line":33224},[36,60300,55779],{"class":42},[36,60302,54364],{"class":51777},[36,60304,53963],{"class":2443},[36,60306,47],{"class":42},[36,60308,60309],{"class":405},"\"prev\"",[36,60311,1573],{"class":42},[36,60313,60314],{"class":53},"&lt;",[36,60316,52262],{"class":42},[36,60318,54364],{"class":51777},[36,60320,51784],{"class":42},[36,60322,60323,60325,60327,60329,60331,60334,60336,60339,60341,60343],{"class":38,"line":33230},[36,60324,55779],{"class":42},[36,60326,54364],{"class":51777},[36,60328,53963],{"class":2443},[36,60330,47],{"class":42},[36,60332,60333],{"class":405},"\"next\"",[36,60335,1573],{"class":42},[36,60337,60338],{"class":53},"&gt;",[36,60340,52262],{"class":42},[36,60342,54364],{"class":51777},[36,60344,51784],{"class":42},[36,60346,60347,60349,60351],{"class":38,"line":33250},[36,60348,55884],{"class":42},[36,60350,52088],{"class":51777},[36,60352,51784],{"class":42},[36,60354,60355,60357,60359],{"class":38,"line":33256},[36,60356,52253],{"class":42},[36,60358,52088],{"class":51777},[36,60360,51784],{"class":42},[36,60362,60363,60365,60367],{"class":38,"line":33272},[36,60364,52894],{"class":42},[36,60366,52088],{"class":51777},[36,60368,51784],{"class":42},[36,60370,60371,60373,60375],{"class":38,"line":33278},[36,60372,52621],{"class":42},[36,60374,52290],{"class":51777},[36,60376,51784],{"class":42},[36,60378,60379],{"class":38,"line":33292},[36,60380,60381],{"class":42},"    \u002F\u002F 1. 初始数据\n",[36,60383,60384],{"class":38,"line":33298},[36,60385,60386],{"class":42},"    const data = [\n",[36,60388,60389],{"class":38,"line":33313},[36,60390,60391],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,60393,60394],{"class":38,"line":33319},[36,60395,60396],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,60398,60399],{"class":38,"line":33328},[36,60400,60401],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,60403,60404],{"class":38,"line":33334},[36,60405,60406],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,60408,60409],{"class":38,"line":33343},[36,60410,60411],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,60413,60414],{"class":38,"line":33349},[36,60415,60416],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,60418,60419],{"class":38,"line":33355},[36,60420,60421],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,60423,60424],{"class":38,"line":33364},[36,60425,60426],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,60428,60429],{"class":38,"line":33370},[36,60430,53586],{"class":42},[36,60432,60433],{"class":38,"line":33381},[36,60434,60435],{"class":42},"    \u002F\u002F 获取元素\n",[36,60437,60438],{"class":38,"line":33387},[36,60439,60440],{"class":42},"    const img = document.querySelector('.slider-wrapper img')\n",[36,60442,60443],{"class":38,"line":33406},[36,60444,60445],{"class":42},"    const p = document.querySelector('.slider-footer p')\n",[36,60447,60448],{"class":38,"line":33412},[36,60449,60450],{"class":42},"    const footer = document.querySelector('.slider-footer')\n",[36,60452,60453],{"class":38,"line":33423},[36,60454,60455],{"class":42},"    \u002F\u002F 1. 右按钮业务\n",[36,60457,60458],{"class":38,"line":33429},[36,60459,60460],{"class":42},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,60462,60463],{"class":38,"line":33449},[36,60464,60465],{"class":42},"    const next = document.querySelector('.next')\n",[36,60467,60468],{"class":38,"line":33465},[36,60469,60470],{"class":42},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,60472,60473],{"class":38,"line":33471},[36,60474,60475],{"class":42},"    \u002F\u002F 1.2 注册点击事件\n",[36,60477,60478],{"class":38,"line":33485},[36,60479,2880],{"emptyLinePlaceholder":553},[36,60481,60482],{"class":38,"line":33491},[36,60483,60484],{"class":42},"    next.addEventListener('click', function () {\n",[36,60486,60487],{"class":38,"line":33497},[36,60488,60489],{"class":42},"      \u002F\u002F console.log(11)\n",[36,60491,60492],{"class":38,"line":33508},[36,60493,60494],{"class":42},"      i++\n",[36,60496,60497],{"class":38,"line":33514},[36,60498,60499],{"class":42},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,60501,60502],{"class":38,"line":33520},[36,60503,60504],{"class":42},"      \u002F\u002F if (i >= 8) {\n",[36,60506,60507],{"class":38,"line":33530},[36,60508,60509],{"class":42},"      \u002F\u002F   i = 0\n",[36,60511,60512],{"class":38,"line":33536},[36,60513,60514],{"class":42},"      \u002F\u002F }\n",[36,60516,60517],{"class":38,"line":33547},[36,60518,60519],{"class":42},"      i = i >= data.length ? 0 : i\n",[36,60521,60522],{"class":38,"line":33553},[36,60523,60524],{"class":42},"      \u002F\u002F 1.3 得到对应的对象\n",[36,60526,60527],{"class":38,"line":33563},[36,60528,60529],{"class":42},"      \u002F\u002F console.log(data[i])\n",[36,60531,60532],{"class":38,"line":33568},[36,60533,60534],{"class":42},"      \u002F\u002F 调用函数\n",[36,60536,60537],{"class":38,"line":33574},[36,60538,60539],{"class":42},"      toggle()\n",[36,60541,60542],{"class":38,"line":33623},[36,60543,33938],{"class":42},[36,60545,60546],{"class":38,"line":33670},[36,60547,2880],{"emptyLinePlaceholder":553},[36,60549,60550],{"class":38,"line":33675},[36,60551,60552],{"class":42},"    \u002F\u002F 2. 左侧按钮业务\n",[36,60554,60555],{"class":38,"line":33681},[36,60556,60557],{"class":42},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,60559,60560],{"class":38,"line":33700},[36,60561,60562],{"class":42},"    const prev = document.querySelector('.prev')\n",[36,60564,60565],{"class":38,"line":33706},[36,60566,60475],{"class":42},[36,60568,60569],{"class":38,"line":33726},[36,60570,60571],{"class":42},"    prev.addEventListener('click', function () {\n",[36,60573,60574],{"class":38,"line":33732},[36,60575,60576],{"class":42},"      i--\n",[36,60578,60579],{"class":38,"line":33738},[36,60580,60581],{"class":42},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,60583,60584],{"class":38,"line":33748},[36,60585,60586],{"class":42},"      \u002F\u002F if (i \u003C 0) {\n",[36,60588,60589],{"class":38,"line":33753},[36,60590,60591],{"class":42},"      \u002F\u002F   i = 7\n",[36,60593,60594],{"class":38,"line":33759},[36,60595,60514],{"class":42},[36,60597,60598],{"class":38,"line":33775},[36,60599,60600],{"class":42},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,60602,60603],{"class":38,"line":33820},[36,60604,60524],{"class":42},[36,60606,60607],{"class":38,"line":33826},[36,60608,60529],{"class":42},[36,60610,60611],{"class":38,"line":33832},[36,60612,60534],{"class":42},[36,60614,60615],{"class":38,"line":33838},[36,60616,60539],{"class":42},[36,60618,60619],{"class":38,"line":33849},[36,60620,33938],{"class":42},[36,60622,60623],{"class":38,"line":33855},[36,60624,2880],{"emptyLinePlaceholder":553},[36,60626,60627],{"class":38,"line":33861},[36,60628,60629],{"class":42},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,60631,60632],{"class":38,"line":33867},[36,60633,60634],{"class":42},"    function toggle() {\n",[36,60636,60637],{"class":38,"line":33885},[36,60638,60639],{"class":42},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,60641,60642],{"class":38,"line":33899},[36,60643,60644],{"class":42},"      img.src = data[i].url\n",[36,60646,60647],{"class":38,"line":33908},[36,60648,60649],{"class":42},"      p.innerHTML = data[i].title\n",[36,60651,60652],{"class":38,"line":33917},[36,60653,60654],{"class":42},"      footer.style.backgroundColor = data[i].color\n",[36,60656,60657],{"class":38,"line":33926},[36,60658,60659],{"class":42},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,60661,60662],{"class":38,"line":33935},[36,60663,60664],{"class":42},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,60666,60667],{"class":38,"line":33941},[36,60668,60669],{"class":42},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,60671,60672],{"class":38,"line":33947},[36,60673,2667],{"class":42},[36,60675,60676],{"class":38,"line":33955},[36,60677,2880],{"emptyLinePlaceholder":553},[36,60679,60680],{"class":38,"line":33960},[36,60681,60682],{"class":42},"    \u002F\u002F 3. 自动播放模块\n",[36,60684,60685],{"class":38,"line":33966},[36,60686,60687],{"class":42},"    let timerId = setInterval(function () {\n",[36,60689,60690],{"class":38,"line":33977},[36,60691,60692],{"class":42},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,60694,60695],{"class":38,"line":33983},[36,60696,60697],{"class":42},"      next.click()\n",[36,60699,60700],{"class":38,"line":34003},[36,60701,60702],{"class":42},"    }, 1000)\n",[36,60704,60705],{"class":38,"line":34009},[36,60706,2880],{"emptyLinePlaceholder":553},[36,60708,60709],{"class":38,"line":34015},[36,60710,60711],{"class":42},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,60713,60714],{"class":38,"line":34021},[36,60715,60716],{"class":42},"    const slider = document.querySelector('.slider')\n",[36,60718,60719],{"class":38,"line":34038},[36,60720,60721],{"class":42},"    \u002F\u002F 注册事件\n",[36,60723,60724],{"class":38,"line":34044},[36,60725,60726],{"class":42},"    slider.addEventListener('mouseenter', function () {\n",[36,60728,60729],{"class":38,"line":34050},[36,60730,60731],{"class":42},"      \u002F\u002F 停止定时器\n",[36,60733,60734],{"class":38,"line":34056},[36,60735,60736],{"class":42},"      clearInterval(timerId)\n",[36,60738,60739],{"class":38,"line":34062},[36,60740,33938],{"class":42},[36,60742,60743],{"class":38,"line":34068},[36,60744,2880],{"emptyLinePlaceholder":553},[36,60746,60747],{"class":38,"line":34095},[36,60748,60749],{"class":42},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,60751,60752],{"class":38,"line":34119},[36,60753,60721],{"class":42},[36,60755,60756],{"class":38,"line":34125},[36,60757,60758],{"class":42},"    slider.addEventListener('mouseleave', function () {\n",[36,60760,60761],{"class":38,"line":34131},[36,60762,60731],{"class":42},[36,60764,60765],{"class":38,"line":34137},[36,60766,60767],{"class":42},"      if (timerId) clearInterval(timerId)\n",[36,60769,60770],{"class":38,"line":34148},[36,60771,60772],{"class":42},"      \u002F\u002F 开启定时器\n",[36,60774,60775],{"class":38,"line":34159},[36,60776,60777],{"class":42},"      timerId = setInterval(function () {\n",[36,60779,60780],{"class":38,"line":34165},[36,60781,60782],{"class":42},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,60784,60785],{"class":38,"line":34182},[36,60786,60787],{"class":42},"        next.click()\n",[36,60789,60790],{"class":38,"line":34205},[36,60791,60792],{"class":42},"      }, 1000)\n",[36,60794,60795],{"class":38,"line":34228},[36,60796,33938],{"class":42},[36,60798,60799,60801,60803],{"class":38,"line":34234},[36,60800,52894],{"class":42},[36,60802,52290],{"class":51777},[36,60804,51784],{"class":42},[36,60806,60807,60809,60811],{"class":38,"line":34239},[36,60808,52262],{"class":42},[36,60810,52277],{"class":51777},[36,60812,51784],{"class":42},[36,60814,60815],{"class":38,"line":34248},[36,60816,2880],{"emptyLinePlaceholder":553},[36,60818,60819,60821,60823],{"class":38,"line":34258},[36,60820,52262],{"class":42},[36,60822,51112],{"class":51777},[36,60824,51784],{"class":42},[22478,60826,60828],{"id":60827},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60830,60831],{},"小米搜索框案例：",[26,60833,60835],{"className":51110,"code":60834,"language":51112,"meta":31,"style":31},"\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",[33,60836,60837,60847,60861,60865,60873,60887,60907,60927,60939,60947,60953,60963,60973,60985,60989,60993,61000,61004,61015,61019,61023,61030,61041,61054,61068,61072,61076,61085,61097,61109,61123,61136,61149,61167,61178,61182,61186,61195,61212,61216,61220,61227,61237,61247,61258,61271,61283,61299,61310,61322,61326,61330,61338,61349,61366,61378,61390,61401,61405,61409,61420,61431,61435,61443,61447,61455,61459,61467,61482,61505,61520,61551,61578,61605,61632,61659,61686,61713,61722,61730,61738,61743,61763,61783,61788,61793,61811,61816,61826,61831,61845,61850,61855,61872,61881,61893,61897,61905,61913,61917],{"__ignoreMap":31},[36,60838,60839,60841,60843,60845],{"class":38,"line":39},[36,60840,51774],{"class":42},[36,60842,51778],{"class":51777},[36,60844,51781],{"class":2443},[36,60846,51784],{"class":42},[36,60848,60849,60851,60853,60855,60857,60859],{"class":38,"line":66},[36,60850,1523],{"class":42},[36,60852,51112],{"class":51777},[36,60854,51793],{"class":2443},[36,60856,47],{"class":42},[36,60858,51798],{"class":405},[36,60860,51784],{"class":42},[36,60862,60863],{"class":38,"line":73},[36,60864,2880],{"emptyLinePlaceholder":553},[36,60866,60867,60869,60871],{"class":38,"line":79},[36,60868,1523],{"class":42},[36,60870,51811],{"class":51777},[36,60872,51784],{"class":42},[36,60874,60875,60877,60879,60881,60883,60885],{"class":38,"line":85},[36,60876,51818],{"class":42},[36,60878,51821],{"class":51777},[36,60880,51824],{"class":2443},[36,60882,47],{"class":42},[36,60884,51829],{"class":405},[36,60886,51784],{"class":42},[36,60888,60889,60891,60893,60895,60897,60899,60901,60903,60905],{"class":38,"line":419},[36,60890,51818],{"class":42},[36,60892,51821],{"class":51777},[36,60894,51840],{"class":2443},[36,60896,47],{"class":42},[36,60898,51845],{"class":405},[36,60900,51848],{"class":2443},[36,60902,47],{"class":42},[36,60904,51853],{"class":405},[36,60906,51784],{"class":42},[36,60908,60909,60911,60913,60915,60917,60919,60921,60923,60925],{"class":38,"line":425},[36,60910,51818],{"class":42},[36,60912,51821],{"class":51777},[36,60914,15400],{"class":2443},[36,60916,47],{"class":42},[36,60918,51868],{"class":405},[36,60920,51848],{"class":2443},[36,60922,47],{"class":42},[36,60924,51875],{"class":405},[36,60926,51784],{"class":42},[36,60928,60929,60931,60933,60935,60937],{"class":38,"line":431},[36,60930,51818],{"class":42},[36,60932,51884],{"class":51777},[36,60934,51887],{"class":42},[36,60936,51884],{"class":51777},[36,60938,51784],{"class":42},[36,60940,60941,60943,60945],{"class":38,"line":437},[36,60942,51818],{"class":42},[36,60944,539],{"class":51777},[36,60946,51784],{"class":42},[36,60948,60949,60951],{"class":38,"line":443},[36,60950,51904],{"class":51777},[36,60952,16052],{"class":42},[36,60954,60955,60957,60959,60961],{"class":38,"line":2092},[36,60956,51911],{"class":53},[36,60958,51914],{"class":42},[36,60960,812],{"class":53},[36,60962,1774],{"class":42},[36,60964,60965,60967,60969,60971],{"class":38,"line":2097},[36,60966,51923],{"class":53},[36,60968,51914],{"class":42},[36,60970,812],{"class":53},[36,60972,1774],{"class":42},[36,60974,60975,60978,60980,60983],{"class":38,"line":2103},[36,60976,60977],{"class":53},"            box-sizing",[36,60979,51914],{"class":42},[36,60981,60982],{"class":53},"border-box",[36,60984,1774],{"class":42},[36,60986,60987],{"class":38,"line":2108},[36,60988,3009],{"class":42},[36,60990,60991],{"class":38,"line":2122},[36,60992,2880],{"emptyLinePlaceholder":553},[36,60994,60995,60998],{"class":38,"line":2127},[36,60996,60997],{"class":51777},"        ul",[36,60999,16052],{"class":42},[36,61001,61002],{"class":38,"line":2133},[36,61003,2880],{"emptyLinePlaceholder":553},[36,61005,61006,61009,61011,61013],{"class":38,"line":2154},[36,61007,61008],{"class":53},"            list-style",[36,61010,51914],{"class":42},[36,61012,55214],{"class":53},[36,61014,1774],{"class":42},[36,61016,61017],{"class":38,"line":2159},[36,61018,3009],{"class":42},[36,61020,61021],{"class":38,"line":2173},[36,61022,2880],{"emptyLinePlaceholder":553},[36,61024,61025,61028],{"class":38,"line":2178},[36,61026,61027],{"class":2443},"        .mi",[36,61029,16052],{"class":42},[36,61031,61032,61035,61037,61039],{"class":38,"line":2207},[36,61033,61034],{"class":53},"            position",[36,61036,51914],{"class":42},[36,61038,55241],{"class":53},[36,61040,1774],{"class":42},[36,61042,61043,61045,61047,61050,61052],{"class":38,"line":2212},[36,61044,51961],{"class":53},[36,61046,51914],{"class":42},[36,61048,61049],{"class":53},"223",[36,61051,51969],{"class":46},[36,61053,1774],{"class":42},[36,61055,61056,61058,61060,61062,61064,61066],{"class":38,"line":2229},[36,61057,51911],{"class":53},[36,61059,51914],{"class":42},[36,61061,930],{"class":53},[36,61063,51969],{"class":46},[36,61065,52033],{"class":53},[36,61067,1774],{"class":42},[36,61069,61070],{"class":38,"line":2234},[36,61071,3009],{"class":42},[36,61073,61074],{"class":38,"line":2239},[36,61075,2880],{"emptyLinePlaceholder":553},[36,61077,61078,61080,61083],{"class":38,"line":2244},[36,61079,61027],{"class":2443},[36,61081,61082],{"class":51777}," input",[36,61084,16052],{"class":42},[36,61086,61087,61089,61091,61093,61095],{"class":38,"line":2258},[36,61088,51961],{"class":53},[36,61090,51914],{"class":42},[36,61092,61049],{"class":53},[36,61094,51969],{"class":46},[36,61096,1774],{"class":42},[36,61098,61099,61101,61103,61105,61107],{"class":38,"line":2263},[36,61100,51976],{"class":53},[36,61102,51914],{"class":42},[36,61104,1220],{"class":53},[36,61106,51969],{"class":46},[36,61108,1774],{"class":42},[36,61110,61111,61113,61115,61117,61119,61121],{"class":38,"line":3057},[36,61112,51923],{"class":53},[36,61114,51914],{"class":42},[36,61116,812],{"class":53},[36,61118,2518],{"class":53},[36,61120,51969],{"class":46},[36,61122,1774],{"class":42},[36,61124,61125,61128,61130,61132,61134],{"class":38,"line":3071},[36,61126,61127],{"class":53},"            font-size",[36,61129,51914],{"class":42},[36,61131,1162],{"class":53},[36,61133,51969],{"class":46},[36,61135,1774],{"class":42},[36,61137,61138,61141,61143,61145,61147],{"class":38,"line":3079},[36,61139,61140],{"class":53},"            line-height",[36,61142,51914],{"class":42},[36,61144,1220],{"class":53},[36,61146,51969],{"class":46},[36,61148,1774],{"class":42},[36,61150,61151,61154,61156,61158,61160,61162,61165],{"class":38,"line":3084},[36,61152,61153],{"class":53},"            border",[36,61155,51914],{"class":42},[36,61157,54],{"class":53},[36,61159,51969],{"class":46},[36,61161,51998],{"class":53},[36,61163,61164],{"class":53}," #e0e0e0",[36,61166,1774],{"class":42},[36,61168,61169,61172,61174,61176],{"class":38,"line":3090},[36,61170,61171],{"class":53},"            outline",[36,61173,51914],{"class":42},[36,61175,55214],{"class":53},[36,61177,1774],{"class":42},[36,61179,61180],{"class":38,"line":3096},[36,61181,3009],{"class":42},[36,61183,61184],{"class":38,"line":3101},[36,61185,2880],{"emptyLinePlaceholder":553},[36,61187,61188,61190,61193],{"class":38,"line":8428},[36,61189,61027],{"class":2443},[36,61191,61192],{"class":2443}," .search",[36,61194,16052],{"class":42},[36,61196,61197,61199,61201,61203,61205,61207,61210],{"class":38,"line":8452},[36,61198,61153],{"class":53},[36,61200,51914],{"class":42},[36,61202,54],{"class":53},[36,61204,51969],{"class":46},[36,61206,51998],{"class":53},[36,61208,61209],{"class":53}," #ff6700",[36,61211,1774],{"class":42},[36,61213,61214],{"class":38,"line":8457},[36,61215,3009],{"class":42},[36,61217,61218],{"class":38,"line":8463},[36,61219,2880],{"emptyLinePlaceholder":553},[36,61221,61222,61225],{"class":38,"line":8490},[36,61223,61224],{"class":2443},"        .result-list",[36,61226,16052],{"class":42},[36,61228,61229,61231,61233,61235],{"class":38,"line":8495},[36,61230,51949],{"class":53},[36,61232,51914],{"class":42},[36,61234,55214],{"class":53},[36,61236,1774],{"class":42},[36,61238,61239,61241,61243,61245],{"class":38,"line":8501},[36,61240,61034],{"class":53},[36,61242,51914],{"class":42},[36,61244,55308],{"class":53},[36,61246,1774],{"class":42},[36,61248,61249,61252,61254,61256],{"class":38,"line":8513},[36,61250,61251],{"class":53},"            left",[36,61253,51914],{"class":42},[36,61255,812],{"class":53},[36,61257,1774],{"class":42},[36,61259,61260,61263,61265,61267,61269],{"class":38,"line":8525},[36,61261,61262],{"class":53},"            top",[36,61264,51914],{"class":42},[36,61266,1220],{"class":53},[36,61268,51969],{"class":46},[36,61270,1774],{"class":42},[36,61272,61273,61275,61277,61279,61281],{"class":38,"line":8537},[36,61274,51961],{"class":53},[36,61276,51914],{"class":42},[36,61278,61049],{"class":53},[36,61280,51969],{"class":46},[36,61282,1774],{"class":42},[36,61284,61285,61287,61289,61291,61293,61295,61297],{"class":38,"line":10196},[36,61286,61153],{"class":53},[36,61288,51914],{"class":42},[36,61290,54],{"class":53},[36,61292,51969],{"class":46},[36,61294,51998],{"class":53},[36,61296,61209],{"class":53},[36,61298,1774],{"class":42},[36,61300,61301,61304,61306,61308],{"class":38,"line":10221},[36,61302,61303],{"class":53},"            border-top",[36,61305,51914],{"class":42},[36,61307,812],{"class":53},[36,61309,1774],{"class":42},[36,61311,61312,61315,61317,61320],{"class":38,"line":10244},[36,61313,61314],{"class":53},"            background",[36,61316,51914],{"class":42},[36,61318,61319],{"class":53},"#fff",[36,61321,1774],{"class":42},[36,61323,61324],{"class":38,"line":10268},[36,61325,3009],{"class":42},[36,61327,61328],{"class":38,"line":10273},[36,61329,2880],{"emptyLinePlaceholder":553},[36,61331,61332,61334,61336],{"class":38,"line":10278},[36,61333,61224],{"class":2443},[36,61335,1879],{"class":51777},[36,61337,16052],{"class":42},[36,61339,61340,61342,61344,61347],{"class":38,"line":10283},[36,61341,51949],{"class":53},[36,61343,51914],{"class":42},[36,61345,61346],{"class":53},"block",[36,61348,1774],{"class":42},[36,61350,61351,61353,61355,61357,61359,61362,61364],{"class":38,"line":10292},[36,61352,51923],{"class":53},[36,61354,51914],{"class":42},[36,61356,101],{"class":53},[36,61358,51969],{"class":46},[36,61360,61361],{"class":53}," 15",[36,61363,51969],{"class":46},[36,61365,1774],{"class":42},[36,61367,61368,61370,61372,61374,61376],{"class":38,"line":10297},[36,61369,61127],{"class":53},[36,61371,51914],{"class":42},[36,61373,154],{"class":53},[36,61375,51969],{"class":46},[36,61377,1774],{"class":42},[36,61379,61380,61383,61385,61388],{"class":38,"line":10303},[36,61381,61382],{"class":53},"            color",[36,61384,51914],{"class":42},[36,61386,61387],{"class":53},"#424242",[36,61389,1774],{"class":42},[36,61391,61392,61395,61397,61399],{"class":38,"line":10324},[36,61393,61394],{"class":53},"            text-decoration",[36,61396,51914],{"class":42},[36,61398,55214],{"class":53},[36,61400,1774],{"class":42},[36,61402,61403],{"class":38,"line":10330},[36,61404,3009],{"class":42},[36,61406,61407],{"class":38,"line":10344},[36,61408,2880],{"emptyLinePlaceholder":553},[36,61410,61411,61413,61415,61418],{"class":38,"line":10350},[36,61412,61224],{"class":2443},[36,61414,1879],{"class":51777},[36,61416,61417],{"class":2443},":hover",[36,61419,16052],{"class":42},[36,61421,61422,61424,61426,61429],{"class":38,"line":10377},[36,61423,52117],{"class":53},[36,61425,51914],{"class":42},[36,61427,61428],{"class":53},"#eee",[36,61430,1774],{"class":42},[36,61432,61433],{"class":38,"line":10386},[36,61434,3009],{"class":42},[36,61436,61437,61439,61441],{"class":38,"line":10392},[36,61438,52253],{"class":42},[36,61440,539],{"class":51777},[36,61442,51784],{"class":42},[36,61444,61445],{"class":38,"line":10400},[36,61446,2880],{"emptyLinePlaceholder":553},[36,61448,61449,61451,61453],{"class":38,"line":10405},[36,61450,52262],{"class":42},[36,61452,51811],{"class":51777},[36,61454,51784],{"class":42},[36,61456,61457],{"class":38,"line":17084},[36,61458,2880],{"emptyLinePlaceholder":553},[36,61460,61461,61463,61465],{"class":38,"line":17090},[36,61462,1523],{"class":42},[36,61464,52277],{"class":51777},[36,61466,51784],{"class":42},[36,61468,61469,61471,61473,61475,61477,61480],{"class":38,"line":17113},[36,61470,51818],{"class":42},[36,61472,52088],{"class":51777},[36,61474,53963],{"class":2443},[36,61476,47],{"class":42},[36,61478,61479],{"class":405},"\"mi\"",[36,61481,51784],{"class":42},[36,61483,61484,61486,61488,61490,61492,61495,61498,61500,61503],{"class":38,"line":17119},[36,61485,55779],{"class":42},[36,61487,54298],{"class":51777},[36,61489,54301],{"class":2443},[36,61491,47],{"class":42},[36,61493,61494],{"class":405},"\"search\"",[36,61496,61497],{"class":2443}," placeholder",[36,61499,47],{"class":42},[36,61501,61502],{"class":405},"\"小米笔记本\"",[36,61504,51784],{"class":42},[36,61506,61507,61509,61511,61513,61515,61518],{"class":38,"line":17142},[36,61508,55779],{"class":42},[36,61510,1620],{"class":51777},[36,61512,53963],{"class":2443},[36,61514,47],{"class":42},[36,61516,61517],{"class":405},"\"result-list\"",[36,61519,51784],{"class":42},[36,61521,61522,61525,61527,61530,61532,61535,61537,61540,61543,61545,61547,61549],{"class":38,"line":17156},[36,61523,61524],{"class":42},"            \u003C",[36,61526,582],{"class":51777},[36,61528,61529],{"class":42},">\u003C",[36,61531,43],{"class":51777},[36,61533,61534],{"class":2443}," href",[36,61536,47],{"class":42},[36,61538,61539],{"class":405},"\"#\"",[36,61541,61542],{"class":42},">全部商品\u003C\u002F",[36,61544,43],{"class":51777},[36,61546,55791],{"class":42},[36,61548,582],{"class":51777},[36,61550,51784],{"class":42},[36,61552,61553,61555,61557,61559,61561,61563,61565,61567,61570,61572,61574,61576],{"class":38,"line":17176},[36,61554,61524],{"class":42},[36,61556,582],{"class":51777},[36,61558,61529],{"class":42},[36,61560,43],{"class":51777},[36,61562,61534],{"class":2443},[36,61564,47],{"class":42},[36,61566,61539],{"class":405},[36,61568,61569],{"class":42},">小米11\u003C\u002F",[36,61571,43],{"class":51777},[36,61573,55791],{"class":42},[36,61575,582],{"class":51777},[36,61577,51784],{"class":42},[36,61579,61580,61582,61584,61586,61588,61590,61592,61594,61597,61599,61601,61603],{"class":38,"line":17182},[36,61581,61524],{"class":42},[36,61583,582],{"class":51777},[36,61585,61529],{"class":42},[36,61587,43],{"class":51777},[36,61589,61534],{"class":2443},[36,61591,47],{"class":42},[36,61593,61539],{"class":405},[36,61595,61596],{"class":42},">小米10S\u003C\u002F",[36,61598,43],{"class":51777},[36,61600,55791],{"class":42},[36,61602,582],{"class":51777},[36,61604,51784],{"class":42},[36,61606,61607,61609,61611,61613,61615,61617,61619,61621,61624,61626,61628,61630],{"class":38,"line":17193},[36,61608,61524],{"class":42},[36,61610,582],{"class":51777},[36,61612,61529],{"class":42},[36,61614,43],{"class":51777},[36,61616,61534],{"class":2443},[36,61618,47],{"class":42},[36,61620,61539],{"class":405},[36,61622,61623],{"class":42},">小米笔记本\u003C\u002F",[36,61625,43],{"class":51777},[36,61627,55791],{"class":42},[36,61629,582],{"class":51777},[36,61631,51784],{"class":42},[36,61633,61634,61636,61638,61640,61642,61644,61646,61648,61651,61653,61655,61657],{"class":38,"line":17216},[36,61635,61524],{"class":42},[36,61637,582],{"class":51777},[36,61639,61529],{"class":42},[36,61641,43],{"class":51777},[36,61643,61534],{"class":2443},[36,61645,47],{"class":42},[36,61647,61539],{"class":405},[36,61649,61650],{"class":42},">小米手机\u003C\u002F",[36,61652,43],{"class":51777},[36,61654,55791],{"class":42},[36,61656,582],{"class":51777},[36,61658,51784],{"class":42},[36,61660,61661,61663,61665,61667,61669,61671,61673,61675,61678,61680,61682,61684],{"class":38,"line":17238},[36,61662,61524],{"class":42},[36,61664,582],{"class":51777},[36,61666,61529],{"class":42},[36,61668,43],{"class":51777},[36,61670,61534],{"class":2443},[36,61672,47],{"class":42},[36,61674,61539],{"class":405},[36,61676,61677],{"class":42},">黑鲨4\u003C\u002F",[36,61679,43],{"class":51777},[36,61681,55791],{"class":42},[36,61683,582],{"class":51777},[36,61685,51784],{"class":42},[36,61687,61688,61690,61692,61694,61696,61698,61700,61702,61705,61707,61709,61711],{"class":38,"line":17243},[36,61689,61524],{"class":42},[36,61691,582],{"class":51777},[36,61693,61529],{"class":42},[36,61695,43],{"class":51777},[36,61697,61534],{"class":2443},[36,61699,47],{"class":42},[36,61701,61539],{"class":405},[36,61703,61704],{"class":42},">空调\u003C\u002F",[36,61706,43],{"class":51777},[36,61708,55791],{"class":42},[36,61710,582],{"class":51777},[36,61712,51784],{"class":42},[36,61714,61715,61718,61720],{"class":38,"line":17249},[36,61716,61717],{"class":42},"        \u003C\u002F",[36,61719,1620],{"class":51777},[36,61721,51784],{"class":42},[36,61723,61724,61726,61728],{"class":38,"line":17263},[36,61725,52253],{"class":42},[36,61727,52088],{"class":51777},[36,61729,51784],{"class":42},[36,61731,61732,61734,61736],{"class":38,"line":17276},[36,61733,51818],{"class":42},[36,61735,52290],{"class":51777},[36,61737,51784],{"class":42},[36,61739,61740],{"class":38,"line":17281},[36,61741,61742],{"class":69},"        \u002F\u002F 1. 获取元素\n",[36,61744,61745,61748,61750,61752,61754,61756,61758,61761],{"class":38,"line":17295},[36,61746,61747],{"class":46},"        const",[36,61749,61082],{"class":53},[36,61751,14044],{"class":46},[36,61753,54873],{"class":42},[36,61755,54876],{"class":2443},[36,61757,345],{"class":42},[36,61759,61760],{"class":405},"'[type=search]'",[36,61762,63],{"class":42},[36,61764,61765,61767,61770,61772,61774,61776,61778,61781],{"class":38,"line":17300},[36,61766,61747],{"class":46},[36,61768,61769],{"class":53}," ul",[36,61771,14044],{"class":46},[36,61773,54873],{"class":42},[36,61775,54876],{"class":2443},[36,61777,345],{"class":42},[36,61779,61780],{"class":405},"'.result-list'",[36,61782,63],{"class":42},[36,61784,61785],{"class":38,"line":17306},[36,61786,61787],{"class":69},"        \u002F\u002F console.log(input)\n",[36,61789,61790],{"class":38,"line":17311},[36,61791,61792],{"class":69},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,61794,61795,61798,61800,61802,61805,61807,61809],{"class":38,"line":17325},[36,61796,61797],{"class":42},"        input.",[36,61799,58290],{"class":2443},[36,61801,345],{"class":42},[36,61803,61804],{"class":405},"'focus'",[36,61806,12915],{"class":42},[36,61808,54926],{"class":46},[36,61810,54929],{"class":42},[36,61812,61813],{"class":38,"line":17330},[36,61814,61815],{"class":69},"            \u002F\u002F ul显示\n",[36,61817,61818,61821,61823],{"class":38,"line":17335},[36,61819,61820],{"class":42},"            ul.style.display ",[36,61822,47],{"class":46},[36,61824,61825],{"class":405}," 'block'\n",[36,61827,61828],{"class":38,"line":17349},[36,61829,61830],{"class":69},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,61832,61833,61836,61838,61840,61843],{"class":38,"line":17361},[36,61834,61835],{"class":42},"            input.classList.",[36,61837,5814],{"class":2443},[36,61839,345],{"class":42},[36,61841,61842],{"class":405},"'search'",[36,61844,63],{"class":42},[36,61846,61847],{"class":38,"line":17366},[36,61848,61849],{"class":42},"        })\n",[36,61851,61852],{"class":38,"line":17379},[36,61853,61854],{"class":69},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,61856,61857,61859,61861,61863,61866,61868,61870],{"class":38,"line":17384},[36,61858,61797],{"class":42},[36,61860,58290],{"class":2443},[36,61862,345],{"class":42},[36,61864,61865],{"class":405},"'blur'",[36,61867,12915],{"class":42},[36,61869,54926],{"class":46},[36,61871,54929],{"class":42},[36,61873,61874,61876,61878],{"class":38,"line":17389},[36,61875,61820],{"class":42},[36,61877,47],{"class":46},[36,61879,61880],{"class":405}," 'none'\n",[36,61882,61883,61885,61887,61889,61891],{"class":38,"line":17394},[36,61884,61835],{"class":42},[36,61886,57483],{"class":2443},[36,61888,345],{"class":42},[36,61890,61842],{"class":405},[36,61892,63],{"class":42},[36,61894,61895],{"class":38,"line":17407},[36,61896,61849],{"class":42},[36,61898,61899,61901,61903],{"class":38,"line":17412},[36,61900,52253],{"class":42},[36,61902,52290],{"class":51777},[36,61904,51784],{"class":42},[36,61906,61907,61909,61911],{"class":38,"line":33110},[36,61908,52262],{"class":42},[36,61910,52277],{"class":51777},[36,61912,51784],{"class":42},[36,61914,61915],{"class":38,"line":33116},[36,61916,2880],{"emptyLinePlaceholder":553},[36,61918,61919,61921,61923],{"class":38,"line":33122},[36,61920,52262],{"class":42},[36,61922,51112],{"class":51777},[36,61924,51784],{"class":42},[22478,61926,61928],{"id":61927},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61930,61931],{},"评论字数统计案例",[19,61933,61934],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61936,61937],{},"牢记focus伪类选择器",[51821,61939],{"charSet":61940},"UTF-8",[51821,61942],{"name":61943,"content":61944},"viewport","width=device-width, initial-scale=1.0",[51884,61946,61947],{},"Document",[539,61949,61950],{},"\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",[54298,61952],{"type":5667},[1620,61954,61955,61958],{},[582,61956,61957],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[582,61959,61960],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,61962,61964],{"className":51110,"code":61963,"language":51112,"meta":31,"style":31},"\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",[33,61965,61966,61976,61990,61994,62002,62016,62036,62056,62069,62077,62084,62097,62111,62121,62131,62135,62139,62146,62158,62170,62182,62194,62223,62236,62240,62244,62253,62264,62276,62287,62298,62310,62321,62333,62349,62361,62365,62369,62380,62391,62401,62413,62417,62421,62429,62440,62450,62461,62473,62486,62498,62510,62514,62518,62527,62539,62550,62563,62574,62588,62592,62596,62603,62615,62627,62637,62641,62645,62654,62666,62676,62680,62684,62695,62705,62724,62737,62741,62745,62755,62765,62769,62773,62784,62795,62807,62819,62823,62827,62838,62849,62863,62867,62871,62882,62892,62904,62908,62916,62924,62928,62936,62951,62970,63010,63023,63031,63045,63065,63073,63088,63111,63129,63144,63164,63184,63204,63212,63220,63228,63236,63256,63276,63281,63298,63307,63311,63316,63332,63340,63344,63349,63366,63371,63396,63400,63404,63409,63414,63422,63430,63434],{"__ignoreMap":31},[36,61967,61968,61970,61972,61974],{"class":38,"line":39},[36,61969,51774],{"class":42},[36,61971,51778],{"class":51777},[36,61973,51781],{"class":2443},[36,61975,51784],{"class":42},[36,61977,61978,61980,61982,61984,61986,61988],{"class":38,"line":66},[36,61979,1523],{"class":42},[36,61981,51112],{"class":51777},[36,61983,51793],{"class":2443},[36,61985,47],{"class":42},[36,61987,51798],{"class":405},[36,61989,51784],{"class":42},[36,61991,61992],{"class":38,"line":73},[36,61993,2880],{"emptyLinePlaceholder":553},[36,61995,61996,61998,62000],{"class":38,"line":79},[36,61997,1523],{"class":42},[36,61999,51811],{"class":51777},[36,62001,51784],{"class":42},[36,62003,62004,62006,62008,62010,62012,62014],{"class":38,"line":85},[36,62005,52621],{"class":42},[36,62007,51821],{"class":51777},[36,62009,51824],{"class":2443},[36,62011,47],{"class":42},[36,62013,51829],{"class":405},[36,62015,51784],{"class":42},[36,62017,62018,62020,62022,62024,62026,62028,62030,62032,62034],{"class":38,"line":419},[36,62019,52621],{"class":42},[36,62021,51821],{"class":51777},[36,62023,51840],{"class":2443},[36,62025,47],{"class":42},[36,62027,51845],{"class":405},[36,62029,51848],{"class":2443},[36,62031,47],{"class":42},[36,62033,51853],{"class":405},[36,62035,51784],{"class":42},[36,62037,62038,62040,62042,62044,62046,62048,62050,62052,62054],{"class":38,"line":425},[36,62039,52621],{"class":42},[36,62041,51821],{"class":51777},[36,62043,15400],{"class":2443},[36,62045,47],{"class":42},[36,62047,51868],{"class":405},[36,62049,51848],{"class":2443},[36,62051,47],{"class":42},[36,62053,51875],{"class":405},[36,62055,51784],{"class":42},[36,62057,62058,62060,62062,62065,62067],{"class":38,"line":431},[36,62059,52621],{"class":42},[36,62061,51884],{"class":51777},[36,62063,62064],{"class":42},">评论回车发布\u003C\u002F",[36,62066,51884],{"class":51777},[36,62068,51784],{"class":42},[36,62070,62071,62073,62075],{"class":38,"line":437},[36,62072,52621],{"class":42},[36,62074,539],{"class":51777},[36,62076,51784],{"class":42},[36,62078,62079,62082],{"class":38,"line":443},[36,62080,62081],{"class":2443},"    .wrapper",[36,62083,16052],{"class":42},[36,62085,62086,62089,62091,62093,62095],{"class":38,"line":2092},[36,62087,62088],{"class":53},"      min-width",[36,62090,51914],{"class":42},[36,62092,4467],{"class":53},[36,62094,51969],{"class":46},[36,62096,1774],{"class":42},[36,62098,62099,62102,62104,62107,62109],{"class":38,"line":2097},[36,62100,62101],{"class":53},"      max-width",[36,62103,51914],{"class":42},[36,62105,62106],{"class":53},"800",[36,62108,51969],{"class":46},[36,62110,1774],{"class":42},[36,62112,62113,62115,62117,62119],{"class":38,"line":2103},[36,62114,55486],{"class":53},[36,62116,51914],{"class":42},[36,62118,51954],{"class":53},[36,62120,1774],{"class":42},[36,62122,62123,62125,62127,62129],{"class":38,"line":2108},[36,62124,55497],{"class":53},[36,62126,51914],{"class":42},[36,62128,52057],{"class":53},[36,62130,1774],{"class":42},[36,62132,62133],{"class":38,"line":2122},[36,62134,2667],{"class":42},[36,62136,62137],{"class":38,"line":2127},[36,62138,2880],{"emptyLinePlaceholder":553},[36,62140,62141,62144],{"class":38,"line":2133},[36,62142,62143],{"class":2443},"    .avatar",[36,62145,16052],{"class":42},[36,62147,62148,62150,62152,62154,62156],{"class":38,"line":2154},[36,62149,55248],{"class":53},[36,62151,51914],{"class":42},[36,62153,1220],{"class":53},[36,62155,51969],{"class":46},[36,62157,1774],{"class":42},[36,62159,62160,62162,62164,62166,62168],{"class":38,"line":2159},[36,62161,55262],{"class":53},[36,62163,51914],{"class":42},[36,62165,1220],{"class":53},[36,62167,51969],{"class":46},[36,62169,1774],{"class":42},[36,62171,62172,62174,62176,62178,62180],{"class":38,"line":2173},[36,62173,55611],{"class":53},[36,62175,51914],{"class":42},[36,62177,1269],{"class":53},[36,62179,947],{"class":46},[36,62181,1774],{"class":42},[36,62183,62184,62187,62189,62192],{"class":38,"line":2178},[36,62185,62186],{"class":53},"      overflow",[36,62188,51914],{"class":42},[36,62190,62191],{"class":53},"hidden",[36,62193,1774],{"class":42},[36,62195,62196,62199,62201,62204,62206,62209,62211,62214,62216,62218,62221],{"class":38,"line":2207},[36,62197,62198],{"class":53},"      background",[36,62200,51914],{"class":42},[36,62202,62203],{"class":53},"url",[36,62205,345],{"class":42},[36,62207,62208],{"class":5696},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,62210,14194],{"class":42},[36,62212,62213],{"class":53},"no-repeat",[36,62215,17624],{"class":53},[36,62217,25459],{"class":42},[36,62219,62220],{"class":53},"cover",[36,62222,1774],{"class":42},[36,62224,62225,62228,62230,62232,62234],{"class":38,"line":2212},[36,62226,62227],{"class":53},"      margin-right",[36,62229,51914],{"class":42},[36,62231,1313],{"class":53},[36,62233,51969],{"class":46},[36,62235,1774],{"class":42},[36,62237,62238],{"class":38,"line":2229},[36,62239,2667],{"class":42},[36,62241,62242],{"class":38,"line":2234},[36,62243,2880],{"emptyLinePlaceholder":553},[36,62245,62246,62248,62251],{"class":38,"line":2239},[36,62247,62081],{"class":2443},[36,62249,62250],{"class":51777}," textarea",[36,62252,16052],{"class":42},[36,62254,62255,62258,62260,62262],{"class":38,"line":2244},[36,62256,62257],{"class":53},"      outline",[36,62259,51914],{"class":42},[36,62261,55214],{"class":53},[36,62263,1774],{"class":42},[36,62265,62266,62269,62271,62274],{"class":38,"line":2258},[36,62267,62268],{"class":53},"      border-color",[36,62270,51914],{"class":42},[36,62272,62273],{"class":53},"transparent",[36,62275,1774],{"class":42},[36,62277,62278,62281,62283,62285],{"class":38,"line":2263},[36,62279,62280],{"class":53},"      resize",[36,62282,51914],{"class":42},[36,62284,55214],{"class":53},[36,62286,1774],{"class":42},[36,62288,62289,62291,62293,62296],{"class":38,"line":3057},[36,62290,62198],{"class":53},[36,62292,51914],{"class":42},[36,62294,62295],{"class":53},"#f5f5f5",[36,62297,1774],{"class":42},[36,62299,62300,62302,62304,62306,62308],{"class":38,"line":3071},[36,62301,55611],{"class":53},[36,62303,51914],{"class":42},[36,62305,912],{"class":53},[36,62307,51969],{"class":46},[36,62309,1774],{"class":42},[36,62311,62312,62315,62317,62319],{"class":38,"line":3079},[36,62313,62314],{"class":53},"      flex",[36,62316,51914],{"class":42},[36,62318,54],{"class":53},[36,62320,1774],{"class":42},[36,62322,62323,62325,62327,62329,62331],{"class":38,"line":3084},[36,62324,55172],{"class":53},[36,62326,51914],{"class":42},[36,62328,1062],{"class":53},[36,62330,51969],{"class":46},[36,62332,1774],{"class":42},[36,62334,62335,62338,62340,62342,62345,62347],{"class":38,"line":3090},[36,62336,62337],{"class":53},"      transition",[36,62339,51914],{"class":42},[36,62341,28602],{"class":53},[36,62343,62344],{"class":53}," 0.5",[36,62346,1308],{"class":46},[36,62348,1774],{"class":42},[36,62350,62351,62353,62355,62357,62359],{"class":38,"line":3096},[36,62352,55262],{"class":53},[36,62354,51914],{"class":42},[36,62356,1564],{"class":53},[36,62358,51969],{"class":46},[36,62360,1774],{"class":42},[36,62362,62363],{"class":38,"line":3101},[36,62364,2667],{"class":42},[36,62366,62367],{"class":38,"line":8428},[36,62368,2880],{"emptyLinePlaceholder":553},[36,62370,62371,62373,62375,62378],{"class":38,"line":8452},[36,62372,62081],{"class":2443},[36,62374,62250],{"class":51777},[36,62376,62377],{"class":2443},":focus",[36,62379,16052],{"class":42},[36,62381,62382,62384,62386,62389],{"class":38,"line":8457},[36,62383,62268],{"class":53},[36,62385,51914],{"class":42},[36,62387,62388],{"class":53},"#e4e4e4",[36,62390,1774],{"class":42},[36,62392,62393,62395,62397,62399],{"class":38,"line":8463},[36,62394,62198],{"class":53},[36,62396,51914],{"class":42},[36,62398,61319],{"class":53},[36,62400,1774],{"class":42},[36,62402,62403,62405,62407,62409,62411],{"class":38,"line":8490},[36,62404,55262],{"class":53},[36,62406,51914],{"class":42},[36,62408,1269],{"class":53},[36,62410,51969],{"class":46},[36,62412,1774],{"class":42},[36,62414,62415],{"class":38,"line":8495},[36,62416,2667],{"class":42},[36,62418,62419],{"class":38,"line":8501},[36,62420,2880],{"emptyLinePlaceholder":553},[36,62422,62423,62425,62427],{"class":38,"line":8513},[36,62424,62081],{"class":2443},[36,62426,57944],{"class":51777},[36,62428,16052],{"class":42},[36,62430,62431,62433,62435,62438],{"class":38,"line":8525},[36,62432,62198],{"class":53},[36,62434,51914],{"class":42},[36,62436,62437],{"class":53},"#00aeec",[36,62439,1774],{"class":42},[36,62441,62442,62444,62446,62448],{"class":38,"line":8537},[36,62443,57893],{"class":53},[36,62445,51914],{"class":42},[36,62447,61319],{"class":53},[36,62449,1774],{"class":42},[36,62451,62452,62455,62457,62459],{"class":38,"line":10196},[36,62453,62454],{"class":53},"      border",[36,62456,51914],{"class":42},[36,62458,55214],{"class":53},[36,62460,1774],{"class":42},[36,62462,62463,62465,62467,62469,62471],{"class":38,"line":10221},[36,62464,55611],{"class":53},[36,62466,51914],{"class":42},[36,62468,912],{"class":53},[36,62470,51969],{"class":46},[36,62472,1774],{"class":42},[36,62474,62475,62478,62480,62482,62484],{"class":38,"line":10244},[36,62476,62477],{"class":53},"      margin-left",[36,62479,51914],{"class":42},[36,62481,1062],{"class":53},[36,62483,51969],{"class":46},[36,62485,1774],{"class":42},[36,62487,62488,62490,62492,62494,62496],{"class":38,"line":10268},[36,62489,55248],{"class":53},[36,62491,51914],{"class":42},[36,62493,974],{"class":53},[36,62495,51969],{"class":46},[36,62497,1774],{"class":42},[36,62499,62500,62503,62505,62508],{"class":38,"line":10273},[36,62501,62502],{"class":53},"      cursor",[36,62504,51914],{"class":42},[36,62506,62507],{"class":53},"pointer",[36,62509,1774],{"class":42},[36,62511,62512],{"class":38,"line":10278},[36,62513,2667],{"class":42},[36,62515,62516],{"class":38,"line":10283},[36,62517,2880],{"emptyLinePlaceholder":553},[36,62519,62520,62522,62525],{"class":38,"line":10292},[36,62521,62081],{"class":2443},[36,62523,62524],{"class":2443}," .total",[36,62526,16052],{"class":42},[36,62528,62529,62531,62533,62535,62537],{"class":38,"line":10297},[36,62530,62227],{"class":53},[36,62532,51914],{"class":42},[36,62534,1225],{"class":53},[36,62536,51969],{"class":46},[36,62538,1774],{"class":42},[36,62540,62541,62543,62545,62548],{"class":38,"line":10303},[36,62542,57893],{"class":53},[36,62544,51914],{"class":42},[36,62546,62547],{"class":53},"#999",[36,62549,1774],{"class":42},[36,62551,62552,62555,62557,62559,62561],{"class":38,"line":10324},[36,62553,62554],{"class":53},"      margin-top",[36,62556,51914],{"class":42},[36,62558,938],{"class":53},[36,62560,51969],{"class":46},[36,62562,1774],{"class":42},[36,62564,62565,62568,62570,62572],{"class":38,"line":10330},[36,62566,62567],{"class":53},"      opacity",[36,62569,51914],{"class":42},[36,62571,812],{"class":53},[36,62573,1774],{"class":42},[36,62575,62576,62578,62580,62582,62584,62586],{"class":38,"line":10344},[36,62577,62337],{"class":53},[36,62579,51914],{"class":42},[36,62581,28602],{"class":53},[36,62583,62344],{"class":53},[36,62585,1308],{"class":46},[36,62587,1774],{"class":42},[36,62589,62590],{"class":38,"line":10350},[36,62591,2667],{"class":42},[36,62593,62594],{"class":38,"line":10377},[36,62595,2880],{"emptyLinePlaceholder":553},[36,62597,62598,62601],{"class":38,"line":10386},[36,62599,62600],{"class":2443},"    .list",[36,62602,16052],{"class":42},[36,62604,62605,62607,62609,62611,62613],{"class":38,"line":10392},[36,62606,62088],{"class":53},[36,62608,51914],{"class":42},[36,62610,4467],{"class":53},[36,62612,51969],{"class":46},[36,62614,1774],{"class":42},[36,62616,62617,62619,62621,62623,62625],{"class":38,"line":10400},[36,62618,62101],{"class":53},[36,62620,51914],{"class":42},[36,62622,62106],{"class":53},[36,62624,51969],{"class":46},[36,62626,1774],{"class":42},[36,62628,62629,62631,62633,62635],{"class":38,"line":10405},[36,62630,55486],{"class":53},[36,62632,51914],{"class":42},[36,62634,51954],{"class":53},[36,62636,1774],{"class":42},[36,62638,62639],{"class":38,"line":17084},[36,62640,2667],{"class":42},[36,62642,62643],{"class":38,"line":17090},[36,62644,2880],{"emptyLinePlaceholder":553},[36,62646,62647,62649,62652],{"class":38,"line":17113},[36,62648,62600],{"class":2443},[36,62650,62651],{"class":2443}," .item",[36,62653,16052],{"class":42},[36,62655,62656,62658,62660,62662,62664],{"class":38,"line":17119},[36,62657,55248],{"class":53},[36,62659,51914],{"class":42},[36,62661,930],{"class":53},[36,62663,947],{"class":46},[36,62665,1774],{"class":42},[36,62667,62668,62670,62672,62674],{"class":38,"line":17142},[36,62669,55486],{"class":53},[36,62671,51914],{"class":42},[36,62673,51954],{"class":53},[36,62675,1774],{"class":42},[36,62677,62678],{"class":38,"line":17156},[36,62679,2667],{"class":42},[36,62681,62682],{"class":38,"line":17176},[36,62683,2880],{"emptyLinePlaceholder":553},[36,62685,62686,62688,62690,62693],{"class":38,"line":17182},[36,62687,62600],{"class":2443},[36,62689,62651],{"class":2443},[36,62691,62692],{"class":2443}," .info",[36,62694,16052],{"class":42},[36,62696,62697,62699,62701,62703],{"class":38,"line":17193},[36,62698,62314],{"class":53},[36,62700,51914],{"class":42},[36,62702,54],{"class":53},[36,62704,1774],{"class":42},[36,62706,62707,62710,62712,62714,62716,62719,62722],{"class":38,"line":17216},[36,62708,62709],{"class":53},"      border-bottom",[36,62711,51914],{"class":42},[36,62713,54],{"class":53},[36,62715,51969],{"class":46},[36,62717,62718],{"class":53}," dashed",[36,62720,62721],{"class":53}," #e4e4e4",[36,62723,1774],{"class":42},[36,62725,62726,62729,62731,62733,62735],{"class":38,"line":17238},[36,62727,62728],{"class":53},"      padding-bottom",[36,62730,51914],{"class":42},[36,62732,1062],{"class":53},[36,62734,51969],{"class":46},[36,62736,1774],{"class":42},[36,62738,62739],{"class":38,"line":17243},[36,62740,2667],{"class":42},[36,62742,62743],{"class":38,"line":17249},[36,62744,2880],{"emptyLinePlaceholder":553},[36,62746,62747,62749,62751,62753],{"class":38,"line":17263},[36,62748,62600],{"class":2443},[36,62750,62651],{"class":2443},[36,62752,7305],{"class":51777},[36,62754,16052],{"class":42},[36,62756,62757,62759,62761,62763],{"class":38,"line":17276},[36,62758,55183],{"class":53},[36,62760,51914],{"class":42},[36,62762,812],{"class":53},[36,62764,1774],{"class":42},[36,62766,62767],{"class":38,"line":17281},[36,62768,2667],{"class":42},[36,62770,62771],{"class":38,"line":17295},[36,62772,2880],{"emptyLinePlaceholder":553},[36,62774,62775,62777,62779,62782],{"class":38,"line":17300},[36,62776,62600],{"class":2443},[36,62778,62651],{"class":2443},[36,62780,62781],{"class":2443}," .name",[36,62783,16052],{"class":42},[36,62785,62786,62788,62790,62793],{"class":38,"line":17306},[36,62787,57893],{"class":53},[36,62789,51914],{"class":42},[36,62791,62792],{"class":53},"#FB7299",[36,62794,1774],{"class":42},[36,62796,62797,62799,62801,62803,62805],{"class":38,"line":17311},[36,62798,55399],{"class":53},[36,62800,51914],{"class":42},[36,62802,1162],{"class":53},[36,62804,51969],{"class":46},[36,62806,1774],{"class":42},[36,62808,62809,62812,62814,62817],{"class":38,"line":17325},[36,62810,62811],{"class":53},"      font-weight",[36,62813,51914],{"class":42},[36,62815,62816],{"class":53},"bold",[36,62818,1774],{"class":42},[36,62820,62821],{"class":38,"line":17330},[36,62822,2667],{"class":42},[36,62824,62825],{"class":38,"line":17335},[36,62826,2880],{"emptyLinePlaceholder":553},[36,62828,62829,62831,62833,62836],{"class":38,"line":17349},[36,62830,62600],{"class":2443},[36,62832,62651],{"class":2443},[36,62834,62835],{"class":2443}," .text",[36,62837,16052],{"class":42},[36,62839,62840,62842,62844,62847],{"class":38,"line":17361},[36,62841,57893],{"class":53},[36,62843,51914],{"class":42},[36,62845,62846],{"class":53},"#333",[36,62848,1774],{"class":42},[36,62850,62851,62853,62855,62857,62859,62861],{"class":38,"line":17366},[36,62852,55172],{"class":53},[36,62854,51914],{"class":42},[36,62856,1062],{"class":53},[36,62858,51969],{"class":46},[36,62860,4573],{"class":53},[36,62862,1774],{"class":42},[36,62864,62865],{"class":38,"line":17379},[36,62866,2667],{"class":42},[36,62868,62869],{"class":38,"line":17384},[36,62870,2880],{"emptyLinePlaceholder":553},[36,62872,62873,62875,62877,62880],{"class":38,"line":17389},[36,62874,62600],{"class":2443},[36,62876,62651],{"class":2443},[36,62878,62879],{"class":2443}," .time",[36,62881,16052],{"class":42},[36,62883,62884,62886,62888,62890],{"class":38,"line":17394},[36,62885,57893],{"class":53},[36,62887,51914],{"class":42},[36,62889,62547],{"class":53},[36,62891,1774],{"class":42},[36,62893,62894,62896,62898,62900,62902],{"class":38,"line":17407},[36,62895,55399],{"class":53},[36,62897,51914],{"class":42},[36,62899,154],{"class":53},[36,62901,51969],{"class":46},[36,62903,1774],{"class":42},[36,62905,62906],{"class":38,"line":17412},[36,62907,2667],{"class":42},[36,62909,62910,62912,62914],{"class":38,"line":33110},[36,62911,52894],{"class":42},[36,62913,539],{"class":51777},[36,62915,51784],{"class":42},[36,62917,62918,62920,62922],{"class":38,"line":33116},[36,62919,52262],{"class":42},[36,62921,51811],{"class":51777},[36,62923,51784],{"class":42},[36,62925,62926],{"class":38,"line":33122},[36,62927,2880],{"emptyLinePlaceholder":553},[36,62929,62930,62932,62934],{"class":38,"line":33128},[36,62931,1523],{"class":42},[36,62933,52277],{"class":51777},[36,62935,51784],{"class":42},[36,62937,62938,62940,62942,62944,62946,62949],{"class":38,"line":33134},[36,62939,52621],{"class":42},[36,62941,52088],{"class":51777},[36,62943,53963],{"class":2443},[36,62945,47],{"class":42},[36,62947,62948],{"class":405},"\"wrapper\"",[36,62950,51784],{"class":42},[36,62952,62953,62955,62957,62959,62961,62964,62966,62968],{"class":38,"line":33145},[36,62954,51818],{"class":42},[36,62956,1057],{"class":51777},[36,62958,53963],{"class":2443},[36,62960,47],{"class":42},[36,62962,62963],{"class":405},"\"avatar\"",[36,62965,55791],{"class":42},[36,62967,1057],{"class":51777},[36,62969,51784],{"class":42},[36,62971,62972,62974,62976,62978,62980,62983,62985,62987,62990,62992,62994,62996,62999,63001,63004,63006,63008],{"class":38,"line":33151},[36,62973,51818],{"class":42},[36,62975,54765],{"class":51777},[36,62977,15439],{"class":2443},[36,62979,47],{"class":42},[36,62981,62982],{"class":405},"\"tx\"",[36,62984,61497],{"class":2443},[36,62986,47],{"class":42},[36,62988,62989],{"class":405},"\"发一条友善的评论\"",[36,62991,54788],{"class":2443},[36,62993,47],{"class":42},[36,62995,4181],{"class":405},[36,62997,62998],{"class":2443}," maxlength",[36,63000,47],{"class":42},[36,63002,63003],{"class":405},"\"200\"",[36,63005,55791],{"class":42},[36,63007,54765],{"class":51777},[36,63009,51784],{"class":42},[36,63011,63012,63014,63016,63019,63021],{"class":38,"line":33171},[36,63013,51818],{"class":42},[36,63015,54364],{"class":51777},[36,63017,63018],{"class":42},">发布\u003C\u002F",[36,63020,54364],{"class":51777},[36,63022,51784],{"class":42},[36,63024,63025,63027,63029],{"class":38,"line":33177},[36,63026,52894],{"class":42},[36,63028,52088],{"class":51777},[36,63030,51784],{"class":42},[36,63032,63033,63035,63037,63039,63041,63043],{"class":38,"line":33188},[36,63034,52621],{"class":42},[36,63036,52088],{"class":51777},[36,63038,53963],{"class":2443},[36,63040,47],{"class":42},[36,63042,62948],{"class":405},[36,63044,51784],{"class":42},[36,63046,63047,63049,63051,63053,63055,63058,63061,63063],{"class":38,"line":33194},[36,63048,51818],{"class":42},[36,63050,36],{"class":51777},[36,63052,53963],{"class":2443},[36,63054,47],{"class":42},[36,63056,63057],{"class":405},"\"total\"",[36,63059,63060],{"class":42},">0\u002F200字\u003C\u002F",[36,63062,36],{"class":51777},[36,63064,51784],{"class":42},[36,63066,63067,63069,63071],{"class":38,"line":33200},[36,63068,52894],{"class":42},[36,63070,52088],{"class":51777},[36,63072,51784],{"class":42},[36,63074,63075,63077,63079,63081,63083,63086],{"class":38,"line":33206},[36,63076,52621],{"class":42},[36,63078,52088],{"class":51777},[36,63080,53963],{"class":2443},[36,63082,47],{"class":42},[36,63084,63085],{"class":405},"\"list\"",[36,63087,51784],{"class":42},[36,63089,63090,63092,63094,63096,63098,63101,63104,63106,63109],{"class":38,"line":33212},[36,63091,51818],{"class":42},[36,63093,52088],{"class":51777},[36,63095,53963],{"class":2443},[36,63097,47],{"class":42},[36,63099,63100],{"class":405},"\"item\"",[36,63102,63103],{"class":2443}," style",[36,63105,47],{"class":42},[36,63107,63108],{"class":405},"\"display: none;\"",[36,63110,51784],{"class":42},[36,63112,63113,63115,63117,63119,63121,63123,63125,63127],{"class":38,"line":33218},[36,63114,55711],{"class":42},[36,63116,1057],{"class":51777},[36,63118,53963],{"class":2443},[36,63120,47],{"class":42},[36,63122,62963],{"class":405},[36,63124,55791],{"class":42},[36,63126,1057],{"class":51777},[36,63128,51784],{"class":42},[36,63130,63131,63133,63135,63137,63139,63142],{"class":38,"line":33224},[36,63132,55711],{"class":42},[36,63134,52088],{"class":51777},[36,63136,53963],{"class":2443},[36,63138,47],{"class":42},[36,63140,63141],{"class":405},"\"info\"",[36,63143,51784],{"class":42},[36,63145,63146,63148,63150,63152,63154,63157,63160,63162],{"class":38,"line":33230},[36,63147,55779],{"class":42},[36,63149,19],{"class":51777},[36,63151,53963],{"class":2443},[36,63153,47],{"class":42},[36,63155,63156],{"class":405},"\"name\"",[36,63158,63159],{"class":42},">清风徐来\u003C\u002F",[36,63161,19],{"class":51777},[36,63163,51784],{"class":42},[36,63165,63166,63168,63170,63172,63174,63177,63180,63182],{"class":38,"line":33250},[36,63167,55779],{"class":42},[36,63169,19],{"class":51777},[36,63171,53963],{"class":2443},[36,63173,47],{"class":42},[36,63175,63176],{"class":405},"\"text\"",[36,63178,63179],{"class":42},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,63181,19],{"class":51777},[36,63183,51784],{"class":42},[36,63185,63186,63188,63190,63192,63194,63197,63200,63202],{"class":38,"line":33256},[36,63187,55779],{"class":42},[36,63189,19],{"class":51777},[36,63191,53963],{"class":2443},[36,63193,47],{"class":42},[36,63195,63196],{"class":405},"\"time\"",[36,63198,63199],{"class":42},">2022-10-10 20:29:21\u003C\u002F",[36,63201,19],{"class":51777},[36,63203,51784],{"class":42},[36,63205,63206,63208,63210],{"class":38,"line":33272},[36,63207,55884],{"class":42},[36,63209,52088],{"class":51777},[36,63211,51784],{"class":42},[36,63213,63214,63216,63218],{"class":38,"line":33278},[36,63215,52253],{"class":42},[36,63217,52088],{"class":51777},[36,63219,51784],{"class":42},[36,63221,63222,63224,63226],{"class":38,"line":33292},[36,63223,52894],{"class":42},[36,63225,52088],{"class":51777},[36,63227,51784],{"class":42},[36,63229,63230,63232,63234],{"class":38,"line":33298},[36,63231,52621],{"class":42},[36,63233,52290],{"class":51777},[36,63235,51784],{"class":42},[36,63237,63238,63240,63243,63245,63247,63249,63251,63254],{"class":38,"line":33313},[36,63239,11701],{"class":46},[36,63241,63242],{"class":53}," tx",[36,63244,14044],{"class":46},[36,63246,54873],{"class":42},[36,63248,54876],{"class":2443},[36,63250,345],{"class":42},[36,63252,63253],{"class":405},"'#tx'",[36,63255,63],{"class":42},[36,63257,63258,63260,63263,63265,63267,63269,63271,63274],{"class":38,"line":33319},[36,63259,11701],{"class":46},[36,63261,63262],{"class":53}," total",[36,63264,14044],{"class":46},[36,63266,54873],{"class":42},[36,63268,54876],{"class":2443},[36,63270,345],{"class":42},[36,63272,63273],{"class":405},"'.total'",[36,63275,63],{"class":42},[36,63277,63278],{"class":38,"line":33328},[36,63279,63280],{"class":69},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,63282,63283,63286,63288,63290,63292,63294,63296],{"class":38,"line":33334},[36,63284,63285],{"class":42},"    tx.",[36,63287,58290],{"class":2443},[36,63289,345],{"class":42},[36,63291,61804],{"class":405},[36,63293,12915],{"class":42},[36,63295,54926],{"class":46},[36,63297,54929],{"class":42},[36,63299,63300,63303,63305],{"class":38,"line":33343},[36,63301,63302],{"class":42},"      total.style.opacity ",[36,63304,47],{"class":46},[36,63306,56176],{"class":53},[36,63308,63309],{"class":38,"line":33349},[36,63310,33938],{"class":42},[36,63312,63313],{"class":38,"line":33355},[36,63314,63315],{"class":69},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,63317,63318,63320,63322,63324,63326,63328,63330],{"class":38,"line":33364},[36,63319,63285],{"class":42},[36,63321,58290],{"class":2443},[36,63323,345],{"class":42},[36,63325,61865],{"class":405},[36,63327,12915],{"class":42},[36,63329,54926],{"class":46},[36,63331,54929],{"class":42},[36,63333,63334,63336,63338],{"class":38,"line":33370},[36,63335,63302],{"class":42},[36,63337,47],{"class":46},[36,63339,47810],{"class":53},[36,63341,63342],{"class":38,"line":33381},[36,63343,33938],{"class":42},[36,63345,63346],{"class":38,"line":33387},[36,63347,63348],{"class":69},"    \u002F\u002F 3. 检测用户输入\n",[36,63350,63351,63353,63355,63357,63360,63362,63364],{"class":38,"line":33406},[36,63352,63285],{"class":42},[36,63354,58290],{"class":2443},[36,63356,345],{"class":42},[36,63358,63359],{"class":405},"'input'",[36,63361,12915],{"class":42},[36,63363,54926],{"class":46},[36,63365,54929],{"class":42},[36,63367,63368],{"class":38,"line":33412},[36,63369,63370],{"class":69},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,63372,63373,63376,63378,63381,63384,63386,63389,63391,63393],{"class":38,"line":33423},[36,63374,63375],{"class":42},"      total.innerHTML ",[36,63377,47],{"class":46},[36,63379,63380],{"class":405}," `${",[36,63382,63383],{"class":42},"tx",[36,63385,1171],{"class":405},[36,63387,63388],{"class":42},"value",[36,63390,1171],{"class":405},[36,63392,52445],{"class":53},[36,63394,63395],{"class":405},"}\u002F200字`\n",[36,63397,63398],{"class":38,"line":33429},[36,63399,33938],{"class":42},[36,63401,63402],{"class":38,"line":33449},[36,63403,2880],{"emptyLinePlaceholder":553},[36,63405,63406],{"class":38,"line":33465},[36,63407,63408],{"class":69},"    \u002F\u002F const str = 'andy'\n",[36,63410,63411],{"class":38,"line":33471},[36,63412,63413],{"class":69},"    \u002F\u002F console.log(str.length)\n",[36,63415,63416,63418,63420],{"class":38,"line":33485},[36,63417,52894],{"class":42},[36,63419,52290],{"class":51777},[36,63421,51784],{"class":42},[36,63423,63424,63426,63428],{"class":38,"line":33491},[36,63425,52262],{"class":42},[36,63427,52277],{"class":51777},[36,63429,51784],{"class":42},[36,63431,63432],{"class":38,"line":33497},[36,63433,2880],{"emptyLinePlaceholder":553},[36,63435,63436,63438,63440],{"class":38,"line":33508},[36,63437,52262],{"class":42},[36,63439,51112],{"class":51777},[36,63441,51784],{"class":42},[22478,63443,63445],{"id":63444},"_3254-change事件","3.2.5.4 change事件",[19,63447,63448],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63450,63451],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63453,63454],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,63456,63458],{"className":51110,"code":63457,"language":51112,"meta":31,"style":31},"\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",[33,63459,63460,63470,63484,63488,63496,63510,63530,63542,63550,63554,63562,63576,63584,63602,63620,63632,63636,63644,63652,63656],{"__ignoreMap":31},[36,63461,63462,63464,63466,63468],{"class":38,"line":39},[36,63463,51774],{"class":42},[36,63465,51778],{"class":51777},[36,63467,51781],{"class":2443},[36,63469,51784],{"class":42},[36,63471,63472,63474,63476,63478,63480,63482],{"class":38,"line":66},[36,63473,1523],{"class":42},[36,63475,51112],{"class":51777},[36,63477,51793],{"class":2443},[36,63479,47],{"class":42},[36,63481,51798],{"class":405},[36,63483,51784],{"class":42},[36,63485,63486],{"class":38,"line":73},[36,63487,2880],{"emptyLinePlaceholder":553},[36,63489,63490,63492,63494],{"class":38,"line":79},[36,63491,1523],{"class":42},[36,63493,51811],{"class":51777},[36,63495,51784],{"class":42},[36,63497,63498,63500,63502,63504,63506,63508],{"class":38,"line":85},[36,63499,52621],{"class":42},[36,63501,51821],{"class":51777},[36,63503,51824],{"class":2443},[36,63505,47],{"class":42},[36,63507,51829],{"class":405},[36,63509,51784],{"class":42},[36,63511,63512,63514,63516,63518,63520,63522,63524,63526,63528],{"class":38,"line":419},[36,63513,52621],{"class":42},[36,63515,51821],{"class":51777},[36,63517,15400],{"class":2443},[36,63519,47],{"class":42},[36,63521,51868],{"class":405},[36,63523,51848],{"class":2443},[36,63525,47],{"class":42},[36,63527,51875],{"class":405},[36,63529,51784],{"class":42},[36,63531,63532,63534,63536,63538,63540],{"class":38,"line":425},[36,63533,52621],{"class":42},[36,63535,51884],{"class":51777},[36,63537,51887],{"class":42},[36,63539,51884],{"class":51777},[36,63541,51784],{"class":42},[36,63543,63544,63546,63548],{"class":38,"line":431},[36,63545,52262],{"class":42},[36,63547,51811],{"class":51777},[36,63549,51784],{"class":42},[36,63551,63552],{"class":38,"line":437},[36,63553,2880],{"emptyLinePlaceholder":553},[36,63555,63556,63558,63560],{"class":38,"line":443},[36,63557,1523],{"class":42},[36,63559,52277],{"class":51777},[36,63561,51784],{"class":42},[36,63563,63564,63566,63568,63570,63572,63574],{"class":38,"line":2092},[36,63565,52621],{"class":42},[36,63567,54298],{"class":51777},[36,63569,54301],{"class":2443},[36,63571,47],{"class":42},[36,63573,63176],{"class":405},[36,63575,51784],{"class":42},[36,63577,63578,63580,63582],{"class":38,"line":2097},[36,63579,52621],{"class":42},[36,63581,52290],{"class":51777},[36,63583,51784],{"class":42},[36,63585,63586,63588,63590,63592,63594,63596,63598,63600],{"class":38,"line":2103},[36,63587,11701],{"class":46},[36,63589,61082],{"class":53},[36,63591,14044],{"class":46},[36,63593,54873],{"class":42},[36,63595,54876],{"class":2443},[36,63597,345],{"class":42},[36,63599,63359],{"class":405},[36,63601,63],{"class":42},[36,63603,63604,63607,63609,63611,63614,63616,63618],{"class":38,"line":2108},[36,63605,63606],{"class":42},"    input.",[36,63608,58290],{"class":2443},[36,63610,345],{"class":42},[36,63612,63613],{"class":405},"'change'",[36,63615,12915],{"class":42},[36,63617,54926],{"class":46},[36,63619,54929],{"class":42},[36,63621,63622,63624,63626,63628,63630],{"class":38,"line":2122},[36,63623,58721],{"class":42},[36,63625,58724],{"class":2443},[36,63627,345],{"class":42},[36,63629,1206],{"class":53},[36,63631,63],{"class":42},[36,63633,63634],{"class":38,"line":2127},[36,63635,33938],{"class":42},[36,63637,63638,63640,63642],{"class":38,"line":2133},[36,63639,52894],{"class":42},[36,63641,52290],{"class":51777},[36,63643,51784],{"class":42},[36,63645,63646,63648,63650],{"class":38,"line":2154},[36,63647,52262],{"class":42},[36,63649,52277],{"class":51777},[36,63651,51784],{"class":42},[36,63653,63654],{"class":38,"line":2159},[36,63655,2880],{"emptyLinePlaceholder":553},[36,63657,63658,63660,63662],{"class":38,"line":2173},[36,63659,52262],{"class":42},[36,63661,51112],{"class":51777},[36,63663,51784],{"class":42},[19,63665,63666],{},"总结：内容发生改变才回去触发",[596,63668,63670],{"id":63669},"_326-事件对象","3.2.6 事件对象",[22478,63672,63674],{"id":63673},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63676,63677],{},[519,63678],{"alt":31,"src":63679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63681,63682],{},[519,63683],{"alt":31,"src":63684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63686,63687],{},"点击一次，就输出了事件对象，它是个对象",[19,63689,63690],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63692,63693],{},[519,63694],{"alt":31,"src":63695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22478,63697,63699],{"id":63698},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63701,63702],{},[519,63703],{"alt":31,"src":63704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63706,63707],{},"实现按特殊字符才是实现打印输出效果：",[26,63709,63711],{"className":53544,"code":63710,"language":53546,"meta":31,"style":31},"\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",[33,63712,63713,63721,63726,63740,63748,63753,63758,63763,63768,63773,63778,63783,63788,63793,63797,63801,63809],{"__ignoreMap":31},[36,63714,63715,63717,63719],{"class":38,"line":39},[36,63716,1523],{"class":42},[36,63718,52277],{"class":51777},[36,63720,51784],{"class":42},[36,63722,63723],{"class":38,"line":66},[36,63724,63725],{"class":69},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,63727,63728,63730,63732,63734,63736,63738],{"class":38,"line":73},[36,63729,52621],{"class":42},[36,63731,54298],{"class":51777},[36,63733,54301],{"class":2443},[36,63735,47],{"class":42},[36,63737,63176],{"class":405},[36,63739,51784],{"class":42},[36,63741,63742,63744,63746],{"class":38,"line":79},[36,63743,52621],{"class":42},[36,63745,52290],{"class":51777},[36,63747,51784],{"class":42},[36,63749,63750],{"class":38,"line":85},[36,63751,63752],{"class":42},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,63754,63755],{"class":38,"line":419},[36,63756,63757],{"class":42},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,63759,63760],{"class":38,"line":425},[36,63761,63762],{"class":42},"    \u002F\u002F   console.log(e);\n",[36,63764,63765],{"class":38,"line":431},[36,63766,63767],{"class":42},"    \u002F\u002F })\n",[36,63769,63770],{"class":38,"line":437},[36,63771,63772],{"class":42},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,63774,63775],{"class":38,"line":443},[36,63776,63777],{"class":42},"    const input = document.querySelector('input')\n",[36,63779,63780],{"class":38,"line":2092},[36,63781,63782],{"class":42},"    input.addEventListener('keyup', function (e) {\n",[36,63784,63785],{"class":38,"line":2097},[36,63786,63787],{"class":42},"      if (e.key === 'Enter') {\n",[36,63789,63790],{"class":38,"line":2103},[36,63791,63792],{"class":42},"        console.log('我按下了回车键')\n",[36,63794,63795],{"class":38,"line":2108},[36,63796,52875],{"class":42},[36,63798,63799],{"class":38,"line":2122},[36,63800,33938],{"class":42},[36,63802,63803,63805,63807],{"class":38,"line":2127},[36,63804,52894],{"class":42},[36,63806,52290],{"class":51777},[36,63808,51784],{"class":42},[36,63810,63811,63813,63815],{"class":38,"line":2133},[36,63812,52262],{"class":42},[36,63814,52277],{"class":51777},[36,63816,51784],{"class":42},[22478,63818,63820],{"id":63819},"_3263-trim方法","3.2.6.3 trim方法",[19,63822,63823],{},[519,63824],{"alt":31,"src":63825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63827,63828],{},[519,63829],{"alt":31,"src":63830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63832,63833],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63835,63836],{},"str.trim()",[596,63838,63840],{"id":63839},"_327-环境对象","3.2.7 环境对象",[19,63842,63843],{},[519,63844],{"alt":31,"src":63845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63847,63848],{},[519,63849],{"alt":31,"src":63850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63852,63853],{},[519,63854],{"alt":31,"src":63855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63857,63858],{},"实际函数调用是window.fn()",[19,63860,63861],{},"普通函数里面this指向的是window",[1620,63863,63864,63867,63870],{},[582,63865,63866],{},"在普通函数下，this指向的是window",[582,63868,63869],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[582,63871,63872],{},"箭头函数没有this",[19,63874,63875],{},"粗略记法就是：谁调用，this就指向谁",[19,63877,63878],{},[519,63879],{"alt":31,"src":63880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63882,63883],{},[519,63884],{"alt":31,"src":63885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63887,63888],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63890,63891],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,63893,63895],{"className":53544,"code":63894,"language":53546,"meta":31,"style":31},"\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",[33,63896,63897,63905,63917,63925,63930,63935,63940,63945,63949,63957],{"__ignoreMap":31},[36,63898,63899,63901,63903],{"class":38,"line":39},[36,63900,1523],{"class":42},[36,63902,52277],{"class":51777},[36,63904,51784],{"class":42},[36,63906,63907,63909,63911,63913,63915],{"class":38,"line":66},[36,63908,52621],{"class":42},[36,63910,54364],{"class":51777},[36,63912,54370],{"class":42},[36,63914,54364],{"class":51777},[36,63916,51784],{"class":42},[36,63918,63919,63921,63923],{"class":38,"line":73},[36,63920,52621],{"class":42},[36,63922,52290],{"class":51777},[36,63924,51784],{"class":42},[36,63926,63927],{"class":38,"line":79},[36,63928,63929],{"class":42},"    const button = document.querySelector('button')\n",[36,63931,63932],{"class":38,"line":85},[36,63933,63934],{"class":42},"    button.addEventListener('click', function () {\n",[36,63936,63937],{"class":38,"line":419},[36,63938,63939],{"class":42},"      \u002F\u002F console.log(this);\n",[36,63941,63942],{"class":38,"line":425},[36,63943,63944],{"class":42},"      this.style.color = 'pink'\n",[36,63946,63947],{"class":38,"line":431},[36,63948,33938],{"class":42},[36,63950,63951,63953,63955],{"class":38,"line":437},[36,63952,52894],{"class":42},[36,63954,52290],{"class":51777},[36,63956,51784],{"class":42},[36,63958,63959,63961,63963],{"class":38,"line":443},[36,63960,52262],{"class":42},[36,63962,52277],{"class":51777},[36,63964,51784],{"class":42},[596,63966,63968],{"id":63967},"_328-回调函数","3.2.8 回调函数",[19,63970,63971],{},[519,63972],{"alt":31,"src":63973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63975,63976],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63978,11812],{},[1620,63980,63981,63984,63987],{},[582,63982,63983],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[582,63985,63986],{},"回调函数本质还是函数，只不过把它当成参数使用",[582,63988,63989],{},"使用匿名函数做为回调函数比较常见",[596,63991,63993],{"id":63992},"_329-tab栏切换","3.2.9 tab栏切换",[19,63995,63996],{},[519,63997],{"alt":31,"src":63998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,64000,64002],{"className":51110,"code":64001,"language":51112,"meta":31,"style":31},"\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",[33,64003,64004,64014,64028,64032,64040,64054,64074,64094,64107,64115,64121,64131,64141,64145,64149,64156,64169,64182,64194,64210,64214,64218,64225,64237,64249,64261,64271,64281,64285,64289,64298,64310,64321,64333,64337,64341,64349,64359,64369,64379,64383,64387,64397,64411,64423,64427,64431,64443,64454,64471,64481,64485,64489,64504,64515,64525,64529,64533,64540,64555,64559,64563,64571,64581,64585,64589,64598,64608,64612,64620,64628,64632,64640,64655,64670,64683,64691,64725,64752,64779,64806,64833,64841,64849,64864,64901,64936,64971,65006,65041,65049,65057,65065,65070,65075,65095,65100,65129,65134,65139,65157,65162,65167,65172,65194,65199,65215,65219,65224,65229,65250,65255,65284,65288,65293,65297,65305,65313,65317],{"__ignoreMap":31},[36,64005,64006,64008,64010,64012],{"class":38,"line":39},[36,64007,51774],{"class":42},[36,64009,51778],{"class":51777},[36,64011,51781],{"class":2443},[36,64013,51784],{"class":42},[36,64015,64016,64018,64020,64022,64024,64026],{"class":38,"line":66},[36,64017,1523],{"class":42},[36,64019,51112],{"class":51777},[36,64021,51793],{"class":2443},[36,64023,47],{"class":42},[36,64025,51798],{"class":405},[36,64027,51784],{"class":42},[36,64029,64030],{"class":38,"line":73},[36,64031,2880],{"emptyLinePlaceholder":553},[36,64033,64034,64036,64038],{"class":38,"line":79},[36,64035,1523],{"class":42},[36,64037,51811],{"class":51777},[36,64039,51784],{"class":42},[36,64041,64042,64044,64046,64048,64050,64052],{"class":38,"line":85},[36,64043,52621],{"class":42},[36,64045,51821],{"class":51777},[36,64047,51824],{"class":2443},[36,64049,47],{"class":42},[36,64051,51829],{"class":405},[36,64053,59604],{"class":42},[36,64055,64056,64058,64060,64062,64064,64066,64068,64070,64072],{"class":38,"line":419},[36,64057,52621],{"class":42},[36,64059,51821],{"class":51777},[36,64061,51840],{"class":2443},[36,64063,47],{"class":42},[36,64065,51845],{"class":405},[36,64067,51848],{"class":2443},[36,64069,47],{"class":42},[36,64071,51853],{"class":405},[36,64073,59604],{"class":42},[36,64075,64076,64078,64080,64082,64084,64086,64088,64090,64092],{"class":38,"line":425},[36,64077,52621],{"class":42},[36,64079,51821],{"class":51777},[36,64081,15400],{"class":2443},[36,64083,47],{"class":42},[36,64085,51868],{"class":405},[36,64087,51848],{"class":2443},[36,64089,47],{"class":42},[36,64091,51875],{"class":405},[36,64093,59604],{"class":42},[36,64095,64096,64098,64100,64103,64105],{"class":38,"line":431},[36,64097,52621],{"class":42},[36,64099,51884],{"class":51777},[36,64101,64102],{"class":42},">tab栏切换\u003C\u002F",[36,64104,51884],{"class":51777},[36,64106,51784],{"class":42},[36,64108,64109,64111,64113],{"class":38,"line":437},[36,64110,52621],{"class":42},[36,64112,539],{"class":51777},[36,64114,51784],{"class":42},[36,64116,64117,64119],{"class":38,"line":443},[36,64118,6883],{"class":51777},[36,64120,16052],{"class":42},[36,64122,64123,64125,64127,64129],{"class":38,"line":2092},[36,64124,55183],{"class":53},[36,64126,51914],{"class":42},[36,64128,812],{"class":53},[36,64130,1774],{"class":42},[36,64132,64133,64135,64137,64139],{"class":38,"line":2097},[36,64134,55172],{"class":53},[36,64136,51914],{"class":42},[36,64138,812],{"class":53},[36,64140,1774],{"class":42},[36,64142,64143],{"class":38,"line":2103},[36,64144,2667],{"class":42},[36,64146,64147],{"class":38,"line":2108},[36,64148,2880],{"emptyLinePlaceholder":553},[36,64150,64151,64154],{"class":38,"line":2122},[36,64152,64153],{"class":2443},"    .tab",[36,64155,16052],{"class":42},[36,64157,64158,64160,64162,64165,64167],{"class":38,"line":2127},[36,64159,55248],{"class":53},[36,64161,51914],{"class":42},[36,64163,64164],{"class":53},"590",[36,64166,51969],{"class":46},[36,64168,1774],{"class":42},[36,64170,64171,64173,64175,64178,64180],{"class":38,"line":2133},[36,64172,55262],{"class":53},[36,64174,51914],{"class":42},[36,64176,64177],{"class":53},"340",[36,64179,51969],{"class":46},[36,64181,1774],{"class":42},[36,64183,64184,64186,64188,64190,64192],{"class":38,"line":2154},[36,64185,55183],{"class":53},[36,64187,51914],{"class":42},[36,64189,1313],{"class":53},[36,64191,51969],{"class":46},[36,64193,1774],{"class":42},[36,64195,64196,64198,64200,64202,64204,64206,64208],{"class":38,"line":2159},[36,64197,62454],{"class":53},[36,64199,51914],{"class":42},[36,64201,54],{"class":53},[36,64203,51969],{"class":46},[36,64205,51998],{"class":53},[36,64207,62721],{"class":53},[36,64209,1774],{"class":42},[36,64211,64212],{"class":38,"line":2173},[36,64213,2667],{"class":42},[36,64215,64216],{"class":38,"line":2178},[36,64217,2880],{"emptyLinePlaceholder":553},[36,64219,64220,64223],{"class":38,"line":2207},[36,64221,64222],{"class":2443},"    .tab-nav",[36,64224,16052],{"class":42},[36,64226,64227,64229,64231,64233,64235],{"class":38,"line":2212},[36,64228,55248],{"class":53},[36,64230,51914],{"class":42},[36,64232,930],{"class":53},[36,64234,947],{"class":46},[36,64236,1774],{"class":42},[36,64238,64239,64241,64243,64245,64247],{"class":38,"line":2229},[36,64240,55262],{"class":53},[36,64242,51914],{"class":42},[36,64244,1520],{"class":53},[36,64246,51969],{"class":46},[36,64248,1774],{"class":42},[36,64250,64251,64253,64255,64257,64259],{"class":38,"line":2234},[36,64252,57836],{"class":53},[36,64254,51914],{"class":42},[36,64256,1520],{"class":53},[36,64258,51969],{"class":46},[36,64260,1774],{"class":42},[36,64262,64263,64265,64267,64269],{"class":38,"line":2239},[36,64264,55486],{"class":53},[36,64266,51914],{"class":42},[36,64268,51954],{"class":53},[36,64270,1774],{"class":42},[36,64272,64273,64275,64277,64279],{"class":38,"line":2244},[36,64274,55497],{"class":53},[36,64276,51914],{"class":42},[36,64278,52145],{"class":53},[36,64280,1774],{"class":42},[36,64282,64283],{"class":38,"line":2258},[36,64284,2667],{"class":42},[36,64286,64287],{"class":38,"line":2263},[36,64288,2880],{"emptyLinePlaceholder":553},[36,64290,64291,64293,64296],{"class":38,"line":3057},[36,64292,64222],{"class":2443},[36,64294,64295],{"class":51777}," h3",[36,64297,16052],{"class":42},[36,64299,64300,64302,64304,64306,64308],{"class":38,"line":3071},[36,64301,55399],{"class":53},[36,64303,51914],{"class":42},[36,64305,1413],{"class":53},[36,64307,51969],{"class":46},[36,64309,1774],{"class":42},[36,64311,64312,64314,64316,64319],{"class":38,"line":3079},[36,64313,62811],{"class":53},[36,64315,51914],{"class":42},[36,64317,64318],{"class":53},"normal",[36,64320,1774],{"class":42},[36,64322,64323,64325,64327,64329,64331],{"class":38,"line":3084},[36,64324,62477],{"class":53},[36,64326,51914],{"class":42},[36,64328,1313],{"class":53},[36,64330,51969],{"class":46},[36,64332,1774],{"class":42},[36,64334,64335],{"class":38,"line":3090},[36,64336,2667],{"class":42},[36,64338,64339],{"class":38,"line":3096},[36,64340,2880],{"emptyLinePlaceholder":553},[36,64342,64343,64345,64347],{"class":38,"line":3101},[36,64344,64222],{"class":2443},[36,64346,61769],{"class":51777},[36,64348,16052],{"class":42},[36,64350,64351,64353,64355,64357],{"class":38,"line":8428},[36,64352,55209],{"class":53},[36,64354,51914],{"class":42},[36,64356,55214],{"class":53},[36,64358,1774],{"class":42},[36,64360,64361,64363,64365,64367],{"class":38,"line":8452},[36,64362,55486],{"class":53},[36,64364,51914],{"class":42},[36,64366,51954],{"class":53},[36,64368,1774],{"class":42},[36,64370,64371,64373,64375,64377],{"class":38,"line":8457},[36,64372,55497],{"class":53},[36,64374,51914],{"class":42},[36,64376,52057],{"class":53},[36,64378,1774],{"class":42},[36,64380,64381],{"class":38,"line":8463},[36,64382,2667],{"class":42},[36,64384,64385],{"class":38,"line":8490},[36,64386,2880],{"emptyLinePlaceholder":553},[36,64388,64389,64391,64393,64395],{"class":38,"line":8495},[36,64390,64222],{"class":2443},[36,64392,61769],{"class":51777},[36,64394,55552],{"class":51777},[36,64396,16052],{"class":42},[36,64398,64399,64401,64403,64405,64407,64409],{"class":38,"line":8501},[36,64400,55183],{"class":53},[36,64402,51914],{"class":42},[36,64404,812],{"class":53},[36,64406,9430],{"class":53},[36,64408,51969],{"class":46},[36,64410,1774],{"class":42},[36,64412,64413,64415,64417,64419,64421],{"class":38,"line":8513},[36,64414,55399],{"class":53},[36,64416,51914],{"class":42},[36,64418,1162],{"class":53},[36,64420,51969],{"class":46},[36,64422,1774],{"class":42},[36,64424,64425],{"class":38,"line":8525},[36,64426,2667],{"class":42},[36,64428,64429],{"class":38,"line":8537},[36,64430,2880],{"emptyLinePlaceholder":553},[36,64432,64433,64435,64437,64439,64441],{"class":38,"line":10196},[36,64434,64222],{"class":2443},[36,64436,61769],{"class":51777},[36,64438,55552],{"class":51777},[36,64440,1879],{"class":51777},[36,64442,16052],{"class":42},[36,64444,64445,64448,64450,64452],{"class":38,"line":10221},[36,64446,64447],{"class":53},"      text-decoration",[36,64449,51914],{"class":42},[36,64451,55214],{"class":53},[36,64453,1774],{"class":42},[36,64455,64456,64458,64460,64462,64464,64466,64469],{"class":38,"line":10244},[36,64457,62709],{"class":53},[36,64459,51914],{"class":42},[36,64461,96],{"class":53},[36,64463,51969],{"class":46},[36,64465,51998],{"class":53},[36,64467,64468],{"class":53}," transparent",[36,64470,1774],{"class":42},[36,64472,64473,64475,64477,64479],{"class":38,"line":10268},[36,64474,57893],{"class":53},[36,64476,51914],{"class":42},[36,64478,62846],{"class":53},[36,64480,1774],{"class":42},[36,64482,64483],{"class":38,"line":10273},[36,64484,2667],{"class":42},[36,64486,64487],{"class":38,"line":10278},[36,64488,2880],{"emptyLinePlaceholder":553},[36,64490,64491,64493,64495,64497,64499,64502],{"class":38,"line":10283},[36,64492,64222],{"class":2443},[36,64494,61769],{"class":51777},[36,64496,55552],{"class":51777},[36,64498,1879],{"class":51777},[36,64500,64501],{"class":2443},".active",[36,64503,16052],{"class":42},[36,64505,64506,64508,64510,64513],{"class":38,"line":10292},[36,64507,62268],{"class":53},[36,64509,51914],{"class":42},[36,64511,64512],{"class":53},"#e1251b",[36,64514,1774],{"class":42},[36,64516,64517,64519,64521,64523],{"class":38,"line":10297},[36,64518,57893],{"class":53},[36,64520,51914],{"class":42},[36,64522,64512],{"class":53},[36,64524,1774],{"class":42},[36,64526,64527],{"class":38,"line":10303},[36,64528,2667],{"class":42},[36,64530,64531],{"class":38,"line":10324},[36,64532,2880],{"emptyLinePlaceholder":553},[36,64534,64535,64538],{"class":38,"line":10330},[36,64536,64537],{"class":2443},"    .tab-content",[36,64539,16052],{"class":42},[36,64541,64542,64544,64546,64548,64551,64553],{"class":38,"line":10344},[36,64543,55172],{"class":53},[36,64545,51914],{"class":42},[36,64547,812],{"class":53},[36,64549,64550],{"class":53}," 16",[36,64552,51969],{"class":46},[36,64554,1774],{"class":42},[36,64556,64557],{"class":38,"line":10350},[36,64558,2667],{"class":42},[36,64560,64561],{"class":38,"line":10377},[36,64562,2880],{"emptyLinePlaceholder":553},[36,64564,64565,64567,64569],{"class":38,"line":10386},[36,64566,64537],{"class":2443},[36,64568,62651],{"class":2443},[36,64570,16052],{"class":42},[36,64572,64573,64575,64577,64579],{"class":38,"line":10392},[36,64574,55486],{"class":53},[36,64576,51914],{"class":42},[36,64578,55214],{"class":53},[36,64580,1774],{"class":42},[36,64582,64583],{"class":38,"line":10400},[36,64584,2667],{"class":42},[36,64586,64587],{"class":38,"line":10405},[36,64588,2880],{"emptyLinePlaceholder":553},[36,64590,64591,64593,64596],{"class":38,"line":17084},[36,64592,64537],{"class":2443},[36,64594,64595],{"class":2443}," .item.active",[36,64597,16052],{"class":42},[36,64599,64600,64602,64604,64606],{"class":38,"line":17090},[36,64601,55486],{"class":53},[36,64603,51914],{"class":42},[36,64605,61346],{"class":53},[36,64607,1774],{"class":42},[36,64609,64610],{"class":38,"line":17113},[36,64611,2667],{"class":42},[36,64613,64614,64616,64618],{"class":38,"line":17119},[36,64615,52894],{"class":42},[36,64617,539],{"class":51777},[36,64619,51784],{"class":42},[36,64621,64622,64624,64626],{"class":38,"line":17142},[36,64623,52262],{"class":42},[36,64625,51811],{"class":51777},[36,64627,51784],{"class":42},[36,64629,64630],{"class":38,"line":17156},[36,64631,2880],{"emptyLinePlaceholder":553},[36,64633,64634,64636,64638],{"class":38,"line":17176},[36,64635,1523],{"class":42},[36,64637,52277],{"class":51777},[36,64639,51784],{"class":42},[36,64641,64642,64644,64646,64648,64650,64653],{"class":38,"line":17182},[36,64643,52621],{"class":42},[36,64645,52088],{"class":51777},[36,64647,53963],{"class":2443},[36,64649,47],{"class":42},[36,64651,64652],{"class":405},"\"tab\"",[36,64654,51784],{"class":42},[36,64656,64657,64659,64661,64663,64665,64668],{"class":38,"line":17193},[36,64658,51818],{"class":42},[36,64660,52088],{"class":51777},[36,64662,53963],{"class":2443},[36,64664,47],{"class":42},[36,64666,64667],{"class":405},"\"tab-nav\"",[36,64669,51784],{"class":42},[36,64671,64672,64674,64676,64679,64681],{"class":38,"line":17216},[36,64673,55711],{"class":42},[36,64675,596],{"class":51777},[36,64677,64678],{"class":42},">每日特价\u003C\u002F",[36,64680,596],{"class":51777},[36,64682,51784],{"class":42},[36,64684,64685,64687,64689],{"class":38,"line":17238},[36,64686,55711],{"class":42},[36,64688,1620],{"class":51777},[36,64690,51784],{"class":42},[36,64692,64693,64695,64697,64699,64701,64703,64705,64707,64709,64711,64714,64717,64719,64721,64723],{"class":38,"line":17243},[36,64694,55779],{"class":42},[36,64696,582],{"class":51777},[36,64698,61529],{"class":42},[36,64700,43],{"class":51777},[36,64702,53963],{"class":2443},[36,64704,47],{"class":42},[36,64706,60183],{"class":405},[36,64708,61534],{"class":2443},[36,64710,47],{"class":42},[36,64712,64713],{"class":405},"\"javascript:;\"",[36,64715,64716],{"class":42},">精选\u003C\u002F",[36,64718,43],{"class":51777},[36,64720,55791],{"class":42},[36,64722,582],{"class":51777},[36,64724,51784],{"class":42},[36,64726,64727,64729,64731,64733,64735,64737,64739,64741,64744,64746,64748,64750],{"class":38,"line":17249},[36,64728,55779],{"class":42},[36,64730,582],{"class":51777},[36,64732,61529],{"class":42},[36,64734,43],{"class":51777},[36,64736,61534],{"class":2443},[36,64738,47],{"class":42},[36,64740,64713],{"class":405},[36,64742,64743],{"class":42},">美食\u003C\u002F",[36,64745,43],{"class":51777},[36,64747,55791],{"class":42},[36,64749,582],{"class":51777},[36,64751,51784],{"class":42},[36,64753,64754,64756,64758,64760,64762,64764,64766,64768,64771,64773,64775,64777],{"class":38,"line":17263},[36,64755,55779],{"class":42},[36,64757,582],{"class":51777},[36,64759,61529],{"class":42},[36,64761,43],{"class":51777},[36,64763,61534],{"class":2443},[36,64765,47],{"class":42},[36,64767,64713],{"class":405},[36,64769,64770],{"class":42},">百货\u003C\u002F",[36,64772,43],{"class":51777},[36,64774,55791],{"class":42},[36,64776,582],{"class":51777},[36,64778,51784],{"class":42},[36,64780,64781,64783,64785,64787,64789,64791,64793,64795,64798,64800,64802,64804],{"class":38,"line":17276},[36,64782,55779],{"class":42},[36,64784,582],{"class":51777},[36,64786,61529],{"class":42},[36,64788,43],{"class":51777},[36,64790,61534],{"class":2443},[36,64792,47],{"class":42},[36,64794,64713],{"class":405},[36,64796,64797],{"class":42},">个护\u003C\u002F",[36,64799,43],{"class":51777},[36,64801,55791],{"class":42},[36,64803,582],{"class":51777},[36,64805,51784],{"class":42},[36,64807,64808,64810,64812,64814,64816,64818,64820,64822,64825,64827,64829,64831],{"class":38,"line":17281},[36,64809,55779],{"class":42},[36,64811,582],{"class":51777},[36,64813,61529],{"class":42},[36,64815,43],{"class":51777},[36,64817,61534],{"class":2443},[36,64819,47],{"class":42},[36,64821,64713],{"class":405},[36,64823,64824],{"class":42},">预告\u003C\u002F",[36,64826,43],{"class":51777},[36,64828,55791],{"class":42},[36,64830,582],{"class":51777},[36,64832,51784],{"class":42},[36,64834,64835,64837,64839],{"class":38,"line":17295},[36,64836,55884],{"class":42},[36,64838,1620],{"class":51777},[36,64840,51784],{"class":42},[36,64842,64843,64845,64847],{"class":38,"line":17300},[36,64844,52253],{"class":42},[36,64846,52088],{"class":51777},[36,64848,51784],{"class":42},[36,64850,64851,64853,64855,64857,64859,64862],{"class":38,"line":17306},[36,64852,51818],{"class":42},[36,64854,52088],{"class":51777},[36,64856,53963],{"class":2443},[36,64858,47],{"class":42},[36,64860,64861],{"class":405},"\"tab-content\"",[36,64863,51784],{"class":42},[36,64865,64866,64868,64870,64872,64874,64877,64879,64881,64883,64885,64888,64890,64892,64894,64897,64899],{"class":38,"line":17311},[36,64867,55711],{"class":42},[36,64869,52088],{"class":51777},[36,64871,53963],{"class":2443},[36,64873,47],{"class":42},[36,64875,64876],{"class":405},"\"item active\"",[36,64878,61529],{"class":42},[36,64880,519],{"class":51777},[36,64882,55716],{"class":2443},[36,64884,47],{"class":42},[36,64886,64887],{"class":405},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,64889,55724],{"class":2443},[36,64891,47],{"class":42},[36,64893,8132],{"class":405},[36,64895,64896],{"class":42}," \u002F>\u003C\u002F",[36,64898,52088],{"class":51777},[36,64900,51784],{"class":42},[36,64902,64903,64905,64907,64909,64911,64913,64915,64917,64919,64921,64924,64926,64928,64930,64932,64934],{"class":38,"line":17325},[36,64904,55711],{"class":42},[36,64906,52088],{"class":51777},[36,64908,53963],{"class":2443},[36,64910,47],{"class":42},[36,64912,63100],{"class":405},[36,64914,61529],{"class":42},[36,64916,519],{"class":51777},[36,64918,55716],{"class":2443},[36,64920,47],{"class":42},[36,64922,64923],{"class":405},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,64925,55724],{"class":2443},[36,64927,47],{"class":42},[36,64929,8132],{"class":405},[36,64931,64896],{"class":42},[36,64933,52088],{"class":51777},[36,64935,51784],{"class":42},[36,64937,64938,64940,64942,64944,64946,64948,64950,64952,64954,64956,64959,64961,64963,64965,64967,64969],{"class":38,"line":17330},[36,64939,55711],{"class":42},[36,64941,52088],{"class":51777},[36,64943,53963],{"class":2443},[36,64945,47],{"class":42},[36,64947,63100],{"class":405},[36,64949,61529],{"class":42},[36,64951,519],{"class":51777},[36,64953,55716],{"class":2443},[36,64955,47],{"class":42},[36,64957,64958],{"class":405},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,64960,55724],{"class":2443},[36,64962,47],{"class":42},[36,64964,8132],{"class":405},[36,64966,64896],{"class":42},[36,64968,52088],{"class":51777},[36,64970,51784],{"class":42},[36,64972,64973,64975,64977,64979,64981,64983,64985,64987,64989,64991,64994,64996,64998,65000,65002,65004],{"class":38,"line":17335},[36,64974,55711],{"class":42},[36,64976,52088],{"class":51777},[36,64978,53963],{"class":2443},[36,64980,47],{"class":42},[36,64982,63100],{"class":405},[36,64984,61529],{"class":42},[36,64986,519],{"class":51777},[36,64988,55716],{"class":2443},[36,64990,47],{"class":42},[36,64992,64993],{"class":405},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,64995,55724],{"class":2443},[36,64997,47],{"class":42},[36,64999,8132],{"class":405},[36,65001,64896],{"class":42},[36,65003,52088],{"class":51777},[36,65005,51784],{"class":42},[36,65007,65008,65010,65012,65014,65016,65018,65020,65022,65024,65026,65029,65031,65033,65035,65037,65039],{"class":38,"line":17349},[36,65009,55711],{"class":42},[36,65011,52088],{"class":51777},[36,65013,53963],{"class":2443},[36,65015,47],{"class":42},[36,65017,63100],{"class":405},[36,65019,61529],{"class":42},[36,65021,519],{"class":51777},[36,65023,55716],{"class":2443},[36,65025,47],{"class":42},[36,65027,65028],{"class":405},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,65030,55724],{"class":2443},[36,65032,47],{"class":42},[36,65034,8132],{"class":405},[36,65036,64896],{"class":42},[36,65038,52088],{"class":51777},[36,65040,51784],{"class":42},[36,65042,65043,65045,65047],{"class":38,"line":17361},[36,65044,52253],{"class":42},[36,65046,52088],{"class":51777},[36,65048,51784],{"class":42},[36,65050,65051,65053,65055],{"class":38,"line":17366},[36,65052,52894],{"class":42},[36,65054,52088],{"class":51777},[36,65056,51784],{"class":42},[36,65058,65059,65061,65063],{"class":38,"line":17379},[36,65060,52621],{"class":42},[36,65062,52290],{"class":51777},[36,65064,51784],{"class":42},[36,65066,65067],{"class":38,"line":17384},[36,65068,65069],{"class":69},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,65071,65072],{"class":38,"line":17389},[36,65073,65074],{"class":69},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,65076,65077,65079,65082,65084,65086,65088,65090,65093],{"class":38,"line":17394},[36,65078,11701],{"class":46},[36,65080,65081],{"class":53}," as",[36,65083,14044],{"class":46},[36,65085,54873],{"class":42},[36,65087,56158],{"class":2443},[36,65089,345],{"class":42},[36,65091,65092],{"class":405},"'.tab-nav a'",[36,65094,63],{"class":42},[36,65096,65097],{"class":38,"line":17407},[36,65098,65099],{"class":69},"    \u002F\u002F console.log(as) \n",[36,65101,65102,65104,65106,65108,65110,65112,65114,65116,65118,65121,65123,65125,65127],{"class":38,"line":17412},[36,65103,3681],{"class":46},[36,65105,2138],{"class":42},[36,65107,52324],{"class":46},[36,65109,9918],{"class":42},[36,65111,47],{"class":46},[36,65113,4573],{"class":53},[36,65115,9925],{"class":42},[36,65117,1523],{"class":46},[36,65119,65120],{"class":42}," as.",[36,65122,52445],{"class":53},[36,65124,3694],{"class":42},[36,65126,2772],{"class":46},[36,65128,12922],{"class":42},[36,65130,65131],{"class":38,"line":33110},[36,65132,65133],{"class":69},"      \u002F\u002F console.log(as[i])\n",[36,65135,65136],{"class":38,"line":33116},[36,65137,65138],{"class":69},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,65140,65141,65144,65146,65148,65151,65153,65155],{"class":38,"line":33122},[36,65142,65143],{"class":42},"      as[i].",[36,65145,58290],{"class":2443},[36,65147,345],{"class":42},[36,65149,65150],{"class":405},"'mouseenter'",[36,65152,12915],{"class":42},[36,65154,54926],{"class":46},[36,65156,54929],{"class":42},[36,65158,65159],{"class":38,"line":33128},[36,65160,65161],{"class":69},"        \u002F\u002F console.log('鼠标经过')\n",[36,65163,65164],{"class":38,"line":33134},[36,65165,65166],{"class":69},"        \u002F\u002F 排他思想  \n",[36,65168,65169],{"class":38,"line":33145},[36,65170,65171],{"class":69},"        \u002F\u002F 干掉别人 移除类active\n",[36,65173,65174,65176,65178,65180,65183,65185,65187,65189,65192],{"class":38,"line":33151},[36,65175,52402],{"class":42},[36,65177,54876],{"class":2443},[36,65179,345],{"class":42},[36,65181,65182],{"class":405},"'.tab-nav .active'",[36,65184,57480],{"class":42},[36,65186,57483],{"class":2443},[36,65188,345],{"class":42},[36,65190,65191],{"class":405},"'active'",[36,65193,63],{"class":42},[36,65195,65196],{"class":38,"line":33171},[36,65197,65198],{"class":69},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,65200,65201,65204,65207,65209,65211,65213],{"class":38,"line":33177},[36,65202,65203],{"class":53},"        this",[36,65205,65206],{"class":42},".classList.",[36,65208,5814],{"class":2443},[36,65210,345],{"class":42},[36,65212,65191],{"class":405},[36,65214,63],{"class":42},[36,65216,65217],{"class":38,"line":33188},[36,65218,2880],{"emptyLinePlaceholder":553},[36,65220,65221],{"class":38,"line":33194},[36,65222,65223],{"class":69},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,65225,65226],{"class":38,"line":33200},[36,65227,65228],{"class":69},"        \u002F\u002F 干掉别人\n",[36,65230,65231,65233,65235,65237,65240,65242,65244,65246,65248],{"class":38,"line":33206},[36,65232,52402],{"class":42},[36,65234,54876],{"class":2443},[36,65236,345],{"class":42},[36,65238,65239],{"class":405},"'.tab-content .active'",[36,65241,57480],{"class":42},[36,65243,57483],{"class":2443},[36,65245,345],{"class":42},[36,65247,65191],{"class":405},[36,65249,63],{"class":42},[36,65251,65252],{"class":38,"line":33212},[36,65253,65254],{"class":69},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,65256,65257,65259,65261,65263,65266,65268,65270,65272,65274,65276,65278,65280,65282],{"class":38,"line":33218},[36,65258,52402],{"class":42},[36,65260,54876],{"class":2443},[36,65262,345],{"class":42},[36,65264,65265],{"class":405},"`.tab-content .item:nth-child(${",[36,65267,1057],{"class":42},[36,65269,46043],{"class":46},[36,65271,25599],{"class":53},[36,65273,57509],{"class":405},[36,65275,57480],{"class":42},[36,65277,5814],{"class":2443},[36,65279,345],{"class":42},[36,65281,65191],{"class":405},[36,65283,63],{"class":42},[36,65285,65286],{"class":38,"line":33224},[36,65287,2880],{"emptyLinePlaceholder":553},[36,65289,65290],{"class":38,"line":33230},[36,65291,65292],{"class":42},"      })\n",[36,65294,65295],{"class":38,"line":33250},[36,65296,2667],{"class":42},[36,65298,65299,65301,65303],{"class":38,"line":33256},[36,65300,52894],{"class":42},[36,65302,52290],{"class":51777},[36,65304,51784],{"class":42},[36,65306,65307,65309,65311],{"class":38,"line":33272},[36,65308,52262],{"class":42},[36,65310,52277],{"class":51777},[36,65312,51784],{"class":42},[36,65314,65315],{"class":38,"line":33278},[36,65316,2880],{"emptyLinePlaceholder":553},[36,65318,65319,65321,65323],{"class":38,"line":33292},[36,65320,52262],{"class":42},[36,65322,51112],{"class":51777},[36,65324,51784],{"class":42},[19,65326,65327],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65329,65330],{},"在监听事件中，this指向的就是他的调用者",[19,65332,65333],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65335,54197],{},[19,65337,65338],{},"(function () {",[19,65340,65341],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65343,65344],{},"list.addEventListener('click', function (e) {",[19,65346,65347],{},"if (e.target.tagName === 'A') {",[19,65349,65350],{},"\u002F\u002F 排他思想",[19,65352,65353],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65355,65356],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65358,65359],{},"\u002F\u002F console.log(old);",[19,65361,65362],{},"\u002F\u002F 判断",[19,65364,65365],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65367,65368],{},"if (old) old.classList.remove('active')",[19,65370,65371],{},"e.target.classList.add('active')",[19,65373,1559],{},[19,65375,52941],{},[19,65377,65378],{},"})();",[596,65380,65382],{"id":65381},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,65384,65386],{"className":51110,"code":65385,"language":51112,"meta":31,"style":31},"\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",[33,65387,65388,65398,65402,65410,65414,65428,65442,65454,65462,65468,65478,65488,65492,65496,65503,65515,65526,65543,65556,65570,65580,65584,65588,65595,65606,65624,65634,65646,65650,65654,65661,65678,65689,65701,65705,65709,65716,65728,65732,65740,65748,65752,65760,65768,65776,65791,65835,65843,65856,65869,65882,65890,65898,65906,65934,65942,65954,65967,65980,65988,65996,66004,66030,66038,66051,66063,66076,66084,66092,66100,66126,66134,66147,66159,66172,66180,66188,66196,66201,66221,66226,66246,66251,66268,66273,66281,66286,66315,66328,66332,66336,66341,66345,66373,66378,66395,66400,66405,66410,66415,66441,66445,66449,66457,66465,66469],{"__ignoreMap":31},[36,65389,65390,65392,65394,65396],{"class":38,"line":39},[36,65391,51774],{"class":42},[36,65393,51778],{"class":51777},[36,65395,51781],{"class":2443},[36,65397,51784],{"class":42},[36,65399,65400],{"class":38,"line":66},[36,65401,2880],{"emptyLinePlaceholder":553},[36,65403,65404,65406,65408],{"class":38,"line":73},[36,65405,1523],{"class":42},[36,65407,51112],{"class":51777},[36,65409,51784],{"class":42},[36,65411,65412],{"class":38,"line":79},[36,65413,2880],{"emptyLinePlaceholder":553},[36,65415,65416,65418,65420,65422,65424,65426],{"class":38,"line":85},[36,65417,1523],{"class":42},[36,65419,51811],{"class":51777},[36,65421,51793],{"class":2443},[36,65423,47],{"class":42},[36,65425,51798],{"class":405},[36,65427,51784],{"class":42},[36,65429,65430,65432,65434,65436,65438,65440],{"class":38,"line":419},[36,65431,52621],{"class":42},[36,65433,51821],{"class":51777},[36,65435,51824],{"class":2443},[36,65437,47],{"class":42},[36,65439,51829],{"class":405},[36,65441,51784],{"class":42},[36,65443,65444,65446,65448,65450,65452],{"class":38,"line":425},[36,65445,52621],{"class":42},[36,65447,51884],{"class":51777},[36,65449,55791],{"class":42},[36,65451,51884],{"class":51777},[36,65453,51784],{"class":42},[36,65455,65456,65458,65460],{"class":38,"line":431},[36,65457,52621],{"class":42},[36,65459,539],{"class":51777},[36,65461,51784],{"class":42},[36,65463,65464,65466],{"class":38,"line":437},[36,65465,6883],{"class":51777},[36,65467,16052],{"class":42},[36,65469,65470,65472,65474,65476],{"class":38,"line":443},[36,65471,55183],{"class":53},[36,65473,51914],{"class":42},[36,65475,812],{"class":53},[36,65477,1774],{"class":42},[36,65479,65480,65482,65484,65486],{"class":38,"line":2092},[36,65481,55172],{"class":53},[36,65483,51914],{"class":42},[36,65485,812],{"class":53},[36,65487,1774],{"class":42},[36,65489,65490],{"class":38,"line":2097},[36,65491,2667],{"class":42},[36,65493,65494],{"class":38,"line":2103},[36,65495,2880],{"emptyLinePlaceholder":553},[36,65497,65498,65501],{"class":38,"line":2108},[36,65499,65500],{"class":51777},"    table",[36,65502,16052],{"class":42},[36,65504,65505,65508,65510,65513],{"class":38,"line":2122},[36,65506,65507],{"class":53},"      border-collapse",[36,65509,51914],{"class":42},[36,65511,65512],{"class":53},"collapse",[36,65514,1774],{"class":42},[36,65516,65517,65520,65522,65524],{"class":38,"line":2127},[36,65518,65519],{"class":53},"      border-spacing",[36,65521,51914],{"class":42},[36,65523,812],{"class":53},[36,65525,1774],{"class":42},[36,65527,65528,65530,65532,65534,65536,65538,65541],{"class":38,"line":2133},[36,65529,62454],{"class":53},[36,65531,51914],{"class":42},[36,65533,54],{"class":53},[36,65535,51969],{"class":46},[36,65537,51998],{"class":53},[36,65539,65540],{"class":53}," #c0c0c0",[36,65542,1774],{"class":42},[36,65544,65545,65547,65549,65552,65554],{"class":38,"line":2154},[36,65546,55248],{"class":53},[36,65548,51914],{"class":42},[36,65550,65551],{"class":53},"500",[36,65553,51969],{"class":46},[36,65555,1774],{"class":42},[36,65557,65558,65560,65562,65564,65566,65568],{"class":38,"line":2159},[36,65559,55183],{"class":53},[36,65561,51914],{"class":42},[36,65563,930],{"class":53},[36,65565,51969],{"class":46},[36,65567,52033],{"class":53},[36,65569,1774],{"class":42},[36,65571,65572,65574,65576,65578],{"class":38,"line":2173},[36,65573,57763],{"class":53},[36,65575,51914],{"class":42},[36,65577,52069],{"class":53},[36,65579,1774],{"class":42},[36,65581,65582],{"class":38,"line":2178},[36,65583,2667],{"class":42},[36,65585,65586],{"class":38,"line":2207},[36,65587,2880],{"emptyLinePlaceholder":553},[36,65589,65590,65593],{"class":38,"line":2212},[36,65591,65592],{"class":51777},"    th",[36,65594,16052],{"class":42},[36,65596,65597,65599,65601,65604],{"class":38,"line":2229},[36,65598,55361],{"class":53},[36,65600,51914],{"class":42},[36,65602,65603],{"class":53},"#09c",[36,65605,1774],{"class":42},[36,65607,65608,65611,65613,65615,65617,65619,65622],{"class":38,"line":2234},[36,65609,65610],{"class":53},"      font",[36,65612,51914],{"class":42},[36,65614,62816],{"class":53},[36,65616,64550],{"class":53},[36,65618,51969],{"class":46},[36,65620,65621],{"class":405}," \"微软雅黑\"",[36,65623,1774],{"class":42},[36,65625,65626,65628,65630,65632],{"class":38,"line":2239},[36,65627,57893],{"class":53},[36,65629,51914],{"class":42},[36,65631,61319],{"class":53},[36,65633,1774],{"class":42},[36,65635,65636,65638,65640,65642,65644],{"class":38,"line":2244},[36,65637,55262],{"class":53},[36,65639,51914],{"class":42},[36,65641,1413],{"class":53},[36,65643,51969],{"class":46},[36,65645,1774],{"class":42},[36,65647,65648],{"class":38,"line":2258},[36,65649,2667],{"class":42},[36,65651,65652],{"class":38,"line":2263},[36,65653,2880],{"emptyLinePlaceholder":553},[36,65655,65656,65659],{"class":38,"line":3057},[36,65657,65658],{"class":51777},"    td",[36,65660,16052],{"class":42},[36,65662,65663,65665,65667,65669,65671,65673,65676],{"class":38,"line":3071},[36,65664,62454],{"class":53},[36,65666,51914],{"class":42},[36,65668,54],{"class":53},[36,65670,51969],{"class":46},[36,65672,51998],{"class":53},[36,65674,65675],{"class":53}," #d0d0d0",[36,65677,1774],{"class":42},[36,65679,65680,65682,65684,65687],{"class":38,"line":3079},[36,65681,57893],{"class":53},[36,65683,51914],{"class":42},[36,65685,65686],{"class":53},"#404060",[36,65688,1774],{"class":42},[36,65690,65691,65693,65695,65697,65699],{"class":38,"line":3084},[36,65692,55172],{"class":53},[36,65694,51914],{"class":42},[36,65696,1062],{"class":53},[36,65698,51969],{"class":46},[36,65700,1774],{"class":42},[36,65702,65703],{"class":38,"line":3090},[36,65704,2667],{"class":42},[36,65706,65707],{"class":38,"line":3096},[36,65708,2880],{"emptyLinePlaceholder":553},[36,65710,65711,65714],{"class":38,"line":3101},[36,65712,65713],{"class":2443},"    .allCheck",[36,65715,16052],{"class":42},[36,65717,65718,65720,65722,65724,65726],{"class":38,"line":8428},[36,65719,55248],{"class":53},[36,65721,51914],{"class":42},[36,65723,1225],{"class":53},[36,65725,51969],{"class":46},[36,65727,1774],{"class":42},[36,65729,65730],{"class":38,"line":8452},[36,65731,2667],{"class":42},[36,65733,65734,65736,65738],{"class":38,"line":8457},[36,65735,52894],{"class":42},[36,65737,539],{"class":51777},[36,65739,51784],{"class":42},[36,65741,65742,65744,65746],{"class":38,"line":8463},[36,65743,52262],{"class":42},[36,65745,51811],{"class":51777},[36,65747,51784],{"class":42},[36,65749,65750],{"class":38,"line":8490},[36,65751,2880],{"emptyLinePlaceholder":553},[36,65753,65754,65756,65758],{"class":38,"line":8495},[36,65755,1523],{"class":42},[36,65757,52277],{"class":51777},[36,65759,51784],{"class":42},[36,65761,65762,65764,65766],{"class":38,"line":8501},[36,65763,52621],{"class":42},[36,65765,758],{"class":51777},[36,65767,51784],{"class":42},[36,65769,65770,65772,65774],{"class":38,"line":8513},[36,65771,51818],{"class":42},[36,65773,764],{"class":51777},[36,65775,51784],{"class":42},[36,65777,65778,65780,65782,65784,65786,65789],{"class":38,"line":8525},[36,65779,55711],{"class":42},[36,65781,767],{"class":51777},[36,65783,53963],{"class":2443},[36,65785,47],{"class":42},[36,65787,65788],{"class":405},"\"allCheck\"",[36,65790,51784],{"class":42},[36,65792,65793,65795,65797,65799,65801,65803,65805,65807,65809,65811,65813,65816,65819,65821,65823,65825,65828,65831,65833],{"class":38,"line":8537},[36,65794,55779],{"class":42},[36,65796,54298],{"class":51777},[36,65798,54301],{"class":2443},[36,65800,47],{"class":42},[36,65802,54306],{"class":405},[36,65804,15400],{"class":2443},[36,65806,47],{"class":42},[36,65808,8132],{"class":405},[36,65810,15439],{"class":2443},[36,65812,47],{"class":42},[36,65814,65815],{"class":405},"\"checkAll\"",[36,65817,65818],{"class":42},"> \u003C",[36,65820,36],{"class":51777},[36,65822,53963],{"class":2443},[36,65824,47],{"class":42},[36,65826,65827],{"class":405},"\"all\"",[36,65829,65830],{"class":42},">全选\u003C\u002F",[36,65832,36],{"class":51777},[36,65834,51784],{"class":42},[36,65836,65837,65839,65841],{"class":38,"line":10196},[36,65838,55884],{"class":42},[36,65840,767],{"class":51777},[36,65842,51784],{"class":42},[36,65844,65845,65847,65849,65852,65854],{"class":38,"line":10221},[36,65846,55711],{"class":42},[36,65848,767],{"class":51777},[36,65850,65851],{"class":42},">商品\u003C\u002F",[36,65853,767],{"class":51777},[36,65855,51784],{"class":42},[36,65857,65858,65860,65862,65865,65867],{"class":38,"line":10244},[36,65859,55711],{"class":42},[36,65861,767],{"class":51777},[36,65863,65864],{"class":42},">商家\u003C\u002F",[36,65866,767],{"class":51777},[36,65868,51784],{"class":42},[36,65870,65871,65873,65875,65878,65880],{"class":38,"line":10268},[36,65872,55711],{"class":42},[36,65874,767],{"class":51777},[36,65876,65877],{"class":42},">价格\u003C\u002F",[36,65879,767],{"class":51777},[36,65881,51784],{"class":42},[36,65883,65884,65886,65888],{"class":38,"line":10273},[36,65885,52253],{"class":42},[36,65887,764],{"class":51777},[36,65889,51784],{"class":42},[36,65891,65892,65894,65896],{"class":38,"line":10278},[36,65893,51818],{"class":42},[36,65895,764],{"class":51777},[36,65897,51784],{"class":42},[36,65899,65900,65902,65904],{"class":38,"line":10283},[36,65901,55711],{"class":42},[36,65903,810],{"class":51777},[36,65905,51784],{"class":42},[36,65907,65908,65910,65912,65914,65916,65918,65920,65922,65925,65927,65929,65932],{"class":38,"line":10292},[36,65909,55779],{"class":42},[36,65911,54298],{"class":51777},[36,65913,54301],{"class":2443},[36,65915,47],{"class":42},[36,65917,54306],{"class":405},[36,65919,15400],{"class":2443},[36,65921,47],{"class":42},[36,65923,65924],{"class":405},"\"check\"",[36,65926,53963],{"class":2443},[36,65928,47],{"class":42},[36,65930,65931],{"class":405},"\"ck\"",[36,65933,51784],{"class":42},[36,65935,65936,65938,65940],{"class":38,"line":10297},[36,65937,55884],{"class":42},[36,65939,810],{"class":51777},[36,65941,51784],{"class":42},[36,65943,65944,65946,65948,65950,65952],{"class":38,"line":10303},[36,65945,55711],{"class":42},[36,65947,810],{"class":51777},[36,65949,61650],{"class":42},[36,65951,810],{"class":51777},[36,65953,51784],{"class":42},[36,65955,65956,65958,65960,65963,65965],{"class":38,"line":10324},[36,65957,55711],{"class":42},[36,65959,810],{"class":51777},[36,65961,65962],{"class":42},">小米\u003C\u002F",[36,65964,810],{"class":51777},[36,65966,51784],{"class":42},[36,65968,65969,65971,65973,65976,65978],{"class":38,"line":10330},[36,65970,55711],{"class":42},[36,65972,810],{"class":51777},[36,65974,65975],{"class":42},">￥1999\u003C\u002F",[36,65977,810],{"class":51777},[36,65979,51784],{"class":42},[36,65981,65982,65984,65986],{"class":38,"line":10344},[36,65983,52253],{"class":42},[36,65985,764],{"class":51777},[36,65987,51784],{"class":42},[36,65989,65990,65992,65994],{"class":38,"line":10350},[36,65991,51818],{"class":42},[36,65993,764],{"class":51777},[36,65995,51784],{"class":42},[36,65997,65998,66000,66002],{"class":38,"line":10377},[36,65999,55711],{"class":42},[36,66001,810],{"class":51777},[36,66003,51784],{"class":42},[36,66005,66006,66008,66010,66012,66014,66016,66018,66020,66022,66024,66026,66028],{"class":38,"line":10386},[36,66007,55779],{"class":42},[36,66009,54298],{"class":51777},[36,66011,54301],{"class":2443},[36,66013,47],{"class":42},[36,66015,54306],{"class":405},[36,66017,15400],{"class":2443},[36,66019,47],{"class":42},[36,66021,65924],{"class":405},[36,66023,53963],{"class":2443},[36,66025,47],{"class":42},[36,66027,65931],{"class":405},[36,66029,51784],{"class":42},[36,66031,66032,66034,66036],{"class":38,"line":10392},[36,66033,55884],{"class":42},[36,66035,810],{"class":51777},[36,66037,51784],{"class":42},[36,66039,66040,66042,66044,66047,66049],{"class":38,"line":10400},[36,66041,55711],{"class":42},[36,66043,810],{"class":51777},[36,66045,66046],{"class":42},">小米净水器\u003C\u002F",[36,66048,810],{"class":51777},[36,66050,51784],{"class":42},[36,66052,66053,66055,66057,66059,66061],{"class":38,"line":10405},[36,66054,55711],{"class":42},[36,66056,810],{"class":51777},[36,66058,65962],{"class":42},[36,66060,810],{"class":51777},[36,66062,51784],{"class":42},[36,66064,66065,66067,66069,66072,66074],{"class":38,"line":17084},[36,66066,55711],{"class":42},[36,66068,810],{"class":51777},[36,66070,66071],{"class":42},">￥4999\u003C\u002F",[36,66073,810],{"class":51777},[36,66075,51784],{"class":42},[36,66077,66078,66080,66082],{"class":38,"line":17090},[36,66079,52253],{"class":42},[36,66081,764],{"class":51777},[36,66083,51784],{"class":42},[36,66085,66086,66088,66090],{"class":38,"line":17113},[36,66087,51818],{"class":42},[36,66089,764],{"class":51777},[36,66091,51784],{"class":42},[36,66093,66094,66096,66098],{"class":38,"line":17119},[36,66095,55711],{"class":42},[36,66097,810],{"class":51777},[36,66099,51784],{"class":42},[36,66101,66102,66104,66106,66108,66110,66112,66114,66116,66118,66120,66122,66124],{"class":38,"line":17142},[36,66103,55779],{"class":42},[36,66105,54298],{"class":51777},[36,66107,54301],{"class":2443},[36,66109,47],{"class":42},[36,66111,54306],{"class":405},[36,66113,15400],{"class":2443},[36,66115,47],{"class":42},[36,66117,65924],{"class":405},[36,66119,53963],{"class":2443},[36,66121,47],{"class":42},[36,66123,65931],{"class":405},[36,66125,51784],{"class":42},[36,66127,66128,66130,66132],{"class":38,"line":17156},[36,66129,55884],{"class":42},[36,66131,810],{"class":51777},[36,66133,51784],{"class":42},[36,66135,66136,66138,66140,66143,66145],{"class":38,"line":17176},[36,66137,55711],{"class":42},[36,66139,810],{"class":51777},[36,66141,66142],{"class":42},">小米电视\u003C\u002F",[36,66144,810],{"class":51777},[36,66146,51784],{"class":42},[36,66148,66149,66151,66153,66155,66157],{"class":38,"line":17182},[36,66150,55711],{"class":42},[36,66152,810],{"class":51777},[36,66154,65962],{"class":42},[36,66156,810],{"class":51777},[36,66158,51784],{"class":42},[36,66160,66161,66163,66165,66168,66170],{"class":38,"line":17193},[36,66162,55711],{"class":42},[36,66164,810],{"class":51777},[36,66166,66167],{"class":42},">￥5999\u003C\u002F",[36,66169,810],{"class":51777},[36,66171,51784],{"class":42},[36,66173,66174,66176,66178],{"class":38,"line":17216},[36,66175,52253],{"class":42},[36,66177,764],{"class":51777},[36,66179,51784],{"class":42},[36,66181,66182,66184,66186],{"class":38,"line":17238},[36,66183,52894],{"class":42},[36,66185,758],{"class":51777},[36,66187,51784],{"class":42},[36,66189,66190,66192,66194],{"class":38,"line":17243},[36,66191,52621],{"class":42},[36,66193,52290],{"class":51777},[36,66195,51784],{"class":42},[36,66197,66198],{"class":38,"line":17249},[36,66199,66200],{"class":69},"    \u002F\u002F 1. 获取大复选框\n",[36,66202,66203,66205,66208,66210,66212,66214,66216,66219],{"class":38,"line":17263},[36,66204,11701],{"class":46},[36,66206,66207],{"class":53}," checkAll",[36,66209,14044],{"class":46},[36,66211,54873],{"class":42},[36,66213,54876],{"class":2443},[36,66215,345],{"class":42},[36,66217,66218],{"class":405},"'#checkAll'",[36,66220,63],{"class":42},[36,66222,66223],{"class":38,"line":17276},[36,66224,66225],{"class":69},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,66227,66228,66230,66233,66235,66237,66239,66241,66244],{"class":38,"line":17281},[36,66229,11701],{"class":46},[36,66231,66232],{"class":53}," cks",[36,66234,14044],{"class":46},[36,66236,54873],{"class":42},[36,66238,56158],{"class":2443},[36,66240,345],{"class":42},[36,66242,66243],{"class":405},"'.ck'",[36,66245,63],{"class":42},[36,66247,66248],{"class":38,"line":17295},[36,66249,66250],{"class":69},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,66252,66253,66256,66258,66260,66262,66264,66266],{"class":38,"line":17300},[36,66254,66255],{"class":42},"    checkAll.",[36,66257,58290],{"class":2443},[36,66259,345],{"class":42},[36,66261,58295],{"class":405},[36,66263,12915],{"class":42},[36,66265,54926],{"class":46},[36,66267,54929],{"class":42},[36,66269,66270],{"class":38,"line":17306},[36,66271,66272],{"class":69},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,66274,66275,66278],{"class":38,"line":17311},[36,66276,66277],{"class":69},"      \u002F\u002F console.log(checkAll.checked)",[36,66279,66280],{"class":69},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,66282,66283],{"class":38,"line":17325},[36,66284,66285],{"class":69},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,66287,66288,66290,66292,66294,66296,66298,66300,66302,66304,66307,66309,66311,66313],{"class":38,"line":17330},[36,66289,52761],{"class":46},[36,66291,2138],{"class":42},[36,66293,52324],{"class":46},[36,66295,9918],{"class":42},[36,66297,47],{"class":46},[36,66299,4573],{"class":53},[36,66301,9925],{"class":42},[36,66303,1523],{"class":46},[36,66305,66306],{"class":42}," cks.",[36,66308,52445],{"class":53},[36,66310,3694],{"class":42},[36,66312,2772],{"class":46},[36,66314,12922],{"class":42},[36,66316,66317,66320,66322,66325],{"class":38,"line":17335},[36,66318,66319],{"class":42},"        cks[i].checked ",[36,66321,47],{"class":46},[36,66323,66324],{"class":53}," this",[36,66326,66327],{"class":42},".checked\n",[36,66329,66330],{"class":38,"line":17349},[36,66331,52875],{"class":42},[36,66333,66334],{"class":38,"line":17361},[36,66335,33938],{"class":42},[36,66337,66338],{"class":38,"line":17366},[36,66339,66340],{"class":69},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,66342,66343],{"class":38,"line":17379},[36,66344,2880],{"emptyLinePlaceholder":553},[36,66346,66347,66349,66351,66353,66355,66357,66359,66361,66363,66365,66367,66369,66371],{"class":38,"line":17384},[36,66348,3681],{"class":46},[36,66350,2138],{"class":42},[36,66352,52324],{"class":46},[36,66354,9918],{"class":42},[36,66356,47],{"class":46},[36,66358,4573],{"class":53},[36,66360,9925],{"class":42},[36,66362,1523],{"class":46},[36,66364,66306],{"class":42},[36,66366,52445],{"class":53},[36,66368,3694],{"class":42},[36,66370,2772],{"class":46},[36,66372,12922],{"class":42},[36,66374,66375],{"class":38,"line":17389},[36,66376,66377],{"class":69},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,66379,66380,66383,66385,66387,66389,66391,66393],{"class":38,"line":17394},[36,66381,66382],{"class":42},"      cks[i].",[36,66384,58290],{"class":2443},[36,66386,345],{"class":42},[36,66388,58295],{"class":405},[36,66390,12915],{"class":42},[36,66392,54926],{"class":46},[36,66394,54929],{"class":42},[36,66396,66397],{"class":38,"line":17407},[36,66398,66399],{"class":69},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,66401,66402],{"class":38,"line":17412},[36,66403,66404],{"class":69},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,66406,66407],{"class":38,"line":33110},[36,66408,66409],{"class":69},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,66411,66412],{"class":38,"line":33116},[36,66413,66414],{"class":69},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,66416,66417,66420,66422,66424,66426,66428,66431,66433,66435,66437,66439],{"class":38,"line":33122},[36,66418,66419],{"class":42},"        checkAll.checked ",[36,66421,47],{"class":46},[36,66423,54873],{"class":42},[36,66425,56158],{"class":2443},[36,66427,345],{"class":42},[36,66429,66430],{"class":405},"'.ck:checked'",[36,66432,31304],{"class":42},[36,66434,52445],{"class":53},[36,66436,58383],{"class":46},[36,66438,66306],{"class":42},[36,66440,56308],{"class":53},[36,66442,66443],{"class":38,"line":33128},[36,66444,65292],{"class":42},[36,66446,66447],{"class":38,"line":33134},[36,66448,2667],{"class":42},[36,66450,66451,66453,66455],{"class":38,"line":33145},[36,66452,52894],{"class":42},[36,66454,52290],{"class":51777},[36,66456,51784],{"class":42},[36,66458,66459,66461,66463],{"class":38,"line":33151},[36,66460,52262],{"class":42},[36,66462,52277],{"class":51777},[36,66464,51784],{"class":42},[36,66466,66467],{"class":38,"line":33171},[36,66468,2880],{"emptyLinePlaceholder":553},[36,66470,66471,66473,66475],{"class":38,"line":33177},[36,66472,52262],{"class":42},[36,66474,51112],{"class":51777},[36,66476,51784],{"class":42},[19,66478,66479],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66481,66482],{},"用好之间比较得到的布尔值！！！",[19,66484,66485,66486,66489,66490,2138,66493,1197,66495,66498],{},"在 JS 里访问的时候，",[33,66487,66488],{},"checkbox.checked"," 是一个 ",[770,66491,66492],{},"布尔值",[33,66494,1843],{},[33,66496,66497],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66500,66501,66502,66505,66506],{},"HTML 的 ",[33,66503,66504],{},"checked=\"checked\""," 只是 ",[770,66507,66508,66509,66512],{},"初始值；JS 的 ",[33,66510,66511],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66514,66515],{},"：checked是一个伪类选择器",[19,66517,66518],{},[519,66519],{"alt":31,"src":66520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66522,66523,66526],{},[66524,66525],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66528,66529],{},[519,66530],{"alt":31,"src":66531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66533,66535],{"id":66534},"_33-dom事件进阶","3.3 DOM事件进阶",[596,66537,66539],{"id":66538},"_331-事件流","3.3.1 事件流",[19,66541,66542],{},[519,66543],{"alt":31,"src":66544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22478,66546,66548],{"id":66547},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66550,66551],{},[519,66552],{"alt":31,"src":66553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,66555,66557],{"className":51110,"code":66556,"language":51112,"meta":31,"style":31},"\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",[33,66558,66559,66569,66583,66587,66595,66609,66629,66641,66649,66656,66668,66680,66690,66694,66698,66705,66717,66729,66739,66743,66751,66759,66763,66771,66786,66805,66813,66821,66841,66861,66877,66888,66896,66913,66924,66932,66949,66960,66968,66976,66984,66988],{"__ignoreMap":31},[36,66560,66561,66563,66565,66567],{"class":38,"line":39},[36,66562,51774],{"class":42},[36,66564,51778],{"class":51777},[36,66566,51781],{"class":2443},[36,66568,51784],{"class":42},[36,66570,66571,66573,66575,66577,66579,66581],{"class":38,"line":66},[36,66572,1523],{"class":42},[36,66574,51112],{"class":51777},[36,66576,51793],{"class":2443},[36,66578,47],{"class":42},[36,66580,51798],{"class":405},[36,66582,51784],{"class":42},[36,66584,66585],{"class":38,"line":73},[36,66586,2880],{"emptyLinePlaceholder":553},[36,66588,66589,66591,66593],{"class":38,"line":79},[36,66590,1523],{"class":42},[36,66592,51811],{"class":51777},[36,66594,51784],{"class":42},[36,66596,66597,66599,66601,66603,66605,66607],{"class":38,"line":85},[36,66598,52621],{"class":42},[36,66600,51821],{"class":51777},[36,66602,51824],{"class":2443},[36,66604,47],{"class":42},[36,66606,51829],{"class":405},[36,66608,51784],{"class":42},[36,66610,66611,66613,66615,66617,66619,66621,66623,66625,66627],{"class":38,"line":419},[36,66612,52621],{"class":42},[36,66614,51821],{"class":51777},[36,66616,15400],{"class":2443},[36,66618,47],{"class":42},[36,66620,51868],{"class":405},[36,66622,51848],{"class":2443},[36,66624,47],{"class":42},[36,66626,51875],{"class":405},[36,66628,51784],{"class":42},[36,66630,66631,66633,66635,66637,66639],{"class":38,"line":425},[36,66632,52621],{"class":42},[36,66634,51884],{"class":51777},[36,66636,51887],{"class":42},[36,66638,51884],{"class":51777},[36,66640,51784],{"class":42},[36,66642,66643,66645,66647],{"class":38,"line":431},[36,66644,52621],{"class":42},[36,66646,539],{"class":51777},[36,66648,51784],{"class":42},[36,66650,66651,66654],{"class":38,"line":437},[36,66652,66653],{"class":2443},"    .father",[36,66655,16052],{"class":42},[36,66657,66658,66660,66662,66664,66666],{"class":38,"line":443},[36,66659,55248],{"class":53},[36,66661,51914],{"class":42},[36,66663,65551],{"class":53},[36,66665,51969],{"class":46},[36,66667,1774],{"class":42},[36,66669,66670,66672,66674,66676,66678],{"class":38,"line":2092},[36,66671,55262],{"class":53},[36,66673,51914],{"class":42},[36,66675,65551],{"class":53},[36,66677,51969],{"class":46},[36,66679,1774],{"class":42},[36,66681,66682,66684,66686,66688],{"class":38,"line":2097},[36,66683,55361],{"class":53},[36,66685,51914],{"class":42},[36,66687,52122],{"class":53},[36,66689,1774],{"class":42},[36,66691,66692],{"class":38,"line":2103},[36,66693,2667],{"class":42},[36,66695,66696],{"class":38,"line":2108},[36,66697,2880],{"emptyLinePlaceholder":553},[36,66699,66700,66703],{"class":38,"line":2122},[36,66701,66702],{"class":2443},"    .son",[36,66704,16052],{"class":42},[36,66706,66707,66709,66711,66713,66715],{"class":38,"line":2127},[36,66708,55248],{"class":53},[36,66710,51914],{"class":42},[36,66712,2202],{"class":53},[36,66714,51969],{"class":46},[36,66716,1774],{"class":42},[36,66718,66719,66721,66723,66725,66727],{"class":38,"line":2133},[36,66720,55262],{"class":53},[36,66722,51914],{"class":42},[36,66724,2202],{"class":53},[36,66726,51969],{"class":46},[36,66728,1774],{"class":42},[36,66730,66731,66733,66735,66737],{"class":38,"line":2154},[36,66732,55361],{"class":53},[36,66734,51914],{"class":42},[36,66736,55366],{"class":53},[36,66738,1774],{"class":42},[36,66740,66741],{"class":38,"line":2159},[36,66742,2667],{"class":42},[36,66744,66745,66747,66749],{"class":38,"line":2173},[36,66746,52894],{"class":42},[36,66748,539],{"class":51777},[36,66750,51784],{"class":42},[36,66752,66753,66755,66757],{"class":38,"line":2178},[36,66754,52262],{"class":42},[36,66756,51811],{"class":51777},[36,66758,51784],{"class":42},[36,66760,66761],{"class":38,"line":2207},[36,66762,2880],{"emptyLinePlaceholder":553},[36,66764,66765,66767,66769],{"class":38,"line":2212},[36,66766,1523],{"class":42},[36,66768,52277],{"class":51777},[36,66770,51784],{"class":42},[36,66772,66773,66775,66777,66779,66781,66784],{"class":38,"line":2229},[36,66774,52621],{"class":42},[36,66776,52088],{"class":51777},[36,66778,53963],{"class":2443},[36,66780,47],{"class":42},[36,66782,66783],{"class":405},"\"father\"",[36,66785,51784],{"class":42},[36,66787,66788,66790,66792,66794,66796,66799,66801,66803],{"class":38,"line":2234},[36,66789,51818],{"class":42},[36,66791,52088],{"class":51777},[36,66793,53963],{"class":2443},[36,66795,47],{"class":42},[36,66797,66798],{"class":405},"\"son\"",[36,66800,55791],{"class":42},[36,66802,52088],{"class":51777},[36,66804,51784],{"class":42},[36,66806,66807,66809,66811],{"class":38,"line":2239},[36,66808,52894],{"class":42},[36,66810,52088],{"class":51777},[36,66812,51784],{"class":42},[36,66814,66815,66817,66819],{"class":38,"line":2244},[36,66816,52621],{"class":42},[36,66818,52290],{"class":51777},[36,66820,51784],{"class":42},[36,66822,66823,66825,66828,66830,66832,66834,66836,66839],{"class":38,"line":2258},[36,66824,11701],{"class":46},[36,66826,66827],{"class":53}," fa",[36,66829,14044],{"class":46},[36,66831,54873],{"class":42},[36,66833,54876],{"class":2443},[36,66835,345],{"class":42},[36,66837,66838],{"class":405},"'.father'",[36,66840,63],{"class":42},[36,66842,66843,66845,66848,66850,66852,66854,66856,66859],{"class":38,"line":2263},[36,66844,11701],{"class":46},[36,66846,66847],{"class":53}," son",[36,66849,14044],{"class":46},[36,66851,54873],{"class":42},[36,66853,54876],{"class":2443},[36,66855,345],{"class":42},[36,66857,66858],{"class":405},"'.son'",[36,66860,63],{"class":42},[36,66862,66863,66865,66867,66869,66871,66873,66875],{"class":38,"line":3057},[36,66864,52884],{"class":42},[36,66866,58290],{"class":2443},[36,66868,345],{"class":42},[36,66870,58295],{"class":405},[36,66872,12915],{"class":42},[36,66874,54926],{"class":46},[36,66876,54929],{"class":42},[36,66878,66879,66881,66883,66886],{"class":38,"line":3071},[36,66880,59402],{"class":2443},[36,66882,345],{"class":42},[36,66884,66885],{"class":405},"'woshiu1'",[36,66887,63],{"class":42},[36,66889,66890,66892,66894],{"class":38,"line":3079},[36,66891,55012],{"class":42},[36,66893,1843],{"class":53},[36,66895,63],{"class":42},[36,66897,66898,66901,66903,66905,66907,66909,66911],{"class":38,"line":3084},[36,66899,66900],{"class":42},"    fa.",[36,66902,58290],{"class":2443},[36,66904,345],{"class":42},[36,66906,58295],{"class":405},[36,66908,12915],{"class":42},[36,66910,54926],{"class":46},[36,66912,54929],{"class":42},[36,66914,66915,66917,66919,66922],{"class":38,"line":3090},[36,66916,59402],{"class":2443},[36,66918,345],{"class":42},[36,66920,66921],{"class":405},"'1'",[36,66923,63],{"class":42},[36,66925,66926,66928,66930],{"class":38,"line":3096},[36,66927,55012],{"class":42},[36,66929,1843],{"class":53},[36,66931,63],{"class":42},[36,66933,66934,66937,66939,66941,66943,66945,66947],{"class":38,"line":3101},[36,66935,66936],{"class":42},"    son.",[36,66938,58290],{"class":2443},[36,66940,345],{"class":42},[36,66942,58295],{"class":405},[36,66944,12915],{"class":42},[36,66946,54926],{"class":46},[36,66948,54929],{"class":42},[36,66950,66951,66953,66955,66958],{"class":38,"line":8428},[36,66952,59402],{"class":2443},[36,66954,345],{"class":42},[36,66956,66957],{"class":405},"'2'",[36,66959,63],{"class":42},[36,66961,66962,66964,66966],{"class":38,"line":8452},[36,66963,55012],{"class":42},[36,66965,1843],{"class":53},[36,66967,63],{"class":42},[36,66969,66970,66972,66974],{"class":38,"line":8457},[36,66971,52894],{"class":42},[36,66973,52290],{"class":51777},[36,66975,51784],{"class":42},[36,66977,66978,66980,66982],{"class":38,"line":8463},[36,66979,52262],{"class":42},[36,66981,52277],{"class":51777},[36,66983,51784],{"class":42},[36,66985,66986],{"class":38,"line":8490},[36,66987,2880],{"emptyLinePlaceholder":553},[36,66989,66990,66992,66994],{"class":38,"line":8495},[36,66991,52262],{"class":42},[36,66993,51112],{"class":51777},[36,66995,51784],{"class":42},[19,66997,66998],{},[519,66999],{"alt":31,"src":67000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67002,67003],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22478,67005,67007],{"id":67006},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67009,67010],{},[519,67011],{"alt":31,"src":67012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67014,67015],{},"反着来",[19,67017,67018],{},"注意是同名事件，比如都是‘click’",[22478,67020,67022],{"id":67021},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67024,67025],{},[519,67026],{"alt":31,"src":67027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22478,67029,67031],{"id":67030},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67033,67034],{},[519,67035],{"alt":31,"src":67036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67038,67039],{},[519,67040],{"alt":31,"src":67041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22478,67043,67045],{"id":67044},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[579,67047,67048],{},[582,67049,67050],{},"事件类型的区别",[19,67052,67053],{},[519,67054],{"alt":31,"src":67055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67057,67058],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[579,67060,67061],{"start":66},[582,67062,67063],{},"注册事件的区别",[19,67065,67066],{},[519,67067],{"alt":31,"src":67068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22478,67070,67072],{"id":67071},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67074,67075],{},[519,67076],{"alt":31,"src":67077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67079,67080],{},[519,67081],{"alt":31,"src":67082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,67084,67086],{"className":53544,"code":67085,"language":53546,"meta":31,"style":31},"\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",[33,67087,67088,67096,67113,67136,67144,67149,67154,67159,67163,67171,67179],{"__ignoreMap":31},[36,67089,67090,67092,67094],{"class":38,"line":39},[36,67091,1523],{"class":42},[36,67093,52277],{"class":51777},[36,67095,51784],{"class":42},[36,67097,67098,67100,67103,67106,67108,67111],{"class":38,"line":66},[36,67099,52621],{"class":42},[36,67101,67102],{"class":51777},"form",[36,67104,67105],{"class":2443}," action",[36,67107,47],{"class":42},[36,67109,67110],{"class":405},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,67112,51784],{"class":42},[36,67114,67115,67117,67119,67121,67123,67126,67129,67131,67134],{"class":38,"line":73},[36,67116,51818],{"class":42},[36,67118,54298],{"class":51777},[36,67120,54301],{"class":2443},[36,67122,47],{"class":42},[36,67124,67125],{"class":405},"\"submit\"",[36,67127,67128],{"class":2443}," value",[36,67130,47],{"class":42},[36,67132,67133],{"class":405},"\"免费注册\"",[36,67135,51784],{"class":42},[36,67137,67138,67140,67142],{"class":38,"line":79},[36,67139,51818],{"class":42},[36,67141,52290],{"class":51777},[36,67143,51784],{"class":42},[36,67145,67146],{"class":38,"line":85},[36,67147,67148],{"class":42},"      const form = document.querySelector('form')\n",[36,67150,67151],{"class":38,"line":419},[36,67152,67153],{"class":42},"      form.addEventListener('submit', function (e) {\n",[36,67155,67156],{"class":38,"line":425},[36,67157,67158],{"class":42},"        e.preventDefault()\n",[36,67160,67161],{"class":38,"line":431},[36,67162,65292],{"class":42},[36,67164,67165,67167,67169],{"class":38,"line":437},[36,67166,52253],{"class":42},[36,67168,52290],{"class":51777},[36,67170,51784],{"class":42},[36,67172,67173,67175,67177],{"class":38,"line":443},[36,67174,52894],{"class":42},[36,67176,67102],{"class":51777},[36,67178,51784],{"class":42},[36,67180,67181,67183,67185],{"class":38,"line":2092},[36,67182,52262],{"class":42},[36,67184,52277],{"class":51777},[36,67186,51784],{"class":42},[19,67188,67189],{},"点击不在跳转！！！",[596,67191,67193],{"id":67192},"_332-事件委托","3.3.2 事件委托",[19,67195,67196],{},[519,67197],{"alt":31,"src":67198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,67200,67202],{"className":51110,"code":67201,"language":51112,"meta":31,"style":31},"\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",[33,67203,67204,67214,67228,67232,67240,67254,67274,67286,67294,67298,67306,67314,67326,67338,67350,67362,67374,67387,67395,67403,67408,67427,67448,67453,67458,67463,67468,67477,67481,67491,67495,67500,67505,67519,67529,67533,67537,67545,67553,67557],{"__ignoreMap":31},[36,67205,67206,67208,67210,67212],{"class":38,"line":39},[36,67207,51774],{"class":42},[36,67209,51778],{"class":51777},[36,67211,51781],{"class":2443},[36,67213,51784],{"class":42},[36,67215,67216,67218,67220,67222,67224,67226],{"class":38,"line":66},[36,67217,1523],{"class":42},[36,67219,51112],{"class":51777},[36,67221,51793],{"class":2443},[36,67223,47],{"class":42},[36,67225,51798],{"class":405},[36,67227,51784],{"class":42},[36,67229,67230],{"class":38,"line":73},[36,67231,2880],{"emptyLinePlaceholder":553},[36,67233,67234,67236,67238],{"class":38,"line":79},[36,67235,1523],{"class":42},[36,67237,51811],{"class":51777},[36,67239,51784],{"class":42},[36,67241,67242,67244,67246,67248,67250,67252],{"class":38,"line":85},[36,67243,52621],{"class":42},[36,67245,51821],{"class":51777},[36,67247,51824],{"class":2443},[36,67249,47],{"class":42},[36,67251,51829],{"class":405},[36,67253,51784],{"class":42},[36,67255,67256,67258,67260,67262,67264,67266,67268,67270,67272],{"class":38,"line":419},[36,67257,52621],{"class":42},[36,67259,51821],{"class":51777},[36,67261,15400],{"class":2443},[36,67263,47],{"class":42},[36,67265,51868],{"class":405},[36,67267,51848],{"class":2443},[36,67269,47],{"class":42},[36,67271,51875],{"class":405},[36,67273,51784],{"class":42},[36,67275,67276,67278,67280,67282,67284],{"class":38,"line":425},[36,67277,52621],{"class":42},[36,67279,51884],{"class":51777},[36,67281,51887],{"class":42},[36,67283,51884],{"class":51777},[36,67285,51784],{"class":42},[36,67287,67288,67290,67292],{"class":38,"line":431},[36,67289,52262],{"class":42},[36,67291,51811],{"class":51777},[36,67293,51784],{"class":42},[36,67295,67296],{"class":38,"line":437},[36,67297,2880],{"emptyLinePlaceholder":553},[36,67299,67300,67302,67304],{"class":38,"line":443},[36,67301,1523],{"class":42},[36,67303,52277],{"class":51777},[36,67305,51784],{"class":42},[36,67307,67308,67310,67312],{"class":38,"line":2092},[36,67309,52621],{"class":42},[36,67311,1620],{"class":51777},[36,67313,51784],{"class":42},[36,67315,67316,67318,67320,67322,67324],{"class":38,"line":2097},[36,67317,51818],{"class":42},[36,67319,582],{"class":51777},[36,67321,54443],{"class":42},[36,67323,582],{"class":51777},[36,67325,51784],{"class":42},[36,67327,67328,67330,67332,67334,67336],{"class":38,"line":2103},[36,67329,51818],{"class":42},[36,67331,582],{"class":51777},[36,67333,54462],{"class":42},[36,67335,582],{"class":51777},[36,67337,51784],{"class":42},[36,67339,67340,67342,67344,67346,67348],{"class":38,"line":2108},[36,67341,51818],{"class":42},[36,67343,582],{"class":51777},[36,67345,54481],{"class":42},[36,67347,582],{"class":51777},[36,67349,51784],{"class":42},[36,67351,67352,67354,67356,67358,67360],{"class":38,"line":2122},[36,67353,51818],{"class":42},[36,67355,582],{"class":51777},[36,67357,54500],{"class":42},[36,67359,582],{"class":51777},[36,67361,51784],{"class":42},[36,67363,67364,67366,67368,67370,67372],{"class":38,"line":2127},[36,67365,51818],{"class":42},[36,67367,582],{"class":51777},[36,67369,54519],{"class":42},[36,67371,582],{"class":51777},[36,67373,51784],{"class":42},[36,67375,67376,67378,67380,67383,67385],{"class":38,"line":2133},[36,67377,51818],{"class":42},[36,67379,19],{"class":51777},[36,67381,67382],{"class":42},">我不需要变色\u003C\u002F",[36,67384,19],{"class":51777},[36,67386,51784],{"class":42},[36,67388,67389,67391,67393],{"class":38,"line":2154},[36,67390,52894],{"class":42},[36,67392,1620],{"class":51777},[36,67394,51784],{"class":42},[36,67396,67397,67399,67401],{"class":38,"line":2159},[36,67398,52621],{"class":42},[36,67400,52290],{"class":51777},[36,67402,51784],{"class":42},[36,67404,67405],{"class":38,"line":2173},[36,67406,67407],{"class":69},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,67409,67410,67412,67414,67416,67418,67420,67422,67425],{"class":38,"line":2178},[36,67411,11701],{"class":46},[36,67413,61769],{"class":53},[36,67415,14044],{"class":46},[36,67417,54873],{"class":42},[36,67419,54876],{"class":2443},[36,67421,345],{"class":42},[36,67423,67424],{"class":405},"'ul'",[36,67426,63],{"class":42},[36,67428,67429,67432,67434,67436,67438,67440,67442,67444,67446],{"class":38,"line":2207},[36,67430,67431],{"class":42},"    ul.",[36,67433,58290],{"class":2443},[36,67435,345],{"class":42},[36,67437,58295],{"class":405},[36,67439,12915],{"class":42},[36,67441,54926],{"class":46},[36,67443,2138],{"class":42},[36,67445,697],{"class":5696},[36,67447,12922],{"class":42},[36,67449,67450],{"class":38,"line":2212},[36,67451,67452],{"class":69},"      \u002F\u002F alert(1)\n",[36,67454,67455],{"class":38,"line":2229},[36,67456,67457],{"class":69},"      \u002F\u002F e.target就是我们点击的对象\n",[36,67459,67460],{"class":38,"line":2234},[36,67461,67462],{"class":69},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,67464,67465],{"class":38,"line":2239},[36,67466,67467],{"class":69},"      \u002F\u002F e.target.style.color = 'red'\n",[36,67469,67470,67472,67474],{"class":38,"line":2244},[36,67471,58721],{"class":42},[36,67473,58724],{"class":2443},[36,67475,67476],{"class":42},"(e)\n",[36,67478,67479],{"class":38,"line":2258},[36,67480,2880],{"emptyLinePlaceholder":553},[36,67482,67483,67485,67488],{"class":38,"line":2263},[36,67484,58721],{"class":42},[36,67486,67487],{"class":2443},"dir",[36,67489,67490],{"class":42},"(e.target)\n",[36,67492,67493],{"class":38,"line":3057},[36,67494,2880],{"emptyLinePlaceholder":553},[36,67496,67497],{"class":38,"line":3071},[36,67498,67499],{"class":69},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,67501,67502],{"class":38,"line":3079},[36,67503,67504],{"class":69},"      \u002F\u002F 通过tagName来进行判断\n",[36,67506,67507,67509,67512,67514,67517],{"class":38,"line":3084},[36,67508,54957],{"class":46},[36,67510,67511],{"class":42}," (e.target.tagName ",[36,67513,54963],{"class":46},[36,67515,67516],{"class":405}," 'LI'",[36,67518,12922],{"class":42},[36,67520,67521,67524,67526],{"class":38,"line":3090},[36,67522,67523],{"class":42},"        e.target.style.color ",[36,67525,47],{"class":46},[36,67527,67528],{"class":405}," 'red'\n",[36,67530,67531],{"class":38,"line":3096},[36,67532,52875],{"class":42},[36,67534,67535],{"class":38,"line":3101},[36,67536,33938],{"class":42},[36,67538,67539,67541,67543],{"class":38,"line":8428},[36,67540,52894],{"class":42},[36,67542,52290],{"class":51777},[36,67544,51784],{"class":42},[36,67546,67547,67549,67551],{"class":38,"line":8452},[36,67548,52262],{"class":42},[36,67550,52277],{"class":51777},[36,67552,51784],{"class":42},[36,67554,67555],{"class":38,"line":8457},[36,67556,2880],{"emptyLinePlaceholder":553},[36,67558,67559,67561,67563],{"class":38,"line":8463},[36,67560,52262],{"class":42},[36,67562,51112],{"class":51777},[36,67564,51784],{"class":42},[19,67566,67567],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67569,67570],{},"if(e.target.ragName==='P') {}",[19,67572,67573],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67575,67576],{},"通过事件委托的方式实现tab栏切换改造：",[19,67578,67579],{},"一定要记住自定义属性！！！！！！",[19,67581,67582],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67584,67585],{},"id是自定义的属性名",[19,67587,67588],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,67590,67592],{"className":51110,"code":67591,"language":51112,"meta":31,"style":31},"\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",[33,67593,67594,67604,67618,67622,67630,67644,67664,67684,67696,67704,67710,67720,67730,67734,67738,67744,67756,67768,67780,67796,67800,67804,67810,67822,67834,67846,67856,67866,67870,67874,67882,67894,67904,67916,67920,67924,67932,67942,67952,67962,67966,67970,67980,67994,68006,68010,68014,68026,68036,68052,68062,68066,68070,68084,68094,68104,68108,68112,68118,68132,68136,68140,68148,68158,68162,68166,68175,68185,68189,68197,68205,68209,68217,68231,68245,68257,68265,68304,68336,68368,68400,68432,68440,68448,68462,68496,68530,68564,68598,68632,68640,68648,68656,68661,68666,68685,68690,68710,68718,68723,68736,68757,68770,68774,68779,68784,68797,68817,68845,68849,68853,68857,68865,68873,68877],{"__ignoreMap":31},[36,67595,67596,67598,67600,67602],{"class":38,"line":39},[36,67597,51774],{"class":42},[36,67599,51778],{"class":51777},[36,67601,51781],{"class":2443},[36,67603,51784],{"class":42},[36,67605,67606,67608,67610,67612,67614,67616],{"class":38,"line":66},[36,67607,1523],{"class":42},[36,67609,51112],{"class":51777},[36,67611,51793],{"class":2443},[36,67613,47],{"class":42},[36,67615,51798],{"class":405},[36,67617,51784],{"class":42},[36,67619,67620],{"class":38,"line":73},[36,67621,2880],{"emptyLinePlaceholder":553},[36,67623,67624,67626,67628],{"class":38,"line":79},[36,67625,1523],{"class":42},[36,67627,51811],{"class":51777},[36,67629,51784],{"class":42},[36,67631,67632,67634,67636,67638,67640,67642],{"class":38,"line":85},[36,67633,52621],{"class":42},[36,67635,51821],{"class":51777},[36,67637,51824],{"class":2443},[36,67639,47],{"class":42},[36,67641,51829],{"class":405},[36,67643,59604],{"class":42},[36,67645,67646,67648,67650,67652,67654,67656,67658,67660,67662],{"class":38,"line":419},[36,67647,52621],{"class":42},[36,67649,51821],{"class":51777},[36,67651,51840],{"class":2443},[36,67653,47],{"class":42},[36,67655,51845],{"class":405},[36,67657,51848],{"class":2443},[36,67659,47],{"class":42},[36,67661,51853],{"class":405},[36,67663,59604],{"class":42},[36,67665,67666,67668,67670,67672,67674,67676,67678,67680,67682],{"class":38,"line":425},[36,67667,52621],{"class":42},[36,67669,51821],{"class":51777},[36,67671,15400],{"class":2443},[36,67673,47],{"class":42},[36,67675,51868],{"class":405},[36,67677,51848],{"class":2443},[36,67679,47],{"class":42},[36,67681,51875],{"class":405},[36,67683,59604],{"class":42},[36,67685,67686,67688,67690,67692,67694],{"class":38,"line":431},[36,67687,52621],{"class":42},[36,67689,51884],{"class":51777},[36,67691,64102],{"class":42},[36,67693,51884],{"class":51777},[36,67695,51784],{"class":42},[36,67697,67698,67700,67702],{"class":38,"line":437},[36,67699,52621],{"class":42},[36,67701,539],{"class":51777},[36,67703,51784],{"class":42},[36,67705,67706,67708],{"class":38,"line":443},[36,67707,6883],{"class":51777},[36,67709,16052],{"class":42},[36,67711,67712,67714,67716,67718],{"class":38,"line":2092},[36,67713,55183],{"class":53},[36,67715,51914],{"class":42},[36,67717,812],{"class":53},[36,67719,1774],{"class":42},[36,67721,67722,67724,67726,67728],{"class":38,"line":2097},[36,67723,55172],{"class":53},[36,67725,51914],{"class":42},[36,67727,812],{"class":53},[36,67729,1774],{"class":42},[36,67731,67732],{"class":38,"line":2103},[36,67733,2667],{"class":42},[36,67735,67736],{"class":38,"line":2108},[36,67737,2880],{"emptyLinePlaceholder":553},[36,67739,67740,67742],{"class":38,"line":2122},[36,67741,64153],{"class":2443},[36,67743,16052],{"class":42},[36,67745,67746,67748,67750,67752,67754],{"class":38,"line":2127},[36,67747,55248],{"class":53},[36,67749,51914],{"class":42},[36,67751,64164],{"class":53},[36,67753,51969],{"class":46},[36,67755,1774],{"class":42},[36,67757,67758,67760,67762,67764,67766],{"class":38,"line":2133},[36,67759,55262],{"class":53},[36,67761,51914],{"class":42},[36,67763,64177],{"class":53},[36,67765,51969],{"class":46},[36,67767,1774],{"class":42},[36,67769,67770,67772,67774,67776,67778],{"class":38,"line":2154},[36,67771,55183],{"class":53},[36,67773,51914],{"class":42},[36,67775,1313],{"class":53},[36,67777,51969],{"class":46},[36,67779,1774],{"class":42},[36,67781,67782,67784,67786,67788,67790,67792,67794],{"class":38,"line":2159},[36,67783,62454],{"class":53},[36,67785,51914],{"class":42},[36,67787,54],{"class":53},[36,67789,51969],{"class":46},[36,67791,51998],{"class":53},[36,67793,62721],{"class":53},[36,67795,1774],{"class":42},[36,67797,67798],{"class":38,"line":2173},[36,67799,2667],{"class":42},[36,67801,67802],{"class":38,"line":2178},[36,67803,2880],{"emptyLinePlaceholder":553},[36,67805,67806,67808],{"class":38,"line":2207},[36,67807,64222],{"class":2443},[36,67809,16052],{"class":42},[36,67811,67812,67814,67816,67818,67820],{"class":38,"line":2212},[36,67813,55248],{"class":53},[36,67815,51914],{"class":42},[36,67817,930],{"class":53},[36,67819,947],{"class":46},[36,67821,1774],{"class":42},[36,67823,67824,67826,67828,67830,67832],{"class":38,"line":2229},[36,67825,55262],{"class":53},[36,67827,51914],{"class":42},[36,67829,1520],{"class":53},[36,67831,51969],{"class":46},[36,67833,1774],{"class":42},[36,67835,67836,67838,67840,67842,67844],{"class":38,"line":2234},[36,67837,57836],{"class":53},[36,67839,51914],{"class":42},[36,67841,1520],{"class":53},[36,67843,51969],{"class":46},[36,67845,1774],{"class":42},[36,67847,67848,67850,67852,67854],{"class":38,"line":2239},[36,67849,55486],{"class":53},[36,67851,51914],{"class":42},[36,67853,51954],{"class":53},[36,67855,1774],{"class":42},[36,67857,67858,67860,67862,67864],{"class":38,"line":2244},[36,67859,55497],{"class":53},[36,67861,51914],{"class":42},[36,67863,52145],{"class":53},[36,67865,1774],{"class":42},[36,67867,67868],{"class":38,"line":2258},[36,67869,2667],{"class":42},[36,67871,67872],{"class":38,"line":2263},[36,67873,2880],{"emptyLinePlaceholder":553},[36,67875,67876,67878,67880],{"class":38,"line":3057},[36,67877,64222],{"class":2443},[36,67879,64295],{"class":51777},[36,67881,16052],{"class":42},[36,67883,67884,67886,67888,67890,67892],{"class":38,"line":3071},[36,67885,55399],{"class":53},[36,67887,51914],{"class":42},[36,67889,1413],{"class":53},[36,67891,51969],{"class":46},[36,67893,1774],{"class":42},[36,67895,67896,67898,67900,67902],{"class":38,"line":3079},[36,67897,62811],{"class":53},[36,67899,51914],{"class":42},[36,67901,64318],{"class":53},[36,67903,1774],{"class":42},[36,67905,67906,67908,67910,67912,67914],{"class":38,"line":3084},[36,67907,62477],{"class":53},[36,67909,51914],{"class":42},[36,67911,1313],{"class":53},[36,67913,51969],{"class":46},[36,67915,1774],{"class":42},[36,67917,67918],{"class":38,"line":3090},[36,67919,2667],{"class":42},[36,67921,67922],{"class":38,"line":3096},[36,67923,2880],{"emptyLinePlaceholder":553},[36,67925,67926,67928,67930],{"class":38,"line":3101},[36,67927,64222],{"class":2443},[36,67929,61769],{"class":51777},[36,67931,16052],{"class":42},[36,67933,67934,67936,67938,67940],{"class":38,"line":8428},[36,67935,55209],{"class":53},[36,67937,51914],{"class":42},[36,67939,55214],{"class":53},[36,67941,1774],{"class":42},[36,67943,67944,67946,67948,67950],{"class":38,"line":8452},[36,67945,55486],{"class":53},[36,67947,51914],{"class":42},[36,67949,51954],{"class":53},[36,67951,1774],{"class":42},[36,67953,67954,67956,67958,67960],{"class":38,"line":8457},[36,67955,55497],{"class":53},[36,67957,51914],{"class":42},[36,67959,52057],{"class":53},[36,67961,1774],{"class":42},[36,67963,67964],{"class":38,"line":8463},[36,67965,2667],{"class":42},[36,67967,67968],{"class":38,"line":8490},[36,67969,2880],{"emptyLinePlaceholder":553},[36,67971,67972,67974,67976,67978],{"class":38,"line":8495},[36,67973,64222],{"class":2443},[36,67975,61769],{"class":51777},[36,67977,55552],{"class":51777},[36,67979,16052],{"class":42},[36,67981,67982,67984,67986,67988,67990,67992],{"class":38,"line":8501},[36,67983,55183],{"class":53},[36,67985,51914],{"class":42},[36,67987,812],{"class":53},[36,67989,9430],{"class":53},[36,67991,51969],{"class":46},[36,67993,1774],{"class":42},[36,67995,67996,67998,68000,68002,68004],{"class":38,"line":8513},[36,67997,55399],{"class":53},[36,67999,51914],{"class":42},[36,68001,1162],{"class":53},[36,68003,51969],{"class":46},[36,68005,1774],{"class":42},[36,68007,68008],{"class":38,"line":8525},[36,68009,2667],{"class":42},[36,68011,68012],{"class":38,"line":8537},[36,68013,2880],{"emptyLinePlaceholder":553},[36,68015,68016,68018,68020,68022,68024],{"class":38,"line":10196},[36,68017,64222],{"class":2443},[36,68019,61769],{"class":51777},[36,68021,55552],{"class":51777},[36,68023,1879],{"class":51777},[36,68025,16052],{"class":42},[36,68027,68028,68030,68032,68034],{"class":38,"line":10221},[36,68029,64447],{"class":53},[36,68031,51914],{"class":42},[36,68033,55214],{"class":53},[36,68035,1774],{"class":42},[36,68037,68038,68040,68042,68044,68046,68048,68050],{"class":38,"line":10244},[36,68039,62709],{"class":53},[36,68041,51914],{"class":42},[36,68043,96],{"class":53},[36,68045,51969],{"class":46},[36,68047,51998],{"class":53},[36,68049,64468],{"class":53},[36,68051,1774],{"class":42},[36,68053,68054,68056,68058,68060],{"class":38,"line":10268},[36,68055,57893],{"class":53},[36,68057,51914],{"class":42},[36,68059,62846],{"class":53},[36,68061,1774],{"class":42},[36,68063,68064],{"class":38,"line":10273},[36,68065,2667],{"class":42},[36,68067,68068],{"class":38,"line":10278},[36,68069,2880],{"emptyLinePlaceholder":553},[36,68071,68072,68074,68076,68078,68080,68082],{"class":38,"line":10283},[36,68073,64222],{"class":2443},[36,68075,61769],{"class":51777},[36,68077,55552],{"class":51777},[36,68079,1879],{"class":51777},[36,68081,64501],{"class":2443},[36,68083,16052],{"class":42},[36,68085,68086,68088,68090,68092],{"class":38,"line":10292},[36,68087,62268],{"class":53},[36,68089,51914],{"class":42},[36,68091,64512],{"class":53},[36,68093,1774],{"class":42},[36,68095,68096,68098,68100,68102],{"class":38,"line":10297},[36,68097,57893],{"class":53},[36,68099,51914],{"class":42},[36,68101,64512],{"class":53},[36,68103,1774],{"class":42},[36,68105,68106],{"class":38,"line":10303},[36,68107,2667],{"class":42},[36,68109,68110],{"class":38,"line":10324},[36,68111,2880],{"emptyLinePlaceholder":553},[36,68113,68114,68116],{"class":38,"line":10330},[36,68115,64537],{"class":2443},[36,68117,16052],{"class":42},[36,68119,68120,68122,68124,68126,68128,68130],{"class":38,"line":10344},[36,68121,55172],{"class":53},[36,68123,51914],{"class":42},[36,68125,812],{"class":53},[36,68127,64550],{"class":53},[36,68129,51969],{"class":46},[36,68131,1774],{"class":42},[36,68133,68134],{"class":38,"line":10350},[36,68135,2667],{"class":42},[36,68137,68138],{"class":38,"line":10377},[36,68139,2880],{"emptyLinePlaceholder":553},[36,68141,68142,68144,68146],{"class":38,"line":10386},[36,68143,64537],{"class":2443},[36,68145,62651],{"class":2443},[36,68147,16052],{"class":42},[36,68149,68150,68152,68154,68156],{"class":38,"line":10392},[36,68151,55486],{"class":53},[36,68153,51914],{"class":42},[36,68155,55214],{"class":53},[36,68157,1774],{"class":42},[36,68159,68160],{"class":38,"line":10400},[36,68161,2667],{"class":42},[36,68163,68164],{"class":38,"line":10405},[36,68165,2880],{"emptyLinePlaceholder":553},[36,68167,68168,68170,68173],{"class":38,"line":17084},[36,68169,64537],{"class":2443},[36,68171,68172],{"class":2443}," .active",[36,68174,16052],{"class":42},[36,68176,68177,68179,68181,68183],{"class":38,"line":17090},[36,68178,55486],{"class":53},[36,68180,51914],{"class":42},[36,68182,61346],{"class":53},[36,68184,1774],{"class":42},[36,68186,68187],{"class":38,"line":17113},[36,68188,2667],{"class":42},[36,68190,68191,68193,68195],{"class":38,"line":17119},[36,68192,52894],{"class":42},[36,68194,539],{"class":51777},[36,68196,51784],{"class":42},[36,68198,68199,68201,68203],{"class":38,"line":17142},[36,68200,52262],{"class":42},[36,68202,51811],{"class":51777},[36,68204,51784],{"class":42},[36,68206,68207],{"class":38,"line":17156},[36,68208,2880],{"emptyLinePlaceholder":553},[36,68210,68211,68213,68215],{"class":38,"line":17176},[36,68212,1523],{"class":42},[36,68214,52277],{"class":51777},[36,68216,51784],{"class":42},[36,68218,68219,68221,68223,68225,68227,68229],{"class":38,"line":17182},[36,68220,52621],{"class":42},[36,68222,52088],{"class":51777},[36,68224,53963],{"class":2443},[36,68226,47],{"class":42},[36,68228,64652],{"class":405},[36,68230,51784],{"class":42},[36,68232,68233,68235,68237,68239,68241,68243],{"class":38,"line":17193},[36,68234,51818],{"class":42},[36,68236,52088],{"class":51777},[36,68238,53963],{"class":2443},[36,68240,47],{"class":42},[36,68242,64667],{"class":405},[36,68244,51784],{"class":42},[36,68246,68247,68249,68251,68253,68255],{"class":38,"line":17216},[36,68248,55711],{"class":42},[36,68250,596],{"class":51777},[36,68252,64678],{"class":42},[36,68254,596],{"class":51777},[36,68256,51784],{"class":42},[36,68258,68259,68261,68263],{"class":38,"line":17238},[36,68260,55711],{"class":42},[36,68262,1620],{"class":51777},[36,68264,51784],{"class":42},[36,68266,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68294,68296,68298,68300,68302],{"class":38,"line":17243},[36,68268,55779],{"class":42},[36,68270,582],{"class":51777},[36,68272,61529],{"class":42},[36,68274,43],{"class":51777},[36,68276,53963],{"class":2443},[36,68278,47],{"class":42},[36,68280,60183],{"class":405},[36,68282,61534],{"class":2443},[36,68284,47],{"class":42},[36,68286,64713],{"class":405},[36,68288,54428],{"class":2443},[36,68290,47],{"class":42},[36,68292,68293],{"class":405},"\"0\"",[36,68295,64716],{"class":42},[36,68297,43],{"class":51777},[36,68299,55791],{"class":42},[36,68301,582],{"class":51777},[36,68303,51784],{"class":42},[36,68305,68306,68308,68310,68312,68314,68316,68318,68320,68322,68324,68326,68328,68330,68332,68334],{"class":38,"line":17249},[36,68307,55779],{"class":42},[36,68309,582],{"class":51777},[36,68311,61529],{"class":42},[36,68313,43],{"class":51777},[36,68315,61534],{"class":2443},[36,68317,47],{"class":42},[36,68319,64713],{"class":405},[36,68321,54428],{"class":2443},[36,68323,47],{"class":42},[36,68325,4158],{"class":405},[36,68327,64743],{"class":42},[36,68329,43],{"class":51777},[36,68331,55791],{"class":42},[36,68333,582],{"class":51777},[36,68335,51784],{"class":42},[36,68337,68338,68340,68342,68344,68346,68348,68350,68352,68354,68356,68358,68360,68362,68364,68366],{"class":38,"line":17263},[36,68339,55779],{"class":42},[36,68341,582],{"class":51777},[36,68343,61529],{"class":42},[36,68345,43],{"class":51777},[36,68347,61534],{"class":2443},[36,68349,47],{"class":42},[36,68351,64713],{"class":405},[36,68353,54428],{"class":2443},[36,68355,47],{"class":42},[36,68357,4181],{"class":405},[36,68359,64770],{"class":42},[36,68361,43],{"class":51777},[36,68363,55791],{"class":42},[36,68365,582],{"class":51777},[36,68367,51784],{"class":42},[36,68369,68370,68372,68374,68376,68378,68380,68382,68384,68386,68388,68390,68392,68394,68396,68398],{"class":38,"line":17276},[36,68371,55779],{"class":42},[36,68373,582],{"class":51777},[36,68375,61529],{"class":42},[36,68377,43],{"class":51777},[36,68379,61534],{"class":2443},[36,68381,47],{"class":42},[36,68383,64713],{"class":405},[36,68385,54428],{"class":2443},[36,68387,47],{"class":42},[36,68389,4194],{"class":405},[36,68391,64797],{"class":42},[36,68393,43],{"class":51777},[36,68395,55791],{"class":42},[36,68397,582],{"class":51777},[36,68399,51784],{"class":42},[36,68401,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420,68422,68424,68426,68428,68430],{"class":38,"line":17281},[36,68403,55779],{"class":42},[36,68405,582],{"class":51777},[36,68407,61529],{"class":42},[36,68409,43],{"class":51777},[36,68411,61534],{"class":2443},[36,68413,47],{"class":42},[36,68415,64713],{"class":405},[36,68417,54428],{"class":2443},[36,68419,47],{"class":42},[36,68421,4207],{"class":405},[36,68423,64824],{"class":42},[36,68425,43],{"class":51777},[36,68427,55791],{"class":42},[36,68429,582],{"class":51777},[36,68431,51784],{"class":42},[36,68433,68434,68436,68438],{"class":38,"line":17295},[36,68435,55884],{"class":42},[36,68437,1620],{"class":51777},[36,68439,51784],{"class":42},[36,68441,68442,68444,68446],{"class":38,"line":17300},[36,68443,52253],{"class":42},[36,68445,52088],{"class":51777},[36,68447,51784],{"class":42},[36,68449,68450,68452,68454,68456,68458,68460],{"class":38,"line":17306},[36,68451,51818],{"class":42},[36,68453,52088],{"class":51777},[36,68455,53963],{"class":2443},[36,68457,47],{"class":42},[36,68459,64861],{"class":405},[36,68461,51784],{"class":42},[36,68463,68464,68466,68468,68470,68472,68474,68476,68478,68480,68482,68484,68486,68488,68490,68492,68494],{"class":38,"line":17311},[36,68465,55711],{"class":42},[36,68467,52088],{"class":51777},[36,68469,53963],{"class":2443},[36,68471,47],{"class":42},[36,68473,64876],{"class":405},[36,68475,61529],{"class":42},[36,68477,519],{"class":51777},[36,68479,55716],{"class":2443},[36,68481,47],{"class":42},[36,68483,64887],{"class":405},[36,68485,55724],{"class":2443},[36,68487,47],{"class":42},[36,68489,8132],{"class":405},[36,68491,64896],{"class":42},[36,68493,52088],{"class":51777},[36,68495,51784],{"class":42},[36,68497,68498,68500,68502,68504,68506,68508,68510,68512,68514,68516,68518,68520,68522,68524,68526,68528],{"class":38,"line":17325},[36,68499,55711],{"class":42},[36,68501,52088],{"class":51777},[36,68503,53963],{"class":2443},[36,68505,47],{"class":42},[36,68507,63100],{"class":405},[36,68509,61529],{"class":42},[36,68511,519],{"class":51777},[36,68513,55716],{"class":2443},[36,68515,47],{"class":42},[36,68517,64923],{"class":405},[36,68519,55724],{"class":2443},[36,68521,47],{"class":42},[36,68523,8132],{"class":405},[36,68525,64896],{"class":42},[36,68527,52088],{"class":51777},[36,68529,51784],{"class":42},[36,68531,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550,68552,68554,68556,68558,68560,68562],{"class":38,"line":17330},[36,68533,55711],{"class":42},[36,68535,52088],{"class":51777},[36,68537,53963],{"class":2443},[36,68539,47],{"class":42},[36,68541,63100],{"class":405},[36,68543,61529],{"class":42},[36,68545,519],{"class":51777},[36,68547,55716],{"class":2443},[36,68549,47],{"class":42},[36,68551,64958],{"class":405},[36,68553,55724],{"class":2443},[36,68555,47],{"class":42},[36,68557,8132],{"class":405},[36,68559,64896],{"class":42},[36,68561,52088],{"class":51777},[36,68563,51784],{"class":42},[36,68565,68566,68568,68570,68572,68574,68576,68578,68580,68582,68584,68586,68588,68590,68592,68594,68596],{"class":38,"line":17335},[36,68567,55711],{"class":42},[36,68569,52088],{"class":51777},[36,68571,53963],{"class":2443},[36,68573,47],{"class":42},[36,68575,63100],{"class":405},[36,68577,61529],{"class":42},[36,68579,519],{"class":51777},[36,68581,55716],{"class":2443},[36,68583,47],{"class":42},[36,68585,64993],{"class":405},[36,68587,55724],{"class":2443},[36,68589,47],{"class":42},[36,68591,8132],{"class":405},[36,68593,64896],{"class":42},[36,68595,52088],{"class":51777},[36,68597,51784],{"class":42},[36,68599,68600,68602,68604,68606,68608,68610,68612,68614,68616,68618,68620,68622,68624,68626,68628,68630],{"class":38,"line":17349},[36,68601,55711],{"class":42},[36,68603,52088],{"class":51777},[36,68605,53963],{"class":2443},[36,68607,47],{"class":42},[36,68609,63100],{"class":405},[36,68611,61529],{"class":42},[36,68613,519],{"class":51777},[36,68615,55716],{"class":2443},[36,68617,47],{"class":42},[36,68619,65028],{"class":405},[36,68621,55724],{"class":2443},[36,68623,47],{"class":42},[36,68625,8132],{"class":405},[36,68627,64896],{"class":42},[36,68629,52088],{"class":51777},[36,68631,51784],{"class":42},[36,68633,68634,68636,68638],{"class":38,"line":17361},[36,68635,52253],{"class":42},[36,68637,52088],{"class":51777},[36,68639,51784],{"class":42},[36,68641,68642,68644,68646],{"class":38,"line":17366},[36,68643,52894],{"class":42},[36,68645,52088],{"class":51777},[36,68647,51784],{"class":42},[36,68649,68650,68652,68654],{"class":38,"line":17379},[36,68651,52621],{"class":42},[36,68653,52290],{"class":51777},[36,68655,51784],{"class":42},[36,68657,68658],{"class":38,"line":17384},[36,68659,68660],{"class":69},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,68662,68663],{"class":38,"line":17389},[36,68664,68665],{"class":69},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,68667,68668,68670,68672,68674,68676,68678,68680,68683],{"class":38,"line":17394},[36,68669,11701],{"class":46},[36,68671,61769],{"class":53},[36,68673,14044],{"class":46},[36,68675,54873],{"class":42},[36,68677,54876],{"class":2443},[36,68679,345],{"class":42},[36,68681,68682],{"class":405},"'.tab-nav ul'",[36,68684,63],{"class":42},[36,68686,68687],{"class":38,"line":17407},[36,68688,68689],{"class":69},"    \u002F\u002F 2.添加事件\n",[36,68691,68692,68694,68696,68698,68700,68702,68704,68706,68708],{"class":38,"line":17412},[36,68693,67431],{"class":42},[36,68695,58290],{"class":2443},[36,68697,345],{"class":42},[36,68699,58295],{"class":405},[36,68701,12915],{"class":42},[36,68703,54926],{"class":46},[36,68705,2138],{"class":42},[36,68707,697],{"class":5696},[36,68709,12922],{"class":42},[36,68711,68712,68714,68716],{"class":38,"line":33110},[36,68713,58721],{"class":42},[36,68715,67487],{"class":2443},[36,68717,67490],{"class":42},[36,68719,68720],{"class":38,"line":33116},[36,68721,68722],{"class":69},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,68724,68725,68727,68729,68731,68734],{"class":38,"line":33122},[36,68726,54957],{"class":46},[36,68728,67511],{"class":42},[36,68730,54963],{"class":46},[36,68732,68733],{"class":405}," 'A'",[36,68735,12922],{"class":42},[36,68737,68738,68740,68742,68744,68747,68749,68751,68753,68755],{"class":38,"line":33128},[36,68739,52402],{"class":42},[36,68741,54876],{"class":2443},[36,68743,345],{"class":42},[36,68745,68746],{"class":405},"'.active'",[36,68748,57480],{"class":42},[36,68750,57483],{"class":2443},[36,68752,345],{"class":42},[36,68754,65191],{"class":405},[36,68756,63],{"class":42},[36,68758,68759,68762,68764,68766,68768],{"class":38,"line":33134},[36,68760,68761],{"class":42},"        e.target.classList.",[36,68763,5814],{"class":2443},[36,68765,345],{"class":42},[36,68767,65191],{"class":405},[36,68769,63],{"class":42},[36,68771,68772],{"class":38,"line":33145},[36,68773,2880],{"emptyLinePlaceholder":553},[36,68775,68776],{"class":38,"line":33151},[36,68777,68778],{"class":69},"        \u002F\u002F 下面大盒子模块\n",[36,68780,68781],{"class":38,"line":33171},[36,68782,68783],{"class":69},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,68785,68786,68788,68790,68792,68794],{"class":38,"line":33177},[36,68787,61747],{"class":46},[36,68789,3512],{"class":53},[36,68791,14044],{"class":46},[36,68793,46043],{"class":46},[36,68795,68796],{"class":42},"e.target.dataset.id\n",[36,68798,68799,68801,68803,68805,68807,68809,68811,68813,68815],{"class":38,"line":33188},[36,68800,52402],{"class":42},[36,68802,54876],{"class":2443},[36,68804,345],{"class":42},[36,68806,65239],{"class":405},[36,68808,57480],{"class":42},[36,68810,57483],{"class":2443},[36,68812,345],{"class":42},[36,68814,65191],{"class":405},[36,68816,63],{"class":42},[36,68818,68819,68821,68823,68825,68827,68829,68831,68833,68835,68837,68839,68841,68843],{"class":38,"line":33194},[36,68820,52402],{"class":42},[36,68822,54876],{"class":2443},[36,68824,345],{"class":42},[36,68826,65265],{"class":405},[36,68828,1057],{"class":42},[36,68830,46043],{"class":46},[36,68832,25599],{"class":53},[36,68834,57509],{"class":405},[36,68836,57480],{"class":42},[36,68838,5814],{"class":2443},[36,68840,345],{"class":42},[36,68842,65191],{"class":405},[36,68844,63],{"class":42},[36,68846,68847],{"class":38,"line":33200},[36,68848,2880],{"emptyLinePlaceholder":553},[36,68850,68851],{"class":38,"line":33206},[36,68852,52875],{"class":42},[36,68854,68855],{"class":38,"line":33212},[36,68856,33938],{"class":42},[36,68858,68859,68861,68863],{"class":38,"line":33218},[36,68860,52894],{"class":42},[36,68862,52290],{"class":51777},[36,68864,51784],{"class":42},[36,68866,68867,68869,68871],{"class":38,"line":33224},[36,68868,52262],{"class":42},[36,68870,52277],{"class":51777},[36,68872,51784],{"class":42},[36,68874,68875],{"class":38,"line":33230},[36,68876,2880],{"emptyLinePlaceholder":553},[36,68878,68879,68881,68883],{"class":38,"line":33250},[36,68880,52262],{"class":42},[36,68882,51112],{"class":51777},[36,68884,51784],{"class":42},[596,68886,68888],{"id":68887},"_333-页面加载事件","3.3.3 页面加载事件",[579,68890,68891],{},[582,68892,68893],{},"load",[19,68895,68896],{},[519,68897],{"alt":31,"src":68898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68900,68901],{},"window代表整个窗口，比document还要大",[19,68903,68904],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68906,68907],{},"img.addEventListener('load', function () {",[19,68909,68910],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68912,52941],{},[579,68914,68915],{"start":66},[582,68916,68917],{},"DOMContentLoaded",[19,68919,68920],{},[519,68921],{"alt":31,"src":68922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68924,68925],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[596,68927,68929],{"id":68928},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68931,68932],{},[519,68933],{"alt":31,"src":68934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68936,68937],{},[519,68938],{"alt":31,"src":68939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68941,68942],{},[519,68943],{"alt":31,"src":68944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68946,68947],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68949,68950],{},"获得的是数字型数据，不带单位",[19,68952,68953],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68955,68956],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68958,68959],{},"它是通过document.documentElement来获取",[19,68961,68962],{},[519,68963],{"alt":31,"src":68964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68966,68967],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[596,68969,68971],{"id":68970},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68973,68974],{},[519,68975],{"alt":31,"src":68976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68978,68979],{},[519,68980],{"alt":31,"src":68981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[596,68983,68985],{"id":68984},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68987,68988],{},[519,68989],{"alt":31,"src":68990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68992,68993],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68995,68996],{},[519,68997],{"alt":31,"src":68998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69000,69001],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69003,69004],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69006,69007],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69009,69010],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69012,69013],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69015,69016],{},[519,69017],{"alt":31,"src":69018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69020,69021],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69023,69024],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69026,69027],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69029,69030],{},"e.pageX-box.getBoundingClientRect()",[596,69032,69034],{"id":69033},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69036,69037],{},[519,69038],{"alt":31,"src":69039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69041,69042],{},"这个是相对于视口来说的，它是个方法，不是属性值",[596,69044,69046],{"id":69045},"_338-总结","3.3.8 总结",[19,69048,69049],{},[519,69050],{"alt":31,"src":69051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69053,69054],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69056,69057],{},"修改盒子的宽高只能通过width和height来实现",[596,69059,69061],{"id":69060},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,69063,69065],{"className":51110,"code":69064,"language":51112,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,69066,69067,69072,69077,69082,69087],{"__ignoreMap":31},[36,69068,69069],{"class":38,"line":39},[36,69070,69071],{"class":42},"\u002F* 页面滑动 *\u002F\n",[36,69073,69074],{"class":38,"line":66},[36,69075,69076],{"class":42},"html {\n",[36,69078,69079],{"class":38,"line":73},[36,69080,69081],{"class":42},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,69083,69084],{"class":38,"line":79},[36,69085,69086],{"class":42},"  scroll-behavior: smooth;\n",[36,69088,69089],{"class":38,"line":85},[36,69090,2045],{"class":42},[19,69092,69093],{},"默认是auto",[596,69095,69097],{"id":69096},"_3310-日期对象","3.3.10 日期对象",[22478,69099,69101],{"id":69100},"_33101-实例化","3.3.10.1 实例化",[19,69103,69104],{},[519,69105],{"alt":31,"src":69106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22478,69108,69110],{"id":69109},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69112,69113],{},[519,69114],{"alt":31,"src":69115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69117,69118],{},"月份+1",[19,69120,69121],{},"老外认为第一天为0，星期天",[19,69123,69124],{},"方法使用的时候必须要跟括号",[19,69126,69127],{},"快速获得日期",[19,69129,69130],{},"\u002F\u002F 得到年月日",[19,69132,69133],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69135,69136],{},"\u002F\u002F 得到当地日期",[19,69138,69139],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69141,69142],{},"\u002F\u002F 得到当地时间",[19,69144,69145],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69147,69148],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69150,69151],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52290,69153,69154],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,69156,69157],{},"学会去封装函数！",[22478,69159,69161],{"id":69160},"_33103-时间戳","3.3.10.3 时间戳",[19,69163,69164],{},[519,69165],{"alt":31,"src":69166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69168,69169],{},[519,69170],{"alt":31,"src":69171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69173,69174],{},"三种方法记住一个就可以",[596,69176,69178],{"id":69177},"_3311-节点操作","3.3.11 节点操作",[22478,69180,69182],{"id":69181},"_33111-dom节点","3.3.11.1 DOM节点",[19,69184,69185],{},[519,69186],{"alt":31,"src":69187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69189,69190],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22478,69192,69194],{"id":69193},"_33112-查找节点","3.3.11.2 查找节点",[19,69196,69197],{},"前边的document.querySelector()是获取的元素",[19,69199,69200],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69202,69203],{},[519,69204],{"alt":31,"src":69205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[579,69207,69208],{},[582,69209,69210],{},"父节点",[19,69212,69213],{},[519,69214],{"alt":31,"src":69215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[579,69217,69218],{"start":66},[582,69219,69220],{},"子节点",[19,69222,69223],{},[519,69224],{"alt":31,"src":69225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69227,69228],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69230,69231],{},"children获得的是伪数组，是亲儿子",[579,69233,69234],{"start":73},[582,69235,69236],{},"兄弟节点",[19,69238,69239],{},[519,69240],{"alt":31,"src":69241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22478,69243,69245],{"id":69244},"_33113-增加节点","3.3.11.3 增加节点",[19,69247,69248],{},[519,69249],{"alt":31,"src":69250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69252,69253],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69255,69256],{},[519,69257],{"alt":31,"src":69258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69260,69261],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69263,69264],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69266,69267],{},"例：",[52290,69269,69270],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,69272,69273],{},[519,69274],{"alt":31,"src":69275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69277,69278],{},"false只克隆标签，里边的内容不会克隆过来",[26,69280,69282],{"className":51110,"code":69281,"language":51112,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,69283,69284],{"__ignoreMap":31},[36,69285,69286],{"class":38,"line":39},[36,69287,69281],{"class":42},[22478,69289,69291],{"id":69290},"_33114-删除节点","3.3.11.4 删除节点",[19,69293,69294],{},[519,69295],{"alt":31,"src":69296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69298,69299],{},"父亲删儿子",[19,69301,69302],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[596,69304,69306],{"id":69305},"_3312-m端事件","3.3.12 M端事件",[19,69308,69309],{},"M端就是移动端",[19,69311,69312],{},[519,69313],{"alt":31,"src":69314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[596,69316,69318],{"id":69317},"_3313-插件","3.3.13 插件",[19,69320,69321],{},"要熟悉官网！！！",[19,69323,69324],{},[43,69325,69326],{"href":69326,"rel":69327},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24345],[19,69329,69330],{},[43,69331,69332],{"href":69332,"rel":69333},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24345],[596,69335,69337],{"id":69336},"_3314-学生信息表","3.3.14 学生信息表",[579,69339,69340,69343,69346,69349,69352,69355,69358,69361],{},[582,69341,69342],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[582,69344,69345],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[582,69347,69348],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[582,69350,69351],{},"用好表单元素自带的属性，value,name等",[582,69353,69354],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[582,69356,69357],{},"不要忘记事件对象",[582,69359,69360],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[582,69362,69363],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69365,69366],{},"结构：",[26,69368,69370],{"className":51110,"code":69369,"language":51112,"meta":31,"style":31},"\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",[33,69371,69372,69382,69396,69400,69408,69422,69442,69463,69476,69500,69508,69512,69520,69533,69554,69582,69610,69615,69637,69657,69676,69684,69712,69734,69754,69774,69794,69814,69834,69842,69862,69870,69874,69887,69895,69903,69911,69924,69937,69950,69963,69976,69989,70002,70010,70018,70026,70031,70036,70041,70046,70051,70056,70061,70066,70071,70076,70081,70086,70091,70099,70107,70115,70119,70139,70158,70178,70198,70218,70238,70242,70247,70267,70272,70282,70287,70292,70312,70334,70339,70349,70353,70357,70362,70367,70396,70410,70425,70429,70433,70437,70442,70453,70466,70471,70476,70481,70486,70491,70495,70500,70505,70514,70519,70524,70536,70541,70548,70552,70557,70567,70572,70582,70587,70615,70636,70646,70666,70684,70701,70718,70735,70752,70756,70766,70771,70776,70781,70792,70796,70800,70804,70809,70814,70835,70847,70852,70857,70862,70876,70881,70888,70892,70896,70904,70908,70916,70920],{"__ignoreMap":31},[36,69373,69374,69376,69378,69380],{"class":38,"line":39},[36,69375,51774],{"class":42},[36,69377,51778],{"class":51777},[36,69379,51781],{"class":2443},[36,69381,51784],{"class":42},[36,69383,69384,69386,69388,69390,69392,69394],{"class":38,"line":66},[36,69385,1523],{"class":42},[36,69387,51112],{"class":51777},[36,69389,51793],{"class":2443},[36,69391,47],{"class":42},[36,69393,51798],{"class":405},[36,69395,51784],{"class":42},[36,69397,69398],{"class":38,"line":73},[36,69399,2880],{"emptyLinePlaceholder":553},[36,69401,69402,69404,69406],{"class":38,"line":79},[36,69403,1523],{"class":42},[36,69405,51811],{"class":51777},[36,69407,51784],{"class":42},[36,69409,69410,69412,69414,69416,69418,69420],{"class":38,"line":85},[36,69411,52621],{"class":42},[36,69413,51821],{"class":51777},[36,69415,51824],{"class":2443},[36,69417,47],{"class":42},[36,69419,51829],{"class":405},[36,69421,59604],{"class":42},[36,69423,69424,69426,69428,69430,69432,69434,69436,69438,69440],{"class":38,"line":419},[36,69425,52621],{"class":42},[36,69427,51821],{"class":51777},[36,69429,15400],{"class":2443},[36,69431,47],{"class":42},[36,69433,51868],{"class":405},[36,69435,51848],{"class":2443},[36,69437,47],{"class":42},[36,69439,51875],{"class":405},[36,69441,59604],{"class":42},[36,69443,69444,69446,69448,69450,69452,69454,69456,69458,69461],{"class":38,"line":425},[36,69445,52621],{"class":42},[36,69447,51821],{"class":51777},[36,69449,51840],{"class":2443},[36,69451,47],{"class":42},[36,69453,51845],{"class":405},[36,69455,51848],{"class":2443},[36,69457,47],{"class":42},[36,69459,69460],{"class":405},"\"ie=edge\"",[36,69462,59604],{"class":42},[36,69464,69465,69467,69469,69472,69474],{"class":38,"line":431},[36,69466,52621],{"class":42},[36,69468,51884],{"class":51777},[36,69470,69471],{"class":42},">学生信息管理\u003C\u002F",[36,69473,51884],{"class":51777},[36,69475,51784],{"class":42},[36,69477,69478,69480,69483,69486,69488,69491,69493,69495,69498],{"class":38,"line":437},[36,69479,52621],{"class":42},[36,69481,69482],{"class":51777},"link",[36,69484,69485],{"class":2443}," rel",[36,69487,47],{"class":42},[36,69489,69490],{"class":405},"\"stylesheet\"",[36,69492,61534],{"class":2443},[36,69494,47],{"class":42},[36,69496,69497],{"class":405},"\"css\u002Findex.css\"",[36,69499,59604],{"class":42},[36,69501,69502,69504,69506],{"class":38,"line":443},[36,69503,52262],{"class":42},[36,69505,51811],{"class":51777},[36,69507,51784],{"class":42},[36,69509,69510],{"class":38,"line":2092},[36,69511,2880],{"emptyLinePlaceholder":553},[36,69513,69514,69516,69518],{"class":38,"line":2097},[36,69515,1523],{"class":42},[36,69517,52277],{"class":51777},[36,69519,51784],{"class":42},[36,69521,69522,69524,69526,69529,69531],{"class":38,"line":2103},[36,69523,52621],{"class":42},[36,69525,10],{"class":51777},[36,69527,69528],{"class":42},">新增学员\u003C\u002F",[36,69530,10],{"class":51777},[36,69532,51784],{"class":42},[36,69534,69535,69537,69539,69541,69543,69545,69548,69550,69552],{"class":38,"line":2108},[36,69536,52621],{"class":42},[36,69538,67102],{"class":51777},[36,69540,53963],{"class":2443},[36,69542,47],{"class":42},[36,69544,63141],{"class":405},[36,69546,69547],{"class":2443}," autocomplete",[36,69549,47],{"class":42},[36,69551,32253],{"class":405},[36,69553,51784],{"class":42},[36,69555,69556,69559,69561,69563,69565,69567,69569,69571,69574,69576,69578,69580],{"class":38,"line":2122},[36,69557,69558],{"class":42},"    姓名：\u003C",[36,69560,54298],{"class":51777},[36,69562,54301],{"class":2443},[36,69564,47],{"class":42},[36,69566,63176],{"class":405},[36,69568,53963],{"class":2443},[36,69570,47],{"class":42},[36,69572,69573],{"class":405},"\"uname\"",[36,69575,15400],{"class":2443},[36,69577,47],{"class":42},[36,69579,69573],{"class":405},[36,69581,59604],{"class":42},[36,69583,69584,69587,69589,69591,69593,69595,69597,69599,69602,69604,69606,69608],{"class":38,"line":2127},[36,69585,69586],{"class":42},"    年龄：\u003C",[36,69588,54298],{"class":51777},[36,69590,54301],{"class":2443},[36,69592,47],{"class":42},[36,69594,63176],{"class":405},[36,69596,53963],{"class":2443},[36,69598,47],{"class":42},[36,69600,69601],{"class":405},"\"age\"",[36,69603,15400],{"class":2443},[36,69605,47],{"class":42},[36,69607,69601],{"class":405},[36,69609,59604],{"class":42},[36,69611,69612],{"class":38,"line":2133},[36,69613,69614],{"class":42},"    性别:\n",[36,69616,69617,69619,69622,69624,69626,69629,69631,69633,69635],{"class":38,"line":2154},[36,69618,51818],{"class":42},[36,69620,69621],{"class":51777},"select",[36,69623,15400],{"class":2443},[36,69625,47],{"class":42},[36,69627,69628],{"class":405},"\"gender\"",[36,69630,53963],{"class":2443},[36,69632,47],{"class":42},[36,69634,69628],{"class":405},[36,69636,51784],{"class":42},[36,69638,69639,69641,69644,69646,69648,69650,69653,69655],{"class":38,"line":2159},[36,69640,55711],{"class":42},[36,69642,69643],{"class":51777},"option",[36,69645,67128],{"class":2443},[36,69647,47],{"class":42},[36,69649,10441],{"class":405},[36,69651,69652],{"class":42},">男\u003C\u002F",[36,69654,69643],{"class":51777},[36,69656,51784],{"class":42},[36,69658,69659,69661,69663,69665,69667,69669,69672,69674],{"class":38,"line":2173},[36,69660,55711],{"class":42},[36,69662,69643],{"class":51777},[36,69664,67128],{"class":2443},[36,69666,47],{"class":42},[36,69668,10510],{"class":405},[36,69670,69671],{"class":42},">女\u003C\u002F",[36,69673,69643],{"class":51777},[36,69675,51784],{"class":42},[36,69677,69678,69680,69682],{"class":38,"line":2178},[36,69679,52253],{"class":42},[36,69681,69621],{"class":51777},[36,69683,51784],{"class":42},[36,69685,69686,69689,69691,69693,69695,69697,69699,69701,69704,69706,69708,69710],{"class":38,"line":2207},[36,69687,69688],{"class":42},"    薪资：\u003C",[36,69690,54298],{"class":51777},[36,69692,54301],{"class":2443},[36,69694,47],{"class":42},[36,69696,63176],{"class":405},[36,69698,53963],{"class":2443},[36,69700,47],{"class":42},[36,69702,69703],{"class":405},"\"salary\"",[36,69705,15400],{"class":2443},[36,69707,47],{"class":42},[36,69709,69703],{"class":405},[36,69711,59604],{"class":42},[36,69713,69714,69717,69719,69721,69723,69726,69728,69730,69732],{"class":38,"line":2212},[36,69715,69716],{"class":42},"    就业城市：\u003C",[36,69718,69621],{"class":51777},[36,69720,15400],{"class":2443},[36,69722,47],{"class":42},[36,69724,69725],{"class":405},"\"city\"",[36,69727,53963],{"class":2443},[36,69729,47],{"class":42},[36,69731,69725],{"class":405},[36,69733,51784],{"class":42},[36,69735,69736,69738,69740,69742,69744,69747,69750,69752],{"class":38,"line":2229},[36,69737,55711],{"class":42},[36,69739,69643],{"class":51777},[36,69741,67128],{"class":2443},[36,69743,47],{"class":42},[36,69745,69746],{"class":405},"\"北京\"",[36,69748,69749],{"class":42},">北京\u003C\u002F",[36,69751,69643],{"class":51777},[36,69753,51784],{"class":42},[36,69755,69756,69758,69760,69762,69764,69767,69770,69772],{"class":38,"line":2234},[36,69757,55711],{"class":42},[36,69759,69643],{"class":51777},[36,69761,67128],{"class":2443},[36,69763,47],{"class":42},[36,69765,69766],{"class":405},"\"上海\"",[36,69768,69769],{"class":42},">上海\u003C\u002F",[36,69771,69643],{"class":51777},[36,69773,51784],{"class":42},[36,69775,69776,69778,69780,69782,69784,69787,69790,69792],{"class":38,"line":2239},[36,69777,55711],{"class":42},[36,69779,69643],{"class":51777},[36,69781,67128],{"class":2443},[36,69783,47],{"class":42},[36,69785,69786],{"class":405},"\"广州\"",[36,69788,69789],{"class":42},">广州\u003C\u002F",[36,69791,69643],{"class":51777},[36,69793,51784],{"class":42},[36,69795,69796,69798,69800,69802,69804,69807,69810,69812],{"class":38,"line":2244},[36,69797,55711],{"class":42},[36,69799,69643],{"class":51777},[36,69801,67128],{"class":2443},[36,69803,47],{"class":42},[36,69805,69806],{"class":405},"\"深圳\"",[36,69808,69809],{"class":42},">深圳\u003C\u002F",[36,69811,69643],{"class":51777},[36,69813,51784],{"class":42},[36,69815,69816,69818,69820,69822,69824,69827,69830,69832],{"class":38,"line":2258},[36,69817,55711],{"class":42},[36,69819,69643],{"class":51777},[36,69821,67128],{"class":2443},[36,69823,47],{"class":42},[36,69825,69826],{"class":405},"\"曹县\"",[36,69828,69829],{"class":42},">曹县\u003C\u002F",[36,69831,69643],{"class":51777},[36,69833,51784],{"class":42},[36,69835,69836,69838,69840],{"class":38,"line":2263},[36,69837,52253],{"class":42},[36,69839,69621],{"class":51777},[36,69841,51784],{"class":42},[36,69843,69844,69846,69848,69850,69852,69855,69858,69860],{"class":38,"line":3057},[36,69845,51818],{"class":42},[36,69847,54364],{"class":51777},[36,69849,53963],{"class":2443},[36,69851,47],{"class":42},[36,69853,69854],{"class":405},"\"add\"",[36,69856,69857],{"class":42},">录入\u003C\u002F",[36,69859,54364],{"class":51777},[36,69861,51784],{"class":42},[36,69863,69864,69866,69868],{"class":38,"line":3071},[36,69865,52894],{"class":42},[36,69867,67102],{"class":51777},[36,69869,51784],{"class":42},[36,69871,69872],{"class":38,"line":3079},[36,69873,2880],{"emptyLinePlaceholder":553},[36,69875,69876,69878,69880,69883,69885],{"class":38,"line":3084},[36,69877,52621],{"class":42},[36,69879,10],{"class":51777},[36,69881,69882],{"class":42},">就业榜\u003C\u002F",[36,69884,10],{"class":51777},[36,69886,51784],{"class":42},[36,69888,69889,69891,69893],{"class":38,"line":3090},[36,69890,52621],{"class":42},[36,69892,758],{"class":51777},[36,69894,51784],{"class":42},[36,69896,69897,69899,69901],{"class":38,"line":3096},[36,69898,51818],{"class":42},[36,69900,761],{"class":51777},[36,69902,51784],{"class":42},[36,69904,69905,69907,69909],{"class":38,"line":3101},[36,69906,55711],{"class":42},[36,69908,764],{"class":51777},[36,69910,51784],{"class":42},[36,69912,69913,69915,69917,69920,69922],{"class":38,"line":8428},[36,69914,55779],{"class":42},[36,69916,767],{"class":51777},[36,69918,69919],{"class":42},">序号\u003C\u002F",[36,69921,767],{"class":51777},[36,69923,51784],{"class":42},[36,69925,69926,69928,69930,69933,69935],{"class":38,"line":8452},[36,69927,55779],{"class":42},[36,69929,767],{"class":51777},[36,69931,69932],{"class":42},">姓名\u003C\u002F",[36,69934,767],{"class":51777},[36,69936,51784],{"class":42},[36,69938,69939,69941,69943,69946,69948],{"class":38,"line":8457},[36,69940,55779],{"class":42},[36,69942,767],{"class":51777},[36,69944,69945],{"class":42},">年龄\u003C\u002F",[36,69947,767],{"class":51777},[36,69949,51784],{"class":42},[36,69951,69952,69954,69956,69959,69961],{"class":38,"line":8463},[36,69953,55779],{"class":42},[36,69955,767],{"class":51777},[36,69957,69958],{"class":42},">性别\u003C\u002F",[36,69960,767],{"class":51777},[36,69962,51784],{"class":42},[36,69964,69965,69967,69969,69972,69974],{"class":38,"line":8490},[36,69966,55779],{"class":42},[36,69968,767],{"class":51777},[36,69970,69971],{"class":42},">薪资\u003C\u002F",[36,69973,767],{"class":51777},[36,69975,51784],{"class":42},[36,69977,69978,69980,69982,69985,69987],{"class":38,"line":8495},[36,69979,55779],{"class":42},[36,69981,767],{"class":51777},[36,69983,69984],{"class":42},">就业城市\u003C\u002F",[36,69986,767],{"class":51777},[36,69988,51784],{"class":42},[36,69990,69991,69993,69995,69998,70000],{"class":38,"line":8501},[36,69992,55779],{"class":42},[36,69994,767],{"class":51777},[36,69996,69997],{"class":42},">操作\u003C\u002F",[36,69999,767],{"class":51777},[36,70001,51784],{"class":42},[36,70003,70004,70006,70008],{"class":38,"line":8513},[36,70005,55884],{"class":42},[36,70007,764],{"class":51777},[36,70009,51784],{"class":42},[36,70011,70012,70014,70016],{"class":38,"line":8525},[36,70013,52253],{"class":42},[36,70015,761],{"class":51777},[36,70017,51784],{"class":42},[36,70019,70020,70022,70024],{"class":38,"line":8537},[36,70021,51818],{"class":42},[36,70023,805],{"class":51777},[36,70025,51784],{"class":42},[36,70027,70028],{"class":38,"line":10196},[36,70029,70030],{"class":69},"      \u003C!-- \n",[36,70032,70033],{"class":38,"line":10221},[36,70034,70035],{"class":69},"        \u003Ctr>\n",[36,70037,70038],{"class":38,"line":10244},[36,70039,70040],{"class":69},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,70042,70043],{"class":38,"line":10268},[36,70044,70045],{"class":69},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,70047,70048],{"class":38,"line":10273},[36,70049,70050],{"class":69},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,70052,70053],{"class":38,"line":10278},[36,70054,70055],{"class":69},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,70057,70058],{"class":38,"line":10283},[36,70059,70060],{"class":69},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,70062,70063],{"class":38,"line":10292},[36,70064,70065],{"class":69},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,70067,70068],{"class":38,"line":10297},[36,70069,70070],{"class":69},"          \u003Ctd>\n",[36,70072,70073],{"class":38,"line":10303},[36,70074,70075],{"class":69},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,70077,70078],{"class":38,"line":10324},[36,70079,70080],{"class":69},"          \u003C\u002Ftd>\n",[36,70082,70083],{"class":38,"line":10330},[36,70084,70085],{"class":69},"        \u003C\u002Ftr> \n",[36,70087,70088],{"class":38,"line":10344},[36,70089,70090],{"class":69},"        -->\n",[36,70092,70093,70095,70097],{"class":38,"line":10350},[36,70094,52253],{"class":42},[36,70096,805],{"class":51777},[36,70098,51784],{"class":42},[36,70100,70101,70103,70105],{"class":38,"line":10377},[36,70102,52894],{"class":42},[36,70104,758],{"class":51777},[36,70106,51784],{"class":42},[36,70108,70109,70111,70113],{"class":38,"line":10386},[36,70110,52621],{"class":42},[36,70112,52290],{"class":51777},[36,70114,51784],{"class":42},[36,70116,70117],{"class":38,"line":10392},[36,70118,60435],{"class":69},[36,70120,70121,70123,70126,70128,70130,70132,70134,70137],{"class":38,"line":10400},[36,70122,11701],{"class":46},[36,70124,70125],{"class":53}," uname",[36,70127,14044],{"class":46},[36,70129,54873],{"class":42},[36,70131,54876],{"class":2443},[36,70133,345],{"class":42},[36,70135,70136],{"class":405},"'.uname'",[36,70138,63],{"class":42},[36,70140,70141,70143,70145,70147,70149,70151,70153,70156],{"class":38,"line":10405},[36,70142,11701],{"class":46},[36,70144,16169],{"class":53},[36,70146,14044],{"class":46},[36,70148,54873],{"class":42},[36,70150,54876],{"class":2443},[36,70152,345],{"class":42},[36,70154,70155],{"class":405},"'.age'",[36,70157,63],{"class":42},[36,70159,70160,70162,70165,70167,70169,70171,70173,70176],{"class":38,"line":17084},[36,70161,11701],{"class":46},[36,70163,70164],{"class":53}," gender",[36,70166,14044],{"class":46},[36,70168,54873],{"class":42},[36,70170,54876],{"class":2443},[36,70172,345],{"class":42},[36,70174,70175],{"class":405},"'.gender'",[36,70177,63],{"class":42},[36,70179,70180,70182,70185,70187,70189,70191,70193,70196],{"class":38,"line":17090},[36,70181,11701],{"class":46},[36,70183,70184],{"class":53}," salary",[36,70186,14044],{"class":46},[36,70188,54873],{"class":42},[36,70190,54876],{"class":2443},[36,70192,345],{"class":42},[36,70194,70195],{"class":405},"'.salary'",[36,70197,63],{"class":42},[36,70199,70200,70202,70205,70207,70209,70211,70213,70216],{"class":38,"line":17113},[36,70201,11701],{"class":46},[36,70203,70204],{"class":53}," city",[36,70206,14044],{"class":46},[36,70208,54873],{"class":42},[36,70210,54876],{"class":2443},[36,70212,345],{"class":42},[36,70214,70215],{"class":405},"'.city'",[36,70217,63],{"class":42},[36,70219,70220,70222,70225,70227,70229,70231,70233,70236],{"class":38,"line":17119},[36,70221,11701],{"class":46},[36,70223,70224],{"class":53}," tbody",[36,70226,14044],{"class":46},[36,70228,54873],{"class":42},[36,70230,54876],{"class":2443},[36,70232,345],{"class":42},[36,70234,70235],{"class":405},"'tbody'",[36,70237,63],{"class":42},[36,70239,70240],{"class":38,"line":17142},[36,70241,2880],{"emptyLinePlaceholder":553},[36,70243,70244],{"class":38,"line":17156},[36,70245,70246],{"class":69},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,70248,70249,70251,70254,70256,70258,70260,70262,70265],{"class":38,"line":17176},[36,70250,11701],{"class":46},[36,70252,70253],{"class":53}," items",[36,70255,14044],{"class":46},[36,70257,54873],{"class":42},[36,70259,56158],{"class":2443},[36,70261,345],{"class":42},[36,70263,70264],{"class":405},"'[name]'",[36,70266,63],{"class":42},[36,70268,70269],{"class":38,"line":17182},[36,70270,70271],{"class":69},"    \u002F\u002F 声明一个空的数组\n",[36,70273,70274,70276,70278,70280],{"class":38,"line":17193},[36,70275,11701],{"class":46},[36,70277,58172],{"class":53},[36,70279,14044],{"class":46},[36,70281,52315],{"class":42},[36,70283,70284],{"class":38,"line":17216},[36,70285,70286],{"class":69},"    \u002F\u002F 1.录入模块\n",[36,70288,70289],{"class":38,"line":17238},[36,70290,70291],{"class":69},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,70293,70294,70296,70299,70301,70303,70305,70307,70310],{"class":38,"line":17243},[36,70295,11701],{"class":46},[36,70297,70298],{"class":53}," info",[36,70300,14044],{"class":46},[36,70302,54873],{"class":42},[36,70304,54876],{"class":2443},[36,70306,345],{"class":42},[36,70308,70309],{"class":405},"'.info'",[36,70311,63],{"class":42},[36,70313,70314,70317,70319,70321,70324,70326,70328,70330,70332],{"class":38,"line":17249},[36,70315,70316],{"class":42},"    info.",[36,70318,58290],{"class":2443},[36,70320,345],{"class":42},[36,70322,70323],{"class":405},"'submit'",[36,70325,12915],{"class":42},[36,70327,54926],{"class":46},[36,70329,2138],{"class":42},[36,70331,697],{"class":5696},[36,70333,12922],{"class":42},[36,70335,70336],{"class":38,"line":17263},[36,70337,70338],{"class":69},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,70340,70341,70344,70347],{"class":38,"line":17276},[36,70342,70343],{"class":42},"      e.",[36,70345,70346],{"class":2443},"preventDefault",[36,70348,2456],{"class":42},[36,70350,70351],{"class":38,"line":17281},[36,70352,60489],{"class":69},[36,70354,70355],{"class":38,"line":17295},[36,70356,2880],{"emptyLinePlaceholder":553},[36,70358,70359],{"class":38,"line":17300},[36,70360,70361],{"class":69},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,70363,70364],{"class":38,"line":17306},[36,70365,70366],{"class":69},"      \u002F\u002F 先遍历循环\n",[36,70368,70369,70371,70373,70375,70377,70379,70381,70383,70385,70388,70390,70392,70394],{"class":38,"line":17311},[36,70370,52761],{"class":46},[36,70372,2138],{"class":42},[36,70374,52324],{"class":46},[36,70376,9918],{"class":42},[36,70378,47],{"class":46},[36,70380,4573],{"class":53},[36,70382,9925],{"class":42},[36,70384,1523],{"class":46},[36,70386,70387],{"class":42}," items.",[36,70389,52445],{"class":53},[36,70391,3694],{"class":42},[36,70393,2772],{"class":46},[36,70395,12922],{"class":42},[36,70397,70398,70400,70403,70405,70408],{"class":38,"line":17325},[36,70399,2977],{"class":46},[36,70401,70402],{"class":42}," (items[i].value ",[36,70404,54963],{"class":46},[36,70406,70407],{"class":405}," ''",[36,70409,12922],{"class":42},[36,70411,70412,70415,70418,70420,70423],{"class":38,"line":17330},[36,70413,70414],{"class":46},"          return",[36,70416,70417],{"class":2443}," alert",[36,70419,345],{"class":42},[36,70421,70422],{"class":405},"'输入内容不能为空'",[36,70424,63],{"class":42},[36,70426,70427],{"class":38,"line":17335},[36,70428,3009],{"class":42},[36,70430,70431],{"class":38,"line":17349},[36,70432,52875],{"class":42},[36,70434,70435],{"class":38,"line":17361},[36,70436,2880],{"emptyLinePlaceholder":553},[36,70438,70439],{"class":38,"line":17366},[36,70440,70441],{"class":69},"      \u002F\u002F 创建新的对象\n",[36,70443,70444,70446,70449,70451],{"class":38,"line":17379},[36,70445,58705],{"class":46},[36,70447,70448],{"class":53}," obj",[36,70450,14044],{"class":46},[36,70452,16052],{"class":42},[36,70454,70455,70458,70460,70462,70464],{"class":38,"line":17384},[36,70456,70457],{"class":42},"        stuID: arr.",[36,70459,52445],{"class":53},[36,70461,46043],{"class":46},[36,70463,25599],{"class":53},[36,70465,31944],{"class":42},[36,70467,70468],{"class":38,"line":17389},[36,70469,70470],{"class":42},"        uname: uname.value,\n",[36,70472,70473],{"class":38,"line":17394},[36,70474,70475],{"class":42},"        age: age.value,\n",[36,70477,70478],{"class":38,"line":17407},[36,70479,70480],{"class":42},"        gender: gender.value,\n",[36,70482,70483],{"class":38,"line":17412},[36,70484,70485],{"class":42},"        salary: salary.value,\n",[36,70487,70488],{"class":38,"line":33110},[36,70489,70490],{"class":42},"        city: city.value\n",[36,70492,70493],{"class":38,"line":33116},[36,70494,52875],{"class":42},[36,70496,70497],{"class":38,"line":33122},[36,70498,70499],{"class":69},"      \u002F\u002F console.log(obj);\n",[36,70501,70502],{"class":38,"line":33128},[36,70503,70504],{"class":69},"      \u002F\u002F 追加到数组里面\n",[36,70506,70507,70509,70511],{"class":38,"line":33134},[36,70508,58484],{"class":42},[36,70510,52361],{"class":2443},[36,70512,70513],{"class":42},"(obj)\n",[36,70515,70516],{"class":38,"line":33145},[36,70517,70518],{"class":69},"      \u002F\u002F console.log(arr);\n",[36,70520,70521],{"class":38,"line":33151},[36,70522,70523],{"class":69},"      \u002F\u002F 清空表单  reset重置表单\n",[36,70525,70526,70529,70531,70534],{"class":38,"line":33171},[36,70527,70528],{"class":53},"      this",[36,70530,1171],{"class":42},[36,70532,70533],{"class":2443},"reset",[36,70535,2456],{"class":42},[36,70537,70538],{"class":38,"line":33177},[36,70539,70540],{"class":69},"      \u002F\u002F 调用渲染函数\n",[36,70542,70543,70546],{"class":38,"line":33188},[36,70544,70545],{"class":2443},"      render",[36,70547,2456],{"class":42},[36,70549,70550],{"class":38,"line":33194},[36,70551,33938],{"class":42},[36,70553,70554],{"class":38,"line":33200},[36,70555,70556],{"class":69},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,70558,70559,70562,70565],{"class":38,"line":33206},[36,70560,70561],{"class":46},"    function",[36,70563,70564],{"class":2443}," render",[36,70566,11333],{"class":42},[36,70568,70569],{"class":38,"line":33212},[36,70570,70571],{"class":69},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,70573,70574,70577,70579],{"class":38,"line":33218},[36,70575,70576],{"class":42},"      tbody.innerHTML ",[36,70578,47],{"class":46},[36,70580,70581],{"class":405}," ''\n",[36,70583,70584],{"class":38,"line":33224},[36,70585,70586],{"class":69},"      \u002F\u002F 遍历数组\n",[36,70588,70589,70591,70593,70595,70597,70599,70601,70603,70605,70607,70609,70611,70613],{"class":38,"line":33230},[36,70590,52761],{"class":46},[36,70592,2138],{"class":42},[36,70594,52324],{"class":46},[36,70596,9918],{"class":42},[36,70598,47],{"class":46},[36,70600,4573],{"class":53},[36,70602,9925],{"class":42},[36,70604,1523],{"class":46},[36,70606,52442],{"class":42},[36,70608,52445],{"class":53},[36,70610,3694],{"class":42},[36,70612,2772],{"class":46},[36,70614,12922],{"class":42},[36,70616,70617,70619,70622,70624,70626,70629,70631,70634],{"class":38,"line":33250},[36,70618,61747],{"class":46},[36,70620,70621],{"class":53}," tr",[36,70623,14044],{"class":46},[36,70625,54873],{"class":42},[36,70627,70628],{"class":2443},"createElement",[36,70630,345],{"class":42},[36,70632,70633],{"class":405},"'tr'",[36,70635,63],{"class":42},[36,70637,70638,70641,70643],{"class":38,"line":33256},[36,70639,70640],{"class":42},"        tr.innerHTML ",[36,70642,47],{"class":46},[36,70644,70645],{"class":405}," `\n",[36,70647,70648,70651,70653,70655,70657,70660,70663],{"class":38,"line":33272},[36,70649,70650],{"class":405},"        \u003Ctd>${",[36,70652,4360],{"class":42},[36,70654,1503],{"class":405},[36,70656,1057],{"class":42},[36,70658,70659],{"class":405},"].",[36,70661,70662],{"class":42},"stuID",[36,70664,70665],{"class":405},"}\u003C\u002Ftd>\n",[36,70667,70668,70671,70673,70675,70677,70679,70682],{"class":38,"line":33278},[36,70669,70670],{"class":405},"          \u003Ctd>${",[36,70672,4360],{"class":42},[36,70674,1503],{"class":405},[36,70676,1057],{"class":42},[36,70678,70659],{"class":405},[36,70680,70681],{"class":42},"uname",[36,70683,70665],{"class":405},[36,70685,70686,70688,70690,70692,70694,70696,70699],{"class":38,"line":33292},[36,70687,70670],{"class":405},[36,70689,4360],{"class":42},[36,70691,1503],{"class":405},[36,70693,1057],{"class":42},[36,70695,70659],{"class":405},[36,70697,70698],{"class":42},"age",[36,70700,70665],{"class":405},[36,70702,70703,70705,70707,70709,70711,70713,70716],{"class":38,"line":33298},[36,70704,70670],{"class":405},[36,70706,4360],{"class":42},[36,70708,1503],{"class":405},[36,70710,1057],{"class":42},[36,70712,70659],{"class":405},[36,70714,70715],{"class":42},"gender",[36,70717,70665],{"class":405},[36,70719,70720,70722,70724,70726,70728,70730,70733],{"class":38,"line":33313},[36,70721,70670],{"class":405},[36,70723,4360],{"class":42},[36,70725,1503],{"class":405},[36,70727,1057],{"class":42},[36,70729,70659],{"class":405},[36,70731,70732],{"class":42},"salary",[36,70734,70665],{"class":405},[36,70736,70737,70739,70741,70743,70745,70747,70750],{"class":38,"line":33319},[36,70738,70670],{"class":405},[36,70740,4360],{"class":42},[36,70742,1503],{"class":405},[36,70744,1057],{"class":42},[36,70746,70659],{"class":405},[36,70748,70749],{"class":42},"city",[36,70751,70665],{"class":405},[36,70753,70754],{"class":38,"line":33328},[36,70755,70070],{"class":405},[36,70757,70758,70761,70763],{"class":38,"line":33334},[36,70759,70760],{"class":405},"            \u003Ca href=\"javascript:\" data-id=${",[36,70762,1057],{"class":42},[36,70764,70765],{"class":405},"}>删除\u003C\u002Fa>\n",[36,70767,70768],{"class":38,"line":33343},[36,70769,70770],{"class":405},"          \u003C\u002Ftd> \n",[36,70772,70773],{"class":38,"line":33349},[36,70774,70775],{"class":405},"          `\n",[36,70777,70778],{"class":38,"line":33355},[36,70779,70780],{"class":69},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,70782,70783,70786,70789],{"class":38,"line":33364},[36,70784,70785],{"class":42},"        tbody.",[36,70787,70788],{"class":2443},"appendChild",[36,70790,70791],{"class":42},"(tr)\n",[36,70793,70794],{"class":38,"line":33370},[36,70795,52875],{"class":42},[36,70797,70798],{"class":38,"line":33381},[36,70799,2667],{"class":42},[36,70801,70802],{"class":38,"line":33387},[36,70803,2880],{"emptyLinePlaceholder":553},[36,70805,70806],{"class":38,"line":33406},[36,70807,70808],{"class":69},"    \u002F\u002F 3.删除委托\n",[36,70810,70811],{"class":38,"line":33412},[36,70812,70813],{"class":69},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,70815,70816,70819,70821,70823,70825,70827,70829,70831,70833],{"class":38,"line":33423},[36,70817,70818],{"class":42},"    tbody.",[36,70820,58290],{"class":2443},[36,70822,345],{"class":42},[36,70824,58295],{"class":405},[36,70826,12915],{"class":42},[36,70828,54926],{"class":46},[36,70830,2138],{"class":42},[36,70832,697],{"class":5696},[36,70834,12922],{"class":42},[36,70836,70837,70839,70841,70843,70845],{"class":38,"line":33429},[36,70838,54957],{"class":46},[36,70840,67511],{"class":42},[36,70842,54963],{"class":46},[36,70844,68733],{"class":405},[36,70846,12922],{"class":42},[36,70848,70849],{"class":38,"line":33449},[36,70850,70851],{"class":69},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,70853,70854],{"class":38,"line":33465},[36,70855,70856],{"class":69},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,70858,70859],{"class":38,"line":33471},[36,70860,70861],{"class":69},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,70863,70864,70867,70869,70872,70874],{"class":38,"line":33485},[36,70865,70866],{"class":42},"        arr.",[36,70868,58487],{"class":2443},[36,70870,70871],{"class":42},"(e.target.dataset.id, ",[36,70873,54],{"class":53},[36,70875,63],{"class":42},[36,70877,70878],{"class":38,"line":33491},[36,70879,70880],{"class":69},"        \u002F\u002F 重新渲染一次\n",[36,70882,70883,70886],{"class":38,"line":33497},[36,70884,70885],{"class":2443},"        render",[36,70887,2456],{"class":42},[36,70889,70890],{"class":38,"line":33508},[36,70891,52875],{"class":42},[36,70893,70894],{"class":38,"line":33514},[36,70895,33938],{"class":42},[36,70897,70898,70900,70902],{"class":38,"line":33520},[36,70899,52894],{"class":42},[36,70901,52290],{"class":51777},[36,70903,51784],{"class":42},[36,70905,70906],{"class":38,"line":33530},[36,70907,2880],{"emptyLinePlaceholder":553},[36,70909,70910,70912,70914],{"class":38,"line":33536},[36,70911,52262],{"class":42},[36,70913,52277],{"class":51777},[36,70915,51784],{"class":42},[36,70917,70918],{"class":38,"line":33547},[36,70919,2880],{"emptyLinePlaceholder":553},[36,70921,70922,70924,70926],{"class":38,"line":33553},[36,70923,52262],{"class":42},[36,70925,51112],{"class":51777},[36,70927,51784],{"class":42},[19,70929,70930],{},"样式：",[26,70932,70936],{"className":70933,"code":70934,"language":70935,"meta":31,"style":31},"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",[33,70937,70938,70943,70953,70962,70966,70970,70975,70985,70990,70994,70999,71009,71014,71023,71027,71031,71036,71041,71051,71061,71066,71070,71075,71084,71094,71099,71109,71119,71123,71128,71136,71140,71145,71150,71155,71163,71172,71176,71181,71190,71194,71199,71208,71212,71217,71226,71235,71243,71247,71252,71261,71271,71280,71290,71296,71305,71315,71325,71329,71334,71343,71351,71361,71369,71378,71387,71397,71405,71409,71414,71423],{"__ignoreMap":31},[36,70939,70940],{"class":38,"line":39},[36,70941,70942],{"class":42},"* {\n",[36,70944,70945,70948,70950],{"class":38,"line":66},[36,70946,70947],{"class":51777},"  margin",[36,70949,51914],{"class":42},[36,70951,70952],{"class":405},"0;\n",[36,70954,70955,70958,70960],{"class":38,"line":73},[36,70956,70957],{"class":405},"  padding",[36,70959,51914],{"class":42},[36,70961,70952],{"class":405},[36,70963,70964],{"class":38,"line":79},[36,70965,2045],{"class":42},[36,70967,70968],{"class":38,"line":85},[36,70969,2880],{"emptyLinePlaceholder":553},[36,70971,70972],{"class":38,"line":419},[36,70973,70974],{"class":405},"a {\n",[36,70976,70977,70980,70982],{"class":38,"line":425},[36,70978,70979],{"class":51777},"  text-decoration",[36,70981,51914],{"class":42},[36,70983,70984],{"class":405},"none;\n",[36,70986,70987],{"class":38,"line":431},[36,70988,70989],{"class":405},"  color:#721c24;\n",[36,70991,70992],{"class":38,"line":437},[36,70993,2045],{"class":42},[36,70995,70996],{"class":38,"line":443},[36,70997,70998],{"class":405},"h1 {\n",[36,71000,71001,71004,71006],{"class":38,"line":2092},[36,71002,71003],{"class":51777},"  text-align",[36,71005,51914],{"class":42},[36,71007,71008],{"class":405},"center;\n",[36,71010,71011],{"class":38,"line":2097},[36,71012,71013],{"class":405},"  color:#333;\n",[36,71015,71016,71018,71020],{"class":38,"line":2103},[36,71017,70947],{"class":51777},[36,71019,51914],{"class":42},[36,71021,71022],{"class":405},"20px 0;\n",[36,71024,71025],{"class":38,"line":2108},[36,71026,3154],{"class":42},[36,71028,71029],{"class":38,"line":2122},[36,71030,2045],{"class":42},[36,71032,71033],{"class":38,"line":2127},[36,71034,71035],{"class":405},"table {\n",[36,71037,71038],{"class":38,"line":2133},[36,71039,71040],{"class":405},"  margin:0 auto;\n",[36,71042,71043,71046,71048],{"class":38,"line":2154},[36,71044,71045],{"class":51777},"  width",[36,71047,51914],{"class":42},[36,71049,71050],{"class":405},"800px;\n",[36,71052,71053,71056,71058],{"class":38,"line":2159},[36,71054,71055],{"class":51777},"  border-collapse",[36,71057,51914],{"class":42},[36,71059,71060],{"class":405},"collapse;\n",[36,71062,71063],{"class":38,"line":2173},[36,71064,71065],{"class":405},"  color:#004085;\n",[36,71067,71068],{"class":38,"line":2178},[36,71069,2045],{"class":42},[36,71071,71072],{"class":38,"line":2207},[36,71073,71074],{"class":405},"th {\n",[36,71076,71077,71079,71081],{"class":38,"line":2212},[36,71078,70957],{"class":51777},[36,71080,51914],{"class":42},[36,71082,71083],{"class":405},"10px;\n",[36,71085,71086,71089,71091],{"class":38,"line":2229},[36,71087,71088],{"class":51777},"  background",[36,71090,51914],{"class":42},[36,71092,71093],{"class":69},"#cfe5ff;\n",[36,71095,71096],{"class":38,"line":2234},[36,71097,71098],{"class":42},"  \n",[36,71100,71101,71104,71106],{"class":38,"line":2239},[36,71102,71103],{"class":51777},"  font-size",[36,71105,51914],{"class":42},[36,71107,71108],{"class":405},"20px;\n",[36,71110,71111,71114,71116],{"class":38,"line":2244},[36,71112,71113],{"class":51777},"  font-weight",[36,71115,51914],{"class":42},[36,71117,71118],{"class":405},"400;\n",[36,71120,71121],{"class":38,"line":2258},[36,71122,2045],{"class":42},[36,71124,71125],{"class":38,"line":2263},[36,71126,71127],{"class":405},"td,th {\n",[36,71129,71130,71133],{"class":38,"line":3057},[36,71131,71132],{"class":405},"  border:1px solid",[36,71134,71135],{"class":69}," #b8daff;\n",[36,71137,71138],{"class":38,"line":3071},[36,71139,2045],{"class":42},[36,71141,71142],{"class":38,"line":3079},[36,71143,71144],{"class":405},"td {\n",[36,71146,71147],{"class":38,"line":3084},[36,71148,71149],{"class":405},"  padding:10px;\n",[36,71151,71152],{"class":38,"line":3090},[36,71153,71154],{"class":405},"  color:#666;\n",[36,71156,71157,71159,71161],{"class":38,"line":3096},[36,71158,71003],{"class":51777},[36,71160,51914],{"class":42},[36,71162,71008],{"class":405},[36,71164,71165,71167,71169],{"class":38,"line":3101},[36,71166,71103],{"class":51777},[36,71168,51914],{"class":42},[36,71170,71171],{"class":405},"16px;\n",[36,71173,71174],{"class":38,"line":8428},[36,71175,2045],{"class":42},[36,71177,71178],{"class":38,"line":8452},[36,71179,71180],{"class":405},"tbody tr {\n",[36,71182,71183,71185,71187],{"class":38,"line":8457},[36,71184,71088],{"class":51777},[36,71186,51914],{"class":42},[36,71188,71189],{"class":69},"#fff;\n",[36,71191,71192],{"class":38,"line":8463},[36,71193,2045],{"class":42},[36,71195,71196],{"class":38,"line":8490},[36,71197,71198],{"class":405},"tbody tr:hover {\n",[36,71200,71201,71203,71205],{"class":38,"line":8495},[36,71202,71088],{"class":51777},[36,71204,51914],{"class":42},[36,71206,71207],{"class":69},"#e1ecf8;\n",[36,71209,71210],{"class":38,"line":8501},[36,71211,2045],{"class":42},[36,71213,71214],{"class":38,"line":8513},[36,71215,71216],{"class":405},".info {\n",[36,71218,71219,71221,71223],{"class":38,"line":8525},[36,71220,71045],{"class":51777},[36,71222,51914],{"class":42},[36,71224,71225],{"class":405},"900px;\n",[36,71227,71228,71230,71232],{"class":38,"line":8537},[36,71229,70947],{"class":51777},[36,71231,51914],{"class":42},[36,71233,71234],{"class":405},"50px auto;\n",[36,71236,71237,71239,71241],{"class":38,"line":10196},[36,71238,71003],{"class":51777},[36,71240,51914],{"class":42},[36,71242,71008],{"class":405},[36,71244,71245],{"class":38,"line":10221},[36,71246,2045],{"class":42},[36,71248,71249],{"class":38,"line":10244},[36,71250,71251],{"class":405},".info  input, .info select {\n",[36,71253,71254,71256,71258],{"class":38,"line":10268},[36,71255,71045],{"class":51777},[36,71257,51914],{"class":42},[36,71259,71260],{"class":405},"80px;\n",[36,71262,71263,71266,71268],{"class":38,"line":10273},[36,71264,71265],{"class":51777},"  height",[36,71267,51914],{"class":42},[36,71269,71270],{"class":405},"27px;\n",[36,71272,71273,71276,71278],{"class":38,"line":10278},[36,71274,71275],{"class":51777},"  outline",[36,71277,51914],{"class":42},[36,71279,70984],{"class":405},[36,71281,71282,71285,71287],{"class":38,"line":10283},[36,71283,71284],{"class":51777},"  border-radius",[36,71286,51914],{"class":42},[36,71288,71289],{"class":405},"5px;\n",[36,71291,71292,71294],{"class":38,"line":10292},[36,71293,71132],{"class":405},[36,71295,71135],{"class":69},[36,71297,71298,71301,71303],{"class":38,"line":10297},[36,71299,71300],{"class":51777},"  padding-left",[36,71302,51914],{"class":42},[36,71304,71289],{"class":405},[36,71306,71307,71310,71312],{"class":38,"line":10303},[36,71308,71309],{"class":51777},"  box-sizing",[36,71311,51914],{"class":42},[36,71313,71314],{"class":405},"border-box;\n",[36,71316,71317,71320,71322],{"class":38,"line":10324},[36,71318,71319],{"class":51777},"  margin-right",[36,71321,51914],{"class":42},[36,71323,71324],{"class":405},"15px;\n",[36,71326,71327],{"class":38,"line":10330},[36,71328,2045],{"class":42},[36,71330,71331],{"class":38,"line":10344},[36,71332,71333],{"class":405},".info button {\n",[36,71335,71336,71338,71340],{"class":38,"line":10350},[36,71337,71045],{"class":51777},[36,71339,51914],{"class":42},[36,71341,71342],{"class":405},"60px;\n",[36,71344,71345,71347,71349],{"class":38,"line":10377},[36,71346,71265],{"class":51777},[36,71348,51914],{"class":42},[36,71350,71270],{"class":405},[36,71352,71353,71356,71358],{"class":38,"line":10386},[36,71354,71355],{"class":51777},"  background-color",[36,71357,51914],{"class":42},[36,71359,71360],{"class":69},"#004085;\n",[36,71362,71363,71365,71367],{"class":38,"line":10392},[36,71364,71275],{"class":51777},[36,71366,51914],{"class":42},[36,71368,70984],{"class":405},[36,71370,71371,71374,71376],{"class":38,"line":10400},[36,71372,71373],{"class":51777},"  border",[36,71375,51914],{"class":42},[36,71377,70952],{"class":405},[36,71379,71380,71383,71385],{"class":38,"line":10405},[36,71381,71382],{"class":51777},"  color",[36,71384,51914],{"class":42},[36,71386,71189],{"class":69},[36,71388,71389,71392,71394],{"class":38,"line":17084},[36,71390,71391],{"class":51777},"  cursor",[36,71393,51914],{"class":42},[36,71395,71396],{"class":405},"pointer;\n",[36,71398,71399,71401,71403],{"class":38,"line":17090},[36,71400,71284],{"class":51777},[36,71402,51914],{"class":42},[36,71404,71289],{"class":405},[36,71406,71407],{"class":38,"line":17113},[36,71408,2045],{"class":42},[36,71410,71411],{"class":38,"line":17119},[36,71412,71413],{"class":405},".info .age {\n",[36,71415,71416,71418,71420],{"class":38,"line":17142},[36,71417,71045],{"class":51777},[36,71419,51914],{"class":42},[36,71421,71422],{"class":405},"50px;\n",[36,71424,71425],{"class":38,"line":17156},[36,71426,2045],{"class":42},[19,71428,71429],{},"思路：",[19,71431,71432],{},[519,71433],{"alt":31,"src":71434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71436,71437],{},[519,71438],{"alt":31,"src":71439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71441,71442],{},[519,71443],{"alt":31,"src":71444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[596,71446,71448],{"id":71447},"_3315-重绘回流","3.3.15 重绘回流",[19,71450,71451],{},[519,71452],{"alt":31,"src":71453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71455,71456],{},[519,71457],{"alt":31,"src":71458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71460,71461],{},[519,71462],{"alt":31,"src":71463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71465,71467],{"id":71466},"_34-bom","3.4 BOM",[19,71469,71470],{},[519,71471],{"alt":31,"src":71472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71474,71475],{},"平时写的document省略了window而已，实际上是window.document",[19,71477,71478],{},"函数也是这样，调用的时候实际为window.fn()",[19,71480,71481],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71483,71484],{},"window大部分情况下可以省略",[596,71486,71488],{"id":71487},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71490,71491],{},"只执行一次",[19,71493,71494],{},[519,71495],{"alt":31,"src":71496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71498,71499],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71501,71502],{},[519,71503],{"alt":31,"src":71504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[596,71506,71508],{"id":71507},"_342-js执行机制","3.4.2 JS执行机制",[19,71510,71511],{},[519,71512],{"alt":31,"src":71513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71515,71516],{},"两个的结果都是1111 3333 2222",[19,71518,71519],{},[519,71520],{"alt":31,"src":71521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71523,71524],{},[519,71525],{"alt":31,"src":71526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71528,71529],{},[519,71530],{"alt":31,"src":71531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71533,71534],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71536,71537],{},"工作流程：",[19,71539,71540],{},[519,71541],{"alt":31,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71544,71545],{},[519,71546],{"alt":31,"src":71547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71549,71550],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71552,71553],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[596,71555,71557],{"id":71556},"_343-location对象","3.4.3 location对象",[19,71559,71560],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71562,71563],{},[519,71564],{"alt":31,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71567,71568],{},"href可以跳转页面",[579,71570,71571],{},[582,71572,71573],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71575,71576],{},"search得到提交信息之后网站后边的地址",[19,71578,71579],{},[519,71580],{"alt":31,"src":71581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71583,71584],{},[519,71585],{"alt":31,"src":71586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[579,71588,71589],{"start":66},[582,71590,71591],{},"hash:这个获取单页面应用#后边的地址",[19,71593,71594],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71596,71597],{},[519,71598],{"alt":31,"src":71599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,71601,71603],{"className":53544,"code":71602,"language":53546,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,71604,71605,71625,71645],{"__ignoreMap":31},[36,71606,71607,71609,71611,71613,71615,71618,71621,71623],{"class":38,"line":39},[36,71608,52621],{"class":42},[36,71610,43],{"class":51777},[36,71612,61534],{"class":2443},[36,71614,47],{"class":42},[36,71616,71617],{"class":405},"\"#\u002Fmy\"",[36,71619,71620],{"class":42},">我的\u003C\u002F",[36,71622,43],{"class":51777},[36,71624,51784],{"class":42},[36,71626,71627,71629,71631,71633,71635,71638,71641,71643],{"class":38,"line":66},[36,71628,52621],{"class":42},[36,71630,43],{"class":51777},[36,71632,61534],{"class":2443},[36,71634,47],{"class":42},[36,71636,71637],{"class":405},"\"#\u002Ffriend\"",[36,71639,71640],{"class":42},">关注\u003C\u002F",[36,71642,43],{"class":51777},[36,71644,51784],{"class":42},[36,71646,71647,71649,71651,71653,71655,71658,71661,71663],{"class":38,"line":73},[36,71648,52621],{"class":42},[36,71650,43],{"class":51777},[36,71652,61534],{"class":2443},[36,71654,47],{"class":42},[36,71656,71657],{"class":405},"\"#\u002Fdownload\"",[36,71659,71660],{"class":42},">下载\u003C\u002F",[36,71662,43],{"class":51777},[36,71664,51784],{"class":42},[19,71666,71667],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[579,71669,71670],{"start":73},[582,71671,71672,71673,71675,71676,71678],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54193,71674],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54193,71677],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[596,71680,71682],{"id":71681},"_345-navigator对象","3.4.5 navigator对象",[19,71684,71685],{},[519,71686],{"alt":31,"src":71687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,71689,71693],{"className":71690,"code":71691,"language":71692,"meta":31,"style":31},"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",[33,71694,71695,71700,71711,71723,71728,71779,71820,71825,71838,71850,71855],{"__ignoreMap":31},[36,71696,71697],{"class":38,"line":39},[36,71698,71699],{"class":69},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,71701,71702,71704,71706,71708],{"class":38,"line":66},[36,71703,846],{"class":46},[36,71705,345],{"class":42},[36,71707,54926],{"class":46},[36,71709,71710],{"class":42}," () { \n",[36,71712,71713,71715,71718,71720],{"class":38,"line":73},[36,71714,7272],{"class":46},[36,71716,71717],{"class":53}," userAgent",[36,71719,14044],{"class":46},[36,71721,71722],{"class":42}," navigator.userAgent \n",[36,71724,71725],{"class":38,"line":79},[36,71726,71727],{"class":69},"\u002F\u002F 验证是否为Android或iPhone \n",[36,71729,71730,71732,71735,71737,71740,71743,71745,71747,71750,71752,71755,71759,71761,71763,71765,71768,71770,71772,71774,71776],{"class":38,"line":85},[36,71731,7272],{"class":46},[36,71733,71734],{"class":53}," android",[36,71736,14044],{"class":46},[36,71738,71739],{"class":42}," userAgent.",[36,71741,71742],{"class":2443},"match",[36,71744,345],{"class":42},[36,71746,1197],{"class":405},[36,71748,71749],{"class":48454},"(Android);",[36,71751,1599],{"class":46},[36,71753,71754],{"class":53},"[\\s",[36,71756,71758],{"class":71757},"snhLl","\\\u002F",[36,71760,1553],{"class":53},[36,71762,1097],{"class":46},[36,71764,345],{"class":48454},[36,71766,71767],{"class":53},"[\\d.]",[36,71769,1097],{"class":46},[36,71771,231],{"class":48454},[36,71773,1599],{"class":46},[36,71775,1197],{"class":405},[36,71777,71778],{"class":42},") \n",[36,71780,71781,71783,71786,71788,71790,71792,71794,71796,71799,71802,71805,71807,71809,71812,71814,71816,71818],{"class":38,"line":419},[36,71782,7272],{"class":46},[36,71784,71785],{"class":53}," iphone",[36,71787,14044],{"class":46},[36,71789,71739],{"class":42},[36,71791,71742],{"class":2443},[36,71793,345],{"class":42},[36,71795,1197],{"class":405},[36,71797,71798],{"class":48454},"(iPhone",[36,71800,71801],{"class":53},"\\s",[36,71803,71804],{"class":48454},"OS)",[36,71806,71801],{"class":53},[36,71808,345],{"class":48454},[36,71810,71811],{"class":53},"[\\d_]",[36,71813,1097],{"class":46},[36,71815,231],{"class":48454},[36,71817,1197],{"class":405},[36,71819,71778],{"class":42},[36,71821,71822],{"class":38,"line":425},[36,71823,71824],{"class":69},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,71826,71827,71829,71832,71835],{"class":38,"line":431},[36,71828,2011],{"class":46},[36,71830,71831],{"class":42}," (android ",[36,71833,71834],{"class":46},"||",[36,71836,71837],{"class":42}," iphone) { \n",[36,71839,71840,71843,71845,71848],{"class":38,"line":437},[36,71841,71842],{"class":42},"location.href ",[36,71844,47],{"class":46},[36,71846,71847],{"class":405}," 'http:\u002F\u002Fm.itcast.cn'",[36,71849,3154],{"class":42},[36,71851,71852],{"class":38,"line":443},[36,71853,71854],{"class":42},"} \n",[36,71856,71857],{"class":38,"line":2092},[36,71858,71859],{"class":42},"})()\n",[596,71861,71863],{"id":71862},"_346-histroy对象","3.4.6 histroy对象",[19,71865,71866],{},[519,71867],{"alt":31,"src":71868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71870,71871],{},"浏览器地址的前进与后退!!!",[19,71873,71874],{},"history.back() 等效于 history.go(-1)",[19,71876,71877],{},"history.forward() 等效于 history.go(1)",[14,71879,71881],{"id":71880},"_35-本地存储","3.5 本地存储",[579,71883,71884,71887,71890],{},[582,71885,71886],{},"数据存储在用户浏览器中",[582,71888,71889],{},"设置、读取方便、甚至页面刷新不丢失数据",[582,71891,71892],{},"容量较大，sessionStorage和localStorage约 5M 左右",[596,71894,71896],{"id":71895},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71898,71899],{},"只能存储字符串",[19,71901,71902],{},[519,71903],{"alt":31,"src":71904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71906,71907],{},[519,71908],{"alt":31,"src":71909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71911,71912],{},"键值对要加引号,不然就会当变量来看了",[19,71914,71915],{},"localStorage.setItem('uname', 'pink')",[19,71917,71918],{},"刷新之后信息不再丢失",[19,71920,71921],{},"操作key,value会跟着变",[19,71923,71924],{},"删除只删除键就可以,即名字",[19,71926,71915],{},[19,71928,71929],{},"改:",[19,71931,71932],{},"localStorage.setItem('uname','red')",[19,71934,71935],{},"有这个键就是改,没有这个键就是改",[19,71937,71938],{},[519,71939],{"alt":31,"src":71940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71942,71943],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71945,71946],{},[519,71947],{"alt":31,"src":71948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71950,71951],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[596,71953,71955],{"id":71954},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71957,71958],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71960,71961],{},"特性:",[579,71963,71964,71967,71970,71973],{},[582,71965,71966],{},"生命周期为关闭浏览器窗口",[582,71968,71969],{},"在同一个窗口(页面)下数据可以共享",[582,71971,71972],{},"以键值对的形式存储使用",[582,71974,71975],{},"用法跟localStorage 基本相同",[596,71977,71979],{"id":71978},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71981,71982],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,71984,71986],{"className":53544,"code":71985,"language":53546,"meta":31,"style":31},"\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",[33,71987,71988,71996,72001,72006,72011,72016,72020,72025,72030],{"__ignoreMap":31},[36,71989,71990,71992,71994],{"class":38,"line":39},[36,71991,1523],{"class":42},[36,71993,52290],{"class":51777},[36,71995,51784],{"class":42},[36,71997,71998],{"class":38,"line":66},[36,71999,72000],{"class":42},"    const obj = {\n",[36,72002,72003],{"class":38,"line":73},[36,72004,72005],{"class":42},"      uname: 'pink老师',\n",[36,72007,72008],{"class":38,"line":79},[36,72009,72010],{"class":42},"      age: 18,\n",[36,72012,72013],{"class":38,"line":85},[36,72014,72015],{"class":42},"      gender: '女'\n",[36,72017,72018],{"class":38,"line":419},[36,72019,2667],{"class":42},[36,72021,72022],{"class":38,"line":425},[36,72023,72024],{"class":42},"    \u002F\u002F 存储复杂数据类型\n",[36,72026,72027],{"class":38,"line":431},[36,72028,72029],{"class":42},"    localStorage.setItem('obj', obj)\n",[36,72031,72032,72034,72036],{"class":38,"line":437},[36,72033,52894],{"class":42},[36,72035,52290],{"class":51777},[36,72037,51784],{"class":42},[19,72039,72040],{},[519,72041],{"alt":31,"src":72042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72044,72045],{},"如果获取一下数据:",[19,72047,72048],{},"log(localStorage.getItem('obj'))",[19,72050,72051],{},[519,72052],{"alt":31,"src":72053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72055,72056],{},"发现直接存对象是使用不了的!!!",[22478,72058,72060],{"id":72059},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72062,72063],{},[519,72064],{"alt":31,"src":72065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,72067,72069],{"className":51110,"code":72068,"language":51112,"meta":31,"style":31},"\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",[33,72070,72071,72079,72089,72099,72108,72116,72120,72124,72150,72169,72177,72181,72186,72191],{"__ignoreMap":31},[36,72072,72073,72075,72077],{"class":38,"line":39},[36,72074,1523],{"class":42},[36,72076,52290],{"class":51777},[36,72078,51784],{"class":42},[36,72080,72081,72083,72085,72087],{"class":38,"line":66},[36,72082,11701],{"class":46},[36,72084,70448],{"class":53},[36,72086,14044],{"class":46},[36,72088,16052],{"class":42},[36,72090,72091,72094,72097],{"class":38,"line":73},[36,72092,72093],{"class":42},"      uname: ",[36,72095,72096],{"class":405},"'pink老师'",[36,72098,31944],{"class":42},[36,72100,72101,72104,72106],{"class":38,"line":79},[36,72102,72103],{"class":42},"      age: ",[36,72105,1263],{"class":53},[36,72107,31944],{"class":42},[36,72109,72110,72113],{"class":38,"line":85},[36,72111,72112],{"class":42},"      gender: ",[36,72114,72115],{"class":405},"'女'\n",[36,72117,72118],{"class":38,"line":419},[36,72119,2667],{"class":42},[36,72121,72122],{"class":38,"line":425},[36,72123,72024],{"class":69},[36,72125,72126,72129,72132,72134,72137,72139,72142,72144,72147],{"class":38,"line":431},[36,72127,72128],{"class":42},"  localStorage.",[36,72130,72131],{"class":2443},"setItem",[36,72133,345],{"class":42},[36,72135,72136],{"class":405},"'obj'",[36,72138,12915],{"class":42},[36,72140,72141],{"class":53},"JSON",[36,72143,1171],{"class":42},[36,72145,72146],{"class":2443},"stringify",[36,72148,72149],{"class":42},"(obj))\n",[36,72151,72152,72155,72157,72160,72163,72165,72167],{"class":38,"line":437},[36,72153,72154],{"class":42},"  console.",[36,72156,58724],{"class":2443},[36,72158,72159],{"class":42},"(localStorage.",[36,72161,72162],{"class":2443},"getItem",[36,72164,345],{"class":42},[36,72166,72136],{"class":405},[36,72168,370],{"class":42},[36,72170,72171,72173,72175],{"class":38,"line":443},[36,72172,52894],{"class":42},[36,72174,52290],{"class":51777},[36,72176,51784],{"class":42},[36,72178,72179],{"class":38,"line":2092},[36,72180,71098],{"class":42},[36,72182,72183],{"class":38,"line":2097},[36,72184,72185],{"class":42},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,72187,72188],{"class":38,"line":2103},[36,72189,72190],{"class":42},"  类型是字符串的\n",[36,72192,72193],{"class":38,"line":2108},[36,72194,72195],{"class":42},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22478,72197,72199],{"id":72198},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72201,72202],{},[519,72203],{"alt":31,"src":72204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72206,72207],{},[519,72208],{"alt":31,"src":72209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,72211,72213],{"className":53544,"code":72212,"language":53546,"meta":31,"style":31},"  \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",[33,72214,72215,72223,72227,72231,72235,72239,72243,72248,72253,72258,72263,72268,72273,72278,72283],{"__ignoreMap":31},[36,72216,72217,72219,72221],{"class":38,"line":39},[36,72218,52621],{"class":42},[36,72220,52290],{"class":51777},[36,72222,51784],{"class":42},[36,72224,72225],{"class":38,"line":66},[36,72226,72000],{"class":42},[36,72228,72229],{"class":38,"line":73},[36,72230,72005],{"class":42},[36,72232,72233],{"class":38,"line":79},[36,72234,72010],{"class":42},[36,72236,72237],{"class":38,"line":85},[36,72238,72015],{"class":42},[36,72240,72241],{"class":38,"line":419},[36,72242,2667],{"class":42},[36,72244,72245],{"class":38,"line":425},[36,72246,72247],{"class":42},"    \u002F\u002F 1.存储复杂数据类型\n",[36,72249,72250],{"class":38,"line":431},[36,72251,72252],{"class":42},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,72254,72255],{"class":38,"line":437},[36,72256,72257],{"class":42},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,72259,72260],{"class":38,"line":443},[36,72261,72262],{"class":42},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,72264,72265],{"class":38,"line":2092},[36,72266,72267],{"class":42},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,72269,72270],{"class":38,"line":2097},[36,72271,72272],{"class":42},"    \u002F\u002F 取\n",[36,72274,72275],{"class":38,"line":2103},[36,72276,72277],{"class":42},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,72279,72280],{"class":38,"line":2108},[36,72281,72282],{"class":42},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,72284,72285,72287,72289],{"class":38,"line":2122},[36,72286,52894],{"class":42},[36,72288,52290],{"class":51777},[36,72290,51784],{"class":42},[19,72292,72293],{},[519,72294],{"alt":31,"src":72295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[596,72297,72299],{"id":72298},"_356-数组map方法","3.5.6 数组map方法",[19,72301,72302],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72304,72305],{},[519,72306],{"alt":31,"src":72307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72309,72310],{},[519,72311],{"alt":31,"src":72312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72314,72315,72318],{},[770,72316,72317],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72320,72321],{},"map有返回值，但是forEach没有返回值",[19,72323,72324],{},"map是个方法。用的时候要加 ()",[19,72326,72327],{},"map返回的是一个数组",[596,72329,72331],{"id":72330},"_357-数组中join方法","3.5.7 数组中join方法",[19,72333,72334],{},[519,72335],{"alt":31,"src":72336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72338,72339],{},"类似于python中拼接字符串一样！",[579,72341,72342,72345,72348],{},[582,72343,72344],{},"小括号为空则逗号分开",[582,72346,72347],{},"小括号为空字符串 ''，则元素之间没有分隔符",[582,72349,72350],{},"小括号用啥符号就用进行分割",[596,72352,72354],{"id":72353},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[579,72356,72357,72360,72363,72366,72369],{},[582,72358,72359],{},"记住本地时间获取快速方式：new Date().toDateString()",[582,72361,72362],{},"尽量减少DOM操作，用好map+join的渲染方式",[582,72364,72365],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[582,72367,72368],{},"return可以实现函数的结束",[582,72370,72371],{},"禁止跳转是 preventDefault() 不要忘记",[26,72373,72375],{"className":51110,"code":72374,"language":51112,"meta":31,"style":31},"\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",[33,72376,72377,72387,72401,72405,72413,72427,72447,72459,72467,72473,72483,72493,72497,72501,72507,72517,72529,72533,72537,72544,72556,72570,72580,72584,72588,72595,72602,72609,72621,72633,72643,72655,72659,72663,72670,72677,72689,72701,72711,72723,72753,72757,72761,72768,72780,72792,72816,72826,72836,72840,72844,72852,72863,72875,72887,72899,72916,72928,72940,72944,72948,72955,72967,72979,72991,73002,73020,73033,73045,73069,73080,73084,73088,73096,73106,73110,73114,73120,73132,73143,73153,73157,73161,73167,73189,73193,73197,73203,73209,73221,73231,73243,73273,73286,73303,73307,73311,73322,73344,73354,73358,73362,73375,73385,73397,73409,73421,73433,73443,73453,73463,73474,73487,73491,73499,73507,73511,73519,73532,73552,73585,73618,73651,73677,73695,73713,73721,73747,73765,73783,73801,73819,73837,73845,73853,73871,73879,73908,73916,73924,73932,73945,73957,73969,73981,73993,74005,74018,74030,74038,74046,74054,74059,74064,74068,74072,74076,74080,74084,74088,74093,74098,74103,74108,74116,74124,74132,74137,74142,74147,74152,74157,74162,74167,74172,74177,74182,74187,74192,74197,74202,74206,74211,74216,74226,74235,74239,74244,74253,74269,74311,74351,74390,74455,74463,74467,74472,74490,74498,74503,74508,74538,74544,74549,74562,74574,74586,74598,74610,74622,74634,74638,74648,74652,74657,74662,74666,74675,74679,74684,74689,74708,74713,74733,74737,74742,74746,74751,74769,74787,74805,74824,74843,74862,74867,74873,74894,74900,74909,74915,74921,74927,74954,74967,74972,74982,74988,74994,75000,75006,75011,75017,75023,75029,75035,75068,75073,75078,75083,75088,75094,75100,75106,75117,75122,75128,75135,75149,75155,75179,75184,75189,75195,75201,75222,75228,75241,75247,75253,75259,75265,75270,75276,75282,75288,75306,75320,75326,75334,75340,75362,75367,75372,75377,75382,75387,75396,75405,75410],{"__ignoreMap":31},[36,72378,72379,72381,72383,72385],{"class":38,"line":39},[36,72380,51774],{"class":42},[36,72382,51778],{"class":51777},[36,72384,51781],{"class":2443},[36,72386,51784],{"class":42},[36,72388,72389,72391,72393,72395,72397,72399],{"class":38,"line":66},[36,72390,1523],{"class":42},[36,72392,51112],{"class":51777},[36,72394,51793],{"class":2443},[36,72396,47],{"class":42},[36,72398,51798],{"class":405},[36,72400,51784],{"class":42},[36,72402,72403],{"class":38,"line":73},[36,72404,2880],{"emptyLinePlaceholder":553},[36,72406,72407,72409,72411],{"class":38,"line":79},[36,72408,1523],{"class":42},[36,72410,51811],{"class":51777},[36,72412,51784],{"class":42},[36,72414,72415,72417,72419,72421,72423,72425],{"class":38,"line":85},[36,72416,52621],{"class":42},[36,72418,51821],{"class":51777},[36,72420,51824],{"class":2443},[36,72422,47],{"class":42},[36,72424,51829],{"class":405},[36,72426,51784],{"class":42},[36,72428,72429,72431,72433,72435,72437,72439,72441,72443,72445],{"class":38,"line":419},[36,72430,52621],{"class":42},[36,72432,51821],{"class":51777},[36,72434,15400],{"class":2443},[36,72436,47],{"class":42},[36,72438,51868],{"class":405},[36,72440,51848],{"class":2443},[36,72442,47],{"class":42},[36,72444,51875],{"class":405},[36,72446,51784],{"class":42},[36,72448,72449,72451,72453,72455,72457],{"class":38,"line":425},[36,72450,52621],{"class":42},[36,72452,51884],{"class":51777},[36,72454,51887],{"class":42},[36,72456,51884],{"class":51777},[36,72458,51784],{"class":42},[36,72460,72461,72463,72465],{"class":38,"line":431},[36,72462,52621],{"class":42},[36,72464,539],{"class":51777},[36,72466,51784],{"class":42},[36,72468,72469,72471],{"class":38,"line":437},[36,72470,6883],{"class":51777},[36,72472,16052],{"class":42},[36,72474,72475,72477,72479,72481],{"class":38,"line":443},[36,72476,55172],{"class":53},[36,72478,51914],{"class":42},[36,72480,812],{"class":53},[36,72482,1774],{"class":42},[36,72484,72485,72487,72489,72491],{"class":38,"line":2092},[36,72486,55183],{"class":53},[36,72488,51914],{"class":42},[36,72490,812],{"class":53},[36,72492,1774],{"class":42},[36,72494,72495],{"class":38,"line":2097},[36,72496,2667],{"class":42},[36,72498,72499],{"class":38,"line":2103},[36,72500,2880],{"emptyLinePlaceholder":553},[36,72502,72503,72505],{"class":38,"line":2108},[36,72504,57756],{"class":51777},[36,72506,16052],{"class":42},[36,72508,72509,72511,72513,72515],{"class":38,"line":2122},[36,72510,57763],{"class":53},[36,72512,51914],{"class":42},[36,72514,52069],{"class":53},[36,72516,1774],{"class":42},[36,72518,72519,72521,72523,72525,72527],{"class":38,"line":2127},[36,72520,62554],{"class":53},[36,72522,51914],{"class":42},[36,72524,1313],{"class":53},[36,72526,51969],{"class":46},[36,72528,1774],{"class":42},[36,72530,72531],{"class":38,"line":2133},[36,72532,2667],{"class":42},[36,72534,72535],{"class":38,"line":2154},[36,72536,2880],{"emptyLinePlaceholder":553},[36,72538,72539,72542],{"class":38,"line":2159},[36,72540,72541],{"class":2443},"    .info",[36,72543,16052],{"class":42},[36,72545,72546,72548,72550,72552,72554],{"class":38,"line":2173},[36,72547,55248],{"class":53},[36,72549,51914],{"class":42},[36,72551,51966],{"class":53},[36,72553,51969],{"class":46},[36,72555,1774],{"class":42},[36,72557,72558,72560,72562,72564,72566,72568],{"class":38,"line":2178},[36,72559,55183],{"class":53},[36,72561,51914],{"class":42},[36,72563,1062],{"class":53},[36,72565,51969],{"class":46},[36,72567,52033],{"class":53},[36,72569,1774],{"class":42},[36,72571,72572,72574,72576,72578],{"class":38,"line":2207},[36,72573,57763],{"class":53},[36,72575,51914],{"class":42},[36,72577,52069],{"class":53},[36,72579,1774],{"class":42},[36,72581,72582],{"class":38,"line":2212},[36,72583,2667],{"class":42},[36,72585,72586],{"class":38,"line":2229},[36,72587,2880],{"emptyLinePlaceholder":553},[36,72589,72590,72593],{"class":38,"line":2234},[36,72591,72592],{"class":2443},"    .uname",[36,72594,31944],{"class":42},[36,72596,72597,72600],{"class":38,"line":2239},[36,72598,72599],{"class":2443},"    .age",[36,72601,31944],{"class":42},[36,72603,72604,72607],{"class":38,"line":2244},[36,72605,72606],{"class":2443},"    .salary",[36,72608,16052],{"class":42},[36,72610,72611,72613,72615,72617,72619],{"class":38,"line":2258},[36,72612,55248],{"class":53},[36,72614,51914],{"class":42},[36,72616,930],{"class":53},[36,72618,51969],{"class":46},[36,72620,1774],{"class":42},[36,72622,72623,72625,72627,72629,72631],{"class":38,"line":2263},[36,72624,55262],{"class":53},[36,72626,51914],{"class":42},[36,72628,1313],{"class":53},[36,72630,51969],{"class":46},[36,72632,1774],{"class":42},[36,72634,72635,72637,72639,72641],{"class":38,"line":3057},[36,72636,62257],{"class":53},[36,72638,51914],{"class":42},[36,72640,55214],{"class":53},[36,72642,1774],{"class":42},[36,72644,72645,72647,72649,72651,72653],{"class":38,"line":3071},[36,72646,62227],{"class":53},[36,72648,51914],{"class":42},[36,72650,1188],{"class":53},[36,72652,51969],{"class":46},[36,72654,1774],{"class":42},[36,72656,72657],{"class":38,"line":3079},[36,72658,2667],{"class":42},[36,72660,72661],{"class":38,"line":3084},[36,72662,2880],{"emptyLinePlaceholder":553},[36,72664,72665,72668],{"class":38,"line":3090},[36,72666,72667],{"class":2443},"    .gender",[36,72669,31944],{"class":42},[36,72671,72672,72675],{"class":38,"line":3096},[36,72673,72674],{"class":2443},"    .city",[36,72676,16052],{"class":42},[36,72678,72679,72681,72683,72685,72687],{"class":38,"line":3101},[36,72680,55248],{"class":53},[36,72682,51914],{"class":42},[36,72684,930],{"class":53},[36,72686,51969],{"class":46},[36,72688,1774],{"class":42},[36,72690,72691,72693,72695,72697,72699],{"class":38,"line":8428},[36,72692,55262],{"class":53},[36,72694,51914],{"class":42},[36,72696,1438],{"class":53},[36,72698,51969],{"class":46},[36,72700,1774],{"class":42},[36,72702,72703,72705,72707,72709],{"class":38,"line":8452},[36,72704,62257],{"class":53},[36,72706,51914],{"class":42},[36,72708,55214],{"class":53},[36,72710,1774],{"class":42},[36,72712,72713,72715,72717,72719,72721],{"class":38,"line":8457},[36,72714,62227],{"class":53},[36,72716,51914],{"class":42},[36,72718,1188],{"class":53},[36,72720,51969],{"class":46},[36,72722,1774],{"class":42},[36,72724,72725,72727,72729,72731,72733,72735,72738,72740,72742,72744,72747,72749,72751],{"class":38,"line":8463},[36,72726,62454],{"class":53},[36,72728,51914],{"class":42},[36,72730,54],{"class":53},[36,72732,51969],{"class":46},[36,72734,51998],{"class":53},[36,72736,72737],{"class":53}," rgb",[36,72739,345],{"class":42},[36,72741,2202],{"class":53},[36,72743,12915],{"class":42},[36,72745,72746],{"class":53},"197",[36,72748,12915],{"class":42},[36,72750,72746],{"class":53},[36,72752,3199],{"class":42},[36,72754,72755],{"class":38,"line":8490},[36,72756,2667],{"class":42},[36,72758,72759],{"class":38,"line":8495},[36,72760,2880],{"emptyLinePlaceholder":553},[36,72762,72763,72766],{"class":38,"line":8501},[36,72764,72765],{"class":51777},"    button",[36,72767,16052],{"class":42},[36,72769,72770,72772,72774,72776,72778],{"class":38,"line":8513},[36,72771,55262],{"class":53},[36,72773,51914],{"class":42},[36,72775,1438],{"class":53},[36,72777,51969],{"class":46},[36,72779,1774],{"class":42},[36,72781,72782,72784,72786,72788,72790],{"class":38,"line":8525},[36,72783,55248],{"class":53},[36,72785,51914],{"class":42},[36,72787,1100],{"class":53},[36,72789,51969],{"class":46},[36,72791,1774],{"class":42},[36,72793,72794,72796,72798,72801,72803,72805,72807,72810,72812,72814],{"class":38,"line":8537},[36,72795,55361],{"class":53},[36,72797,51914],{"class":42},[36,72799,72800],{"class":53},"rgb",[36,72802,345],{"class":42},[36,72804,1582],{"class":53},[36,72806,12915],{"class":42},[36,72808,72809],{"class":53},"187",[36,72811,12915],{"class":42},[36,72813,918],{"class":53},[36,72815,3199],{"class":42},[36,72817,72818,72820,72822,72824],{"class":38,"line":10196},[36,72819,57893],{"class":53},[36,72821,51914],{"class":42},[36,72823,61319],{"class":53},[36,72825,1774],{"class":42},[36,72827,72828,72830,72832,72834],{"class":38,"line":10221},[36,72829,62454],{"class":53},[36,72831,51914],{"class":42},[36,72833,812],{"class":53},[36,72835,1774],{"class":42},[36,72837,72838],{"class":38,"line":10244},[36,72839,2667],{"class":42},[36,72841,72842],{"class":38,"line":10268},[36,72843,2880],{"emptyLinePlaceholder":553},[36,72845,72846,72848,72850],{"class":38,"line":10273},[36,72847,72765],{"class":51777},[36,72849,52165],{"class":51777},[36,72851,16052],{"class":42},[36,72853,72854,72856,72858,72861],{"class":38,"line":10278},[36,72855,55486],{"class":53},[36,72857,51914],{"class":42},[36,72859,72860],{"class":53},"inline-block",[36,72862,1774],{"class":42},[36,72864,72865,72867,72869,72871,72873],{"class":38,"line":10283},[36,72866,55248],{"class":53},[36,72868,51914],{"class":42},[36,72870,1062],{"class":53},[36,72872,51969],{"class":46},[36,72874,1774],{"class":42},[36,72876,72877,72879,72881,72883,72885],{"class":38,"line":10292},[36,72878,55262],{"class":53},[36,72880,51914],{"class":42},[36,72882,1062],{"class":53},[36,72884,51969],{"class":46},[36,72886,1774],{"class":42},[36,72888,72889,72891,72893,72895,72897],{"class":38,"line":10297},[36,72890,57836],{"class":53},[36,72892,51914],{"class":42},[36,72894,1088],{"class":53},[36,72896,51969],{"class":46},[36,72898,1774],{"class":42},[36,72900,72901,72903,72905,72907,72909,72911,72914],{"class":38,"line":10303},[36,72902,62454],{"class":53},[36,72904,51914],{"class":42},[36,72906,54],{"class":53},[36,72908,51969],{"class":46},[36,72910,51998],{"class":53},[36,72912,72913],{"class":53}," #fff",[36,72915,1774],{"class":42},[36,72917,72918,72920,72922,72924,72926],{"class":38,"line":10324},[36,72919,55611],{"class":53},[36,72921,51914],{"class":42},[36,72923,938],{"class":53},[36,72925,51969],{"class":46},[36,72927,1774],{"class":42},[36,72929,72930,72932,72934,72936,72938],{"class":38,"line":10330},[36,72931,62227],{"class":53},[36,72933,51914],{"class":42},[36,72935,54],{"class":53},[36,72937,51969],{"class":46},[36,72939,1774],{"class":42},[36,72941,72942],{"class":38,"line":10344},[36,72943,2667],{"class":42},[36,72945,72946],{"class":38,"line":10350},[36,72947,2880],{"emptyLinePlaceholder":553},[36,72949,72950,72953],{"class":38,"line":10377},[36,72951,72952],{"class":2443},"    .total",[36,72954,16052],{"class":42},[36,72956,72957,72959,72961,72963,72965],{"class":38,"line":10386},[36,72958,55248],{"class":53},[36,72960,51914],{"class":42},[36,72962,62106],{"class":53},[36,72964,51969],{"class":46},[36,72966,1774],{"class":42},[36,72968,72969,72971,72973,72975,72977],{"class":38,"line":10392},[36,72970,55262],{"class":53},[36,72972,51914],{"class":42},[36,72974,1018],{"class":53},[36,72976,51969],{"class":46},[36,72978,1774],{"class":42},[36,72980,72981,72983,72985,72987,72989],{"class":38,"line":10400},[36,72982,57836],{"class":53},[36,72984,51914],{"class":42},[36,72986,1018],{"class":53},[36,72988,51969],{"class":46},[36,72990,1774],{"class":42},[36,72992,72993,72995,72997,73000],{"class":38,"line":10405},[36,72994,57763],{"class":53},[36,72996,51914],{"class":42},[36,72998,72999],{"class":53},"right",[36,73001,1774],{"class":42},[36,73003,73004,73006,73008,73010,73012,73014,73016,73018],{"class":38,"line":17084},[36,73005,55183],{"class":53},[36,73007,51914],{"class":42},[36,73009,1018],{"class":53},[36,73011,51969],{"class":46},[36,73013,52033],{"class":53},[36,73015,2518],{"class":53},[36,73017,51969],{"class":46},[36,73019,1774],{"class":42},[36,73021,73022,73025,73027,73029,73031],{"class":38,"line":17090},[36,73023,73024],{"class":53},"      padding-right",[36,73026,51914],{"class":42},[36,73028,1062],{"class":53},[36,73030,51969],{"class":46},[36,73032,1774],{"class":42},[36,73034,73035,73037,73039,73041,73043],{"class":38,"line":17113},[36,73036,55399],{"class":53},[36,73038,51914],{"class":42},[36,73040,60],{"class":53},[36,73042,51969],{"class":46},[36,73044,1774],{"class":42},[36,73046,73047,73049,73051,73053,73055,73058,73060,73063,73065,73067],{"class":38,"line":17119},[36,73048,55361],{"class":53},[36,73050,51914],{"class":42},[36,73052,72800],{"class":53},[36,73054,345],{"class":42},[36,73056,73057],{"class":53},"237",[36,73059,12915],{"class":42},[36,73061,73062],{"class":53},"235",[36,73064,12915],{"class":42},[36,73066,73062],{"class":53},[36,73068,3199],{"class":42},[36,73070,73071,73074,73076,73078],{"class":38,"line":17142},[36,73072,73073],{"class":53},"      box-sizing",[36,73075,51914],{"class":42},[36,73077,60982],{"class":53},[36,73079,1774],{"class":42},[36,73081,73082],{"class":38,"line":17156},[36,73083,2667],{"class":42},[36,73085,73086],{"class":38,"line":17176},[36,73087,2880],{"emptyLinePlaceholder":553},[36,73089,73090,73092,73094],{"class":38,"line":17182},[36,73091,72952],{"class":2443},[36,73093,52165],{"class":51777},[36,73095,16052],{"class":42},[36,73097,73098,73100,73102,73104],{"class":38,"line":17193},[36,73099,57893],{"class":53},[36,73101,51914],{"class":42},[36,73103,57898],{"class":53},[36,73105,1774],{"class":42},[36,73107,73108],{"class":38,"line":17216},[36,73109,2667],{"class":42},[36,73111,73112],{"class":38,"line":17238},[36,73113,2880],{"emptyLinePlaceholder":553},[36,73115,73116,73118],{"class":38,"line":17243},[36,73117,65500],{"class":51777},[36,73119,16052],{"class":42},[36,73121,73122,73124,73126,73128,73130],{"class":38,"line":17249},[36,73123,55248],{"class":53},[36,73125,51914],{"class":42},[36,73127,62106],{"class":53},[36,73129,51969],{"class":46},[36,73131,1774],{"class":42},[36,73133,73134,73136,73138,73141],{"class":38,"line":17263},[36,73135,55183],{"class":53},[36,73137,51914],{"class":42},[36,73139,73140],{"class":53},"auto",[36,73142,1774],{"class":42},[36,73144,73145,73147,73149,73151],{"class":38,"line":17276},[36,73146,65507],{"class":53},[36,73148,51914],{"class":42},[36,73150,65512],{"class":53},[36,73152,1774],{"class":42},[36,73154,73155],{"class":38,"line":17281},[36,73156,2667],{"class":42},[36,73158,73159],{"class":38,"line":17295},[36,73160,2880],{"emptyLinePlaceholder":553},[36,73162,73163,73165],{"class":38,"line":17300},[36,73164,65592],{"class":51777},[36,73166,16052],{"class":42},[36,73168,73169,73171,73173,73175,73177,73179,73181,73183,73185,73187],{"class":38,"line":17306},[36,73170,55361],{"class":53},[36,73172,51914],{"class":42},[36,73174,72800],{"class":53},[36,73176,345],{"class":42},[36,73178,73057],{"class":53},[36,73180,12915],{"class":42},[36,73182,73062],{"class":53},[36,73184,12915],{"class":42},[36,73186,73062],{"class":53},[36,73188,3199],{"class":42},[36,73190,73191],{"class":38,"line":17311},[36,73192,2667],{"class":42},[36,73194,73195],{"class":38,"line":17325},[36,73196,2880],{"emptyLinePlaceholder":553},[36,73198,73199,73201],{"class":38,"line":17330},[36,73200,65592],{"class":51777},[36,73202,31944],{"class":42},[36,73204,73205,73207],{"class":38,"line":17335},[36,73206,65658],{"class":51777},[36,73208,16052],{"class":42},[36,73210,73211,73213,73215,73217,73219],{"class":38,"line":17349},[36,73212,55262],{"class":53},[36,73214,51914],{"class":42},[36,73216,892],{"class":53},[36,73218,51969],{"class":46},[36,73220,1774],{"class":42},[36,73222,73223,73225,73227,73229],{"class":38,"line":17361},[36,73224,57763],{"class":53},[36,73226,51914],{"class":42},[36,73228,24216],{"class":53},[36,73230,1774],{"class":42},[36,73232,73233,73235,73237,73239,73241],{"class":38,"line":17366},[36,73234,55399],{"class":53},[36,73236,51914],{"class":42},[36,73238,1162],{"class":53},[36,73240,51969],{"class":46},[36,73242,1774],{"class":42},[36,73244,73245,73247,73249,73251,73253,73255,73257,73259,73262,73264,73267,73269,73271],{"class":38,"line":17379},[36,73246,62454],{"class":53},[36,73248,51914],{"class":42},[36,73250,54],{"class":53},[36,73252,51969],{"class":46},[36,73254,51998],{"class":53},[36,73256,72737],{"class":53},[36,73258,345],{"class":42},[36,73260,73261],{"class":53},"228",[36,73263,12915],{"class":42},[36,73265,73266],{"class":53},"225",[36,73268,12915],{"class":42},[36,73270,73266],{"class":53},[36,73272,3199],{"class":42},[36,73274,73275,73278,73280,73282,73284],{"class":38,"line":17384},[36,73276,73277],{"class":53},"      padding-left",[36,73279,51914],{"class":42},[36,73281,938],{"class":53},[36,73283,51969],{"class":46},[36,73285,1774],{"class":42},[36,73287,73288,73290,73292,73294,73297,73299,73301],{"class":38,"line":17389},[36,73289,62337],{"class":53},[36,73291,51914],{"class":42},[36,73293,28602],{"class":53},[36,73295,73296],{"class":53}," linear",[36,73298,62344],{"class":53},[36,73300,1308],{"class":46},[36,73302,1774],{"class":42},[36,73304,73305],{"class":38,"line":17394},[36,73306,2667],{"class":42},[36,73308,73309],{"class":38,"line":17407},[36,73310,2880],{"emptyLinePlaceholder":553},[36,73312,73313,73316,73318,73320],{"class":38,"line":17412},[36,73314,73315],{"class":51777},"    tbody",[36,73317,70621],{"class":51777},[36,73319,61417],{"class":2443},[36,73321,16052],{"class":42},[36,73323,73324,73326,73328,73330,73332,73334,73336,73338,73340,73342],{"class":38,"line":33110},[36,73325,55361],{"class":53},[36,73327,51914],{"class":42},[36,73329,72800],{"class":53},[36,73331,345],{"class":42},[36,73333,73057],{"class":53},[36,73335,12915],{"class":42},[36,73337,73062],{"class":53},[36,73339,12915],{"class":42},[36,73341,73062],{"class":53},[36,73343,3199],{"class":42},[36,73345,73346,73348,73350,73352],{"class":38,"line":33116},[36,73347,62502],{"class":53},[36,73349,51914],{"class":42},[36,73351,62507],{"class":53},[36,73353,1774],{"class":42},[36,73355,73356],{"class":38,"line":33122},[36,73357,2667],{"class":42},[36,73359,73360],{"class":38,"line":33128},[36,73361,2880],{"emptyLinePlaceholder":553},[36,73363,73364,73366,73368,73371,73373],{"class":38,"line":33134},[36,73365,73315],{"class":51777},[36,73367,70621],{"class":51777},[36,73369,73370],{"class":51777}," td",[36,73372,1879],{"class":51777},[36,73374,16052],{"class":42},[36,73376,73377,73379,73381,73383],{"class":38,"line":33145},[36,73378,55486],{"class":53},[36,73380,51914],{"class":42},[36,73382,61346],{"class":53},[36,73384,1774],{"class":42},[36,73386,73387,73389,73391,73393,73395],{"class":38,"line":33151},[36,73388,55248],{"class":53},[36,73390,51914],{"class":42},[36,73392,1520],{"class":53},[36,73394,51969],{"class":46},[36,73396,1774],{"class":42},[36,73398,73399,73401,73403,73405,73407],{"class":38,"line":33171},[36,73400,55262],{"class":53},[36,73402,51914],{"class":42},[36,73404,1438],{"class":53},[36,73406,51969],{"class":46},[36,73408,1774],{"class":42},[36,73410,73411,73413,73415,73417,73419],{"class":38,"line":33177},[36,73412,57836],{"class":53},[36,73414,51914],{"class":42},[36,73416,1438],{"class":53},[36,73418,51969],{"class":46},[36,73420,1774],{"class":42},[36,73422,73423,73425,73427,73429,73431],{"class":38,"line":33188},[36,73424,62554],{"class":53},[36,73426,51914],{"class":42},[36,73428,96],{"class":53},[36,73430,51969],{"class":46},[36,73432,1774],{"class":42},[36,73434,73435,73437,73439,73441],{"class":38,"line":33194},[36,73436,57893],{"class":53},[36,73438,51914],{"class":42},[36,73440,61319],{"class":53},[36,73442,1774],{"class":42},[36,73444,73445,73447,73449,73451],{"class":38,"line":33200},[36,73446,57763],{"class":53},[36,73448,51914],{"class":42},[36,73450,52069],{"class":53},[36,73452,1774],{"class":42},[36,73454,73455,73457,73459,73461],{"class":38,"line":33206},[36,73456,64447],{"class":53},[36,73458,51914],{"class":42},[36,73460,55214],{"class":53},[36,73462,1774],{"class":42},[36,73464,73465,73467,73469,73472],{"class":38,"line":33212},[36,73466,55361],{"class":53},[36,73468,51914],{"class":42},[36,73470,73471],{"class":53},"orange",[36,73473,1774],{"class":42},[36,73475,73476,73478,73480,73483,73485],{"class":38,"line":33218},[36,73477,55611],{"class":53},[36,73479,51914],{"class":42},[36,73481,73482],{"class":53},"12.5",[36,73484,51969],{"class":46},[36,73486,1774],{"class":42},[36,73488,73489],{"class":38,"line":33224},[36,73490,2667],{"class":42},[36,73492,73493,73495,73497],{"class":38,"line":33230},[36,73494,52894],{"class":42},[36,73496,539],{"class":51777},[36,73498,51784],{"class":42},[36,73500,73501,73503,73505],{"class":38,"line":33250},[36,73502,52262],{"class":42},[36,73504,51811],{"class":51777},[36,73506,51784],{"class":42},[36,73508,73509],{"class":38,"line":33256},[36,73510,2880],{"emptyLinePlaceholder":553},[36,73512,73513,73515,73517],{"class":38,"line":33272},[36,73514,1523],{"class":42},[36,73516,52277],{"class":51777},[36,73518,51784],{"class":42},[36,73520,73521,73523,73525,73528,73530],{"class":38,"line":33278},[36,73522,52621],{"class":42},[36,73524,14],{"class":51777},[36,73526,73527],{"class":42},">学生就业统计表\u003C\u002F",[36,73529,14],{"class":51777},[36,73531,51784],{"class":42},[36,73533,73534,73536,73538,73540,73542,73544,73546,73548,73550],{"class":38,"line":33292},[36,73535,52621],{"class":42},[36,73537,67102],{"class":51777},[36,73539,53963],{"class":2443},[36,73541,47],{"class":42},[36,73543,63141],{"class":405},[36,73545,69547],{"class":2443},[36,73547,47],{"class":42},[36,73549,32253],{"class":405},[36,73551,51784],{"class":42},[36,73553,73554,73556,73558,73560,73562,73564,73566,73568,73570,73572,73574,73577,73579,73581,73583],{"class":38,"line":33298},[36,73555,51818],{"class":42},[36,73557,54298],{"class":51777},[36,73559,54301],{"class":2443},[36,73561,47],{"class":42},[36,73563,63176],{"class":405},[36,73565,15400],{"class":2443},[36,73567,47],{"class":42},[36,73569,69573],{"class":405},[36,73571,61497],{"class":2443},[36,73573,47],{"class":42},[36,73575,73576],{"class":405},"\"姓名\"",[36,73578,53963],{"class":2443},[36,73580,47],{"class":42},[36,73582,69573],{"class":405},[36,73584,51784],{"class":42},[36,73586,73587,73589,73591,73593,73595,73597,73599,73601,73603,73605,73607,73610,73612,73614,73616],{"class":38,"line":33313},[36,73588,51818],{"class":42},[36,73590,54298],{"class":51777},[36,73592,54301],{"class":2443},[36,73594,47],{"class":42},[36,73596,63176],{"class":405},[36,73598,15400],{"class":2443},[36,73600,47],{"class":42},[36,73602,69601],{"class":405},[36,73604,61497],{"class":2443},[36,73606,47],{"class":42},[36,73608,73609],{"class":405},"\"年龄\"",[36,73611,53963],{"class":2443},[36,73613,47],{"class":42},[36,73615,69601],{"class":405},[36,73617,51784],{"class":42},[36,73619,73620,73622,73624,73626,73628,73630,73632,73634,73636,73638,73640,73643,73645,73647,73649],{"class":38,"line":33319},[36,73621,51818],{"class":42},[36,73623,54298],{"class":51777},[36,73625,54301],{"class":2443},[36,73627,47],{"class":42},[36,73629,63176],{"class":405},[36,73631,15400],{"class":2443},[36,73633,47],{"class":42},[36,73635,69703],{"class":405},[36,73637,61497],{"class":2443},[36,73639,47],{"class":42},[36,73641,73642],{"class":405},"\"薪资\"",[36,73644,53963],{"class":2443},[36,73646,47],{"class":42},[36,73648,69703],{"class":405},[36,73650,51784],{"class":42},[36,73652,73653,73655,73657,73659,73661,73663,73665,73667,73669,73671,73673,73675],{"class":38,"line":33328},[36,73654,51818],{"class":42},[36,73656,69621],{"class":51777},[36,73658,15400],{"class":2443},[36,73660,47],{"class":42},[36,73662,69628],{"class":405},[36,73664,15439],{"class":2443},[36,73666,47],{"class":42},[36,73668,8132],{"class":405},[36,73670,53963],{"class":2443},[36,73672,47],{"class":42},[36,73674,69628],{"class":405},[36,73676,51784],{"class":42},[36,73678,73679,73681,73683,73685,73687,73689,73691,73693],{"class":38,"line":33334},[36,73680,55711],{"class":42},[36,73682,69643],{"class":51777},[36,73684,67128],{"class":2443},[36,73686,47],{"class":42},[36,73688,10441],{"class":405},[36,73690,69652],{"class":42},[36,73692,69643],{"class":51777},[36,73694,51784],{"class":42},[36,73696,73697,73699,73701,73703,73705,73707,73709,73711],{"class":38,"line":33343},[36,73698,55711],{"class":42},[36,73700,69643],{"class":51777},[36,73702,67128],{"class":2443},[36,73704,47],{"class":42},[36,73706,10510],{"class":405},[36,73708,69671],{"class":42},[36,73710,69643],{"class":51777},[36,73712,51784],{"class":42},[36,73714,73715,73717,73719],{"class":38,"line":33349},[36,73716,52253],{"class":42},[36,73718,69621],{"class":51777},[36,73720,51784],{"class":42},[36,73722,73723,73725,73727,73729,73731,73733,73735,73737,73739,73741,73743,73745],{"class":38,"line":33355},[36,73724,51818],{"class":42},[36,73726,69621],{"class":51777},[36,73728,15400],{"class":2443},[36,73730,47],{"class":42},[36,73732,69725],{"class":405},[36,73734,15439],{"class":2443},[36,73736,47],{"class":42},[36,73738,8132],{"class":405},[36,73740,53963],{"class":2443},[36,73742,47],{"class":42},[36,73744,69725],{"class":405},[36,73746,51784],{"class":42},[36,73748,73749,73751,73753,73755,73757,73759,73761,73763],{"class":38,"line":33364},[36,73750,55711],{"class":42},[36,73752,69643],{"class":51777},[36,73754,67128],{"class":2443},[36,73756,47],{"class":42},[36,73758,69746],{"class":405},[36,73760,69749],{"class":42},[36,73762,69643],{"class":51777},[36,73764,51784],{"class":42},[36,73766,73767,73769,73771,73773,73775,73777,73779,73781],{"class":38,"line":33370},[36,73768,55711],{"class":42},[36,73770,69643],{"class":51777},[36,73772,67128],{"class":2443},[36,73774,47],{"class":42},[36,73776,69766],{"class":405},[36,73778,69769],{"class":42},[36,73780,69643],{"class":51777},[36,73782,51784],{"class":42},[36,73784,73785,73787,73789,73791,73793,73795,73797,73799],{"class":38,"line":33381},[36,73786,55711],{"class":42},[36,73788,69643],{"class":51777},[36,73790,67128],{"class":2443},[36,73792,47],{"class":42},[36,73794,69786],{"class":405},[36,73796,69789],{"class":42},[36,73798,69643],{"class":51777},[36,73800,51784],{"class":42},[36,73802,73803,73805,73807,73809,73811,73813,73815,73817],{"class":38,"line":33387},[36,73804,55711],{"class":42},[36,73806,69643],{"class":51777},[36,73808,67128],{"class":2443},[36,73810,47],{"class":42},[36,73812,69806],{"class":405},[36,73814,69809],{"class":42},[36,73816,69643],{"class":51777},[36,73818,51784],{"class":42},[36,73820,73821,73823,73825,73827,73829,73831,73833,73835],{"class":38,"line":33406},[36,73822,55711],{"class":42},[36,73824,69643],{"class":51777},[36,73826,67128],{"class":2443},[36,73828,47],{"class":42},[36,73830,69826],{"class":405},[36,73832,69829],{"class":42},[36,73834,69643],{"class":51777},[36,73836,51784],{"class":42},[36,73838,73839,73841,73843],{"class":38,"line":33412},[36,73840,52253],{"class":42},[36,73842,69621],{"class":51777},[36,73844,51784],{"class":42},[36,73846,73847,73849,73851],{"class":38,"line":33423},[36,73848,51818],{"class":42},[36,73850,54364],{"class":51777},[36,73852,51784],{"class":42},[36,73854,73855,73857,73859,73862,73864,73867,73869],{"class":38,"line":33429},[36,73856,55711],{"class":42},[36,73858,36],{"class":51777},[36,73860,73861],{"class":42},">+\u003C\u002F",[36,73863,36],{"class":51777},[36,73865,73866],{"class":42},">添加\u003C\u002F",[36,73868,54364],{"class":51777},[36,73870,51784],{"class":42},[36,73872,73873,73875,73877],{"class":38,"line":33449},[36,73874,52894],{"class":42},[36,73876,67102],{"class":51777},[36,73878,51784],{"class":42},[36,73880,73881,73883,73885,73887,73889,73891,73894,73896,73899,73901,73904,73906],{"class":38,"line":33465},[36,73882,52621],{"class":42},[36,73884,52088],{"class":51777},[36,73886,53963],{"class":2443},[36,73888,47],{"class":42},[36,73890,63057],{"class":405},[36,73892,73893],{"class":42},">共有数据 \u003C",[36,73895,36],{"class":51777},[36,73897,73898],{"class":42},">0\u003C\u002F",[36,73900,36],{"class":51777},[36,73902,73903],{"class":42},"> 条\u003C\u002F",[36,73905,52088],{"class":51777},[36,73907,51784],{"class":42},[36,73909,73910,73912,73914],{"class":38,"line":33471},[36,73911,52621],{"class":42},[36,73913,758],{"class":51777},[36,73915,51784],{"class":42},[36,73917,73918,73920,73922],{"class":38,"line":33485},[36,73919,51818],{"class":42},[36,73921,761],{"class":51777},[36,73923,51784],{"class":42},[36,73925,73926,73928,73930],{"class":38,"line":33491},[36,73927,55711],{"class":42},[36,73929,764],{"class":51777},[36,73931,51784],{"class":42},[36,73933,73934,73936,73938,73941,73943],{"class":38,"line":33497},[36,73935,55779],{"class":42},[36,73937,767],{"class":51777},[36,73939,73940],{"class":42},">ID\u003C\u002F",[36,73942,767],{"class":51777},[36,73944,51784],{"class":42},[36,73946,73947,73949,73951,73953,73955],{"class":38,"line":33508},[36,73948,55779],{"class":42},[36,73950,767],{"class":51777},[36,73952,69932],{"class":42},[36,73954,767],{"class":51777},[36,73956,51784],{"class":42},[36,73958,73959,73961,73963,73965,73967],{"class":38,"line":33514},[36,73960,55779],{"class":42},[36,73962,767],{"class":51777},[36,73964,69945],{"class":42},[36,73966,767],{"class":51777},[36,73968,51784],{"class":42},[36,73970,73971,73973,73975,73977,73979],{"class":38,"line":33520},[36,73972,55779],{"class":42},[36,73974,767],{"class":51777},[36,73976,69958],{"class":42},[36,73978,767],{"class":51777},[36,73980,51784],{"class":42},[36,73982,73983,73985,73987,73989,73991],{"class":38,"line":33530},[36,73984,55779],{"class":42},[36,73986,767],{"class":51777},[36,73988,69971],{"class":42},[36,73990,767],{"class":51777},[36,73992,51784],{"class":42},[36,73994,73995,73997,73999,74001,74003],{"class":38,"line":33536},[36,73996,55779],{"class":42},[36,73998,767],{"class":51777},[36,74000,69984],{"class":42},[36,74002,767],{"class":51777},[36,74004,51784],{"class":42},[36,74006,74007,74009,74011,74014,74016],{"class":38,"line":33547},[36,74008,55779],{"class":42},[36,74010,767],{"class":51777},[36,74012,74013],{"class":42},">录入时间\u003C\u002F",[36,74015,767],{"class":51777},[36,74017,51784],{"class":42},[36,74019,74020,74022,74024,74026,74028],{"class":38,"line":33553},[36,74021,55779],{"class":42},[36,74023,767],{"class":51777},[36,74025,69997],{"class":42},[36,74027,767],{"class":51777},[36,74029,51784],{"class":42},[36,74031,74032,74034,74036],{"class":38,"line":33563},[36,74033,55884],{"class":42},[36,74035,764],{"class":51777},[36,74037,51784],{"class":42},[36,74039,74040,74042,74044],{"class":38,"line":33568},[36,74041,52253],{"class":42},[36,74043,761],{"class":51777},[36,74045,51784],{"class":42},[36,74047,74048,74050,74052],{"class":38,"line":33574},[36,74049,51818],{"class":42},[36,74051,805],{"class":51777},[36,74053,51784],{"class":42},[36,74055,74056],{"class":38,"line":33623},[36,74057,74058],{"class":69},"      \u003C!-- \u003Ctr>\n",[36,74060,74061],{"class":38,"line":33670},[36,74062,74063],{"class":69},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,74065,74066],{"class":38,"line":33675},[36,74067,74063],{"class":69},[36,74069,74070],{"class":38,"line":33681},[36,74071,74063],{"class":69},[36,74073,74074],{"class":38,"line":33700},[36,74075,74063],{"class":69},[36,74077,74078],{"class":38,"line":33706},[36,74079,74063],{"class":69},[36,74081,74082],{"class":38,"line":33726},[36,74083,74063],{"class":69},[36,74085,74086],{"class":38,"line":33732},[36,74087,74063],{"class":69},[36,74089,74090],{"class":38,"line":33738},[36,74091,74092],{"class":69},"        \u003Ctd>\n",[36,74094,74095],{"class":38,"line":33748},[36,74096,74097],{"class":69},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,74099,74100],{"class":38,"line":33753},[36,74101,74102],{"class":69},"        \u003C\u002Ftd>\n",[36,74104,74105],{"class":38,"line":33759},[36,74106,74107],{"class":69},"      \u003C\u002Ftr> -->\n",[36,74109,74110,74112,74114],{"class":38,"line":33775},[36,74111,52253],{"class":42},[36,74113,805],{"class":51777},[36,74115,51784],{"class":42},[36,74117,74118,74120,74122],{"class":38,"line":33820},[36,74119,52894],{"class":42},[36,74121,758],{"class":51777},[36,74123,51784],{"class":42},[36,74125,74126,74128,74130],{"class":38,"line":33826},[36,74127,52621],{"class":42},[36,74129,52290],{"class":51777},[36,74131,51784],{"class":42},[36,74133,74134],{"class":38,"line":33832},[36,74135,74136],{"class":69},"    \u002F\u002F const initData = [{\n",[36,74138,74139],{"class":38,"line":33838},[36,74140,74141],{"class":69},"    \u002F\u002F   unameId: 1,\n",[36,74143,74144],{"class":38,"line":33849},[36,74145,74146],{"class":69},"    \u002F\u002F   uname: '华晨宇',\n",[36,74148,74149],{"class":38,"line":33855},[36,74150,74151],{"class":69},"    \u002F\u002F   age: 22,\n",[36,74153,74154],{"class":38,"line":33861},[36,74155,74156],{"class":69},"    \u002F\u002F   salary: 12000,\n",[36,74158,74159],{"class":38,"line":33867},[36,74160,74161],{"class":69},"    \u002F\u002F   gender: '男',\n",[36,74163,74164],{"class":38,"line":33885},[36,74165,74166],{"class":69},"    \u002F\u002F   city: '北京',\n",[36,74168,74169],{"class":38,"line":33899},[36,74170,74171],{"class":69},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,74173,74174],{"class":38,"line":33908},[36,74175,74176],{"class":69},"    \u002F\u002F }]\n",[36,74178,74179],{"class":38,"line":33917},[36,74180,74181],{"class":69},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,74183,74184],{"class":38,"line":33926},[36,74185,74186],{"class":69},"    \u002F\u002F 1.渲染业务\n",[36,74188,74189],{"class":38,"line":33935},[36,74190,74191],{"class":69},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,74193,74194],{"class":38,"line":33941},[36,74195,74196],{"class":69},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,74198,74199],{"class":38,"line":33947},[36,74200,74201],{"class":69},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,74203,74204],{"class":38,"line":33955},[36,74205,2880],{"emptyLinePlaceholder":553},[36,74207,74208],{"class":38,"line":33960},[36,74209,74210],{"class":69},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,74212,74213],{"class":38,"line":33966},[36,74214,74215],{"class":69},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,74217,74218,74220,74222,74224],{"class":38,"line":33977},[36,74219,11701],{"class":46},[36,74221,58172],{"class":53},[36,74223,14044],{"class":46},[36,74225,52315],{"class":42},[36,74227,74228,74231,74233],{"class":38,"line":33983},[36,74229,74230],{"class":42},"    console.",[36,74232,58724],{"class":2443},[36,74234,52889],{"class":42},[36,74236,74237],{"class":38,"line":34003},[36,74238,2880],{"emptyLinePlaceholder":553},[36,74240,74241],{"class":38,"line":34009},[36,74242,74243],{"class":69},"    \u002F\u002F 时间函数\n",[36,74245,74246,74248,74251],{"class":38,"line":34015},[36,74247,70561],{"class":46},[36,74249,74250],{"class":2443}," getTime",[36,74252,11333],{"class":42},[36,74254,74255,74257,74260,74262,74264,74267],{"class":38,"line":34021},[36,74256,58705],{"class":46},[36,74258,74259],{"class":53}," date",[36,74261,14044],{"class":46},[36,74263,12058],{"class":46},[36,74265,74266],{"class":2443}," Date",[36,74268,2456],{"class":42},[36,74270,74271,74273,74275,74277,74280,74283,74285,74287,74289,74292,74295,74297,74299,74301,74303,74305,74307,74309],{"class":38,"line":34038},[36,74272,58705],{"class":46},[36,74274,16571],{"class":53},[36,74276,14044],{"class":46},[36,74278,74279],{"class":42}," date.",[36,74281,74282],{"class":2443},"getHours",[36,74284,13530],{"class":42},[36,74286,1523],{"class":46},[36,74288,2518],{"class":53},[36,74290,74291],{"class":46}," ?",[36,74293,74294],{"class":405}," '0'",[36,74296,46043],{"class":46},[36,74298,74279],{"class":42},[36,74300,74282],{"class":2443},[36,74302,13530],{"class":42},[36,74304,1472],{"class":46},[36,74306,74279],{"class":42},[36,74308,74282],{"class":2443},[36,74310,2456],{"class":42},[36,74312,74313,74315,74318,74320,74322,74325,74327,74329,74331,74333,74335,74337,74339,74341,74343,74345,74347,74349],{"class":38,"line":34044},[36,74314,58705],{"class":46},[36,74316,74317],{"class":53}," m",[36,74319,14044],{"class":46},[36,74321,74279],{"class":42},[36,74323,74324],{"class":2443},"getMinutes",[36,74326,13530],{"class":42},[36,74328,1523],{"class":46},[36,74330,2518],{"class":53},[36,74332,74291],{"class":46},[36,74334,74294],{"class":405},[36,74336,46043],{"class":46},[36,74338,74279],{"class":42},[36,74340,74324],{"class":2443},[36,74342,13530],{"class":42},[36,74344,1472],{"class":46},[36,74346,74279],{"class":42},[36,74348,74324],{"class":2443},[36,74350,2456],{"class":42},[36,74352,74353,74355,74357,74359,74361,74364,74366,74368,74370,74372,74374,74376,74378,74380,74382,74384,74386,74388],{"class":38,"line":34050},[36,74354,58705],{"class":46},[36,74356,8908],{"class":53},[36,74358,14044],{"class":46},[36,74360,74279],{"class":42},[36,74362,74363],{"class":2443},"getSeconds",[36,74365,13530],{"class":42},[36,74367,1523],{"class":46},[36,74369,2518],{"class":53},[36,74371,74291],{"class":46},[36,74373,74294],{"class":405},[36,74375,46043],{"class":46},[36,74377,74279],{"class":42},[36,74379,74363],{"class":2443},[36,74381,13530],{"class":42},[36,74383,1472],{"class":46},[36,74385,74279],{"class":42},[36,74387,74363],{"class":2443},[36,74389,2456],{"class":42},[36,74391,74392,74394,74397,74399,74401,74404,74406,74409,74411,74414,74416,74418,74421,74423,74425,74427,74429,74431,74433,74436,74438,74441,74443,74446,74448,74450,74452],{"class":38,"line":34056},[36,74393,58705],{"class":46},[36,74395,74396],{"class":53}," str",[36,74398,14044],{"class":46},[36,74400,63380],{"class":405},[36,74402,74403],{"class":42},"date",[36,74405,1171],{"class":405},[36,74407,74408],{"class":2443},"getFullYear",[36,74410,2907],{"class":405},[36,74412,74413],{"class":405},"}\u002F${",[36,74415,74403],{"class":42},[36,74417,1171],{"class":405},[36,74419,74420],{"class":2443},"getMonth",[36,74422,13530],{"class":405},[36,74424,1097],{"class":46},[36,74426,25599],{"class":53},[36,74428,74413],{"class":405},[36,74430,74403],{"class":42},[36,74432,1171],{"class":405},[36,74434,74435],{"class":2443},"getDate",[36,74437,2907],{"class":405},[36,74439,74440],{"class":405},"} ${",[36,74442,1032],{"class":42},[36,74444,74445],{"class":405},"}:${",[36,74447,1157],{"class":42},[36,74449,74445],{"class":405},[36,74451,1308],{"class":42},[36,74453,74454],{"class":405},"}`\n",[36,74456,74457,74460],{"class":38,"line":34062},[36,74458,74459],{"class":46},"      return",[36,74461,74462],{"class":42}," str\n",[36,74464,74465],{"class":38,"line":34068},[36,74466,2667],{"class":42},[36,74468,74469],{"class":38,"line":34095},[36,74470,74471],{"class":69},"    \u002F\u002F 渲染函数\n",[36,74473,74474,74476,74478,74480,74482,74484,74486,74488],{"class":38,"line":34119},[36,74475,11701],{"class":46},[36,74477,70224],{"class":53},[36,74479,14044],{"class":46},[36,74481,54873],{"class":42},[36,74483,54876],{"class":2443},[36,74485,345],{"class":42},[36,74487,70235],{"class":405},[36,74489,63],{"class":42},[36,74491,74492,74494,74496],{"class":38,"line":34125},[36,74493,70561],{"class":46},[36,74495,70564],{"class":2443},[36,74497,11333],{"class":42},[36,74499,74500],{"class":38,"line":34131},[36,74501,74502],{"class":69},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,74504,74505],{"class":38,"line":34137},[36,74506,74507],{"class":69},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,74509,74510,74512,74515,74517,74519,74522,74524,74526,74528,74531,74533,74536],{"class":38,"line":34148},[36,74511,58705],{"class":46},[36,74513,74514],{"class":53}," trArr",[36,74516,14044],{"class":46},[36,74518,52442],{"class":42},[36,74520,74521],{"class":2443},"map",[36,74523,345],{"class":42},[36,74525,54926],{"class":46},[36,74527,2138],{"class":42},[36,74529,74530],{"class":5696},"ele",[36,74532,12915],{"class":42},[36,74534,74535],{"class":5696},"index",[36,74537,12922],{"class":42},[36,74539,74540,74542],{"class":38,"line":34159},[36,74541,15232],{"class":46},[36,74543,70645],{"class":405},[36,74545,74546],{"class":38,"line":34165},[36,74547,74548],{"class":405},"      \u003Ctr>\n",[36,74550,74551,74553,74555,74557,74560],{"class":38,"line":34182},[36,74552,70650],{"class":405},[36,74554,74530],{"class":42},[36,74556,1171],{"class":405},[36,74558,74559],{"class":42},"unameId",[36,74561,70665],{"class":405},[36,74563,74564,74566,74568,74570,74572],{"class":38,"line":34205},[36,74565,70650],{"class":405},[36,74567,74530],{"class":42},[36,74569,1171],{"class":405},[36,74571,70681],{"class":42},[36,74573,70665],{"class":405},[36,74575,74576,74578,74580,74582,74584],{"class":38,"line":34228},[36,74577,70650],{"class":405},[36,74579,74530],{"class":42},[36,74581,1171],{"class":405},[36,74583,70698],{"class":42},[36,74585,70665],{"class":405},[36,74587,74588,74590,74592,74594,74596],{"class":38,"line":34234},[36,74589,70650],{"class":405},[36,74591,74530],{"class":42},[36,74593,1171],{"class":405},[36,74595,70715],{"class":42},[36,74597,70665],{"class":405},[36,74599,74600,74602,74604,74606,74608],{"class":38,"line":34239},[36,74601,70650],{"class":405},[36,74603,74530],{"class":42},[36,74605,1171],{"class":405},[36,74607,70732],{"class":42},[36,74609,70665],{"class":405},[36,74611,74612,74614,74616,74618,74620],{"class":38,"line":34248},[36,74613,70650],{"class":405},[36,74615,74530],{"class":42},[36,74617,1171],{"class":405},[36,74619,70749],{"class":42},[36,74621,70665],{"class":405},[36,74623,74624,74626,74628,74630,74632],{"class":38,"line":34258},[36,74625,70650],{"class":405},[36,74627,74530],{"class":42},[36,74629,1171],{"class":405},[36,74631,2867],{"class":42},[36,74633,70665],{"class":405},[36,74635,74636],{"class":38,"line":34264},[36,74637,74092],{"class":405},[36,74639,74640,74643,74645],{"class":38,"line":34269},[36,74641,74642],{"class":405},"          \u003Ca href=\"#\" data-id=\"${",[36,74644,74535],{"class":42},[36,74646,74647],{"class":405},"}\">删除\u003C\u002Fa>\n",[36,74649,74650],{"class":38,"line":34275},[36,74651,74102],{"class":405},[36,74653,74654],{"class":38,"line":34288},[36,74655,74656],{"class":405},"      \u003C\u002Ftr>\n",[36,74658,74659],{"class":38,"line":34294},[36,74660,74661],{"class":405},"  `\n",[36,74663,74664],{"class":38,"line":34305},[36,74665,65292],{"class":42},[36,74667,74668,74670,74672],{"class":38,"line":34316},[36,74669,58721],{"class":42},[36,74671,58724],{"class":2443},[36,74673,74674],{"class":42},"(trArr)\n",[36,74676,74677],{"class":38,"line":34335},[36,74678,2880],{"emptyLinePlaceholder":553},[36,74680,74681],{"class":38,"line":49995},[36,74682,74683],{"class":69},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,74685,74686],{"class":38,"line":50000},[36,74687,74688],{"class":69},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,74690,74691,74693,74695,74698,74701,74703,74706],{"class":38,"line":50009},[36,74692,70576],{"class":42},[36,74694,47],{"class":46},[36,74696,74697],{"class":42}," trArr.",[36,74699,74700],{"class":2443},"join",[36,74702,345],{"class":42},[36,74704,74705],{"class":405},"''",[36,74707,63],{"class":42},[36,74709,74710],{"class":38,"line":50018},[36,74711,74712],{"class":69},"      \u002F\u002F 显示共有几条\n",[36,74714,74715,74717,74719,74721,74724,74727,74729,74731],{"class":38,"line":50023},[36,74716,56248],{"class":42},[36,74718,54876],{"class":2443},[36,74720,345],{"class":42},[36,74722,74723],{"class":405},"'.total span'",[36,74725,74726],{"class":42},").innerHTML ",[36,74728,47],{"class":46},[36,74730,52442],{"class":42},[36,74732,56308],{"class":53},[36,74734,74735],{"class":38,"line":50028},[36,74736,2667],{"class":42},[36,74738,74739],{"class":38,"line":50033},[36,74740,74741],{"class":69},"    \u002F\u002F render()\n",[36,74743,74744],{"class":38,"line":50046},[36,74745,2880],{"emptyLinePlaceholder":553},[36,74747,74748],{"class":38,"line":50051},[36,74749,74750],{"class":69},"    \u002F\u002F 获取DOM对象\n",[36,74752,74753,74755,74757,74759,74761,74763,74765,74767],{"class":38,"line":50060},[36,74754,11701],{"class":46},[36,74756,70298],{"class":53},[36,74758,14044],{"class":46},[36,74760,54873],{"class":42},[36,74762,54876],{"class":2443},[36,74764,345],{"class":42},[36,74766,70309],{"class":405},[36,74768,63],{"class":42},[36,74770,74771,74773,74775,74777,74779,74781,74783,74785],{"class":38,"line":50069},[36,74772,11701],{"class":46},[36,74774,70125],{"class":53},[36,74776,14044],{"class":46},[36,74778,54873],{"class":42},[36,74780,54876],{"class":2443},[36,74782,345],{"class":42},[36,74784,70136],{"class":405},[36,74786,63],{"class":42},[36,74788,74789,74791,74793,74795,74797,74799,74801,74803],{"class":38,"line":50086},[36,74790,11701],{"class":46},[36,74792,16169],{"class":53},[36,74794,14044],{"class":46},[36,74796,54873],{"class":42},[36,74798,54876],{"class":2443},[36,74800,345],{"class":42},[36,74802,70155],{"class":405},[36,74804,63],{"class":42},[36,74806,74808,74810,74812,74814,74816,74818,74820,74822],{"class":38,"line":74807},231,[36,74809,11701],{"class":46},[36,74811,70184],{"class":53},[36,74813,14044],{"class":46},[36,74815,54873],{"class":42},[36,74817,54876],{"class":2443},[36,74819,345],{"class":42},[36,74821,70195],{"class":405},[36,74823,63],{"class":42},[36,74825,74827,74829,74831,74833,74835,74837,74839,74841],{"class":38,"line":74826},232,[36,74828,11701],{"class":46},[36,74830,70164],{"class":53},[36,74832,14044],{"class":46},[36,74834,54873],{"class":42},[36,74836,54876],{"class":2443},[36,74838,345],{"class":42},[36,74840,70175],{"class":405},[36,74842,63],{"class":42},[36,74844,74846,74848,74850,74852,74854,74856,74858,74860],{"class":38,"line":74845},233,[36,74847,11701],{"class":46},[36,74849,70204],{"class":53},[36,74851,14044],{"class":46},[36,74853,54873],{"class":42},[36,74855,54876],{"class":2443},[36,74857,345],{"class":42},[36,74859,70215],{"class":405},[36,74861,63],{"class":42},[36,74863,74865],{"class":38,"line":74864},234,[36,74866,2880],{"emptyLinePlaceholder":553},[36,74868,74870],{"class":38,"line":74869},235,[36,74871,74872],{"class":69},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,74874,74876,74878,74880,74882,74884,74886,74888,74890,74892],{"class":38,"line":74875},236,[36,74877,70316],{"class":42},[36,74879,58290],{"class":2443},[36,74881,345],{"class":42},[36,74883,70323],{"class":405},[36,74885,12915],{"class":42},[36,74887,54926],{"class":46},[36,74889,2138],{"class":42},[36,74891,697],{"class":5696},[36,74893,12922],{"class":42},[36,74895,74897],{"class":38,"line":74896},237,[36,74898,74899],{"class":69},"      \u002F\u002F 禁止浏览器跳转\n",[36,74901,74903,74905,74907],{"class":38,"line":74902},238,[36,74904,70343],{"class":42},[36,74906,70346],{"class":2443},[36,74908,2456],{"class":42},[36,74910,74912],{"class":38,"line":74911},239,[36,74913,74914],{"class":69},"      \u002F\u002F 非空判断\n",[36,74916,74918],{"class":38,"line":74917},240,[36,74919,74920],{"class":69},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,74922,74924],{"class":38,"line":74923},241,[36,74925,74926],{"class":69},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,74928,74930,74932,74934,74936,74939,74941,74944,74947,74949,74951],{"class":38,"line":74929},242,[36,74931,54957],{"class":46},[36,74933,2138],{"class":42},[36,74935,846],{"class":46},[36,74937,74938],{"class":42},"uname.value ",[36,74940,71834],{"class":46},[36,74942,74943],{"class":46}," !",[36,74945,74946],{"class":42},"age.value ",[36,74948,71834],{"class":46},[36,74950,74943],{"class":46},[36,74952,74953],{"class":42},"salary.value) {\n",[36,74955,74957,74959,74961,74963,74965],{"class":38,"line":74956},243,[36,74958,15232],{"class":46},[36,74960,70417],{"class":2443},[36,74962,345],{"class":42},[36,74964,70422],{"class":405},[36,74966,63],{"class":42},[36,74968,74970],{"class":38,"line":74969},244,[36,74971,52875],{"class":42},[36,74973,74975,74977,74979],{"class":38,"line":74974},245,[36,74976,58484],{"class":42},[36,74978,52361],{"class":2443},[36,74980,74981],{"class":42},"({\n",[36,74983,74985],{"class":38,"line":74984},246,[36,74986,74987],{"class":69},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,74989,74991],{"class":38,"line":74990},247,[36,74992,74993],{"class":69},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,74995,74997],{"class":38,"line":74996},248,[36,74998,74999],{"class":69},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,75001,75003],{"class":38,"line":75002},249,[36,75004,75005],{"class":69},"        \u002F\u002F unameId: arr.length + 1,\n",[36,75007,75009],{"class":38,"line":75008},250,[36,75010,2880],{"emptyLinePlaceholder":553},[36,75012,75014],{"class":38,"line":75013},251,[36,75015,75016],{"class":69},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,75018,75020],{"class":38,"line":75019},252,[36,75021,75022],{"class":69},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,75024,75026],{"class":38,"line":75025},253,[36,75027,75028],{"class":69},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,75030,75032],{"class":38,"line":75031},254,[36,75033,75034],{"class":69},"        \u002F\u002F 0当假看\n",[36,75036,75038,75041,75043,75045,75048,75050,75052,75054,75057,75059,75061,75064,75066],{"class":38,"line":75037},255,[36,75039,75040],{"class":42},"        unameId: arr.",[36,75042,52445],{"class":53},[36,75044,74291],{"class":46},[36,75046,75047],{"class":42}," arr[arr.",[36,75049,52445],{"class":53},[36,75051,52748],{"class":46},[36,75053,25599],{"class":53},[36,75055,75056],{"class":42},"].unameId ",[36,75058,1097],{"class":46},[36,75060,25599],{"class":53},[36,75062,75063],{"class":46}," :",[36,75065,25599],{"class":53},[36,75067,31944],{"class":42},[36,75069,75071],{"class":38,"line":75070},256,[36,75072,70470],{"class":42},[36,75074,75076],{"class":38,"line":75075},257,[36,75077,70475],{"class":42},[36,75079,75081],{"class":38,"line":75080},258,[36,75082,70485],{"class":42},[36,75084,75086],{"class":38,"line":75085},259,[36,75087,70480],{"class":42},[36,75089,75091],{"class":38,"line":75090},260,[36,75092,75093],{"class":42},"        city: city.value,\n",[36,75095,75097],{"class":38,"line":75096},261,[36,75098,75099],{"class":69},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,75101,75103],{"class":38,"line":75102},262,[36,75104,75105],{"class":69},"        \u002F\u002F time: new Date().toDateString()\n",[36,75107,75109,75112,75115],{"class":38,"line":75108},263,[36,75110,75111],{"class":42},"        time: ",[36,75113,75114],{"class":2443},"getTime",[36,75116,2456],{"class":42},[36,75118,75120],{"class":38,"line":75119},264,[36,75121,65292],{"class":42},[36,75123,75125],{"class":38,"line":75124},265,[36,75126,75127],{"class":69},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,75129,75131,75133],{"class":38,"line":75130},266,[36,75132,70545],{"class":2443},[36,75134,2456],{"class":42},[36,75136,75138,75140,75142,75144,75146],{"class":38,"line":75137},267,[36,75139,70528],{"class":53},[36,75141,1171],{"class":42},[36,75143,70533],{"class":2443},[36,75145,13530],{"class":42},[36,75147,75148],{"class":69},"\u002F\u002F重置表单\n",[36,75150,75152],{"class":38,"line":75151},268,[36,75153,75154],{"class":69},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,75156,75158,75161,75163,75165,75168,75170,75172,75174,75176],{"class":38,"line":75157},269,[36,75159,75160],{"class":42},"      localStorage.",[36,75162,72131],{"class":2443},[36,75164,345],{"class":42},[36,75166,75167],{"class":405},"'data'",[36,75169,12915],{"class":42},[36,75171,72141],{"class":53},[36,75173,1171],{"class":42},[36,75175,72146],{"class":2443},[36,75177,75178],{"class":42},"(arr))\n",[36,75180,75182],{"class":38,"line":75181},270,[36,75183,33938],{"class":42},[36,75185,75187],{"class":38,"line":75186},271,[36,75188,2880],{"emptyLinePlaceholder":553},[36,75190,75192],{"class":38,"line":75191},272,[36,75193,75194],{"class":69},"    \u002F\u002F 3.删除业务\n",[36,75196,75198],{"class":38,"line":75197},273,[36,75199,75200],{"class":69},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,75202,75204,75206,75208,75210,75212,75214,75216,75218,75220],{"class":38,"line":75203},274,[36,75205,70818],{"class":42},[36,75207,58290],{"class":2443},[36,75209,345],{"class":42},[36,75211,58295],{"class":405},[36,75213,12915],{"class":42},[36,75215,54926],{"class":46},[36,75217,2138],{"class":42},[36,75219,697],{"class":5696},[36,75221,12922],{"class":42},[36,75223,75225],{"class":38,"line":75224},275,[36,75226,75227],{"class":69},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,75229,75231,75233,75235,75237,75239],{"class":38,"line":75230},276,[36,75232,54957],{"class":46},[36,75234,67511],{"class":42},[36,75236,54963],{"class":46},[36,75238,68733],{"class":405},[36,75240,12922],{"class":42},[36,75242,75244],{"class":38,"line":75243},277,[36,75245,75246],{"class":69},"        \u002F\u002F alert(1)\n",[36,75248,75250],{"class":38,"line":75249},278,[36,75251,75252],{"class":69},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,75254,75256],{"class":38,"line":75255},279,[36,75257,75258],{"class":69},"        \u002F\u002F console.log(e.target)\n",[36,75260,75262],{"class":38,"line":75261},280,[36,75263,75264],{"class":69},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,75266,75268],{"class":38,"line":75267},281,[36,75269,2880],{"emptyLinePlaceholder":553},[36,75271,75273],{"class":38,"line":75272},282,[36,75274,75275],{"class":69},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,75277,75279],{"class":38,"line":75278},283,[36,75280,75281],{"class":69},"        \u002F\u002F confirm()为确认框\n",[36,75283,75285],{"class":38,"line":75284},284,[36,75286,75287],{"class":69},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,75289,75291,75293,75295,75298,75300,75303],{"class":38,"line":75290},285,[36,75292,2977],{"class":46},[36,75294,2138],{"class":42},[36,75296,75297],{"class":2443},"confirm",[36,75299,345],{"class":42},[36,75301,75302],{"class":405},"'您确定要删除这条数据吗？'",[36,75304,75305],{"class":42},")) {\n",[36,75307,75309,75312,75314,75316,75318],{"class":38,"line":75308},286,[36,75310,75311],{"class":42},"          arr.",[36,75313,58487],{"class":2443},[36,75315,70871],{"class":42},[36,75317,54],{"class":53},[36,75319,63],{"class":42},[36,75321,75323],{"class":38,"line":75322},287,[36,75324,75325],{"class":69},"          \u002F\u002F 3.4 重新渲染页面\n",[36,75327,75329,75332],{"class":38,"line":75328},288,[36,75330,75331],{"class":2443},"          render",[36,75333,2456],{"class":42},[36,75335,75337],{"class":38,"line":75336},289,[36,75338,75339],{"class":69},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,75341,75343,75346,75348,75350,75352,75354,75356,75358,75360],{"class":38,"line":75342},290,[36,75344,75345],{"class":42},"          localStorage.",[36,75347,72131],{"class":2443},[36,75349,345],{"class":42},[36,75351,75167],{"class":405},[36,75353,12915],{"class":42},[36,75355,72141],{"class":53},[36,75357,1171],{"class":42},[36,75359,72146],{"class":2443},[36,75361,75178],{"class":42},[36,75363,75365],{"class":38,"line":75364},291,[36,75366,3009],{"class":42},[36,75368,75370],{"class":38,"line":75369},292,[36,75371,52875],{"class":42},[36,75373,75375],{"class":38,"line":75374},293,[36,75376,2880],{"emptyLinePlaceholder":553},[36,75378,75380],{"class":38,"line":75379},294,[36,75381,33938],{"class":42},[36,75383,75385],{"class":38,"line":75384},295,[36,75386,2880],{"emptyLinePlaceholder":553},[36,75388,75390,75392,75394],{"class":38,"line":75389},296,[36,75391,52894],{"class":42},[36,75393,52290],{"class":51777},[36,75395,51784],{"class":42},[36,75397,75399,75401,75403],{"class":38,"line":75398},297,[36,75400,52262],{"class":42},[36,75402,52277],{"class":51777},[36,75404,51784],{"class":42},[36,75406,75408],{"class":38,"line":75407},298,[36,75409,2880],{"emptyLinePlaceholder":553},[36,75411,75413,75415,75417],{"class":38,"line":75412},299,[36,75414,52262],{"class":42},[36,75416,51112],{"class":51777},[36,75418,51784],{"class":42},[14,75420,75422],{"id":75421},"_36-正则表达式","3.6 正则表达式",[19,75424,75425],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75427,75428],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75430,75431],{},"正则表达式的作用：",[1620,75433,75434,75441,75447],{},[582,75435,75436,75437,75440],{},"表单验证（ ",[770,75438,75439],{},"匹配"," ）",[582,75442,75443,75444,75440],{},"过滤敏感词（ ",[770,75445,75446],{},"替换",[582,75448,75449,75450,75440],{},"字符串中提取我们想要的部分（ ",[770,75451,75452],{},"提取",[596,75454,75456],{"id":75455},"_361-语法","3.6.1 语法",[19,75458,75459],{},"正则表达式使用步骤：",[579,75461,75462,75465],{},[582,75463,75464],{},"定义规则",[582,75466,75467],{},"查找是否匹配",[19,75469,75470],{},"正则表达式里边不需要写引号",[19,75472,75473],{},[519,75474],{"alt":31,"src":75475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75477,75478],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75480,75481],{},"reg.test(str)",[19,75483,75484],{},[519,75485],{"alt":31,"src":75486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75488,75489],{},[519,75490],{"alt":31,"src":75491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[596,75493,75495],{"id":75494},"_362-元字符","3.6.2 元字符",[579,75497,75498,75501,75504,75507,75514],{},[582,75499,75500],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[582,75502,75503],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[582,75505,75506],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[582,75508,75509,75510],{},"正则验证工具：",[43,75511,75512],{"href":75512,"rel":75513},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24345],[582,75515,75516],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22478,75518,75520],{"id":75519},"_3621-边界符","3.6.2.1 边界符",[19,75522,75523],{},[519,75524],{"alt":31,"src":75525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75527,75528],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75530,75531],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75533,75534],{},"只匹配一次",[19,75536,75537],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22478,75539,75541],{"id":75540},"_3622-量词","3.6.2.2 量词",[19,75543,75544],{},[519,75545],{"alt":31,"src":75546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75548,75549],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22478,75551,75553],{"id":75552},"_3623-元字符","3.6.2.3 元字符",[19,75555,75556],{},[519,75557],{"alt":31,"src":75558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75560,75561],{},"匹配的是a或b或c []只选一个",[19,75563,75564],{},[519,75565],{"alt":31,"src":75566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75568,75569],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75571,75572],{},[519,75573],{"alt":31,"src":75574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75576,75577],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75579,75580],{},[519,75581],{"alt":31,"src":75582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,75584,75586],{"className":51110,"code":75585,"language":51112,"meta":31,"style":31},"\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",[33,75587,75588,75598,75612,75616,75624,75638,75658,75670,75678,75682,75690,75698,75703,75734,75761,75789,75793,75798,75826,75857,75862,75867,75898,75930,75962,75966,75971,76002,76032,76062,76066,76071,76102,76133,76163,76193,76197,76202,76235,76239,76244,76275,76306,76310,76315,76346,76376,76407,76411,76416,76448,76479,76510,76537,76568,76600,76633,76664,76695,76727,76758,76766,76774,76778],{"__ignoreMap":31},[36,75589,75590,75592,75594,75596],{"class":38,"line":39},[36,75591,51774],{"class":42},[36,75593,51778],{"class":51777},[36,75595,51781],{"class":2443},[36,75597,51784],{"class":42},[36,75599,75600,75602,75604,75606,75608,75610],{"class":38,"line":66},[36,75601,1523],{"class":42},[36,75603,51112],{"class":51777},[36,75605,51793],{"class":2443},[36,75607,47],{"class":42},[36,75609,51798],{"class":405},[36,75611,51784],{"class":42},[36,75613,75614],{"class":38,"line":73},[36,75615,2880],{"emptyLinePlaceholder":553},[36,75617,75618,75620,75622],{"class":38,"line":79},[36,75619,1523],{"class":42},[36,75621,51811],{"class":51777},[36,75623,51784],{"class":42},[36,75625,75626,75628,75630,75632,75634,75636],{"class":38,"line":85},[36,75627,52621],{"class":42},[36,75629,51821],{"class":51777},[36,75631,51824],{"class":2443},[36,75633,47],{"class":42},[36,75635,51829],{"class":405},[36,75637,51784],{"class":42},[36,75639,75640,75642,75644,75646,75648,75650,75652,75654,75656],{"class":38,"line":419},[36,75641,52621],{"class":42},[36,75643,51821],{"class":51777},[36,75645,15400],{"class":2443},[36,75647,47],{"class":42},[36,75649,51868],{"class":405},[36,75651,51848],{"class":2443},[36,75653,47],{"class":42},[36,75655,51875],{"class":405},[36,75657,51784],{"class":42},[36,75659,75660,75662,75664,75666,75668],{"class":38,"line":425},[36,75661,52621],{"class":42},[36,75663,51884],{"class":51777},[36,75665,51887],{"class":42},[36,75667,51884],{"class":51777},[36,75669,51784],{"class":42},[36,75671,75672,75674,75676],{"class":38,"line":431},[36,75673,52262],{"class":42},[36,75675,51811],{"class":51777},[36,75677,51784],{"class":42},[36,75679,75680],{"class":38,"line":437},[36,75681,2880],{"emptyLinePlaceholder":553},[36,75683,75684,75686,75688],{"class":38,"line":443},[36,75685,1523],{"class":42},[36,75687,52277],{"class":51777},[36,75689,51784],{"class":42},[36,75691,75692,75694,75696],{"class":38,"line":2092},[36,75693,52621],{"class":42},[36,75695,52290],{"class":51777},[36,75697,51784],{"class":42},[36,75699,75700],{"class":38,"line":2097},[36,75701,75702],{"class":69},"    \u002F\u002F 元字符中\n",[36,75704,75705,75707,75709,75711,75713,75716,75718,75720,75723,75725,75728,75731],{"class":38,"line":2103},[36,75706,74230],{"class":42},[36,75708,58724],{"class":2443},[36,75710,345],{"class":42},[36,75712,1197],{"class":405},[36,75714,75715],{"class":48454},"哈",[36,75717,1197],{"class":405},[36,75719,1171],{"class":42},[36,75721,75722],{"class":2443},"test",[36,75724,345],{"class":42},[36,75726,75727],{"class":405},"'哈'",[36,75729,75730],{"class":42},"))  ",[36,75732,75733],{"class":69},"\u002F\u002Ftrue\n",[36,75735,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754,75757,75759],{"class":38,"line":2108},[36,75737,74230],{"class":42},[36,75739,58724],{"class":2443},[36,75741,345],{"class":42},[36,75743,1197],{"class":405},[36,75745,75715],{"class":48454},[36,75747,1197],{"class":405},[36,75749,1171],{"class":42},[36,75751,75722],{"class":2443},[36,75753,345],{"class":42},[36,75755,75756],{"class":405},"'哈哈'",[36,75758,75730],{"class":42},[36,75760,75733],{"class":69},[36,75762,75763,75765,75767,75769,75771,75773,75775,75777,75779,75781,75784,75787],{"class":38,"line":2122},[36,75764,74230],{"class":42},[36,75766,58724],{"class":2443},[36,75768,345],{"class":42},[36,75770,1197],{"class":405},[36,75772,75715],{"class":48454},[36,75774,1197],{"class":405},[36,75776,1171],{"class":42},[36,75778,75722],{"class":2443},[36,75780,345],{"class":42},[36,75782,75783],{"class":405},"'二哈'",[36,75785,75786],{"class":42},"))   ",[36,75788,75733],{"class":69},[36,75790,75791],{"class":38,"line":2127},[36,75792,2880],{"emptyLinePlaceholder":553},[36,75794,75795],{"class":38,"line":2133},[36,75796,75797],{"class":69},"    \u002F\u002F 1.边界符\n",[36,75799,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822,75824],{"class":38,"line":2154},[36,75801,74230],{"class":42},[36,75803,58724],{"class":2443},[36,75805,345],{"class":42},[36,75807,1197],{"class":405},[36,75809,1579],{"class":46},[36,75811,75715],{"class":48454},[36,75813,1197],{"class":405},[36,75815,1171],{"class":42},[36,75817,75722],{"class":2443},[36,75819,345],{"class":42},[36,75821,75727],{"class":405},[36,75823,75730],{"class":42},[36,75825,75733],{"class":69},[36,75827,75828,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848,75850,75852,75854],{"class":38,"line":2159},[36,75829,74230],{"class":42},[36,75831,58724],{"class":2443},[36,75833,345],{"class":42},[36,75835,1197],{"class":405},[36,75837,1579],{"class":46},[36,75839,75715],{"class":48454},[36,75841,921],{"class":46},[36,75843,1197],{"class":405},[36,75845,1171],{"class":42},[36,75847,75722],{"class":2443},[36,75849,345],{"class":42},[36,75851,75756],{"class":405},[36,75853,75730],{"class":42},[36,75855,75856],{"class":69},"\u002F\u002Ffalse\n",[36,75858,75859],{"class":38,"line":2173},[36,75860,75861],{"class":69},"    \u002F\u002F 2.量词\n",[36,75863,75864],{"class":38,"line":2178},[36,75865,75866],{"class":69},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,75868,75869,75871,75873,75875,75877,75879,75881,75884,75886,75888,75890,75892,75894,75896],{"class":38,"line":2207},[36,75870,74230],{"class":42},[36,75872,58724],{"class":2443},[36,75874,345],{"class":42},[36,75876,1197],{"class":405},[36,75878,1579],{"class":46},[36,75880,75715],{"class":48454},[36,75882,75883],{"class":46},"*$",[36,75885,1197],{"class":405},[36,75887,1171],{"class":42},[36,75889,75722],{"class":2443},[36,75891,345],{"class":42},[36,75893,75756],{"class":405},[36,75895,75730],{"class":42},[36,75897,75733],{"class":69},[36,75899,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918,75920,75922,75925,75927],{"class":38,"line":2212},[36,75901,74230],{"class":42},[36,75903,58724],{"class":2443},[36,75905,345],{"class":42},[36,75907,1197],{"class":405},[36,75909,1579],{"class":46},[36,75911,75715],{"class":48454},[36,75913,75883],{"class":46},[36,75915,1197],{"class":405},[36,75917,1171],{"class":42},[36,75919,75722],{"class":2443},[36,75921,345],{"class":42},[36,75923,75924],{"class":405},"'二哈好傻'",[36,75926,75730],{"class":42},[36,75928,75929],{"class":69},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,75931,75932,75934,75936,75938,75940,75942,75944,75946,75948,75950,75952,75954,75957,75959],{"class":38,"line":2229},[36,75933,74230],{"class":42},[36,75935,58724],{"class":2443},[36,75937,345],{"class":42},[36,75939,1197],{"class":405},[36,75941,1579],{"class":46},[36,75943,75715],{"class":48454},[36,75945,75883],{"class":46},[36,75947,1197],{"class":405},[36,75949,1171],{"class":42},[36,75951,75722],{"class":2443},[36,75953,345],{"class":42},[36,75955,75956],{"class":405},"'哈好哈'",[36,75958,75786],{"class":42},[36,75960,75961],{"class":69},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,75963,75964],{"class":38,"line":2234},[36,75965,2880],{"emptyLinePlaceholder":553},[36,75967,75968],{"class":38,"line":2239},[36,75969,75970],{"class":69},"    \u002F\u002F +类似于>=1\n",[36,75972,75973,75975,75977,75979,75981,75983,75985,75988,75990,75992,75994,75996,75998,76000],{"class":38,"line":2244},[36,75974,74230],{"class":42},[36,75976,58724],{"class":2443},[36,75978,345],{"class":42},[36,75980,1197],{"class":405},[36,75982,1579],{"class":46},[36,75984,75715],{"class":48454},[36,75986,75987],{"class":46},"+$",[36,75989,1197],{"class":405},[36,75991,1171],{"class":42},[36,75993,75722],{"class":2443},[36,75995,345],{"class":42},[36,75997,75756],{"class":405},[36,75999,75730],{"class":42},[36,76001,75733],{"class":69},[36,76003,76004,76006,76008,76010,76012,76014,76016,76018,76020,76022,76024,76026,76028,76030],{"class":38,"line":2258},[36,76005,74230],{"class":42},[36,76007,58724],{"class":2443},[36,76009,345],{"class":42},[36,76011,1197],{"class":405},[36,76013,1579],{"class":46},[36,76015,75715],{"class":48454},[36,76017,75987],{"class":46},[36,76019,1197],{"class":405},[36,76021,1171],{"class":42},[36,76023,75722],{"class":2443},[36,76025,345],{"class":42},[36,76027,75924],{"class":405},[36,76029,75730],{"class":42},[36,76031,75929],{"class":69},[36,76033,76034,76036,76038,76040,76042,76044,76046,76048,76050,76052,76054,76056,76058,76060],{"class":38,"line":2263},[36,76035,74230],{"class":42},[36,76037,58724],{"class":2443},[36,76039,345],{"class":42},[36,76041,1197],{"class":405},[36,76043,1579],{"class":46},[36,76045,75715],{"class":48454},[36,76047,75987],{"class":46},[36,76049,1197],{"class":405},[36,76051,1171],{"class":42},[36,76053,75722],{"class":2443},[36,76055,345],{"class":42},[36,76057,75956],{"class":405},[36,76059,75786],{"class":42},[36,76061,75856],{"class":69},[36,76063,76064],{"class":38,"line":3057},[36,76065,2880],{"emptyLinePlaceholder":553},[36,76067,76068],{"class":38,"line":3071},[36,76069,76070],{"class":69},"    \u002F\u002F ?类似于0次或一次\n",[36,76072,76073,76075,76077,76079,76081,76083,76086,76088,76090,76092,76094,76096,76098,76100],{"class":38,"line":3079},[36,76074,74230],{"class":42},[36,76076,58724],{"class":2443},[36,76078,345],{"class":42},[36,76080,1197],{"class":405},[36,76082,1579],{"class":46},[36,76084,76085],{"class":48454},"哈？",[36,76087,921],{"class":46},[36,76089,1197],{"class":405},[36,76091,1171],{"class":42},[36,76093,75722],{"class":2443},[36,76095,345],{"class":42},[36,76097,74705],{"class":405},[36,76099,75786],{"class":42},[36,76101,75733],{"class":69},[36,76103,76104,76106,76108,76110,76112,76114,76116,76119,76121,76123,76125,76127,76129,76131],{"class":38,"line":3084},[36,76105,74230],{"class":42},[36,76107,58724],{"class":2443},[36,76109,345],{"class":42},[36,76111,1197],{"class":405},[36,76113,1579],{"class":46},[36,76115,75715],{"class":48454},[36,76117,76118],{"class":46},"?$",[36,76120,1197],{"class":405},[36,76122,1171],{"class":42},[36,76124,75722],{"class":2443},[36,76126,345],{"class":42},[36,76128,75756],{"class":405},[36,76130,75730],{"class":42},[36,76132,75856],{"class":69},[36,76134,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153,76155,76157,76159,76161],{"class":38,"line":3090},[36,76136,74230],{"class":42},[36,76138,58724],{"class":2443},[36,76140,345],{"class":42},[36,76142,1197],{"class":405},[36,76144,1579],{"class":46},[36,76146,75715],{"class":48454},[36,76148,76118],{"class":46},[36,76150,1197],{"class":405},[36,76152,1171],{"class":42},[36,76154,75722],{"class":2443},[36,76156,345],{"class":42},[36,76158,75924],{"class":405},[36,76160,75730],{"class":42},[36,76162,75929],{"class":69},[36,76164,76165,76167,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191],{"class":38,"line":3096},[36,76166,74230],{"class":42},[36,76168,58724],{"class":2443},[36,76170,345],{"class":42},[36,76172,1197],{"class":405},[36,76174,1579],{"class":46},[36,76176,75715],{"class":48454},[36,76178,76118],{"class":46},[36,76180,1197],{"class":405},[36,76182,1171],{"class":42},[36,76184,75722],{"class":2443},[36,76186,345],{"class":42},[36,76188,75956],{"class":405},[36,76190,75730],{"class":42},[36,76192,75856],{"class":69},[36,76194,76195],{"class":38,"line":3101},[36,76196,2880],{"emptyLinePlaceholder":553},[36,76198,76199],{"class":38,"line":8428},[36,76200,76201],{"class":69},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,76203,76204,76206,76208,76210,76212,76214,76216,76219,76221,76223,76225,76227,76230,76233],{"class":38,"line":8452},[36,76205,74230],{"class":42},[36,76207,58724],{"class":2443},[36,76209,345],{"class":42},[36,76211,1197],{"class":405},[36,76213,1579],{"class":46},[36,76215,75715],{"class":48454},[36,76217,76218],{"class":46},"{4}$",[36,76220,1197],{"class":405},[36,76222,1171],{"class":42},[36,76224,75722],{"class":2443},[36,76226,345],{"class":42},[36,76228,76229],{"class":405},"'哈哈哈哈'",[36,76231,76232],{"class":42},")) ",[36,76234,75733],{"class":69},[36,76236,76237],{"class":38,"line":8457},[36,76238,2880],{"emptyLinePlaceholder":553},[36,76240,76241],{"class":38,"line":8463},[36,76242,76243],{"class":69},"    \u002F\u002F {n,}大于等于n次\n",[36,76245,76246,76248,76250,76252,76254,76256,76258,76261,76263,76265,76267,76269,76271,76273],{"class":38,"line":8490},[36,76247,74230],{"class":42},[36,76249,58724],{"class":2443},[36,76251,345],{"class":42},[36,76253,1197],{"class":405},[36,76255,1579],{"class":46},[36,76257,75715],{"class":48454},[36,76259,76260],{"class":46},"{4,}$",[36,76262,1197],{"class":405},[36,76264,1171],{"class":42},[36,76266,75722],{"class":2443},[36,76268,345],{"class":42},[36,76270,76229],{"class":405},[36,76272,76232],{"class":42},[36,76274,75733],{"class":69},[36,76276,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299,76302,76304],{"class":38,"line":8495},[36,76278,74230],{"class":42},[36,76280,58724],{"class":2443},[36,76282,345],{"class":42},[36,76284,1197],{"class":405},[36,76286,1579],{"class":46},[36,76288,75715],{"class":48454},[36,76290,76260],{"class":46},[36,76292,1197],{"class":405},[36,76294,1171],{"class":42},[36,76296,75722],{"class":2443},[36,76298,345],{"class":42},[36,76300,76301],{"class":405},"'哈哈哈哈哈'",[36,76303,76232],{"class":42},[36,76305,75733],{"class":69},[36,76307,76308],{"class":38,"line":8501},[36,76309,2880],{"emptyLinePlaceholder":553},[36,76311,76312],{"class":38,"line":8513},[36,76313,76314],{"class":69},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,76316,76317,76319,76321,76323,76325,76327,76329,76332,76334,76336,76338,76340,76342,76344],{"class":38,"line":8525},[36,76318,74230],{"class":42},[36,76320,58724],{"class":2443},[36,76322,345],{"class":42},[36,76324,1197],{"class":405},[36,76326,1579],{"class":46},[36,76328,75715],{"class":48454},[36,76330,76331],{"class":46},"{4,6}$",[36,76333,1197],{"class":405},[36,76335,1171],{"class":42},[36,76337,75722],{"class":2443},[36,76339,345],{"class":42},[36,76341,76229],{"class":405},[36,76343,76232],{"class":42},[36,76345,75733],{"class":69},[36,76347,76348,76350,76352,76354,76356,76358,76360,76362,76364,76366,76368,76370,76372,76374],{"class":38,"line":8537},[36,76349,74230],{"class":42},[36,76351,58724],{"class":2443},[36,76353,345],{"class":42},[36,76355,1197],{"class":405},[36,76357,1579],{"class":46},[36,76359,75715],{"class":48454},[36,76361,76331],{"class":46},[36,76363,1197],{"class":405},[36,76365,1171],{"class":42},[36,76367,75722],{"class":2443},[36,76369,345],{"class":42},[36,76371,76301],{"class":405},[36,76373,76232],{"class":42},[36,76375,75733],{"class":69},[36,76377,76378,76380,76382,76384,76386,76388,76390,76392,76394,76396,76398,76400,76403,76405],{"class":38,"line":10196},[36,76379,74230],{"class":42},[36,76381,58724],{"class":2443},[36,76383,345],{"class":42},[36,76385,1197],{"class":405},[36,76387,1579],{"class":46},[36,76389,75715],{"class":48454},[36,76391,76331],{"class":46},[36,76393,1197],{"class":405},[36,76395,1171],{"class":42},[36,76397,75722],{"class":2443},[36,76399,345],{"class":42},[36,76401,76402],{"class":405},"'哈哈哈哈哈哈哈'",[36,76404,76232],{"class":42},[36,76406,75856],{"class":69},[36,76408,76409],{"class":38,"line":10221},[36,76410,2880],{"emptyLinePlaceholder":553},[36,76412,76413],{"class":38,"line":10244},[36,76414,76415],{"class":69},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,76417,76418,76420,76422,76424,76426,76428,76431,76433,76435,76437,76439,76441,76444,76446],{"class":38,"line":10268},[36,76419,74230],{"class":42},[36,76421,58724],{"class":2443},[36,76423,345],{"class":42},[36,76425,1197],{"class":405},[36,76427,1579],{"class":46},[36,76429,76430],{"class":53},"[abc]",[36,76432,921],{"class":46},[36,76434,1197],{"class":405},[36,76436,1171],{"class":42},[36,76438,75722],{"class":2443},[36,76440,345],{"class":42},[36,76442,76443],{"class":405},"'a'",[36,76445,75730],{"class":42},[36,76447,75733],{"class":69},[36,76449,76450,76452,76454,76456,76458,76460,76462,76464,76466,76468,76470,76472,76475,76477],{"class":38,"line":10273},[36,76451,74230],{"class":42},[36,76453,58724],{"class":2443},[36,76455,345],{"class":42},[36,76457,1197],{"class":405},[36,76459,1579],{"class":46},[36,76461,76430],{"class":53},[36,76463,921],{"class":46},[36,76465,1197],{"class":405},[36,76467,1171],{"class":42},[36,76469,75722],{"class":2443},[36,76471,345],{"class":42},[36,76473,76474],{"class":405},"'b'",[36,76476,75730],{"class":42},[36,76478,75733],{"class":69},[36,76480,76481,76483,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503,76506,76508],{"class":38,"line":10278},[36,76482,74230],{"class":42},[36,76484,58724],{"class":2443},[36,76486,345],{"class":42},[36,76488,1197],{"class":405},[36,76490,1579],{"class":46},[36,76492,76430],{"class":53},[36,76494,921],{"class":46},[36,76496,1197],{"class":405},[36,76498,1171],{"class":42},[36,76500,75722],{"class":2443},[36,76502,345],{"class":42},[36,76504,76505],{"class":405},"'c'",[36,76507,75730],{"class":42},[36,76509,75733],{"class":69},[36,76511,76512,76514,76516,76518,76520,76522,76524,76526,76528,76530,76533,76535],{"class":38,"line":10283},[36,76513,74230],{"class":42},[36,76515,58724],{"class":2443},[36,76517,345],{"class":42},[36,76519,1197],{"class":405},[36,76521,76430],{"class":53},[36,76523,1197],{"class":405},[36,76525,1171],{"class":42},[36,76527,75722],{"class":2443},[36,76529,345],{"class":42},[36,76531,76532],{"class":405},"'ab'",[36,76534,75730],{"class":42},[36,76536,75733],{"class":69},[36,76538,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76561,76563,76565],{"class":38,"line":10292},[36,76540,74230],{"class":42},[36,76542,58724],{"class":2443},[36,76544,345],{"class":42},[36,76546,1197],{"class":405},[36,76548,1579],{"class":46},[36,76550,76430],{"class":53},[36,76552,921],{"class":46},[36,76554,1197],{"class":405},[36,76556,1171],{"class":42},[36,76558,75722],{"class":2443},[36,76560,345],{"class":42},[36,76562,76532],{"class":405},[36,76564,75730],{"class":42},[36,76566,76567],{"class":69},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,76569,76570,76572,76574,76576,76578,76580,76582,76585,76587,76589,76591,76593,76595,76597],{"class":38,"line":10297},[36,76571,74230],{"class":42},[36,76573,58724],{"class":2443},[36,76575,345],{"class":42},[36,76577,1197],{"class":405},[36,76579,1579],{"class":46},[36,76581,76430],{"class":53},[36,76583,76584],{"class":46},"{2}$",[36,76586,1197],{"class":405},[36,76588,1171],{"class":42},[36,76590,75722],{"class":2443},[36,76592,345],{"class":42},[36,76594,76532],{"class":405},[36,76596,75730],{"class":42},[36,76598,76599],{"class":69},"\u002F\u002Ftrue   可以选两个\n",[36,76601,76602,76604,76606,76608,76610,76612,76615,76617,76619,76621,76623,76625,76628,76630],{"class":38,"line":10303},[36,76603,74230],{"class":42},[36,76605,58724],{"class":2443},[36,76607,345],{"class":42},[36,76609,1197],{"class":405},[36,76611,1579],{"class":46},[36,76613,76614],{"class":53},"[a-z]",[36,76616,921],{"class":46},[36,76618,1197],{"class":405},[36,76620,1171],{"class":42},[36,76622,75722],{"class":2443},[36,76624,345],{"class":42},[36,76626,76627],{"class":405},"'p'",[36,76629,75786],{"class":42},[36,76631,76632],{"class":69},"\u002F\u002Ftrue   依然只能选一个\n",[36,76634,76635,76637,76639,76641,76643,76645,76648,76650,76652,76654,76656,76658,76660,76662],{"class":38,"line":10324},[36,76636,74230],{"class":42},[36,76638,58724],{"class":2443},[36,76640,345],{"class":42},[36,76642,1197],{"class":405},[36,76644,1579],{"class":46},[36,76646,76647],{"class":53},"[A-Z]",[36,76649,921],{"class":46},[36,76651,1197],{"class":405},[36,76653,1171],{"class":42},[36,76655,75722],{"class":2443},[36,76657,345],{"class":42},[36,76659,76627],{"class":405},[36,76661,75786],{"class":42},[36,76663,75856],{"class":69},[36,76665,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684,76686,76688,76691,76693],{"class":38,"line":10330},[36,76667,74230],{"class":42},[36,76669,58724],{"class":2443},[36,76671,345],{"class":42},[36,76673,1197],{"class":405},[36,76675,1579],{"class":46},[36,76677,76647],{"class":53},[36,76679,921],{"class":46},[36,76681,1197],{"class":405},[36,76683,1171],{"class":42},[36,76685,75722],{"class":2443},[36,76687,345],{"class":42},[36,76689,76690],{"class":405},"'P'",[36,76692,75786],{"class":42},[36,76694,75733],{"class":69},[36,76696,76697,76699,76701,76703,76705,76707,76710,76712,76714,76716,76718,76720,76723,76725],{"class":38,"line":10344},[36,76698,74230],{"class":42},[36,76700,58724],{"class":2443},[36,76702,345],{"class":42},[36,76704,1197],{"class":405},[36,76706,1579],{"class":46},[36,76708,76709],{"class":53},"[0-9]",[36,76711,921],{"class":46},[36,76713,1197],{"class":405},[36,76715,1171],{"class":42},[36,76717,75722],{"class":2443},[36,76719,345],{"class":42},[36,76721,76722],{"class":405},"'0'",[36,76724,75786],{"class":42},[36,76726,75733],{"class":69},[36,76728,76729,76731,76733,76735,76737,76739,76742,76744,76746,76748,76750,76752,76754,76756],{"class":38,"line":10350},[36,76730,74230],{"class":42},[36,76732,58724],{"class":2443},[36,76734,345],{"class":42},[36,76736,1197],{"class":405},[36,76738,1579],{"class":46},[36,76740,76741],{"class":53},"[a-zA-Z0-9]",[36,76743,921],{"class":46},[36,76745,1197],{"class":405},[36,76747,1171],{"class":42},[36,76749,75722],{"class":2443},[36,76751,345],{"class":42},[36,76753,76627],{"class":405},[36,76755,75730],{"class":42},[36,76757,75733],{"class":69},[36,76759,76760,76762,76764],{"class":38,"line":10377},[36,76761,52894],{"class":42},[36,76763,52290],{"class":51777},[36,76765,51784],{"class":42},[36,76767,76768,76770,76772],{"class":38,"line":10386},[36,76769,52262],{"class":42},[36,76771,52277],{"class":51777},[36,76773,51784],{"class":42},[36,76775,76776],{"class":38,"line":10392},[36,76777,2880],{"emptyLinePlaceholder":553},[36,76779,76780,76782,76784],{"class":38,"line":10400},[36,76781,52262],{"class":42},[36,76783,51112],{"class":51777},[36,76785,51784],{"class":42},[22478,76787,76789],{"id":76788},"_3624-修饰符","3.6.2.4 修饰符",[19,76791,76792],{},[519,76793],{"alt":31,"src":76794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76796,76797],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76799,76800],{},[519,76801],{"alt":31,"src":76802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,76804,76806],{"className":51110,"code":76805,"language":51112,"meta":31,"style":31},"\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",[33,76807,76808,76818,76832,76840,76854,76874,76886,76894,76902,76910,76942,76973,76978,77010,77021,77054,77063,77071,77079],{"__ignoreMap":31},[36,76809,76810,76812,76814,76816],{"class":38,"line":39},[36,76811,51774],{"class":42},[36,76813,51778],{"class":51777},[36,76815,51781],{"class":2443},[36,76817,51784],{"class":42},[36,76819,76820,76822,76824,76826,76828,76830],{"class":38,"line":66},[36,76821,1523],{"class":42},[36,76823,51112],{"class":51777},[36,76825,51793],{"class":2443},[36,76827,47],{"class":42},[36,76829,51798],{"class":405},[36,76831,51784],{"class":42},[36,76833,76834,76836,76838],{"class":38,"line":73},[36,76835,1523],{"class":42},[36,76837,51811],{"class":51777},[36,76839,51784],{"class":42},[36,76841,76842,76844,76846,76848,76850,76852],{"class":38,"line":79},[36,76843,52621],{"class":42},[36,76845,51821],{"class":51777},[36,76847,51824],{"class":2443},[36,76849,47],{"class":42},[36,76851,51829],{"class":405},[36,76853,51784],{"class":42},[36,76855,76856,76858,76860,76862,76864,76866,76868,76870,76872],{"class":38,"line":85},[36,76857,52621],{"class":42},[36,76859,51821],{"class":51777},[36,76861,15400],{"class":2443},[36,76863,47],{"class":42},[36,76865,51868],{"class":405},[36,76867,51848],{"class":2443},[36,76869,47],{"class":42},[36,76871,51875],{"class":405},[36,76873,51784],{"class":42},[36,76875,76876,76878,76880,76882,76884],{"class":38,"line":419},[36,76877,52621],{"class":42},[36,76879,51884],{"class":51777},[36,76881,51887],{"class":42},[36,76883,51884],{"class":51777},[36,76885,51784],{"class":42},[36,76887,76888,76890,76892],{"class":38,"line":425},[36,76889,52262],{"class":42},[36,76891,51811],{"class":51777},[36,76893,51784],{"class":42},[36,76895,76896,76898,76900],{"class":38,"line":431},[36,76897,1523],{"class":42},[36,76899,52277],{"class":51777},[36,76901,51784],{"class":42},[36,76903,76904,76906,76908],{"class":38,"line":437},[36,76905,52621],{"class":42},[36,76907,52290],{"class":51777},[36,76909,51784],{"class":42},[36,76911,76912,76914,76916,76918,76920,76922,76925,76927,76929,76931,76933,76935,76938,76940],{"class":38,"line":443},[36,76913,74230],{"class":42},[36,76915,58724],{"class":2443},[36,76917,345],{"class":42},[36,76919,1197],{"class":405},[36,76921,1579],{"class":46},[36,76923,76924],{"class":48454},"java",[36,76926,921],{"class":46},[36,76928,1197],{"class":405},[36,76930,1171],{"class":42},[36,76932,75722],{"class":2443},[36,76934,345],{"class":42},[36,76936,76937],{"class":405},"'java'",[36,76939,76232],{"class":42},[36,76941,75733],{"class":69},[36,76943,76944,76946,76948,76950,76952,76954,76956,76958,76960,76962,76964,76966,76969,76971],{"class":38,"line":2092},[36,76945,74230],{"class":42},[36,76947,58724],{"class":2443},[36,76949,345],{"class":42},[36,76951,1197],{"class":405},[36,76953,1579],{"class":46},[36,76955,76924],{"class":48454},[36,76957,921],{"class":46},[36,76959,1197],{"class":405},[36,76961,1171],{"class":42},[36,76963,75722],{"class":2443},[36,76965,345],{"class":42},[36,76967,76968],{"class":405},"'Java'",[36,76970,76232],{"class":42},[36,76972,75856],{"class":69},[36,76974,76975],{"class":38,"line":2097},[36,76976,76977],{"class":69},"    \u002F\u002F 不区分大小写、\n",[36,76979,76980,76982,76984,76986,76988,76990,76992,76994,76996,76998,77000,77002,77004,77006,77008],{"class":38,"line":2103},[36,76981,74230],{"class":42},[36,76983,58724],{"class":2443},[36,76985,345],{"class":42},[36,76987,1197],{"class":405},[36,76989,1579],{"class":46},[36,76991,76924],{"class":48454},[36,76993,921],{"class":46},[36,76995,1197],{"class":405},[36,76997,1057],{"class":46},[36,76999,1171],{"class":42},[36,77001,75722],{"class":2443},[36,77003,345],{"class":42},[36,77005,76968],{"class":405},[36,77007,76232],{"class":42},[36,77009,75733],{"class":69},[36,77011,77012,77014,77016,77018],{"class":38,"line":2108},[36,77013,11701],{"class":46},[36,77015,74396],{"class":53},[36,77017,14044],{"class":46},[36,77019,77020],{"class":405}," 'java是一门编程语言，学完java工资很高'\n",[36,77022,77023,77025,77028,77030,77033,77036,77038,77040,77042,77044,77047,77049,77052],{"class":38,"line":2122},[36,77024,11701],{"class":46},[36,77026,77027],{"class":53}," result",[36,77029,14044],{"class":46},[36,77031,77032],{"class":42}," str.",[36,77034,77035],{"class":2443},"replace",[36,77037,345],{"class":42},[36,77039,1197],{"class":405},[36,77041,76924],{"class":48454},[36,77043,1197],{"class":405},[36,77045,77046],{"class":46},"ig",[36,77048,12915],{"class":42},[36,77050,77051],{"class":405},"'前端'",[36,77053,63],{"class":42},[36,77055,77056,77058,77060],{"class":38,"line":2127},[36,77057,74230],{"class":42},[36,77059,58724],{"class":2443},[36,77061,77062],{"class":42},"(result)\n",[36,77064,77065,77067,77069],{"class":38,"line":2133},[36,77066,52894],{"class":42},[36,77068,52290],{"class":51777},[36,77070,51784],{"class":42},[36,77072,77073,77075,77077],{"class":38,"line":2154},[36,77074,52262],{"class":42},[36,77076,52277],{"class":51777},[36,77078,51784],{"class":42},[36,77080,77081,77083,77085],{"class":38,"line":2159},[36,77082,52262],{"class":42},[36,77084,51112],{"class":51777},[36,77086,51784],{"class":42},[539,77088,77089],{},"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":31,"searchDepth":66,"depth":66,"links":77091},[77092,77102,77114,77131,77138,77146],{"id":53837,"depth":66,"text":53838,"children":77093},[77094,77095,77096,77097,77098,77099,77100,77101],{"id":53841,"depth":73,"text":53842},{"id":53874,"depth":73,"text":53875},{"id":53913,"depth":73,"text":53914},{"id":54071,"depth":73,"text":54072},{"id":54119,"depth":73,"text":54120},{"id":54256,"depth":73,"text":54257},{"id":54578,"depth":73,"text":54579},{"id":57566,"depth":73,"text":57567},{"id":57594,"depth":66,"text":57595,"children":77103},[77104,77105,77106,77107,77108,77109,77110,77111,77112,77113],{"id":57598,"depth":73,"text":57599},{"id":57621,"depth":73,"text":57622},{"id":58536,"depth":73,"text":58537},{"id":59226,"depth":73,"text":59227},{"id":59508,"depth":73,"text":59509},{"id":63669,"depth":73,"text":63670},{"id":63839,"depth":73,"text":63840},{"id":63967,"depth":73,"text":63968},{"id":63992,"depth":73,"text":63993},{"id":65381,"depth":73,"text":65382},{"id":66534,"depth":66,"text":66535,"children":77115},[77116,77117,77118,77119,77120,77121,77122,77123,77124,77125,77126,77127,77128,77129,77130],{"id":66538,"depth":73,"text":66539},{"id":67192,"depth":73,"text":67193},{"id":68887,"depth":73,"text":68888},{"id":68928,"depth":73,"text":68929},{"id":68970,"depth":73,"text":68971},{"id":68984,"depth":73,"text":68985},{"id":69033,"depth":73,"text":69034},{"id":69045,"depth":73,"text":69046},{"id":69060,"depth":73,"text":69061},{"id":69096,"depth":73,"text":69097},{"id":69177,"depth":73,"text":69178},{"id":69305,"depth":73,"text":69306},{"id":69317,"depth":73,"text":69318},{"id":69336,"depth":73,"text":69337},{"id":71447,"depth":73,"text":71448},{"id":71466,"depth":66,"text":71467,"children":77132},[77133,77134,77135,77136,77137],{"id":71487,"depth":73,"text":71488},{"id":71507,"depth":73,"text":71508},{"id":71556,"depth":73,"text":71557},{"id":71681,"depth":73,"text":71682},{"id":71862,"depth":73,"text":71863},{"id":71880,"depth":66,"text":71881,"children":77139},[77140,77141,77142,77143,77144,77145],{"id":71895,"depth":73,"text":71896},{"id":71954,"depth":73,"text":71955},{"id":71978,"depth":73,"text":71979},{"id":72298,"depth":73,"text":72299},{"id":72330,"depth":73,"text":72331},{"id":72353,"depth":73,"text":72354},{"id":75421,"depth":66,"text":75422,"children":77147},[77148,77149],{"id":75455,"depth":73,"text":75456},{"id":75494,"depth":73,"text":75495},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53809,"description":550},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77156,"title":77157,"body":77158,"description":550,"extension":551,"meta":93295,"navigation":553,"path":93296,"seo":93297,"stem":93298,"__hash__":93299},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77159,"toc":93231},[77160,77163,77166,77170,77174,77179,77184,77195,77199,77204,77207,77211,77214,77219,77223,77227,77230,77235,77238,77242,77245,77253,77256,77260,77265,77270,77273,77277,77282,77287,77290,77294,77299,77302,77307,77310,77315,77318,77323,77328,77331,77334,77338,77343,77348,77351,77355,77359,77362,77365,77368,77372,77376,77381,77386,77389,77393,77398,77403,77406,77409,77412,77415,77418,77421,77424,77427,77430,77435,77439,77444,77449,77452,77455,77458,77461,77464,77467,77470,77473,77477,77481,77484,77487,77490,77495,77497,77500,77503,77506,77509,77512,77515,77518,77521,77524,77527,77530,77533,77536,77541,77546,77551,77554,77558,77561,77566,77570,77572,77583,77588,77689,77692,77695,77698,77701,77704,77707,77710,77713,77715,77718,77721,77724,77727,77730,77732,77735,77738,77741,77744,77747,77750,77752,77755,77757,77759,77762,77766,77770,77773,77776,77779,77782,77785,77788,77791,77794,77797,77802,77922,77925,77928,77933,77936,77939,77942,77945,77950,77953,77956,77959,77962,77967,77970,78070,78135,78209,78213,78216,78219,78223,78226,78240,78269,78272,78275,78278,78281,78284,78287,78290,78292,78295,78298,78301,78304,78308,78313,78317,78322,78397,78400,78583,78586,78589,78592,78595,78598,78600,78603,78606,78609,78612,78615,78618,78620,78624,78627,78632,78635,78638,78641,78644,78646,78651,78654,78657,78660,78663,78665,78670,78673,78676,78678,78680,78683,78687,78690,78693,78698,78701,78704,78707,78757,78762,78766,78771,78774,78843,78846,78855,78859,78864,78867,78870,78878,78881,78898,80700,80704,80708,80713,80716,80720,80726,80732,80884,80889,80894,80897,80900,80903,80906,80909,80912,80915,80918,80921,80924,80927,80930,80935,80939,80942,80953,80957,80962,80965,80968,80971,80974,80977,80979,80982,80985,80988,80991,80993,81010,81013,81017,81020,81025,81030,81033,81036,81040,81043,81046,81055,81058,81062,81065,81070,81075,81142,81146,81149,81152,81157,81162,81248,81253,81257,81260,81263,81278,81281,81286,81290,81295,81404,81407,81418,81568,81572,81577,81686,81690,81695,81700,81705,81708,81715,81735,81771,81935,81940,81943,81948,81955,81958,81961,81964,82023,82079,82135,82139,82144,82459,82462,82466,82469,82474,82583,82588,82592,82597,82601,82672,82676,82678,82681,82684,82722,82998,83002,83019,83085,83119,83123,83126,83131,83160,83167,83176,83181,83196,83201,83210,83213,83350,83354,83416,83420,83425,83670,83674,83679,83682,83685,83688,83691,83695,83700,85281,85285,85289,85295,85298,85303,85307,85310,85315,85318,85329,85333,85338,85342,85347,85352,85355,85360,85364,85368,85371,85376,85381,85384,85387,85390,85512,85517,85619,85622,85625,85629,85634,85806,85811,85815,85818,85823,85889,85894,85897,86028,86031,86036,86039,86042,86133,86138,86141,86144,86147,86150,86155,86160,86163,86168,86173,86178,86182,86185,86188,86193,86198,86203,86208,86262,86265,86268,86273,86276,86279,86284,86289,86294,86298,86303,86317,86322,86325,86330,86334,86339,86344,86349,86354,86359,86364,86369,86374,86377,86381,86386,86389,86392,86395,86400,86405,86408,86411,86415,86418,86421,86426,86431,86436,86441,86444,86449,86454,86515,86520,86523,86528,87769,87774,87778,87782,87787,87790,87795,87800,87803,87808,87810,87815,87819,87822,87825,87836,87840,87845,87850,87905,87910,87915,87920,88131,88136,88140,88145,88148,88150,88153,88156,88603,88608,88615,88621,88624,88627,88891,88896,88900,89165,89170,89174,89179,89184,89189,89194,89525,89528,89533,89538,89541,89545,89549,89554,89559,89564,89569,89574,89579,89583,89586,89591,89596,89599,89673,89678,89683,89688,89690,89693,90063,90068,90073,90078,90081,90084,90186,90191,90196,90299,90303,90308,90312,90316,90321,90326,90329,90334,90337,90340,90733,90738,90741,90744,90747,90750,91270,91274,91279,91284,91289,91292,91297,91300,91303,91685,91690,91692,91694,91697,91700,92212,92216,92277,92280,92283,92286,92290,92293,92298,92303,93228],[10,77161,77157],{"id":77162},"_4js进阶",[19,77164,77165],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77167,77169],{"id":77168},"_41-作用域","4.1 作用域",[596,77171,77173],{"id":77172},"_411-局部作用域","4.1.1 局部作用域",[19,77175,77176],{},[519,77177],{"alt":31,"src":77178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77180,77181],{},[519,77182],{"alt":31,"src":77183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1620,77185,77186,77189,77192],{},[582,77187,77188],{},"函数作用域在函数内部",[582,77190,77191],{},"块级作用域在{}",[582,77193,77194],{},"对象的那个{}不是作用域，不是块作用域",[596,77196,77198],{"id":77197},"_412-全局作用域","4.1.2 全局作用域",[19,77200,77201],{},[519,77202],{"alt":31,"src":77203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77205,77206],{},"window.a=10不要这样写",[596,77208,77210],{"id":77209},"_413-作用域链","4.1.3 作用域链",[19,77212,77213],{},"变量查找机制",[19,77215,77216],{},[519,77217],{"alt":31,"src":77218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77220,77222],{"id":77221},"_42-垃圾回收机制","4.2 垃圾回收机制",[596,77224,77226],{"id":77225},"_421-大体介绍","4.2.1 大体介绍",[19,77228,77229],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77231,77232],{},[519,77233],{"alt":31,"src":77234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77236,77237],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[596,77239,77241],{"id":77240},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77243,77244],{},"堆栈空间分配区别：",[579,77246,77247,77250],{},[582,77248,77249],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[582,77251,77252],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77254,77255],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22478,77257,77259],{"id":77258},"_4221-引用计数","4.2.2.1 引用计数",[19,77261,77262],{},[519,77263],{"alt":31,"src":77264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77266,77267],{},[519,77268],{"alt":31,"src":77269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77271,77272],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22478,77274,77276],{"id":77275},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77278,77279],{},[519,77280],{"alt":31,"src":77281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77283,77284],{},[519,77285],{"alt":31,"src":77286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77288,77289],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77291,77293],{"id":77292},"_43-闭包","4.3 闭包",[19,77295,77296],{},[519,77297],{"alt":31,"src":77298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77300,77301],{},"闭包：内层函数+外层函数的变量",[19,77303,77304],{},[519,77305],{"alt":31,"src":77306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77308,77309],{},"closure就是闭包",[19,77311,77312],{},[519,77313],{"alt":31,"src":77314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77316,77317],{},"内层函数必须包含外层函数的变量才是闭包",[19,77319,77320],{},[519,77321],{"alt":31,"src":77322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77324,77325],{},[519,77326],{"alt":31,"src":77327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77329,77330],{},"闭包可能会引起内存泄漏",[19,77332,77333],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77335,77337],{"id":77336},"_44-变量提升","4.4 变量提升",[19,77339,77340],{},[519,77341],{"alt":31,"src":77342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77344,77345],{},[519,77346],{"alt":31,"src":77347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77349,77350],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77352,77354],{"id":77353},"_45-函数进阶","4.5 函数进阶",[596,77356,77358],{"id":77357},"_451-函数提升","4.5.1 函数提升",[19,77360,77361],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77363,77364],{},"只提升函数声明，不提升函数调用",[52290,77366,77367],{},"\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",[596,77369,77371],{"id":77370},"_452-函数参数","4.5.2 函数参数",[22478,77373,77375],{"id":77374},"_4521-动态参数","4.5.2.1 动态参数",[19,77377,77378],{},[519,77379],{"alt":31,"src":77380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77382,77383],{},[519,77384],{"alt":31,"src":77385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77387,77388],{},"箭头函数里边没有arguments",[22478,77390,77392],{"id":77391},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77394,77395],{},[519,77396],{"alt":31,"src":77397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77399,77400],{},[519,77401],{"alt":31,"src":77402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77404,77405],{},"剩余参数使用的时候不需要写...",[19,77407,77408],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77410,77411],{},"  function getSum(a,b,...arr) {",[19,77413,77414],{},"  console.log(11)",[19,77416,77417],{},"  }",[19,77419,77420],{},"  getSum(1,2,3,4)",[19,77422,77423],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77425,77426],{},"  getSum(1,2)",[19,77428,77429],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77431,77432],{},[519,77433],{"alt":31,"src":77434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22478,77436,77438],{"id":77437},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77440,77441],{},[519,77442],{"alt":31,"src":77443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77445,77446],{},[519,77447],{"alt":31,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77450,77451],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77453,77454],{},"展开运算符可以用于数组之间的合并：",[19,77456,77457],{},"const arr1 = [1, 2, 3]",[19,77459,77460],{},"const arr2 = [3, 4, 5]",[19,77462,77463],{},"const arr = [...arr1, ...arr2]",[19,77465,77466],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77468,77469],{},"剩余参数：函数参数使用，得到真数组",[19,77471,77472],{},"展开运算符：数组中使用，数组展开",[596,77474,77476],{"id":77475},"_453-箭头函数","4.5.3 箭头函数",[22478,77478,77480],{"id":77479},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77482,77483],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77485,77486],{},"它不是万能的！！！",[19,77488,77489],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77491,77492],{},[519,77493],{"alt":31,"src":77494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77496,656],{},[19,77498,77499],{},"① 只有一个形参的时候，可以省略小括号：",[19,77501,77502],{},"const fn=x=>{console.log(x)}",[19,77504,77505],{},"② 只有一行代码时可以省略大括号：",[19,77507,77508],{},"const fn=x=>console.log(11)",[19,77510,77511],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77513,77514],{},"const fn=x=>x+x",[19,77516,77517],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77519,77520],{},"⑤ 阻止表单默认提交：",[19,77522,77523],{},"const form = document.querySelector('form')",[19,77525,77526],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77528,77529],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77531,77532],{},"const fn=uname=>({uname:uname})",[19,77534,77535],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77537,77538],{},[519,77539],{"alt":31,"src":77540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77542,77543],{},[519,77544],{"alt":31,"src":77545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77547,77548],{},[519,77549],{"alt":31,"src":77550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77552,77553],{},"一定不要忘记用()，有()就理解为自带return",[22478,77555,77557],{"id":77556},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77559,77560],{},"箭头函数是没有动态参数的arguments",[19,77562,77563],{},[519,77564],{"alt":31,"src":77565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22478,77567,77569],{"id":77568},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77571,11812],{},[579,77573,77574,77577,77580],{},[582,77575,77576],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[582,77578,77579],{},"事件回调函数使用箭头函数时，this 为全局的 window",[582,77581,77582],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77584,77585],{},[519,77586],{"alt":31,"src":77587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,77589,77591],{"className":53544,"code":77590,"language":53546,"meta":31,"style":31},"  \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",[33,77592,77593,77601,77606,77611,77616,77621,77626,77630,77635,77639,77643,77648,77653,77658,77662,77666,77671,77676,77681],{"__ignoreMap":31},[36,77594,77595,77597,77599],{"class":38,"line":39},[36,77596,52621],{"class":42},[36,77598,52290],{"class":51777},[36,77600,51784],{"class":42},[36,77602,77603],{"class":38,"line":66},[36,77604,77605],{"class":42},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,77607,77608],{"class":38,"line":73},[36,77609,77610],{"class":42},"    console.log(this) \u002F\u002F指向window\n",[36,77612,77613],{"class":38,"line":79},[36,77614,77615],{"class":42},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,77617,77618],{"class":38,"line":85},[36,77619,77620],{"class":42},"    function fn() {\n",[36,77622,77623],{"class":38,"line":419},[36,77624,77625],{"class":42},"      console.log(this)  \u002F\u002F指向window\n",[36,77627,77628],{"class":38,"line":425},[36,77629,2667],{"class":42},[36,77631,77632],{"class":38,"line":431},[36,77633,77634],{"class":42},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,77636,77637],{"class":38,"line":437},[36,77638,2880],{"emptyLinePlaceholder":553},[36,77640,77641],{"class":38,"line":443},[36,77642,72000],{"class":42},[36,77644,77645],{"class":38,"line":2092},[36,77646,77647],{"class":42},"      name: 'andy',\n",[36,77649,77650],{"class":38,"line":2097},[36,77651,77652],{"class":42},"      sayHai: function () {\n",[36,77654,77655],{"class":38,"line":2103},[36,77656,77657],{"class":42},"        console.log(this)\n",[36,77659,77660],{"class":38,"line":2108},[36,77661,52875],{"class":42},[36,77663,77664],{"class":38,"line":2122},[36,77665,2667],{"class":42},[36,77667,77668],{"class":38,"line":2127},[36,77669,77670],{"class":42},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,77672,77673],{"class":38,"line":2133},[36,77674,77675],{"class":42},"    \u002F\u002F 2.箭头函数的this\n",[36,77677,77678],{"class":38,"line":2154},[36,77679,77680],{"class":42},"    const fn = () => console.log(this)\n",[36,77682,77683,77685,77687],{"class":38,"line":2159},[36,77684,52894],{"class":42},[36,77686,52290],{"class":51777},[36,77688,51784],{"class":42},[19,77690,77691],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77693,77694],{},"const fn = () => console.log(this)",[19,77696,77697],{},"fn() \u002F\u002F指向window",[19,77699,77700],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77702,77703],{},"①",[19,77705,77706],{},"const obj = {",[19,77708,77709],{},"uname: 'pink老师',",[19,77711,77712],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77714,1559],{},[19,77716,77717],{},"调用对象里边的函数",[19,77719,77720],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77722,77723],{},"obj.sayHai()",[19,77725,77726],{},"②",[19,77728,77729],{},"const obj1 = {",[19,77731,77709],{},[19,77733,77734],{},"sayHai: function () {",[19,77736,77737],{},"let i = 10",[19,77739,77740],{},"const count = () => {",[19,77742,77743],{},"console.log(this)",[19,77745,77746],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77748,77749],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77751,1559],{},[19,77753,77754],{},"count()",[19,77756,1559],{},[19,77758,1559],{},[19,77760,77761],{},"obj1.sayHai()",[14,77763,77765],{"id":77764},"_46-解构赋值","4.6 解构赋值",[596,77767,77769],{"id":77768},"_461-数组解构","4.6.1 数组解构",[19,77771,77772],{},"以前要是使用数组中的值的话：",[19,77774,77775],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77777,77778],{},"const arr=[100,60,80]",[19,77780,77781],{},"const max=arr[0]",[19,77783,77784],{},"const min=arr[1]",[19,77786,77787],{},"const avg=arr[2]",[19,77789,77790],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77792,77793],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77795,77796],{},"这个写法就类似于上边的那种用很多const的方法",[19,77798,77799],{},[519,77800],{"alt":31,"src":77801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,77803,77805],{"className":51110,"code":77804,"language":51112,"meta":31,"style":31},"①变量之间交换值:\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",[33,77806,77807,77812,77817,77822,77827,77832,77836,77840,77845,77849,77854,77859,77863,77868,77873,77884,77894,77899,77904,77909,77913,77917],{"__ignoreMap":31},[36,77808,77809],{"class":38,"line":39},[36,77810,77811],{"class":42},"①变量之间交换值:\n",[36,77813,77814],{"class":38,"line":66},[36,77815,77816],{"class":42},"let a=1\n",[36,77818,77819],{"class":38,"line":73},[36,77820,77821],{"class":42},"let b=2;\n",[36,77823,77824],{"class":38,"line":79},[36,77825,77826],{"class":42},"必须加这行代码，不然就会报错\n",[36,77828,77829],{"class":38,"line":85},[36,77830,77831],{"class":42},"[b,a]=[a,b]\n",[36,77833,77834],{"class":38,"line":419},[36,77835,2880],{"emptyLinePlaceholder":553},[36,77837,77838],{"class":38,"line":425},[36,77839,2880],{"emptyLinePlaceholder":553},[36,77841,77842],{"class":38,"line":431},[36,77843,77844],{"class":42},"可以写成下面的方式：\n",[36,77846,77847],{"class":38,"line":437},[36,77848,77816],{"class":42},[36,77850,77851],{"class":38,"line":443},[36,77852,77853],{"class":42},"let b=2\n",[36,77855,77856],{"class":38,"line":2092},[36,77857,77858],{"class":42},";[b,a]=[a,b]\n",[36,77860,77861],{"class":38,"line":2097},[36,77862,2880],{"emptyLinePlaceholder":553},[36,77864,77865],{"class":38,"line":2103},[36,77866,77867],{"class":42},"②排序\n",[36,77869,77870],{"class":38,"line":2108},[36,77871,77872],{"class":42},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,77874,77875,77878,77881],{"class":38,"line":2122},[36,77876,77877],{"class":42},"for (let i = 0; i ",[36,77879,1523],{"class":77880},"s7hpK",[36,77882,77883],{"class":42}," arr1.length; i++) {\n",[36,77885,77886,77889,77891],{"class":38,"line":2127},[36,77887,77888],{"class":42},"   for (let j = 0; j ",[36,77890,1523],{"class":77880},[36,77892,77893],{"class":42}," arr1.length - 1; j++) {\n",[36,77895,77896],{"class":38,"line":2133},[36,77897,77898],{"class":42},"      if (arr1[j] > arr1[j + 1]) {\n",[36,77900,77901],{"class":38,"line":2154},[36,77902,77903],{"class":42},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,77905,77906],{"class":38,"line":2159},[36,77907,77908],{"class":42},"       }\n",[36,77910,77911],{"class":38,"line":2173},[36,77912,4789],{"class":42},[36,77914,77915],{"class":38,"line":2178},[36,77916,2045],{"class":42},[36,77918,77919],{"class":38,"line":2207},[36,77920,77921],{"class":42},"console.log(arr1)\n",[19,77923,77924],{},"数组解构的细节：",[19,77926,77927],{},"①变量多，单元值少",[19,77929,77930],{},[519,77931],{"alt":31,"src":77932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77934,77935],{},"防止出现undefined的方法：",[19,77937,77938],{},"const [a=0,b=0] =[1]",[19,77940,77941],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77943,77944],{},"②变量少，单元值多",[19,77946,77947],{},[519,77948],{"alt":31,"src":77949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77951,77952],{},"此时可以使用剩余参数来接收多余的值",[19,77954,77955],{},"const [a,b,...c]=[1,2,3,4]",[19,77957,77958],{},"console.log(c) 输出[3,4]",[19,77960,77961],{},"③可以按需导入，忽略某些返回值",[19,77963,77964],{},[519,77965],{"alt":31,"src":77966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77968,77969],{},"④支持多维数组的结构",[26,77971,77975],{"className":77972,"code":77973,"language":77974,"meta":31,"style":31},"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",[33,77976,77977,78005,78021,78036,78051],{"__ignoreMap":31},[36,77978,77979,77981,77983,77985,77987,77989,77991,77993,77996,77998,78000,78002],{"class":38,"line":39},[36,77980,7272],{"class":46},[36,77982,52310],{"class":42},[36,77984,47],{"class":46},[36,77986,52703],{"class":42},[36,77988,54],{"class":53},[36,77990,12915],{"class":42},[36,77992,96],{"class":53},[36,77994,77995],{"class":42},", [",[36,77997,127],{"class":53},[36,77999,12915],{"class":42},[36,78001,912],{"class":53},[36,78003,78004],{"class":42},"]]\n",[36,78006,78007,78010,78012,78014,78016,78018],{"class":38,"line":66},[36,78008,78009],{"class":42},"console.",[36,78011,58724],{"class":2443},[36,78013,4331],{"class":42},[36,78015,812],{"class":53},[36,78017,4696],{"class":42},[36,78019,78020],{"class":69},"  \u002F\u002F1\n",[36,78022,78023,78025,78027,78029,78031,78033],{"class":38,"line":73},[36,78024,78009],{"class":42},[36,78026,58724],{"class":2443},[36,78028,4331],{"class":42},[36,78030,54],{"class":53},[36,78032,4696],{"class":42},[36,78034,78035],{"class":69},"  \u002F\u002F2\n",[36,78037,78038,78040,78042,78044,78046,78048],{"class":38,"line":79},[36,78039,78009],{"class":42},[36,78041,58724],{"class":2443},[36,78043,4331],{"class":42},[36,78045,96],{"class":53},[36,78047,4696],{"class":42},[36,78049,78050],{"class":69},"  \u002F\u002F[3,4]\n",[36,78052,78053,78055,78057,78059,78061,78063,78065,78067],{"class":38,"line":85},[36,78054,78009],{"class":42},[36,78056,58724],{"class":2443},[36,78058,4331],{"class":42},[36,78060,96],{"class":53},[36,78062,5381],{"class":42},[36,78064,812],{"class":53},[36,78066,4696],{"class":42},[36,78068,78069],{"class":69},"  \u002F\u002F3\n",[26,78071,78073],{"className":77972,"code":78072,"language":77974,"meta":31,"style":31},"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",[33,78074,78075,78102,78113,78124],{"__ignoreMap":31},[36,78076,78077,78079,78082,78084,78086,78088,78090,78092,78094,78096,78098,78100],{"class":38,"line":39},[36,78078,7272],{"class":46},[36,78080,78081],{"class":42}," [a, b, c] ",[36,78083,47],{"class":46},[36,78085,52703],{"class":42},[36,78087,54],{"class":53},[36,78089,12915],{"class":42},[36,78091,96],{"class":53},[36,78093,77995],{"class":42},[36,78095,127],{"class":53},[36,78097,12915],{"class":42},[36,78099,912],{"class":53},[36,78101,78004],{"class":42},[36,78103,78104,78106,78108,78111],{"class":38,"line":66},[36,78105,78009],{"class":42},[36,78107,58724],{"class":2443},[36,78109,78110],{"class":42},"(a)",[36,78112,78020],{"class":69},[36,78114,78115,78117,78119,78122],{"class":38,"line":73},[36,78116,78009],{"class":42},[36,78118,58724],{"class":2443},[36,78120,78121],{"class":42},"(b)",[36,78123,78035],{"class":69},[36,78125,78126,78128,78130,78133],{"class":38,"line":79},[36,78127,78009],{"class":42},[36,78129,58724],{"class":2443},[36,78131,78132],{"class":42},"(c)",[36,78134,78050],{"class":69},[26,78136,78138],{"className":77972,"code":78137,"language":77974,"meta":31,"style":31},"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",[33,78139,78140,78167,78177,78187,78197],{"__ignoreMap":31},[36,78141,78142,78144,78147,78149,78151,78153,78155,78157,78159,78161,78163,78165],{"class":38,"line":39},[36,78143,7272],{"class":46},[36,78145,78146],{"class":42}," [a, b, [c, d]] ",[36,78148,47],{"class":46},[36,78150,52703],{"class":42},[36,78152,54],{"class":53},[36,78154,12915],{"class":42},[36,78156,96],{"class":53},[36,78158,77995],{"class":42},[36,78160,127],{"class":53},[36,78162,12915],{"class":42},[36,78164,912],{"class":53},[36,78166,78004],{"class":42},[36,78168,78169,78171,78173,78175],{"class":38,"line":66},[36,78170,78009],{"class":42},[36,78172,58724],{"class":2443},[36,78174,78110],{"class":42},[36,78176,78020],{"class":69},[36,78178,78179,78181,78183,78185],{"class":38,"line":73},[36,78180,78009],{"class":42},[36,78182,58724],{"class":2443},[36,78184,78121],{"class":42},[36,78186,78035],{"class":69},[36,78188,78189,78191,78193,78195],{"class":38,"line":79},[36,78190,78009],{"class":42},[36,78192,58724],{"class":2443},[36,78194,78132],{"class":42},[36,78196,78069],{"class":69},[36,78198,78199,78201,78203,78206],{"class":38,"line":85},[36,78200,78009],{"class":42},[36,78202,58724],{"class":2443},[36,78204,78205],{"class":42},"(d)",[36,78207,78208],{"class":69},"  \u002F\u002F4\n",[596,78210,78212],{"id":78211},"_462-对象解构","4.6.2 对象解构",[19,78214,78215],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78217,78218],{},"用的非常非常多！！！！！！",[22478,78220,78222],{"id":78221},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78224,78225],{},"基本语法：",[579,78227,78228,78231,78234,78237],{},[582,78229,78230],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[582,78232,78233],{},"对象属性的值将被赋值给与属性名相同的变量",[582,78235,78236],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[582,78238,78239],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,78241,78243],{"className":51110,"code":78242,"language":51112,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,78244,78245,78250,78255,78260,78264],{"__ignoreMap":31},[36,78246,78247],{"class":38,"line":39},[36,78248,78249],{"class":42},"const obj = {\n",[36,78251,78252],{"class":38,"line":66},[36,78253,78254],{"class":42},"   uname: 'pink老师',\n",[36,78256,78257],{"class":38,"line":73},[36,78258,78259],{"class":42},"   age: 18,\n",[36,78261,78262],{"class":38,"line":79},[36,78263,2045],{"class":42},[36,78265,78266],{"class":38,"line":85},[36,78267,78268],{"class":42},"const { uname, age } = obj\n",[19,78270,78271],{},"上方代码这样写等价于：",[19,78273,78274],{},"const uname等价于obj.uname",[19,78276,78277],{},"变量名可以重新改名：",[19,78279,78280],{},"const uname='red老师'",[19,78282,78283],{},"const user={",[19,78285,78286],{},"  uname:'pink老师',",[19,78288,78289],{},"  age:18",[19,78291,1559],{},[19,78293,78294],{},"const {uname,age}=user",[19,78296,78297],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78299,78300],{},"const {旧变量名：新变量名}=对象",[19,78302,78303],{},"const {uname:username,age}=user",[22478,78305,78307],{"id":78306},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78309,78310],{},[519,78311],{"alt":31,"src":78312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22478,78314,78316],{"id":78315},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78318,78319],{},[519,78320],{"alt":31,"src":78321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,78323,78325],{"className":53544,"code":78324,"language":53546,"meta":31,"style":31},"  \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",[33,78326,78327,78335,78340,78345,78350,78355,78360,78365,78370,78375,78379,78384,78389],{"__ignoreMap":31},[36,78328,78329,78331,78333],{"class":38,"line":39},[36,78330,52621],{"class":42},[36,78332,52290],{"class":51777},[36,78334,51784],{"class":42},[36,78336,78337],{"class":38,"line":66},[36,78338,78339],{"class":42},"    const pig = {\n",[36,78341,78342],{"class":38,"line":73},[36,78343,78344],{"class":42},"      name: '佩奇',\n",[36,78346,78347],{"class":38,"line":79},[36,78348,78349],{"class":42},"      family: {\n",[36,78351,78352],{"class":38,"line":85},[36,78353,78354],{"class":42},"        mother: '猪妈妈',\n",[36,78356,78357],{"class":38,"line":419},[36,78358,78359],{"class":42},"        father: '猪爸爸',\n",[36,78361,78362],{"class":38,"line":425},[36,78363,78364],{"class":42},"        sister: '乔治'\n",[36,78366,78367],{"class":38,"line":431},[36,78368,78369],{"class":42},"      },\n",[36,78371,78372],{"class":38,"line":437},[36,78373,78374],{"class":42},"      age: 6\n",[36,78376,78377],{"class":38,"line":443},[36,78378,2667],{"class":42},[36,78380,78381],{"class":38,"line":2092},[36,78382,78383],{"class":42},"    \u002F\u002F 多级对象解构\n",[36,78385,78386],{"class":38,"line":2097},[36,78387,78388],{"class":42},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,78390,78391,78393,78395],{"class":38,"line":2103},[36,78392,52894],{"class":42},[36,78394,52290],{"class":51777},[36,78396,51784],{"class":42},[19,78398,78399],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,78401,78404],{"className":78402,"code":78403,"language":76924,"meta":31,"style":31},"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",[33,78405,78406,78411,78422,78434,78446,78455,78459,78470,78482,78492,78497,78501,78511,78522,78531,78535,78539,78550,78561,78570,78574,78579],{"__ignoreMap":31},[36,78407,78408],{"class":38,"line":39},[36,78409,78410],{"class":69},"    \u002F\u002F 这是后台传递过来的数据\n",[36,78412,78413,78415,78418,78420],{"class":38,"line":66},[36,78414,11701],{"class":46},[36,78416,78417],{"class":42}," msg ",[36,78419,47],{"class":46},[36,78421,16052],{"class":42},[36,78423,78424,78427,78429,78432],{"class":38,"line":73},[36,78425,78426],{"class":405},"      \"code\"",[36,78428,1472],{"class":46},[36,78430,78431],{"class":53}," 200",[36,78433,31944],{"class":42},[36,78435,78436,78439,78441,78444],{"class":38,"line":79},[36,78437,78438],{"class":405},"      \"msg\"",[36,78440,1472],{"class":46},[36,78442,78443],{"class":405}," \"获取新闻列表成功\"",[36,78445,31944],{"class":42},[36,78447,78448,78451,78453],{"class":38,"line":85},[36,78449,78450],{"class":405},"      \"data\"",[36,78452,1472],{"class":46},[36,78454,55924],{"class":42},[36,78456,78457],{"class":38,"line":419},[36,78458,2990],{"class":42},[36,78460,78461,78464,78466,78468],{"class":38,"line":425},[36,78462,78463],{"class":405},"          \"id\"",[36,78465,1472],{"class":46},[36,78467,25599],{"class":53},[36,78469,31944],{"class":42},[36,78471,78472,78475,78477,78480],{"class":38,"line":431},[36,78473,78474],{"class":405},"          \"title\"",[36,78476,1472],{"class":46},[36,78478,78479],{"class":405}," \"5G商用自己，三大运用商收入下降\"",[36,78481,31944],{"class":42},[36,78483,78484,78487,78489],{"class":38,"line":437},[36,78485,78486],{"class":405},"          \"count\"",[36,78488,1472],{"class":46},[36,78490,78491],{"class":53}," 58\n",[36,78493,78494],{"class":38,"line":443},[36,78495,78496],{"class":42},"        },\n",[36,78498,78499],{"class":38,"line":2092},[36,78500,2990],{"class":42},[36,78502,78503,78505,78507,78509],{"class":38,"line":2097},[36,78504,78463],{"class":405},[36,78506,1472],{"class":46},[36,78508,15235],{"class":53},[36,78510,31944],{"class":42},[36,78512,78513,78515,78517,78520],{"class":38,"line":2103},[36,78514,78474],{"class":405},[36,78516,1472],{"class":46},[36,78518,78519],{"class":405}," \"国际媒体头条速览\"",[36,78521,31944],{"class":42},[36,78523,78524,78526,78528],{"class":38,"line":2108},[36,78525,78486],{"class":405},[36,78527,1472],{"class":46},[36,78529,78530],{"class":53}," 56\n",[36,78532,78533],{"class":38,"line":2122},[36,78534,78496],{"class":42},[36,78536,78537],{"class":38,"line":2127},[36,78538,2990],{"class":42},[36,78540,78541,78543,78545,78548],{"class":38,"line":2133},[36,78542,78463],{"class":405},[36,78544,1472],{"class":46},[36,78546,78547],{"class":53}," 3",[36,78549,31944],{"class":42},[36,78551,78552,78554,78556,78559],{"class":38,"line":2154},[36,78553,78474],{"class":405},[36,78555,1472],{"class":46},[36,78557,78558],{"class":405}," \"乌克兰和俄罗斯持续冲突\"",[36,78560,31944],{"class":42},[36,78562,78563,78565,78567],{"class":38,"line":2159},[36,78564,78486],{"class":405},[36,78566,1472],{"class":46},[36,78568,78569],{"class":53}," 1669\n",[36,78571,78572],{"class":38,"line":2173},[36,78573,78496],{"class":42},[36,78575,78576],{"class":38,"line":2178},[36,78577,78578],{"class":42},"      ]\n",[36,78580,78581],{"class":38,"line":2207},[36,78582,2667],{"class":42},[19,78584,78585],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78587,78588],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78590,78591],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78593,78594],{},"function({data}) {",[19,78596,78597],{},"console.log(data)",[19,78599,1559],{},[19,78601,78602],{},"render(msg)",[19,78604,78605],{},"实参传递给形参的时候解构了",[19,78607,78608],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78610,78611],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78613,78614],{},"function render({data:mydata}) {",[19,78616,78617],{},"  console.log(data)",[19,78619,1559],{},[596,78621,78623],{"id":78622},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78625,78626],{},"有两种情况：一个是数组结构，一个是立即执行函数",[579,78628,78629],{},[582,78630,78631],{},"如果对一个数组进行遍历，有两种方式：",[19,78633,78634],{},"①法1",[19,78636,78637],{},"const arr=[1,2,3]",[19,78639,78640],{},"arr.map(function(item,index) {",[19,78642,78643],{},"  console.log(item)",[19,78645,52941],{},[19,78647,78648],{},[519,78649],{"alt":31,"src":78650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78652,78653],{},"②法2",[19,78655,78656],{},"const str='pink'",[19,78658,78659],{},"[1,2,3].map(function(item,index) {",[19,78661,78662],{},"console.log(item)",[19,78664,52941],{},[19,78666,78667],{},[519,78668],{"alt":31,"src":78669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78671,78672],{},"此时会报错",[19,78674,78675],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78677,78662],{},[19,78679,52941],{},[19,78681,78682],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78684,78686],{"id":78685},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78688,78689],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78691,78692],{},"可以理解为加强版的for循环",[19,78694,78695],{},[519,78696],{"alt":31,"src":78697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78699,78700],{},"里边不写return，不返回数组，只遍历不返回",[19,78702,78703],{},"map是返回数组",[19,78705,78706],{},"forEach主要用于遍历数组对象",[26,78708,78710],{"className":53544,"code":78709,"language":53546,"meta":31,"style":31},"  \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",[33,78711,78712,78720,78725,78730,78735,78740,78744,78749],{"__ignoreMap":31},[36,78713,78714,78716,78718],{"class":38,"line":39},[36,78715,52621],{"class":42},[36,78717,52290],{"class":51777},[36,78719,51784],{"class":42},[36,78721,78722],{"class":38,"line":66},[36,78723,78724],{"class":42},"    const arr = ['red', 'green', 'pink']\n",[36,78726,78727],{"class":38,"line":73},[36,78728,78729],{"class":42},"    const result = arr.forEach(function (item, index) {\n",[36,78731,78732],{"class":38,"line":79},[36,78733,78734],{"class":42},"      console.log(item)\n",[36,78736,78737],{"class":38,"line":85},[36,78738,78739],{"class":42},"      console.log(index)\n",[36,78741,78742],{"class":38,"line":419},[36,78743,33938],{"class":42},[36,78745,78746],{"class":38,"line":425},[36,78747,78748],{"class":42},"    console.log(result)\n",[36,78750,78751,78753,78755],{"class":38,"line":431},[36,78752,52894],{"class":42},[36,78754,52290],{"class":51777},[36,78756,51784],{"class":42},[19,78758,78759],{},[519,78760],{"alt":31,"src":78761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78763,78765],{"id":78764},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78767,78768],{},[519,78769],{"alt":31,"src":78770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78772,78773],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,78775,78777],{"className":53544,"code":78776,"language":53546,"meta":31,"style":31},"\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",[33,78778,78779,78787,78795,78800,78805,78809,78813,78818,78822,78827,78835],{"__ignoreMap":31},[36,78780,78781,78783,78785],{"class":38,"line":39},[36,78782,1523],{"class":42},[36,78784,52277],{"class":51777},[36,78786,51784],{"class":42},[36,78788,78789,78791,78793],{"class":38,"line":66},[36,78790,52621],{"class":42},[36,78792,52290],{"class":51777},[36,78794,51784],{"class":42},[36,78796,78797],{"class":38,"line":73},[36,78798,78799],{"class":42},"    const arr = [10, 20, 30]\n",[36,78801,78802],{"class":38,"line":79},[36,78803,78804],{"class":42},"    const newArr = arr.filter(function (item, index) {\n",[36,78806,78807],{"class":38,"line":85},[36,78808,78734],{"class":42},[36,78810,78811],{"class":38,"line":419},[36,78812,78739],{"class":42},[36,78814,78815],{"class":38,"line":425},[36,78816,78817],{"class":42},"      return item >= 20\n",[36,78819,78820],{"class":38,"line":431},[36,78821,33938],{"class":42},[36,78823,78824],{"class":38,"line":437},[36,78825,78826],{"class":42},"    console.log(newArr)\n",[36,78828,78829,78831,78833],{"class":38,"line":443},[36,78830,52894],{"class":42},[36,78832,52290],{"class":51777},[36,78834,51784],{"class":42},[36,78836,78837,78839,78841],{"class":38,"line":2092},[36,78838,52262],{"class":42},[36,78840,52277],{"class":51777},[36,78842,51784],{"class":42},[19,78844,78845],{},"这个也可以写成箭头函数：",[26,78847,78849],{"className":51110,"code":78848,"language":51112,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,78850,78851],{"__ignoreMap":31},[36,78852,78853],{"class":38,"line":39},[36,78854,78848],{"class":42},[14,78856,78858],{"id":78857},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78860,78861],{},[519,78862],{"alt":31,"src":78863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78865,78866],{},"步骤：",[19,78868,78869],{},"①：渲染页面模块",[1620,78871,78872,78875],{},[582,78873,78874],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[582,78876,78877],{},"用forEach+字符串的形式",[19,78879,78880],{},"②：点击不同需求，显示不同页面内容",[1620,78882,78883,78886,78889,78892,78895],{},[582,78884,78885],{},"点击采取事件委托方式 .filter",[582,78887,78888],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[582,78890,78891],{},"筛选条件是根据点击的 data-index 来判断",[582,78893,78894],{},"可以使用对象解构，把事件对象解构",[582,78896,78897],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,78899,78901],{"className":51110,"code":78900,"language":51112,"meta":31,"style":31},"\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",[33,78902,78903,78913,78927,78931,78939,78953,78973,78985,78993,78999,79009,79019,79029,79033,79037,79043,79056,79068,79078,79090,79094,79098,79105,79118,79130,79147,79165,79178,79182,79186,79198,79208,79212,79216,79223,79264,79291,79301,79305,79309,79317,79329,79333,79337,79345,79357,79369,79380,79384,79388,79397,79409,79420,79424,79428,79437,79449,79461,79465,79469,79476,79486,79498,79510,79525,79529,79533,79541,79557,79567,79577,79587,79599,79603,79607,79617,79628,79638,79642,79650,79658,79662,79670,79685,79711,79736,79761,79780,79788,79802,79807,79812,79817,79822,79827,79835,79843,79848,79859,79864,79874,79884,79894,79904,79908,79912,79921,79930,79939,79948,79952,79956,79965,79974,79983,79992,79996,80000,80009,80018,80027,80036,80040,80044,80053,80062,80071,80080,80084,80088,80097,80106,80115,80124,80128,80132,80141,80150,80159,80168,80172,80176,80185,80194,80202,80211,80215,80219,80223,80228,80240,80245,80257,80261,80278,80306,80315,80320,80330,80340,80349,80354,80359,80363,80368,80385,80389,80394,80402,80407,80434,80439,80459,80464,80476,80481,80486,80491,80502,80516,80553,80571,80604,80621,80645,80649,80654,80660,80664,80668,80672,80680,80688,80692],{"__ignoreMap":31},[36,78904,78905,78907,78909,78911],{"class":38,"line":39},[36,78906,51774],{"class":42},[36,78908,51778],{"class":51777},[36,78910,51781],{"class":2443},[36,78912,51784],{"class":42},[36,78914,78915,78917,78919,78921,78923,78925],{"class":38,"line":66},[36,78916,1523],{"class":42},[36,78918,51112],{"class":51777},[36,78920,51793],{"class":2443},[36,78922,47],{"class":42},[36,78924,51798],{"class":405},[36,78926,51784],{"class":42},[36,78928,78929],{"class":38,"line":73},[36,78930,2880],{"emptyLinePlaceholder":553},[36,78932,78933,78935,78937],{"class":38,"line":79},[36,78934,1523],{"class":42},[36,78936,51811],{"class":51777},[36,78938,51784],{"class":42},[36,78940,78941,78943,78945,78947,78949,78951],{"class":38,"line":85},[36,78942,52621],{"class":42},[36,78944,51821],{"class":51777},[36,78946,51824],{"class":2443},[36,78948,47],{"class":42},[36,78950,51829],{"class":405},[36,78952,51784],{"class":42},[36,78954,78955,78957,78959,78961,78963,78965,78967,78969,78971],{"class":38,"line":419},[36,78956,52621],{"class":42},[36,78958,51821],{"class":51777},[36,78960,15400],{"class":2443},[36,78962,47],{"class":42},[36,78964,51868],{"class":405},[36,78966,51848],{"class":2443},[36,78968,47],{"class":42},[36,78970,51875],{"class":405},[36,78972,51784],{"class":42},[36,78974,78975,78977,78979,78981,78983],{"class":38,"line":425},[36,78976,52621],{"class":42},[36,78978,51884],{"class":51777},[36,78980,51887],{"class":42},[36,78982,51884],{"class":51777},[36,78984,51784],{"class":42},[36,78986,78987,78989,78991],{"class":38,"line":431},[36,78988,52621],{"class":42},[36,78990,539],{"class":51777},[36,78992,51784],{"class":42},[36,78994,78995,78997],{"class":38,"line":437},[36,78996,6883],{"class":51777},[36,78998,16052],{"class":42},[36,79000,79001,79003,79005,79007],{"class":38,"line":443},[36,79002,55172],{"class":53},[36,79004,51914],{"class":42},[36,79006,812],{"class":53},[36,79008,1774],{"class":42},[36,79010,79011,79013,79015,79017],{"class":38,"line":2092},[36,79012,55183],{"class":53},[36,79014,51914],{"class":42},[36,79016,812],{"class":53},[36,79018,1774],{"class":42},[36,79020,79021,79023,79025,79027],{"class":38,"line":2097},[36,79022,73073],{"class":53},[36,79024,51914],{"class":42},[36,79026,60982],{"class":53},[36,79028,1774],{"class":42},[36,79030,79031],{"class":38,"line":2103},[36,79032,2667],{"class":42},[36,79034,79035],{"class":38,"line":2108},[36,79036,2880],{"emptyLinePlaceholder":553},[36,79038,79039,79041],{"class":38,"line":2122},[36,79040,62600],{"class":2443},[36,79042,16052],{"class":42},[36,79044,79045,79047,79049,79052,79054],{"class":38,"line":2127},[36,79046,55248],{"class":53},[36,79048,51914],{"class":42},[36,79050,79051],{"class":53},"990",[36,79053,51969],{"class":46},[36,79055,1774],{"class":42},[36,79057,79058,79060,79062,79064,79066],{"class":38,"line":2133},[36,79059,55183],{"class":53},[36,79061,51914],{"class":42},[36,79063,812],{"class":53},[36,79065,52033],{"class":53},[36,79067,1774],{"class":42},[36,79069,79070,79072,79074,79076],{"class":38,"line":2154},[36,79071,55486],{"class":53},[36,79073,51914],{"class":42},[36,79075,51954],{"class":53},[36,79077,1774],{"class":42},[36,79079,79080,79083,79085,79088],{"class":38,"line":2159},[36,79081,79082],{"class":53},"      flex-wrap",[36,79084,51914],{"class":42},[36,79086,79087],{"class":53},"wrap",[36,79089,1774],{"class":42},[36,79091,79092],{"class":38,"line":2173},[36,79093,2667],{"class":42},[36,79095,79096],{"class":38,"line":2178},[36,79097,2880],{"emptyLinePlaceholder":553},[36,79099,79100,79103],{"class":38,"line":2207},[36,79101,79102],{"class":2443},"    .item",[36,79104,16052],{"class":42},[36,79106,79107,79109,79111,79114,79116],{"class":38,"line":2212},[36,79108,55248],{"class":53},[36,79110,51914],{"class":42},[36,79112,79113],{"class":53},"240",[36,79115,51969],{"class":46},[36,79117,1774],{"class":42},[36,79119,79120,79122,79124,79126,79128],{"class":38,"line":2229},[36,79121,62477],{"class":53},[36,79123,51914],{"class":42},[36,79125,1062],{"class":53},[36,79127,51969],{"class":46},[36,79129,1774],{"class":42},[36,79131,79132,79134,79136,79138,79140,79143,79145],{"class":38,"line":2234},[36,79133,55172],{"class":53},[36,79135,51914],{"class":42},[36,79137,1313],{"class":53},[36,79139,51969],{"class":46},[36,79141,79142],{"class":53}," 30",[36,79144,51969],{"class":46},[36,79146,1774],{"class":42},[36,79148,79149,79151,79153,79155,79158,79161,79163],{"class":38,"line":2239},[36,79150,62337],{"class":53},[36,79152,51914],{"class":42},[36,79154,28602],{"class":53},[36,79156,79157],{"class":53}," ease",[36,79159,79160],{"class":53}," .5",[36,79162,1308],{"class":46},[36,79164,1774],{"class":42},[36,79166,79167,79170,79172,79174,79176],{"class":38,"line":2244},[36,79168,79169],{"class":53},"      margin-bottom",[36,79171,51914],{"class":42},[36,79173,1313],{"class":53},[36,79175,51969],{"class":46},[36,79177,1774],{"class":42},[36,79179,79180],{"class":38,"line":2258},[36,79181,2667],{"class":42},[36,79183,79184],{"class":38,"line":2263},[36,79185,2880],{"emptyLinePlaceholder":553},[36,79187,79188,79191,79193,79196],{"class":38,"line":3057},[36,79189,79190],{"class":2443},"    .item:nth-child",[36,79192,345],{"class":42},[36,79194,79195],{"class":53},"4n",[36,79197,12922],{"class":42},[36,79199,79200,79202,79204,79206],{"class":38,"line":3071},[36,79201,62477],{"class":53},[36,79203,51914],{"class":42},[36,79205,812],{"class":53},[36,79207,1774],{"class":42},[36,79209,79210],{"class":38,"line":3079},[36,79211,2667],{"class":42},[36,79213,79214],{"class":38,"line":3084},[36,79215,2880],{"emptyLinePlaceholder":553},[36,79217,79218,79221],{"class":38,"line":3090},[36,79219,79220],{"class":2443},"    .item:hover",[36,79222,16052],{"class":42},[36,79224,79225,79228,79230,79232,79234,79236,79238,79240,79242,79245,79247,79249,79251,79253,79255,79257,79259,79262],{"class":38,"line":3096},[36,79226,79227],{"class":53},"      box-shadow",[36,79229,51914],{"class":42},[36,79231,812],{"class":53},[36,79233,51969],{"class":46},[36,79235,4573],{"class":53},[36,79237,51969],{"class":46},[36,79239,2628],{"class":53},[36,79241,51969],{"class":46},[36,79243,79244],{"class":53}," rgba",[36,79246,345],{"class":42},[36,79248,812],{"class":53},[36,79250,12915],{"class":42},[36,79252,812],{"class":53},[36,79254,12915],{"class":42},[36,79256,812],{"class":53},[36,79258,12915],{"class":42},[36,79260,79261],{"class":53},".2",[36,79263,3199],{"class":42},[36,79265,79266,79269,79271,79274,79276,79278,79280,79283,79285,79287,79289],{"class":38,"line":3101},[36,79267,79268],{"class":53},"      transform",[36,79270,51914],{"class":42},[36,79272,79273],{"class":53},"translate3d",[36,79275,345],{"class":42},[36,79277,812],{"class":53},[36,79279,12915],{"class":42},[36,79281,79282],{"class":53},"-4",[36,79284,51969],{"class":46},[36,79286,12915],{"class":42},[36,79288,812],{"class":53},[36,79290,3199],{"class":42},[36,79292,79293,79295,79297,79299],{"class":38,"line":8428},[36,79294,62502],{"class":53},[36,79296,51914],{"class":42},[36,79298,62507],{"class":53},[36,79300,1774],{"class":42},[36,79302,79303],{"class":38,"line":8452},[36,79304,2667],{"class":42},[36,79306,79307],{"class":38,"line":8457},[36,79308,2880],{"emptyLinePlaceholder":553},[36,79310,79311,79313,79315],{"class":38,"line":8463},[36,79312,79102],{"class":2443},[36,79314,56092],{"class":51777},[36,79316,16052],{"class":42},[36,79318,79319,79321,79323,79325,79327],{"class":38,"line":8490},[36,79320,55248],{"class":53},[36,79322,51914],{"class":42},[36,79324,930],{"class":53},[36,79326,947],{"class":46},[36,79328,1774],{"class":42},[36,79330,79331],{"class":38,"line":8495},[36,79332,2667],{"class":42},[36,79334,79335],{"class":38,"line":8501},[36,79336,2880],{"emptyLinePlaceholder":553},[36,79338,79339,79341,79343],{"class":38,"line":8513},[36,79340,79102],{"class":2443},[36,79342,62781],{"class":2443},[36,79344,16052],{"class":42},[36,79346,79347,79349,79351,79353,79355],{"class":38,"line":8525},[36,79348,55399],{"class":53},[36,79350,51914],{"class":42},[36,79352,1263],{"class":53},[36,79354,51969],{"class":46},[36,79356,1774],{"class":42},[36,79358,79359,79361,79363,79365,79367],{"class":38,"line":8537},[36,79360,79169],{"class":53},[36,79362,51914],{"class":42},[36,79364,1062],{"class":53},[36,79366,51969],{"class":46},[36,79368,1774],{"class":42},[36,79370,79371,79373,79375,79378],{"class":38,"line":10196},[36,79372,57893],{"class":53},[36,79374,51914],{"class":42},[36,79376,79377],{"class":53},"#666",[36,79379,1774],{"class":42},[36,79381,79382],{"class":38,"line":10221},[36,79383,2667],{"class":42},[36,79385,79386],{"class":38,"line":10244},[36,79387,2880],{"emptyLinePlaceholder":553},[36,79389,79390,79392,79395],{"class":38,"line":10268},[36,79391,79102],{"class":2443},[36,79393,79394],{"class":2443}," .price",[36,79396,16052],{"class":42},[36,79398,79399,79401,79403,79405,79407],{"class":38,"line":10273},[36,79400,55399],{"class":53},[36,79402,51914],{"class":42},[36,79404,1363],{"class":53},[36,79406,51969],{"class":46},[36,79408,1774],{"class":42},[36,79410,79411,79413,79415,79418],{"class":38,"line":10278},[36,79412,57893],{"class":53},[36,79414,51914],{"class":42},[36,79416,79417],{"class":53},"firebrick",[36,79419,1774],{"class":42},[36,79421,79422],{"class":38,"line":10283},[36,79423,2667],{"class":42},[36,79425,79426],{"class":38,"line":10292},[36,79427,2880],{"emptyLinePlaceholder":553},[36,79429,79430,79432,79435],{"class":38,"line":10297},[36,79431,79102],{"class":2443},[36,79433,79434],{"class":2443}," .price::before",[36,79436,16052],{"class":42},[36,79438,79439,79442,79444,79447],{"class":38,"line":10303},[36,79440,79441],{"class":53},"      content",[36,79443,51914],{"class":42},[36,79445,79446],{"class":405},"'￥'",[36,79448,1774],{"class":42},[36,79450,79451,79453,79455,79457,79459],{"class":38,"line":10324},[36,79452,55399],{"class":53},[36,79454,51914],{"class":42},[36,79456,1162],{"class":53},[36,79458,51969],{"class":46},[36,79460,1774],{"class":42},[36,79462,79463],{"class":38,"line":10330},[36,79464,2667],{"class":42},[36,79466,79467],{"class":38,"line":10344},[36,79468,2880],{"emptyLinePlaceholder":553},[36,79470,79471,79474],{"class":38,"line":10350},[36,79472,79473],{"class":2443},"    .filter",[36,79475,16052],{"class":42},[36,79477,79478,79480,79482,79484],{"class":38,"line":10377},[36,79479,55486],{"class":53},[36,79481,51914],{"class":42},[36,79483,51954],{"class":53},[36,79485,1774],{"class":42},[36,79487,79488,79490,79492,79494,79496],{"class":38,"line":10386},[36,79489,55248],{"class":53},[36,79491,51914],{"class":42},[36,79493,79051],{"class":53},[36,79495,51969],{"class":46},[36,79497,1774],{"class":42},[36,79499,79500,79502,79504,79506,79508],{"class":38,"line":10392},[36,79501,55183],{"class":53},[36,79503,51914],{"class":42},[36,79505,812],{"class":53},[36,79507,52033],{"class":53},[36,79509,1774],{"class":42},[36,79511,79512,79514,79516,79518,79520,79522],{"class":38,"line":10400},[36,79513,55172],{"class":53},[36,79515,51914],{"class":42},[36,79517,1269],{"class":53},[36,79519,51969],{"class":46},[36,79521,79142],{"class":53},[36,79523,79524],{"class":46},"px\n",[36,79526,79527],{"class":38,"line":10405},[36,79528,2667],{"class":42},[36,79530,79531],{"class":38,"line":17084},[36,79532,2880],{"emptyLinePlaceholder":553},[36,79534,79535,79537,79539],{"class":38,"line":17090},[36,79536,79473],{"class":2443},[36,79538,1879],{"class":51777},[36,79540,16052],{"class":42},[36,79542,79543,79545,79547,79549,79551,79553,79555],{"class":38,"line":17113},[36,79544,55172],{"class":53},[36,79546,51914],{"class":42},[36,79548,1062],{"class":53},[36,79550,51969],{"class":46},[36,79552,9430],{"class":53},[36,79554,51969],{"class":46},[36,79556,1774],{"class":42},[36,79558,79559,79561,79563,79565],{"class":38,"line":17119},[36,79560,62198],{"class":53},[36,79562,51914],{"class":42},[36,79564,62295],{"class":53},[36,79566,1774],{"class":42},[36,79568,79569,79571,79573,79575],{"class":38,"line":17142},[36,79570,57893],{"class":53},[36,79572,51914],{"class":42},[36,79574,79377],{"class":53},[36,79576,1774],{"class":42},[36,79578,79579,79581,79583,79585],{"class":38,"line":17156},[36,79580,64447],{"class":53},[36,79582,51914],{"class":42},[36,79584,55214],{"class":53},[36,79586,1774],{"class":42},[36,79588,79589,79591,79593,79595,79597],{"class":38,"line":17176},[36,79590,62227],{"class":53},[36,79592,51914],{"class":42},[36,79594,1313],{"class":53},[36,79596,51969],{"class":46},[36,79598,1774],{"class":42},[36,79600,79601],{"class":38,"line":17182},[36,79602,2667],{"class":42},[36,79604,79605],{"class":38,"line":17193},[36,79606,2880],{"emptyLinePlaceholder":553},[36,79608,79609,79611,79613,79615],{"class":38,"line":17216},[36,79610,79473],{"class":2443},[36,79612,1879],{"class":51777},[36,79614,62377],{"class":2443},[36,79616,16052],{"class":42},[36,79618,79619,79621,79623,79626],{"class":38,"line":17238},[36,79620,55361],{"class":53},[36,79622,51914],{"class":42},[36,79624,79625],{"class":53},"#05943c",[36,79627,1774],{"class":42},[36,79629,79630,79632,79634,79636],{"class":38,"line":17243},[36,79631,57893],{"class":53},[36,79633,51914],{"class":42},[36,79635,61319],{"class":53},[36,79637,1774],{"class":42},[36,79639,79640],{"class":38,"line":17249},[36,79641,2667],{"class":42},[36,79643,79644,79646,79648],{"class":38,"line":17263},[36,79645,52894],{"class":42},[36,79647,539],{"class":51777},[36,79649,51784],{"class":42},[36,79651,79652,79654,79656],{"class":38,"line":17276},[36,79653,52262],{"class":42},[36,79655,51811],{"class":51777},[36,79657,51784],{"class":42},[36,79659,79660],{"class":38,"line":17281},[36,79661,2880],{"emptyLinePlaceholder":553},[36,79663,79664,79666,79668],{"class":38,"line":17295},[36,79665,1523],{"class":42},[36,79667,52277],{"class":51777},[36,79669,51784],{"class":42},[36,79671,79672,79674,79676,79678,79680,79683],{"class":38,"line":17300},[36,79673,52621],{"class":42},[36,79675,52088],{"class":51777},[36,79677,53963],{"class":2443},[36,79679,47],{"class":42},[36,79681,79682],{"class":405},"\"filter\"",[36,79684,51784],{"class":42},[36,79686,79687,79689,79691,79693,79695,79697,79700,79702,79704,79707,79709],{"class":38,"line":17306},[36,79688,51818],{"class":42},[36,79690,43],{"class":51777},[36,79692,61534],{"class":2443},[36,79694,47],{"class":42},[36,79696,61539],{"class":405},[36,79698,79699],{"class":2443}," data-index",[36,79701,47],{"class":42},[36,79703,4158],{"class":405},[36,79705,79706],{"class":42},">0-100元\u003C\u002F",[36,79708,43],{"class":51777},[36,79710,51784],{"class":42},[36,79712,79713,79715,79717,79719,79721,79723,79725,79727,79729,79732,79734],{"class":38,"line":17311},[36,79714,51818],{"class":42},[36,79716,43],{"class":51777},[36,79718,61534],{"class":2443},[36,79720,47],{"class":42},[36,79722,61539],{"class":405},[36,79724,79699],{"class":2443},[36,79726,47],{"class":42},[36,79728,4181],{"class":405},[36,79730,79731],{"class":42},">100-300元\u003C\u002F",[36,79733,43],{"class":51777},[36,79735,51784],{"class":42},[36,79737,79738,79740,79742,79744,79746,79748,79750,79752,79754,79757,79759],{"class":38,"line":17325},[36,79739,51818],{"class":42},[36,79741,43],{"class":51777},[36,79743,61534],{"class":2443},[36,79745,47],{"class":42},[36,79747,61539],{"class":405},[36,79749,79699],{"class":2443},[36,79751,47],{"class":42},[36,79753,4194],{"class":405},[36,79755,79756],{"class":42},">300元以上\u003C\u002F",[36,79758,43],{"class":51777},[36,79760,51784],{"class":42},[36,79762,79763,79765,79767,79769,79771,79773,79776,79778],{"class":38,"line":17330},[36,79764,51818],{"class":42},[36,79766,43],{"class":51777},[36,79768,61534],{"class":2443},[36,79770,47],{"class":42},[36,79772,61539],{"class":405},[36,79774,79775],{"class":42},">全部区间\u003C\u002F",[36,79777,43],{"class":51777},[36,79779,51784],{"class":42},[36,79781,79782,79784,79786],{"class":38,"line":17335},[36,79783,52894],{"class":42},[36,79785,52088],{"class":51777},[36,79787,51784],{"class":42},[36,79789,79790,79792,79794,79796,79798,79800],{"class":38,"line":17349},[36,79791,52621],{"class":42},[36,79793,52088],{"class":51777},[36,79795,53963],{"class":2443},[36,79797,47],{"class":42},[36,79799,63085],{"class":405},[36,79801,51784],{"class":42},[36,79803,79804],{"class":38,"line":17361},[36,79805,79806],{"class":69},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,79808,79809],{"class":38,"line":17366},[36,79810,79811],{"class":69},"      \u003Cimg src=\"\" alt=\"\">\n",[36,79813,79814],{"class":38,"line":17379},[36,79815,79816],{"class":69},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,79818,79819],{"class":38,"line":17384},[36,79820,79821],{"class":69},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,79823,79824],{"class":38,"line":17389},[36,79825,79826],{"class":69},"    \u003C\u002Fdiv> -->\n",[36,79828,79829,79831,79833],{"class":38,"line":17394},[36,79830,52894],{"class":42},[36,79832,52088],{"class":51777},[36,79834,51784],{"class":42},[36,79836,79837,79839,79841],{"class":38,"line":17407},[36,79838,52621],{"class":42},[36,79840,52290],{"class":51777},[36,79842,51784],{"class":42},[36,79844,79845],{"class":38,"line":17412},[36,79846,79847],{"class":69},"    \u002F\u002F 2. 初始化数据\n",[36,79849,79850,79852,79855,79857],{"class":38,"line":33110},[36,79851,11701],{"class":46},[36,79853,79854],{"class":53}," goodsList",[36,79856,14044],{"class":46},[36,79858,55924],{"class":42},[36,79860,79861],{"class":38,"line":33116},[36,79862,79863],{"class":42},"      {\n",[36,79865,79866,79869,79872],{"class":38,"line":33122},[36,79867,79868],{"class":42},"        id: ",[36,79870,79871],{"class":405},"'4001172'",[36,79873,31944],{"class":42},[36,79875,79876,79879,79882],{"class":38,"line":33128},[36,79877,79878],{"class":42},"        name: ",[36,79880,79881],{"class":405},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,79883,31944],{"class":42},[36,79885,79886,79889,79892],{"class":38,"line":33134},[36,79887,79888],{"class":42},"        price: ",[36,79890,79891],{"class":405},"'289.00'",[36,79893,31944],{"class":42},[36,79895,79896,79899,79902],{"class":38,"line":33145},[36,79897,79898],{"class":42},"        picture: ",[36,79900,79901],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,79903,31944],{"class":42},[36,79905,79906],{"class":38,"line":33151},[36,79907,78369],{"class":42},[36,79909,79910],{"class":38,"line":33171},[36,79911,79863],{"class":42},[36,79913,79914,79916,79919],{"class":38,"line":33177},[36,79915,79868],{"class":42},[36,79917,79918],{"class":405},"'4001594'",[36,79920,31944],{"class":42},[36,79922,79923,79925,79928],{"class":38,"line":33188},[36,79924,79878],{"class":42},[36,79926,79927],{"class":405},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,79929,31944],{"class":42},[36,79931,79932,79934,79937],{"class":38,"line":33194},[36,79933,79888],{"class":42},[36,79935,79936],{"class":405},"'288.00'",[36,79938,31944],{"class":42},[36,79940,79941,79943,79946],{"class":38,"line":33200},[36,79942,79898],{"class":42},[36,79944,79945],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,79947,31944],{"class":42},[36,79949,79950],{"class":38,"line":33206},[36,79951,78369],{"class":42},[36,79953,79954],{"class":38,"line":33212},[36,79955,79863],{"class":42},[36,79957,79958,79960,79963],{"class":38,"line":33218},[36,79959,79868],{"class":42},[36,79961,79962],{"class":405},"'4001009'",[36,79964,31944],{"class":42},[36,79966,79967,79969,79972],{"class":38,"line":33224},[36,79968,79878],{"class":42},[36,79970,79971],{"class":405},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,79973,31944],{"class":42},[36,79975,79976,79978,79981],{"class":38,"line":33230},[36,79977,79888],{"class":42},[36,79979,79980],{"class":405},"'109.00'",[36,79982,31944],{"class":42},[36,79984,79985,79987,79990],{"class":38,"line":33250},[36,79986,79898],{"class":42},[36,79988,79989],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,79991,31944],{"class":42},[36,79993,79994],{"class":38,"line":33256},[36,79995,78369],{"class":42},[36,79997,79998],{"class":38,"line":33272},[36,79999,79863],{"class":42},[36,80001,80002,80004,80007],{"class":38,"line":33278},[36,80003,79868],{"class":42},[36,80005,80006],{"class":405},"'4001874'",[36,80008,31944],{"class":42},[36,80010,80011,80013,80016],{"class":38,"line":33292},[36,80012,79878],{"class":42},[36,80014,80015],{"class":405},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,80017,31944],{"class":42},[36,80019,80020,80022,80025],{"class":38,"line":33298},[36,80021,79888],{"class":42},[36,80023,80024],{"class":405},"'488.00'",[36,80026,31944],{"class":42},[36,80028,80029,80031,80034],{"class":38,"line":33313},[36,80030,79898],{"class":42},[36,80032,80033],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,80035,31944],{"class":42},[36,80037,80038],{"class":38,"line":33319},[36,80039,78369],{"class":42},[36,80041,80042],{"class":38,"line":33328},[36,80043,79863],{"class":42},[36,80045,80046,80048,80051],{"class":38,"line":33334},[36,80047,79868],{"class":42},[36,80049,80050],{"class":405},"'4001649'",[36,80052,31944],{"class":42},[36,80054,80055,80057,80060],{"class":38,"line":33343},[36,80056,79878],{"class":42},[36,80058,80059],{"class":405},"'大师监制龙泉青瓷茶叶罐'",[36,80061,31944],{"class":42},[36,80063,80064,80066,80069],{"class":38,"line":33349},[36,80065,79888],{"class":42},[36,80067,80068],{"class":405},"'139.00'",[36,80070,31944],{"class":42},[36,80072,80073,80075,80078],{"class":38,"line":33355},[36,80074,79898],{"class":42},[36,80076,80077],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,80079,31944],{"class":42},[36,80081,80082],{"class":38,"line":33364},[36,80083,78369],{"class":42},[36,80085,80086],{"class":38,"line":33370},[36,80087,79863],{"class":42},[36,80089,80090,80092,80095],{"class":38,"line":33381},[36,80091,79868],{"class":42},[36,80093,80094],{"class":405},"'3997185'",[36,80096,31944],{"class":42},[36,80098,80099,80101,80104],{"class":38,"line":33387},[36,80100,79878],{"class":42},[36,80102,80103],{"class":405},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,80105,31944],{"class":42},[36,80107,80108,80110,80113],{"class":38,"line":33406},[36,80109,79888],{"class":42},[36,80111,80112],{"class":405},"'108.00'",[36,80114,31944],{"class":42},[36,80116,80117,80119,80122],{"class":38,"line":33412},[36,80118,79898],{"class":42},[36,80120,80121],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,80123,31944],{"class":42},[36,80125,80126],{"class":38,"line":33423},[36,80127,78369],{"class":42},[36,80129,80130],{"class":38,"line":33429},[36,80131,79863],{"class":42},[36,80133,80134,80136,80139],{"class":38,"line":33449},[36,80135,79868],{"class":42},[36,80137,80138],{"class":405},"'3997403'",[36,80140,31944],{"class":42},[36,80142,80143,80145,80148],{"class":38,"line":33465},[36,80144,79878],{"class":42},[36,80146,80147],{"class":405},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,80149,31944],{"class":42},[36,80151,80152,80154,80157],{"class":38,"line":33471},[36,80153,79888],{"class":42},[36,80155,80156],{"class":405},"'100.00'",[36,80158,31944],{"class":42},[36,80160,80161,80163,80166],{"class":38,"line":33485},[36,80162,79898],{"class":42},[36,80164,80165],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,80167,31944],{"class":42},[36,80169,80170],{"class":38,"line":33491},[36,80171,78369],{"class":42},[36,80173,80174],{"class":38,"line":33497},[36,80175,79863],{"class":42},[36,80177,80178,80180,80183],{"class":38,"line":33508},[36,80179,79868],{"class":42},[36,80181,80182],{"class":405},"'3998274'",[36,80184,31944],{"class":42},[36,80186,80187,80189,80192],{"class":38,"line":33514},[36,80188,79878],{"class":42},[36,80190,80191],{"class":405},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,80193,31944],{"class":42},[36,80195,80196,80198,80200],{"class":38,"line":33520},[36,80197,79888],{"class":42},[36,80199,80068],{"class":405},[36,80201,31944],{"class":42},[36,80203,80204,80206,80209],{"class":38,"line":33530},[36,80205,79898],{"class":42},[36,80207,80208],{"class":405},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,80210,31944],{"class":42},[36,80212,80213],{"class":38,"line":33536},[36,80214,78369],{"class":42},[36,80216,80217],{"class":38,"line":33547},[36,80218,53586],{"class":42},[36,80220,80221],{"class":38,"line":33553},[36,80222,2880],{"emptyLinePlaceholder":553},[36,80224,80225],{"class":38,"line":33563},[36,80226,80227],{"class":69},"    \u002F\u002F 1.渲染函数\n",[36,80229,80230,80232,80234,80236,80238],{"class":38,"line":33568},[36,80231,70561],{"class":46},[36,80233,70564],{"class":2443},[36,80235,345],{"class":42},[36,80237,4360],{"class":5696},[36,80239,12922],{"class":42},[36,80241,80242],{"class":38,"line":33574},[36,80243,80244],{"class":69},"      \u002F\u002F 声明空字符串\n",[36,80246,80247,80250,80253,80255],{"class":38,"line":33623},[36,80248,80249],{"class":46},"      let",[36,80251,80252],{"class":42}," str ",[36,80254,47],{"class":46},[36,80256,70581],{"class":405},[36,80258,80259],{"class":38,"line":33670},[36,80260,70586],{"class":69},[36,80262,80263,80265,80268,80270,80273,80276],{"class":38,"line":33675},[36,80264,58484],{"class":42},[36,80266,80267],{"class":2443},"forEach",[36,80269,345],{"class":42},[36,80271,80272],{"class":5696},"item",[36,80274,80275],{"class":46}," =>",[36,80277,16052],{"class":42},[36,80279,80280,80282,80285,80288,80290,80293,80295,80298,80301,80303],{"class":38,"line":33681},[36,80281,61747],{"class":46},[36,80283,80284],{"class":42}," { ",[36,80286,80287],{"class":53},"name",[36,80289,12915],{"class":42},[36,80291,80292],{"class":53},"price",[36,80294,12915],{"class":42},[36,80296,80297],{"class":53},"picture",[36,80299,80300],{"class":42}," } ",[36,80302,47],{"class":46},[36,80304,80305],{"class":42}," item\n",[36,80307,80308,80311,80313],{"class":38,"line":33700},[36,80309,80310],{"class":42},"        str ",[36,80312,9957],{"class":46},[36,80314,70645],{"class":405},[36,80316,80317],{"class":38,"line":33706},[36,80318,80319],{"class":405},"          \u003Cdiv class=\"item\">\n",[36,80321,80322,80325,80327],{"class":38,"line":33726},[36,80323,80324],{"class":405},"            \u003Cimg src=\"${",[36,80326,80297],{"class":42},[36,80328,80329],{"class":405},"}\" alt=\"\">\n",[36,80331,80332,80335,80337],{"class":38,"line":33732},[36,80333,80334],{"class":405},"            \u003Cp class=\"name\">${",[36,80336,80287],{"class":42},[36,80338,80339],{"class":405},"}\u003C\u002Fp>\n",[36,80341,80342,80345,80347],{"class":38,"line":33738},[36,80343,80344],{"class":405},"            \u003Cp class=\"price\">${",[36,80346,80292],{"class":42},[36,80348,80339],{"class":405},[36,80350,80351],{"class":38,"line":33748},[36,80352,80353],{"class":405},"          \u003C\u002Fdiv>\n",[36,80355,80356],{"class":38,"line":33753},[36,80357,80358],{"class":405},"        `\n",[36,80360,80361],{"class":38,"line":33759},[36,80362,65292],{"class":42},[36,80364,80365],{"class":38,"line":33775},[36,80366,80367],{"class":69},"      \u002F\u002F 追加给List\n",[36,80369,80370,80372,80374,80376,80379,80381,80383],{"class":38,"line":33820},[36,80371,56248],{"class":42},[36,80373,54876],{"class":2443},[36,80375,345],{"class":42},[36,80377,80378],{"class":405},"'.list'",[36,80380,74726],{"class":42},[36,80382,47],{"class":46},[36,80384,74462],{"class":42},[36,80386,80387],{"class":38,"line":33826},[36,80388,2667],{"class":42},[36,80390,80391],{"class":38,"line":33832},[36,80392,80393],{"class":69},"    \u002F\u002F 页面一打开就需要渲染\n",[36,80395,80396,80399],{"class":38,"line":33838},[36,80397,80398],{"class":2443},"    render",[36,80400,80401],{"class":42},"(goodsList)\n",[36,80403,80404],{"class":38,"line":33849},[36,80405,80406],{"class":69},"    \u002F\u002F 2.过滤筛选\n",[36,80408,80409,80411,80413,80415,80418,80420,80422,80424,80426,80428,80430,80432],{"class":38,"line":33855},[36,80410,52884],{"class":42},[36,80412,54876],{"class":2443},[36,80414,345],{"class":42},[36,80416,80417],{"class":405},"'.filter'",[36,80419,31304],{"class":42},[36,80421,58290],{"class":2443},[36,80423,345],{"class":42},[36,80425,58295],{"class":405},[36,80427,12915],{"class":42},[36,80429,697],{"class":5696},[36,80431,80275],{"class":46},[36,80433,16052],{"class":42},[36,80435,80436],{"class":38,"line":33861},[36,80437,80438],{"class":69},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,80440,80441,80443,80445,80448,80450,80452,80454,80456],{"class":38,"line":33867},[36,80442,58705],{"class":46},[36,80444,80284],{"class":42},[36,80446,80447],{"class":53},"tagName",[36,80449,12915],{"class":42},[36,80451,32014],{"class":53},[36,80453,80300],{"class":42},[36,80455,47],{"class":46},[36,80457,80458],{"class":42}," e.target\n",[36,80460,80461],{"class":38,"line":33885},[36,80462,80463],{"class":69},"      \u002F\u002F 判断\n",[36,80465,80466,80468,80470,80472,80474],{"class":38,"line":33899},[36,80467,54957],{"class":46},[36,80469,67511],{"class":42},[36,80471,54963],{"class":46},[36,80473,68733],{"class":405},[36,80475,12922],{"class":42},[36,80477,80478],{"class":38,"line":33908},[36,80479,80480],{"class":69},"        \u002F\u002F console.log(11)\n",[36,80482,80483],{"class":38,"line":33917},[36,80484,80485],{"class":69},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,80487,80488],{"class":38,"line":33926},[36,80489,80490],{"class":69},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,80492,80493,80495,80497,80499],{"class":38,"line":33935},[36,80494,52307],{"class":46},[36,80496,52310],{"class":42},[36,80498,47],{"class":46},[36,80500,80501],{"class":42}," goodsList\n",[36,80503,80504,80506,80509,80511,80514],{"class":38,"line":33941},[36,80505,2977],{"class":46},[36,80507,80508],{"class":42}," (dataset.index ",[36,80510,54963],{"class":46},[36,80512,80513],{"class":405}," '1'",[36,80515,12922],{"class":42},[36,80517,80518,80521,80523,80526,80529,80531,80533,80535,80538,80540,80542,80545,80547,80549,80551],{"class":38,"line":33947},[36,80519,80520],{"class":42},"          arr ",[36,80522,47],{"class":46},[36,80524,80525],{"class":42}," goodsList.",[36,80527,80528],{"class":2443},"filter",[36,80530,345],{"class":42},[36,80532,80272],{"class":5696},[36,80534,80275],{"class":46},[36,80536,80537],{"class":42}," item.price ",[36,80539,2190],{"class":46},[36,80541,4573],{"class":53},[36,80543,80544],{"class":46}," &&",[36,80546,80537],{"class":42},[36,80548,2068],{"class":46},[36,80550,6234],{"class":53},[36,80552,63],{"class":42},[36,80554,80555,80558,80560,80562,80564,80566,80569],{"class":38,"line":33955},[36,80556,80557],{"class":42},"        } ",[36,80559,2181],{"class":46},[36,80561,2184],{"class":46},[36,80563,80508],{"class":42},[36,80565,54963],{"class":46},[36,80567,80568],{"class":405}," '2'",[36,80570,12922],{"class":42},[36,80572,80573,80575,80577,80579,80581,80583,80585,80587,80589,80591,80593,80595,80597,80599,80602],{"class":38,"line":33960},[36,80574,80520],{"class":42},[36,80576,47],{"class":46},[36,80578,80525],{"class":42},[36,80580,80528],{"class":2443},[36,80582,345],{"class":42},[36,80584,80272],{"class":5696},[36,80586,80275],{"class":46},[36,80588,80537],{"class":42},[36,80590,2190],{"class":46},[36,80592,6234],{"class":53},[36,80594,80544],{"class":46},[36,80596,80537],{"class":42},[36,80598,2068],{"class":46},[36,80600,80601],{"class":53}," 300",[36,80603,63],{"class":42},[36,80605,80606,80608,80610,80612,80614,80616,80619],{"class":38,"line":33966},[36,80607,80557],{"class":42},[36,80609,2181],{"class":46},[36,80611,2184],{"class":46},[36,80613,80508],{"class":42},[36,80615,54963],{"class":46},[36,80617,80618],{"class":405}," '3'",[36,80620,12922],{"class":42},[36,80622,80623,80625,80627,80629,80631,80633,80635,80637,80639,80641,80643],{"class":38,"line":33977},[36,80624,80520],{"class":42},[36,80626,47],{"class":46},[36,80628,80525],{"class":42},[36,80630,80528],{"class":2443},[36,80632,345],{"class":42},[36,80634,80272],{"class":5696},[36,80636,80275],{"class":46},[36,80638,80537],{"class":42},[36,80640,2190],{"class":46},[36,80642,80601],{"class":53},[36,80644,63],{"class":42},[36,80646,80647],{"class":38,"line":33983},[36,80648,3009],{"class":42},[36,80650,80651],{"class":38,"line":34003},[36,80652,80653],{"class":69},"        \u002F\u002F 渲染函数\n",[36,80655,80656,80658],{"class":38,"line":34009},[36,80657,70885],{"class":2443},[36,80659,52889],{"class":42},[36,80661,80662],{"class":38,"line":34015},[36,80663,52875],{"class":42},[36,80665,80666],{"class":38,"line":34021},[36,80667,2880],{"emptyLinePlaceholder":553},[36,80669,80670],{"class":38,"line":34038},[36,80671,33938],{"class":42},[36,80673,80674,80676,80678],{"class":38,"line":34044},[36,80675,52894],{"class":42},[36,80677,52290],{"class":51777},[36,80679,51784],{"class":42},[36,80681,80682,80684,80686],{"class":38,"line":34050},[36,80683,52262],{"class":42},[36,80685,52277],{"class":51777},[36,80687,51784],{"class":42},[36,80689,80690],{"class":38,"line":34056},[36,80691,2880],{"emptyLinePlaceholder":553},[36,80693,80694,80696,80698],{"class":38,"line":34062},[36,80695,52262],{"class":42},[36,80697,51112],{"class":51777},[36,80699,51784],{"class":42},[14,80701,80703],{"id":80702},"_410-深入了解对象","4.10 深入了解对象",[596,80705,80707],{"id":80706},"_4101-创建对象","4.10.1 创建对象",[19,80709,80710],{},[519,80711],{"alt":31,"src":80712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80714,80715],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[596,80717,80719],{"id":80718},"_4102-构造函数","4.10.2 构造函数",[19,80721,80722,80725],{},[770,80723,80724],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80727,80728,80731],{},[770,80729,80730],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,80733,80735],{"className":51110,"code":80734,"language":51112,"meta":31,"style":31},"\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",[33,80736,80737,80745,80750,80771,80784,80796,80808,80812,80817,80844,80849,80876],{"__ignoreMap":31},[36,80738,80739,80741,80743],{"class":38,"line":39},[36,80740,1523],{"class":42},[36,80742,52290],{"class":51777},[36,80744,51784],{"class":42},[36,80746,80747],{"class":38,"line":66},[36,80748,80749],{"class":69},"\u002F\u002F例：\n",[36,80751,80752,80754,80757,80759,80761,80763,80765,80767,80769],{"class":38,"line":73},[36,80753,54926],{"class":46},[36,80755,80756],{"class":2443}," Pig",[36,80758,345],{"class":42},[36,80760,80287],{"class":5696},[36,80762,57],{"class":42},[36,80764,70698],{"class":5696},[36,80766,57],{"class":42},[36,80768,70715],{"class":5696},[36,80770,12922],{"class":42},[36,80772,80773,80776,80779,80781],{"class":38,"line":79},[36,80774,80775],{"class":53},"    this",[36,80777,80778],{"class":42},".name",[36,80780,47],{"class":46},[36,80782,80783],{"class":42},"name\n",[36,80785,80786,80788,80791,80793],{"class":38,"line":85},[36,80787,80775],{"class":53},[36,80789,80790],{"class":42},".age",[36,80792,47],{"class":46},[36,80794,80795],{"class":42},"age\n",[36,80797,80798,80800,80803,80805],{"class":38,"line":419},[36,80799,80775],{"class":53},[36,80801,80802],{"class":42},".gender",[36,80804,47],{"class":46},[36,80806,80807],{"class":42},"gender    \n",[36,80809,80810],{"class":38,"line":425},[36,80811,2045],{"class":42},[36,80813,80814],{"class":38,"line":431},[36,80815,80816],{"class":69},"\u002F\u002F创建佩奇对象\n",[36,80818,80819,80821,80824,80826,80828,80830,80833,80835,80837,80839,80842],{"class":38,"line":437},[36,80820,7272],{"class":46},[36,80822,80823],{"class":53}," Peppa",[36,80825,12197],{"class":46},[36,80827,80756],{"class":2443},[36,80829,345],{"class":42},[36,80831,80832],{"class":405},"'佩奇'",[36,80834,57],{"class":42},[36,80836,101],{"class":53},[36,80838,57],{"class":42},[36,80840,80841],{"class":405},"'女'",[36,80843,63],{"class":42},[36,80845,80846],{"class":38,"line":443},[36,80847,80848],{"class":69},"\u002F\u002F创建乔治对象\n",[36,80850,80851,80853,80856,80858,80860,80862,80865,80867,80869,80871,80874],{"class":38,"line":2092},[36,80852,7272],{"class":46},[36,80854,80855],{"class":53}," George",[36,80857,12197],{"class":46},[36,80859,80756],{"class":2443},[36,80861,345],{"class":42},[36,80863,80864],{"class":405},"'乔治'",[36,80866,57],{"class":42},[36,80868,127],{"class":53},[36,80870,57],{"class":42},[36,80872,80873],{"class":405},"'男'",[36,80875,63],{"class":42},[36,80877,80878,80880,80882],{"class":38,"line":2097},[36,80879,52262],{"class":42},[36,80881,52290],{"class":51777},[36,80883,51784],{"class":42},[19,80885,80886],{},[519,80887],{"alt":31,"src":80888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80890,80891],{},[519,80892],{"alt":31,"src":80893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80895,80896],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80898,80899],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80901,80902],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80904,80905],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80907,80908],{},"这里用等号是因为：对象.属性=值",[19,80910,80911],{},"①利用对象字面量创建对象",[19,80913,80914],{},"const o={",[19,80916,80917],{},"name:'pink'",[19,80919,80920],{},"} ②利用new Object创建对象",[19,80922,80923],{},"const o=new Object({name:'pink'})",[19,80925,80926],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80928,80929],{},"构造函数创建对象的执行过程：",[19,80931,80932],{},[519,80933],{"alt":31,"src":80934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[596,80936,80938],{"id":80937},"_4103-实例成员","4.10.3 实例成员",[19,80940,80941],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[579,80943,80944,80947,80950],{},[582,80945,80946],{},"实例对象的属性和方法即为实例成员",[582,80948,80949],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[582,80951,80952],{},"构造函数创建的实例对象彼此独立互不影响",[596,80954,80956],{"id":80955},"_4104-静态成员","4.10.4 静态成员",[19,80958,80959],{},[519,80960],{"alt":31,"src":80961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80963,80964],{},"静态成员有Date.now() Math.PI Math.random()",[19,80966,80967],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80969,80970],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80972,80973],{},"function Pig(name) n {",[19,80975,80976],{},"this.name=name",[19,80978,1559],{},[19,80980,80981],{},"Pig.eyes=2",[19,80983,80984],{},"Pig.sayHai=function () { console.log(this) }",[19,80986,80987],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80989,80990],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80992,11812],{},[579,80994,80995,80998,81001,81004,81007],{},[582,80996,80997],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[582,80999,81000],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[582,81002,81003],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[582,81005,81006],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[582,81008,81009],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81011,81012],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[596,81014,81016],{"id":81015},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81018,81019],{},"内置构造函数包含：",[19,81021,81022],{},[519,81023],{"alt":31,"src":81024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81026,81027],{},[519,81028],{"alt":31,"src":81029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81031,81032],{},"这些基本数据类型，js对他们进行了包装",[52290,81034,81035],{},"\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",[22478,81037,81039],{"id":81038},"_41051-object","4.10.5.1 Object",[19,81041,81042],{},"Object 是内置的构造函数，用于创建普通对象",[19,81044,81045],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,81047,81049],{"className":51110,"code":81048,"language":51112,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,81050,81051],{"__ignoreMap":31},[36,81052,81053],{"class":38,"line":39},[36,81054,81048],{"class":42},[19,81056,81057],{},"三个常用的静态方法：",[23390,81059,81061],{"id":81060},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81063,81064],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81066,81067],{},[519,81068],{"alt":31,"src":81069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81071,81072],{},[519,81073],{"alt":31,"src":81074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,81076,81078],{"className":53544,"code":81077,"language":53546,"meta":31,"style":31},"\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",[33,81079,81080,81088,81096,81101,81106,81111,81116,81121,81126,81134],{"__ignoreMap":31},[36,81081,81082,81084,81086],{"class":38,"line":39},[36,81083,1523],{"class":42},[36,81085,52277],{"class":51777},[36,81087,51784],{"class":42},[36,81089,81090,81092,81094],{"class":38,"line":66},[36,81091,52621],{"class":42},[36,81093,52290],{"class":51777},[36,81095,51784],{"class":42},[36,81097,81098],{"class":38,"line":73},[36,81099,81100],{"class":42},"    const o = { name: 'pink', age: 6 }\n",[36,81102,81103],{"class":38,"line":79},[36,81104,81105],{"class":42},"    \u002F\u002F 获得所有属性名\n",[36,81107,81108],{"class":38,"line":85},[36,81109,81110],{"class":42},"    const arr = Object.keys(o)\n",[36,81112,81113],{"class":38,"line":419},[36,81114,81115],{"class":42},"    console.log(arr)\n",[36,81117,81118],{"class":38,"line":425},[36,81119,81120],{"class":42},"    \u002F\u002F 获得所有属性值\n",[36,81122,81123],{"class":38,"line":431},[36,81124,81125],{"class":42},"    console.log(Object.values(o))\n",[36,81127,81128,81130,81132],{"class":38,"line":437},[36,81129,52894],{"class":42},[36,81131,52290],{"class":51777},[36,81133,51784],{"class":42},[36,81135,81136,81138,81140],{"class":38,"line":443},[36,81137,52262],{"class":42},[36,81139,52277],{"class":51777},[36,81141,51784],{"class":42},[23390,81143,81145],{"id":81144},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81147,81148],{},"Object.assign(oo,o)",[19,81150,81151],{},"后的东西添加给前 是追加",[19,81153,81154],{},[519,81155],{"alt":31,"src":81156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81158,81159],{},[519,81160],{"alt":31,"src":81161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,81163,81165],{"className":53544,"code":81164,"language":53546,"meta":31,"style":31},"\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",[33,81166,81167,81175,81183,81187,81191,81195,81199,81203,81207,81212,81217,81222,81227,81232,81240],{"__ignoreMap":31},[36,81168,81169,81171,81173],{"class":38,"line":39},[36,81170,1523],{"class":42},[36,81172,52277],{"class":51777},[36,81174,51784],{"class":42},[36,81176,81177,81179,81181],{"class":38,"line":66},[36,81178,52621],{"class":42},[36,81180,52290],{"class":51777},[36,81182,51784],{"class":42},[36,81184,81185],{"class":38,"line":73},[36,81186,81100],{"class":42},[36,81188,81189],{"class":38,"line":79},[36,81190,81105],{"class":42},[36,81192,81193],{"class":38,"line":85},[36,81194,81110],{"class":42},[36,81196,81197],{"class":38,"line":419},[36,81198,81115],{"class":42},[36,81200,81201],{"class":38,"line":425},[36,81202,81120],{"class":42},[36,81204,81205],{"class":38,"line":431},[36,81206,81125],{"class":42},[36,81208,81209],{"class":38,"line":437},[36,81210,81211],{"class":42},"    const oo = {}\n",[36,81213,81214],{"class":38,"line":443},[36,81215,81216],{"class":42},"    Object.assign(oo, o)\n",[36,81218,81219],{"class":38,"line":2092},[36,81220,81221],{"class":42},"    console.log(oo)\n",[36,81223,81224],{"class":38,"line":2097},[36,81225,81226],{"class":42},"    Object.assign(o, { gender: '女' })\n",[36,81228,81229],{"class":38,"line":2103},[36,81230,81231],{"class":42},"    console.log(o)\n",[36,81233,81234,81236,81238],{"class":38,"line":2108},[36,81235,52894],{"class":42},[36,81237,52290],{"class":51777},[36,81239,51784],{"class":42},[36,81241,81242,81244,81246],{"class":38,"line":2122},[36,81243,52262],{"class":42},[36,81245,52277],{"class":51777},[36,81247,51784],{"class":42},[19,81249,81250],{},[519,81251],{"alt":31,"src":81252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22478,81254,81256],{"id":81255},"_41052-array","4.10.5.2 Array",[19,81258,81259],{},"Array 是内置的构造函数，用于创建数组",[19,81261,81262],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,81264,81266],{"className":51110,"code":81265,"language":51112,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,81267,81268,81273],{"__ignoreMap":31},[36,81269,81270],{"class":38,"line":39},[36,81271,81272],{"class":42},"const arr=new Array(3,5)\n",[36,81274,81275],{"class":38,"line":66},[36,81276,81277],{"class":42},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81279,81280],{},"Array的实例方法，这个方法是实例成员",[19,81282,81283],{},[519,81284],{"alt":31,"src":81285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23390,81287,81289],{"id":81288},"_410521-reduce","4.10.5.2.1 reduce",[19,81291,81292],{},[519,81293],{"alt":31,"src":81294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,81296,81298],{"className":53544,"code":81297,"language":53546,"meta":31,"style":31},"\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",[33,81299,81300,81308,81316,81321,81326,81331,81336,81340,81345,81350,81355,81359,81364,81369,81373,81378,81383,81388,81396],{"__ignoreMap":31},[36,81301,81302,81304,81306],{"class":38,"line":39},[36,81303,1523],{"class":42},[36,81305,52277],{"class":51777},[36,81307,51784],{"class":42},[36,81309,81310,81312,81314],{"class":38,"line":66},[36,81311,52621],{"class":42},[36,81313,52290],{"class":51777},[36,81315,51784],{"class":42},[36,81317,81318],{"class":38,"line":73},[36,81319,81320],{"class":42},"    const arr = [1, 5, 8]\n",[36,81322,81323],{"class":38,"line":79},[36,81324,81325],{"class":42},"    \u002F\u002F 1.没有初始值\n",[36,81327,81328],{"class":38,"line":85},[36,81329,81330],{"class":42},"    const total = arr.reduce(function (prev, current) {\n",[36,81332,81333],{"class":38,"line":419},[36,81334,81335],{"class":42},"      return prev + current\n",[36,81337,81338],{"class":38,"line":425},[36,81339,33938],{"class":42},[36,81341,81342],{"class":38,"line":431},[36,81343,81344],{"class":42},"    console.log(total)   \u002F\u002F14\n",[36,81346,81347],{"class":38,"line":437},[36,81348,81349],{"class":42},"    \u002F\u002F 2.有初始值\n",[36,81351,81352],{"class":38,"line":443},[36,81353,81354],{"class":42},"    const total1 = arr.reduce(function (prev, current) {\n",[36,81356,81357],{"class":38,"line":2092},[36,81358,81335],{"class":42},[36,81360,81361],{"class":38,"line":2097},[36,81362,81363],{"class":42},"    }, 10)\n",[36,81365,81366],{"class":38,"line":2103},[36,81367,81368],{"class":42},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,81370,81371],{"class":38,"line":2108},[36,81372,2880],{"emptyLinePlaceholder":553},[36,81374,81375],{"class":38,"line":2122},[36,81376,81377],{"class":42},"    \u002F\u002F 3.箭头函数写法\n",[36,81379,81380],{"class":38,"line":2127},[36,81381,81382],{"class":42},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,81384,81385],{"class":38,"line":2133},[36,81386,81387],{"class":42},"    console.log(total2)   \u002F\u002F24\n",[36,81389,81390,81392,81394],{"class":38,"line":2154},[36,81391,52894],{"class":42},[36,81393,52290],{"class":51777},[36,81395,51784],{"class":42},[36,81397,81398,81400,81402],{"class":38,"line":2159},[36,81399,52262],{"class":42},[36,81401,52277],{"class":51777},[36,81403,51784],{"class":42},[19,81405,81406],{},"执行过程：",[579,81408,81409,81412,81415],{},[582,81410,81411],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[582,81413,81414],{},"每一次循环，把返回值给作为下一次循环的上一次值",[582,81416,81417],{},"如果有起始值，则起始值作为上一次值",[26,81419,81421],{"className":53544,"code":81420,"language":53546,"meta":31,"style":31},"\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",[33,81422,81423,81431,81439,81443,81447,81451,81455,81459,81463,81468,81473,81478,81483,81488,81492,81496,81500,81504,81508,81512,81517,81521,81526,81530,81535,81540,81544,81548,81552,81560],{"__ignoreMap":31},[36,81424,81425,81427,81429],{"class":38,"line":39},[36,81426,1523],{"class":42},[36,81428,52277],{"class":51777},[36,81430,51784],{"class":42},[36,81432,81433,81435,81437],{"class":38,"line":66},[36,81434,52621],{"class":42},[36,81436,52290],{"class":51777},[36,81438,51784],{"class":42},[36,81440,81441],{"class":38,"line":73},[36,81442,81320],{"class":42},[36,81444,81445],{"class":38,"line":79},[36,81446,81325],{"class":42},[36,81448,81449],{"class":38,"line":85},[36,81450,81330],{"class":42},[36,81452,81453],{"class":38,"line":419},[36,81454,81335],{"class":42},[36,81456,81457],{"class":38,"line":425},[36,81458,33938],{"class":42},[36,81460,81461],{"class":38,"line":431},[36,81462,81344],{"class":42},[36,81464,81465],{"class":38,"line":437},[36,81466,81467],{"class":42},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,81469,81470],{"class":38,"line":443},[36,81471,81472],{"class":42},"    \u002F\u002F     1              5                    6\n",[36,81474,81475],{"class":38,"line":2092},[36,81476,81477],{"class":42},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,81479,81480],{"class":38,"line":2097},[36,81481,81482],{"class":42},"    \u002F\u002F     6              8                    14\n",[36,81484,81485],{"class":38,"line":2103},[36,81486,81487],{"class":42},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,81489,81490],{"class":38,"line":2108},[36,81491,81349],{"class":42},[36,81493,81494],{"class":38,"line":2122},[36,81495,81354],{"class":42},[36,81497,81498],{"class":38,"line":2127},[36,81499,81335],{"class":42},[36,81501,81502],{"class":38,"line":2133},[36,81503,81363],{"class":42},[36,81505,81506],{"class":38,"line":2154},[36,81507,81368],{"class":42},[36,81509,81510],{"class":38,"line":2159},[36,81511,81467],{"class":42},[36,81513,81514],{"class":38,"line":2173},[36,81515,81516],{"class":42},"    \u002F\u002F     10             1                     11\n",[36,81518,81519],{"class":38,"line":2178},[36,81520,81477],{"class":42},[36,81522,81523],{"class":38,"line":2207},[36,81524,81525],{"class":42},"    \u002F\u002F     11             5                    16\n",[36,81527,81528],{"class":38,"line":2212},[36,81529,81477],{"class":42},[36,81531,81532],{"class":38,"line":2229},[36,81533,81534],{"class":42},"    \u002F\u002F     16             8                    24\n",[36,81536,81537],{"class":38,"line":2234},[36,81538,81539],{"class":42},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,81541,81542],{"class":38,"line":2239},[36,81543,81377],{"class":42},[36,81545,81546],{"class":38,"line":2244},[36,81547,81382],{"class":42},[36,81549,81550],{"class":38,"line":2258},[36,81551,81387],{"class":42},[36,81553,81554,81556,81558],{"class":38,"line":2263},[36,81555,52894],{"class":42},[36,81557,52290],{"class":51777},[36,81559,51784],{"class":42},[36,81561,81562,81564,81566],{"class":38,"line":3057},[36,81563,52262],{"class":42},[36,81565,52277],{"class":51777},[36,81567,51784],{"class":42},[23390,81569,81571],{"id":81570},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81573,81574],{},[519,81575],{"alt":31,"src":81576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,81578,81580],{"className":53544,"code":81579,"language":53546,"meta":31,"style":31},"\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",[33,81581,81582,81590,81598,81603,81608,81613,81618,81622,81627,81632,81637,81642,81647,81652,81656,81661,81665,81670,81678],{"__ignoreMap":31},[36,81583,81584,81586,81588],{"class":38,"line":39},[36,81585,1523],{"class":42},[36,81587,52277],{"class":51777},[36,81589,51784],{"class":42},[36,81591,81592,81594,81596],{"class":38,"line":66},[36,81593,52621],{"class":42},[36,81595,52290],{"class":51777},[36,81597,51784],{"class":42},[36,81599,81600],{"class":38,"line":73},[36,81601,81602],{"class":42},"    const arr = [\n",[36,81604,81605],{"class":38,"line":79},[36,81606,81607],{"class":42},"      { name: '张三', salary: 10000 },\n",[36,81609,81610],{"class":38,"line":85},[36,81611,81612],{"class":42},"      { name: '李四', salary: 10000 },\n",[36,81614,81615],{"class":38,"line":419},[36,81616,81617],{"class":42},"      { name: '王五', salary: 10000 }\n",[36,81619,81620],{"class":38,"line":425},[36,81621,53586],{"class":42},[36,81623,81624],{"class":38,"line":431},[36,81625,81626],{"class":42},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,81628,81629],{"class":38,"line":437},[36,81630,81631],{"class":42},"    \u002F\u002F prev是累计值\n",[36,81633,81634],{"class":38,"line":443},[36,81635,81636],{"class":42},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,81638,81639],{"class":38,"line":2092},[36,81640,81641],{"class":42},"    console.log(total)\n",[36,81643,81644],{"class":38,"line":2097},[36,81645,81646],{"class":42},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,81648,81649],{"class":38,"line":2103},[36,81650,81651],{"class":42},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,81653,81654],{"class":38,"line":2108},[36,81655,81646],{"class":42},[36,81657,81658],{"class":38,"line":2122},[36,81659,81660],{"class":42},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,81662,81663],{"class":38,"line":2127},[36,81664,81646],{"class":42},[36,81666,81667],{"class":38,"line":2133},[36,81668,81669],{"class":42},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,81671,81672,81674,81676],{"class":38,"line":2154},[36,81673,52894],{"class":42},[36,81675,52290],{"class":51777},[36,81677,51784],{"class":42},[36,81679,81680,81682,81684],{"class":38,"line":2159},[36,81681,52262],{"class":42},[36,81683,52277],{"class":51777},[36,81685,51784],{"class":42},[23390,81687,81689],{"id":81688},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81691,81692],{},[519,81693],{"alt":31,"src":81694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81696,81697],{},[519,81698],{"alt":31,"src":81699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[579,81701,81702],{},[582,81703,81704],{},"find()",[19,81706,81707],{},"循环查找，找到第一个就ok",[19,81709,81710],{},[43,81711,81714],{"href":81712,"rel":81713},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24345],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,81716,81718],{"className":51110,"code":81717,"language":51112,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[33,81719,81720,81725,81730],{"__ignoreMap":31},[36,81721,81722],{"class":38,"line":39},[36,81723,81724],{"class":42},"const array1 = [5, 12, 8, 130, 44]\n",[36,81726,81727],{"class":38,"line":66},[36,81728,81729],{"class":42},"const found = array1.find((element) => element > 10)\n",[36,81731,81732],{"class":38,"line":73},[36,81733,81734],{"class":42},"console.log(found)  \u002F\u002F12\n",[19,81736,81737,81739,81740,81745,81746,81749,81750,81752,81753,81758,81759,81761,81762,81764,81765,81767,81768],{},[33,81738,81704],{}," 方法是一个",[43,81741,81744],{"href":81742,"rel":81743},"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",[24345],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,81747,81748],{},"callbackFn"," 函数，直到 ",[33,81751,81748],{}," 返回一个",[43,81754,81757],{"href":81755,"rel":81756},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24345],"真值","。然后 ",[33,81760,81704],{}," 返回该元素并停止迭代数组。如果 ",[33,81763,81748],{}," 从未返回真值，则 ",[33,81766,81704],{}," 返回 ",[33,81769,81770],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,81772,81774],{"className":53544,"code":81773,"language":53546,"meta":31,"style":31},"\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",[33,81775,81776,81784,81792,81797,81802,81807,81811,81816,81821,81825,81830,81835,81839,81843,81848,81853,81857,81861,81866,81871,81876,81881,81886,81890,81895,81900,81905,81910,81914,81919,81927],{"__ignoreMap":31},[36,81777,81778,81780,81782],{"class":38,"line":39},[36,81779,1523],{"class":42},[36,81781,52277],{"class":51777},[36,81783,51784],{"class":42},[36,81785,81786,81788,81790],{"class":38,"line":66},[36,81787,52621],{"class":42},[36,81789,52290],{"class":51777},[36,81791,51784],{"class":42},[36,81793,81794],{"class":38,"line":73},[36,81795,81796],{"class":42},"    const arr = ['red', 'blue', 'green']\n",[36,81798,81799],{"class":38,"line":79},[36,81800,81801],{"class":42},"    const found = arr.find(item => item === 'pink')\n",[36,81803,81804],{"class":38,"line":85},[36,81805,81806],{"class":42},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,81808,81809],{"class":38,"line":419},[36,81810,2880],{"emptyLinePlaceholder":553},[36,81812,81813],{"class":38,"line":425},[36,81814,81815],{"class":42},"    \u002F\u002F 使用场景，用于查找数据\n",[36,81817,81818],{"class":38,"line":431},[36,81819,81820],{"class":42},"    const arr1 = [\n",[36,81822,81823],{"class":38,"line":437},[36,81824,79863],{"class":42},[36,81826,81827],{"class":38,"line":443},[36,81828,81829],{"class":42},"        name: '小米',\n",[36,81831,81832],{"class":38,"line":2092},[36,81833,81834],{"class":42},"        price: 1999\n",[36,81836,81837],{"class":38,"line":2097},[36,81838,78369],{"class":42},[36,81840,81841],{"class":38,"line":2103},[36,81842,79863],{"class":42},[36,81844,81845],{"class":38,"line":2108},[36,81846,81847],{"class":42},"        name: '华为',\n",[36,81849,81850],{"class":38,"line":2122},[36,81851,81852],{"class":42},"        price: 3999\n",[36,81854,81855],{"class":38,"line":2127},[36,81856,52875],{"class":42},[36,81858,81859],{"class":38,"line":2133},[36,81860,53586],{"class":42},[36,81862,81863],{"class":38,"line":2154},[36,81864,81865],{"class":42},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,81867,81868],{"class":38,"line":2159},[36,81869,81870],{"class":42},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,81872,81873],{"class":38,"line":2173},[36,81874,81875],{"class":42},"    \u002F\u002F   if (item.name === '小米') {\n",[36,81877,81878],{"class":38,"line":2178},[36,81879,81880],{"class":42},"    \u002F\u002F     return item\n",[36,81882,81883],{"class":38,"line":2207},[36,81884,81885],{"class":42},"    \u002F\u002F   }\n",[36,81887,81888],{"class":38,"line":2212},[36,81889,63767],{"class":42},[36,81891,81892],{"class":38,"line":2229},[36,81893,81894],{"class":42},"    \u002F\u002F 另一种写法\n",[36,81896,81897],{"class":38,"line":2234},[36,81898,81899],{"class":42},"    const found1 = arr1.find(item => {\n",[36,81901,81902],{"class":38,"line":2239},[36,81903,81904],{"class":42},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,81906,81907],{"class":38,"line":2244},[36,81908,81909],{"class":42},"      return item.name = '小米'\n",[36,81911,81912],{"class":38,"line":2258},[36,81913,33938],{"class":42},[36,81915,81916],{"class":38,"line":2263},[36,81917,81918],{"class":42},"    console.log(found1)\n",[36,81920,81921,81923,81925],{"class":38,"line":3057},[36,81922,52894],{"class":42},[36,81924,52290],{"class":51777},[36,81926,51784],{"class":42},[36,81928,81929,81931,81933],{"class":38,"line":3071},[36,81930,52262],{"class":42},[36,81932,52277],{"class":51777},[36,81934,51784],{"class":42},[19,81936,81937],{},[519,81938],{"alt":31,"src":81939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81941,81942],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[579,81944,81945],{"start":66},[582,81946,81947],{},"every()返回的是布尔值",[19,81949,81950],{},[43,81951,81954],{"href":81952,"rel":81953},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24345],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81956,81957],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81959,81960],{},"some是只有有一个就没问题",[19,81962,81963],{},"every是必须全是才行",[26,81965,81969],{"className":81966,"code":81967,"language":81968,"meta":31,"style":31},"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",[33,81970,81971,81987,82001,82005,82014],{"__ignoreMap":31},[36,81972,81973,81975,81978,81980,81982,81985],{"class":38,"line":39},[36,81974,54926],{"class":46},[36,81976,81977],{"class":42}," isBigEnough(element, ",[36,81979,74535],{"class":46},[36,81981,12915],{"class":42},[36,81983,81984],{"class":46},"array",[36,81986,12922],{"class":42},[36,81988,81989,81992,81995,81997,81999],{"class":38,"line":66},[36,81990,81991],{"class":46},"  return",[36,81993,81994],{"class":42}," element ",[36,81996,2190],{"class":46},[36,81998,2518],{"class":53},[36,82000,1774],{"class":42},[36,82002,82003],{"class":38,"line":73},[36,82004,2045],{"class":42},[36,82006,82007,82010,82012],{"class":38,"line":79},[36,82008,82009],{"class":42},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,82011,33806],{"class":46},[36,82013,54993],{"class":42},[36,82015,82016,82019,82021],{"class":38,"line":85},[36,82017,82018],{"class":42},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,82020,33806],{"class":46},[36,82022,58417],{"class":42},[26,82024,82026],{"className":53544,"code":82025,"language":53546,"meta":31,"style":31},"\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",[33,82027,82028,82036,82044,82049,82053,82058,82063,82071],{"__ignoreMap":31},[36,82029,82030,82032,82034],{"class":38,"line":39},[36,82031,1523],{"class":42},[36,82033,52277],{"class":51777},[36,82035,51784],{"class":42},[36,82037,82038,82040,82042],{"class":38,"line":66},[36,82039,52621],{"class":42},[36,82041,52290],{"class":51777},[36,82043,51784],{"class":42},[36,82045,82046],{"class":38,"line":73},[36,82047,82048],{"class":42},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,82050,82051],{"class":38,"line":79},[36,82052,78799],{"class":42},[36,82054,82055],{"class":38,"line":85},[36,82056,82057],{"class":42},"    const flag = arr.every(item => item >= 10)\n",[36,82059,82060],{"class":38,"line":419},[36,82061,82062],{"class":42},"    console.log(flag)    \u002F\u002Ftrue\n",[36,82064,82065,82067,82069],{"class":38,"line":425},[36,82066,52894],{"class":42},[36,82068,52290],{"class":51777},[36,82070,51784],{"class":42},[36,82072,82073,82075,82077],{"class":38,"line":431},[36,82074,52262],{"class":42},[36,82076,52277],{"class":51777},[36,82078,51784],{"class":42},[26,82080,82082],{"className":53544,"code":82081,"language":53546,"meta":31,"style":31},"\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",[33,82083,82084,82092,82100,82104,82109,82114,82119,82127],{"__ignoreMap":31},[36,82085,82086,82088,82090],{"class":38,"line":39},[36,82087,1523],{"class":42},[36,82089,52277],{"class":51777},[36,82091,51784],{"class":42},[36,82093,82094,82096,82098],{"class":38,"line":66},[36,82095,52621],{"class":42},[36,82097,52290],{"class":51777},[36,82099,51784],{"class":42},[36,82101,82102],{"class":38,"line":73},[36,82103,82048],{"class":42},[36,82105,82106],{"class":38,"line":79},[36,82107,82108],{"class":42},"    const arr = [10, 0, 5]\n",[36,82110,82111],{"class":38,"line":85},[36,82112,82113],{"class":42},"    const flag = arr.some(item => item >= 10)\n",[36,82115,82116],{"class":38,"line":419},[36,82117,82118],{"class":42},"    console.log(flag)   \u002F\u002Ftrue\n",[36,82120,82121,82123,82125],{"class":38,"line":425},[36,82122,52894],{"class":42},[36,82124,52290],{"class":51777},[36,82126,51784],{"class":42},[36,82128,82129,82131,82133],{"class":38,"line":431},[36,82130,52262],{"class":42},[36,82132,52277],{"class":51777},[36,82134,51784],{"class":42},[23390,82136,82138],{"id":82137},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82140,82141],{},[519,82142],{"alt":31,"src":82143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,82145,82147],{"className":51110,"code":82146,"language":51112,"meta":31,"style":31},"\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",[33,82148,82149,82159,82173,82177,82185,82199,82219,82231,82239,82246,82258,82270,82282,82294,82304,82314,82318,82326,82334,82338,82346,82358,82366,82388,82393,82398,82431,82439,82447,82451],{"__ignoreMap":31},[36,82150,82151,82153,82155,82157],{"class":38,"line":39},[36,82152,51774],{"class":42},[36,82154,51778],{"class":51777},[36,82156,51781],{"class":2443},[36,82158,51784],{"class":42},[36,82160,82161,82163,82165,82167,82169,82171],{"class":38,"line":66},[36,82162,1523],{"class":42},[36,82164,51112],{"class":51777},[36,82166,51793],{"class":2443},[36,82168,47],{"class":42},[36,82170,51798],{"class":405},[36,82172,51784],{"class":42},[36,82174,82175],{"class":38,"line":73},[36,82176,2880],{"emptyLinePlaceholder":553},[36,82178,82179,82181,82183],{"class":38,"line":79},[36,82180,1523],{"class":42},[36,82182,51811],{"class":51777},[36,82184,51784],{"class":42},[36,82186,82187,82189,82191,82193,82195,82197],{"class":38,"line":85},[36,82188,52621],{"class":42},[36,82190,51821],{"class":51777},[36,82192,51824],{"class":2443},[36,82194,47],{"class":42},[36,82196,51829],{"class":405},[36,82198,51784],{"class":42},[36,82200,82201,82203,82205,82207,82209,82211,82213,82215,82217],{"class":38,"line":419},[36,82202,52621],{"class":42},[36,82204,51821],{"class":51777},[36,82206,15400],{"class":2443},[36,82208,47],{"class":42},[36,82210,51868],{"class":405},[36,82212,51848],{"class":2443},[36,82214,47],{"class":42},[36,82216,51875],{"class":405},[36,82218,51784],{"class":42},[36,82220,82221,82223,82225,82227,82229],{"class":38,"line":425},[36,82222,52621],{"class":42},[36,82224,51884],{"class":51777},[36,82226,51887],{"class":42},[36,82228,51884],{"class":51777},[36,82230,51784],{"class":42},[36,82232,82233,82235,82237],{"class":38,"line":431},[36,82234,52621],{"class":42},[36,82236,539],{"class":51777},[36,82238,51784],{"class":42},[36,82240,82241,82244],{"class":38,"line":437},[36,82242,82243],{"class":51777},"    div",[36,82245,16052],{"class":42},[36,82247,82248,82250,82252,82254,82256],{"class":38,"line":443},[36,82249,55248],{"class":53},[36,82251,51914],{"class":42},[36,82253,2202],{"class":53},[36,82255,51969],{"class":46},[36,82257,1774],{"class":42},[36,82259,82260,82262,82264,82266,82268],{"class":38,"line":2092},[36,82261,55262],{"class":53},[36,82263,51914],{"class":42},[36,82265,1018],{"class":53},[36,82267,51969],{"class":46},[36,82269,1774],{"class":42},[36,82271,82272,82274,82276,82278,82280],{"class":38,"line":2097},[36,82273,57836],{"class":53},[36,82275,51914],{"class":42},[36,82277,1018],{"class":53},[36,82279,51969],{"class":46},[36,82281,1774],{"class":42},[36,82283,82284,82286,82288,82290,82292],{"class":38,"line":2103},[36,82285,65610],{"class":53},[36,82287,51914],{"class":42},[36,82289,154],{"class":53},[36,82291,51969],{"class":46},[36,82293,1774],{"class":42},[36,82295,82296,82298,82300,82302],{"class":38,"line":2108},[36,82297,57763],{"class":53},[36,82299,51914],{"class":42},[36,82301,52069],{"class":53},[36,82303,1774],{"class":42},[36,82305,82306,82308,82310,82312],{"class":38,"line":2122},[36,82307,55361],{"class":53},[36,82309,51914],{"class":42},[36,82311,52122],{"class":53},[36,82313,1774],{"class":42},[36,82315,82316],{"class":38,"line":2127},[36,82317,2667],{"class":42},[36,82319,82320,82322,82324],{"class":38,"line":2133},[36,82321,52894],{"class":42},[36,82323,539],{"class":51777},[36,82325,51784],{"class":42},[36,82327,82328,82330,82332],{"class":38,"line":2154},[36,82329,52262],{"class":42},[36,82331,51811],{"class":51777},[36,82333,51784],{"class":42},[36,82335,82336],{"class":38,"line":2159},[36,82337,2880],{"emptyLinePlaceholder":553},[36,82339,82340,82342,82344],{"class":38,"line":2173},[36,82341,1523],{"class":42},[36,82343,52277],{"class":51777},[36,82345,51784],{"class":42},[36,82347,82348,82350,82352,82354,82356],{"class":38,"line":2178},[36,82349,52621],{"class":42},[36,82351,52088],{"class":51777},[36,82353,55791],{"class":42},[36,82355,52088],{"class":51777},[36,82357,51784],{"class":42},[36,82359,82360,82362,82364],{"class":38,"line":2207},[36,82361,52621],{"class":42},[36,82363,52290],{"class":51777},[36,82365,51784],{"class":42},[36,82367,82368,82370,82373,82375,82378,82381,82383,82386],{"class":38,"line":2212},[36,82369,11701],{"class":46},[36,82371,82372],{"class":53}," spec",[36,82374,14044],{"class":46},[36,82376,82377],{"class":42}," { size: ",[36,82379,82380],{"class":405},"'40cm*40cm'",[36,82382,55941],{"class":42},[36,82384,82385],{"class":405},"'黑色'",[36,82387,56081],{"class":42},[36,82389,82390],{"class":38,"line":2229},[36,82391,82392],{"class":69},"    \u002F\u002F const arr = Object.values(spec)\n",[36,82394,82395],{"class":38,"line":2234},[36,82396,82397],{"class":69},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,82399,82400,82402,82404,82406,82409,82411,82413,82416,82419,82422,82424,82426,82429],{"class":38,"line":2239},[36,82401,52884],{"class":42},[36,82403,54876],{"class":2443},[36,82405,345],{"class":42},[36,82407,82408],{"class":405},"'div'",[36,82410,74726],{"class":42},[36,82412,47],{"class":46},[36,82414,82415],{"class":42}," Object.",[36,82417,82418],{"class":2443},"values",[36,82420,82421],{"class":42},"(spec).",[36,82423,74700],{"class":2443},[36,82425,345],{"class":42},[36,82427,82428],{"class":405},"'\u002F'",[36,82430,63],{"class":42},[36,82432,82433,82435,82437],{"class":38,"line":2244},[36,82434,52894],{"class":42},[36,82436,52290],{"class":51777},[36,82438,51784],{"class":42},[36,82440,82441,82443,82445],{"class":38,"line":2258},[36,82442,52262],{"class":42},[36,82444,52277],{"class":51777},[36,82446,51784],{"class":42},[36,82448,82449],{"class":38,"line":2263},[36,82450,2880],{"emptyLinePlaceholder":553},[36,82452,82453,82455,82457],{"class":38,"line":3057},[36,82454,52262],{"class":42},[36,82456,51112],{"class":51777},[36,82458,51784],{"class":42},[19,82460,82461],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23390,82463,82465],{"id":82464},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82467,82468],{},"静态方法，将伪数组转换为真数组",[19,82470,82471],{},[519,82472],{"alt":31,"src":82473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,82475,82477],{"className":53544,"code":82476,"language":53546,"meta":31,"style":31},"\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",[33,82478,82479,82487,82495,82507,82519,82531,82539,82547,82552,82557,82562,82567,82575],{"__ignoreMap":31},[36,82480,82481,82483,82485],{"class":38,"line":39},[36,82482,1523],{"class":42},[36,82484,52277],{"class":51777},[36,82486,51784],{"class":42},[36,82488,82489,82491,82493],{"class":38,"line":66},[36,82490,52621],{"class":42},[36,82492,1620],{"class":51777},[36,82494,51784],{"class":42},[36,82496,82497,82499,82501,82503,82505],{"class":38,"line":73},[36,82498,51818],{"class":42},[36,82500,582],{"class":51777},[36,82502,55791],{"class":42},[36,82504,582],{"class":51777},[36,82506,51784],{"class":42},[36,82508,82509,82511,82513,82515,82517],{"class":38,"line":79},[36,82510,51818],{"class":42},[36,82512,582],{"class":51777},[36,82514,55791],{"class":42},[36,82516,582],{"class":51777},[36,82518,51784],{"class":42},[36,82520,82521,82523,82525,82527,82529],{"class":38,"line":85},[36,82522,51818],{"class":42},[36,82524,582],{"class":51777},[36,82526,55791],{"class":42},[36,82528,582],{"class":51777},[36,82530,51784],{"class":42},[36,82532,82533,82535,82537],{"class":38,"line":419},[36,82534,52894],{"class":42},[36,82536,1620],{"class":51777},[36,82538,51784],{"class":42},[36,82540,82541,82543,82545],{"class":38,"line":425},[36,82542,52621],{"class":42},[36,82544,52290],{"class":51777},[36,82546,51784],{"class":42},[36,82548,82549],{"class":38,"line":431},[36,82550,82551],{"class":42},"    const lis = document.querySelectorAll('li')\n",[36,82553,82554],{"class":38,"line":437},[36,82555,82556],{"class":42},"    const liss = Array.from(lis)\n",[36,82558,82559],{"class":38,"line":443},[36,82560,82561],{"class":42},"    liss.pop()\n",[36,82563,82564],{"class":38,"line":2092},[36,82565,82566],{"class":42},"    console.log(liss)\n",[36,82568,82569,82571,82573],{"class":38,"line":2097},[36,82570,52894],{"class":42},[36,82572,52290],{"class":51777},[36,82574,51784],{"class":42},[36,82576,82577,82579,82581],{"class":38,"line":2103},[36,82578,52262],{"class":42},[36,82580,52277],{"class":51777},[36,82582,51784],{"class":42},[19,82584,82585],{},[519,82586],{"alt":31,"src":82587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22478,82589,82591],{"id":82590},"_41053-string","4.10.5.3 String",[19,82593,82594],{},[519,82595],{"alt":31,"src":82596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23390,82598,82600],{"id":82599},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,82602,82604],{"className":53544,"code":82603,"language":53546,"meta":31,"style":31},"\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",[33,82605,82606,82614,82622,82627,82632,82637,82641,82646,82651,82656,82664],{"__ignoreMap":31},[36,82607,82608,82610,82612],{"class":38,"line":39},[36,82609,1523],{"class":42},[36,82611,52277],{"class":51777},[36,82613,51784],{"class":42},[36,82615,82616,82618,82620],{"class":38,"line":66},[36,82617,52621],{"class":42},[36,82619,52290],{"class":51777},[36,82621,51784],{"class":42},[36,82623,82624],{"class":38,"line":73},[36,82625,82626],{"class":42},"    \u002F\u002F 把字符串转化为数组\n",[36,82628,82629],{"class":38,"line":79},[36,82630,82631],{"class":42},"    const str = 'pink,red'\n",[36,82633,82634],{"class":38,"line":85},[36,82635,82636],{"class":42},"    const arr = str.split(',')\n",[36,82638,82639],{"class":38,"line":419},[36,82640,81115],{"class":42},[36,82642,82643],{"class":38,"line":425},[36,82644,82645],{"class":42},"    const str1 = '2025-8-25'\n",[36,82647,82648],{"class":38,"line":431},[36,82649,82650],{"class":42},"    const arr1 = str1.split('-')\n",[36,82652,82653],{"class":38,"line":437},[36,82654,82655],{"class":42},"    console.log(arr1)\n",[36,82657,82658,82660,82662],{"class":38,"line":443},[36,82659,52894],{"class":42},[36,82661,52290],{"class":51777},[36,82663,51784],{"class":42},[36,82665,82666,82668,82670],{"class":38,"line":2092},[36,82667,52262],{"class":42},[36,82669,52277],{"class":51777},[36,82671,51784],{"class":42},[23390,82673,82675],{"id":82674},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82677,5661],{},[19,82679,82680],{},"substring(indexStart)",[19,82682,82683],{},"substring(indexStart, indexEnd)",[1620,82685,82686,82697,82709,82719],{},[582,82687,82688,82689,82692,82693,82696],{},"如果省略了 ",[33,82690,82691],{},"indexEnd","，则 ",[33,82694,82695],{},"substring()"," 提取字符直到字符串的末尾",[582,82698,82699,82700,82703,82704,82692,82706,82708],{},"如果 ",[33,82701,82702],{},"indexStart"," 等于 ",[33,82705,82691],{},[33,82707,82695],{}," 返回一个空字符串",[582,82710,82699,82711,82713,82714,82692,82716,82718],{},[33,82712,82702],{}," 大于 ",[33,82715,82691],{},[33,82717,82695],{}," 的效果就像交换了这两个参数一样",[582,82720,82721],{},"结束的索引号不包含想要截取的部分",[26,82723,82725],{"className":81966,"code":82724,"language":81968,"meta":31,"style":31},"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",[33,82726,82727,82739,82743,82777,82807,82811,82842,82846,82873,82903,82933,82937,82968],{"__ignoreMap":31},[36,82728,82729,82732,82734,82737],{"class":38,"line":39},[36,82730,82731],{"class":42},"const anyString ",[36,82733,47],{"class":46},[36,82735,82736],{"class":405}," \"Mozilla\"",[36,82738,1774],{"class":42},[36,82740,82741],{"class":38,"line":66},[36,82742,2880],{"emptyLinePlaceholder":553},[36,82744,82745,82748,82750,82752,82754,82757,82759,82762,82764,82766,82768,82770,82772,82774],{"class":38,"line":73},[36,82746,82747],{"class":53},"console",[36,82749,1171],{"class":42},[36,82751,58724],{"class":53},[36,82753,345],{"class":42},[36,82755,82756],{"class":53},"anyString",[36,82758,1171],{"class":42},[36,82760,82761],{"class":53},"substring",[36,82763,345],{"class":42},[36,82765,812],{"class":53},[36,82767,12915],{"class":42},[36,82769,54],{"class":53},[36,82771,75730],{"class":42},[36,82773,33806],{"class":46},[36,82775,82776],{"class":405}," 'M'\n",[36,82778,82779,82781,82783,82785,82787,82789,82791,82793,82795,82797,82799,82801,82803,82805],{"class":38,"line":79},[36,82780,82747],{"class":53},[36,82782,1171],{"class":42},[36,82784,58724],{"class":53},[36,82786,345],{"class":42},[36,82788,82756],{"class":53},[36,82790,1171],{"class":42},[36,82792,82761],{"class":53},[36,82794,345],{"class":42},[36,82796,54],{"class":53},[36,82798,12915],{"class":42},[36,82800,812],{"class":53},[36,82802,75730],{"class":42},[36,82804,33806],{"class":46},[36,82806,82776],{"class":405},[36,82808,82809],{"class":38,"line":85},[36,82810,2880],{"emptyLinePlaceholder":553},[36,82812,82813,82815,82817,82819,82821,82823,82825,82827,82829,82831,82833,82835,82837,82839],{"class":38,"line":419},[36,82814,82747],{"class":53},[36,82816,1171],{"class":42},[36,82818,58724],{"class":53},[36,82820,345],{"class":42},[36,82822,82756],{"class":53},[36,82824,1171],{"class":42},[36,82826,82761],{"class":53},[36,82828,345],{"class":42},[36,82830,812],{"class":53},[36,82832,12915],{"class":42},[36,82834,101],{"class":53},[36,82836,75730],{"class":42},[36,82838,33806],{"class":46},[36,82840,82841],{"class":405}," 'Mozill'\n",[36,82843,82844],{"class":38,"line":425},[36,82845,2880],{"emptyLinePlaceholder":553},[36,82847,82848,82850,82852,82854,82856,82858,82860,82862,82864,82866,82868,82870],{"class":38,"line":431},[36,82849,82747],{"class":53},[36,82851,1171],{"class":42},[36,82853,58724],{"class":53},[36,82855,345],{"class":42},[36,82857,82756],{"class":53},[36,82859,1171],{"class":42},[36,82861,82761],{"class":53},[36,82863,345],{"class":42},[36,82865,912],{"class":53},[36,82867,75730],{"class":42},[36,82869,33806],{"class":46},[36,82871,82872],{"class":405}," 'lla'\n",[36,82874,82875,82877,82879,82881,82883,82885,82887,82889,82891,82893,82895,82897,82899,82901],{"class":38,"line":437},[36,82876,82747],{"class":53},[36,82878,1171],{"class":42},[36,82880,58724],{"class":53},[36,82882,345],{"class":42},[36,82884,82756],{"class":53},[36,82886,1171],{"class":42},[36,82888,82761],{"class":53},[36,82890,345],{"class":42},[36,82892,912],{"class":53},[36,82894,12915],{"class":42},[36,82896,987],{"class":53},[36,82898,75786],{"class":42},[36,82900,33806],{"class":46},[36,82902,82872],{"class":405},[36,82904,82905,82907,82909,82911,82913,82915,82917,82919,82921,82923,82925,82927,82929,82931],{"class":38,"line":443},[36,82906,82747],{"class":53},[36,82908,1171],{"class":42},[36,82910,58724],{"class":53},[36,82912,345],{"class":42},[36,82914,82756],{"class":53},[36,82916,1171],{"class":42},[36,82918,82761],{"class":53},[36,82920,345],{"class":42},[36,82922,987],{"class":53},[36,82924,12915],{"class":42},[36,82926,912],{"class":53},[36,82928,75730],{"class":42},[36,82930,33806],{"class":46},[36,82932,82872],{"class":405},[36,82934,82935],{"class":38,"line":2092},[36,82936,2880],{"emptyLinePlaceholder":553},[36,82938,82939,82941,82943,82945,82947,82949,82951,82953,82955,82957,82959,82961,82963,82965],{"class":38,"line":2097},[36,82940,82747],{"class":53},[36,82942,1171],{"class":42},[36,82944,58724],{"class":53},[36,82946,345],{"class":42},[36,82948,82756],{"class":53},[36,82950,1171],{"class":42},[36,82952,82761],{"class":53},[36,82954,345],{"class":42},[36,82956,812],{"class":53},[36,82958,12915],{"class":42},[36,82960,987],{"class":53},[36,82962,75730],{"class":42},[36,82964,33806],{"class":46},[36,82966,82967],{"class":405}," 'Mozilla'\n",[36,82969,82970,82972,82974,82976,82978,82980,82982,82984,82986,82988,82990,82992,82994,82996],{"class":38,"line":2103},[36,82971,82747],{"class":53},[36,82973,1171],{"class":42},[36,82975,58724],{"class":53},[36,82977,345],{"class":42},[36,82979,82756],{"class":53},[36,82981,1171],{"class":42},[36,82983,82761],{"class":53},[36,82985,345],{"class":42},[36,82987,812],{"class":53},[36,82989,12915],{"class":42},[36,82991,1062],{"class":53},[36,82993,75730],{"class":42},[36,82995,33806],{"class":46},[36,82997,82967],{"class":405},[23390,82999,83001],{"id":83000},"_410533-startswith","4.10.5.3.3 startsWith",[19,83003,83004,83007,83008,83013,83014,83016,83017],{},[33,83005,83006],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[770,83009,83010],{},[33,83011,83012],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,83015,1843],{}," 或 ",[33,83018,66497],{},[26,83020,83022],{"className":77972,"code":83021,"language":77974,"meta":31,"style":31},"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",[33,83023,83024,83036,83055,83060,83080],{"__ignoreMap":31},[36,83025,83026,83028,83031,83033],{"class":38,"line":39},[36,83027,7272],{"class":46},[36,83029,83030],{"class":42}," str1 ",[36,83032,47],{"class":46},[36,83034,83035],{"class":405}," \"Saturday night plans\"\n",[36,83037,83038,83040,83042,83045,83048,83050,83053],{"class":38,"line":66},[36,83039,78009],{"class":42},[36,83041,58724],{"class":2443},[36,83043,83044],{"class":42},"(str1.",[36,83046,83047],{"class":2443},"startsWith",[36,83049,345],{"class":42},[36,83051,83052],{"class":405},"\"Sat\"",[36,83054,370],{"class":42},[36,83056,83057],{"class":38,"line":73},[36,83058,83059],{"class":69},"\u002F\u002F Expected output: true\n",[36,83061,83062,83064,83066,83068,83070,83072,83074,83076,83078],{"class":38,"line":79},[36,83063,78009],{"class":42},[36,83065,58724],{"class":2443},[36,83067,83044],{"class":42},[36,83069,83047],{"class":2443},[36,83071,345],{"class":42},[36,83073,83052],{"class":405},[36,83075,12915],{"class":42},[36,83077,127],{"class":53},[36,83079,370],{"class":42},[36,83081,83082],{"class":38,"line":85},[36,83083,83084],{"class":69},"\u002F\u002F Expected output: false\n",[26,83086,83088],{"className":51110,"code":83087,"language":51112,"meta":31,"style":31},"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",[33,83089,83090,83095,83100,83104,83109,83114],{"__ignoreMap":31},[36,83091,83092],{"class":38,"line":39},[36,83093,83094],{"class":42},"startsWith(searchString)\n",[36,83096,83097],{"class":38,"line":66},[36,83098,83099],{"class":42},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,83101,83102],{"class":38,"line":73},[36,83103,2880],{"emptyLinePlaceholder":553},[36,83105,83106],{"class":38,"line":79},[36,83107,83108],{"class":42},"const str3 = 'pink老师上课中'\n",[36,83110,83111],{"class":38,"line":85},[36,83112,83113],{"class":42},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,83115,83116],{"class":38,"line":419},[36,83117,83118],{"class":42},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23390,83120,83122],{"id":83121},"_410534-includes","4.10.5.3.4 includes",[19,83124,83125],{},"includes(searchString) includes(searchString, position)",[579,83127,83128],{},[582,83129,83130],{},"searchString:",[19,83132,83133,83134,83136,83137,83142,83143,83148,83149,21980,83152,83155,83156,83159],{},"一个要在 ",[33,83135,1783],{}," 中查找的字符串。",[43,83138,83141],{"href":83139,"rel":83140},"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",[24345],"不能是正则表达式","。所有非正则表达式的值都会被",[43,83144,83147],{"href":83145,"rel":83146},"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",[24345],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,83150,83151],{},"undefined",[33,83153,83154],{},"includes()"," 方法会在字符串中搜索 ",[33,83157,83158],{},"\"undefined\"","，这通常不是你想要的",[579,83161,83162],{"start":66},[582,83163,83164,1472],{},[33,83165,83166],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83168,83169,83170,83173,83174],{},"在字符串中开始搜索 ",[33,83171,83172],{},"searchString"," 的位置。默认值为 ",[33,83175,812],{},[579,83177,83178],{"start":73},[582,83179,83180],{},"返回值：",[19,83182,83183,83184,83186,83187,83191,83192],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,83185,83172],{}," 为空字符串的情况），则返回 ",[770,83188,83189],{},[33,83190,1843],{}," ，否则返回 ",[770,83193,83194],{},[33,83195,66497],{},[579,83197,83198],{"start":79},[582,83199,83200],{},"异常：",[19,83202,82699,83203,14275,83205,83209],{},[33,83204,83172],{},[43,83206,83208],{"href":83139,"rel":83207},[24345],"是一个正则表达式","，则会抛出",[19,83211,83212],{},"只要是有就是true，不需要非得以谁开头结尾",[26,83214,83216],{"className":77972,"code":83215,"language":77974,"meta":31,"style":31},"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",[33,83217,83218,83229,83252,83271,83291,83313,83332],{"__ignoreMap":31},[36,83219,83220,83222,83224,83226],{"class":38,"line":39},[36,83221,7272],{"class":46},[36,83223,80252],{"class":42},[36,83225,47],{"class":46},[36,83227,83228],{"class":405}," \"To be, or not to be, that is the question.\"\n",[36,83230,83231,83233,83235,83238,83241,83243,83246,83249],{"class":38,"line":66},[36,83232,78009],{"class":42},[36,83234,58724],{"class":2443},[36,83236,83237],{"class":42},"(str.",[36,83239,83240],{"class":2443},"includes",[36,83242,345],{"class":42},[36,83244,83245],{"class":405},"\"To be\"",[36,83247,83248],{"class":42},"))",[36,83250,83251],{"class":69},"  \u002F\u002F true\n",[36,83253,83254,83256,83258,83260,83262,83264,83267,83269],{"class":38,"line":73},[36,83255,78009],{"class":42},[36,83257,58724],{"class":2443},[36,83259,83237],{"class":42},[36,83261,83240],{"class":2443},[36,83263,345],{"class":42},[36,83265,83266],{"class":405},"\"question\"",[36,83268,83248],{"class":42},[36,83270,83251],{"class":69},[36,83272,83273,83275,83277,83279,83281,83283,83286,83288],{"class":38,"line":79},[36,83274,78009],{"class":42},[36,83276,58724],{"class":2443},[36,83278,83237],{"class":42},[36,83280,83240],{"class":2443},[36,83282,345],{"class":42},[36,83284,83285],{"class":405},"\"nonexistent\"",[36,83287,83248],{"class":42},[36,83289,83290],{"class":69},"  \u002F\u002F false\n",[36,83292,83293,83295,83297,83299,83301,83303,83305,83307,83309,83311],{"class":38,"line":85},[36,83294,78009],{"class":42},[36,83296,58724],{"class":2443},[36,83298,83237],{"class":42},[36,83300,83240],{"class":2443},[36,83302,345],{"class":42},[36,83304,83245],{"class":405},[36,83306,12915],{"class":42},[36,83308,54],{"class":53},[36,83310,83248],{"class":42},[36,83312,83290],{"class":69},[36,83314,83315,83317,83319,83321,83323,83325,83328,83330],{"class":38,"line":419},[36,83316,78009],{"class":42},[36,83318,58724],{"class":2443},[36,83320,83237],{"class":42},[36,83322,83240],{"class":2443},[36,83324,345],{"class":42},[36,83326,83327],{"class":405},"\"TO BE\"",[36,83329,83248],{"class":42},[36,83331,83290],{"class":69},[36,83333,83334,83336,83338,83340,83342,83344,83346,83348],{"class":38,"line":425},[36,83335,78009],{"class":42},[36,83337,58724],{"class":2443},[36,83339,83237],{"class":42},[36,83341,83240],{"class":2443},[36,83343,345],{"class":42},[36,83345,8132],{"class":405},[36,83347,83248],{"class":42},[36,83349,83251],{"class":69},[23390,83351,83353],{"id":83352},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,83355,83357],{"className":53544,"code":83356,"language":53546,"meta":31,"style":31},"\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",[33,83358,83359,83367,83375,83380,83385,83390,83395,83400,83408],{"__ignoreMap":31},[36,83360,83361,83363,83365],{"class":38,"line":39},[36,83362,1523],{"class":42},[36,83364,52277],{"class":51777},[36,83366,51784],{"class":42},[36,83368,83369,83371,83373],{"class":38,"line":66},[36,83370,52621],{"class":42},[36,83372,52290],{"class":51777},[36,83374,51784],{"class":42},[36,83376,83377],{"class":38,"line":73},[36,83378,83379],{"class":42},"    const num = 10\n",[36,83381,83382],{"class":38,"line":79},[36,83383,83384],{"class":42},"    \u002F\u002F 强制转换\n",[36,83386,83387],{"class":38,"line":85},[36,83388,83389],{"class":42},"    console.log(String(num))\n",[36,83391,83392],{"class":38,"line":419},[36,83393,83394],{"class":42},"    \u002F\u002F toString()方法转换\n",[36,83396,83397],{"class":38,"line":425},[36,83398,83399],{"class":42},"    console.log(num.toString())\n",[36,83401,83402,83404,83406],{"class":38,"line":431},[36,83403,52894],{"class":42},[36,83405,52290],{"class":51777},[36,83407,51784],{"class":42},[36,83409,83410,83412,83414],{"class":38,"line":437},[36,83411,52262],{"class":42},[36,83413,52277],{"class":51777},[36,83415,51784],{"class":42},[23390,83417,83419],{"id":83418},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83421,83422],{},[519,83423],{"alt":31,"src":83424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,83426,83428],{"className":51110,"code":83427,"language":51112,"meta":31,"style":31},"\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",[33,83429,83430,83440,83454,83458,83466,83480,83500,83512,83520,83524,83532,83544,83552,83564,83569,83574,83579,83626,83642,83650,83658,83662],{"__ignoreMap":31},[36,83431,83432,83434,83436,83438],{"class":38,"line":39},[36,83433,51774],{"class":42},[36,83435,51778],{"class":51777},[36,83437,51781],{"class":2443},[36,83439,51784],{"class":42},[36,83441,83442,83444,83446,83448,83450,83452],{"class":38,"line":66},[36,83443,1523],{"class":42},[36,83445,51112],{"class":51777},[36,83447,51793],{"class":2443},[36,83449,47],{"class":42},[36,83451,51798],{"class":405},[36,83453,51784],{"class":42},[36,83455,83456],{"class":38,"line":73},[36,83457,2880],{"emptyLinePlaceholder":553},[36,83459,83460,83462,83464],{"class":38,"line":79},[36,83461,1523],{"class":42},[36,83463,51811],{"class":51777},[36,83465,51784],{"class":42},[36,83467,83468,83470,83472,83474,83476,83478],{"class":38,"line":85},[36,83469,52621],{"class":42},[36,83471,51821],{"class":51777},[36,83473,51824],{"class":2443},[36,83475,47],{"class":42},[36,83477,51829],{"class":405},[36,83479,51784],{"class":42},[36,83481,83482,83484,83486,83488,83490,83492,83494,83496,83498],{"class":38,"line":419},[36,83483,52621],{"class":42},[36,83485,51821],{"class":51777},[36,83487,15400],{"class":2443},[36,83489,47],{"class":42},[36,83491,51868],{"class":405},[36,83493,51848],{"class":2443},[36,83495,47],{"class":42},[36,83497,51875],{"class":405},[36,83499,51784],{"class":42},[36,83501,83502,83504,83506,83508,83510],{"class":38,"line":425},[36,83503,52621],{"class":42},[36,83505,51884],{"class":51777},[36,83507,51887],{"class":42},[36,83509,51884],{"class":51777},[36,83511,51784],{"class":42},[36,83513,83514,83516,83518],{"class":38,"line":431},[36,83515,52262],{"class":42},[36,83517,51811],{"class":51777},[36,83519,51784],{"class":42},[36,83521,83522],{"class":38,"line":437},[36,83523,2880],{"emptyLinePlaceholder":553},[36,83525,83526,83528,83530],{"class":38,"line":443},[36,83527,1523],{"class":42},[36,83529,52277],{"class":51777},[36,83531,51784],{"class":42},[36,83533,83534,83536,83538,83540,83542],{"class":38,"line":2092},[36,83535,52621],{"class":42},[36,83537,52088],{"class":51777},[36,83539,55791],{"class":42},[36,83541,52088],{"class":51777},[36,83543,51784],{"class":42},[36,83545,83546,83548,83550],{"class":38,"line":2097},[36,83547,52621],{"class":42},[36,83549,52290],{"class":51777},[36,83551,51784],{"class":42},[36,83553,83554,83556,83559,83561],{"class":38,"line":2103},[36,83555,11701],{"class":46},[36,83557,83558],{"class":53}," gift",[36,83560,14044],{"class":46},[36,83562,83563],{"class":405}," '50g的茶叶，清洗球'\n",[36,83565,83566],{"class":38,"line":2108},[36,83567,83568],{"class":69},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,83570,83571],{"class":38,"line":2122},[36,83572,83573],{"class":69},"    \u002F\u002F console.log(gift.split(','))\n",[36,83575,83576],{"class":38,"line":2127},[36,83577,83578],{"class":69},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,83580,83581,83583,83585,83587,83590,83593,83595,83598,83600,83602,83604,83606,83608,83611,83613,83616,83618,83620,83622,83624],{"class":38,"line":2133},[36,83582,11701],{"class":46},[36,83584,74396],{"class":53},[36,83586,14044],{"class":46},[36,83588,83589],{"class":42}," gift.",[36,83591,83592],{"class":2443},"split",[36,83594,345],{"class":42},[36,83596,83597],{"class":405},"'，'",[36,83599,31304],{"class":42},[36,83601,74521],{"class":2443},[36,83603,345],{"class":42},[36,83605,80272],{"class":5696},[36,83607,80275],{"class":46},[36,83609,83610],{"class":405}," `\u003Cspan>【赠品】${",[36,83612,80272],{"class":42},[36,83614,83615],{"class":405},"}\u003C\u002Fspan>\u003Cbr>`",[36,83617,31304],{"class":42},[36,83619,74700],{"class":2443},[36,83621,345],{"class":42},[36,83623,74705],{"class":405},[36,83625,63],{"class":42},[36,83627,83628,83630,83632,83634,83636,83638,83640],{"class":38,"line":2154},[36,83629,52884],{"class":42},[36,83631,54876],{"class":2443},[36,83633,345],{"class":42},[36,83635,82408],{"class":405},[36,83637,74726],{"class":42},[36,83639,47],{"class":46},[36,83641,74462],{"class":42},[36,83643,83644,83646,83648],{"class":38,"line":2159},[36,83645,52894],{"class":42},[36,83647,52290],{"class":51777},[36,83649,51784],{"class":42},[36,83651,83652,83654,83656],{"class":38,"line":2173},[36,83653,52262],{"class":42},[36,83655,52277],{"class":51777},[36,83657,51784],{"class":42},[36,83659,83660],{"class":38,"line":2178},[36,83661,2880],{"emptyLinePlaceholder":553},[36,83663,83664,83666,83668],{"class":38,"line":2207},[36,83665,52262],{"class":42},[36,83667,51112],{"class":51777},[36,83669,51784],{"class":42},[22478,83671,83673],{"id":83672},"_41054-number","4.10.5.4 Number",[19,83675,83676],{},[519,83677],{"alt":31,"src":83678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83680,83681],{},"整数也可以进行toFixed来保留小数",[19,83683,83684],{},"比如：",[19,83686,83687],{},"const price=10",[19,83689,83690],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22478,83692,83694],{"id":83693},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83696,83697],{},[519,83698],{"alt":31,"src":83699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,83701,83703],{"className":51110,"code":83702,"language":51112,"meta":31,"style":31},"\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",[33,83704,83705,83715,83729,83733,83741,83755,83775,83787,83795,83801,83811,83821,83831,83835,83839,83845,83857,83871,83875,83879,83885,83897,83913,83923,83939,83943,83947,83953,83963,83973,83977,83981,83989,84001,84013,84025,84029,84033,84041,84053,84057,84061,84072,84082,84094,84106,84116,84120,84124,84132,84141,84153,84163,84173,84177,84181,84189,84198,84205,84215,84227,84231,84235,84244,84254,84265,84277,84289,84293,84297,84306,84316,84327,84331,84335,84341,84353,84365,84375,84385,84403,84415,84419,84423,84432,84444,84454,84464,84476,84480,84488,84496,84500,84508,84522,84530,84544,84572,84580,84588,84598,84602,84610,84618,84627,84635,84644,84654,84658,84662,84670,84678,84687,84695,84703,84716,84720,84724,84732,84740,84749,84757,84765,84780,84784,84788,84796,84804,84813,84821,84829,84843,84851,84855,84859,84864,84890,84895,84932,84937,84960,84965,85019,85024,85060,85064,85070,85075,85084,85098,85107,85126,85135,85145,85150,85155,85168,85173,85227,85253,85261,85269,85273],{"__ignoreMap":31},[36,83706,83707,83709,83711,83713],{"class":38,"line":39},[36,83708,51774],{"class":42},[36,83710,51778],{"class":51777},[36,83712,51781],{"class":2443},[36,83714,51784],{"class":42},[36,83716,83717,83719,83721,83723,83725,83727],{"class":38,"line":66},[36,83718,1523],{"class":42},[36,83720,51112],{"class":51777},[36,83722,51793],{"class":2443},[36,83724,47],{"class":42},[36,83726,51798],{"class":405},[36,83728,51784],{"class":42},[36,83730,83731],{"class":38,"line":73},[36,83732,2880],{"emptyLinePlaceholder":553},[36,83734,83735,83737,83739],{"class":38,"line":79},[36,83736,1523],{"class":42},[36,83738,51811],{"class":51777},[36,83740,51784],{"class":42},[36,83742,83743,83745,83747,83749,83751,83753],{"class":38,"line":85},[36,83744,52621],{"class":42},[36,83746,51821],{"class":51777},[36,83748,51824],{"class":2443},[36,83750,47],{"class":42},[36,83752,51829],{"class":405},[36,83754,51784],{"class":42},[36,83756,83757,83759,83761,83763,83765,83767,83769,83771,83773],{"class":38,"line":419},[36,83758,52621],{"class":42},[36,83760,51821],{"class":51777},[36,83762,15400],{"class":2443},[36,83764,47],{"class":42},[36,83766,51868],{"class":405},[36,83768,51848],{"class":2443},[36,83770,47],{"class":42},[36,83772,51875],{"class":405},[36,83774,51784],{"class":42},[36,83776,83777,83779,83781,83783,83785],{"class":38,"line":425},[36,83778,52621],{"class":42},[36,83780,51884],{"class":51777},[36,83782,51887],{"class":42},[36,83784,51884],{"class":51777},[36,83786,51784],{"class":42},[36,83788,83789,83791,83793],{"class":38,"line":431},[36,83790,52621],{"class":42},[36,83792,539],{"class":51777},[36,83794,51784],{"class":42},[36,83796,83797,83799],{"class":38,"line":437},[36,83798,6883],{"class":51777},[36,83800,16052],{"class":42},[36,83802,83803,83805,83807,83809],{"class":38,"line":443},[36,83804,55172],{"class":53},[36,83806,51914],{"class":42},[36,83808,812],{"class":53},[36,83810,1774],{"class":42},[36,83812,83813,83815,83817,83819],{"class":38,"line":2092},[36,83814,55183],{"class":53},[36,83816,51914],{"class":42},[36,83818,812],{"class":53},[36,83820,1774],{"class":42},[36,83822,83823,83825,83827,83829],{"class":38,"line":2097},[36,83824,73073],{"class":53},[36,83826,51914],{"class":42},[36,83828,60982],{"class":53},[36,83830,1774],{"class":42},[36,83832,83833],{"class":38,"line":2103},[36,83834,2667],{"class":42},[36,83836,83837],{"class":38,"line":2108},[36,83838,2880],{"emptyLinePlaceholder":553},[36,83840,83841,83843],{"class":38,"line":2122},[36,83842,62600],{"class":2443},[36,83844,16052],{"class":42},[36,83846,83847,83849,83851,83853,83855],{"class":38,"line":2127},[36,83848,55248],{"class":53},[36,83850,51914],{"class":42},[36,83852,79051],{"class":53},[36,83854,51969],{"class":46},[36,83856,1774],{"class":42},[36,83858,83859,83861,83863,83865,83867,83869],{"class":38,"line":2133},[36,83860,55183],{"class":53},[36,83862,51914],{"class":42},[36,83864,930],{"class":53},[36,83866,51969],{"class":46},[36,83868,52033],{"class":53},[36,83870,1774],{"class":42},[36,83872,83873],{"class":38,"line":2154},[36,83874,2667],{"class":42},[36,83876,83877],{"class":38,"line":2159},[36,83878,2880],{"emptyLinePlaceholder":553},[36,83880,83881,83883],{"class":38,"line":2173},[36,83882,79102],{"class":2443},[36,83884,16052],{"class":42},[36,83886,83887,83889,83891,83893,83895],{"class":38,"line":2178},[36,83888,55172],{"class":53},[36,83890,51914],{"class":42},[36,83892,1188],{"class":53},[36,83894,51969],{"class":46},[36,83896,1774],{"class":42},[36,83898,83899,83901,83903,83905,83907,83909,83911],{"class":38,"line":2207},[36,83900,62337],{"class":53},[36,83902,51914],{"class":42},[36,83904,28602],{"class":53},[36,83906,79157],{"class":53},[36,83908,79160],{"class":53},[36,83910,1308],{"class":46},[36,83912,1774],{"class":42},[36,83914,83915,83917,83919,83921],{"class":38,"line":2212},[36,83916,55486],{"class":53},[36,83918,51914],{"class":42},[36,83920,51954],{"class":53},[36,83922,1774],{"class":42},[36,83924,83925,83927,83929,83931,83933,83935,83937],{"class":38,"line":2229},[36,83926,62454],{"class":53},[36,83928,51914],{"class":42},[36,83930,54],{"class":53},[36,83932,51969],{"class":46},[36,83934,51998],{"class":53},[36,83936,62721],{"class":53},[36,83938,1774],{"class":42},[36,83940,83941],{"class":38,"line":2234},[36,83942,2667],{"class":42},[36,83944,83945],{"class":38,"line":2239},[36,83946,2880],{"emptyLinePlaceholder":553},[36,83948,83949,83951],{"class":38,"line":2244},[36,83950,79220],{"class":2443},[36,83952,16052],{"class":42},[36,83954,83955,83957,83959,83961],{"class":38,"line":2258},[36,83956,62502],{"class":53},[36,83958,51914],{"class":42},[36,83960,62507],{"class":53},[36,83962,1774],{"class":42},[36,83964,83965,83967,83969,83971],{"class":38,"line":2263},[36,83966,55361],{"class":53},[36,83968,51914],{"class":42},[36,83970,62295],{"class":53},[36,83972,1774],{"class":42},[36,83974,83975],{"class":38,"line":3057},[36,83976,2667],{"class":42},[36,83978,83979],{"class":38,"line":3071},[36,83980,2880],{"emptyLinePlaceholder":553},[36,83982,83983,83985,83987],{"class":38,"line":3079},[36,83984,79102],{"class":2443},[36,83986,56092],{"class":51777},[36,83988,16052],{"class":42},[36,83990,83991,83993,83995,83997,83999],{"class":38,"line":3084},[36,83992,55248],{"class":53},[36,83994,51914],{"class":42},[36,83996,1225],{"class":53},[36,83998,51969],{"class":46},[36,84000,1774],{"class":42},[36,84002,84003,84005,84007,84009,84011],{"class":38,"line":3090},[36,84004,55262],{"class":53},[36,84006,51914],{"class":42},[36,84008,1225],{"class":53},[36,84010,51969],{"class":46},[36,84012,1774],{"class":42},[36,84014,84015,84017,84019,84021,84023],{"class":38,"line":3096},[36,84016,62227],{"class":53},[36,84018,51914],{"class":42},[36,84020,938],{"class":53},[36,84022,51969],{"class":46},[36,84024,1774],{"class":42},[36,84026,84027],{"class":38,"line":3101},[36,84028,2667],{"class":42},[36,84030,84031],{"class":38,"line":8428},[36,84032,2880],{"emptyLinePlaceholder":553},[36,84034,84035,84037,84039],{"class":38,"line":8452},[36,84036,79102],{"class":2443},[36,84038,62781],{"class":2443},[36,84040,16052],{"class":42},[36,84042,84043,84045,84047,84049,84051],{"class":38,"line":8457},[36,84044,55248],{"class":53},[36,84046,51914],{"class":42},[36,84048,2202],{"class":53},[36,84050,51969],{"class":46},[36,84052,1774],{"class":42},[36,84054,84055],{"class":38,"line":8463},[36,84056,2667],{"class":42},[36,84058,84059],{"class":38,"line":8490},[36,84060,2880],{"emptyLinePlaceholder":553},[36,84062,84063,84065,84067,84070],{"class":38,"line":8495},[36,84064,79102],{"class":2443},[36,84066,62781],{"class":2443},[36,84068,84069],{"class":2443}," .tag",[36,84071,16052],{"class":42},[36,84073,84074,84076,84078,84080],{"class":38,"line":8501},[36,84075,55486],{"class":53},[36,84077,51914],{"class":42},[36,84079,61346],{"class":53},[36,84081,1774],{"class":42},[36,84083,84084,84086,84088,84090,84092],{"class":38,"line":8513},[36,84085,55172],{"class":53},[36,84087,51914],{"class":42},[36,84089,96],{"class":53},[36,84091,51969],{"class":46},[36,84093,1774],{"class":42},[36,84095,84096,84098,84100,84102,84104],{"class":38,"line":8525},[36,84097,55399],{"class":53},[36,84099,51914],{"class":42},[36,84101,154],{"class":53},[36,84103,51969],{"class":46},[36,84105,1774],{"class":42},[36,84107,84108,84110,84112,84114],{"class":38,"line":8537},[36,84109,57893],{"class":53},[36,84111,51914],{"class":42},[36,84113,62547],{"class":53},[36,84115,1774],{"class":42},[36,84117,84118],{"class":38,"line":10196},[36,84119,2667],{"class":42},[36,84121,84122],{"class":38,"line":10221},[36,84123,2880],{"emptyLinePlaceholder":553},[36,84125,84126,84128,84130],{"class":38,"line":10244},[36,84127,79102],{"class":2443},[36,84129,79394],{"class":2443},[36,84131,31944],{"class":42},[36,84133,84134,84136,84139],{"class":38,"line":10268},[36,84135,79102],{"class":2443},[36,84137,84138],{"class":2443}," .sub-total",[36,84140,16052],{"class":42},[36,84142,84143,84145,84147,84149,84151],{"class":38,"line":10273},[36,84144,55399],{"class":53},[36,84146,51914],{"class":42},[36,84148,1263],{"class":53},[36,84150,51969],{"class":46},[36,84152,1774],{"class":42},[36,84154,84155,84157,84159,84161],{"class":38,"line":10278},[36,84156,57893],{"class":53},[36,84158,51914],{"class":42},[36,84160,79417],{"class":53},[36,84162,1774],{"class":42},[36,84164,84165,84167,84169,84171],{"class":38,"line":10283},[36,84166,62314],{"class":53},[36,84168,51914],{"class":42},[36,84170,54],{"class":53},[36,84172,1774],{"class":42},[36,84174,84175],{"class":38,"line":10292},[36,84176,2667],{"class":42},[36,84178,84179],{"class":38,"line":10297},[36,84180,2880],{"emptyLinePlaceholder":553},[36,84182,84183,84185,84187],{"class":38,"line":10303},[36,84184,79102],{"class":2443},[36,84186,79434],{"class":2443},[36,84188,31944],{"class":42},[36,84190,84191,84193,84196],{"class":38,"line":10324},[36,84192,79102],{"class":2443},[36,84194,84195],{"class":2443}," .sub-total::before",[36,84197,31944],{"class":42},[36,84199,84200,84203],{"class":38,"line":10330},[36,84201,84202],{"class":2443},"    .amount::before",[36,84204,16052],{"class":42},[36,84206,84207,84209,84211,84213],{"class":38,"line":10344},[36,84208,79441],{"class":53},[36,84210,51914],{"class":42},[36,84212,79446],{"class":405},[36,84214,1774],{"class":42},[36,84216,84217,84219,84221,84223,84225],{"class":38,"line":10350},[36,84218,55399],{"class":53},[36,84220,51914],{"class":42},[36,84222,154],{"class":53},[36,84224,51969],{"class":46},[36,84226,1774],{"class":42},[36,84228,84229],{"class":38,"line":10377},[36,84230,2667],{"class":42},[36,84232,84233],{"class":38,"line":10386},[36,84234,2880],{"emptyLinePlaceholder":553},[36,84236,84237,84239,84242],{"class":38,"line":10392},[36,84238,79102],{"class":2443},[36,84240,84241],{"class":2443}," .spec",[36,84243,16052],{"class":42},[36,84245,84246,84248,84250,84252],{"class":38,"line":10400},[36,84247,62314],{"class":53},[36,84249,51914],{"class":42},[36,84251,96],{"class":53},[36,84253,1774],{"class":42},[36,84255,84256,84258,84260,84263],{"class":38,"line":10405},[36,84257,57893],{"class":53},[36,84259,51914],{"class":42},[36,84261,84262],{"class":53},"#888",[36,84264,1774],{"class":42},[36,84266,84267,84269,84271,84273,84275],{"class":38,"line":17084},[36,84268,55399],{"class":53},[36,84270,51914],{"class":42},[36,84272,1162],{"class":53},[36,84274,51969],{"class":46},[36,84276,1774],{"class":42},[36,84278,84279,84281,84283,84285,84287],{"class":38,"line":17090},[36,84280,62477],{"class":53},[36,84282,51914],{"class":42},[36,84284,1313],{"class":53},[36,84286,51969],{"class":46},[36,84288,1774],{"class":42},[36,84290,84291],{"class":38,"line":17113},[36,84292,2667],{"class":42},[36,84294,84295],{"class":38,"line":17119},[36,84296,2880],{"emptyLinePlaceholder":553},[36,84298,84299,84301,84304],{"class":38,"line":17142},[36,84300,79102],{"class":2443},[36,84302,84303],{"class":2443}," .count",[36,84305,16052],{"class":42},[36,84307,84308,84310,84312,84314],{"class":38,"line":17156},[36,84309,62314],{"class":53},[36,84311,51914],{"class":42},[36,84313,54],{"class":53},[36,84315,1774],{"class":42},[36,84317,84318,84320,84322,84325],{"class":38,"line":17176},[36,84319,57893],{"class":53},[36,84321,51914],{"class":42},[36,84323,84324],{"class":53},"#aaa",[36,84326,1774],{"class":42},[36,84328,84329],{"class":38,"line":17182},[36,84330,2667],{"class":42},[36,84332,84333],{"class":38,"line":17193},[36,84334,2880],{"emptyLinePlaceholder":553},[36,84336,84337,84339],{"class":38,"line":17216},[36,84338,72952],{"class":2443},[36,84340,16052],{"class":42},[36,84342,84343,84345,84347,84349,84351],{"class":38,"line":17238},[36,84344,55248],{"class":53},[36,84346,51914],{"class":42},[36,84348,79051],{"class":53},[36,84350,51969],{"class":46},[36,84352,1774],{"class":42},[36,84354,84355,84357,84359,84361,84363],{"class":38,"line":17243},[36,84356,55183],{"class":53},[36,84358,51914],{"class":42},[36,84360,812],{"class":53},[36,84362,52033],{"class":53},[36,84364,1774],{"class":42},[36,84366,84367,84369,84371,84373],{"class":38,"line":17249},[36,84368,55486],{"class":53},[36,84370,51914],{"class":42},[36,84372,51954],{"class":53},[36,84374,1774],{"class":42},[36,84376,84377,84379,84381,84383],{"class":38,"line":17263},[36,84378,55497],{"class":53},[36,84380,51914],{"class":42},[36,84382,52057],{"class":53},[36,84384,1774],{"class":42},[36,84386,84387,84390,84392,84394,84396,84398,84401],{"class":38,"line":17276},[36,84388,84389],{"class":53},"      border-top",[36,84391,51914],{"class":42},[36,84393,54],{"class":53},[36,84395,51969],{"class":46},[36,84397,51998],{"class":53},[36,84399,84400],{"class":53}," #4e4e4e",[36,84402,1774],{"class":42},[36,84404,84405,84407,84409,84411,84413],{"class":38,"line":17281},[36,84406,55172],{"class":53},[36,84408,51914],{"class":42},[36,84410,1313],{"class":53},[36,84412,51969],{"class":46},[36,84414,1774],{"class":42},[36,84416,84417],{"class":38,"line":17295},[36,84418,2667],{"class":42},[36,84420,84421],{"class":38,"line":17300},[36,84422,2880],{"emptyLinePlaceholder":553},[36,84424,84425,84427,84430],{"class":38,"line":17306},[36,84426,72952],{"class":2443},[36,84428,84429],{"class":2443}," .amount",[36,84431,16052],{"class":42},[36,84433,84434,84436,84438,84440,84442],{"class":38,"line":17311},[36,84435,55399],{"class":53},[36,84437,51914],{"class":42},[36,84439,1263],{"class":53},[36,84441,51969],{"class":46},[36,84443,1774],{"class":42},[36,84445,84446,84448,84450,84452],{"class":38,"line":17325},[36,84447,57893],{"class":53},[36,84449,51914],{"class":42},[36,84451,79417],{"class":53},[36,84453,1774],{"class":42},[36,84455,84456,84458,84460,84462],{"class":38,"line":17330},[36,84457,62811],{"class":53},[36,84459,51914],{"class":42},[36,84461,51966],{"class":53},[36,84463,1774],{"class":42},[36,84465,84466,84468,84470,84472,84474],{"class":38,"line":17335},[36,84467,62227],{"class":53},[36,84469,51914],{"class":42},[36,84471,1269],{"class":53},[36,84473,51969],{"class":46},[36,84475,1774],{"class":42},[36,84477,84478],{"class":38,"line":17349},[36,84479,2667],{"class":42},[36,84481,84482,84484,84486],{"class":38,"line":17361},[36,84483,52894],{"class":42},[36,84485,539],{"class":51777},[36,84487,51784],{"class":42},[36,84489,84490,84492,84494],{"class":38,"line":17366},[36,84491,52262],{"class":42},[36,84493,51811],{"class":51777},[36,84495,51784],{"class":42},[36,84497,84498],{"class":38,"line":17379},[36,84499,2880],{"emptyLinePlaceholder":553},[36,84501,84502,84504,84506],{"class":38,"line":17384},[36,84503,1523],{"class":42},[36,84505,52277],{"class":51777},[36,84507,51784],{"class":42},[36,84509,84510,84512,84514,84516,84518,84520],{"class":38,"line":17389},[36,84511,52621],{"class":42},[36,84513,52088],{"class":51777},[36,84515,53963],{"class":2443},[36,84517,47],{"class":42},[36,84519,63085],{"class":405},[36,84521,51784],{"class":42},[36,84523,84524,84526,84528],{"class":38,"line":17394},[36,84525,52894],{"class":42},[36,84527,52088],{"class":51777},[36,84529,51784],{"class":42},[36,84531,84532,84534,84536,84538,84540,84542],{"class":38,"line":17407},[36,84533,52621],{"class":42},[36,84535,52088],{"class":51777},[36,84537,53963],{"class":2443},[36,84539,47],{"class":42},[36,84541,63057],{"class":405},[36,84543,51784],{"class":42},[36,84545,84546,84548,84550,84553,84555,84557,84559,84562,84564,84566,84568,84570],{"class":38,"line":17412},[36,84547,51818],{"class":42},[36,84549,52088],{"class":51777},[36,84551,84552],{"class":42},">合计：\u003C",[36,84554,36],{"class":51777},[36,84556,53963],{"class":2443},[36,84558,47],{"class":42},[36,84560,84561],{"class":405},"\"amount\"",[36,84563,55791],{"class":42},[36,84565,36],{"class":51777},[36,84567,55791],{"class":42},[36,84569,52088],{"class":51777},[36,84571,51784],{"class":42},[36,84573,84574,84576,84578],{"class":38,"line":33110},[36,84575,52894],{"class":42},[36,84577,52088],{"class":51777},[36,84579,51784],{"class":42},[36,84581,84582,84584,84586],{"class":38,"line":33116},[36,84583,52621],{"class":42},[36,84585,52290],{"class":51777},[36,84587,51784],{"class":42},[36,84589,84590,84592,84594,84596],{"class":38,"line":33122},[36,84591,11701],{"class":46},[36,84593,79854],{"class":53},[36,84595,14044],{"class":46},[36,84597,55924],{"class":42},[36,84599,84600],{"class":38,"line":33128},[36,84601,79863],{"class":42},[36,84603,84604,84606,84608],{"class":38,"line":33134},[36,84605,79868],{"class":42},[36,84607,79871],{"class":405},[36,84609,31944],{"class":42},[36,84611,84612,84614,84616],{"class":38,"line":33145},[36,84613,79878],{"class":42},[36,84615,79881],{"class":405},[36,84617,31944],{"class":42},[36,84619,84620,84622,84625],{"class":38,"line":33151},[36,84621,79888],{"class":42},[36,84623,84624],{"class":53},"289.9",[36,84626,31944],{"class":42},[36,84628,84629,84631,84633],{"class":38,"line":33171},[36,84630,79898],{"class":42},[36,84632,79901],{"class":405},[36,84634,31944],{"class":42},[36,84636,84637,84640,84642],{"class":38,"line":33177},[36,84638,84639],{"class":42},"        count: ",[36,84641,96],{"class":53},[36,84643,31944],{"class":42},[36,84645,84646,84649,84652],{"class":38,"line":33188},[36,84647,84648],{"class":42},"        spec: { color: ",[36,84650,84651],{"class":405},"'白色'",[36,84653,56081],{"class":42},[36,84655,84656],{"class":38,"line":33194},[36,84657,78369],{"class":42},[36,84659,84660],{"class":38,"line":33200},[36,84661,79863],{"class":42},[36,84663,84664,84666,84668],{"class":38,"line":33206},[36,84665,79868],{"class":42},[36,84667,79962],{"class":405},[36,84669,31944],{"class":42},[36,84671,84672,84674,84676],{"class":38,"line":33212},[36,84673,79878],{"class":42},[36,84675,79971],{"class":405},[36,84677,31944],{"class":42},[36,84679,84680,84682,84685],{"class":38,"line":33218},[36,84681,79888],{"class":42},[36,84683,84684],{"class":53},"109.8",[36,84686,31944],{"class":42},[36,84688,84689,84691,84693],{"class":38,"line":33224},[36,84690,79898],{"class":42},[36,84692,79989],{"class":405},[36,84694,31944],{"class":42},[36,84696,84697,84699,84701],{"class":38,"line":33230},[36,84698,84639],{"class":42},[36,84700,127],{"class":53},[36,84702,31944],{"class":42},[36,84704,84705,84708,84710,84712,84714],{"class":38,"line":33250},[36,84706,84707],{"class":42},"        spec: { size: ",[36,84709,82380],{"class":405},[36,84711,55941],{"class":42},[36,84713,82385],{"class":405},[36,84715,56081],{"class":42},[36,84717,84718],{"class":38,"line":33256},[36,84719,78369],{"class":42},[36,84721,84722],{"class":38,"line":33272},[36,84723,79863],{"class":42},[36,84725,84726,84728,84730],{"class":38,"line":33278},[36,84727,79868],{"class":42},[36,84729,80006],{"class":405},[36,84731,31944],{"class":42},[36,84733,84734,84736,84738],{"class":38,"line":33292},[36,84735,79878],{"class":42},[36,84737,80015],{"class":405},[36,84739,31944],{"class":42},[36,84741,84742,84744,84747],{"class":38,"line":33298},[36,84743,79888],{"class":42},[36,84745,84746],{"class":53},"488",[36,84748,31944],{"class":42},[36,84750,84751,84753,84755],{"class":38,"line":33313},[36,84752,79898],{"class":42},[36,84754,80033],{"class":405},[36,84756,31944],{"class":42},[36,84758,84759,84761,84763],{"class":38,"line":33319},[36,84760,84639],{"class":42},[36,84762,54],{"class":53},[36,84764,31944],{"class":42},[36,84766,84767,84769,84772,84775,84778],{"class":38,"line":33328},[36,84768,84648],{"class":42},[36,84770,84771],{"class":405},"'青色'",[36,84773,84774],{"class":42},", sum: ",[36,84776,84777],{"class":405},"'一大四小'",[36,84779,56081],{"class":42},[36,84781,84782],{"class":38,"line":33334},[36,84783,78369],{"class":42},[36,84785,84786],{"class":38,"line":33343},[36,84787,79863],{"class":42},[36,84789,84790,84792,84794],{"class":38,"line":33349},[36,84791,79868],{"class":42},[36,84793,80050],{"class":405},[36,84795,31944],{"class":42},[36,84797,84798,84800,84802],{"class":38,"line":33355},[36,84799,79878],{"class":42},[36,84801,80059],{"class":405},[36,84803,31944],{"class":42},[36,84805,84806,84808,84811],{"class":38,"line":33364},[36,84807,79888],{"class":42},[36,84809,84810],{"class":53},"139",[36,84812,31944],{"class":42},[36,84814,84815,84817,84819],{"class":38,"line":33370},[36,84816,79898],{"class":42},[36,84818,80077],{"class":405},[36,84820,31944],{"class":42},[36,84822,84823,84825,84827],{"class":38,"line":33381},[36,84824,84639],{"class":42},[36,84826,54],{"class":53},[36,84828,31944],{"class":42},[36,84830,84831,84833,84836,84838,84841],{"class":38,"line":33387},[36,84832,84707],{"class":42},[36,84834,84835],{"class":405},"'小号'",[36,84837,55941],{"class":42},[36,84839,84840],{"class":405},"'紫色'",[36,84842,55947],{"class":42},[36,84844,84845,84848],{"class":38,"line":33406},[36,84846,84847],{"class":42},"        gift: ",[36,84849,84850],{"class":405},"'50g茶叶,清洗球'\n",[36,84852,84853],{"class":38,"line":33412},[36,84854,52875],{"class":42},[36,84856,84857],{"class":38,"line":33423},[36,84858,53586],{"class":42},[36,84860,84861],{"class":38,"line":33429},[36,84862,84863],{"class":69},"    \u002F\u002F  1.根据数据渲染页面\n",[36,84865,84866,84868,84870,84872,84874,84876,84878,84880,84882,84884,84886,84888],{"class":38,"line":33449},[36,84867,52884],{"class":42},[36,84869,54876],{"class":2443},[36,84871,345],{"class":42},[36,84873,80378],{"class":405},[36,84875,74726],{"class":42},[36,84877,47],{"class":46},[36,84879,80525],{"class":42},[36,84881,74521],{"class":2443},[36,84883,345],{"class":42},[36,84885,80272],{"class":5696},[36,84887,80275],{"class":46},[36,84889,16052],{"class":42},[36,84891,84892],{"class":38,"line":33465},[36,84893,84894],{"class":69},"      \u002F\u002F 对象解构\n",[36,84896,84897,84899,84901,84903,84905,84907,84909,84912,84914,84916,84918,84921,84923,84926,84928,84930],{"class":38,"line":33471},[36,84898,58705],{"class":46},[36,84900,80284],{"class":42},[36,84902,80297],{"class":53},[36,84904,12915],{"class":42},[36,84906,80287],{"class":53},[36,84908,12915],{"class":42},[36,84910,84911],{"class":53},"count",[36,84913,12915],{"class":42},[36,84915,80292],{"class":53},[36,84917,12915],{"class":42},[36,84919,84920],{"class":53},"spec",[36,84922,12915],{"class":42},[36,84924,84925],{"class":53},"gift",[36,84927,80300],{"class":42},[36,84929,47],{"class":46},[36,84931,80305],{"class":42},[36,84933,84934],{"class":38,"line":33485},[36,84935,84936],{"class":69},"      \u002F\u002F 规格文字模块处理\n",[36,84938,84939,84941,84944,84946,84948,84950,84952,84954,84956,84958],{"class":38,"line":33491},[36,84940,58705],{"class":46},[36,84942,84943],{"class":53}," text",[36,84945,14044],{"class":46},[36,84947,82415],{"class":42},[36,84949,82418],{"class":2443},[36,84951,82421],{"class":42},[36,84953,74700],{"class":2443},[36,84955,345],{"class":42},[36,84957,82428],{"class":405},[36,84959,63],{"class":42},[36,84961,84962],{"class":38,"line":33497},[36,84963,84964],{"class":69},"      \u002F\u002F 处理赠品模块\n",[36,84966,84967,84969,84971,84973,84976,84978,84980,84982,84984,84987,84989,84991,84993,84995,84997,85000,85002,85005,85007,85009,85011,85013,85015,85017],{"class":38,"line":33508},[36,84968,58705],{"class":46},[36,84970,74396],{"class":53},[36,84972,14044],{"class":46},[36,84974,84975],{"class":42}," gift ",[36,84977,1599],{"class":46},[36,84979,83589],{"class":42},[36,84981,83592],{"class":2443},[36,84983,345],{"class":42},[36,84985,84986],{"class":405},"','",[36,84988,31304],{"class":42},[36,84990,74521],{"class":2443},[36,84992,345],{"class":42},[36,84994,80272],{"class":5696},[36,84996,80275],{"class":46},[36,84998,84999],{"class":405}," `\u003Cspan class=\"tag\">【赠品】${",[36,85001,80272],{"class":42},[36,85003,85004],{"class":405},"}\u003C\u002Fspan>`",[36,85006,31304],{"class":42},[36,85008,74700],{"class":2443},[36,85010,345],{"class":42},[36,85012,74705],{"class":405},[36,85014,14194],{"class":42},[36,85016,1472],{"class":46},[36,85018,70581],{"class":405},[36,85020,85021],{"class":38,"line":33514},[36,85022,85023],{"class":69},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,85025,85026,85028,85031,85033,85036,85038,85040,85042,85045,85047,85049,85051,85054,85056,85058],{"class":38,"line":33520},[36,85027,58705],{"class":46},[36,85029,85030],{"class":53}," subtotal",[36,85032,14044],{"class":46},[36,85034,85035],{"class":42}," ((price ",[36,85037,1071],{"class":46},[36,85039,6234],{"class":53},[36,85041,6998],{"class":46},[36,85043,85044],{"class":42}," count) ",[36,85046,1197],{"class":46},[36,85048,6234],{"class":53},[36,85050,31304],{"class":42},[36,85052,85053],{"class":2443},"toFixed",[36,85055,345],{"class":42},[36,85057,96],{"class":53},[36,85059,63],{"class":42},[36,85061,85062],{"class":38,"line":33530},[36,85063,2880],{"emptyLinePlaceholder":553},[36,85065,85066,85068],{"class":38,"line":33536},[36,85067,74459],{"class":46},[36,85069,70645],{"class":405},[36,85071,85072],{"class":38,"line":33547},[36,85073,85074],{"class":405},"        \u003Cdiv class=\"item\">\n",[36,85076,85077,85080,85082],{"class":38,"line":33553},[36,85078,85079],{"class":405},"          \u003Cimg src=\"${",[36,85081,80297],{"class":42},[36,85083,80329],{"class":405},[36,85085,85086,85089,85091,85094,85096],{"class":38,"line":33563},[36,85087,85088],{"class":405},"          \u003Cp class=\"name\">${",[36,85090,80287],{"class":42},[36,85092,85093],{"class":405},"}${",[36,85095,1783],{"class":42},[36,85097,80339],{"class":405},[36,85099,85100,85103,85105],{"class":38,"line":33568},[36,85101,85102],{"class":405},"          \u003Cp class=\"spec\">${",[36,85104,5667],{"class":42},[36,85106,80339],{"class":405},[36,85108,85109,85112,85114,85116,85118,85120,85122,85124],{"class":38,"line":33574},[36,85110,85111],{"class":405},"          \u003Cp class=\"price\">${",[36,85113,80292],{"class":42},[36,85115,1171],{"class":405},[36,85117,85053],{"class":2443},[36,85119,345],{"class":405},[36,85121,96],{"class":53},[36,85123,231],{"class":405},[36,85125,80339],{"class":405},[36,85127,85128,85131,85133],{"class":38,"line":33623},[36,85129,85130],{"class":405},"          \u003Cp class=\"count\">x${",[36,85132,84911],{"class":42},[36,85134,80339],{"class":405},[36,85136,85137,85140,85143],{"class":38,"line":33670},[36,85138,85139],{"class":405},"          \u003Cp class=\"sub-total\">${",[36,85141,85142],{"class":42},"subtotal",[36,85144,80339],{"class":405},[36,85146,85147],{"class":38,"line":33675},[36,85148,85149],{"class":405},"        \u003C\u002Fdiv> \n",[36,85151,85152],{"class":38,"line":33681},[36,85153,85154],{"class":405},"             `\n",[36,85156,85157,85160,85162,85164,85166],{"class":38,"line":33700},[36,85158,85159],{"class":42},"    }).",[36,85161,74700],{"class":2443},[36,85163,345],{"class":42},[36,85165,74705],{"class":405},[36,85167,63],{"class":42},[36,85169,85170],{"class":38,"line":33706},[36,85171,85172],{"class":69},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,85174,85175,85177,85179,85181,85183,85186,85188,85191,85193,85195,85197,85200,85203,85205,85208,85210,85212,85214,85217,85219,85221,85223,85225],{"class":38,"line":33726},[36,85176,11701],{"class":46},[36,85178,63262],{"class":53},[36,85180,14044],{"class":46},[36,85182,80525],{"class":42},[36,85184,85185],{"class":2443},"reduce",[36,85187,2856],{"class":42},[36,85189,85190],{"class":5696},"prev",[36,85192,12915],{"class":42},[36,85194,80272],{"class":5696},[36,85196,14194],{"class":42},[36,85198,85199],{"class":46},"=>",[36,85201,85202],{"class":42}," prev ",[36,85204,1097],{"class":46},[36,85206,85207],{"class":42}," (item.price ",[36,85209,1071],{"class":46},[36,85211,6234],{"class":53},[36,85213,6998],{"class":46},[36,85215,85216],{"class":42}," item.count) ",[36,85218,1197],{"class":46},[36,85220,6234],{"class":53},[36,85222,12915],{"class":42},[36,85224,812],{"class":53},[36,85226,63],{"class":42},[36,85228,85229,85231,85233,85235,85238,85240,85242,85245,85247,85249,85251],{"class":38,"line":33732},[36,85230,52884],{"class":42},[36,85232,54876],{"class":2443},[36,85234,345],{"class":42},[36,85236,85237],{"class":405},"'.amount'",[36,85239,74726],{"class":42},[36,85241,47],{"class":46},[36,85243,85244],{"class":42}," total.",[36,85246,85053],{"class":2443},[36,85248,345],{"class":42},[36,85250,96],{"class":53},[36,85252,63],{"class":42},[36,85254,85255,85257,85259],{"class":38,"line":33738},[36,85256,52894],{"class":42},[36,85258,52290],{"class":51777},[36,85260,51784],{"class":42},[36,85262,85263,85265,85267],{"class":38,"line":33748},[36,85264,52262],{"class":42},[36,85266,52277],{"class":51777},[36,85268,51784],{"class":42},[36,85270,85271],{"class":38,"line":33753},[36,85272,2880],{"emptyLinePlaceholder":553},[36,85274,85275,85277,85279],{"class":38,"line":33759},[36,85276,52262],{"class":42},[36,85278,51112],{"class":51777},[36,85280,51784],{"class":42},[14,85282,85284],{"id":85283},"_411-编程思想","4.11 编程思想",[596,85286,85288],{"id":85287},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85290,85291,85294],{},[770,85292,85293],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85296,85297],{},"调用就可以了",[19,85299,85300],{},[519,85301],{"alt":31,"src":85302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[596,85304,85306],{"id":85305},"_4112-面向对象","4.11.2 面向对象",[19,85308,85309],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85311,85312],{},[519,85313],{"alt":31,"src":85314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85316,85317],{},"面向对象的特性：",[1620,85319,85320,85323,85326],{},[582,85321,85322],{},"封装性",[582,85324,85325],{},"继承性",[582,85327,85328],{},"多态性",[596,85330,85332],{"id":85331},"_4113-两者比较","4.11.3 两者比较",[19,85334,85335],{},[519,85336],{"alt":31,"src":85337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85339,85341],{"id":85340},"_412-构造函数回顾","4.12 构造函数回顾",[19,85343,85344],{},[519,85345],{"alt":31,"src":85346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85348,85349],{},[519,85350],{"alt":31,"src":85351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85353,85354],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85356,85357],{},[519,85358],{"alt":31,"src":85359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85361,85363],{"id":85362},"_413-原型","4.13 原型",[596,85365,85367],{"id":85366},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85369,85370],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85372,85373],{},[519,85374],{"alt":31,"src":85375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85377,85378],{},[519,85379],{"alt":31,"src":85380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85382,85383],{},"原型是构造函数的属性，它也是一个对象",[19,85385,85386],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85388,85389],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,85391,85393],{"className":53544,"code":85392,"language":53546,"meta":31,"style":31},"\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",[33,85394,85395,85403,85408,85416,85421,85426,85431,85436,85441,85445,85449,85453,85458,85463,85467,85472,85477,85482,85487,85492,85496,85504],{"__ignoreMap":31},[36,85396,85397,85399,85401],{"class":38,"line":39},[36,85398,1523],{"class":42},[36,85400,52277],{"class":51777},[36,85402,51784],{"class":42},[36,85404,85405],{"class":38,"line":66},[36,85406,85407],{"class":69},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,85409,85410,85412,85414],{"class":38,"line":73},[36,85411,52621],{"class":42},[36,85413,52290],{"class":51777},[36,85415,51784],{"class":42},[36,85417,85418],{"class":38,"line":79},[36,85419,85420],{"class":42},"    function Star(uname, age) {\n",[36,85422,85423],{"class":38,"line":85},[36,85424,85425],{"class":42},"      this.uname = uname,\n",[36,85427,85428],{"class":38,"line":419},[36,85429,85430],{"class":42},"        this.age = age\n",[36,85432,85433],{"class":38,"line":425},[36,85434,85435],{"class":42},"      \u002F\u002F this.sing = function () {\n",[36,85437,85438],{"class":38,"line":431},[36,85439,85440],{"class":42},"      \u002F\u002F   console.log('唱歌')\n",[36,85442,85443],{"class":38,"line":437},[36,85444,2880],{"emptyLinePlaceholder":553},[36,85446,85447],{"class":38,"line":443},[36,85448,60514],{"class":42},[36,85450,85451],{"class":38,"line":2092},[36,85452,2667],{"class":42},[36,85454,85455],{"class":38,"line":2097},[36,85456,85457],{"class":42},"    Star.prototype.sing = function () {\n",[36,85459,85460],{"class":38,"line":2103},[36,85461,85462],{"class":42},"      console.log('唱歌')\n",[36,85464,85465],{"class":38,"line":2108},[36,85466,2667],{"class":42},[36,85468,85469],{"class":38,"line":2122},[36,85470,85471],{"class":42},"    \u002F\u002F console.dir(Star.prototype)\n",[36,85473,85474],{"class":38,"line":2127},[36,85475,85476],{"class":42},"    const pink = new Star('pink', 18)\n",[36,85478,85479],{"class":38,"line":2133},[36,85480,85481],{"class":42},"    const red = new Star('red', 20)\n",[36,85483,85484],{"class":38,"line":2154},[36,85485,85486],{"class":42},"    pink.sing()\n",[36,85488,85489],{"class":38,"line":2159},[36,85490,85491],{"class":42},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,85493,85494],{"class":38,"line":2173},[36,85495,2880],{"emptyLinePlaceholder":553},[36,85497,85498,85500,85502],{"class":38,"line":2178},[36,85499,52894],{"class":42},[36,85501,52290],{"class":51777},[36,85503,51784],{"class":42},[36,85505,85506,85508,85510],{"class":38,"line":2207},[36,85507,52262],{"class":42},[36,85509,52277],{"class":51777},[36,85511,51784],{"class":42},[19,85513,85514],{},[519,85515],{"alt":31,"src":85516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,85518,85520],{"className":53544,"code":85519,"language":53546,"meta":31,"style":31},"\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",[33,85521,85522,85530,85538,85543,85548,85553,85558,85562,85567,85572,85577,85581,85586,85590,85594,85599,85603,85611],{"__ignoreMap":31},[36,85523,85524,85526,85528],{"class":38,"line":39},[36,85525,1523],{"class":42},[36,85527,52277],{"class":51777},[36,85529,51784],{"class":42},[36,85531,85532,85534,85536],{"class":38,"line":66},[36,85533,52621],{"class":42},[36,85535,52290],{"class":51777},[36,85537,51784],{"class":42},[36,85539,85540],{"class":38,"line":73},[36,85541,85542],{"class":42},"    let that\n",[36,85544,85545],{"class":38,"line":79},[36,85546,85547],{"class":42},"    function Star(uname) {\n",[36,85549,85550],{"class":38,"line":85},[36,85551,85552],{"class":42},"      this.uname = uname\n",[36,85554,85555],{"class":38,"line":419},[36,85556,85557],{"class":42},"      that = this\n",[36,85559,85560],{"class":38,"line":425},[36,85561,2667],{"class":42},[36,85563,85564],{"class":38,"line":431},[36,85565,85566],{"class":42},"    \u002F\u002F 实例对象是 ldh\n",[36,85568,85569],{"class":38,"line":437},[36,85570,85571],{"class":42},"    const ldh = new Star('刘德华')\n",[36,85573,85574],{"class":38,"line":443},[36,85575,85576],{"class":42},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,85578,85579],{"class":38,"line":2092},[36,85580,2880],{"emptyLinePlaceholder":553},[36,85582,85583],{"class":38,"line":2097},[36,85584,85585],{"class":42},"    Star.sing = function () {\n",[36,85587,85588],{"class":38,"line":2103},[36,85589,85462],{"class":42},[36,85591,85592],{"class":38,"line":2108},[36,85593,2667],{"class":42},[36,85595,85596],{"class":38,"line":2122},[36,85597,85598],{"class":42},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,85600,85601],{"class":38,"line":2127},[36,85602,2880],{"emptyLinePlaceholder":553},[36,85604,85605,85607,85609],{"class":38,"line":2133},[36,85606,52894],{"class":42},[36,85608,52290],{"class":51777},[36,85610,51784],{"class":42},[36,85612,85613,85615,85617],{"class":38,"line":2154},[36,85614,52262],{"class":42},[36,85616,52277],{"class":51777},[36,85618,51784],{"class":42},[19,85620,85621],{},"构造函数的this指向的是实例对象；",[19,85623,85624],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[596,85626,85628],{"id":85627},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85630,85631],{},[519,85632],{"alt":31,"src":85633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,85635,85637],{"className":53544,"code":85636,"language":53546,"meta":31,"style":31},"\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",[33,85638,85639,85647,85655,85660,85665,85670,85675,85680,85685,85690,85695,85700,85705,85709,85714,85719,85724,85729,85733,85738,85743,85748,85753,85757,85762,85767,85772,85777,85781,85786,85790,85798],{"__ignoreMap":31},[36,85640,85641,85643,85645],{"class":38,"line":39},[36,85642,1523],{"class":42},[36,85644,52277],{"class":51777},[36,85646,51784],{"class":42},[36,85648,85649,85651,85653],{"class":38,"line":66},[36,85650,52621],{"class":42},[36,85652,52290],{"class":51777},[36,85654,51784],{"class":42},[36,85656,85657],{"class":38,"line":73},[36,85658,85659],{"class":42},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,85661,85662],{"class":38,"line":79},[36,85663,85664],{"class":42},"    const arr = [1, 2, 3]\n",[36,85666,85667],{"class":38,"line":85},[36,85668,85669],{"class":42},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,85671,85672],{"class":38,"line":419},[36,85673,85674],{"class":42},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,85676,85677],{"class":38,"line":425},[36,85678,85679],{"class":42},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,85681,85682],{"class":38,"line":431},[36,85683,85684],{"class":42},"    \u002F\u002F ①.最大值\n",[36,85686,85687],{"class":38,"line":437},[36,85688,85689],{"class":42},"    Array.prototype.max = function () {\n",[36,85691,85692],{"class":38,"line":443},[36,85693,85694],{"class":42},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,85696,85697],{"class":38,"line":2092},[36,85698,85699],{"class":42},"      return Math.max(...this)\n",[36,85701,85702],{"class":38,"line":2097},[36,85703,85704],{"class":42},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,85706,85707],{"class":38,"line":2103},[36,85708,2667],{"class":42},[36,85710,85711],{"class":38,"line":2108},[36,85712,85713],{"class":42},"    console.log(arr.max())\n",[36,85715,85716],{"class":38,"line":2122},[36,85717,85718],{"class":42},"    \u002F\u002F ②最小值\n",[36,85720,85721],{"class":38,"line":2127},[36,85722,85723],{"class":42},"    Array.prototype.min = function () {\n",[36,85725,85726],{"class":38,"line":2133},[36,85727,85728],{"class":42},"      return Math.min(...this)\n",[36,85730,85731],{"class":38,"line":2154},[36,85732,2667],{"class":42},[36,85734,85735],{"class":38,"line":2159},[36,85736,85737],{"class":42},"    console.log(arr.min())\n",[36,85739,85740],{"class":38,"line":2173},[36,85741,85742],{"class":42},"    \u002F\u002F③求和\n",[36,85744,85745],{"class":38,"line":2178},[36,85746,85747],{"class":42},"    Array.prototype.sum = function () {\n",[36,85749,85750],{"class":38,"line":2207},[36,85751,85752],{"class":42},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,85754,85755],{"class":38,"line":2212},[36,85756,2667],{"class":42},[36,85758,85759],{"class":38,"line":2229},[36,85760,85761],{"class":42},"    console.log(arr.sum())\n",[36,85763,85764],{"class":38,"line":2234},[36,85765,85766],{"class":42},"    \u002F\u002F ③排序\n",[36,85768,85769],{"class":38,"line":2239},[36,85770,85771],{"class":42},"    Array.prototype.rever = function () {\n",[36,85773,85774],{"class":38,"line":2244},[36,85775,85776],{"class":42},"      return this.reverse()\n",[36,85778,85779],{"class":38,"line":2258},[36,85780,2667],{"class":42},[36,85782,85783],{"class":38,"line":2263},[36,85784,85785],{"class":42},"    console.log(arr.rever())\n",[36,85787,85788],{"class":38,"line":3057},[36,85789,2880],{"emptyLinePlaceholder":553},[36,85791,85792,85794,85796],{"class":38,"line":3071},[36,85793,52894],{"class":42},[36,85795,52290],{"class":51777},[36,85797,51784],{"class":42},[36,85799,85800,85802,85804],{"class":38,"line":3079},[36,85801,52262],{"class":42},[36,85803,52277],{"class":51777},[36,85805,51784],{"class":42},[19,85807,85808],{},[519,85809],{"alt":31,"src":85810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[596,85812,85814],{"id":85813},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85816,85817],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85819,85820],{},[519,85821],{"alt":31,"src":85822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,85824,85826],{"className":53544,"code":85825,"language":53546,"meta":31,"style":31},"\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",[33,85827,85828,85836,85844,85849,85854,85858,85863,85868,85873,85881],{"__ignoreMap":31},[36,85829,85830,85832,85834],{"class":38,"line":39},[36,85831,1523],{"class":42},[36,85833,52277],{"class":51777},[36,85835,51784],{"class":42},[36,85837,85838,85840,85842],{"class":38,"line":66},[36,85839,52621],{"class":42},[36,85841,52290],{"class":51777},[36,85843,51784],{"class":42},[36,85845,85846],{"class":38,"line":73},[36,85847,85848],{"class":42},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,85850,85851],{"class":38,"line":79},[36,85852,85853],{"class":42},"    function Star() {\n",[36,85855,85856],{"class":38,"line":85},[36,85857,2667],{"class":42},[36,85859,85860],{"class":38,"line":419},[36,85861,85862],{"class":42},"    const ldh = new Star()\n",[36,85864,85865],{"class":38,"line":425},[36,85866,85867],{"class":42},"    console.log(Star.prototype)\n",[36,85869,85870],{"class":38,"line":431},[36,85871,85872],{"class":42},"    console.log(Star.prototype.constructor === Star)\n",[36,85874,85875,85877,85879],{"class":38,"line":437},[36,85876,52894],{"class":42},[36,85878,52290],{"class":51777},[36,85880,51784],{"class":42},[36,85882,85883,85885,85887],{"class":38,"line":443},[36,85884,52262],{"class":42},[36,85886,52277],{"class":51777},[36,85888,51784],{"class":42},[19,85890,85891],{},[519,85892],{"alt":31,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85895,85896],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,85898,85900],{"className":53544,"code":85899,"language":53546,"meta":31,"style":31},"  \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",[33,85901,85902,85910,85914,85918,85922,85927,85932,85937,85941,85946,85951,85956,85961,85966,85971,85975,85979,85984,85989,85994,85998,86003,86008,86012,86016,86020],{"__ignoreMap":31},[36,85903,85904,85906,85908],{"class":38,"line":39},[36,85905,52621],{"class":42},[36,85907,52290],{"class":51777},[36,85909,51784],{"class":42},[36,85911,85912],{"class":38,"line":66},[36,85913,85848],{"class":42},[36,85915,85916],{"class":38,"line":73},[36,85917,85853],{"class":42},[36,85919,85920],{"class":38,"line":79},[36,85921,2667],{"class":42},[36,85923,85924],{"class":38,"line":85},[36,85925,85926],{"class":42},"    \u002F\u002F const ldh = new Star()\n",[36,85928,85929],{"class":38,"line":419},[36,85930,85931],{"class":42},"    \u002F\u002F console.log(Star.prototype)\n",[36,85933,85934],{"class":38,"line":425},[36,85935,85936],{"class":42},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,85938,85939],{"class":38,"line":431},[36,85940,2880],{"emptyLinePlaceholder":553},[36,85942,85943],{"class":38,"line":437},[36,85944,85945],{"class":42},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,85947,85948],{"class":38,"line":443},[36,85949,85950],{"class":42},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,85952,85953],{"class":38,"line":2092},[36,85954,85955],{"class":42},"    \u002F\u002F   console.log('唱歌')\n",[36,85957,85958],{"class":38,"line":2097},[36,85959,85960],{"class":42},"    \u002F\u002F }\n",[36,85962,85963],{"class":38,"line":2103},[36,85964,85965],{"class":42},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,85967,85968],{"class":38,"line":2108},[36,85969,85970],{"class":42},"    \u002F\u002F   console.log('跳舞')\n",[36,85972,85973],{"class":38,"line":2122},[36,85974,85960],{"class":42},[36,85976,85977],{"class":38,"line":2127},[36,85978,85867],{"class":42},[36,85980,85981],{"class":38,"line":2133},[36,85982,85983],{"class":42},"    Star.prototype = {\n",[36,85985,85986],{"class":38,"line":2154},[36,85987,85988],{"class":42},"      sing: function () {\n",[36,85990,85991],{"class":38,"line":2159},[36,85992,85993],{"class":42},"        console.log('唱歌')\n",[36,85995,85996],{"class":38,"line":2173},[36,85997,78369],{"class":42},[36,85999,86000],{"class":38,"line":2178},[36,86001,86002],{"class":42},"      dance: function () {\n",[36,86004,86005],{"class":38,"line":2207},[36,86006,86007],{"class":42},"        console.log('跳舞')\n",[36,86009,86010],{"class":38,"line":2212},[36,86011,52875],{"class":42},[36,86013,86014],{"class":38,"line":2229},[36,86015,2667],{"class":42},[36,86017,86018],{"class":38,"line":2234},[36,86019,85867],{"class":42},[36,86021,86022,86024,86026],{"class":38,"line":2239},[36,86023,52894],{"class":42},[36,86025,52290],{"class":51777},[36,86027,51784],{"class":42},[19,86029,86030],{},"进行输出结果后会发现：",[19,86032,86033],{},[519,86034],{"alt":31,"src":86035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86037,86038],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86040,86041],{},"所以，要重新指回创造这个原型对象的构造函数",[26,86043,86045],{"className":71690,"code":86044,"language":71692,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[33,86046,86047,86061,86066,86071,86082,86095,86100,86111,86125,86129],{"__ignoreMap":31},[36,86048,86049,86052,86054,86057,86059],{"class":38,"line":39},[36,86050,86051],{"class":53},"Star",[36,86053,1171],{"class":42},[36,86055,86056],{"class":53},"prototype",[36,86058,14044],{"class":46},[36,86060,16052],{"class":42},[36,86062,86063],{"class":38,"line":66},[36,86064,86065],{"class":69},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,86067,86068],{"class":38,"line":73},[36,86069,86070],{"class":42},"  constructor: Star,\n",[36,86072,86073,86076,86078,86080],{"class":38,"line":79},[36,86074,86075],{"class":2443},"  sing",[36,86077,51914],{"class":42},[36,86079,54926],{"class":46},[36,86081,54929],{"class":42},[36,86083,86084,86086,86088,86090,86093],{"class":38,"line":85},[36,86085,74230],{"class":42},[36,86087,58724],{"class":2443},[36,86089,345],{"class":42},[36,86091,86092],{"class":405},"'唱歌'",[36,86094,63],{"class":42},[36,86096,86097],{"class":38,"line":419},[36,86098,86099],{"class":42},"   },\n",[36,86101,86102,86105,86107,86109],{"class":38,"line":425},[36,86103,86104],{"class":2443},"   dance",[36,86106,51914],{"class":42},[36,86108,54926],{"class":46},[36,86110,54929],{"class":42},[36,86112,86113,86116,86118,86120,86123],{"class":38,"line":431},[36,86114,86115],{"class":42},"     console.",[36,86117,58724],{"class":2443},[36,86119,345],{"class":42},[36,86121,86122],{"class":405},"'跳舞'",[36,86124,63],{"class":42},[36,86126,86127],{"class":38,"line":437},[36,86128,4789],{"class":42},[36,86130,86131],{"class":38,"line":443},[36,86132,2045],{"class":42},[19,86134,86135],{},[519,86136],{"alt":31,"src":86137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86139,86140],{},"总结1：",[19,86142,86143],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86145,86146],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86148,86149],{},"constructor指的是他的来源",[19,86151,86152],{},[519,86153],{"alt":31,"src":86154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86156,86157],{},[519,86158],{"alt":31,"src":86159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86161,86162],{},"总结2：",[19,86164,86165],{},[519,86166],{"alt":31,"src":86167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86169,86170],{},[519,86171],{"alt":31,"src":86172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86174,86175],{},[519,86176],{"alt":31,"src":86177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[596,86179,86181],{"id":86180},"_4134-对象原型","4.13.4 对象原型",[19,86183,86184],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86186,86187],{},"对象原型就是__proto__这个属性",[19,86189,86190],{},[519,86191],{"alt":31,"src":86192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86194,86195],{},[519,86196],{"alt":31,"src":86197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86199,86200],{},[519,86201],{"alt":31,"src":86202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86204,86205],{},[519,86206],{"alt":31,"src":86207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,86209,86211],{"className":53544,"code":86210,"language":53546,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,86212,86213,86221,86229,86233,86237,86241,86246,86254],{"__ignoreMap":31},[36,86214,86215,86217,86219],{"class":38,"line":39},[36,86216,1523],{"class":42},[36,86218,52277],{"class":51777},[36,86220,51784],{"class":42},[36,86222,86223,86225,86227],{"class":38,"line":66},[36,86224,52621],{"class":42},[36,86226,52290],{"class":51777},[36,86228,51784],{"class":42},[36,86230,86231],{"class":38,"line":73},[36,86232,85853],{"class":42},[36,86234,86235],{"class":38,"line":79},[36,86236,2667],{"class":42},[36,86238,86239],{"class":38,"line":85},[36,86240,85862],{"class":42},[36,86242,86243],{"class":38,"line":419},[36,86244,86245],{"class":42},"    console.log(ldh)\n",[36,86247,86248,86250,86252],{"class":38,"line":425},[36,86249,52894],{"class":42},[36,86251,52290],{"class":51777},[36,86253,51784],{"class":42},[36,86255,86256,86258,86260],{"class":38,"line":431},[36,86257,52262],{"class":42},[36,86259,52277],{"class":51777},[36,86261,51784],{"class":42},[19,86263,86264],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86266,86267],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86269,86270],{},[519,86271],{"alt":31,"src":86272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86274,86275],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86277,86278],{},"对象原型指向原型对象",[19,86280,86281],{},[519,86282],{"alt":31,"src":86283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86285,86286],{},[519,86287],{"alt":31,"src":86288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86290,86291],{},[519,86292],{"alt":31,"src":86293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[596,86295,86297],{"id":86296},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86299,86300],{},[519,86301],{"alt":31,"src":86302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[579,86304,86305,86308,86311,86314],{},[582,86306,86307],{},"构造函数通过new的形式实例化得到实例对象",[582,86309,86310],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[582,86312,86313],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[582,86315,86316],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86318,86319],{},[519,86320],{"alt":31,"src":86321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86323,86324],{},"题目梳理：",[19,86326,86327],{},[519,86328],{"alt":31,"src":86329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[596,86331,86333],{"id":86332},"_4136-原型继承","4.13.6 原型继承",[19,86335,86336],{},[519,86337],{"alt":31,"src":86338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86340,86341],{},[519,86342],{"alt":31,"src":86343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86345,86346],{},[519,86347],{"alt":31,"src":86348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86350,86351],{},[519,86352],{"alt":31,"src":86353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86355,86356],{},[519,86357],{"alt":31,"src":86358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86360,86361],{},[519,86362],{"alt":31,"src":86363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86365,86366],{},[519,86367],{"alt":31,"src":86368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86370,86371],{},[519,86372],{"alt":31,"src":86373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86375,86376],{},"回顾：构造函数每次new得到对象都是不同的",[596,86378,86380],{"id":86379},"_4137-原型链","4.13.7 原型链",[19,86382,86383],{},[519,86384],{"alt":31,"src":86385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86387,86388],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86390,86391],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86393,86394],{},"大哥是Object",[19,86396,86397],{},[519,86398],{"alt":31,"src":86399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86401,86402],{},[519,86403],{"alt":31,"src":86404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86406,86407],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86409,86410],{},"万物皆对象",[596,86412,86414],{"id":86413},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86416,86417],{},"模态框",[19,86419,86420],{},"以后遇见这个效果直接使用这个就行",[19,86422,86423],{},[519,86424],{"alt":31,"src":86425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86427,86428],{},[519,86429],{"alt":31,"src":86430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86432,86433],{},[519,86434],{"alt":31,"src":86435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86437,86438],{},[519,86439],{"alt":31,"src":86440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86442,86443],{},"补充知识点：",[579,86445,86446],{},[582,86447,86448],{},"append()",[19,86450,86451],{},[519,86452],{"alt":31,"src":86453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,86455,86457],{"className":51110,"code":86456,"language":51112,"meta":31,"style":31},"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",[33,86458,86459,86464,86469,86474,86478,86482,86486,86491,86496,86501,86505],{"__ignoreMap":31},[36,86460,86461],{"class":38,"line":39},[36,86462,86463],{"class":42},"append(param1)\n",[36,86465,86466],{"class":38,"line":66},[36,86467,86468],{"class":42},"append(param1, param2)\n",[36,86470,86471],{"class":38,"line":73},[36,86472,86473],{"class":42},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,86475,86476],{"class":38,"line":79},[36,86477,2880],{"emptyLinePlaceholder":553},[36,86479,86480],{"class":38,"line":85},[36,86481,2880],{"emptyLinePlaceholder":553},[36,86483,86484],{"class":38,"line":419},[36,86485,2880],{"emptyLinePlaceholder":553},[36,86487,86488],{"class":38,"line":425},[36,86489,86490],{"class":42},"let div = document.createElement(\"div\");\n",[36,86492,86493],{"class":38,"line":431},[36,86494,86495],{"class":42},"let p = document.createElement(\"p\");\n",[36,86497,86498],{"class":38,"line":437},[36,86499,86500],{"class":42},"div.append(p);\n",[36,86502,86503],{"class":38,"line":443},[36,86504,2880],{"emptyLinePlaceholder":553},[36,86506,86507,86510,86512],{"class":38,"line":2092},[36,86508,86509],{"class":42},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,86511,19],{"class":51777},[36,86513,86514],{"class":42},"> ]\n",[579,86516,86517],{"start":66},[582,86518,86519],{},"remove()",[19,86521,86522],{},"自己删自己",[19,86524,86525],{},[519,86526],{"alt":31,"src":86527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,86529,86531],{"className":51110,"code":86530,"language":51112,"meta":31,"style":31},"\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",[33,86532,86533,86543,86557,86561,86569,86583,86603,86615,86623,86630,86642,86655,86690,86702,86713,86725,86737,86749,86776,86786,86790,86794,86803,86815,86829,86839,86851,86855,86859,86869,86880,86890,86900,86913,86926,86936,86940,86944,86953,86963,86975,86979,86983,86992,87002,87012,87024,87028,87032,87042,87058,87069,87079,87089,87101,87113,87125,87129,87133,87146,87157,87161,87169,87177,87181,87189,87209,87229,87237,87242,87268,87273,87278,87297,87302,87314,87319,87330,87340,87350,87355,87360,87364,87369,87374,87379,87399,87404,87424,87429,87443,87448,87453,87458,87474,87478,87483,87512,87517,87522,87527,87538,87542,87546,87550,87555,87580,87585,87610,87615,87624,87628,87633,87658,87662,87687,87691,87700,87704,87709,87727,87737,87741,87749,87757,87761],{"__ignoreMap":31},[36,86534,86535,86537,86539,86541],{"class":38,"line":39},[36,86536,51774],{"class":42},[36,86538,51778],{"class":51777},[36,86540,51781],{"class":2443},[36,86542,51784],{"class":42},[36,86544,86545,86547,86549,86551,86553,86555],{"class":38,"line":66},[36,86546,1523],{"class":42},[36,86548,51112],{"class":51777},[36,86550,51793],{"class":2443},[36,86552,47],{"class":42},[36,86554,51798],{"class":405},[36,86556,51784],{"class":42},[36,86558,86559],{"class":38,"line":73},[36,86560,2880],{"emptyLinePlaceholder":553},[36,86562,86563,86565,86567],{"class":38,"line":79},[36,86564,1523],{"class":42},[36,86566,51811],{"class":51777},[36,86568,51784],{"class":42},[36,86570,86571,86573,86575,86577,86579,86581],{"class":38,"line":85},[36,86572,52621],{"class":42},[36,86574,51821],{"class":51777},[36,86576,51824],{"class":2443},[36,86578,47],{"class":42},[36,86580,51829],{"class":405},[36,86582,51784],{"class":42},[36,86584,86585,86587,86589,86591,86593,86595,86597,86599,86601],{"class":38,"line":419},[36,86586,52621],{"class":42},[36,86588,51821],{"class":51777},[36,86590,15400],{"class":2443},[36,86592,47],{"class":42},[36,86594,51868],{"class":405},[36,86596,51848],{"class":2443},[36,86598,47],{"class":42},[36,86600,51875],{"class":405},[36,86602,51784],{"class":42},[36,86604,86605,86607,86609,86611,86613],{"class":38,"line":425},[36,86606,52621],{"class":42},[36,86608,51884],{"class":51777},[36,86610,51887],{"class":42},[36,86612,51884],{"class":51777},[36,86614,51784],{"class":42},[36,86616,86617,86619,86621],{"class":38,"line":431},[36,86618,52621],{"class":42},[36,86620,539],{"class":51777},[36,86622,51784],{"class":42},[36,86624,86625,86628],{"class":38,"line":437},[36,86626,86627],{"class":2443},"    .modal",[36,86629,16052],{"class":42},[36,86631,86632,86634,86636,86638,86640],{"class":38,"line":443},[36,86633,55248],{"class":53},[36,86635,51914],{"class":42},[36,86637,4453],{"class":53},[36,86639,51969],{"class":46},[36,86641,1774],{"class":42},[36,86643,86644,86647,86649,86651,86653],{"class":38,"line":2092},[36,86645,86646],{"class":53},"      min-height",[36,86648,51914],{"class":42},[36,86650,930],{"class":53},[36,86652,51969],{"class":46},[36,86654,1774],{"class":42},[36,86656,86657,86659,86661,86663,86665,86667,86669,86671,86673,86675,86677,86679,86681,86683,86685,86688],{"class":38,"line":2097},[36,86658,79227],{"class":53},[36,86660,51914],{"class":42},[36,86662,812],{"class":53},[36,86664,4573],{"class":53},[36,86666,2518],{"class":53},[36,86668,51969],{"class":46},[36,86670,79244],{"class":53},[36,86672,345],{"class":42},[36,86674,812],{"class":53},[36,86676,12915],{"class":42},[36,86678,812],{"class":53},[36,86680,12915],{"class":42},[36,86682,812],{"class":53},[36,86684,12915],{"class":42},[36,86686,86687],{"class":53},"0.1",[36,86689,3199],{"class":42},[36,86691,86692,86694,86696,86698,86700],{"class":38,"line":2103},[36,86693,55611],{"class":53},[36,86695,51914],{"class":42},[36,86697,912],{"class":53},[36,86699,51969],{"class":46},[36,86701,1774],{"class":42},[36,86703,86704,86706,86708,86711],{"class":38,"line":2108},[36,86705,55236],{"class":53},[36,86707,51914],{"class":42},[36,86709,86710],{"class":53},"fixed",[36,86712,1774],{"class":42},[36,86714,86715,86718,86720,86723],{"class":38,"line":2122},[36,86716,86717],{"class":53},"      z-index",[36,86719,51914],{"class":42},[36,86721,86722],{"class":53},"999",[36,86724,1774],{"class":42},[36,86726,86727,86729,86731,86733,86735],{"class":38,"line":2127},[36,86728,55315],{"class":53},[36,86730,51914],{"class":42},[36,86732,1269],{"class":53},[36,86734,947],{"class":46},[36,86736,1774],{"class":42},[36,86738,86739,86741,86743,86745,86747],{"class":38,"line":2133},[36,86740,55424],{"class":53},[36,86742,51914],{"class":42},[36,86744,1269],{"class":53},[36,86746,947],{"class":46},[36,86748,1774],{"class":42},[36,86750,86751,86753,86755,86757,86759,86762,86764,86766,86768,86770,86772,86774],{"class":38,"line":2154},[36,86752,79268],{"class":53},[36,86754,51914],{"class":42},[36,86756,79273],{"class":53},[36,86758,345],{"class":42},[36,86760,86761],{"class":53},"-50",[36,86763,947],{"class":46},[36,86765,12915],{"class":42},[36,86767,86761],{"class":53},[36,86769,947],{"class":46},[36,86771,12915],{"class":42},[36,86773,812],{"class":53},[36,86775,3199],{"class":42},[36,86777,86778,86780,86782,86784],{"class":38,"line":2159},[36,86779,55361],{"class":53},[36,86781,51914],{"class":42},[36,86783,61319],{"class":53},[36,86785,1774],{"class":42},[36,86787,86788],{"class":38,"line":2173},[36,86789,2667],{"class":42},[36,86791,86792],{"class":38,"line":2178},[36,86793,2880],{"emptyLinePlaceholder":553},[36,86795,86796,86798,86801],{"class":38,"line":2207},[36,86797,86627],{"class":2443},[36,86799,86800],{"class":2443}," .header",[36,86802,16052],{"class":42},[36,86804,86805,86807,86809,86811,86813],{"class":38,"line":2212},[36,86806,57836],{"class":53},[36,86808,51914],{"class":42},[36,86810,1018],{"class":53},[36,86812,51969],{"class":46},[36,86814,1774],{"class":42},[36,86816,86817,86819,86821,86823,86825,86827],{"class":38,"line":2229},[36,86818,55172],{"class":53},[36,86820,51914],{"class":42},[36,86822,812],{"class":53},[36,86824,2518],{"class":53},[36,86826,51969],{"class":46},[36,86828,1774],{"class":42},[36,86830,86831,86833,86835,86837],{"class":38,"line":2234},[36,86832,55236],{"class":53},[36,86834,51914],{"class":42},[36,86836,55241],{"class":53},[36,86838,1774],{"class":42},[36,86840,86841,86843,86845,86847,86849],{"class":38,"line":2239},[36,86842,55399],{"class":53},[36,86844,51914],{"class":42},[36,86846,1313],{"class":53},[36,86848,51969],{"class":46},[36,86850,1774],{"class":42},[36,86852,86853],{"class":38,"line":2244},[36,86854,2667],{"class":42},[36,86856,86857],{"class":38,"line":2258},[36,86858,2880],{"emptyLinePlaceholder":553},[36,86860,86861,86863,86865,86867],{"class":38,"line":2263},[36,86862,86627],{"class":2443},[36,86864,86800],{"class":2443},[36,86866,3512],{"class":51777},[36,86868,16052],{"class":42},[36,86870,86871,86874,86876,86878],{"class":38,"line":3057},[36,86872,86873],{"class":53},"      font-style",[36,86875,51914],{"class":42},[36,86877,64318],{"class":53},[36,86879,1774],{"class":42},[36,86881,86882,86884,86886,86888],{"class":38,"line":3071},[36,86883,57893],{"class":53},[36,86885,51914],{"class":42},[36,86887,62547],{"class":53},[36,86889,1774],{"class":42},[36,86891,86892,86894,86896,86898],{"class":38,"line":3079},[36,86893,55236],{"class":53},[36,86895,51914],{"class":42},[36,86897,55308],{"class":53},[36,86899,1774],{"class":42},[36,86901,86902,86905,86907,86909,86911],{"class":38,"line":3084},[36,86903,86904],{"class":53},"      right",[36,86906,51914],{"class":42},[36,86908,1188],{"class":53},[36,86910,51969],{"class":46},[36,86912,1774],{"class":42},[36,86914,86915,86917,86919,86922,86924],{"class":38,"line":3090},[36,86916,55424],{"class":53},[36,86918,51914],{"class":42},[36,86920,86921],{"class":53},"-2",[36,86923,51969],{"class":46},[36,86925,1774],{"class":42},[36,86927,86928,86930,86932,86934],{"class":38,"line":3096},[36,86929,62502],{"class":53},[36,86931,51914],{"class":42},[36,86933,62507],{"class":53},[36,86935,1774],{"class":42},[36,86937,86938],{"class":38,"line":3101},[36,86939,2667],{"class":42},[36,86941,86942],{"class":38,"line":8428},[36,86943,2880],{"emptyLinePlaceholder":553},[36,86945,86946,86948,86951],{"class":38,"line":8452},[36,86947,86627],{"class":2443},[36,86949,86950],{"class":2443}," .body",[36,86952,16052],{"class":42},[36,86954,86955,86957,86959,86961],{"class":38,"line":8457},[36,86956,57763],{"class":53},[36,86958,51914],{"class":42},[36,86960,52069],{"class":53},[36,86962,1774],{"class":42},[36,86964,86965,86967,86969,86971,86973],{"class":38,"line":8463},[36,86966,55172],{"class":53},[36,86968,51914],{"class":42},[36,86970,1062],{"class":53},[36,86972,51969],{"class":46},[36,86974,1774],{"class":42},[36,86976,86977],{"class":38,"line":8490},[36,86978,2667],{"class":42},[36,86980,86981],{"class":38,"line":8495},[36,86982,2880],{"emptyLinePlaceholder":553},[36,86984,86985,86987,86990],{"class":38,"line":8501},[36,86986,86627],{"class":2443},[36,86988,86989],{"class":2443}," .footer",[36,86991,16052],{"class":42},[36,86993,86994,86996,86998,87000],{"class":38,"line":8513},[36,86995,55486],{"class":53},[36,86997,51914],{"class":42},[36,86999,51954],{"class":53},[36,87001,1774],{"class":42},[36,87003,87004,87006,87008,87010],{"class":38,"line":8525},[36,87005,55497],{"class":53},[36,87007,51914],{"class":42},[36,87009,52057],{"class":53},[36,87011,1774],{"class":42},[36,87013,87014,87016,87018,87020,87022],{"class":38,"line":8537},[36,87015,55172],{"class":53},[36,87017,51914],{"class":42},[36,87019,1062],{"class":53},[36,87021,51969],{"class":46},[36,87023,1774],{"class":42},[36,87025,87026],{"class":38,"line":10196},[36,87027,2667],{"class":42},[36,87029,87030],{"class":38,"line":10221},[36,87031,2880],{"emptyLinePlaceholder":553},[36,87033,87034,87036,87038,87040],{"class":38,"line":10244},[36,87035,86627],{"class":2443},[36,87037,86989],{"class":2443},[36,87039,1879],{"class":51777},[36,87041,16052],{"class":42},[36,87043,87044,87046,87048,87050,87052,87054,87056],{"class":38,"line":10268},[36,87045,55172],{"class":53},[36,87047,51914],{"class":42},[36,87049,127],{"class":53},[36,87051,51969],{"class":46},[36,87053,2563],{"class":53},[36,87055,51969],{"class":46},[36,87057,1774],{"class":42},[36,87059,87060,87062,87064,87067],{"class":38,"line":10273},[36,87061,62198],{"class":53},[36,87063,51914],{"class":42},[36,87065,87066],{"class":53},"#ccc",[36,87068,1774],{"class":42},[36,87070,87071,87073,87075,87077],{"class":38,"line":10278},[36,87072,64447],{"class":53},[36,87074,51914],{"class":42},[36,87076,55214],{"class":53},[36,87078,1774],{"class":42},[36,87080,87081,87083,87085,87087],{"class":38,"line":10283},[36,87082,57893],{"class":53},[36,87084,51914],{"class":42},[36,87086,61319],{"class":53},[36,87088,1774],{"class":42},[36,87090,87091,87093,87095,87097,87099],{"class":38,"line":10292},[36,87092,55611],{"class":53},[36,87094,51914],{"class":42},[36,87096,96],{"class":53},[36,87098,51969],{"class":46},[36,87100,1774],{"class":42},[36,87102,87103,87105,87107,87109,87111],{"class":38,"line":10297},[36,87104,62227],{"class":53},[36,87106,51914],{"class":42},[36,87108,1062],{"class":53},[36,87110,51969],{"class":46},[36,87112,1774],{"class":42},[36,87114,87115,87117,87119,87121,87123],{"class":38,"line":10303},[36,87116,55399],{"class":53},[36,87118,51914],{"class":42},[36,87120,1162],{"class":53},[36,87122,51969],{"class":46},[36,87124,1774],{"class":42},[36,87126,87127],{"class":38,"line":10324},[36,87128,2667],{"class":42},[36,87130,87131],{"class":38,"line":10330},[36,87132,2880],{"emptyLinePlaceholder":553},[36,87134,87135,87137,87139,87141,87144],{"class":38,"line":10344},[36,87136,86627],{"class":2443},[36,87138,86989],{"class":2443},[36,87140,1879],{"class":51777},[36,87142,87143],{"class":2443},".submit",[36,87145,16052],{"class":42},[36,87147,87148,87150,87152,87155],{"class":38,"line":10350},[36,87149,55361],{"class":53},[36,87151,51914],{"class":42},[36,87153,87154],{"class":53},"#369",[36,87156,1774],{"class":42},[36,87158,87159],{"class":38,"line":10377},[36,87160,2667],{"class":42},[36,87162,87163,87165,87167],{"class":38,"line":10386},[36,87164,52894],{"class":42},[36,87166,539],{"class":51777},[36,87168,51784],{"class":42},[36,87170,87171,87173,87175],{"class":38,"line":10392},[36,87172,52262],{"class":42},[36,87174,51811],{"class":51777},[36,87176,51784],{"class":42},[36,87178,87179],{"class":38,"line":10400},[36,87180,2880],{"emptyLinePlaceholder":553},[36,87182,87183,87185,87187],{"class":38,"line":10405},[36,87184,1523],{"class":42},[36,87186,52277],{"class":51777},[36,87188,51784],{"class":42},[36,87190,87191,87193,87195,87197,87199,87202,87205,87207],{"class":38,"line":17084},[36,87192,52621],{"class":42},[36,87194,54364],{"class":51777},[36,87196,15439],{"class":2443},[36,87198,47],{"class":42},[36,87200,87201],{"class":405},"\"delete\"",[36,87203,87204],{"class":42},">删除\u003C\u002F",[36,87206,54364],{"class":51777},[36,87208,51784],{"class":42},[36,87210,87211,87213,87215,87217,87219,87222,87225,87227],{"class":38,"line":17090},[36,87212,52621],{"class":42},[36,87214,54364],{"class":51777},[36,87216,15439],{"class":2443},[36,87218,47],{"class":42},[36,87220,87221],{"class":405},"\"login\"",[36,87223,87224],{"class":42},">登录\u003C\u002F",[36,87226,54364],{"class":51777},[36,87228,51784],{"class":42},[36,87230,87231,87233,87235],{"class":38,"line":17113},[36,87232,52621],{"class":42},[36,87234,52290],{"class":51777},[36,87236,51784],{"class":42},[36,87238,87239],{"class":38,"line":17119},[36,87240,87241],{"class":69},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,87243,87244,87246,87249,87251,87253,87255,87257,87259,87262,87264,87266],{"class":38,"line":17142},[36,87245,70561],{"class":46},[36,87247,87248],{"class":2443}," Modal",[36,87250,345],{"class":42},[36,87252,51884],{"class":5696},[36,87254,14044],{"class":46},[36,87256,70407],{"class":405},[36,87258,12915],{"class":42},[36,87260,87261],{"class":5696},"message",[36,87263,14044],{"class":46},[36,87265,70407],{"class":405},[36,87267,12922],{"class":42},[36,87269,87270],{"class":38,"line":17156},[36,87271,87272],{"class":69},"      \u002F\u002F 创建Model 模态框盒子\n",[36,87274,87275],{"class":38,"line":17176},[36,87276,87277],{"class":69},"      \u002F\u002F 1.1 创建div标签\n",[36,87279,87280,87282,87285,87287,87289,87291,87293,87295],{"class":38,"line":17182},[36,87281,70528],{"class":53},[36,87283,87284],{"class":42},".modalBox ",[36,87286,47],{"class":46},[36,87288,54873],{"class":42},[36,87290,70628],{"class":2443},[36,87292,345],{"class":42},[36,87294,82408],{"class":405},[36,87296,63],{"class":42},[36,87298,87299],{"class":38,"line":17193},[36,87300,87301],{"class":69},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,87303,87304,87306,87309,87311],{"class":38,"line":17216},[36,87305,70528],{"class":53},[36,87307,87308],{"class":42},".modalBox.className ",[36,87310,47],{"class":46},[36,87312,87313],{"class":405}," 'modal'\n",[36,87315,87316],{"class":38,"line":17238},[36,87317,87318],{"class":69},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,87320,87321,87323,87326,87328],{"class":38,"line":17243},[36,87322,70528],{"class":53},[36,87324,87325],{"class":42},".modalBox.innerHTML ",[36,87327,47],{"class":46},[36,87329,70645],{"class":405},[36,87331,87332,87335,87337],{"class":38,"line":17249},[36,87333,87334],{"class":405},"        \u003Cdiv class=\"header\">${",[36,87336,51884],{"class":42},[36,87338,87339],{"class":405},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,87341,87342,87345,87347],{"class":38,"line":17263},[36,87343,87344],{"class":405},"        \u003Cdiv class=\"body\">${",[36,87346,87261],{"class":42},[36,87348,87349],{"class":405},"}\u003C\u002Fdiv>\n",[36,87351,87352],{"class":38,"line":17276},[36,87353,87354],{"class":405},"      `\n",[36,87356,87357],{"class":38,"line":17281},[36,87358,87359],{"class":69},"      \u002F\u002F console.log(this.modalBox)\n",[36,87361,87362],{"class":38,"line":17295},[36,87363,2667],{"class":42},[36,87365,87366],{"class":38,"line":17300},[36,87367,87368],{"class":69},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,87370,87371],{"class":38,"line":17306},[36,87372,87373],{"class":69},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,87375,87376],{"class":38,"line":17311},[36,87377,87378],{"class":69},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,87380,87381,87384,87386,87388,87390,87393,87395,87397],{"class":38,"line":17325},[36,87382,87383],{"class":53},"    Modal",[36,87385,1171],{"class":42},[36,87387,86056],{"class":53},[36,87389,1171],{"class":42},[36,87391,87392],{"class":2443},"open",[36,87394,14044],{"class":46},[36,87396,59395],{"class":46},[36,87398,54929],{"class":42},[36,87400,87401],{"class":38,"line":17330},[36,87402,87403],{"class":69},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,87405,87406,87408,87411,87413,87415,87417,87419,87422],{"class":38,"line":17335},[36,87407,58705],{"class":46},[36,87409,87410],{"class":53}," box",[36,87412,14044],{"class":46},[36,87414,54873],{"class":42},[36,87416,54876],{"class":2443},[36,87418,345],{"class":42},[36,87420,87421],{"class":405},"'.modal'",[36,87423,63],{"class":42},[36,87425,87426],{"class":38,"line":17349},[36,87427,87428],{"class":69},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,87430,87431,87434,87436,87439,87441],{"class":38,"line":17361},[36,87432,87433],{"class":42},"      box ",[36,87435,2195],{"class":46},[36,87437,87438],{"class":42}," box.",[36,87440,57483],{"class":2443},[36,87442,2456],{"class":42},[36,87444,87445],{"class":38,"line":17366},[36,87446,87447],{"class":69},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,87449,87450],{"class":38,"line":17379},[36,87451,87452],{"class":69},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,87454,87455],{"class":38,"line":17384},[36,87456,87457],{"class":69},"      \u002F\u002F append可以增加对象\n",[36,87459,87460,87463,87466,87468,87471],{"class":38,"line":17389},[36,87461,87462],{"class":42},"      document.body.",[36,87464,87465],{"class":2443},"append",[36,87467,345],{"class":42},[36,87469,87470],{"class":53},"this",[36,87472,87473],{"class":42},".modalBox)\n",[36,87475,87476],{"class":38,"line":17394},[36,87477,2880],{"emptyLinePlaceholder":553},[36,87479,87480],{"class":38,"line":17407},[36,87481,87482],{"class":69},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,87484,87485,87487,87490,87492,87494,87497,87499,87501,87503,87505,87508,87510],{"class":38,"line":17412},[36,87486,70528],{"class":53},[36,87488,87489],{"class":42},".modalBox.",[36,87491,54876],{"class":2443},[36,87493,345],{"class":42},[36,87495,87496],{"class":405},"'i'",[36,87498,31304],{"class":42},[36,87500,58290],{"class":2443},[36,87502,345],{"class":42},[36,87504,58295],{"class":405},[36,87506,87507],{"class":42},", () ",[36,87509,85199],{"class":46},[36,87511,16052],{"class":42},[36,87513,87514],{"class":38,"line":33110},[36,87515,87516],{"class":69},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,87518,87519],{"class":38,"line":33116},[36,87520,87521],{"class":69},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,87523,87524],{"class":38,"line":33122},[36,87525,87526],{"class":69},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,87528,87529,87531,87533,87536],{"class":38,"line":33128},[36,87530,65203],{"class":53},[36,87532,1171],{"class":42},[36,87534,87535],{"class":2443},"close",[36,87537,2456],{"class":42},[36,87539,87540],{"class":38,"line":33134},[36,87541,65292],{"class":42},[36,87543,87544],{"class":38,"line":33145},[36,87545,2667],{"class":42},[36,87547,87548],{"class":38,"line":33151},[36,87549,2880],{"emptyLinePlaceholder":553},[36,87551,87552],{"class":38,"line":33171},[36,87553,87554],{"class":69},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,87556,87557,87559,87561,87563,87566,87568,87570,87572,87574,87576,87578],{"class":38,"line":33177},[36,87558,52884],{"class":42},[36,87560,54876],{"class":2443},[36,87562,345],{"class":42},[36,87564,87565],{"class":405},"'#delete'",[36,87567,31304],{"class":42},[36,87569,58290],{"class":2443},[36,87571,345],{"class":42},[36,87573,58295],{"class":405},[36,87575,87507],{"class":42},[36,87577,85199],{"class":46},[36,87579,16052],{"class":42},[36,87581,87582],{"class":38,"line":33188},[36,87583,87584],{"class":69},"      \u002F\u002F 先调用Model构造函数\n",[36,87586,87587,87589,87592,87594,87596,87598,87600,87603,87605,87608],{"class":38,"line":33194},[36,87588,58705],{"class":46},[36,87590,87591],{"class":53}," del",[36,87593,14044],{"class":46},[36,87595,12058],{"class":46},[36,87597,87248],{"class":2443},[36,87599,345],{"class":42},[36,87601,87602],{"class":405},"'温馨的提示'",[36,87604,12915],{"class":42},[36,87606,87607],{"class":405},"'您没有删除权限操作'",[36,87609,63],{"class":42},[36,87611,87612],{"class":38,"line":33200},[36,87613,87614],{"class":69},"      \u002F\u002F 实例对象调用open方法\n",[36,87616,87617,87620,87622],{"class":38,"line":33206},[36,87618,87619],{"class":42},"      del.",[36,87621,87392],{"class":2443},[36,87623,2456],{"class":42},[36,87625,87626],{"class":38,"line":33212},[36,87627,33938],{"class":42},[36,87629,87630],{"class":38,"line":33218},[36,87631,87632],{"class":69},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,87634,87635,87637,87639,87641,87644,87646,87648,87650,87652,87654,87656],{"class":38,"line":33224},[36,87636,52884],{"class":42},[36,87638,54876],{"class":2443},[36,87640,345],{"class":42},[36,87642,87643],{"class":405},"'#login'",[36,87645,31304],{"class":42},[36,87647,58290],{"class":2443},[36,87649,345],{"class":42},[36,87651,58295],{"class":405},[36,87653,87507],{"class":42},[36,87655,85199],{"class":46},[36,87657,16052],{"class":42},[36,87659,87660],{"class":38,"line":33230},[36,87661,87584],{"class":69},[36,87663,87664,87666,87669,87671,87673,87675,87677,87680,87682,87685],{"class":38,"line":33250},[36,87665,58705],{"class":46},[36,87667,87668],{"class":53}," log",[36,87670,14044],{"class":46},[36,87672,12058],{"class":46},[36,87674,87248],{"class":2443},[36,87676,345],{"class":42},[36,87678,87679],{"class":405},"'友情提示'",[36,87681,12915],{"class":42},[36,87683,87684],{"class":405},"'您还没有登录呢'",[36,87686,63],{"class":42},[36,87688,87689],{"class":38,"line":33256},[36,87690,87614],{"class":69},[36,87692,87693,87696,87698],{"class":38,"line":33272},[36,87694,87695],{"class":42},"      log.",[36,87697,87392],{"class":2443},[36,87699,2456],{"class":42},[36,87701,87702],{"class":38,"line":33278},[36,87703,33938],{"class":42},[36,87705,87706],{"class":38,"line":33292},[36,87707,87708],{"class":69},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,87710,87711,87713,87715,87717,87719,87721,87723,87725],{"class":38,"line":33298},[36,87712,87383],{"class":53},[36,87714,1171],{"class":42},[36,87716,86056],{"class":53},[36,87718,1171],{"class":42},[36,87720,87535],{"class":2443},[36,87722,14044],{"class":46},[36,87724,59395],{"class":46},[36,87726,54929],{"class":42},[36,87728,87729,87731,87733,87735],{"class":38,"line":33313},[36,87730,70528],{"class":53},[36,87732,87489],{"class":42},[36,87734,57483],{"class":2443},[36,87736,2456],{"class":42},[36,87738,87739],{"class":38,"line":33319},[36,87740,2667],{"class":42},[36,87742,87743,87745,87747],{"class":38,"line":33328},[36,87744,52894],{"class":42},[36,87746,52290],{"class":51777},[36,87748,51784],{"class":42},[36,87750,87751,87753,87755],{"class":38,"line":33334},[36,87752,52262],{"class":42},[36,87754,52277],{"class":51777},[36,87756,51784],{"class":42},[36,87758,87759],{"class":38,"line":33343},[36,87760,2880],{"emptyLinePlaceholder":553},[36,87762,87763,87765,87767],{"class":38,"line":33349},[36,87764,52262],{"class":42},[36,87766,51112],{"class":51777},[36,87768,51784],{"class":42},[19,87770,87771],{},[519,87772],{"alt":31,"src":87773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87775,87777],{"id":87776},"_414-深浅拷贝","4.14 深浅拷贝",[596,87779,87781],{"id":87780},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87783,87784],{},[519,87785],{"alt":31,"src":87786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87788,87789],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87791,87792],{},[519,87793],{"alt":31,"src":87794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87796,87797],{},[519,87798],{"alt":31,"src":87799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87801,87802],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87804,87805],{},[519,87806],{"alt":31,"src":87807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87809,11812],{},[19,87811,87812],{},[519,87813],{"alt":31,"src":87814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[596,87816,87818],{"id":87817},"_4142-深拷贝","4.14.2 深拷贝",[19,87820,87821],{},"深拷贝：拷贝的是对象，不是地址",[19,87823,87824],{},"常用的三种方法：",[579,87826,87827,87830,87833],{},[582,87828,87829],{},"通过递归实现深拷贝",[582,87831,87832],{},"lodash\u002FcloneDeep",[582,87834,87835],{},"通过JSON.stringify()实现",[22478,87837,87839],{"id":87838},"_41421-递归函数","4.14.2.1 递归函数",[19,87841,87842],{},[519,87843],{"alt":31,"src":87844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[579,87846,87847],{},[582,87848,87849],{},"死递归占溢出：",[26,87851,87853],{"className":53544,"code":87852,"language":53546,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87854,87855,87863,87871,87875,87880,87884,87889,87897],{"__ignoreMap":31},[36,87856,87857,87859,87861],{"class":38,"line":39},[36,87858,1523],{"class":42},[36,87860,52277],{"class":51777},[36,87862,51784],{"class":42},[36,87864,87865,87867,87869],{"class":38,"line":66},[36,87866,52621],{"class":42},[36,87868,52290],{"class":51777},[36,87870,51784],{"class":42},[36,87872,87873],{"class":38,"line":73},[36,87874,77620],{"class":42},[36,87876,87877],{"class":38,"line":79},[36,87878,87879],{"class":42},"      fn()\n",[36,87881,87882],{"class":38,"line":85},[36,87883,2667],{"class":42},[36,87885,87886],{"class":38,"line":419},[36,87887,87888],{"class":42},"    fn()\n",[36,87890,87891,87893,87895],{"class":38,"line":425},[36,87892,52894],{"class":42},[36,87894,52290],{"class":51777},[36,87896,51784],{"class":42},[36,87898,87899,87901,87903],{"class":38,"line":431},[36,87900,52262],{"class":42},[36,87902,52277],{"class":51777},[36,87904,51784],{"class":42},[579,87906,87907],{"start":66},[582,87908,87909],{},"递归函数要加判断条件：",[19,87911,87912],{},[519,87913],{"alt":31,"src":87914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[579,87916,87917],{"start":73},[582,87918,87919],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,87921,87923],{"className":51110,"code":87922,"language":51112,"meta":31,"style":31},"\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",[33,87924,87925,87935,87949,87953,87961,87975,87995,88007,88015,88019,88027,88039,88047,88055,88080,88092,88096,88103,88111,88119,88123],{"__ignoreMap":31},[36,87926,87927,87929,87931,87933],{"class":38,"line":39},[36,87928,51774],{"class":42},[36,87930,51778],{"class":51777},[36,87932,51781],{"class":2443},[36,87934,51784],{"class":42},[36,87936,87937,87939,87941,87943,87945,87947],{"class":38,"line":66},[36,87938,1523],{"class":42},[36,87940,51112],{"class":51777},[36,87942,51793],{"class":2443},[36,87944,47],{"class":42},[36,87946,51798],{"class":405},[36,87948,51784],{"class":42},[36,87950,87951],{"class":38,"line":73},[36,87952,2880],{"emptyLinePlaceholder":553},[36,87954,87955,87957,87959],{"class":38,"line":79},[36,87956,1523],{"class":42},[36,87958,51811],{"class":51777},[36,87960,51784],{"class":42},[36,87962,87963,87965,87967,87969,87971,87973],{"class":38,"line":85},[36,87964,52621],{"class":42},[36,87966,51821],{"class":51777},[36,87968,51824],{"class":2443},[36,87970,47],{"class":42},[36,87972,51829],{"class":405},[36,87974,51784],{"class":42},[36,87976,87977,87979,87981,87983,87985,87987,87989,87991,87993],{"class":38,"line":419},[36,87978,52621],{"class":42},[36,87980,51821],{"class":51777},[36,87982,15400],{"class":2443},[36,87984,47],{"class":42},[36,87986,51868],{"class":405},[36,87988,51848],{"class":2443},[36,87990,47],{"class":42},[36,87992,51875],{"class":405},[36,87994,51784],{"class":42},[36,87996,87997,87999,88001,88003,88005],{"class":38,"line":425},[36,87998,52621],{"class":42},[36,88000,51884],{"class":51777},[36,88002,51887],{"class":42},[36,88004,51884],{"class":51777},[36,88006,51784],{"class":42},[36,88008,88009,88011,88013],{"class":38,"line":431},[36,88010,52262],{"class":42},[36,88012,51811],{"class":51777},[36,88014,51784],{"class":42},[36,88016,88017],{"class":38,"line":437},[36,88018,2880],{"emptyLinePlaceholder":553},[36,88020,88021,88023,88025],{"class":38,"line":443},[36,88022,1523],{"class":42},[36,88024,52277],{"class":51777},[36,88026,51784],{"class":42},[36,88028,88029,88031,88033,88035,88037],{"class":38,"line":2092},[36,88030,52621],{"class":42},[36,88032,52088],{"class":51777},[36,88034,55791],{"class":42},[36,88036,52088],{"class":51777},[36,88038,51784],{"class":42},[36,88040,88041,88043,88045],{"class":38,"line":2097},[36,88042,52621],{"class":42},[36,88044,52290],{"class":51777},[36,88046,51784],{"class":42},[36,88048,88049,88051,88053],{"class":38,"line":2103},[36,88050,70561],{"class":46},[36,88052,74250],{"class":2443},[36,88054,11333],{"class":42},[36,88056,88057,88059,88061,88063,88065,88067,88069,88071,88073,88075,88078],{"class":38,"line":2108},[36,88058,56248],{"class":42},[36,88060,54876],{"class":2443},[36,88062,345],{"class":42},[36,88064,82408],{"class":405},[36,88066,74726],{"class":42},[36,88068,47],{"class":46},[36,88070,12058],{"class":46},[36,88072,74266],{"class":2443},[36,88074,17741],{"class":42},[36,88076,88077],{"class":2443},"toLocaleString",[36,88079,2456],{"class":42},[36,88081,88082,88085,88088,88090],{"class":38,"line":2122},[36,88083,88084],{"class":2443},"      setTimeout",[36,88086,88087],{"class":42},"(getTime, ",[36,88089,6890],{"class":53},[36,88091,63],{"class":42},[36,88093,88094],{"class":38,"line":2127},[36,88095,2667],{"class":42},[36,88097,88098,88101],{"class":38,"line":2133},[36,88099,88100],{"class":2443},"    getTime",[36,88102,2456],{"class":42},[36,88104,88105,88107,88109],{"class":38,"line":2154},[36,88106,52894],{"class":42},[36,88108,52290],{"class":51777},[36,88110,51784],{"class":42},[36,88112,88113,88115,88117],{"class":38,"line":2159},[36,88114,52262],{"class":42},[36,88116,52277],{"class":51777},[36,88118,51784],{"class":42},[36,88120,88121],{"class":38,"line":2173},[36,88122,2880],{"emptyLinePlaceholder":553},[36,88124,88125,88127,88129],{"class":38,"line":2178},[36,88126,52262],{"class":42},[36,88128,51112],{"class":51777},[36,88130,51784],{"class":42},[19,88132,88133],{},[519,88134],{"alt":31,"src":88135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[579,88137,88138],{"start":79},[582,88139,87829],{},[19,88141,88142],{},[519,88143],{"alt":31,"src":88144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88146,88147],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88149,39666],{},[19,88151,88152],{},"这个是简易版的递归函数深拷贝",[19,88154,88155],{},"一定要注意先数组再对象，因为万物皆可对象",[26,88157,88159],{"className":51110,"code":88158,"language":51112,"meta":31,"style":31},"\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",[33,88160,88161,88171,88185,88189,88197,88211,88231,88243,88251,88255,88263,88271,88281,88290,88298,88314,88318,88326,88330,88334,88346,88351,88370,88386,88391,88396,88401,88416,88421,88426,88435,88443,88460,88468,88474,88482,88487,88492,88501,88505,88509,88513,88524,88533,88543,88557,88567,88575,88583,88591,88595],{"__ignoreMap":31},[36,88162,88163,88165,88167,88169],{"class":38,"line":39},[36,88164,51774],{"class":42},[36,88166,51778],{"class":51777},[36,88168,51781],{"class":2443},[36,88170,51784],{"class":42},[36,88172,88173,88175,88177,88179,88181,88183],{"class":38,"line":66},[36,88174,1523],{"class":42},[36,88176,51112],{"class":51777},[36,88178,51793],{"class":2443},[36,88180,47],{"class":42},[36,88182,51798],{"class":405},[36,88184,51784],{"class":42},[36,88186,88187],{"class":38,"line":73},[36,88188,2880],{"emptyLinePlaceholder":553},[36,88190,88191,88193,88195],{"class":38,"line":79},[36,88192,1523],{"class":42},[36,88194,51811],{"class":51777},[36,88196,51784],{"class":42},[36,88198,88199,88201,88203,88205,88207,88209],{"class":38,"line":85},[36,88200,52621],{"class":42},[36,88202,51821],{"class":51777},[36,88204,51824],{"class":2443},[36,88206,47],{"class":42},[36,88208,51829],{"class":405},[36,88210,51784],{"class":42},[36,88212,88213,88215,88217,88219,88221,88223,88225,88227,88229],{"class":38,"line":419},[36,88214,52621],{"class":42},[36,88216,51821],{"class":51777},[36,88218,15400],{"class":2443},[36,88220,47],{"class":42},[36,88222,51868],{"class":405},[36,88224,51848],{"class":2443},[36,88226,47],{"class":42},[36,88228,51875],{"class":405},[36,88230,51784],{"class":42},[36,88232,88233,88235,88237,88239,88241],{"class":38,"line":425},[36,88234,52621],{"class":42},[36,88236,51884],{"class":51777},[36,88238,51887],{"class":42},[36,88240,51884],{"class":51777},[36,88242,51784],{"class":42},[36,88244,88245,88247,88249],{"class":38,"line":431},[36,88246,52262],{"class":42},[36,88248,51811],{"class":51777},[36,88250,51784],{"class":42},[36,88252,88253],{"class":38,"line":437},[36,88254,2880],{"emptyLinePlaceholder":553},[36,88256,88257,88259,88261],{"class":38,"line":443},[36,88258,1523],{"class":42},[36,88260,52277],{"class":51777},[36,88262,51784],{"class":42},[36,88264,88265,88267,88269],{"class":38,"line":2092},[36,88266,52621],{"class":42},[36,88268,52290],{"class":51777},[36,88270,51784],{"class":42},[36,88272,88273,88275,88277,88279],{"class":38,"line":2097},[36,88274,11701],{"class":46},[36,88276,70448],{"class":53},[36,88278,14044],{"class":46},[36,88280,16052],{"class":42},[36,88282,88283,88285,88288],{"class":38,"line":2103},[36,88284,72093],{"class":42},[36,88286,88287],{"class":405},"'pink'",[36,88289,31944],{"class":42},[36,88291,88292,88294,88296],{"class":38,"line":2108},[36,88293,72103],{"class":42},[36,88295,1263],{"class":53},[36,88297,31944],{"class":42},[36,88299,88300,88303,88306,88308,88311],{"class":38,"line":2122},[36,88301,88302],{"class":42},"      hobby: [",[36,88304,88305],{"class":405},"'乒乓球'",[36,88307,12915],{"class":42},[36,88309,88310],{"class":405},"'足球'",[36,88312,88313],{"class":42},"],\n",[36,88315,88316],{"class":38,"line":2127},[36,88317,78349],{"class":42},[36,88319,88320,88323],{"class":38,"line":2133},[36,88321,88322],{"class":42},"        baby: ",[36,88324,88325],{"class":405},"'小pink'\n",[36,88327,88328],{"class":38,"line":2154},[36,88329,52875],{"class":42},[36,88331,88332],{"class":38,"line":2159},[36,88333,2667],{"class":42},[36,88335,88336,88338,88341,88343],{"class":38,"line":2173},[36,88337,11701],{"class":46},[36,88339,88340],{"class":53}," o",[36,88342,14044],{"class":46},[36,88344,88345],{"class":42}," {}\n",[36,88347,88348],{"class":38,"line":2178},[36,88349,88350],{"class":69},"    \u002F\u002F 拷贝函数\n",[36,88352,88353,88355,88358,88360,88363,88365,88368],{"class":38,"line":2207},[36,88354,70561],{"class":46},[36,88356,88357],{"class":2443}," deepCopy",[36,88359,345],{"class":42},[36,88361,88362],{"class":5696},"newObj",[36,88364,12915],{"class":42},[36,88366,88367],{"class":5696},"oldObj",[36,88369,12922],{"class":42},[36,88371,88372,88374,88376,88378,88381,88383],{"class":38,"line":2212},[36,88373,52761],{"class":46},[36,88375,2138],{"class":42},[36,88377,52324],{"class":46},[36,88379,88380],{"class":42}," k ",[36,88382,26524],{"class":46},[36,88384,88385],{"class":42}," oldObj) {\n",[36,88387,88388],{"class":38,"line":2229},[36,88389,88390],{"class":69},"        \u002F\u002F 处理数组的问题\n",[36,88392,88393],{"class":38,"line":2234},[36,88394,88395],{"class":69},"        \u002F\u002F 判断是否属于数组\n",[36,88397,88398],{"class":38,"line":2239},[36,88399,88400],{"class":69},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,88402,88403,88405,88408,88411,88414],{"class":38,"line":2244},[36,88404,2977],{"class":46},[36,88406,88407],{"class":42}," (oldObj[k] ",[36,88409,88410],{"class":46},"instanceof",[36,88412,88413],{"class":2443}," Array",[36,88415,12922],{"class":42},[36,88417,88418],{"class":38,"line":2258},[36,88419,88420],{"class":69},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,88422,88423],{"class":38,"line":2263},[36,88424,88425],{"class":69},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,88427,88428,88431,88433],{"class":38,"line":3057},[36,88429,88430],{"class":42},"          newObj[k] ",[36,88432,47],{"class":46},[36,88434,52315],{"class":42},[36,88436,88437,88440],{"class":38,"line":3071},[36,88438,88439],{"class":2443},"          deepCopy",[36,88441,88442],{"class":42},"(newObj[k], oldObj[k])\n",[36,88444,88445,88447,88449,88451,88453,88455,88458],{"class":38,"line":3079},[36,88446,80557],{"class":42},[36,88448,2181],{"class":46},[36,88450,2184],{"class":46},[36,88452,88407],{"class":42},[36,88454,88410],{"class":46},[36,88456,88457],{"class":2443}," Object",[36,88459,12922],{"class":42},[36,88461,88462,88464,88466],{"class":38,"line":3084},[36,88463,88430],{"class":42},[36,88465,47],{"class":46},[36,88467,88345],{"class":42},[36,88469,88470,88472],{"class":38,"line":3090},[36,88471,88439],{"class":2443},[36,88473,88442],{"class":42},[36,88475,88476,88478,88480],{"class":38,"line":3096},[36,88477,80557],{"class":42},[36,88479,2181],{"class":46},[36,88481,16052],{"class":42},[36,88483,88484],{"class":38,"line":3101},[36,88485,88486],{"class":69},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,88488,88489],{"class":38,"line":8428},[36,88490,88491],{"class":69},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,88493,88494,88496,88498],{"class":38,"line":8452},[36,88495,88430],{"class":42},[36,88497,47],{"class":46},[36,88499,88500],{"class":42}," oldObj[k]\n",[36,88502,88503],{"class":38,"line":8457},[36,88504,3009],{"class":42},[36,88506,88507],{"class":38,"line":8463},[36,88508,52875],{"class":42},[36,88510,88511],{"class":38,"line":8490},[36,88512,2667],{"class":42},[36,88514,88515,88518,88521],{"class":38,"line":8495},[36,88516,88517],{"class":2443},"    deepCopy",[36,88519,88520],{"class":42},"(o, obj) ",[36,88522,88523],{"class":69},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,88525,88526,88528,88530],{"class":38,"line":8501},[36,88527,74230],{"class":42},[36,88529,58724],{"class":2443},[36,88531,88532],{"class":42},"(o)\n",[36,88534,88535,88538,88540],{"class":38,"line":8513},[36,88536,88537],{"class":42},"    o.age ",[36,88539,47],{"class":46},[36,88541,88542],{"class":53}," 20\n",[36,88544,88545,88548,88550,88552,88554],{"class":38,"line":8525},[36,88546,88547],{"class":42},"    o.hobby[",[36,88549,812],{"class":53},[36,88551,4923],{"class":42},[36,88553,47],{"class":46},[36,88555,88556],{"class":405}," '篮球'\n",[36,88558,88559,88562,88564],{"class":38,"line":8537},[36,88560,88561],{"class":42},"    o.family ",[36,88563,47],{"class":46},[36,88565,88566],{"class":405}," '老pink'\n",[36,88568,88569,88571,88573],{"class":38,"line":10196},[36,88570,74230],{"class":42},[36,88572,58724],{"class":2443},[36,88574,70513],{"class":42},[36,88576,88577,88579,88581],{"class":38,"line":10221},[36,88578,52894],{"class":42},[36,88580,52290],{"class":51777},[36,88582,51784],{"class":42},[36,88584,88585,88587,88589],{"class":38,"line":10244},[36,88586,52262],{"class":42},[36,88588,52277],{"class":51777},[36,88590,51784],{"class":42},[36,88592,88593],{"class":38,"line":10268},[36,88594,2880],{"emptyLinePlaceholder":553},[36,88596,88597,88599,88601],{"class":38,"line":10273},[36,88598,52262],{"class":42},[36,88600,51112],{"class":51777},[36,88602,51784],{"class":42},[19,88604,88605],{},[519,88606],{"alt":31,"src":88607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22478,88609,88611,88612],{"id":88610},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[770,88613,88614],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88616,88617],{},[43,88618,88619],{"href":88619,"rel":88620},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24345],[19,88622,88623],{},"lodash里边的方法都要加上一个下划线_",[19,88625,88626],{},"_.cloneDeep()",[26,88628,88630],{"className":51110,"code":88629,"language":51112,"meta":31,"style":31},"\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",[33,88631,88632,88642,88656,88660,88668,88682,88702,88714,88722,88726,88734,88739,88758,88766,88776,88784,88792,88804,88808,88814,88818,88822,88838,88846,88855,88863,88871,88879,88883],{"__ignoreMap":31},[36,88633,88634,88636,88638,88640],{"class":38,"line":39},[36,88635,51774],{"class":42},[36,88637,51778],{"class":51777},[36,88639,51781],{"class":2443},[36,88641,51784],{"class":42},[36,88643,88644,88646,88648,88650,88652,88654],{"class":38,"line":66},[36,88645,1523],{"class":42},[36,88647,51112],{"class":51777},[36,88649,51793],{"class":2443},[36,88651,47],{"class":42},[36,88653,51798],{"class":405},[36,88655,51784],{"class":42},[36,88657,88658],{"class":38,"line":73},[36,88659,2880],{"emptyLinePlaceholder":553},[36,88661,88662,88664,88666],{"class":38,"line":79},[36,88663,1523],{"class":42},[36,88665,51811],{"class":51777},[36,88667,51784],{"class":42},[36,88669,88670,88672,88674,88676,88678,88680],{"class":38,"line":85},[36,88671,52621],{"class":42},[36,88673,51821],{"class":51777},[36,88675,51824],{"class":2443},[36,88677,47],{"class":42},[36,88679,51829],{"class":405},[36,88681,51784],{"class":42},[36,88683,88684,88686,88688,88690,88692,88694,88696,88698,88700],{"class":38,"line":419},[36,88685,52621],{"class":42},[36,88687,51821],{"class":51777},[36,88689,15400],{"class":2443},[36,88691,47],{"class":42},[36,88693,51868],{"class":405},[36,88695,51848],{"class":2443},[36,88697,47],{"class":42},[36,88699,51875],{"class":405},[36,88701,51784],{"class":42},[36,88703,88704,88706,88708,88710,88712],{"class":38,"line":425},[36,88705,52621],{"class":42},[36,88707,51884],{"class":51777},[36,88709,51887],{"class":42},[36,88711,51884],{"class":51777},[36,88713,51784],{"class":42},[36,88715,88716,88718,88720],{"class":38,"line":431},[36,88717,52262],{"class":42},[36,88719,51811],{"class":51777},[36,88721,51784],{"class":42},[36,88723,88724],{"class":38,"line":437},[36,88725,2880],{"emptyLinePlaceholder":553},[36,88727,88728,88730,88732],{"class":38,"line":443},[36,88729,1523],{"class":42},[36,88731,52277],{"class":51777},[36,88733,51784],{"class":42},[36,88735,88736],{"class":38,"line":2092},[36,88737,88738],{"class":69},"  \u003C!-- 先引用这个库 -->\n",[36,88740,88741,88743,88745,88747,88749,88752,88754,88756],{"class":38,"line":2097},[36,88742,52621],{"class":42},[36,88744,52290],{"class":51777},[36,88746,55716],{"class":2443},[36,88748,47],{"class":42},[36,88750,88751],{"class":405},"\"lodash.min.js\"",[36,88753,55791],{"class":42},[36,88755,52290],{"class":51777},[36,88757,51784],{"class":42},[36,88759,88760,88762,88764],{"class":38,"line":2103},[36,88761,52621],{"class":42},[36,88763,52290],{"class":51777},[36,88765,51784],{"class":42},[36,88767,88768,88770,88772,88774],{"class":38,"line":2108},[36,88769,11701],{"class":46},[36,88771,70448],{"class":53},[36,88773,14044],{"class":46},[36,88775,16052],{"class":42},[36,88777,88778,88780,88782],{"class":38,"line":2122},[36,88779,72093],{"class":42},[36,88781,88287],{"class":405},[36,88783,31944],{"class":42},[36,88785,88786,88788,88790],{"class":38,"line":2127},[36,88787,72103],{"class":42},[36,88789,1263],{"class":53},[36,88791,31944],{"class":42},[36,88793,88794,88796,88798,88800,88802],{"class":38,"line":2133},[36,88795,88302],{"class":42},[36,88797,88305],{"class":405},[36,88799,12915],{"class":42},[36,88801,88310],{"class":405},[36,88803,88313],{"class":42},[36,88805,88806],{"class":38,"line":2154},[36,88807,78349],{"class":42},[36,88809,88810,88812],{"class":38,"line":2159},[36,88811,88322],{"class":42},[36,88813,88325],{"class":405},[36,88815,88816],{"class":38,"line":2173},[36,88817,52875],{"class":42},[36,88819,88820],{"class":38,"line":2178},[36,88821,2667],{"class":42},[36,88823,88824,88826,88828,88830,88833,88836],{"class":38,"line":2207},[36,88825,11701],{"class":46},[36,88827,88340],{"class":53},[36,88829,14044],{"class":46},[36,88831,88832],{"class":42}," _.",[36,88834,88835],{"class":2443},"cloneDeep",[36,88837,70513],{"class":42},[36,88839,88840,88842,88844],{"class":38,"line":2212},[36,88841,74230],{"class":42},[36,88843,58724],{"class":2443},[36,88845,88532],{"class":42},[36,88847,88848,88851,88853],{"class":38,"line":2229},[36,88849,88850],{"class":42},"    o.family.baby ",[36,88852,47],{"class":46},[36,88854,88566],{"class":405},[36,88856,88857,88859,88861],{"class":38,"line":2234},[36,88858,74230],{"class":42},[36,88860,58724],{"class":2443},[36,88862,70513],{"class":42},[36,88864,88865,88867,88869],{"class":38,"line":2239},[36,88866,52894],{"class":42},[36,88868,52290],{"class":51777},[36,88870,51784],{"class":42},[36,88872,88873,88875,88877],{"class":38,"line":2244},[36,88874,52262],{"class":42},[36,88876,52277],{"class":51777},[36,88878,51784],{"class":42},[36,88880,88881],{"class":38,"line":2258},[36,88882,2880],{"emptyLinePlaceholder":553},[36,88884,88885,88887,88889],{"class":38,"line":2263},[36,88886,52262],{"class":42},[36,88888,51112],{"class":51777},[36,88890,51784],{"class":42},[19,88892,88893],{},[519,88894],{"alt":31,"src":88895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22478,88897,88899],{"id":88898},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,88901,88903],{"className":51110,"code":88902,"language":51112,"meta":31,"style":31},"\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",[33,88904,88905,88915,88929,88933,88941,88955,88975,88987,88995,88999,89007,89015,89025,89033,89041,89053,89057,89063,89067,89071,89076,89081,89086,89112,89120,89129,89137,89145,89153,89157],{"__ignoreMap":31},[36,88906,88907,88909,88911,88913],{"class":38,"line":39},[36,88908,51774],{"class":42},[36,88910,51778],{"class":51777},[36,88912,51781],{"class":2443},[36,88914,51784],{"class":42},[36,88916,88917,88919,88921,88923,88925,88927],{"class":38,"line":66},[36,88918,1523],{"class":42},[36,88920,51112],{"class":51777},[36,88922,51793],{"class":2443},[36,88924,47],{"class":42},[36,88926,51798],{"class":405},[36,88928,51784],{"class":42},[36,88930,88931],{"class":38,"line":73},[36,88932,2880],{"emptyLinePlaceholder":553},[36,88934,88935,88937,88939],{"class":38,"line":79},[36,88936,1523],{"class":42},[36,88938,51811],{"class":51777},[36,88940,51784],{"class":42},[36,88942,88943,88945,88947,88949,88951,88953],{"class":38,"line":85},[36,88944,52621],{"class":42},[36,88946,51821],{"class":51777},[36,88948,51824],{"class":2443},[36,88950,47],{"class":42},[36,88952,51829],{"class":405},[36,88954,51784],{"class":42},[36,88956,88957,88959,88961,88963,88965,88967,88969,88971,88973],{"class":38,"line":419},[36,88958,52621],{"class":42},[36,88960,51821],{"class":51777},[36,88962,15400],{"class":2443},[36,88964,47],{"class":42},[36,88966,51868],{"class":405},[36,88968,51848],{"class":2443},[36,88970,47],{"class":42},[36,88972,51875],{"class":405},[36,88974,51784],{"class":42},[36,88976,88977,88979,88981,88983,88985],{"class":38,"line":425},[36,88978,52621],{"class":42},[36,88980,51884],{"class":51777},[36,88982,51887],{"class":42},[36,88984,51884],{"class":51777},[36,88986,51784],{"class":42},[36,88988,88989,88991,88993],{"class":38,"line":431},[36,88990,52262],{"class":42},[36,88992,51811],{"class":51777},[36,88994,51784],{"class":42},[36,88996,88997],{"class":38,"line":437},[36,88998,2880],{"emptyLinePlaceholder":553},[36,89000,89001,89003,89005],{"class":38,"line":443},[36,89002,1523],{"class":42},[36,89004,52277],{"class":51777},[36,89006,51784],{"class":42},[36,89008,89009,89011,89013],{"class":38,"line":2092},[36,89010,52621],{"class":42},[36,89012,52290],{"class":51777},[36,89014,51784],{"class":42},[36,89016,89017,89019,89021,89023],{"class":38,"line":2097},[36,89018,11701],{"class":46},[36,89020,70448],{"class":53},[36,89022,14044],{"class":46},[36,89024,16052],{"class":42},[36,89026,89027,89029,89031],{"class":38,"line":2103},[36,89028,72093],{"class":42},[36,89030,88287],{"class":405},[36,89032,31944],{"class":42},[36,89034,89035,89037,89039],{"class":38,"line":2108},[36,89036,72103],{"class":42},[36,89038,1263],{"class":53},[36,89040,31944],{"class":42},[36,89042,89043,89045,89047,89049,89051],{"class":38,"line":2122},[36,89044,88302],{"class":42},[36,89046,88305],{"class":405},[36,89048,12915],{"class":42},[36,89050,88310],{"class":405},[36,89052,88313],{"class":42},[36,89054,89055],{"class":38,"line":2127},[36,89056,78349],{"class":42},[36,89058,89059,89061],{"class":38,"line":2133},[36,89060,88322],{"class":42},[36,89062,88325],{"class":405},[36,89064,89065],{"class":38,"line":2154},[36,89066,52875],{"class":42},[36,89068,89069],{"class":38,"line":2159},[36,89070,2667],{"class":42},[36,89072,89073],{"class":38,"line":2173},[36,89074,89075],{"class":69},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,89077,89078],{"class":38,"line":2178},[36,89079,89080],{"class":69},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,89082,89083],{"class":38,"line":2207},[36,89084,89085],{"class":69},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,89087,89088,89090,89092,89094,89097,89099,89102,89104,89106,89108,89110],{"class":38,"line":2212},[36,89089,11701],{"class":46},[36,89091,88340],{"class":53},[36,89093,14044],{"class":46},[36,89095,89096],{"class":53}," JSON",[36,89098,1171],{"class":42},[36,89100,89101],{"class":2443},"parse",[36,89103,345],{"class":42},[36,89105,72141],{"class":53},[36,89107,1171],{"class":42},[36,89109,72146],{"class":2443},[36,89111,72149],{"class":42},[36,89113,89114,89116,89118],{"class":38,"line":2229},[36,89115,74230],{"class":42},[36,89117,58724],{"class":2443},[36,89119,88532],{"class":42},[36,89121,89122,89124,89126],{"class":38,"line":2234},[36,89123,88850],{"class":42},[36,89125,47],{"class":46},[36,89127,89128],{"class":405}," '123'\n",[36,89130,89131,89133,89135],{"class":38,"line":2239},[36,89132,74230],{"class":42},[36,89134,58724],{"class":2443},[36,89136,70513],{"class":42},[36,89138,89139,89141,89143],{"class":38,"line":2244},[36,89140,52894],{"class":42},[36,89142,52290],{"class":51777},[36,89144,51784],{"class":42},[36,89146,89147,89149,89151],{"class":38,"line":2258},[36,89148,52262],{"class":42},[36,89150,52277],{"class":51777},[36,89152,51784],{"class":42},[36,89154,89155],{"class":38,"line":2263},[36,89156,2880],{"emptyLinePlaceholder":553},[36,89158,89159,89161,89163],{"class":38,"line":3057},[36,89160,52262],{"class":42},[36,89162,51112],{"class":51777},[36,89164,51784],{"class":42},[19,89166,89167],{},[519,89168],{"alt":31,"src":89169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89171,89173],{"id":89172},"_415-异常处理","4.15 异常处理",[579,89175,89176],{},[582,89177,89178],{},"throw抛异常",[19,89180,89181],{},[519,89182],{"alt":31,"src":89183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[579,89185,89186],{"start":66},[582,89187,89188],{},"try\u002Fcatch 捕获错误信息",[19,89190,89191],{},[519,89192],{"alt":31,"src":89193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,89195,89197],{"className":51110,"code":89196,"language":51112,"meta":31,"style":31},"\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",[33,89198,89199,89209,89223,89227,89235,89249,89269,89281,89289,89293,89301,89313,89321,89330,89337,89342,89361,89370,89381,89386,89396,89401,89406,89411,89428,89432,89437,89444,89456,89460,89472,89476,89480,89485,89490,89497,89505,89513,89517],{"__ignoreMap":31},[36,89200,89201,89203,89205,89207],{"class":38,"line":39},[36,89202,51774],{"class":42},[36,89204,51778],{"class":51777},[36,89206,51781],{"class":2443},[36,89208,51784],{"class":42},[36,89210,89211,89213,89215,89217,89219,89221],{"class":38,"line":66},[36,89212,1523],{"class":42},[36,89214,51112],{"class":51777},[36,89216,51793],{"class":2443},[36,89218,47],{"class":42},[36,89220,51798],{"class":405},[36,89222,51784],{"class":42},[36,89224,89225],{"class":38,"line":73},[36,89226,2880],{"emptyLinePlaceholder":553},[36,89228,89229,89231,89233],{"class":38,"line":79},[36,89230,1523],{"class":42},[36,89232,51811],{"class":51777},[36,89234,51784],{"class":42},[36,89236,89237,89239,89241,89243,89245,89247],{"class":38,"line":85},[36,89238,52621],{"class":42},[36,89240,51821],{"class":51777},[36,89242,51824],{"class":2443},[36,89244,47],{"class":42},[36,89246,51829],{"class":405},[36,89248,51784],{"class":42},[36,89250,89251,89253,89255,89257,89259,89261,89263,89265,89267],{"class":38,"line":419},[36,89252,52621],{"class":42},[36,89254,51821],{"class":51777},[36,89256,15400],{"class":2443},[36,89258,47],{"class":42},[36,89260,51868],{"class":405},[36,89262,51848],{"class":2443},[36,89264,47],{"class":42},[36,89266,51875],{"class":405},[36,89268,51784],{"class":42},[36,89270,89271,89273,89275,89277,89279],{"class":38,"line":425},[36,89272,52621],{"class":42},[36,89274,51884],{"class":51777},[36,89276,51887],{"class":42},[36,89278,51884],{"class":51777},[36,89280,51784],{"class":42},[36,89282,89283,89285,89287],{"class":38,"line":431},[36,89284,52262],{"class":42},[36,89286,51811],{"class":51777},[36,89288,51784],{"class":42},[36,89290,89291],{"class":38,"line":437},[36,89292,2880],{"emptyLinePlaceholder":553},[36,89294,89295,89297,89299],{"class":38,"line":443},[36,89296,1523],{"class":42},[36,89298,52277],{"class":51777},[36,89300,51784],{"class":42},[36,89302,89303,89305,89307,89309,89311],{"class":38,"line":2092},[36,89304,52621],{"class":42},[36,89306,19],{"class":51777},[36,89308,53971],{"class":42},[36,89310,19],{"class":51777},[36,89312,51784],{"class":42},[36,89314,89315,89317,89319],{"class":38,"line":2097},[36,89316,52621],{"class":42},[36,89318,52290],{"class":51777},[36,89320,51784],{"class":42},[36,89322,89323,89325,89328],{"class":38,"line":2103},[36,89324,70561],{"class":46},[36,89326,89327],{"class":2443}," fn",[36,89329,11333],{"class":42},[36,89331,89332,89335],{"class":38,"line":2108},[36,89333,89334],{"class":46},"      try",[36,89336,16052],{"class":42},[36,89338,89339],{"class":38,"line":2122},[36,89340,89341],{"class":69},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,89343,89344,89346,89348,89350,89352,89354,89356,89359],{"class":38,"line":2127},[36,89345,61747],{"class":46},[36,89347,7305],{"class":53},[36,89349,14044],{"class":46},[36,89351,54873],{"class":42},[36,89353,54876],{"class":2443},[36,89355,345],{"class":42},[36,89357,89358],{"class":405},"'.p'",[36,89360,63],{"class":42},[36,89362,89363,89366,89368],{"class":38,"line":2133},[36,89364,89365],{"class":42},"        p.style.color ",[36,89367,47],{"class":46},[36,89369,67528],{"class":405},[36,89371,89372,89375,89378],{"class":38,"line":2154},[36,89373,89374],{"class":42},"      } ",[36,89376,89377],{"class":46},"catch",[36,89379,89380],{"class":42}," (err) {\n",[36,89382,89383],{"class":38,"line":2159},[36,89384,89385],{"class":69},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,89387,89388,89391,89393],{"class":38,"line":2173},[36,89389,89390],{"class":42},"        console.",[36,89392,58724],{"class":2443},[36,89394,89395],{"class":42},"(err.message)\n",[36,89397,89398],{"class":38,"line":2178},[36,89399,89400],{"class":69},"        \u002F\u002F 想要中断程序，需要加return\n",[36,89402,89403],{"class":38,"line":2207},[36,89404,89405],{"class":69},"        \u002F\u002F return\n",[36,89407,89408],{"class":38,"line":2212},[36,89409,89410],{"class":69},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,89412,89413,89416,89418,89421,89423,89426],{"class":38,"line":2229},[36,89414,89415],{"class":46},"        throw",[36,89417,12058],{"class":46},[36,89419,89420],{"class":2443}," Error",[36,89422,345],{"class":42},[36,89424,89425],{"class":405},"'你看看，选择器错误了吧'",[36,89427,63],{"class":42},[36,89429,89430],{"class":38,"line":2234},[36,89431,52875],{"class":42},[36,89433,89434],{"class":38,"line":2239},[36,89435,89436],{"class":69},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,89438,89439,89442],{"class":38,"line":2244},[36,89440,89441],{"class":46},"      finally",[36,89443,16052],{"class":42},[36,89445,89446,89449,89451,89454],{"class":38,"line":2258},[36,89447,89448],{"class":2443},"        alert",[36,89450,345],{"class":42},[36,89452,89453],{"class":405},"'弹出对话框'",[36,89455,63],{"class":42},[36,89457,89458],{"class":38,"line":2263},[36,89459,52875],{"class":42},[36,89461,89462,89464,89466,89468,89470],{"class":38,"line":3057},[36,89463,58721],{"class":42},[36,89465,58724],{"class":2443},[36,89467,345],{"class":42},[36,89469,1088],{"class":53},[36,89471,63],{"class":42},[36,89473,89474],{"class":38,"line":3071},[36,89475,2880],{"emptyLinePlaceholder":553},[36,89477,89478],{"class":38,"line":3079},[36,89479,2667],{"class":42},[36,89481,89482],{"class":38,"line":3084},[36,89483,89484],{"class":69},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,89486,89487],{"class":38,"line":3090},[36,89488,89489],{"class":69},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,89491,89492,89495],{"class":38,"line":3096},[36,89493,89494],{"class":2443},"    fn",[36,89496,2456],{"class":42},[36,89498,89499,89501,89503],{"class":38,"line":3101},[36,89500,52894],{"class":42},[36,89502,52290],{"class":51777},[36,89504,51784],{"class":42},[36,89506,89507,89509,89511],{"class":38,"line":8428},[36,89508,52262],{"class":42},[36,89510,52277],{"class":51777},[36,89512,51784],{"class":42},[36,89514,89515],{"class":38,"line":8452},[36,89516,2880],{"emptyLinePlaceholder":553},[36,89518,89519,89521,89523],{"class":38,"line":8457},[36,89520,52262],{"class":42},[36,89522,51112],{"class":51777},[36,89524,51784],{"class":42},[19,89526,89527],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[579,89529,89530],{"start":73},[582,89531,89532],{},"debugger",[19,89534,89535],{},[519,89536],{"alt":31,"src":89537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89539,89540],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89542,89544],{"id":89543},"_416-处理this","4.16 处理this",[596,89546,89548],{"id":89547},"_4161-this的指向","4.16.1 this的指向",[579,89550,89551],{},[582,89552,89553],{},"普通函数的this",[19,89555,89556],{},[519,89557],{"alt":31,"src":89558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[579,89560,89561],{"start":66},[582,89562,89563],{},"箭头函数的this",[19,89565,89566],{},[519,89567],{"alt":31,"src":89568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89570,89571],{},[519,89572],{"alt":31,"src":89573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89575,89576],{},[519,89577],{"alt":31,"src":89578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[596,89580,89582],{"id":89581},"_4162-this的改变","4.16.2 this的改变",[19,89584,89585],{},"call() apply() bind()",[579,89587,89588],{},[582,89589,89590],{},"call()",[19,89592,89593],{},[519,89594],{"alt":31,"src":89595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89597,89598],{},"两个作用：①调用函数；②改变this指向",[26,89600,89602],{"className":53544,"code":89601,"language":53546,"meta":31,"style":31},"\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",[33,89603,89604,89612,89620,89624,89629,89633,89638,89643,89648,89652,89657,89665],{"__ignoreMap":31},[36,89605,89606,89608,89610],{"class":38,"line":39},[36,89607,1523],{"class":42},[36,89609,52277],{"class":51777},[36,89611,51784],{"class":42},[36,89613,89614,89616,89618],{"class":38,"line":66},[36,89615,52621],{"class":42},[36,89617,52290],{"class":51777},[36,89619,51784],{"class":42},[36,89621,89622],{"class":38,"line":73},[36,89623,72000],{"class":42},[36,89625,89626],{"class":38,"line":79},[36,89627,89628],{"class":42},"      uname: 'pink'\n",[36,89630,89631],{"class":38,"line":85},[36,89632,2667],{"class":42},[36,89634,89635],{"class":38,"line":419},[36,89636,89637],{"class":42},"    function fn(x, y) {\n",[36,89639,89640],{"class":38,"line":425},[36,89641,89642],{"class":42},"      console.log(this)  \u002F\u002Fwindow\n",[36,89644,89645],{"class":38,"line":431},[36,89646,89647],{"class":42},"      console.log(x + y)\n",[36,89649,89650],{"class":38,"line":437},[36,89651,2667],{"class":42},[36,89653,89654],{"class":38,"line":443},[36,89655,89656],{"class":42},"    fn.call(obj, 1, 2)\n",[36,89658,89659,89661,89663],{"class":38,"line":2092},[36,89660,52894],{"class":42},[36,89662,52290],{"class":51777},[36,89664,51784],{"class":42},[36,89666,89667,89669,89671],{"class":38,"line":2097},[36,89668,52262],{"class":42},[36,89670,52277],{"class":51777},[36,89672,51784],{"class":42},[19,89674,89675],{},[519,89676],{"alt":31,"src":89677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[579,89679,89680],{"start":66},[582,89681,89682],{},"apply()",[19,89684,89685],{},[519,89686],{"alt":31,"src":89687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89689,89598],{},[19,89691,89692],{},"call传递的是普通参数，而apply必须传递的是数组",[26,89694,89696],{"className":51110,"code":89695,"language":51112,"meta":31,"style":31},"\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",[33,89697,89698,89708,89722,89726,89734,89748,89768,89780,89788,89792,89800,89808,89818,89825,89829,89834,89850,89862,89876,89880,89885,89904,89909,89913,89918,89923,89931,89936,89958,89963,89979,89995,90007,90011,90016,90035,90043,90051,90055],{"__ignoreMap":31},[36,89699,89700,89702,89704,89706],{"class":38,"line":39},[36,89701,51774],{"class":42},[36,89703,51778],{"class":51777},[36,89705,51781],{"class":2443},[36,89707,51784],{"class":42},[36,89709,89710,89712,89714,89716,89718,89720],{"class":38,"line":66},[36,89711,1523],{"class":42},[36,89713,51112],{"class":51777},[36,89715,51793],{"class":2443},[36,89717,47],{"class":42},[36,89719,51798],{"class":405},[36,89721,51784],{"class":42},[36,89723,89724],{"class":38,"line":73},[36,89725,2880],{"emptyLinePlaceholder":553},[36,89727,89728,89730,89732],{"class":38,"line":79},[36,89729,1523],{"class":42},[36,89731,51811],{"class":51777},[36,89733,51784],{"class":42},[36,89735,89736,89738,89740,89742,89744,89746],{"class":38,"line":85},[36,89737,52621],{"class":42},[36,89739,51821],{"class":51777},[36,89741,51824],{"class":2443},[36,89743,47],{"class":42},[36,89745,51829],{"class":405},[36,89747,51784],{"class":42},[36,89749,89750,89752,89754,89756,89758,89760,89762,89764,89766],{"class":38,"line":419},[36,89751,52621],{"class":42},[36,89753,51821],{"class":51777},[36,89755,15400],{"class":2443},[36,89757,47],{"class":42},[36,89759,51868],{"class":405},[36,89761,51848],{"class":2443},[36,89763,47],{"class":42},[36,89765,51875],{"class":405},[36,89767,51784],{"class":42},[36,89769,89770,89772,89774,89776,89778],{"class":38,"line":425},[36,89771,52621],{"class":42},[36,89773,51884],{"class":51777},[36,89775,51887],{"class":42},[36,89777,51884],{"class":51777},[36,89779,51784],{"class":42},[36,89781,89782,89784,89786],{"class":38,"line":431},[36,89783,52262],{"class":42},[36,89785,51811],{"class":51777},[36,89787,51784],{"class":42},[36,89789,89790],{"class":38,"line":437},[36,89791,2880],{"emptyLinePlaceholder":553},[36,89793,89794,89796,89798],{"class":38,"line":443},[36,89795,1523],{"class":42},[36,89797,52277],{"class":51777},[36,89799,51784],{"class":42},[36,89801,89802,89804,89806],{"class":38,"line":2092},[36,89803,52621],{"class":42},[36,89805,52290],{"class":51777},[36,89807,51784],{"class":42},[36,89809,89810,89812,89814,89816],{"class":38,"line":2097},[36,89811,11701],{"class":46},[36,89813,70448],{"class":53},[36,89815,14044],{"class":46},[36,89817,16052],{"class":42},[36,89819,89820,89822],{"class":38,"line":2103},[36,89821,72103],{"class":42},[36,89823,89824],{"class":53},"18\n",[36,89826,89827],{"class":38,"line":2108},[36,89828,2667],{"class":42},[36,89830,89831],{"class":38,"line":2122},[36,89832,89833],{"class":69},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,89835,89836,89838,89840,89842,89844,89846,89848],{"class":38,"line":2127},[36,89837,70561],{"class":46},[36,89839,89327],{"class":2443},[36,89841,345],{"class":42},[36,89843,1433],{"class":5696},[36,89845,12915],{"class":42},[36,89847,1458],{"class":5696},[36,89849,12922],{"class":42},[36,89851,89852,89854,89856,89858,89860],{"class":38,"line":2133},[36,89853,58721],{"class":42},[36,89855,58724],{"class":2443},[36,89857,345],{"class":42},[36,89859,87470],{"class":53},[36,89861,63],{"class":42},[36,89863,89864,89866,89868,89871,89873],{"class":38,"line":2154},[36,89865,58721],{"class":42},[36,89867,58724],{"class":2443},[36,89869,89870],{"class":42},"(x ",[36,89872,1097],{"class":46},[36,89874,89875],{"class":42}," y)\n",[36,89877,89878],{"class":38,"line":2159},[36,89879,2667],{"class":42},[36,89881,89882],{"class":38,"line":2173},[36,89883,89884],{"class":69},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,89886,89887,89890,89893,89896,89898,89900,89902],{"class":38,"line":2178},[36,89888,89889],{"class":42},"    fn.",[36,89891,89892],{"class":2443},"apply",[36,89894,89895],{"class":42},"(obj, [",[36,89897,54],{"class":53},[36,89899,12915],{"class":42},[36,89901,96],{"class":53},[36,89903,5137],{"class":42},[36,89905,89906],{"class":38,"line":2207},[36,89907,89908],{"class":69},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,89910,89911],{"class":38,"line":2212},[36,89912,2880],{"emptyLinePlaceholder":553},[36,89914,89915],{"class":38,"line":2229},[36,89916,89917],{"class":69},"    \u002F\u002F 使用场景：求数组最大值\n",[36,89919,89920],{"class":38,"line":2234},[36,89921,89922],{"class":69},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,89924,89925,89928],{"class":38,"line":2239},[36,89926,89927],{"class":69},"    \u002F\u002F console.log(max)",[36,89929,89930],{"class":69},"   \u002F\u002F3\n",[36,89932,89933],{"class":38,"line":2244},[36,89934,89935],{"class":69},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,89937,89938,89940,89942,89944,89946,89948,89950,89952,89954,89956],{"class":38,"line":2258},[36,89939,11701],{"class":46},[36,89941,58172],{"class":53},[36,89943,14044],{"class":46},[36,89945,52703],{"class":42},[36,89947,930],{"class":53},[36,89949,12915],{"class":42},[36,89951,1119],{"class":53},[36,89953,12915],{"class":42},[36,89955,1148],{"class":53},[36,89957,33723],{"class":42},[36,89959,89960],{"class":38,"line":2263},[36,89961,89962],{"class":69},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,89964,89965,89967,89969,89971,89974,89976],{"class":38,"line":3057},[36,89966,11701],{"class":46},[36,89968,6431],{"class":53},[36,89970,14044],{"class":46},[36,89972,89973],{"class":42}," Math.max.",[36,89975,89892],{"class":2443},[36,89977,89978],{"class":42},"(Math, arr)\n",[36,89980,89981,89983,89986,89988,89991,89993],{"class":38,"line":3071},[36,89982,11701],{"class":46},[36,89984,89985],{"class":53}," min",[36,89987,14044],{"class":46},[36,89989,89990],{"class":42}," Math.min.",[36,89992,89892],{"class":2443},[36,89994,89978],{"class":42},[36,89996,89997,89999,90001,90004],{"class":38,"line":3079},[36,89998,74230],{"class":42},[36,90000,58724],{"class":2443},[36,90002,90003],{"class":42},"(max, min)     ",[36,90005,90006],{"class":69},"\u002F\u002F100,4\n",[36,90008,90009],{"class":38,"line":3084},[36,90010,2880],{"emptyLinePlaceholder":553},[36,90012,90013],{"class":38,"line":3090},[36,90014,90015],{"class":69},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,90017,90018,90020,90022,90025,90027,90029,90032],{"class":38,"line":3096},[36,90019,74230],{"class":42},[36,90021,58724],{"class":2443},[36,90023,90024],{"class":42},"(Max.",[36,90026,6495],{"class":2443},[36,90028,345],{"class":42},[36,90030,90031],{"class":46},"...",[36,90033,90034],{"class":42},"arr))\n",[36,90036,90037,90039,90041],{"class":38,"line":3101},[36,90038,52894],{"class":42},[36,90040,52290],{"class":51777},[36,90042,51784],{"class":42},[36,90044,90045,90047,90049],{"class":38,"line":8428},[36,90046,52262],{"class":42},[36,90048,52277],{"class":51777},[36,90050,51784],{"class":42},[36,90052,90053],{"class":38,"line":8452},[36,90054,2880],{"emptyLinePlaceholder":553},[36,90056,90057,90059,90061],{"class":38,"line":8457},[36,90058,52262],{"class":42},[36,90060,51112],{"class":51777},[36,90062,51784],{"class":42},[19,90064,90065],{},[519,90066],{"alt":31,"src":90067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[579,90069,90070],{"start":73},[582,90071,90072],{},"bind()",[19,90074,90075],{},[519,90076],{"alt":31,"src":90077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90079,90080],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90082,90083],{},"bind的语法跟call很相似",[26,90085,90087],{"className":53544,"code":90086,"language":53546,"meta":31,"style":31},"\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",[33,90088,90089,90097,90105,90109,90114,90118,90122,90127,90131,90136,90141,90146,90151,90156,90161,90166,90170,90178],{"__ignoreMap":31},[36,90090,90091,90093,90095],{"class":38,"line":39},[36,90092,1523],{"class":42},[36,90094,52277],{"class":51777},[36,90096,51784],{"class":42},[36,90098,90099,90101,90103],{"class":38,"line":66},[36,90100,52621],{"class":42},[36,90102,52290],{"class":51777},[36,90104,51784],{"class":42},[36,90106,90107],{"class":38,"line":73},[36,90108,72000],{"class":42},[36,90110,90111],{"class":38,"line":79},[36,90112,90113],{"class":42},"      age: 18\n",[36,90115,90116],{"class":38,"line":85},[36,90117,2667],{"class":42},[36,90119,90120],{"class":38,"line":419},[36,90121,77620],{"class":42},[36,90123,90124],{"class":38,"line":425},[36,90125,90126],{"class":42},"      console.log(this)\n",[36,90128,90129],{"class":38,"line":431},[36,90130,2667],{"class":42},[36,90132,90133],{"class":38,"line":437},[36,90134,90135],{"class":42},"    \u002F\u002F 1.bind 不会调用函数\n",[36,90137,90138],{"class":38,"line":443},[36,90139,90140],{"class":42},"    \u002F\u002F 2.bind能改变this的指向\n",[36,90142,90143],{"class":38,"line":2092},[36,90144,90145],{"class":42},"    fn.bind()\n",[36,90147,90148],{"class":38,"line":2097},[36,90149,90150],{"class":42},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,90152,90153],{"class":38,"line":2103},[36,90154,90155],{"class":42},"    const fun = fn.bind(obj)\n",[36,90157,90158],{"class":38,"line":2108},[36,90159,90160],{"class":42},"    \u002F\u002F console.log(fun)\n",[36,90162,90163],{"class":38,"line":2122},[36,90164,90165],{"class":42},"    \u002F\u002F 调用,查看this的指向\n",[36,90167,90168],{"class":38,"line":2127},[36,90169,53128],{"class":42},[36,90171,90172,90174,90176],{"class":38,"line":2133},[36,90173,52894],{"class":42},[36,90175,52290],{"class":51777},[36,90177,51784],{"class":42},[36,90179,90180,90182,90184],{"class":38,"line":2154},[36,90181,52262],{"class":42},[36,90183,52277],{"class":51777},[36,90185,51784],{"class":42},[19,90187,90188],{},[519,90189],{"alt":31,"src":90190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[579,90192,90193],{"start":79},[582,90194,90195],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,90197,90199],{"className":53544,"code":90198,"language":53546,"meta":31,"style":31},"\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",[33,90200,90201,90209,90222,90230,90235,90239,90244,90249,90254,90259,90264,90269,90274,90279,90283,90291],{"__ignoreMap":31},[36,90202,90203,90205,90207],{"class":38,"line":39},[36,90204,1523],{"class":42},[36,90206,52277],{"class":51777},[36,90208,51784],{"class":42},[36,90210,90211,90213,90215,90218,90220],{"class":38,"line":66},[36,90212,52621],{"class":42},[36,90214,54364],{"class":51777},[36,90216,90217],{"class":42},">禁用\u003C\u002F",[36,90219,54364],{"class":51777},[36,90221,51784],{"class":42},[36,90223,90224,90226,90228],{"class":38,"line":73},[36,90225,52621],{"class":42},[36,90227,52290],{"class":51777},[36,90229,51784],{"class":42},[36,90231,90232],{"class":38,"line":79},[36,90233,90234],{"class":42},"    const btn = document.querySelector('button')\n",[36,90236,90237],{"class":38,"line":85},[36,90238,59493],{"class":42},[36,90240,90241],{"class":38,"line":419},[36,90242,90243],{"class":42},"      this.disabled = true\n",[36,90245,90246],{"class":38,"line":425},[36,90247,90248],{"class":42},"      \u002F\u002F 定时器是window进行调用的\n",[36,90250,90251],{"class":38,"line":431},[36,90252,90253],{"class":42},"      setTimeout(function () {\n",[36,90255,90256],{"class":38,"line":437},[36,90257,90258],{"class":42},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,90260,90261],{"class":38,"line":443},[36,90262,90263],{"class":42},"        this.disabled = false\n",[36,90265,90266],{"class":38,"line":2092},[36,90267,90268],{"class":42},"      }.bind(this), 2000)\n",[36,90270,90271],{"class":38,"line":2097},[36,90272,90273],{"class":42},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,90275,90276],{"class":38,"line":2103},[36,90277,90278],{"class":42},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,90280,90281],{"class":38,"line":2108},[36,90282,33938],{"class":42},[36,90284,90285,90287,90289],{"class":38,"line":2122},[36,90286,52894],{"class":42},[36,90288,52290],{"class":51777},[36,90290,51784],{"class":42},[36,90292,90293,90295,90297],{"class":38,"line":2127},[36,90294,52262],{"class":42},[36,90296,52277],{"class":51777},[36,90298,51784],{"class":42},[579,90300,90301],{"start":85},[582,90302,22433],{},[19,90304,90305],{},[519,90306],{"alt":31,"src":90307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90309,90311],{"id":90310},"_417-性能优化","4.17 性能优化",[596,90313,90315],{"id":90314},"_4171-防抖","4.17.1 防抖",[19,90317,90318],{},[519,90319],{"alt":31,"src":90320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90322,90323],{},[770,90324,90325],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90327,90328],{},"防抖实现方式：",[1620,90330,90331],{},[582,90332,90333],{},"lodash 提供了防抖处理",[19,90335,90336],{},"_.debounce(func,[wait=0],[options={}])",[19,90338,90339],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,90341,90343],{"className":51110,"code":90342,"language":51112,"meta":31,"style":31},"\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",[33,90344,90345,90355,90369,90373,90381,90395,90415,90427,90435,90441,90451,90463,90475,90486,90498,90508,90518,90531,90535,90543,90551,90555,90563,90581,90599,90607,90626,90636,90645,90656,90661,90665,90670,90675,90680,90705,90713,90721,90725],{"__ignoreMap":31},[36,90346,90347,90349,90351,90353],{"class":38,"line":39},[36,90348,51774],{"class":42},[36,90350,51778],{"class":51777},[36,90352,51781],{"class":2443},[36,90354,51784],{"class":42},[36,90356,90357,90359,90361,90363,90365,90367],{"class":38,"line":66},[36,90358,1523],{"class":42},[36,90360,51112],{"class":51777},[36,90362,51793],{"class":2443},[36,90364,47],{"class":42},[36,90366,51798],{"class":405},[36,90368,51784],{"class":42},[36,90370,90371],{"class":38,"line":73},[36,90372,2880],{"emptyLinePlaceholder":553},[36,90374,90375,90377,90379],{"class":38,"line":79},[36,90376,1523],{"class":42},[36,90378,51811],{"class":51777},[36,90380,51784],{"class":42},[36,90382,90383,90385,90387,90389,90391,90393],{"class":38,"line":85},[36,90384,52621],{"class":42},[36,90386,51821],{"class":51777},[36,90388,51824],{"class":2443},[36,90390,47],{"class":42},[36,90392,51829],{"class":405},[36,90394,51784],{"class":42},[36,90396,90397,90399,90401,90403,90405,90407,90409,90411,90413],{"class":38,"line":419},[36,90398,52621],{"class":42},[36,90400,51821],{"class":51777},[36,90402,15400],{"class":2443},[36,90404,47],{"class":42},[36,90406,51868],{"class":405},[36,90408,51848],{"class":2443},[36,90410,47],{"class":42},[36,90412,51875],{"class":405},[36,90414,51784],{"class":42},[36,90416,90417,90419,90421,90423,90425],{"class":38,"line":425},[36,90418,52621],{"class":42},[36,90420,51884],{"class":51777},[36,90422,51887],{"class":42},[36,90424,51884],{"class":51777},[36,90426,51784],{"class":42},[36,90428,90429,90431,90433],{"class":38,"line":431},[36,90430,52621],{"class":42},[36,90432,539],{"class":51777},[36,90434,51784],{"class":42},[36,90436,90437,90439],{"class":38,"line":437},[36,90438,55229],{"class":2443},[36,90440,16052],{"class":42},[36,90442,90443,90445,90447,90449],{"class":38,"line":443},[36,90444,73073],{"class":53},[36,90446,51914],{"class":42},[36,90448,60982],{"class":53},[36,90450,1774],{"class":42},[36,90452,90453,90455,90457,90459,90461],{"class":38,"line":2092},[36,90454,55248],{"class":53},[36,90456,51914],{"class":42},[36,90458,2202],{"class":53},[36,90460,51969],{"class":46},[36,90462,1774],{"class":42},[36,90464,90465,90467,90469,90471,90473],{"class":38,"line":2097},[36,90466,55262],{"class":53},[36,90468,51914],{"class":42},[36,90470,2202],{"class":53},[36,90472,51969],{"class":46},[36,90474,1774],{"class":42},[36,90476,90477,90479,90481,90484],{"class":38,"line":2103},[36,90478,55361],{"class":53},[36,90480,51914],{"class":42},[36,90482,90483],{"class":53},"gray",[36,90485,1774],{"class":42},[36,90487,90488,90490,90492,90494,90496],{"class":38,"line":2108},[36,90489,55399],{"class":53},[36,90491,51914],{"class":42},[36,90493,1438],{"class":53},[36,90495,51969],{"class":46},[36,90497,1774],{"class":42},[36,90499,90500,90502,90504,90506],{"class":38,"line":2122},[36,90501,57893],{"class":53},[36,90503,51914],{"class":42},[36,90505,61319],{"class":53},[36,90507,1774],{"class":42},[36,90509,90510,90512,90514,90516],{"class":38,"line":2127},[36,90511,57763],{"class":53},[36,90513,51914],{"class":42},[36,90515,52069],{"class":53},[36,90517,1774],{"class":42},[36,90519,90520,90523,90525,90527,90529],{"class":38,"line":2133},[36,90521,90522],{"class":53},"      padding-top",[36,90524,51914],{"class":42},[36,90526,938],{"class":53},[36,90528,51969],{"class":46},[36,90530,1774],{"class":42},[36,90532,90533],{"class":38,"line":2154},[36,90534,2667],{"class":42},[36,90536,90537,90539,90541],{"class":38,"line":2159},[36,90538,52894],{"class":42},[36,90540,539],{"class":51777},[36,90542,51784],{"class":42},[36,90544,90545,90547,90549],{"class":38,"line":2173},[36,90546,52262],{"class":42},[36,90548,51811],{"class":51777},[36,90550,51784],{"class":42},[36,90552,90553],{"class":38,"line":2178},[36,90554,2880],{"emptyLinePlaceholder":553},[36,90556,90557,90559,90561],{"class":38,"line":2207},[36,90558,1523],{"class":42},[36,90560,52277],{"class":51777},[36,90562,51784],{"class":42},[36,90564,90565,90567,90569,90571,90573,90575,90577,90579],{"class":38,"line":2212},[36,90566,52621],{"class":42},[36,90568,52088],{"class":51777},[36,90570,53963],{"class":2443},[36,90572,47],{"class":42},[36,90574,53968],{"class":405},[36,90576,55791],{"class":42},[36,90578,52088],{"class":51777},[36,90580,51784],{"class":42},[36,90582,90583,90585,90587,90589,90591,90593,90595,90597],{"class":38,"line":2229},[36,90584,52621],{"class":42},[36,90586,52290],{"class":51777},[36,90588,55716],{"class":2443},[36,90590,47],{"class":42},[36,90592,88751],{"class":405},[36,90594,55791],{"class":42},[36,90596,52290],{"class":51777},[36,90598,51784],{"class":42},[36,90600,90601,90603,90605],{"class":38,"line":2234},[36,90602,52621],{"class":42},[36,90604,52290],{"class":51777},[36,90606,51784],{"class":42},[36,90608,90609,90611,90613,90615,90617,90619,90621,90624],{"class":38,"line":2239},[36,90610,11701],{"class":46},[36,90612,87410],{"class":53},[36,90614,14044],{"class":46},[36,90616,54873],{"class":42},[36,90618,54876],{"class":2443},[36,90620,345],{"class":42},[36,90622,90623],{"class":405},"'.box'",[36,90625,63],{"class":42},[36,90627,90628,90630,90632,90634],{"class":38,"line":2244},[36,90629,52696],{"class":46},[36,90631,9918],{"class":42},[36,90633,47],{"class":46},[36,90635,47810],{"class":53},[36,90637,90638,90640,90643],{"class":38,"line":2258},[36,90639,70561],{"class":46},[36,90641,90642],{"class":2443}," mouseMove",[36,90644,11333],{"class":42},[36,90646,90647,90650,90652,90654],{"class":38,"line":2263},[36,90648,90649],{"class":42},"      box.innerHTML ",[36,90651,47],{"class":46},[36,90653,3512],{"class":42},[36,90655,3182],{"class":46},[36,90657,90658],{"class":38,"line":3057},[36,90659,90660],{"class":69},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,90662,90663],{"class":38,"line":3071},[36,90664,2667],{"class":42},[36,90666,90667],{"class":38,"line":3079},[36,90668,90669],{"class":69},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,90671,90672],{"class":38,"line":3084},[36,90673,90674],{"class":69},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,90676,90677],{"class":38,"line":3090},[36,90678,90679],{"class":69},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,90681,90682,90685,90687,90689,90692,90695,90698,90701,90703],{"class":38,"line":3096},[36,90683,90684],{"class":42},"    box.",[36,90686,58290],{"class":2443},[36,90688,345],{"class":42},[36,90690,90691],{"class":405},"'mousemove'",[36,90693,90694],{"class":42},", _.",[36,90696,90697],{"class":2443},"debounce",[36,90699,90700],{"class":42},"(mouseMove, ",[36,90702,65551],{"class":53},[36,90704,370],{"class":42},[36,90706,90707,90709,90711],{"class":38,"line":3101},[36,90708,52894],{"class":42},[36,90710,52290],{"class":51777},[36,90712,51784],{"class":42},[36,90714,90715,90717,90719],{"class":38,"line":8428},[36,90716,52262],{"class":42},[36,90718,52277],{"class":51777},[36,90720,51784],{"class":42},[36,90722,90723],{"class":38,"line":8452},[36,90724,2880],{"emptyLinePlaceholder":553},[36,90726,90727,90729,90731],{"class":38,"line":8457},[36,90728,52262],{"class":42},[36,90730,51112],{"class":51777},[36,90732,51784],{"class":42},[1620,90734,90735],{},[582,90736,90737],{},"手写一个防抖函数来处理",[19,90739,90740],{},"防抖的核心就是利用定时器来实现的：",[19,90742,90743],{},"①声明一个定时器变量",[19,90745,90746],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90748,90749],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,90751,90753],{"className":51110,"code":90752,"language":51112,"meta":31,"style":31},"\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",[33,90754,90755,90765,90779,90783,90791,90805,90825,90837,90845,90851,90861,90873,90885,90895,90907,90917,90927,90939,90943,90951,90959,90963,90971,90989,91007,91015,91033,91043,91051,91061,91065,91069,91073,91078,91083,91088,91093,91098,91103,91121,91128,91133,91141,91146,91159,91175,91185,91190,91194,91198,91218,91222,91227,91232,91237,91242,91250,91258,91262],{"__ignoreMap":31},[36,90756,90757,90759,90761,90763],{"class":38,"line":39},[36,90758,51774],{"class":42},[36,90760,51778],{"class":51777},[36,90762,51781],{"class":2443},[36,90764,51784],{"class":42},[36,90766,90767,90769,90771,90773,90775,90777],{"class":38,"line":66},[36,90768,1523],{"class":42},[36,90770,51112],{"class":51777},[36,90772,51793],{"class":2443},[36,90774,47],{"class":42},[36,90776,51798],{"class":405},[36,90778,51784],{"class":42},[36,90780,90781],{"class":38,"line":73},[36,90782,2880],{"emptyLinePlaceholder":553},[36,90784,90785,90787,90789],{"class":38,"line":79},[36,90786,1523],{"class":42},[36,90788,51811],{"class":51777},[36,90790,51784],{"class":42},[36,90792,90793,90795,90797,90799,90801,90803],{"class":38,"line":85},[36,90794,52621],{"class":42},[36,90796,51821],{"class":51777},[36,90798,51824],{"class":2443},[36,90800,47],{"class":42},[36,90802,51829],{"class":405},[36,90804,51784],{"class":42},[36,90806,90807,90809,90811,90813,90815,90817,90819,90821,90823],{"class":38,"line":419},[36,90808,52621],{"class":42},[36,90810,51821],{"class":51777},[36,90812,15400],{"class":2443},[36,90814,47],{"class":42},[36,90816,51868],{"class":405},[36,90818,51848],{"class":2443},[36,90820,47],{"class":42},[36,90822,51875],{"class":405},[36,90824,51784],{"class":42},[36,90826,90827,90829,90831,90833,90835],{"class":38,"line":425},[36,90828,52621],{"class":42},[36,90830,51884],{"class":51777},[36,90832,51887],{"class":42},[36,90834,51884],{"class":51777},[36,90836,51784],{"class":42},[36,90838,90839,90841,90843],{"class":38,"line":431},[36,90840,52621],{"class":42},[36,90842,539],{"class":51777},[36,90844,51784],{"class":42},[36,90846,90847,90849],{"class":38,"line":437},[36,90848,55229],{"class":2443},[36,90850,16052],{"class":42},[36,90852,90853,90855,90857,90859],{"class":38,"line":443},[36,90854,73073],{"class":53},[36,90856,51914],{"class":42},[36,90858,60982],{"class":53},[36,90860,1774],{"class":42},[36,90862,90863,90865,90867,90869,90871],{"class":38,"line":2092},[36,90864,55248],{"class":53},[36,90866,51914],{"class":42},[36,90868,2202],{"class":53},[36,90870,51969],{"class":46},[36,90872,1774],{"class":42},[36,90874,90875,90877,90879,90881,90883],{"class":38,"line":2097},[36,90876,55262],{"class":53},[36,90878,51914],{"class":42},[36,90880,2202],{"class":53},[36,90882,51969],{"class":46},[36,90884,1774],{"class":42},[36,90886,90887,90889,90891,90893],{"class":38,"line":2103},[36,90888,55361],{"class":53},[36,90890,51914],{"class":42},[36,90892,90483],{"class":53},[36,90894,1774],{"class":42},[36,90896,90897,90899,90901,90903,90905],{"class":38,"line":2108},[36,90898,55399],{"class":53},[36,90900,51914],{"class":42},[36,90902,1438],{"class":53},[36,90904,51969],{"class":46},[36,90906,1774],{"class":42},[36,90908,90909,90911,90913,90915],{"class":38,"line":2122},[36,90910,57893],{"class":53},[36,90912,51914],{"class":42},[36,90914,61319],{"class":53},[36,90916,1774],{"class":42},[36,90918,90919,90921,90923,90925],{"class":38,"line":2127},[36,90920,57763],{"class":53},[36,90922,51914],{"class":42},[36,90924,52069],{"class":53},[36,90926,1774],{"class":42},[36,90928,90929,90931,90933,90935,90937],{"class":38,"line":2133},[36,90930,90522],{"class":53},[36,90932,51914],{"class":42},[36,90934,938],{"class":53},[36,90936,51969],{"class":46},[36,90938,1774],{"class":42},[36,90940,90941],{"class":38,"line":2154},[36,90942,2667],{"class":42},[36,90944,90945,90947,90949],{"class":38,"line":2159},[36,90946,52894],{"class":42},[36,90948,539],{"class":51777},[36,90950,51784],{"class":42},[36,90952,90953,90955,90957],{"class":38,"line":2173},[36,90954,52262],{"class":42},[36,90956,51811],{"class":51777},[36,90958,51784],{"class":42},[36,90960,90961],{"class":38,"line":2178},[36,90962,2880],{"emptyLinePlaceholder":553},[36,90964,90965,90967,90969],{"class":38,"line":2207},[36,90966,1523],{"class":42},[36,90968,52277],{"class":51777},[36,90970,51784],{"class":42},[36,90972,90973,90975,90977,90979,90981,90983,90985,90987],{"class":38,"line":2212},[36,90974,52621],{"class":42},[36,90976,52088],{"class":51777},[36,90978,53963],{"class":2443},[36,90980,47],{"class":42},[36,90982,53968],{"class":405},[36,90984,55791],{"class":42},[36,90986,52088],{"class":51777},[36,90988,51784],{"class":42},[36,90990,90991,90993,90995,90997,90999,91001,91003,91005],{"class":38,"line":2229},[36,90992,52621],{"class":42},[36,90994,52290],{"class":51777},[36,90996,55716],{"class":2443},[36,90998,47],{"class":42},[36,91000,88751],{"class":405},[36,91002,55791],{"class":42},[36,91004,52290],{"class":51777},[36,91006,51784],{"class":42},[36,91008,91009,91011,91013],{"class":38,"line":2234},[36,91010,52621],{"class":42},[36,91012,52290],{"class":51777},[36,91014,51784],{"class":42},[36,91016,91017,91019,91021,91023,91025,91027,91029,91031],{"class":38,"line":2239},[36,91018,11701],{"class":46},[36,91020,87410],{"class":53},[36,91022,14044],{"class":46},[36,91024,54873],{"class":42},[36,91026,54876],{"class":2443},[36,91028,345],{"class":42},[36,91030,90623],{"class":405},[36,91032,63],{"class":42},[36,91034,91035,91037,91039,91041],{"class":38,"line":2244},[36,91036,52696],{"class":46},[36,91038,9918],{"class":42},[36,91040,47],{"class":46},[36,91042,47810],{"class":53},[36,91044,91045,91047,91049],{"class":38,"line":2258},[36,91046,70561],{"class":46},[36,91048,90642],{"class":2443},[36,91050,11333],{"class":42},[36,91052,91053,91055,91057,91059],{"class":38,"line":2263},[36,91054,90649],{"class":42},[36,91056,47],{"class":46},[36,91058,3512],{"class":42},[36,91060,3182],{"class":46},[36,91062,91063],{"class":38,"line":3057},[36,91064,90660],{"class":69},[36,91066,91067],{"class":38,"line":3071},[36,91068,2667],{"class":42},[36,91070,91071],{"class":38,"line":3079},[36,91072,90669],{"class":69},[36,91074,91075],{"class":38,"line":3084},[36,91076,91077],{"class":69},"    \u002F\u002F 手写防抖函数\n",[36,91079,91080],{"class":38,"line":3090},[36,91081,91082],{"class":69},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,91084,91085],{"class":38,"line":3096},[36,91086,91087],{"class":69},"    \u002F\u002F 1.声明定时器变量\n",[36,91089,91090],{"class":38,"line":3101},[36,91091,91092],{"class":69},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,91094,91095],{"class":38,"line":8428},[36,91096,91097],{"class":69},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,91099,91100],{"class":38,"line":8452},[36,91101,91102],{"class":69},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,91104,91105,91107,91110,91112,91115,91117,91119],{"class":38,"line":8457},[36,91106,70561],{"class":46},[36,91108,91109],{"class":2443}," debounce",[36,91111,345],{"class":42},[36,91113,91114],{"class":5696},"fn",[36,91116,12915],{"class":42},[36,91118,1333],{"class":5696},[36,91120,12922],{"class":42},[36,91122,91123,91125],{"class":38,"line":8463},[36,91124,80249],{"class":46},[36,91126,91127],{"class":42}," timer\n",[36,91129,91130],{"class":38,"line":8490},[36,91131,91132],{"class":69},"      \u002F\u002F return 返回一个匿名函数\n",[36,91134,91135,91137,91139],{"class":38,"line":8495},[36,91136,74459],{"class":46},[36,91138,59395],{"class":46},[36,91140,54929],{"class":42},[36,91142,91143],{"class":38,"line":8501},[36,91144,91145],{"class":69},"        \u002F\u002F 这里边写第二三四步\n",[36,91147,91148,91150,91153,91156],{"class":38,"line":8513},[36,91149,2977],{"class":46},[36,91151,91152],{"class":42}," (timer) ",[36,91154,91155],{"class":2443},"clearTimeout",[36,91157,91158],{"class":42},"(timer)\n",[36,91160,91161,91164,91166,91169,91171,91173],{"class":38,"line":8525},[36,91162,91163],{"class":42},"        timer ",[36,91165,47],{"class":46},[36,91167,91168],{"class":2443}," setTimeout",[36,91170,345],{"class":42},[36,91172,54926],{"class":46},[36,91174,54929],{"class":42},[36,91176,91177,91180,91182],{"class":38,"line":8537},[36,91178,91179],{"class":2443},"          fn",[36,91181,13530],{"class":42},[36,91183,91184],{"class":69},"\u002F\u002F加小括号调用fn }, t)\n",[36,91186,91187],{"class":38,"line":10196},[36,91188,91189],{"class":42},"        }, t)\n",[36,91191,91192],{"class":38,"line":10221},[36,91193,52875],{"class":42},[36,91195,91196],{"class":38,"line":10244},[36,91197,2667],{"class":42},[36,91199,91200,91202,91204,91206,91208,91210,91212,91214,91216],{"class":38,"line":10268},[36,91201,90684],{"class":42},[36,91203,58290],{"class":2443},[36,91205,345],{"class":42},[36,91207,90691],{"class":405},[36,91209,12915],{"class":42},[36,91211,90697],{"class":2443},[36,91213,90700],{"class":42},[36,91215,65551],{"class":53},[36,91217,370],{"class":42},[36,91219,91220],{"class":38,"line":10273},[36,91221,2880],{"emptyLinePlaceholder":553},[36,91223,91224],{"class":38,"line":10278},[36,91225,91226],{"class":69},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,91228,91229],{"class":38,"line":10283},[36,91230,91231],{"class":69},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,91233,91234],{"class":38,"line":10292},[36,91235,91236],{"class":69},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,91238,91239],{"class":38,"line":10297},[36,91240,91241],{"class":69},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,91243,91244,91246,91248],{"class":38,"line":10303},[36,91245,52894],{"class":42},[36,91247,52290],{"class":51777},[36,91249,51784],{"class":42},[36,91251,91252,91254,91256],{"class":38,"line":10324},[36,91253,52262],{"class":42},[36,91255,52277],{"class":51777},[36,91257,51784],{"class":42},[36,91259,91260],{"class":38,"line":10330},[36,91261,2880],{"emptyLinePlaceholder":553},[36,91263,91264,91266,91268],{"class":38,"line":10344},[36,91265,52262],{"class":42},[36,91267,51112],{"class":51777},[36,91269,51784],{"class":42},[596,91271,91273],{"id":91272},"_4172-节流","4.17.2 节流",[19,91275,91276],{},[519,91277],{"alt":31,"src":91278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91280,91281],{},[519,91282],{"alt":31,"src":91283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91285,91286],{},[770,91287,91288],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91290,91291],{},"实现方式：",[1620,91293,91294],{},[582,91295,91296],{},"lodash 提供的节流函数来处理",[19,91298,91299],{},"_.throttle(func,[wait=0],[options=])",[19,91301,91302],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,91304,91306],{"className":51110,"code":91305,"language":51112,"meta":31,"style":31},"\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",[33,91307,91308,91318,91332,91336,91344,91358,91378,91390,91398,91404,91414,91426,91438,91448,91460,91470,91480,91492,91496,91504,91512,91516,91524,91542,91560,91568,91586,91596,91604,91614,91618,91622,91626,91631,91636,91657,91665,91673,91677],{"__ignoreMap":31},[36,91309,91310,91312,91314,91316],{"class":38,"line":39},[36,91311,51774],{"class":42},[36,91313,51778],{"class":51777},[36,91315,51781],{"class":2443},[36,91317,51784],{"class":42},[36,91319,91320,91322,91324,91326,91328,91330],{"class":38,"line":66},[36,91321,1523],{"class":42},[36,91323,51112],{"class":51777},[36,91325,51793],{"class":2443},[36,91327,47],{"class":42},[36,91329,51798],{"class":405},[36,91331,51784],{"class":42},[36,91333,91334],{"class":38,"line":73},[36,91335,2880],{"emptyLinePlaceholder":553},[36,91337,91338,91340,91342],{"class":38,"line":79},[36,91339,1523],{"class":42},[36,91341,51811],{"class":51777},[36,91343,51784],{"class":42},[36,91345,91346,91348,91350,91352,91354,91356],{"class":38,"line":85},[36,91347,52621],{"class":42},[36,91349,51821],{"class":51777},[36,91351,51824],{"class":2443},[36,91353,47],{"class":42},[36,91355,51829],{"class":405},[36,91357,51784],{"class":42},[36,91359,91360,91362,91364,91366,91368,91370,91372,91374,91376],{"class":38,"line":419},[36,91361,52621],{"class":42},[36,91363,51821],{"class":51777},[36,91365,15400],{"class":2443},[36,91367,47],{"class":42},[36,91369,51868],{"class":405},[36,91371,51848],{"class":2443},[36,91373,47],{"class":42},[36,91375,51875],{"class":405},[36,91377,51784],{"class":42},[36,91379,91380,91382,91384,91386,91388],{"class":38,"line":425},[36,91381,52621],{"class":42},[36,91383,51884],{"class":51777},[36,91385,51887],{"class":42},[36,91387,51884],{"class":51777},[36,91389,51784],{"class":42},[36,91391,91392,91394,91396],{"class":38,"line":431},[36,91393,52621],{"class":42},[36,91395,539],{"class":51777},[36,91397,51784],{"class":42},[36,91399,91400,91402],{"class":38,"line":437},[36,91401,55229],{"class":2443},[36,91403,16052],{"class":42},[36,91405,91406,91408,91410,91412],{"class":38,"line":443},[36,91407,73073],{"class":53},[36,91409,51914],{"class":42},[36,91411,60982],{"class":53},[36,91413,1774],{"class":42},[36,91415,91416,91418,91420,91422,91424],{"class":38,"line":2092},[36,91417,55248],{"class":53},[36,91419,51914],{"class":42},[36,91421,2202],{"class":53},[36,91423,51969],{"class":46},[36,91425,1774],{"class":42},[36,91427,91428,91430,91432,91434,91436],{"class":38,"line":2097},[36,91429,55262],{"class":53},[36,91431,51914],{"class":42},[36,91433,2202],{"class":53},[36,91435,51969],{"class":46},[36,91437,1774],{"class":42},[36,91439,91440,91442,91444,91446],{"class":38,"line":2103},[36,91441,55361],{"class":53},[36,91443,51914],{"class":42},[36,91445,90483],{"class":53},[36,91447,1774],{"class":42},[36,91449,91450,91452,91454,91456,91458],{"class":38,"line":2108},[36,91451,55399],{"class":53},[36,91453,51914],{"class":42},[36,91455,1438],{"class":53},[36,91457,51969],{"class":46},[36,91459,1774],{"class":42},[36,91461,91462,91464,91466,91468],{"class":38,"line":2122},[36,91463,57893],{"class":53},[36,91465,51914],{"class":42},[36,91467,61319],{"class":53},[36,91469,1774],{"class":42},[36,91471,91472,91474,91476,91478],{"class":38,"line":2127},[36,91473,57763],{"class":53},[36,91475,51914],{"class":42},[36,91477,52069],{"class":53},[36,91479,1774],{"class":42},[36,91481,91482,91484,91486,91488,91490],{"class":38,"line":2133},[36,91483,90522],{"class":53},[36,91485,51914],{"class":42},[36,91487,938],{"class":53},[36,91489,51969],{"class":46},[36,91491,1774],{"class":42},[36,91493,91494],{"class":38,"line":2154},[36,91495,2667],{"class":42},[36,91497,91498,91500,91502],{"class":38,"line":2159},[36,91499,52894],{"class":42},[36,91501,539],{"class":51777},[36,91503,51784],{"class":42},[36,91505,91506,91508,91510],{"class":38,"line":2173},[36,91507,52262],{"class":42},[36,91509,51811],{"class":51777},[36,91511,51784],{"class":42},[36,91513,91514],{"class":38,"line":2178},[36,91515,2880],{"emptyLinePlaceholder":553},[36,91517,91518,91520,91522],{"class":38,"line":2207},[36,91519,1523],{"class":42},[36,91521,52277],{"class":51777},[36,91523,51784],{"class":42},[36,91525,91526,91528,91530,91532,91534,91536,91538,91540],{"class":38,"line":2212},[36,91527,52621],{"class":42},[36,91529,52088],{"class":51777},[36,91531,53963],{"class":2443},[36,91533,47],{"class":42},[36,91535,53968],{"class":405},[36,91537,55791],{"class":42},[36,91539,52088],{"class":51777},[36,91541,51784],{"class":42},[36,91543,91544,91546,91548,91550,91552,91554,91556,91558],{"class":38,"line":2229},[36,91545,52621],{"class":42},[36,91547,52290],{"class":51777},[36,91549,55716],{"class":2443},[36,91551,47],{"class":42},[36,91553,88751],{"class":405},[36,91555,55791],{"class":42},[36,91557,52290],{"class":51777},[36,91559,51784],{"class":42},[36,91561,91562,91564,91566],{"class":38,"line":2234},[36,91563,52621],{"class":42},[36,91565,52290],{"class":51777},[36,91567,51784],{"class":42},[36,91569,91570,91572,91574,91576,91578,91580,91582,91584],{"class":38,"line":2239},[36,91571,11701],{"class":46},[36,91573,87410],{"class":53},[36,91575,14044],{"class":46},[36,91577,54873],{"class":42},[36,91579,54876],{"class":2443},[36,91581,345],{"class":42},[36,91583,90623],{"class":405},[36,91585,63],{"class":42},[36,91587,91588,91590,91592,91594],{"class":38,"line":2244},[36,91589,52696],{"class":46},[36,91591,9918],{"class":42},[36,91593,47],{"class":46},[36,91595,47810],{"class":53},[36,91597,91598,91600,91602],{"class":38,"line":2258},[36,91599,70561],{"class":46},[36,91601,90642],{"class":2443},[36,91603,11333],{"class":42},[36,91605,91606,91608,91610,91612],{"class":38,"line":2263},[36,91607,90649],{"class":42},[36,91609,47],{"class":46},[36,91611,3512],{"class":42},[36,91613,3182],{"class":46},[36,91615,91616],{"class":38,"line":3057},[36,91617,90660],{"class":69},[36,91619,91620],{"class":38,"line":3071},[36,91621,2667],{"class":42},[36,91623,91624],{"class":38,"line":3079},[36,91625,90669],{"class":69},[36,91627,91628],{"class":38,"line":3084},[36,91629,91630],{"class":69},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,91632,91633],{"class":38,"line":3090},[36,91634,91635],{"class":69},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,91637,91638,91640,91642,91644,91646,91648,91651,91653,91655],{"class":38,"line":3096},[36,91639,90684],{"class":42},[36,91641,58290],{"class":2443},[36,91643,345],{"class":42},[36,91645,90691],{"class":405},[36,91647,90694],{"class":42},[36,91649,91650],{"class":2443},"throttle",[36,91652,90700],{"class":42},[36,91654,65551],{"class":53},[36,91656,370],{"class":42},[36,91658,91659,91661,91663],{"class":38,"line":3101},[36,91660,52894],{"class":42},[36,91662,52290],{"class":51777},[36,91664,51784],{"class":42},[36,91666,91667,91669,91671],{"class":38,"line":8428},[36,91668,52262],{"class":42},[36,91670,52277],{"class":51777},[36,91672,51784],{"class":42},[36,91674,91675],{"class":38,"line":8452},[36,91676,2880],{"emptyLinePlaceholder":553},[36,91678,91679,91681,91683],{"class":38,"line":8457},[36,91680,52262],{"class":42},[36,91682,51112],{"class":51777},[36,91684,51784],{"class":42},[1620,91686,91687],{},[582,91688,91689],{},"手写一个节流函数来处理",[19,91691,71429],{},[19,91693,90743],{},[19,91695,91696],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91698,91699],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,91701,91703],{"className":51110,"code":91702,"language":51112,"meta":31,"style":31},"\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",[33,91704,91705,91715,91729,91733,91741,91755,91775,91787,91795,91801,91811,91823,91835,91845,91857,91867,91877,91889,91893,91901,91909,91913,91921,91939,91957,91965,91983,91993,92001,92011,92015,92019,92023,92028,92033,92038,92043,92048,92053,92070,92076,92084,92095,92110,92117,92122,92127,92137,92142,92147,92152,92156,92160,92164,92184,92192,92200,92204],{"__ignoreMap":31},[36,91706,91707,91709,91711,91713],{"class":38,"line":39},[36,91708,51774],{"class":42},[36,91710,51778],{"class":51777},[36,91712,51781],{"class":2443},[36,91714,51784],{"class":42},[36,91716,91717,91719,91721,91723,91725,91727],{"class":38,"line":66},[36,91718,1523],{"class":42},[36,91720,51112],{"class":51777},[36,91722,51793],{"class":2443},[36,91724,47],{"class":42},[36,91726,51798],{"class":405},[36,91728,51784],{"class":42},[36,91730,91731],{"class":38,"line":73},[36,91732,2880],{"emptyLinePlaceholder":553},[36,91734,91735,91737,91739],{"class":38,"line":79},[36,91736,1523],{"class":42},[36,91738,51811],{"class":51777},[36,91740,51784],{"class":42},[36,91742,91743,91745,91747,91749,91751,91753],{"class":38,"line":85},[36,91744,52621],{"class":42},[36,91746,51821],{"class":51777},[36,91748,51824],{"class":2443},[36,91750,47],{"class":42},[36,91752,51829],{"class":405},[36,91754,51784],{"class":42},[36,91756,91757,91759,91761,91763,91765,91767,91769,91771,91773],{"class":38,"line":419},[36,91758,52621],{"class":42},[36,91760,51821],{"class":51777},[36,91762,15400],{"class":2443},[36,91764,47],{"class":42},[36,91766,51868],{"class":405},[36,91768,51848],{"class":2443},[36,91770,47],{"class":42},[36,91772,51875],{"class":405},[36,91774,51784],{"class":42},[36,91776,91777,91779,91781,91783,91785],{"class":38,"line":425},[36,91778,52621],{"class":42},[36,91780,51884],{"class":51777},[36,91782,51887],{"class":42},[36,91784,51884],{"class":51777},[36,91786,51784],{"class":42},[36,91788,91789,91791,91793],{"class":38,"line":431},[36,91790,52621],{"class":42},[36,91792,539],{"class":51777},[36,91794,51784],{"class":42},[36,91796,91797,91799],{"class":38,"line":437},[36,91798,55229],{"class":2443},[36,91800,16052],{"class":42},[36,91802,91803,91805,91807,91809],{"class":38,"line":443},[36,91804,73073],{"class":53},[36,91806,51914],{"class":42},[36,91808,60982],{"class":53},[36,91810,1774],{"class":42},[36,91812,91813,91815,91817,91819,91821],{"class":38,"line":2092},[36,91814,55248],{"class":53},[36,91816,51914],{"class":42},[36,91818,2202],{"class":53},[36,91820,51969],{"class":46},[36,91822,1774],{"class":42},[36,91824,91825,91827,91829,91831,91833],{"class":38,"line":2097},[36,91826,55262],{"class":53},[36,91828,51914],{"class":42},[36,91830,2202],{"class":53},[36,91832,51969],{"class":46},[36,91834,1774],{"class":42},[36,91836,91837,91839,91841,91843],{"class":38,"line":2103},[36,91838,55361],{"class":53},[36,91840,51914],{"class":42},[36,91842,90483],{"class":53},[36,91844,1774],{"class":42},[36,91846,91847,91849,91851,91853,91855],{"class":38,"line":2108},[36,91848,55399],{"class":53},[36,91850,51914],{"class":42},[36,91852,1438],{"class":53},[36,91854,51969],{"class":46},[36,91856,1774],{"class":42},[36,91858,91859,91861,91863,91865],{"class":38,"line":2122},[36,91860,57893],{"class":53},[36,91862,51914],{"class":42},[36,91864,61319],{"class":53},[36,91866,1774],{"class":42},[36,91868,91869,91871,91873,91875],{"class":38,"line":2127},[36,91870,57763],{"class":53},[36,91872,51914],{"class":42},[36,91874,52069],{"class":53},[36,91876,1774],{"class":42},[36,91878,91879,91881,91883,91885,91887],{"class":38,"line":2133},[36,91880,90522],{"class":53},[36,91882,51914],{"class":42},[36,91884,938],{"class":53},[36,91886,51969],{"class":46},[36,91888,1774],{"class":42},[36,91890,91891],{"class":38,"line":2154},[36,91892,2667],{"class":42},[36,91894,91895,91897,91899],{"class":38,"line":2159},[36,91896,52894],{"class":42},[36,91898,539],{"class":51777},[36,91900,51784],{"class":42},[36,91902,91903,91905,91907],{"class":38,"line":2173},[36,91904,52262],{"class":42},[36,91906,51811],{"class":51777},[36,91908,51784],{"class":42},[36,91910,91911],{"class":38,"line":2178},[36,91912,2880],{"emptyLinePlaceholder":553},[36,91914,91915,91917,91919],{"class":38,"line":2207},[36,91916,1523],{"class":42},[36,91918,52277],{"class":51777},[36,91920,51784],{"class":42},[36,91922,91923,91925,91927,91929,91931,91933,91935,91937],{"class":38,"line":2212},[36,91924,52621],{"class":42},[36,91926,52088],{"class":51777},[36,91928,53963],{"class":2443},[36,91930,47],{"class":42},[36,91932,53968],{"class":405},[36,91934,55791],{"class":42},[36,91936,52088],{"class":51777},[36,91938,51784],{"class":42},[36,91940,91941,91943,91945,91947,91949,91951,91953,91955],{"class":38,"line":2229},[36,91942,52621],{"class":42},[36,91944,52290],{"class":51777},[36,91946,55716],{"class":2443},[36,91948,47],{"class":42},[36,91950,88751],{"class":405},[36,91952,55791],{"class":42},[36,91954,52290],{"class":51777},[36,91956,51784],{"class":42},[36,91958,91959,91961,91963],{"class":38,"line":2234},[36,91960,52621],{"class":42},[36,91962,52290],{"class":51777},[36,91964,51784],{"class":42},[36,91966,91967,91969,91971,91973,91975,91977,91979,91981],{"class":38,"line":2239},[36,91968,11701],{"class":46},[36,91970,87410],{"class":53},[36,91972,14044],{"class":46},[36,91974,54873],{"class":42},[36,91976,54876],{"class":2443},[36,91978,345],{"class":42},[36,91980,90623],{"class":405},[36,91982,63],{"class":42},[36,91984,91985,91987,91989,91991],{"class":38,"line":2244},[36,91986,52696],{"class":46},[36,91988,9918],{"class":42},[36,91990,47],{"class":46},[36,91992,47810],{"class":53},[36,91994,91995,91997,91999],{"class":38,"line":2258},[36,91996,70561],{"class":46},[36,91998,90642],{"class":2443},[36,92000,11333],{"class":42},[36,92002,92003,92005,92007,92009],{"class":38,"line":2263},[36,92004,90649],{"class":42},[36,92006,47],{"class":46},[36,92008,3512],{"class":42},[36,92010,3182],{"class":46},[36,92012,92013],{"class":38,"line":3057},[36,92014,90660],{"class":69},[36,92016,92017],{"class":38,"line":3071},[36,92018,2667],{"class":42},[36,92020,92021],{"class":38,"line":3079},[36,92022,90669],{"class":69},[36,92024,92025],{"class":38,"line":3084},[36,92026,92027],{"class":69},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,92029,92030],{"class":38,"line":3090},[36,92031,92032],{"class":69},"    \u002F\u002F 1.声明一个定时器变量\n",[36,92034,92035],{"class":38,"line":3096},[36,92036,92037],{"class":69},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,92039,92040],{"class":38,"line":3101},[36,92041,92042],{"class":69},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,92044,92045],{"class":38,"line":8428},[36,92046,92047],{"class":69},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,92049,92050],{"class":38,"line":8452},[36,92051,92052],{"class":69},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,92054,92055,92057,92060,92062,92064,92066,92068],{"class":38,"line":8457},[36,92056,70561],{"class":46},[36,92058,92059],{"class":2443}," throttle",[36,92061,345],{"class":42},[36,92063,91114],{"class":5696},[36,92065,12915],{"class":42},[36,92067,1333],{"class":5696},[36,92069,12922],{"class":42},[36,92071,92072,92074],{"class":38,"line":8463},[36,92073,80249],{"class":46},[36,92075,91127],{"class":42},[36,92077,92078,92080,92082],{"class":38,"line":8490},[36,92079,74459],{"class":46},[36,92081,59395],{"class":46},[36,92083,54929],{"class":42},[36,92085,92086,92088,92090,92092],{"class":38,"line":8495},[36,92087,2977],{"class":46},[36,92089,2138],{"class":42},[36,92091,846],{"class":46},[36,92093,92094],{"class":42},"timer) {\n",[36,92096,92097,92100,92102,92104,92106,92108],{"class":38,"line":8501},[36,92098,92099],{"class":42},"          timer ",[36,92101,47],{"class":46},[36,92103,91168],{"class":2443},[36,92105,345],{"class":42},[36,92107,54926],{"class":46},[36,92109,54929],{"class":42},[36,92111,92112,92115],{"class":38,"line":8513},[36,92113,92114],{"class":2443},"            fn",[36,92116,2456],{"class":42},[36,92118,92119],{"class":38,"line":8525},[36,92120,92121],{"class":69},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,92123,92124],{"class":38,"line":8537},[36,92125,92126],{"class":69},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,92128,92129,92132,92134],{"class":38,"line":10196},[36,92130,92131],{"class":42},"            timer ",[36,92133,47],{"class":46},[36,92135,92136],{"class":53}," null\n",[36,92138,92139],{"class":38,"line":10221},[36,92140,92141],{"class":69},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,92143,92144],{"class":38,"line":10244},[36,92145,92146],{"class":69},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,92148,92149],{"class":38,"line":10268},[36,92150,92151],{"class":42},"          }, t)\n",[36,92153,92154],{"class":38,"line":10273},[36,92155,3009],{"class":42},[36,92157,92158],{"class":38,"line":10278},[36,92159,52875],{"class":42},[36,92161,92162],{"class":38,"line":10283},[36,92163,2667],{"class":42},[36,92165,92166,92168,92170,92172,92174,92176,92178,92180,92182],{"class":38,"line":10292},[36,92167,90684],{"class":42},[36,92169,58290],{"class":2443},[36,92171,345],{"class":42},[36,92173,90691],{"class":405},[36,92175,12915],{"class":42},[36,92177,91650],{"class":2443},[36,92179,90700],{"class":42},[36,92181,65551],{"class":53},[36,92183,370],{"class":42},[36,92185,92186,92188,92190],{"class":38,"line":10297},[36,92187,52894],{"class":42},[36,92189,52290],{"class":51777},[36,92191,51784],{"class":42},[36,92193,92194,92196,92198],{"class":38,"line":10303},[36,92195,52262],{"class":42},[36,92197,52277],{"class":51777},[36,92199,51784],{"class":42},[36,92201,92202],{"class":38,"line":10324},[36,92203,2880],{"emptyLinePlaceholder":553},[36,92205,92206,92208,92210],{"class":38,"line":10330},[36,92207,52262],{"class":42},[36,92209,51112],{"class":51777},[36,92211,51784],{"class":42},[596,92213,92215],{"id":92214},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,92217,92219],{"className":53544,"code":92218,"language":53546,"meta":31,"style":31},"\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",[33,92220,92221,92229,92237,92242,92247,92252,92257,92261,92269],{"__ignoreMap":31},[36,92222,92223,92225,92227],{"class":38,"line":39},[36,92224,1523],{"class":42},[36,92226,52277],{"class":51777},[36,92228,51784],{"class":42},[36,92230,92231,92233,92235],{"class":38,"line":66},[36,92232,52621],{"class":42},[36,92234,52290],{"class":51777},[36,92236,51784],{"class":42},[36,92238,92239],{"class":38,"line":73},[36,92240,92241],{"class":42},"    let timer = null\n",[36,92243,92244],{"class":38,"line":79},[36,92245,92246],{"class":42},"    timer = setTimeout(() => {\n",[36,92248,92249],{"class":38,"line":85},[36,92250,92251],{"class":42},"      clearTimeout(timer)\n",[36,92253,92254],{"class":38,"line":419},[36,92255,92256],{"class":42},"      console.log(timer)\n",[36,92258,92259],{"class":38,"line":425},[36,92260,60702],{"class":42},[36,92262,92263,92265,92267],{"class":38,"line":431},[36,92264,52894],{"class":42},[36,92266,52290],{"class":51777},[36,92268,51784],{"class":42},[36,92270,92271,92273,92275],{"class":38,"line":437},[36,92272,52262],{"class":42},[36,92274,52277],{"class":51777},[36,92276,51784],{"class":42},[19,92278,92279],{},"输出为1",[19,92281,92282],{},"在开启的定时器里边写清除定时器",[19,92284,92285],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[596,92287,92289],{"id":92288},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92291,92292],{},"页面打开，可以记录上一次的视频播放位置",[19,92294,92295],{},[519,92296],{"alt":31,"src":92297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92299,92300],{},[519,92301],{"alt":31,"src":92302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,92304,92306],{"className":51110,"code":92305,"language":51112,"meta":31,"style":31},"\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",[33,92307,92308,92318,92332,92336,92344,92358,92378,92398,92420,92433,92441,92447,92457,92467,92477,92481,92485,92492,92505,92517,92521,92525,92535,92547,92561,92565,92569,92576,92586,92599,92611,92621,92631,92647,92659,92663,92667,92675,92685,92697,92707,92717,92727,92731,92735,92745,92756,92760,92768,92776,92780,92788,92803,92818,92833,92854,92862,92870,92885,92907,92915,92930,92956,92982,93008,93016,93024,93043,93051,93056,93075,93080,93098,93103,93108,93116,93121,93135,93143,93148,93165,93169,93174,93196,93200,93208,93216,93220],{"__ignoreMap":31},[36,92309,92310,92312,92314,92316],{"class":38,"line":39},[36,92311,51774],{"class":42},[36,92313,51778],{"class":51777},[36,92315,51781],{"class":2443},[36,92317,51784],{"class":42},[36,92319,92320,92322,92324,92326,92328,92330],{"class":38,"line":66},[36,92321,1523],{"class":42},[36,92323,51112],{"class":51777},[36,92325,51793],{"class":2443},[36,92327,47],{"class":42},[36,92329,51798],{"class":405},[36,92331,51784],{"class":42},[36,92333,92334],{"class":38,"line":73},[36,92335,2880],{"emptyLinePlaceholder":553},[36,92337,92338,92340,92342],{"class":38,"line":79},[36,92339,1523],{"class":42},[36,92341,51811],{"class":51777},[36,92343,51784],{"class":42},[36,92345,92346,92348,92350,92352,92354,92356],{"class":38,"line":85},[36,92347,52621],{"class":42},[36,92349,51821],{"class":51777},[36,92351,51824],{"class":2443},[36,92353,47],{"class":42},[36,92355,51829],{"class":405},[36,92357,59604],{"class":42},[36,92359,92360,92362,92364,92366,92368,92370,92372,92374,92376],{"class":38,"line":419},[36,92361,52621],{"class":42},[36,92363,51821],{"class":51777},[36,92365,51840],{"class":2443},[36,92367,47],{"class":42},[36,92369,51845],{"class":405},[36,92371,51848],{"class":2443},[36,92373,47],{"class":42},[36,92375,51853],{"class":405},[36,92377,59604],{"class":42},[36,92379,92380,92382,92384,92386,92388,92390,92392,92394,92396],{"class":38,"line":425},[36,92381,52621],{"class":42},[36,92383,51821],{"class":51777},[36,92385,15400],{"class":2443},[36,92387,47],{"class":42},[36,92389,51868],{"class":405},[36,92391,51848],{"class":2443},[36,92393,47],{"class":42},[36,92395,51875],{"class":405},[36,92397,59604],{"class":42},[36,92399,92400,92402,92404,92406,92408,92411,92413,92415,92418],{"class":38,"line":431},[36,92401,52621],{"class":42},[36,92403,51821],{"class":51777},[36,92405,15400],{"class":2443},[36,92407,47],{"class":42},[36,92409,92410],{"class":405},"\"referrer\"",[36,92412,51848],{"class":2443},[36,92414,47],{"class":42},[36,92416,92417],{"class":405},"\"never\"",[36,92419,59604],{"class":42},[36,92421,92422,92424,92426,92429,92431],{"class":38,"line":437},[36,92423,52621],{"class":42},[36,92425,51884],{"class":51777},[36,92427,92428],{"class":42},">综合案例\u003C\u002F",[36,92430,51884],{"class":51777},[36,92432,51784],{"class":42},[36,92434,92435,92437,92439],{"class":38,"line":443},[36,92436,52621],{"class":42},[36,92438,539],{"class":51777},[36,92440,51784],{"class":42},[36,92442,92443,92445],{"class":38,"line":2092},[36,92444,6883],{"class":51777},[36,92446,16052],{"class":42},[36,92448,92449,92451,92453,92455],{"class":38,"line":2097},[36,92450,55172],{"class":53},[36,92452,51914],{"class":42},[36,92454,812],{"class":53},[36,92456,1774],{"class":42},[36,92458,92459,92461,92463,92465],{"class":38,"line":2103},[36,92460,55183],{"class":53},[36,92462,51914],{"class":42},[36,92464,812],{"class":53},[36,92466,1774],{"class":42},[36,92468,92469,92471,92473,92475],{"class":38,"line":2108},[36,92470,73073],{"class":53},[36,92472,51914],{"class":42},[36,92474,60982],{"class":53},[36,92476,1774],{"class":42},[36,92478,92479],{"class":38,"line":2122},[36,92480,2667],{"class":42},[36,92482,92483],{"class":38,"line":2127},[36,92484,2880],{"emptyLinePlaceholder":553},[36,92486,92487,92490],{"class":38,"line":2133},[36,92488,92489],{"class":2443},"    .container",[36,92491,16052],{"class":42},[36,92493,92494,92496,92498,92501,92503],{"class":38,"line":2154},[36,92495,55248],{"class":53},[36,92497,51914],{"class":42},[36,92499,92500],{"class":53},"1200",[36,92502,51969],{"class":46},[36,92504,1774],{"class":42},[36,92506,92507,92509,92511,92513,92515],{"class":38,"line":2159},[36,92508,55183],{"class":53},[36,92510,51914],{"class":42},[36,92512,812],{"class":53},[36,92514,52033],{"class":53},[36,92516,1774],{"class":42},[36,92518,92519],{"class":38,"line":2173},[36,92520,2667],{"class":42},[36,92522,92523],{"class":38,"line":2178},[36,92524,2880],{"emptyLinePlaceholder":553},[36,92526,92527,92530,92533],{"class":38,"line":2207},[36,92528,92529],{"class":2443},"    .video",[36,92531,92532],{"class":51777}," video",[36,92534,16052],{"class":42},[36,92536,92537,92539,92541,92543,92545],{"class":38,"line":2212},[36,92538,55248],{"class":53},[36,92540,51914],{"class":42},[36,92542,930],{"class":53},[36,92544,947],{"class":46},[36,92546,1774],{"class":42},[36,92548,92549,92551,92553,92555,92557,92559],{"class":38,"line":2229},[36,92550,55172],{"class":53},[36,92552,51914],{"class":42},[36,92554,1313],{"class":53},[36,92556,51969],{"class":46},[36,92558,4573],{"class":53},[36,92560,1774],{"class":42},[36,92562,92563],{"class":38,"line":2234},[36,92564,2667],{"class":42},[36,92566,92567],{"class":38,"line":2239},[36,92568,2880],{"emptyLinePlaceholder":553},[36,92570,92571,92574],{"class":38,"line":2244},[36,92572,92573],{"class":2443},"    .elevator",[36,92575,16052],{"class":42},[36,92577,92578,92580,92582,92584],{"class":38,"line":2258},[36,92579,55236],{"class":53},[36,92581,51914],{"class":42},[36,92583,86710],{"class":53},[36,92585,1774],{"class":42},[36,92587,92588,92590,92592,92595,92597],{"class":38,"line":2263},[36,92589,55424],{"class":53},[36,92591,51914],{"class":42},[36,92593,92594],{"class":53},"280",[36,92596,51969],{"class":46},[36,92598,1774],{"class":42},[36,92600,92601,92603,92605,92607,92609],{"class":38,"line":3057},[36,92602,86904],{"class":53},[36,92604,51914],{"class":42},[36,92606,1313],{"class":53},[36,92608,51969],{"class":46},[36,92610,1774],{"class":42},[36,92612,92613,92615,92617,92619],{"class":38,"line":3071},[36,92614,86717],{"class":53},[36,92616,51914],{"class":42},[36,92618,86722],{"class":53},[36,92620,1774],{"class":42},[36,92622,92623,92625,92627,92629],{"class":38,"line":3079},[36,92624,62198],{"class":53},[36,92626,51914],{"class":42},[36,92628,61319],{"class":53},[36,92630,1774],{"class":42},[36,92632,92633,92635,92637,92639,92641,92643,92645],{"class":38,"line":3084},[36,92634,62454],{"class":53},[36,92636,51914],{"class":42},[36,92638,54],{"class":53},[36,92640,51969],{"class":46},[36,92642,51998],{"class":53},[36,92644,62721],{"class":53},[36,92646,1774],{"class":42},[36,92648,92649,92651,92653,92655,92657],{"class":38,"line":3090},[36,92650,55248],{"class":53},[36,92652,51914],{"class":42},[36,92654,1520],{"class":53},[36,92656,51969],{"class":46},[36,92658,1774],{"class":42},[36,92660,92661],{"class":38,"line":3096},[36,92662,2667],{"class":42},[36,92664,92665],{"class":38,"line":3101},[36,92666,2880],{"emptyLinePlaceholder":553},[36,92668,92669,92671,92673],{"class":38,"line":8428},[36,92670,92573],{"class":2443},[36,92672,1879],{"class":51777},[36,92674,16052],{"class":42},[36,92676,92677,92679,92681,92683],{"class":38,"line":8452},[36,92678,55486],{"class":53},[36,92680,51914],{"class":42},[36,92682,61346],{"class":53},[36,92684,1774],{"class":42},[36,92686,92687,92689,92691,92693,92695],{"class":38,"line":8457},[36,92688,55172],{"class":53},[36,92690,51914],{"class":42},[36,92692,1062],{"class":53},[36,92694,51969],{"class":46},[36,92696,1774],{"class":42},[36,92698,92699,92701,92703,92705],{"class":38,"line":8463},[36,92700,64447],{"class":53},[36,92702,51914],{"class":42},[36,92704,55214],{"class":53},[36,92706,1774],{"class":42},[36,92708,92709,92711,92713,92715],{"class":38,"line":8490},[36,92710,57763],{"class":53},[36,92712,51914],{"class":42},[36,92714,52069],{"class":53},[36,92716,1774],{"class":42},[36,92718,92719,92721,92723,92725],{"class":38,"line":8495},[36,92720,57893],{"class":53},[36,92722,51914],{"class":42},[36,92724,62547],{"class":53},[36,92726,1774],{"class":42},[36,92728,92729],{"class":38,"line":8501},[36,92730,2667],{"class":42},[36,92732,92733],{"class":38,"line":8513},[36,92734,2880],{"emptyLinePlaceholder":553},[36,92736,92737,92739,92741,92743],{"class":38,"line":8525},[36,92738,92573],{"class":2443},[36,92740,1879],{"class":51777},[36,92742,64501],{"class":2443},[36,92744,16052],{"class":42},[36,92746,92747,92749,92751,92754],{"class":38,"line":8537},[36,92748,57893],{"class":53},[36,92750,51914],{"class":42},[36,92752,92753],{"class":53},"#1286ff",[36,92755,1774],{"class":42},[36,92757,92758],{"class":38,"line":10196},[36,92759,2667],{"class":42},[36,92761,92762,92764,92766],{"class":38,"line":10221},[36,92763,52894],{"class":42},[36,92765,539],{"class":51777},[36,92767,51784],{"class":42},[36,92769,92770,92772,92774],{"class":38,"line":10244},[36,92771,52262],{"class":42},[36,92773,51811],{"class":51777},[36,92775,51784],{"class":42},[36,92777,92778],{"class":38,"line":10268},[36,92779,2880],{"emptyLinePlaceholder":553},[36,92781,92782,92784,92786],{"class":38,"line":10273},[36,92783,1523],{"class":42},[36,92785,52277],{"class":51777},[36,92787,51784],{"class":42},[36,92789,92790,92792,92794,92796,92798,92801],{"class":38,"line":10278},[36,92791,52621],{"class":42},[36,92793,52088],{"class":51777},[36,92795,53963],{"class":2443},[36,92797,47],{"class":42},[36,92799,92800],{"class":405},"\"container\"",[36,92802,51784],{"class":42},[36,92804,92805,92807,92809,92811,92813,92816],{"class":38,"line":10283},[36,92806,51818],{"class":42},[36,92808,52088],{"class":51777},[36,92810,53963],{"class":2443},[36,92812,47],{"class":42},[36,92814,92815],{"class":405},"\"header\"",[36,92817,51784],{"class":42},[36,92819,92820,92822,92824,92826,92828,92831],{"class":38,"line":10292},[36,92821,55711],{"class":42},[36,92823,43],{"class":51777},[36,92825,61534],{"class":2443},[36,92827,47],{"class":42},[36,92829,92830],{"class":405},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,92832,51784],{"class":42},[36,92834,92835,92837,92839,92841,92843,92846,92848,92850,92852],{"class":38,"line":10297},[36,92836,55779],{"class":42},[36,92838,519],{"class":51777},[36,92840,55716],{"class":2443},[36,92842,47],{"class":42},[36,92844,92845],{"class":405},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,92847,55724],{"class":2443},[36,92849,47],{"class":42},[36,92851,8132],{"class":405},[36,92853,59604],{"class":42},[36,92855,92856,92858,92860],{"class":38,"line":10303},[36,92857,55884],{"class":42},[36,92859,43],{"class":51777},[36,92861,51784],{"class":42},[36,92863,92864,92866,92868],{"class":38,"line":10324},[36,92865,52253],{"class":42},[36,92867,52088],{"class":51777},[36,92869,51784],{"class":42},[36,92871,92872,92874,92876,92878,92880,92883],{"class":38,"line":10330},[36,92873,51818],{"class":42},[36,92875,52088],{"class":51777},[36,92877,53963],{"class":2443},[36,92879,47],{"class":42},[36,92881,92882],{"class":405},"\"video\"",[36,92884,51784],{"class":42},[36,92886,92887,92889,92891,92893,92895,92898,92901,92903,92905],{"class":38,"line":10344},[36,92888,55711],{"class":42},[36,92890,28664],{"class":51777},[36,92892,55716],{"class":2443},[36,92894,47],{"class":42},[36,92896,92897],{"class":405},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,92899,92900],{"class":2443}," controls",[36,92902,55791],{"class":42},[36,92904,28664],{"class":51777},[36,92906,51784],{"class":42},[36,92908,92909,92911,92913],{"class":38,"line":10350},[36,92910,52253],{"class":42},[36,92912,52088],{"class":51777},[36,92914,51784],{"class":42},[36,92916,92917,92919,92921,92923,92925,92928],{"class":38,"line":10377},[36,92918,51818],{"class":42},[36,92920,52088],{"class":51777},[36,92922,53963],{"class":2443},[36,92924,47],{"class":42},[36,92926,92927],{"class":405},"\"elevator\"",[36,92929,51784],{"class":42},[36,92931,92932,92934,92936,92938,92940,92942,92945,92947,92949,92952,92954],{"class":38,"line":10386},[36,92933,55711],{"class":42},[36,92935,43],{"class":51777},[36,92937,61534],{"class":2443},[36,92939,47],{"class":42},[36,92941,64713],{"class":405},[36,92943,92944],{"class":2443}," data-ref",[36,92946,47],{"class":42},[36,92948,92882],{"class":405},[36,92950,92951],{"class":42},">视频介绍\u003C\u002F",[36,92953,43],{"class":51777},[36,92955,51784],{"class":42},[36,92957,92958,92960,92962,92964,92966,92968,92970,92972,92975,92978,92980],{"class":38,"line":10392},[36,92959,55711],{"class":42},[36,92961,43],{"class":51777},[36,92963,61534],{"class":2443},[36,92965,47],{"class":42},[36,92967,64713],{"class":405},[36,92969,92944],{"class":2443},[36,92971,47],{"class":42},[36,92973,92974],{"class":405},"\"intro\"",[36,92976,92977],{"class":42},">课程简介\u003C\u002F",[36,92979,43],{"class":51777},[36,92981,51784],{"class":42},[36,92983,92984,92986,92988,92990,92992,92994,92996,92998,93001,93004,93006],{"class":38,"line":10400},[36,92985,55711],{"class":42},[36,92987,43],{"class":51777},[36,92989,61534],{"class":2443},[36,92991,47],{"class":42},[36,92993,64713],{"class":405},[36,92995,92944],{"class":2443},[36,92997,47],{"class":42},[36,92999,93000],{"class":405},"\"outline\"",[36,93002,93003],{"class":42},">评论列表\u003C\u002F",[36,93005,43],{"class":51777},[36,93007,51784],{"class":42},[36,93009,93010,93012,93014],{"class":38,"line":10405},[36,93011,52253],{"class":42},[36,93013,52088],{"class":51777},[36,93015,51784],{"class":42},[36,93017,93018,93020,93022],{"class":38,"line":17084},[36,93019,52894],{"class":42},[36,93021,52088],{"class":51777},[36,93023,51784],{"class":42},[36,93025,93026,93028,93030,93032,93034,93037,93039,93041],{"class":38,"line":17090},[36,93027,52621],{"class":42},[36,93029,52290],{"class":51777},[36,93031,55716],{"class":2443},[36,93033,47],{"class":42},[36,93035,93036],{"class":405},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,93038,55791],{"class":42},[36,93040,52290],{"class":51777},[36,93042,51784],{"class":42},[36,93044,93045,93047,93049],{"class":38,"line":17113},[36,93046,52621],{"class":42},[36,93048,52290],{"class":51777},[36,93050,51784],{"class":42},[36,93052,93053],{"class":38,"line":17119},[36,93054,93055],{"class":69},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,93057,93058,93060,93062,93064,93066,93068,93070,93073],{"class":38,"line":17142},[36,93059,11701],{"class":46},[36,93061,92532],{"class":53},[36,93063,14044],{"class":46},[36,93065,54873],{"class":42},[36,93067,54876],{"class":2443},[36,93069,345],{"class":42},[36,93071,93072],{"class":405},"'video'",[36,93074,63],{"class":42},[36,93076,93077],{"class":38,"line":17156},[36,93078,93079],{"class":69},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,93081,93082,93085,93087,93089,93091,93094,93096],{"class":38,"line":17176},[36,93083,93084],{"class":42},"    video.ontimeupdate ",[36,93086,47],{"class":46},[36,93088,88832],{"class":42},[36,93090,91650],{"class":2443},[36,93092,93093],{"class":42},"(() ",[36,93095,85199],{"class":46},[36,93097,16052],{"class":42},[36,93099,93100],{"class":38,"line":17182},[36,93101,93102],{"class":69},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,93104,93105],{"class":38,"line":17193},[36,93106,93107],{"class":69},"      \u002F\u002F 控制台输出当前的时间\n",[36,93109,93110,93113],{"class":38,"line":17216},[36,93111,93112],{"class":69},"      \u002F\u002F console.log(video.currentTime)",[36,93114,93115],{"class":69},"  \u002F\u002F获得当前的视频时间\n",[36,93117,93118],{"class":38,"line":17238},[36,93119,93120],{"class":69},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,93122,93123,93125,93127,93129,93132],{"class":38,"line":17243},[36,93124,75160],{"class":42},[36,93126,72131],{"class":2443},[36,93128,345],{"class":42},[36,93130,93131],{"class":405},"'currentTime'",[36,93133,93134],{"class":42},", video.currentTime)\n",[36,93136,93137,93139,93141],{"class":38,"line":17249},[36,93138,55012],{"class":42},[36,93140,6890],{"class":53},[36,93142,63],{"class":42},[36,93144,93145],{"class":38,"line":17263},[36,93146,93147],{"class":69},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,93149,93150,93153,93156,93158,93161,93163],{"class":38,"line":17276},[36,93151,93152],{"class":42},"    video.",[36,93154,93155],{"class":2443},"onloadeddata",[36,93157,14044],{"class":46},[36,93159,93160],{"class":42}," () ",[36,93162,85199],{"class":46},[36,93164,16052],{"class":42},[36,93166,93167],{"class":38,"line":17281},[36,93168,60489],{"class":69},[36,93170,93171],{"class":38,"line":17295},[36,93172,93173],{"class":69},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,93175,93176,93179,93181,93184,93186,93188,93190,93192,93194],{"class":38,"line":17300},[36,93177,93178],{"class":42},"      video.currentTime ",[36,93180,47],{"class":46},[36,93182,93183],{"class":42}," localStorage.",[36,93185,72162],{"class":2443},[36,93187,345],{"class":42},[36,93189,93131],{"class":405},[36,93191,14194],{"class":42},[36,93193,71834],{"class":46},[36,93195,47810],{"class":53},[36,93197,93198],{"class":38,"line":17306},[36,93199,2667],{"class":42},[36,93201,93202,93204,93206],{"class":38,"line":17311},[36,93203,52894],{"class":42},[36,93205,52290],{"class":51777},[36,93207,51784],{"class":42},[36,93209,93210,93212,93214],{"class":38,"line":17325},[36,93211,52262],{"class":42},[36,93213,52277],{"class":51777},[36,93215,51784],{"class":42},[36,93217,93218],{"class":38,"line":17330},[36,93219,2880],{"emptyLinePlaceholder":553},[36,93221,93222,93224,93226],{"class":38,"line":17335},[36,93223,52262],{"class":42},[36,93225,51112],{"class":51777},[36,93227,51784],{"class":42},[539,93229,93230],{},"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":31,"searchDepth":66,"depth":66,"links":93232},[93233,93238,93242,93243,93244,93249,93254,93255,93256,93257,93264,93269,93270,93280,93284,93285,93289],{"id":77168,"depth":66,"text":77169,"children":93234},[93235,93236,93237],{"id":77172,"depth":73,"text":77173},{"id":77197,"depth":73,"text":77198},{"id":77209,"depth":73,"text":77210},{"id":77221,"depth":66,"text":77222,"children":93239},[93240,93241],{"id":77225,"depth":73,"text":77226},{"id":77240,"depth":73,"text":77241},{"id":77292,"depth":66,"text":77293},{"id":77336,"depth":66,"text":77337},{"id":77353,"depth":66,"text":77354,"children":93245},[93246,93247,93248],{"id":77357,"depth":73,"text":77358},{"id":77370,"depth":73,"text":77371},{"id":77475,"depth":73,"text":77476},{"id":77764,"depth":66,"text":77765,"children":93250},[93251,93252,93253],{"id":77768,"depth":73,"text":77769},{"id":78211,"depth":73,"text":78212},{"id":78622,"depth":73,"text":78623},{"id":78685,"depth":66,"text":78686},{"id":78764,"depth":66,"text":78765},{"id":78857,"depth":66,"text":78858},{"id":80702,"depth":66,"text":80703,"children":93258},[93259,93260,93261,93262,93263],{"id":80706,"depth":73,"text":80707},{"id":80718,"depth":73,"text":80719},{"id":80937,"depth":73,"text":80938},{"id":80955,"depth":73,"text":80956},{"id":81015,"depth":73,"text":81016},{"id":85283,"depth":66,"text":85284,"children":93265},[93266,93267,93268],{"id":85287,"depth":73,"text":85288},{"id":85305,"depth":73,"text":85306},{"id":85331,"depth":73,"text":85332},{"id":85340,"depth":66,"text":85341},{"id":85362,"depth":66,"text":85363,"children":93271},[93272,93273,93274,93275,93276,93277,93278,93279],{"id":85366,"depth":73,"text":85367},{"id":85627,"depth":73,"text":85628},{"id":85813,"depth":73,"text":85814},{"id":86180,"depth":73,"text":86181},{"id":86296,"depth":73,"text":86297},{"id":86332,"depth":73,"text":86333},{"id":86379,"depth":73,"text":86380},{"id":86413,"depth":73,"text":86414},{"id":87776,"depth":66,"text":87777,"children":93281},[93282,93283],{"id":87780,"depth":73,"text":87781},{"id":87817,"depth":73,"text":87818},{"id":89172,"depth":66,"text":89173},{"id":89543,"depth":66,"text":89544,"children":93286},[93287,93288],{"id":89547,"depth":73,"text":89548},{"id":89581,"depth":73,"text":89582},{"id":90310,"depth":66,"text":90311,"children":93290},[93291,93292,93293,93294],{"id":90314,"depth":73,"text":90315},{"id":91272,"depth":73,"text":91273},{"id":92214,"depth":73,"text":92215},{"id":92288,"depth":73,"text":92289},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77157,"description":550},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93301,"title":93302,"body":93303,"description":93314,"extension":551,"meta":93315,"navigation":553,"path":93317,"seo":93318,"stem":93319,"__hash__":93320},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93304,"toc":93312},[93305],[19,93306,93307,93308],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[43,93309,93310],{"href":93310,"rel":93311},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24345],{"title":31,"searchDepth":66,"depth":66,"links":93313},[],"三件套第三套学习",{"category":93316},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93302,"description":93314},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93322,"title":93323,"body":93324,"description":550,"extension":551,"meta":93429,"navigation":553,"path":93430,"seo":93431,"stem":93432,"__hash__":93433},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93325,"toc":93424},[93326,93333,93336,93339,93342,93346,93355,93358,93361,93365,93374,93377,93381,93384,93404,93407,93421],[19,93327,93328],{},[43,93329,93332],{"href":93330,"rel":93331},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24345],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93334,93323],{"id":93335},"_1安装",[19,93337,93338],{},"numpy是科学计算基础库,底层是C语言",[19,93340,93341],{},"三种方式：",[14,93343,93345],{"id":93344},"_11-通过pip安装","1.1 通过pip安装",[26,93347,93349],{"className":28,"code":93348,"language":30,"meta":31,"style":31},"pip install numpy\n",[33,93350,93351],{"__ignoreMap":31},[36,93352,93353],{"class":38,"line":39},[36,93354,93348],{"class":42},[19,93356,93357],{},"首选方式，自动处理依赖项",[19,93359,93360],{},"在提示系统命令符中使用cmd",[14,93362,93364],{"id":93363},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,93366,93368],{"className":28,"code":93367,"language":30,"meta":31,"style":31},"conda install numpy\n",[33,93369,93370],{"__ignoreMap":31},[36,93371,93372],{"class":38,"line":39},[36,93373,93367],{"class":42},[19,93375,93376],{},"自动解决环境依赖",[14,93378,93380],{"id":93379},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93382,93383],{},"对于Debian\u002FUbuntu",[26,93385,93387],{"className":28,"code":93386,"language":30,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,93388,93389],{"__ignoreMap":31},[36,93390,93391,93394,93396,93399,93401],{"class":38,"line":39},[36,93392,93393],{"class":42},"sudo apt",[36,93395,173],{"class":46},[36,93397,93398],{"class":42},"get install python3",[36,93400,173],{"class":46},[36,93402,93403],{"class":42},"numpy\n",[19,93405,93406],{},"对于Fedora:",[26,93408,93410],{"className":28,"code":93409,"language":30,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,93411,93412],{"__ignoreMap":31},[36,93413,93414,93417,93419],{"class":38,"line":39},[36,93415,93416],{"class":42},"sudo dnf install python3",[36,93418,173],{"class":46},[36,93420,93403],{"class":42},[539,93422,93423],{},"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":31,"searchDepth":66,"depth":66,"links":93425},[93426,93427,93428],{"id":93344,"depth":66,"text":93345},{"id":93363,"depth":66,"text":93364},{"id":93379,"depth":66,"text":93380},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93323,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93435,"title":93436,"body":93437,"description":550,"extension":551,"meta":93548,"navigation":553,"path":93549,"seo":93550,"stem":93551,"__hash__":93552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93438,"toc":93546},[93439,93442,93445,93448,93451,93454,93457,93460,93463,93466,93540,93543],[10,93440,93436],{"id":93441},"_10算数函数",[19,93443,93444],{},"加减乘除运算跟python基础语法没区别",[19,93446,93447],{},"除了python那种方法外还可以使用函数",[19,93449,93450],{},"加：np.add(a,b)",[19,93452,93453],{},"减：np.subtract(a,b)",[19,93455,93456],{},"乘：np.multiply(a,b)",[19,93458,93459],{},"除：np.divide(a,b) == a\u002Fb",[19,93461,93462],{},"取余：np.mod(a,b) == a%b",[19,93464,93465],{},"必须会的用法：",[26,93467,93469],{"className":28,"code":93468,"language":30,"meta":31,"style":31},"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",[33,93470,93471,93491,93512,93522,93535],{"__ignoreMap":31},[36,93472,93473,93475,93477,93479,93481,93483,93485,93487,93489],{"class":38,"line":39},[36,93474,43],{"class":42},[36,93476,47],{"class":46},[36,93478,50],{"class":42},[36,93480,1037],{"class":53},[36,93482,222],{"class":42},[36,93484,127],{"class":53},[36,93486,57],{"class":42},[36,93488,127],{"class":53},[36,93490,63],{"class":42},[36,93492,93493,93495,93497,93500,93502,93504,93506,93508,93510],{"class":38,"line":66},[36,93494,882],{"class":42},[36,93496,47],{"class":46},[36,93498,93499],{"class":42},"np.array([",[36,93501,1062],{"class":53},[36,93503,57],{"class":42},[36,93505,1062],{"class":53},[36,93507,57],{"class":42},[36,93509,1062],{"class":53},[36,93511,5137],{"class":42},[36,93513,93514,93517,93519],{"class":38,"line":73},[36,93515,93516],{"class":42},"result",[36,93518,47],{"class":46},[36,93520,93521],{"class":42},"np.empty_like(a)\n",[36,93523,93524,93527,93530,93532],{"class":38,"line":79},[36,93525,93526],{"class":42},"np.add(a,b,",[36,93528,93529],{"class":5696},"out",[36,93531,47],{"class":46},[36,93533,93534],{"class":42},"result)\n",[36,93536,93537],{"class":38,"line":85},[36,93538,93539],{"class":42},"result\n",[19,93541,93542],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[539,93544,93545],{},"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":31,"searchDepth":66,"depth":66,"links":93547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93436,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93554,"title":93555,"body":93556,"description":550,"extension":551,"meta":94316,"navigation":553,"path":94317,"seo":94318,"stem":94319,"__hash__":94320},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93557,"toc":94303},[93558,93561,93564,93567,93571,93610,93614,93658,93718,93722,93725,93764,93767,93811,93815,93851,93855,93924,93928,93992,93996,93999,94002,94005,94008,94043,94047,94087,94091,94163,94166,94170,94233,94237,94300],[10,93559,93555],{"id":93560},"_11统计函数",[19,93562,93563],{},"sum max min mean",[19,93565,93566],{},"这些有axis参数，可以指定方向",[14,93568,93570],{"id":93569},"_111-sum求和函数","11.1 sum()求和函数",[26,93572,93574],{"className":28,"code":93573,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[33,93575,93576,93581,93602],{"__ignoreMap":31},[36,93577,93578],{"class":38,"line":39},[36,93579,93580],{"class":69},"#创建一维数组\n",[36,93582,93583,93585,93587,93590,93592,93594,93596,93598,93600],{"class":38,"line":66},[36,93584,43],{"class":42},[36,93586,47],{"class":46},[36,93588,93589],{"class":42},"np.random.randint(",[36,93591,54],{"class":53},[36,93593,57],{"class":42},[36,93595,930],{"class":53},[36,93597,57],{"class":42},[36,93599,1313],{"class":53},[36,93601,63],{"class":42},[36,93603,93604,93607],{"class":38,"line":73},[36,93605,93606],{"class":42},"np.sum(a)",[36,93608,93609],{"class":69},"#求和\n",[14,93611,93613],{"id":93612},"_112-max求最大值函数","11.2 max()求最大值函数",[26,93615,93617],{"className":28,"code":93616,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,93618,93619,93623,93643,93648,93653],{"__ignoreMap":31},[36,93620,93621],{"class":38,"line":39},[36,93622,93580],{"class":69},[36,93624,93625,93627,93629,93631,93633,93635,93637,93639,93641],{"class":38,"line":66},[36,93626,43],{"class":42},[36,93628,47],{"class":46},[36,93630,93589],{"class":42},[36,93632,54],{"class":53},[36,93634,57],{"class":42},[36,93636,930],{"class":53},[36,93638,57],{"class":42},[36,93640,1313],{"class":53},[36,93642,63],{"class":42},[36,93644,93645],{"class":38,"line":73},[36,93646,93647],{"class":42},"np.max(a)\n",[36,93649,93650],{"class":38,"line":79},[36,93651,93652],{"class":69},"#最大索引(求最大元素的索引)arg\n",[36,93654,93655],{"class":38,"line":85},[36,93656,93657],{"class":42},"np.argmax(a)\n",[26,93659,93661],{"className":28,"code":93660,"language":30,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[33,93662,93663,93684,93704,93708],{"__ignoreMap":31},[36,93664,93665,93667,93669,93672,93674,93676,93678,93680,93682],{"class":38,"line":39},[36,93666,11399],{"class":42},[36,93668,47],{"class":46},[36,93670,93671],{"class":42}," np.array([",[36,93673,54],{"class":53},[36,93675,12915],{"class":42},[36,93677,938],{"class":53},[36,93679,12915],{"class":42},[36,93681,127],{"class":53},[36,93683,5137],{"class":42},[36,93685,93686,93688,93690,93692,93694,93696,93698,93700,93702],{"class":38,"line":66},[36,93687,11425],{"class":42},[36,93689,47],{"class":46},[36,93691,93671],{"class":42},[36,93693,127],{"class":53},[36,93695,12915],{"class":42},[36,93697,96],{"class":53},[36,93699,12915],{"class":42},[36,93701,912],{"class":53},[36,93703,5137],{"class":42},[36,93705,93706],{"class":38,"line":73},[36,93707,2880],{"emptyLinePlaceholder":553},[36,93709,93710,93712,93715],{"class":38,"line":79},[36,93711,30894],{"class":53},[36,93713,93714],{"class":42},"(np.maximum(a, b))   ",[36,93716,93717],{"class":69},"# [3 5 4]，每个位置上取较大值\n",[14,93719,93721],{"id":93720},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93723,93724],{},"①一维数组：",[26,93726,93728],{"className":28,"code":93727,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,93729,93730,93734,93754,93759],{"__ignoreMap":31},[36,93731,93732],{"class":38,"line":39},[36,93733,93580],{"class":69},[36,93735,93736,93738,93740,93742,93744,93746,93748,93750,93752],{"class":38,"line":66},[36,93737,43],{"class":42},[36,93739,47],{"class":46},[36,93741,93589],{"class":42},[36,93743,54],{"class":53},[36,93745,57],{"class":42},[36,93747,930],{"class":53},[36,93749,57],{"class":42},[36,93751,1313],{"class":53},[36,93753,63],{"class":42},[36,93755,93756],{"class":38,"line":73},[36,93757,93758],{"class":69},"#求平均值\n",[36,93760,93761],{"class":38,"line":79},[36,93762,93763],{"class":42},"np.mean(a)\n",[19,93765,93766],{},"②二维数组",[26,93768,93770],{"className":28,"code":93769,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,93771,93772,93777,93801,93806],{"__ignoreMap":31},[36,93773,93774],{"class":38,"line":39},[36,93775,93776],{"class":69},"#二维数组\n",[36,93778,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799],{"class":38,"line":66},[36,93780,88],{"class":42},[36,93782,47],{"class":46},[36,93784,50],{"class":42},[36,93786,54],{"class":53},[36,93788,57],{"class":42},[36,93790,60],{"class":53},[36,93792,222],{"class":42},[36,93794,127],{"class":53},[36,93796,57],{"class":42},[36,93798,912],{"class":53},[36,93800,63],{"class":42},[36,93802,93803],{"class":38,"line":73},[36,93804,93805],{"class":69},"#对数组中的所有数求平均\n",[36,93807,93808],{"class":38,"line":79},[36,93809,93810],{"class":42},"np.mean(aa)\n",[14,93812,93814],{"id":93813},"_114-median求中位数函数","11.4 median()求中位数函数",[26,93816,93818],{"className":28,"code":93817,"language":30,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,93819,93820,93825,93841,93846],{"__ignoreMap":31},[36,93821,93822],{"class":38,"line":39},[36,93823,93824],{"class":69},"#求中位数\n",[36,93826,93827,93829,93831,93833,93835,93837,93839],{"class":38,"line":66},[36,93828,882],{"class":42},[36,93830,47],{"class":46},[36,93832,50],{"class":42},[36,93834,54],{"class":53},[36,93836,57],{"class":42},[36,93838,1062],{"class":53},[36,93840,63],{"class":42},[36,93842,93843],{"class":38,"line":73},[36,93844,93845],{"class":42},"np.median(b)\n",[36,93847,93848],{"class":38,"line":79},[36,93849,93850],{"class":69},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93852,93854],{"id":93853},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,93856,93858],{"className":28,"code":93857,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[33,93859,93860,93876,93881,93886,93895,93900,93909],{"__ignoreMap":31},[36,93861,93862,93864,93866,93868,93870,93872,93874],{"class":38,"line":39},[36,93863,882],{"class":42},[36,93865,47],{"class":46},[36,93867,50],{"class":42},[36,93869,54],{"class":53},[36,93871,57],{"class":42},[36,93873,1062],{"class":53},[36,93875,63],{"class":42},[36,93877,93878],{"class":38,"line":66},[36,93879,93880],{"class":69},"#幂运算\n",[36,93882,93883],{"class":38,"line":73},[36,93884,93885],{"class":69},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,93887,93888,93891,93893],{"class":38,"line":79},[36,93889,93890],{"class":42},"np.power(b,",[36,93892,96],{"class":53},[36,93894,63],{"class":42},[36,93896,93897],{"class":38,"line":85},[36,93898,93899],{"class":69},"#或者以下代码，将数据存储起来\n",[36,93901,93902,93904,93906],{"class":38,"line":419},[36,93903,1458],{"class":42},[36,93905,47],{"class":46},[36,93907,93908],{"class":42},"np.empty_like(b)\n",[36,93910,93911,93913,93915,93917,93919,93921],{"class":38,"line":425},[36,93912,93890],{"class":42},[36,93914,96],{"class":53},[36,93916,57],{"class":42},[36,93918,93529],{"class":5696},[36,93920,47],{"class":46},[36,93922,93923],{"class":42},"y)\n",[14,93925,93927],{"id":93926},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,93929,93931],{"className":28,"code":93930,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[33,93932,93933,93949,93954,93959,93963,93981],{"__ignoreMap":31},[36,93934,93935,93937,93939,93941,93943,93945,93947],{"class":38,"line":39},[36,93936,882],{"class":42},[36,93938,47],{"class":46},[36,93940,50],{"class":42},[36,93942,54],{"class":53},[36,93944,57],{"class":42},[36,93946,1062],{"class":53},[36,93948,63],{"class":42},[36,93950,93951],{"class":38,"line":66},[36,93952,93953],{"class":69},"#开方\n",[36,93955,93956],{"class":38,"line":73},[36,93957,93958],{"class":42},"np.sqrt(b)\n",[36,93960,93961],{"class":38,"line":79},[36,93962,93899],{"class":69},[36,93964,93965,93967,93969,93972,93975,93977,93979],{"class":38,"line":85},[36,93966,1458],{"class":42},[36,93968,47],{"class":46},[36,93970,93971],{"class":42},"np.empty_like(b,",[36,93973,93974],{"class":5696},"dtype",[36,93976,47],{"class":46},[36,93978,666],{"class":53},[36,93980,63],{"class":42},[36,93982,93983,93986,93988,93990],{"class":38,"line":419},[36,93984,93985],{"class":42},"np.sqrt(b,",[36,93987,93529],{"class":5696},[36,93989,47],{"class":46},[36,93991,93923],{"class":42},[14,93993,93995],{"id":93994},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93997,93998],{},"对数组中的元素累计求和，可指定轴",[19,94000,94001],{},"#累计求和的意思是：",[19,94003,94004],{},"a = np.array([1, 2, 3, 4])",[19,94006,94007],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,94009,94011],{"className":28,"code":94010,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,94012,94013,94029,94034,94038],{"__ignoreMap":31},[36,94014,94015,94017,94019,94021,94023,94025,94027],{"class":38,"line":39},[36,94016,882],{"class":42},[36,94018,47],{"class":46},[36,94020,50],{"class":42},[36,94022,54],{"class":53},[36,94024,57],{"class":42},[36,94026,1062],{"class":53},[36,94028,63],{"class":42},[36,94030,94031],{"class":38,"line":66},[36,94032,94033],{"class":42},"np.cumsum(b)\n",[36,94035,94036],{"class":38,"line":73},[36,94037,244],{"class":69},[36,94039,94040],{"class":38,"line":79},[36,94041,94042],{"class":69},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94044,94046],{"id":94045},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,94048,94050],{"className":28,"code":94049,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,94051,94052,94068,94073,94078,94082],{"__ignoreMap":31},[36,94053,94054,94056,94058,94060,94062,94064,94066],{"class":38,"line":39},[36,94055,882],{"class":42},[36,94057,47],{"class":46},[36,94059,50],{"class":42},[36,94061,54],{"class":53},[36,94063,57],{"class":42},[36,94065,1062],{"class":53},[36,94067,63],{"class":42},[36,94069,94070],{"class":38,"line":66},[36,94071,94072],{"class":69},"#对数组中的元素累计求积，可指定轴\n",[36,94074,94075],{"class":38,"line":73},[36,94076,94077],{"class":42},"np.cumprod(b)\n",[36,94079,94080],{"class":38,"line":79},[36,94081,244],{"class":69},[36,94083,94084],{"class":38,"line":85},[36,94085,94086],{"class":69},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94088,94090],{"id":94089},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,94092,94094],{"className":28,"code":94093,"language":30,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\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",[33,94095,94096,94101,94149,94154,94158],{"__ignoreMap":31},[36,94097,94098],{"class":38,"line":39},[36,94099,94100],{"class":69},"#删除数组中的重复数据，并对数据进行排序\n",[36,94102,94103,94105,94107,94109,94111,94113,94115,94117,94119,94121,94123,94125,94127,94129,94131,94133,94135,94137,94139,94141,94143,94145,94147],{"class":38,"line":66},[36,94104,43],{"class":42},[36,94106,47],{"class":46},[36,94108,93499],{"class":42},[36,94110,54],{"class":53},[36,94112,57],{"class":42},[36,94114,96],{"class":53},[36,94116,57],{"class":42},[36,94118,127],{"class":53},[36,94120,57],{"class":42},[36,94122,154],{"class":53},[36,94124,57],{"class":42},[36,94126,127],{"class":53},[36,94128,57],{"class":42},[36,94130,1062],{"class":53},[36,94132,57],{"class":42},[36,94134,818],{"class":53},[36,94136,57],{"class":42},[36,94138,812],{"class":53},[36,94140,57],{"class":42},[36,94142,1388],{"class":53},[36,94144,57],{"class":42},[36,94146,912],{"class":53},[36,94148,5137],{"class":42},[36,94150,94151],{"class":38,"line":73},[36,94152,94153],{"class":42},"np.unique(a)\n",[36,94155,94156],{"class":38,"line":79},[36,94157,244],{"class":69},[36,94159,94160],{"class":38,"line":85},[36,94161,94162],{"class":69},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94164,94165],{},"升序形式排序",[14,94167,94169],{"id":94168},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,94171,94173],{"className":28,"code":94172,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[33,94174,94175,94223,94228],{"__ignoreMap":31},[36,94176,94177,94179,94181,94183,94185,94187,94189,94191,94193,94195,94197,94199,94201,94203,94205,94207,94209,94211,94213,94215,94217,94219,94221],{"class":38,"line":39},[36,94178,43],{"class":42},[36,94180,47],{"class":46},[36,94182,93499],{"class":42},[36,94184,54],{"class":53},[36,94186,57],{"class":42},[36,94188,96],{"class":53},[36,94190,57],{"class":42},[36,94192,127],{"class":53},[36,94194,57],{"class":42},[36,94196,154],{"class":53},[36,94198,57],{"class":42},[36,94200,127],{"class":53},[36,94202,57],{"class":42},[36,94204,1062],{"class":53},[36,94206,57],{"class":42},[36,94208,818],{"class":53},[36,94210,57],{"class":42},[36,94212,812],{"class":53},[36,94214,57],{"class":42},[36,94216,1388],{"class":53},[36,94218,57],{"class":42},[36,94220,912],{"class":53},[36,94222,5137],{"class":42},[36,94224,94225],{"class":38,"line":66},[36,94226,94227],{"class":69},"#返回数组中非零元素的索引\n",[36,94229,94230],{"class":38,"line":73},[36,94231,94232],{"class":42},"np.nonzero(a)\n",[14,94234,94236],{"id":94235},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,94238,94240],{"className":28,"code":94239,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[33,94241,94242,94290,94295],{"__ignoreMap":31},[36,94243,94244,94246,94248,94250,94252,94254,94256,94258,94260,94262,94264,94266,94268,94270,94272,94274,94276,94278,94280,94282,94284,94286,94288],{"class":38,"line":39},[36,94245,43],{"class":42},[36,94247,47],{"class":46},[36,94249,93499],{"class":42},[36,94251,54],{"class":53},[36,94253,57],{"class":42},[36,94255,96],{"class":53},[36,94257,57],{"class":42},[36,94259,127],{"class":53},[36,94261,57],{"class":42},[36,94263,154],{"class":53},[36,94265,57],{"class":42},[36,94267,127],{"class":53},[36,94269,57],{"class":42},[36,94271,1062],{"class":53},[36,94273,57],{"class":42},[36,94275,818],{"class":53},[36,94277,57],{"class":42},[36,94279,812],{"class":53},[36,94281,57],{"class":42},[36,94283,1388],{"class":53},[36,94285,57],{"class":42},[36,94287,912],{"class":53},[36,94289,5137],{"class":42},[36,94291,94292],{"class":38,"line":66},[36,94293,94294],{"class":69},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,94296,94297],{"class":38,"line":73},[36,94298,94299],{"class":42},"np.ptp(a)\n",[539,94301,94302],{},"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":31,"searchDepth":66,"depth":66,"links":94304},[94305,94306,94307,94308,94309,94310,94311,94312,94313,94314,94315],{"id":93569,"depth":66,"text":93570},{"id":93612,"depth":66,"text":93613},{"id":93720,"depth":66,"text":93721},{"id":93813,"depth":66,"text":93814},{"id":93853,"depth":66,"text":93854},{"id":93926,"depth":66,"text":93927},{"id":93994,"depth":66,"text":93995},{"id":94045,"depth":66,"text":94046},{"id":94089,"depth":66,"text":94090},{"id":94168,"depth":66,"text":94169},{"id":94235,"depth":66,"text":94236},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93555,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94322,"title":94323,"body":94324,"description":550,"extension":551,"meta":94978,"navigation":553,"path":94979,"seo":94980,"stem":94981,"__hash__":94982},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94325,"toc":94966},[94326,94329,94333,94336,94551,94555,94558,94767,94771,94837,94842,94846,94849,94852,94890,94894,94897,94902,94906,94909,94912,94917,94921,94924,94928,94931,94934,94939,94943,94946,94949,94954,94958,94963],[10,94327,94323],{"id":94328},"_12其他常用函数",[14,94330,94332],{"id":94331},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94334,94335],{},"将数组的数据按照行列复制扩展",[26,94337,94339],{"className":28,"code":94338,"language":30,"meta":31,"style":31},"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",[33,94340,94341,94357,94366,94370,94375,94380,94393,94397,94401,94406,94411,94415,94420,94444,94456,94460,94464,94469,94474,94479,94484,94488,94501,94505,94509,94514,94519,94524,94529,94534,94538,94542,94547],{"__ignoreMap":31},[36,94342,94343,94345,94347,94349,94351,94353,94355],{"class":38,"line":39},[36,94344,43],{"class":42},[36,94346,47],{"class":46},[36,94348,50],{"class":42},[36,94350,54],{"class":53},[36,94352,57],{"class":42},[36,94354,938],{"class":53},[36,94356,63],{"class":42},[36,94358,94359,94362,94364],{"class":38,"line":66},[36,94360,94361],{"class":42},"np.tile(a,",[36,94363,96],{"class":53},[36,94365,63],{"class":42},[36,94367,94368],{"class":38,"line":73},[36,94369,244],{"class":69},[36,94371,94372],{"class":38,"line":79},[36,94373,94374],{"class":69},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,94376,94377],{"class":38,"line":85},[36,94378,94379],{"class":69},"#行复制两次，列复制三次\n",[36,94381,94382,94385,94387,94389,94391],{"class":38,"line":419},[36,94383,94384],{"class":42},"np.tile(a,(",[36,94386,96],{"class":53},[36,94388,57],{"class":42},[36,94390,127],{"class":53},[36,94392,370],{"class":42},[36,94394,94395],{"class":38,"line":425},[36,94396,244],{"class":69},[36,94398,94399],{"class":38,"line":431},[36,94400,406],{"class":405},[36,94402,94403],{"class":38,"line":437},[36,94404,94405],{"class":405},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,94407,94408],{"class":38,"line":443},[36,94409,94410],{"class":405},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,94412,94413],{"class":38,"line":2092},[36,94414,406],{"class":405},[36,94416,94417],{"class":38,"line":2097},[36,94418,94419],{"class":69},"#创建二维数组\n",[36,94421,94422,94424,94426,94428,94430,94432,94434,94436,94438,94440,94442],{"class":38,"line":2103},[36,94423,88],{"class":42},[36,94425,47],{"class":46},[36,94427,50],{"class":42},[36,94429,54],{"class":53},[36,94431,57],{"class":42},[36,94433,60],{"class":53},[36,94435,222],{"class":42},[36,94437,912],{"class":53},[36,94439,57],{"class":42},[36,94441,127],{"class":53},[36,94443,63],{"class":42},[36,94445,94446,94449,94451,94453],{"class":38,"line":2108},[36,94447,94448],{"class":42},"np.tile(aa,",[36,94450,96],{"class":53},[36,94452,231],{"class":42},[36,94454,94455],{"class":69},"#一个数的时候就是行\n",[36,94457,94458],{"class":38,"line":2122},[36,94459,244],{"class":69},[36,94461,94462],{"class":38,"line":2127},[36,94463,406],{"class":405},[36,94465,94466],{"class":38,"line":2133},[36,94467,94468],{"class":405},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,94470,94471],{"class":38,"line":2154},[36,94472,94473],{"class":405},"       [ 4,  5,  6,  4,  5,  6],\n",[36,94475,94476],{"class":38,"line":2159},[36,94477,94478],{"class":405},"       [ 7,  8,  9,  7,  8,  9],\n",[36,94480,94481],{"class":38,"line":2173},[36,94482,94483],{"class":405},"       [10, 11, 12, 10, 11, 12]])\n",[36,94485,94486],{"class":38,"line":2178},[36,94487,406],{"class":405},[36,94489,94490,94493,94495,94497,94499],{"class":38,"line":2207},[36,94491,94492],{"class":42},"np.tile(aa,(",[36,94494,96],{"class":53},[36,94496,57],{"class":42},[36,94498,127],{"class":53},[36,94500,370],{"class":42},[36,94502,94503],{"class":38,"line":2212},[36,94504,244],{"class":69},[36,94506,94507],{"class":38,"line":2229},[36,94508,406],{"class":405},[36,94510,94511],{"class":38,"line":2234},[36,94512,94513],{"class":405},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,94515,94516],{"class":38,"line":2239},[36,94517,94518],{"class":405},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,94520,94521],{"class":38,"line":2244},[36,94522,94523],{"class":405},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,94525,94526],{"class":38,"line":2258},[36,94527,94528],{"class":405},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,94530,94531],{"class":38,"line":2263},[36,94532,94533],{"class":405},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,94535,94536],{"class":38,"line":3057},[36,94537,94518],{"class":405},[36,94539,94540],{"class":38,"line":3071},[36,94541,94523],{"class":405},[36,94543,94544],{"class":38,"line":3079},[36,94545,94546],{"class":405},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,94548,94549],{"class":38,"line":3084},[36,94550,406],{"class":405},[14,94552,94554],{"id":94553},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94556,94557],{},"repeat()将数组中的每个元素重复若干次",[26,94559,94561],{"className":28,"code":94560,"language":30,"meta":31,"style":31},"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",[33,94562,94563,94579,94588,94592,94597,94621,94626,94635,94639,94644,94648,94653,94669,94673,94677,94682,94687,94692,94696,94701,94705,94710,94715,94719,94735,94739,94743,94748,94753,94758,94763],{"__ignoreMap":31},[36,94564,94565,94567,94569,94571,94573,94575,94577],{"class":38,"line":39},[36,94566,43],{"class":42},[36,94568,47],{"class":46},[36,94570,50],{"class":42},[36,94572,54],{"class":53},[36,94574,57],{"class":42},[36,94576,938],{"class":53},[36,94578,63],{"class":42},[36,94580,94581,94584,94586],{"class":38,"line":66},[36,94582,94583],{"class":42},"np.repeat(a,",[36,94585,127],{"class":53},[36,94587,63],{"class":42},[36,94589,94590],{"class":38,"line":73},[36,94591,244],{"class":69},[36,94593,94594],{"class":38,"line":79},[36,94595,94596],{"class":69},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,94598,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619],{"class":38,"line":85},[36,94600,88],{"class":42},[36,94602,47],{"class":46},[36,94604,50],{"class":42},[36,94606,54],{"class":53},[36,94608,57],{"class":42},[36,94610,60],{"class":53},[36,94612,222],{"class":42},[36,94614,912],{"class":53},[36,94616,57],{"class":42},[36,94618,127],{"class":53},[36,94620,63],{"class":42},[36,94622,94623],{"class":38,"line":419},[36,94624,94625],{"class":69},"#这个重复之后二维变成一维\n",[36,94627,94628,94631,94633],{"class":38,"line":425},[36,94629,94630],{"class":42},"np.repeat(aa,",[36,94632,96],{"class":53},[36,94634,63],{"class":42},[36,94636,94637],{"class":38,"line":431},[36,94638,406],{"class":405},[36,94640,94641],{"class":38,"line":437},[36,94642,94643],{"class":405},"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",[36,94645,94646],{"class":38,"line":443},[36,94647,406],{"class":405},[36,94649,94650],{"class":38,"line":2092},[36,94651,94652],{"class":69},"#指定axis\n",[36,94654,94655,94657,94659,94661,94663,94665,94667],{"class":38,"line":2097},[36,94656,94630],{"class":42},[36,94658,96],{"class":53},[36,94660,57],{"class":42},[36,94662,47991],{"class":5696},[36,94664,47],{"class":46},[36,94666,812],{"class":53},[36,94668,63],{"class":42},[36,94670,94671],{"class":38,"line":2103},[36,94672,244],{"class":69},[36,94674,94675],{"class":38,"line":2108},[36,94676,406],{"class":405},[36,94678,94679],{"class":38,"line":2122},[36,94680,94681],{"class":405},"array([[ 1,  2,  3],\n",[36,94683,94684],{"class":38,"line":2127},[36,94685,94686],{"class":405},"       [ 1,  2,  3],\n",[36,94688,94689],{"class":38,"line":2133},[36,94690,94691],{"class":405},"       [ 4,  5,  6],\n",[36,94693,94694],{"class":38,"line":2154},[36,94695,94691],{"class":405},[36,94697,94698],{"class":38,"line":2159},[36,94699,94700],{"class":405},"       [ 7,  8,  9],\n",[36,94702,94703],{"class":38,"line":2173},[36,94704,94700],{"class":405},[36,94706,94707],{"class":38,"line":2178},[36,94708,94709],{"class":405},"       [10, 11, 12],\n",[36,94711,94712],{"class":38,"line":2207},[36,94713,94714],{"class":405},"       [10, 11, 12]])\n",[36,94716,94717],{"class":38,"line":2212},[36,94718,406],{"class":405},[36,94720,94721,94723,94725,94727,94729,94731,94733],{"class":38,"line":2229},[36,94722,94630],{"class":42},[36,94724,96],{"class":53},[36,94726,57],{"class":42},[36,94728,47991],{"class":5696},[36,94730,47],{"class":46},[36,94732,54],{"class":53},[36,94734,63],{"class":42},[36,94736,94737],{"class":38,"line":2234},[36,94738,244],{"class":69},[36,94740,94741],{"class":38,"line":2239},[36,94742,406],{"class":405},[36,94744,94745],{"class":38,"line":2244},[36,94746,94747],{"class":405},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,94749,94750],{"class":38,"line":2258},[36,94751,94752],{"class":405},"       [ 4,  4,  5,  5,  6,  6],\n",[36,94754,94755],{"class":38,"line":2263},[36,94756,94757],{"class":405},"       [ 7,  7,  8,  8,  9,  9],\n",[36,94759,94760],{"class":38,"line":3057},[36,94761,94762],{"class":405},"       [10, 10, 11, 11, 12, 12]])\n",[36,94764,94765],{"class":38,"line":3071},[36,94766,406],{"class":405},[14,94768,94770],{"id":94769},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,94772,94774],{"className":28,"code":94773,"language":30,"meta":31,"style":31},"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",[33,94775,94776,94792,94797,94809,94813,94818,94828,94832],{"__ignoreMap":31},[36,94777,94778,94780,94782,94784,94786,94788,94790],{"class":38,"line":39},[36,94779,43],{"class":42},[36,94781,47],{"class":46},[36,94783,50],{"class":42},[36,94785,54],{"class":53},[36,94787,57],{"class":42},[36,94789,938],{"class":53},[36,94791,63],{"class":42},[36,94793,94794],{"class":38,"line":66},[36,94795,94796],{"class":69},"#array([，2，3，4])\n",[36,94798,94799,94802,94804,94806],{"class":38,"line":73},[36,94800,94801],{"class":42},"np.roll(a,",[36,94803,96],{"class":53},[36,94805,231],{"class":42},[36,94807,94808],{"class":69},"#传正数向后调多少位，传负数向前调多少位\n",[36,94810,94811],{"class":38,"line":79},[36,94812,244],{"class":69},[36,94814,94815],{"class":38,"line":85},[36,94816,94817],{"class":69},"#array([3, 4, 1, 2])\n",[36,94819,94820,94822,94824,94826],{"class":38,"line":419},[36,94821,94801],{"class":42},[36,94823,173],{"class":46},[36,94825,54],{"class":53},[36,94827,63],{"class":42},[36,94829,94830],{"class":38,"line":425},[36,94831,244],{"class":69},[36,94833,94834],{"class":38,"line":431},[36,94835,94836],{"class":69},"#array([2, 3, 4, 1])\n",[19,94838,94839],{},[519,94840],{"alt":31,"src":94841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94843,94845],{"id":94844},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94847,94848],{},"resize()重新调整数组的大小",[19,94850,94851],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,94853,94855],{"className":28,"code":94854,"language":30,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,94856,94857,94862,94875],{"__ignoreMap":31},[36,94858,94859],{"class":38,"line":39},[36,94860,94861],{"class":69},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,94863,94864,94867,94869,94871,94873],{"class":38,"line":66},[36,94865,94866],{"class":42},"np.resize(aa,(",[36,94868,96],{"class":53},[36,94870,57],{"class":42},[36,94872,101],{"class":53},[36,94874,370],{"class":42},[36,94876,94877,94879,94881,94883,94885,94887],{"class":38,"line":73},[36,94878,94866],{"class":42},[36,94880,96],{"class":53},[36,94882,57],{"class":42},[36,94884,1037],{"class":53},[36,94886,83248],{"class":42},[36,94888,94889],{"class":69},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94891,94893],{"id":94892},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94895,94896],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94898,94899],{},[519,94900],{"alt":31,"src":94901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94903,94905],{"id":94904},"_126-保存加载文件","12.6 保存加载文件",[19,94907,94908],{},"savetxt():将数据保存到txt文件中",[19,94910,94911],{},"loadtxt():从文件加载数据",[19,94913,94914],{},[519,94915],{"alt":31,"src":94916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94918,94920],{"id":94919},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94922,94923],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94925,94927],{"id":94926},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94929,94930],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94932,94933],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94935,94936],{},[519,94937],{"alt":31,"src":94938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94940,94942],{"id":94941},"_129-where语句","12.9 where语句",[19,94944,94945],{},"np.where(条件,x,y)",[19,94947,94948],{},"如果条件为True,对应值为x,否则对应值为y",[19,94950,94951],{},[519,94952],{"alt":31,"src":94953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94955,94957],{"id":94956},"_1210-dot矩阵","12.10 dot()矩阵",[19,94959,94960],{},[519,94961],{"alt":31,"src":94962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[539,94964,94965],{},"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":31,"searchDepth":66,"depth":66,"links":94967},[94968,94969,94970,94971,94972,94973,94974,94975,94976,94977],{"id":94331,"depth":66,"text":94332},{"id":94553,"depth":66,"text":94554},{"id":94769,"depth":66,"text":94770},{"id":94844,"depth":66,"text":94845},{"id":94892,"depth":66,"text":94893},{"id":94904,"depth":66,"text":94905},{"id":94919,"depth":66,"text":94920},{"id":94926,"depth":66,"text":94927},{"id":94941,"depth":66,"text":94942},{"id":94956,"depth":66,"text":94957},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94323,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94984,"title":94985,"body":94986,"description":550,"extension":551,"meta":95339,"navigation":553,"path":95340,"seo":95341,"stem":95342,"__hash__":95343},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94987,"toc":95337},[94988,94991,94994,94997,95000,95003,95068,95070,95334],[10,94989,94985],{"id":94990},"_13数组排序",[19,94992,94993],{},"排序主要用到的方法是np.sort和np.argsort",[19,94995,94996],{},"其中np.sort()对数组直接排序",[19,94998,94999],{},"而np.argsort()是返回排序后的原始索引",[19,95001,95002],{},"①一维数组",[26,95004,95006],{"className":28,"code":95005,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[33,95007,95008,95012,95052,95060],{"__ignoreMap":31},[36,95009,95010],{"class":38,"line":39},[36,95011,93580],{"class":69},[36,95013,95014,95016,95018,95020,95022,95024,95026,95028,95030,95032,95034,95036,95038,95040,95042,95044,95046,95048,95050],{"class":38,"line":66},[36,95015,43],{"class":42},[36,95017,47],{"class":46},[36,95019,93499],{"class":42},[36,95021,127],{"class":53},[36,95023,57],{"class":42},[36,95025,154],{"class":53},[36,95027,57],{"class":42},[36,95029,1012],{"class":53},[36,95031,57],{"class":42},[36,95033,1388],{"class":53},[36,95035,57],{"class":42},[36,95037,898],{"class":53},[36,95039,57],{"class":42},[36,95041,1506],{"class":53},[36,95043,57],{"class":42},[36,95045,101],{"class":53},[36,95047,57],{"class":42},[36,95049,1062],{"class":53},[36,95051,5137],{"class":42},[36,95053,95054,95057],{"class":38,"line":73},[36,95055,95056],{"class":42},"np.sort(a)",[36,95058,95059],{"class":69},"#升序排序\n",[36,95061,95062,95065],{"class":38,"line":79},[36,95063,95064],{"class":42},"np.argsort(a)",[36,95066,95067],{"class":69},"#按照元素大小来索引排序\n",[19,95069,93766],{},[26,95071,95073],{"className":28,"code":95072,"language":30,"meta":31,"style":31},"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",[33,95074,95075,95087,95113,95118,95122,95127,95132,95137,95142,95146,95154,95158,95163,95168,95173,95178,95182,95187,95200,95204,95209,95214,95219,95224,95228,95233,95245,95249,95253,95257,95261,95265,95269,95274,95289,95294,95303,95308,95312,95316,95321,95325,95330],{"__ignoreMap":31},[36,95076,95077,95080,95082,95084],{"class":38,"line":39},[36,95078,95079],{"class":42},"np.random.seed(",[36,95081,812],{"class":53},[36,95083,231],{"class":42},[36,95085,95086],{"class":69},"#保证每次值一样\n",[36,95088,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107,95109,95111],{"class":38,"line":66},[36,95090,88],{"class":42},[36,95092,47],{"class":46},[36,95094,93589],{"class":42},[36,95096,930],{"class":53},[36,95098,57],{"class":42},[36,95100,531],{"class":5696},[36,95102,47],{"class":46},[36,95104,345],{"class":42},[36,95106,912],{"class":53},[36,95108,57],{"class":42},[36,95110,101],{"class":53},[36,95112,370],{"class":42},[36,95114,95115],{"class":38,"line":73},[36,95116,95117],{"class":69},"#原数组：\n",[36,95119,95120],{"class":38,"line":79},[36,95121,406],{"class":405},[36,95123,95124],{"class":38,"line":85},[36,95125,95126],{"class":405},"array([[44, 47, 64, 67, 67,  9],\n",[36,95128,95129],{"class":38,"line":419},[36,95130,95131],{"class":405},"       [83, 21, 36, 87, 70, 88],\n",[36,95133,95134],{"class":38,"line":425},[36,95135,95136],{"class":405},"       [88, 12, 58, 65, 39, 87],\n",[36,95138,95139],{"class":38,"line":431},[36,95140,95141],{"class":405},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,95143,95144],{"class":38,"line":437},[36,95145,406],{"class":405},[36,95147,95148,95151],{"class":38,"line":443},[36,95149,95150],{"class":42},"np.sort(aa)",[36,95152,95153],{"class":69},"#每行进行了排序\n",[36,95155,95156],{"class":38,"line":2092},[36,95157,406],{"class":405},[36,95159,95160],{"class":38,"line":2097},[36,95161,95162],{"class":405},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,95164,95165],{"class":38,"line":2103},[36,95166,95167],{"class":405},"       [21, 36, 70, 83, 87, 88],\n",[36,95169,95170],{"class":38,"line":2108},[36,95171,95172],{"class":405},"       [12, 39, 58, 65, 87, 88],\n",[36,95174,95175],{"class":38,"line":2122},[36,95176,95177],{"class":405},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,95179,95180],{"class":38,"line":2127},[36,95181,406],{"class":405},[36,95183,95184],{"class":38,"line":2133},[36,95185,95186],{"class":69},"#axis=0时\n",[36,95188,95189,95192,95194,95196,95198],{"class":38,"line":2154},[36,95190,95191],{"class":42},"np.sort(aa,",[36,95193,47991],{"class":5696},[36,95195,47],{"class":46},[36,95197,812],{"class":53},[36,95199,63],{"class":42},[36,95201,95202],{"class":38,"line":2159},[36,95203,406],{"class":405},[36,95205,95206],{"class":38,"line":2173},[36,95207,95208],{"class":405},"array([[44, 12, 36, 37, 25,  9],\n",[36,95210,95211],{"class":38,"line":2178},[36,95212,95213],{"class":405},"       [46, 21, 58, 65, 39, 77],\n",[36,95215,95216],{"class":38,"line":2207},[36,95217,95218],{"class":405},"       [83, 47, 64, 67, 67, 87],\n",[36,95220,95221],{"class":38,"line":2212},[36,95222,95223],{"class":405},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,95225,95226],{"class":38,"line":2229},[36,95227,406],{"class":405},[36,95229,95230],{"class":38,"line":2234},[36,95231,95232],{"class":69},"#axis=1时,为默认值\n",[36,95234,95235,95237,95239,95241,95243],{"class":38,"line":2239},[36,95236,95191],{"class":42},[36,95238,47991],{"class":5696},[36,95240,47],{"class":46},[36,95242,54],{"class":53},[36,95244,63],{"class":42},[36,95246,95247],{"class":38,"line":2244},[36,95248,406],{"class":405},[36,95250,95251],{"class":38,"line":2258},[36,95252,95162],{"class":405},[36,95254,95255],{"class":38,"line":2263},[36,95256,95167],{"class":405},[36,95258,95259],{"class":38,"line":3057},[36,95260,95172],{"class":405},[36,95262,95263],{"class":38,"line":3071},[36,95264,95177],{"class":405},[36,95266,95267],{"class":38,"line":3079},[36,95268,406],{"class":405},[36,95270,95271],{"class":38,"line":3084},[36,95272,95273],{"class":69},"#按最后一列排序\n",[36,95275,95276,95278,95280,95283,95285,95287],{"class":38,"line":3090},[36,95277,882],{"class":42},[36,95279,47],{"class":46},[36,95281,95282],{"class":42},"aa[:,",[36,95284,173],{"class":46},[36,95286,54],{"class":53},[36,95288,33723],{"class":42},[36,95290,95291],{"class":38,"line":3096},[36,95292,95293],{"class":69},"#获取最后一列排好序的索引\n",[36,95295,95296,95298,95300],{"class":38,"line":3101},[36,95297,74535],{"class":42},[36,95299,47],{"class":46},[36,95301,95302],{"class":42},"np.argsort(b)\n",[36,95304,95305],{"class":38,"line":8428},[36,95306,95307],{"class":42},"aa[index]\n",[36,95309,95310],{"class":38,"line":8452},[36,95311,406],{"class":405},[36,95313,95314],{"class":38,"line":8457},[36,95315,95126],{"class":405},[36,95317,95318],{"class":38,"line":8463},[36,95319,95320],{"class":405},"       [46, 88, 81, 37, 25, 77],\n",[36,95322,95323],{"class":38,"line":8490},[36,95324,95136],{"class":405},[36,95326,95327],{"class":38,"line":8495},[36,95328,95329],{"class":405},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,95331,95332],{"class":38,"line":8501},[36,95333,406],{"class":405},[539,95335,95336],{},"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":31,"searchDepth":66,"depth":66,"links":95338},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94985,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95345,"title":95346,"body":95347,"description":550,"extension":551,"meta":95377,"navigation":553,"path":95378,"seo":95379,"stem":95380,"__hash__":95381},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95348,"toc":95375},[95349,95352,95355,95358,95361,95364,95367,95370],[10,95350,95346],{"id":95351},"_14广播机制",[19,95353,95354],{},"广播的规则：",[19,95356,95357],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95359,95360],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95362,95363],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95365,95366],{},"3.如果没有维度形状为1，则会引发异常",[19,95368,95369],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95371,95372],{},[519,95373],{"alt":31,"src":95374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":66,"depth":66,"links":95376},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95346,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95383,"title":95384,"body":95385,"description":550,"extension":551,"meta":95483,"navigation":553,"path":95484,"seo":95485,"stem":95486,"__hash__":95487},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95386,"toc":95481},[95387,95390,95393,95478],[10,95388,95384],{"id":95389},"_15比较掩码",[19,95391,95392],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,95394,95396],{"className":28,"code":95395,"language":30,"meta":31,"style":31},"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",[33,95397,95398,95444,95455,95469,95473],{"__ignoreMap":31},[36,95399,95400,95402,95404,95407,95409,95411,95413,95415,95417,95419,95421,95423,95425,95427,95429,95431,95433,95435,95437,95439,95441],{"class":38,"line":39},[36,95401,43],{"class":42},[36,95403,47],{"class":46},[36,95405,95406],{"class":42},"np.array([[",[36,95408,54],{"class":53},[36,95410,57],{"class":42},[36,95412,96],{"class":53},[36,95414,57],{"class":42},[36,95416,127],{"class":53},[36,95418,48507],{"class":42},[36,95420,1088],{"class":53},[36,95422,57],{"class":42},[36,95424,154],{"class":53},[36,95426,57],{"class":42},[36,95428,60],{"class":53},[36,95430,48507],{"class":42},[36,95432,1338],{"class":53},[36,95434,57],{"class":42},[36,95436,1363],{"class":53},[36,95438,57],{"class":42},[36,95440,1388],{"class":53},[36,95442,95443],{"class":42},"]])\n",[36,95445,95446,95448,95450,95452],{"class":38,"line":66},[36,95447,43],{"class":42},[36,95449,1523],{"class":46},[36,95451,1313],{"class":53},[36,95453,95454],{"class":69},"#结果是一个由True,False组成的数组\n",[36,95456,95457,95460,95462,95464,95466],{"class":38,"line":73},[36,95458,95459],{"class":42},"a[a",[36,95461,1523],{"class":46},[36,95463,1313],{"class":53},[36,95465,1553],{"class":42},[36,95467,95468],{"class":69},"#小于20的元素会存到这个数组中\n",[36,95470,95471],{"class":38,"line":79},[36,95472,244],{"class":69},[36,95474,95475],{"class":38,"line":85},[36,95476,95477],{"class":69},"#array([ 1,  2,  3, 11, 12, 13])\n",[539,95479,95480],{},"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":31,"searchDepth":66,"depth":66,"links":95482},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95384,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95489,"title":95490,"body":95491,"description":550,"extension":551,"meta":95583,"navigation":553,"path":95584,"seo":95585,"stem":95586,"__hash__":95587},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95492,"toc":95581},[95493,95496,95499,95502,95505,95508,95573,95578],[10,95494,95490],{"id":95495},"_16魔法命令time",[19,95497,95498],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95500,95501],{},"%:行模式",[19,95503,95504],{},"%%:单元格模式",[19,95506,95507],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,95509,95511],{"className":28,"code":95510,"language":30,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[33,95512,95513,95518,95525,95530,95539,95552,95556,95564],{"__ignoreMap":31},[36,95514,95515],{"class":38,"line":39},[36,95516,95517],{"class":69},"#程序执行时间\n",[36,95519,95520,95522],{"class":38,"line":66},[36,95521,30871],{"class":46},[36,95523,95524],{"class":42}," time \n",[36,95526,95527],{"class":38,"line":73},[36,95528,95529],{"class":69},"#获取时间\n",[36,95531,95532,95535,95537],{"class":38,"line":79},[36,95533,95534],{"class":42},"start",[36,95536,47],{"class":46},[36,95538,32895],{"class":42},[36,95540,95541,95544,95547,95549],{"class":38,"line":85},[36,95542,95543],{"class":42},"time.sleep(",[36,95545,95546],{"class":53},"0.4",[36,95548,231],{"class":42},[36,95550,95551],{"class":69},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,95553,95554],{"class":38,"line":419},[36,95555,95529],{"class":69},[36,95557,95558,95560,95562],{"class":38,"line":425},[36,95559,46278],{"class":42},[36,95561,47],{"class":46},[36,95563,32895],{"class":42},[36,95565,95566,95568,95570],{"class":38,"line":431},[36,95567,46278],{"class":42},[36,95569,173],{"class":46},[36,95571,95572],{"class":42},"start\n",[19,95574,95575],{},[519,95576],{"alt":31,"src":95577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[539,95579,95580],{},"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":31,"searchDepth":66,"depth":66,"links":95582},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95490,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95589,"title":95590,"body":95591,"description":550,"extension":551,"meta":95626,"navigation":553,"path":95627,"seo":95628,"stem":95629,"__hash__":95630},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95592,"toc":95624},[95593,95596,95599,95602,95605,95608,95611,95614,95619],[10,95594,95590],{"id":95595},"_17魔法命令timeit",[19,95597,95598],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95600,95601],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95603,95604],{},"单元格模式：",[19,95606,95607],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95609,95610],{},"初始化语句执行次数由轮数来决定",[19,95612,95613],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95615,95616],{},[519,95617],{"alt":31,"src":95618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95620,95621],{},[519,95622],{"alt":31,"src":95623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":66,"depth":66,"links":95625},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95590,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95632,"title":95633,"body":95634,"description":550,"extension":551,"meta":95652,"navigation":553,"path":95653,"seo":95654,"stem":95655,"__hash__":95656},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95635,"toc":95650},[95636,95639,95642,95645],[10,95637,95633],{"id":95638},"_18魔法命令writefile和run",[19,95640,95641],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95643,95644],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95646,95647],{},[519,95648],{"alt":31,"src":95649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":66,"depth":66,"links":95651},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95633,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95658,"title":95659,"body":95660,"description":550,"extension":551,"meta":95713,"navigation":553,"path":95714,"seo":95715,"stem":95716,"__hash__":95717},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95661,"toc":95711},[95662,95665,95668,95670,95673,95676,95681,95684,95687,95690,95693,95696,95699,95702,95705,95708],[10,95663,95659],{"id":95664},"_19魔法命令memit",[19,95666,95667],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95669,25080],{},[19,95671,95672],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95674,95675],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95677,95678],{},[519,95679],{"alt":31,"src":95680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95682,95683],{},"补充：",[19,95685,95686],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95688,95689],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95691,95692],{},"解决方法：",[19,95694,95695],{},"1.cmd",[19,95697,95698],{},"2.依次输入以下代码：",[19,95700,95701],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95703,95704],{},"pip install --upgrade ipython",[19,95706,95707],{},"#升级 memory_profiler 和 setuptools",[19,95709,95710],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":66,"depth":66,"links":95712},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95659,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95719,"title":95720,"body":95721,"description":550,"extension":551,"meta":97365,"navigation":553,"path":97366,"seo":97367,"stem":97368,"__hash__":97369},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95722,"toc":97335},[95723,95726,95730,95734,95795,95798,95803,95807,95812,95817,95822,95827,95830,95835,95839,95843,95876,95879,95882,95885,95937,95940,95976,95979,96020,96024,96045,96047,96084,96086,96091,96093,96098,96102,96105,96133,96137,96141,96194,96198,96290,96294,96298,96301,96306,96310,96335,96340,96344,96347,96350,96353,96356,96359,96362,96365,96377,96381,96385,96388,96420,96423,96445,96448,96474,96477,96503,96506,96540,96543,96605,96609,96612,96616,96619,96645,96648,96651,96656,96659,96728,96730,96735,96796,96799,96810,96816,96821,96825,96828,96841,96845,96860,96862,96885,96887,96913,96916,96919,96922,96970,96972,96977,96981,96985,97012,97016,97043,97046,97051,97056,97146,97150,97208,97213,97216,97219,97261,97265,97321,97326,97329,97332],[10,95724,95720],{"id":95725},"_2创建数组",[14,95727,95729],{"id":95728},"_21-array函数创建数组","2.1 array()函数创建数组",[596,95731,95733],{"id":95732},"_221-函数语句","2.2.1 函数语句",[26,95735,95737],{"className":28,"code":95736,"language":30,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,95738,95739],{"__ignoreMap":31},[36,95740,95741,95744,95747,95749,95751,95753,95755,95757,95760,95762,95765,95767,95770,95772,95774,95776,95779,95781,95784,95786,95789,95791,95793],{"class":38,"line":39},[36,95742,95743],{"class":42},"numpy.array(",[36,95745,95746],{"class":53},"object",[36,95748,12915],{"class":42},[36,95750,93974],{"class":5696},[36,95752,14044],{"class":46},[36,95754,39410],{"class":53},[36,95756,12915],{"class":42},[36,95758,95759],{"class":5696},"copy",[36,95761,14044],{"class":46},[36,95763,95764],{"class":53}," True",[36,95766,12915],{"class":42},[36,95768,95769],{"class":5696},"order",[36,95771,14044],{"class":46},[36,95773,39410],{"class":53},[36,95775,12915],{"class":42},[36,95777,95778],{"class":5696},"subok",[36,95780,14044],{"class":46},[36,95782,95783],{"class":53}," False",[36,95785,12915],{"class":42},[36,95787,95788],{"class":5696},"ndmin",[36,95790,14044],{"class":46},[36,95792,4573],{"class":53},[36,95794,63],{"class":42},[19,95796,95797],{},"参数：",[19,95799,95800],{},[519,95801],{"alt":31,"src":95802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[596,95804,95806],{"id":95805},"_222-实例","2.2.2 实例",[19,95808,95809],{},[519,95810],{"alt":31,"src":95811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95813,95814],{},[519,95815],{"alt":31,"src":95816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95818,95819],{},[519,95820],{"alt":31,"src":95821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95823,95824],{},[519,95825],{"alt":31,"src":95826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95828,95829],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95831,95832],{},[519,95833],{"alt":31,"src":95834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95836,95838],{"id":95837},"_22-随机数创建数组","2.2 随机数创建数组",[596,95840,95842],{"id":95841},"_221-random语句","2.2.1 random语句",[26,95844,95846],{"className":28,"code":95845,"language":30,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,95847,95848,95853,95858,95866,95871],{"__ignoreMap":31},[36,95849,95850],{"class":38,"line":39},[36,95851,95852],{"class":69},"#random.random()\n",[36,95854,95855],{"class":38,"line":66},[36,95856,95857],{"class":69},"#确定随机种子,就是每次运行结果是相同的\n",[36,95859,95860,95862,95864],{"class":38,"line":73},[36,95861,95079],{"class":42},[36,95863,812],{"class":53},[36,95865,63],{"class":42},[36,95867,95868],{"class":38,"line":79},[36,95869,95870],{"class":42},"np.random.random()\n",[36,95872,95873],{"class":38,"line":85},[36,95874,95875],{"class":69},"#生成一个随机的数目\n",[19,95877,95878],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95880,95881],{},"可以指定数组形状 size",[19,95883,95884],{},"①生成一维数组",[26,95886,95888],{"className":28,"code":95887,"language":30,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[33,95889,95890,95895,95908,95913,95929],{"__ignoreMap":31},[36,95891,95892],{"class":38,"line":39},[36,95893,95894],{"class":69},"#random.random(size())\n",[36,95896,95897,95900,95902,95904,95906],{"class":38,"line":66},[36,95898,95899],{"class":42},"np.random.random(",[36,95901,531],{"class":5696},[36,95903,47],{"class":46},[36,95905,938],{"class":53},[36,95907,63],{"class":42},[36,95909,95910],{"class":38,"line":73},[36,95911,95912],{"class":69},"#生成一位的五个元素\n",[36,95914,95915,95917,95919,95921,95923,95925,95927],{"class":38,"line":79},[36,95916,43],{"class":42},[36,95918,47],{"class":46},[36,95920,95899],{"class":42},[36,95922,531],{"class":5696},[36,95924,47],{"class":46},[36,95926,912],{"class":53},[36,95928,63],{"class":42},[36,95930,95931,95934],{"class":38,"line":85},[36,95932,95933],{"class":42},"a.shape ",[36,95935,95936],{"class":69},"#输出数组形状\n",[19,95938,95939],{},"②生成二维数组",[26,95941,95943],{"className":28,"code":95942,"language":30,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,95944,95945,95949,95971],{"__ignoreMap":31},[36,95946,95947],{"class":38,"line":39},[36,95948,93776],{"class":69},[36,95950,95951,95953,95955,95957,95959,95961,95963,95965,95967,95969],{"class":38,"line":66},[36,95952,88],{"class":42},[36,95954,47],{"class":46},[36,95956,95899],{"class":42},[36,95958,531],{"class":5696},[36,95960,47],{"class":46},[36,95962,345],{"class":42},[36,95964,912],{"class":53},[36,95966,57],{"class":42},[36,95968,938],{"class":53},[36,95970,370],{"class":42},[36,95972,95973],{"class":38,"line":73},[36,95974,95975],{"class":69},"#生成四行五列的数组\n",[19,95977,95978],{},"③生成三维数组",[26,95980,95982],{"className":28,"code":95981,"language":30,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,95983,95984,95989,96015],{"__ignoreMap":31},[36,95985,95986],{"class":38,"line":39},[36,95987,95988],{"class":69},"#三维数组\n",[36,95990,95991,95993,95995,95997,95999,96001,96003,96005,96007,96009,96011,96013],{"class":38,"line":66},[36,95992,116],{"class":42},[36,95994,47],{"class":46},[36,95996,95899],{"class":42},[36,95998,531],{"class":5696},[36,96000,47],{"class":46},[36,96002,345],{"class":42},[36,96004,96],{"class":53},[36,96006,57],{"class":42},[36,96008,127],{"class":53},[36,96010,57],{"class":42},[36,96012,912],{"class":53},[36,96014,370],{"class":42},[36,96016,96017],{"class":38,"line":73},[36,96018,96019],{"class":42},"aaa.shape\n",[596,96021,96023],{"id":96022},"_222-randint语句","2.2.2 randint语句",[26,96025,96027],{"className":28,"code":96026,"language":30,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,96028,96029,96034],{"__ignoreMap":31},[36,96030,96031],{"class":38,"line":39},[36,96032,96033],{"class":69},"#生成随机的整数 random.randint(low,high,size)\n",[36,96035,96036,96038,96040,96042],{"class":38,"line":66},[36,96037,93589],{"class":42},[36,96039,938],{"class":53},[36,96041,14194],{"class":42},[36,96043,96044],{"class":69},"#0~5中的随机一个数\n",[19,96046,95884],{},[26,96048,96050],{"className":28,"code":96049,"language":30,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[33,96051,96052,96057,96079],{"__ignoreMap":31},[36,96053,96054],{"class":38,"line":39},[36,96055,96056],{"class":69},"#一维\n",[36,96058,96059,96061,96063,96065,96067,96069,96071,96073,96075,96077],{"class":38,"line":66},[36,96060,93589],{"class":42},[36,96062,54],{"class":53},[36,96064,57],{"class":42},[36,96066,1088],{"class":53},[36,96068,57],{"class":42},[36,96070,531],{"class":5696},[36,96072,47],{"class":46},[36,96074,345],{"class":42},[36,96076,1062],{"class":53},[36,96078,370],{"class":42},[36,96080,96081],{"class":38,"line":73},[36,96082,96083],{"class":69},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96085,95939],{},[19,96087,96088],{},[519,96089],{"alt":31,"src":96090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96092,95978],{},[19,96094,96095],{},[519,96096],{"alt":31,"src":96097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[596,96099,96101],{"id":96100},"_222-rand语句","2.2.2 rand语句",[19,96103,96104],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,96106,96108],{"className":28,"code":96107,"language":30,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,96109,96110,96123,96128],{"__ignoreMap":31},[36,96111,96112,96115,96117,96119,96121],{"class":38,"line":39},[36,96113,96114],{"class":42},"np.random.rand(",[36,96116,930],{"class":53},[36,96118,57],{"class":42},[36,96120,1062],{"class":53},[36,96122,63],{"class":42},[36,96124,96125],{"class":38,"line":66},[36,96126,96127],{"class":69},"#第一个参数100：行数，表示有100个样本\n",[36,96129,96130],{"class":38,"line":73},[36,96131,96132],{"class":69},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96134,96136],{"id":96135},"_23-arange创建数组","2.3 arange()创建数组",[596,96138,96140],{"id":96139},"_231-函数语句","2.3.1 函数语句",[26,96142,96144],{"className":28,"code":96143,"language":30,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[33,96145,96146,96160,96165,96170,96175,96180,96185,96190],{"__ignoreMap":31},[36,96147,96148,96151,96153,96155,96158],{"class":38,"line":39},[36,96149,96150],{"class":42},"numpy.arange([start,] stop[, step], ",[36,96152,93974],{"class":5696},[36,96154,47],{"class":46},[36,96156,96157],{"class":53},"None",[36,96159,63],{"class":42},[36,96161,96162],{"class":38,"line":66},[36,96163,96164],{"class":69},"#参数\n",[36,96166,96167],{"class":38,"line":73},[36,96168,96169],{"class":405},"\"\"\"\n",[36,96171,96172],{"class":38,"line":79},[36,96173,96174],{"class":405},"start:起始值，可选，默认从 0 开始。\n",[36,96176,96177],{"class":38,"line":85},[36,96178,96179],{"class":405},"stop:结束值（不包含该值）。\n",[36,96181,96182],{"class":38,"line":419},[36,96183,96184],{"class":405},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,96186,96187],{"class":38,"line":425},[36,96188,96189],{"class":405},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,96191,96192],{"class":38,"line":431},[36,96193,96169],{"class":405},[596,96195,96197],{"id":96196},"_232-实例","2.3.2 实例",[26,96199,96201],{"className":28,"code":96200,"language":30,"meta":31,"style":31},"#创建一维数组\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",[33,96202,96203,96207,96231,96236,96241,96245,96268,96272,96276,96281,96286],{"__ignoreMap":31},[36,96204,96205],{"class":38,"line":39},[36,96206,93580],{"class":69},[36,96208,96209,96211,96213,96215,96217,96219,96221,96223,96225,96227,96229],{"class":38,"line":66},[36,96210,50],{"class":42},[36,96212,54],{"class":53},[36,96214,57],{"class":42},[36,96216,1338],{"class":53},[36,96218,57],{"class":42},[36,96220,54],{"class":53},[36,96222,57],{"class":42},[36,96224,93974],{"class":5696},[36,96226,47],{"class":46},[36,96228,631],{"class":53},[36,96230,63],{"class":42},[36,96232,96233],{"class":38,"line":73},[36,96234,96235],{"class":69},"#输出结果：\n",[36,96237,96238],{"class":38,"line":79},[36,96239,96240],{"class":69},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,96242,96243],{"class":38,"line":85},[36,96244,94419],{"class":69},[36,96246,96247,96250,96252,96254,96256,96259,96261,96263,96265],{"class":38,"line":419},[36,96248,96249],{"class":42},"np.array([np.arange(",[36,96251,54],{"class":53},[36,96253,57],{"class":42},[36,96255,912],{"class":53},[36,96257,96258],{"class":42},"),np.arange(",[36,96260,912],{"class":53},[36,96262,57],{"class":42},[36,96264,987],{"class":53},[36,96266,96267],{"class":42},")])\n",[36,96269,96270],{"class":38,"line":425},[36,96271,244],{"class":69},[36,96273,96274],{"class":38,"line":431},[36,96275,96169],{"class":405},[36,96277,96278],{"class":38,"line":437},[36,96279,96280],{"class":405},"array([[1, 2, 3],\n",[36,96282,96283],{"class":38,"line":443},[36,96284,96285],{"class":405},"       [4, 5, 6]])\n",[36,96287,96288],{"class":38,"line":2092},[36,96289,96169],{"class":405},[14,96291,96293],{"id":96292},"_24-生态分布","2.4 生态分布",[596,96295,96297],{"id":96296},"_241-标准正态分布","2.4.1 标准正态分布",[19,96299,96300],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96302,96303],{},[519,96304],{"alt":31,"src":96305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[596,96307,96309],{"id":96308},"_242-常规正态分布","2.4.2 常规正态分布",[26,96311,96313],{"className":28,"code":96312,"language":30,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,96314,96315,96320,96325,96330],{"__ignoreMap":31},[36,96316,96317],{"class":38,"line":39},[36,96318,96319],{"class":42},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,96321,96322],{"class":38,"line":66},[36,96323,96324],{"class":69},"#loc:期望\n",[36,96326,96327],{"class":38,"line":73},[36,96328,96329],{"class":69},"#scale:方差\n",[36,96331,96332],{"class":38,"line":79},[36,96333,96334],{"class":69},"#size:用于确定是几维的数列\n",[19,96336,96337],{},[519,96338],{"alt":31,"src":96339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96341,96343],{"id":96342},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96345,96346],{},"ndim:秩，维度个数",[19,96348,96349],{},"size:数组元素的个数",[19,96351,96352],{},"shape:数组的形状",[19,96354,96355],{},"dtype:数组元素的类型",[19,96357,96358],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96360,96361],{},"他们都是属性，通过数组.属性的形式来确定",[19,96363,96364],{},"如果需要输出多个可以通过以下方式：",[26,96366,96368],{"className":28,"code":96367,"language":30,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,96369,96370],{"__ignoreMap":31},[36,96371,96372,96374],{"class":38,"line":39},[36,96373,30894],{"class":53},[36,96375,96376],{"class":42},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96378,96380],{"id":96379},"_26-其他方式创建数组","2.6 其他方式创建数组",[596,96382,96384],{"id":96383},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96386,96387],{},"①创建一维数组",[26,96389,96391],{"className":28,"code":96390,"language":30,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[33,96392,96393,96402,96406,96411,96416],{"__ignoreMap":31},[36,96394,96395,96398,96400],{"class":38,"line":39},[36,96396,96397],{"class":42},"np.zeros(",[36,96399,1062],{"class":53},[36,96401,63],{"class":42},[36,96403,96404],{"class":38,"line":66},[36,96405,96169],{"class":405},[36,96407,96408],{"class":38,"line":73},[36,96409,96410],{"class":405},"输出结果：\n",[36,96412,96413],{"class":38,"line":79},[36,96414,96415],{"class":405},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,96417,96418],{"class":38,"line":85},[36,96419,96169],{"class":405},[19,96421,96422],{},"上方代码等价于：",[26,96424,96426],{"className":28,"code":96425,"language":30,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,96427,96428],{"__ignoreMap":31},[36,96429,96430,96432,96434,96436,96438,96440,96442],{"class":38,"line":39},[36,96431,96397],{"class":42},[36,96433,527],{"class":5696},[36,96435,47],{"class":46},[36,96437,345],{"class":42},[36,96439,1062],{"class":53},[36,96441,83248],{"class":42},[36,96443,96444],{"class":69},"#创建10个元素的0数组\n",[19,96446,96447],{},"也可以指定类型",[26,96449,96451],{"className":28,"code":96450,"language":30,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,96452,96453,96458],{"__ignoreMap":31},[36,96454,96455],{"class":38,"line":39},[36,96456,96457],{"class":69},"#指定类型\n",[36,96459,96460,96462,96464,96466,96468,96470,96472],{"class":38,"line":66},[36,96461,96397],{"class":42},[36,96463,938],{"class":53},[36,96465,57],{"class":42},[36,96467,93974],{"class":5696},[36,96469,47],{"class":46},[36,96471,631],{"class":53},[36,96473,63],{"class":42},[19,96475,96476],{},"②创建二维数组",[26,96478,96480],{"className":28,"code":96479,"language":30,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,96481,96482],{"__ignoreMap":31},[36,96483,96484,96487,96489,96491,96493,96495,96497,96499,96501],{"class":38,"line":39},[36,96485,96486],{"class":42},"np.zeros((",[36,96488,127],{"class":53},[36,96490,57],{"class":42},[36,96492,912],{"class":53},[36,96494,42733],{"class":42},[36,96496,93974],{"class":5696},[36,96498,47],{"class":46},[36,96500,631],{"class":53},[36,96502,63],{"class":42},[19,96504,96505],{},"③创建三维数组",[26,96507,96509],{"className":28,"code":96508,"language":30,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,96510,96511,96516],{"__ignoreMap":31},[36,96512,96513],{"class":38,"line":39},[36,96514,96515],{"class":69},"#创建三维数组\n",[36,96517,96518,96520,96522,96524,96526,96528,96530,96532,96534,96536,96538],{"class":38,"line":66},[36,96519,96486],{"class":42},[36,96521,127],{"class":53},[36,96523,57],{"class":42},[36,96525,912],{"class":53},[36,96527,57],{"class":42},[36,96529,938],{"class":53},[36,96531,42733],{"class":42},[36,96533,93974],{"class":5696},[36,96535,47],{"class":46},[36,96537,631],{"class":53},[36,96539,63],{"class":42},[19,96541,96542],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,96544,96546],{"className":28,"code":96545,"language":30,"meta":31,"style":31},"#使用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",[33,96547,96548,96553,96568,96573,96578,96600],{"__ignoreMap":31},[36,96549,96550],{"class":38,"line":39},[36,96551,96552],{"class":69},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,96554,96555,96557,96559,96561,96563,96565],{"class":38,"line":66},[36,96556,43],{"class":42},[36,96558,47],{"class":46},[36,96560,50],{"class":42},[36,96562,912],{"class":53},[36,96564,231],{"class":42},[36,96566,96567],{"class":69},"#这个得到的结果：一维数组0，1，2，3\n",[36,96569,96570],{"class":38,"line":73},[36,96571,96572],{"class":42},"np.zeros_like(a)\n",[36,96574,96575],{"class":38,"line":79},[36,96576,96577],{"class":69},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,96579,96580,96582,96584,96586,96588,96590,96592,96594,96596,96598],{"class":38,"line":85},[36,96581,88],{"class":42},[36,96583,47],{"class":46},[36,96585,95899],{"class":42},[36,96587,531],{"class":5696},[36,96589,47],{"class":46},[36,96591,345],{"class":42},[36,96593,912],{"class":53},[36,96595,57],{"class":42},[36,96597,938],{"class":53},[36,96599,370],{"class":42},[36,96601,96602],{"class":38,"line":419},[36,96603,96604],{"class":42},"np.zeros_like(aa)\n",[596,96606,96608],{"id":96607},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96610,96611],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[596,96613,96615],{"id":96614},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96617,96618],{},"①empty()用法",[26,96620,96622],{"className":28,"code":96621,"language":30,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,96623,96624],{"__ignoreMap":31},[36,96625,96626,96629,96631,96633,96635,96637,96639,96641,96643],{"class":38,"line":39},[36,96627,96628],{"class":42},"numpy.empty(shape,",[36,96630,93974],{"class":5696},[36,96632,47],{"class":46},[36,96634,666],{"class":53},[36,96636,57],{"class":42},[36,96638,95769],{"class":5696},[36,96640,47],{"class":46},[36,96642,76505],{"class":405},[36,96644,63],{"class":42},[19,96646,96647],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96649,96650],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96652,96653],{},[519,96654],{"alt":31,"src":96655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96657,96658],{},"②empty()用法",[26,96660,96662],{"className":28,"code":96661,"language":30,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[33,96663,96664,96685,96697,96718,96723],{"__ignoreMap":31},[36,96665,96666,96668,96670,96673,96675,96677,96679,96681,96683],{"class":38,"line":39},[36,96667,1458],{"class":42},[36,96669,47],{"class":46},[36,96671,96672],{"class":42},"np.empty(",[36,96674,1062],{"class":53},[36,96676,57],{"class":42},[36,96678,93974],{"class":5696},[36,96680,47],{"class":46},[36,96682,631],{"class":53},[36,96684,63],{"class":42},[36,96686,96687,96689,96691,96693,96695],{"class":38,"line":66},[36,96688,1433],{"class":42},[36,96690,47],{"class":46},[36,96692,50],{"class":42},[36,96694,938],{"class":53},[36,96696,63],{"class":42},[36,96698,96699,96702,96704,96707,96709,96711,96714,96716],{"class":38,"line":73},[36,96700,96701],{"class":42},"np.add(",[36,96703,96],{"class":53},[36,96705,96706],{"class":42},",x,",[36,96708,93529],{"class":5696},[36,96710,47],{"class":46},[36,96712,96713],{"class":42},"y[:",[36,96715,938],{"class":53},[36,96717,5137],{"class":42},[36,96719,96720],{"class":38,"line":79},[36,96721,96722],{"class":69},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,96724,96725],{"class":38,"line":85},[36,96726,96727],{"class":42},"y\n",[19,96729,11994],{},[19,96731,96732],{},[519,96733],{"alt":31,"src":96734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,96736,96738],{"className":28,"code":96737,"language":30,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[33,96739,96740,96756,96776,96791],{"__ignoreMap":31},[36,96741,96742,96744,96746,96748,96750,96752,96754],{"class":38,"line":39},[36,96743,1433],{"class":42},[36,96745,47],{"class":46},[36,96747,50],{"class":42},[36,96749,54],{"class":53},[36,96751,57],{"class":42},[36,96753,101],{"class":53},[36,96755,63],{"class":42},[36,96757,96758,96760,96762,96764,96766,96768,96770,96772,96774],{"class":38,"line":66},[36,96759,1458],{"class":42},[36,96761,47],{"class":46},[36,96763,96672],{"class":42},[36,96765,938],{"class":53},[36,96767,57],{"class":42},[36,96769,93974],{"class":5696},[36,96771,47],{"class":46},[36,96773,631],{"class":53},[36,96775,63],{"class":42},[36,96777,96778,96781,96783,96785,96787,96789],{"class":38,"line":73},[36,96779,96780],{"class":42},"np.add(x,",[36,96782,96],{"class":53},[36,96784,57],{"class":42},[36,96786,93529],{"class":5696},[36,96788,47],{"class":46},[36,96790,93923],{"class":42},[36,96792,96793],{"class":38,"line":79},[36,96794,96795],{"class":69},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96797,96798],{},"③empty_like()",[19,96800,96801],{},[770,96802,96803,96804,96809],{},"创建一个",[770,96805,96806],{},[770,96807,96808],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96811,96812,96815],{},[33,96813,96814],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96817,96818],{},[519,96819],{"alt":31,"src":96820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[596,96822,96824],{"id":96823},"_264-用法","2.6.4 ？？用法",[19,96826,96827],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,96829,96831],{"className":28,"code":96830,"language":30,"meta":31,"style":31},"np.full??\n",[33,96832,96833],{"__ignoreMap":31},[36,96834,96835,96838],{"class":38,"line":39},[36,96836,96837],{"class":42},"np.full",[36,96839,96840],{"class":77880},"??\n",[596,96842,96844],{"id":96843},"_265-full创建数组","2.6.5 full()创建数组",[26,96846,96848],{"className":28,"code":96847,"language":30,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,96849,96850,96855],{"__ignoreMap":31},[36,96851,96852],{"class":38,"line":39},[36,96853,96854],{"class":42},"full(shape,fill_value)\n",[36,96856,96857],{"class":38,"line":66},[36,96858,96859],{"class":42},"创建全为某个指定值的数组\n",[19,96861,95002],{},[26,96863,96865],{"className":28,"code":96864,"language":30,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,96866,96867,96872],{"__ignoreMap":31},[36,96868,96869],{"class":38,"line":39},[36,96870,96871],{"class":69},"#创建一个一维数组,以20进行填充\n",[36,96873,96874,96877,96879,96881,96883],{"class":38,"line":66},[36,96875,96876],{"class":42},"np.full(",[36,96878,1062],{"class":53},[36,96880,57],{"class":42},[36,96882,1313],{"class":53},[36,96884,63],{"class":42},[19,96886,93766],{},[26,96888,96890],{"className":28,"code":96889,"language":30,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,96891,96892,96896],{"__ignoreMap":31},[36,96893,96894],{"class":38,"line":39},[36,96895,94419],{"class":69},[36,96897,96898,96901,96903,96905,96907,96909,96911],{"class":38,"line":66},[36,96899,96900],{"class":42},"np.full((",[36,96902,127],{"class":53},[36,96904,57],{"class":42},[36,96906,938],{"class":53},[36,96908,42733],{"class":42},[36,96910,1088],{"class":53},[36,96912,63],{"class":42},[19,96914,96915],{},"③full_like用法",[19,96917,96918],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96920,96921],{},"这里是指定填充而已",[26,96923,96925],{"className":28,"code":96924,"language":30,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,96926,96927,96932,96956,96961],{"__ignoreMap":31},[36,96928,96929],{"class":38,"line":39},[36,96930,96931],{"class":69},"#创建一个指定形状数组\n",[36,96933,96934,96936,96938,96940,96942,96944,96946,96948,96950,96952,96954],{"class":38,"line":66},[36,96935,43],{"class":42},[36,96937,47],{"class":46},[36,96939,50],{"class":42},[36,96941,54],{"class":53},[36,96943,57],{"class":42},[36,96945,944],{"class":53},[36,96947,222],{"class":42},[36,96949,912],{"class":53},[36,96951,57],{"class":42},[36,96953,1037],{"class":53},[36,96955,63],{"class":42},[36,96957,96958],{"class":38,"line":73},[36,96959,96960],{"class":69},"#进行指定填充\n",[36,96962,96963,96966,96968],{"class":38,"line":79},[36,96964,96965],{"class":42},"np.full_like(a,",[36,96967,1062],{"class":53},[36,96969,63],{"class":42},[19,96971,11994],{},[19,96973,96974],{},[519,96975],{"alt":31,"src":96976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[596,96978,96980],{"id":96979},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22478,96982,96984],{"id":96983},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,96986,96988],{"className":28,"code":96987,"language":30,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,96989,96990,97007],{"__ignoreMap":31},[36,96991,96992,96995,96997,96999,97001,97003,97005],{"class":38,"line":39},[36,96993,96994],{"class":42},"np.eye(",[36,96996,912],{"class":53},[36,96998,57],{"class":42},[36,97000,93974],{"class":5696},[36,97002,47],{"class":46},[36,97004,631],{"class":53},[36,97006,63],{"class":42},[36,97008,97009],{"class":38,"line":66},[36,97010,97011],{"class":69},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22478,97013,97015],{"id":97014},"_2662-法2identity","2.6.6.2 法2：identity()",[26,97017,97019],{"className":28,"code":97018,"language":30,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,97020,97021,97026],{"__ignoreMap":31},[36,97022,97023],{"class":38,"line":39},[36,97024,97025],{"class":69},"#identity()\n",[36,97027,97028,97031,97033,97035,97037,97039,97041],{"class":38,"line":66},[36,97029,97030],{"class":42},"np.identity(",[36,97032,938],{"class":53},[36,97034,57],{"class":42},[36,97036,93974],{"class":5696},[36,97038,47],{"class":46},[36,97040,631],{"class":53},[36,97042,63],{"class":42},[19,97044,97045],{},"两个函数是有区别的",[19,97047,97048],{},[519,97049],{"alt":31,"src":97050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97052,97053],{},[519,97054],{"alt":31,"src":97055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,97057,97059],{"className":28,"code":97058,"language":30,"meta":31,"style":31},"# 创建一个 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",[33,97060,97061,97066,97078,97083,97088,97093,97098,97102,97107,97127,97131,97136,97141],{"__ignoreMap":31},[36,97062,97063],{"class":38,"line":39},[36,97064,97065],{"class":69},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,97067,97068,97070,97072,97074,97076],{"class":38,"line":66},[36,97069,96994],{"class":42},[36,97071,127],{"class":53},[36,97073,12915],{"class":42},[36,97075,912],{"class":53},[36,97077,63],{"class":42},[36,97079,97080],{"class":38,"line":73},[36,97081,97082],{"class":69},"# 输出:\n",[36,97084,97085],{"class":38,"line":79},[36,97086,97087],{"class":69},"# [[1. 0. 0. 0.]\n",[36,97089,97090],{"class":38,"line":85},[36,97091,97092],{"class":69},"#  [0. 1. 0. 0.]\n",[36,97094,97095],{"class":38,"line":419},[36,97096,97097],{"class":69},"#  [0. 0. 1. 0.]]\n",[36,97099,97100],{"class":38,"line":425},[36,97101,2880],{"emptyLinePlaceholder":553},[36,97103,97104],{"class":38,"line":431},[36,97105,97106],{"class":69},"# 对角线向上偏移1\n",[36,97108,97109,97111,97113,97115,97117,97119,97121,97123,97125],{"class":38,"line":437},[36,97110,96994],{"class":42},[36,97112,127],{"class":53},[36,97114,12915],{"class":42},[36,97116,912],{"class":53},[36,97118,12915],{"class":42},[36,97120,1109],{"class":5696},[36,97122,47],{"class":46},[36,97124,54],{"class":53},[36,97126,63],{"class":42},[36,97128,97129],{"class":38,"line":443},[36,97130,97082],{"class":69},[36,97132,97133],{"class":38,"line":2092},[36,97134,97135],{"class":69},"# [[0. 1. 0. 0.]\n",[36,97137,97138],{"class":38,"line":2097},[36,97139,97140],{"class":69},"#  [0. 0. 1. 0.]\n",[36,97142,97143],{"class":38,"line":2103},[36,97144,97145],{"class":69},"#  [0. 0. 0. 1.]]\n",[596,97147,97149],{"id":97148},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,97151,97153],{"className":28,"code":97152,"language":30,"meta":31,"style":31},"#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",[33,97154,97155,97160,97164,97169,97174,97179,97184,97189,97194,97199,97204],{"__ignoreMap":31},[36,97156,97157],{"class":38,"line":39},[36,97158,97159],{"class":69},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,97161,97162],{"class":38,"line":66},[36,97163,96169],{"class":405},[36,97165,97166],{"class":38,"line":73},[36,97167,97168],{"class":405},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,97170,97171],{"class":38,"line":79},[36,97172,97173],{"class":405},"参数介绍：\n",[36,97175,97176],{"class":38,"line":85},[36,97177,97178],{"class":405},"start：序列的起始值\n",[36,97180,97181],{"class":38,"line":419},[36,97182,97183],{"class":405},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,97185,97186],{"class":38,"line":425},[36,97187,97188],{"class":405},"num：要生长的等步长的样本数量，默认为50\n",[36,97190,97191],{"class":38,"line":431},[36,97192,97193],{"class":405},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,97195,97196],{"class":38,"line":437},[36,97197,97198],{"class":405},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,97200,97201],{"class":38,"line":443},[36,97202,97203],{"class":405},"dtype：ndarry的数据类型\n",[36,97205,97206],{"class":38,"line":2092},[36,97207,96169],{"class":405},[19,97209,97210],{},[519,97211],{"alt":31,"src":97212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97214,97215],{},"这里num=是可以省略的",[19,97217,97218],{},"也就是下方两行代码结果是一模一样的",[26,97220,97222],{"className":28,"code":97221,"language":30,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,97223,97224,97241],{"__ignoreMap":31},[36,97225,97226,97229,97231,97233,97235,97237,97239],{"class":38,"line":39},[36,97227,97228],{"class":42},"np.linspace(",[36,97230,54],{"class":53},[36,97232,57],{"class":42},[36,97234,938],{"class":53},[36,97236,57],{"class":42},[36,97238,938],{"class":53},[36,97240,63],{"class":42},[36,97242,97243,97245,97247,97249,97251,97253,97255,97257,97259],{"class":38,"line":66},[36,97244,97228],{"class":42},[36,97246,54],{"class":53},[36,97248,57],{"class":42},[36,97250,938],{"class":53},[36,97252,57],{"class":42},[36,97254,2145],{"class":5696},[36,97256,47],{"class":46},[36,97258,938],{"class":53},[36,97260,63],{"class":42},[596,97262,97264],{"id":97263},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,97266,97268],{"className":28,"code":97267,"language":30,"meta":31,"style":31},"#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",[33,97269,97270,97275,97279,97284,97289,97294,97299,97303,97308,97313,97317],{"__ignoreMap":31},[36,97271,97272],{"class":38,"line":39},[36,97273,97274],{"class":69},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,97276,97277],{"class":38,"line":66},[36,97278,96169],{"class":405},[36,97280,97281],{"class":38,"line":73},[36,97282,97283],{"class":405},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,97285,97286],{"class":38,"line":79},[36,97287,97288],{"class":405},"参数为：\n",[36,97290,97291],{"class":38,"line":85},[36,97292,97293],{"class":405},"start:序列的起始位置为：base**start\n",[36,97295,97296],{"class":38,"line":419},[36,97297,97298],{"class":405},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,97300,97301],{"class":38,"line":425},[36,97302,97188],{"class":405},[36,97304,97305],{"class":38,"line":431},[36,97306,97307],{"class":405},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,97309,97310],{"class":38,"line":437},[36,97311,97312],{"class":405},"base：对数的底数，默认是 10（常见对数）\n",[36,97314,97315],{"class":38,"line":443},[36,97316,97203],{"class":405},[36,97318,97319],{"class":38,"line":2092},[36,97320,96169],{"class":405},[19,97322,97323],{},[519,97324],{"alt":31,"src":97325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97327,97328],{},"logspace()函数中的num参数也是可以不写num=的",[19,97330,97331],{},"endpoint是不可以省略的",[539,97333,97334],{},"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":31,"searchDepth":66,"depth":66,"links":97336},[97337,97341,97346,97350,97354,97355],{"id":95728,"depth":66,"text":95729,"children":97338},[97339,97340],{"id":95732,"depth":73,"text":95733},{"id":95805,"depth":73,"text":95806},{"id":95837,"depth":66,"text":95838,"children":97342},[97343,97344,97345],{"id":95841,"depth":73,"text":95842},{"id":96022,"depth":73,"text":96023},{"id":96100,"depth":73,"text":96101},{"id":96135,"depth":66,"text":96136,"children":97347},[97348,97349],{"id":96139,"depth":73,"text":96140},{"id":96196,"depth":73,"text":96197},{"id":96292,"depth":66,"text":96293,"children":97351},[97352,97353],{"id":96296,"depth":73,"text":96297},{"id":96308,"depth":73,"text":96309},{"id":96342,"depth":66,"text":96343},{"id":96379,"depth":66,"text":96380,"children":97356},[97357,97358,97359,97360,97361,97362,97363,97364],{"id":96383,"depth":73,"text":96384},{"id":96607,"depth":73,"text":96608},{"id":96614,"depth":73,"text":96615},{"id":96823,"depth":73,"text":96824},{"id":96843,"depth":73,"text":96844},{"id":96979,"depth":73,"text":96980},{"id":97148,"depth":73,"text":97149},{"id":97263,"depth":73,"text":97264},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95720,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97371,"title":97372,"body":97373,"description":550,"extension":551,"meta":97466,"navigation":553,"path":97467,"seo":97468,"stem":97469,"__hash__":97470},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97374,"toc":97464},[97375,97378,97381,97384,97387,97390,97393,97396,97399,97402,97405,97408,97410,97413,97416,97421,97424,97427,97461],[10,97376,97372],{"id":97377},"_20魔法命令mprun",[19,97379,97380],{},"逐行分析数据内存的使用情况",[19,97382,97383],{},"语法格式：",[19,97385,97386],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97388,97389],{},"分析结果列如下：",[19,97391,97392],{},"Line行号",[19,97394,97395],{},"Mem usage内存使用大小",[19,97397,97398],{},"increment内存增量",[19,97400,97401],{},"Line content代码内容",[19,97403,97404],{},"补充说明：",[19,97406,97407],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97409,95675],{},[19,97411,97412],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97414,97415],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97417,97418],{},[519,97419],{"alt":31,"src":97420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97422,97423],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97425,97426],{},"这时候需要重新加载模块",[26,97428,97430],{"className":28,"code":97429,"language":30,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[33,97431,97432,97437,97444,97449],{"__ignoreMap":31},[36,97433,97434],{"class":38,"line":39},[36,97435,97436],{"class":69},"#重新加载模块\n",[36,97438,97439,97441],{"class":38,"line":66},[36,97440,30871],{"class":46},[36,97442,97443],{"class":42}," importlib\n",[36,97445,97446],{"class":38,"line":73},[36,97447,97448],{"class":42},"importlib.reload(mprun_test)\n",[36,97450,97451,97453,97456,97458],{"class":38,"line":79},[36,97452,947],{"class":46},[36,97454,97455],{"class":42},"mprun ",[36,97457,173],{"class":46},[36,97459,97460],{"class":42},"f mprun_test.fun_test mprun_test.fun_test()\n",[539,97462,97463],{},"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":31,"searchDepth":66,"depth":66,"links":97465},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97372,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97472,"title":97473,"body":97474,"description":550,"extension":551,"meta":97491,"navigation":553,"path":97492,"seo":97493,"stem":97494,"__hash__":97495},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97475,"toc":97489},[97476,97479,97484],[10,97477,97473],{"id":97478},"_3一维数组的索引和切片",[19,97480,97481],{},[519,97482],{"alt":31,"src":97483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97485,97486],{},[519,97487],{"alt":31,"src":97488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":66,"depth":66,"links":97490},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97473,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97497,"title":97498,"body":97499,"description":550,"extension":551,"meta":97980,"navigation":553,"path":97981,"seo":97982,"stem":97983,"__hash__":97984},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97500,"toc":97978},[97501,97504,97507,97512,97545,97548,97586,97589,97623,97626,97729,97732,97769,97772,97873,97876,97927,97930,97972,97975],[10,97502,97498],{"id":97503},"_4二维数组的索引与切片",[19,97505,97506],{},"①获取指定单个元素",[19,97508,97509],{},[519,97510],{"alt":31,"src":97511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,97513,97515],{"className":28,"code":97514,"language":30,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,97516,97517,97522,97527,97532],{"__ignoreMap":31},[36,97518,97519],{"class":38,"line":39},[36,97520,97521],{"class":69},"#获取元素9\n",[36,97523,97524],{"class":38,"line":66},[36,97525,97526],{"class":69},"#先获取所在行，再获取所在列\n",[36,97528,97529],{"class":38,"line":73},[36,97530,97531],{"class":69},"#数组[行索引号，列索引号]\n",[36,97533,97534,97537,97539,97541,97543],{"class":38,"line":79},[36,97535,97536],{"class":42},"a[",[36,97538,54],{"class":53},[36,97540,57],{"class":42},[36,97542,96],{"class":53},[36,97544,33723],{"class":42},[19,97546,97547],{},"②获取整行元素",[26,97549,97551],{"className":28,"code":97550,"language":30,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,97552,97553,97558,97563,97571,97576],{"__ignoreMap":31},[36,97554,97555],{"class":38,"line":39},[36,97556,97557],{"class":69},"#获取整行 数组[行索引号]\n",[36,97559,97560],{"class":38,"line":66},[36,97561,97562],{"class":69},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,97564,97565,97567,97569],{"class":38,"line":73},[36,97566,97536],{"class":42},[36,97568,96],{"class":53},[36,97570,33723],{"class":42},[36,97572,97573],{"class":38,"line":79},[36,97574,97575],{"class":69},"#也可以负索引获取一行\n",[36,97577,97578,97580,97582,97584],{"class":38,"line":85},[36,97579,97536],{"class":42},[36,97581,173],{"class":46},[36,97583,54],{"class":53},[36,97585,33723],{"class":42},[19,97587,97588],{},"③获取整列元素",[26,97590,97592],{"className":28,"code":97591,"language":30,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,97593,97594,97599,97608,97613],{"__ignoreMap":31},[36,97595,97596],{"class":38,"line":39},[36,97597,97598],{"class":69},"#获取整列 数组名[:,列索引]\n",[36,97600,97601,97604,97606],{"class":38,"line":66},[36,97602,97603],{"class":42},"a[:,",[36,97605,96],{"class":53},[36,97607,33723],{"class":42},[36,97609,97610],{"class":38,"line":73},[36,97611,97612],{"class":69},"#也可以负索引获取一列\n",[36,97614,97615,97617,97619,97621],{"class":38,"line":79},[36,97616,97603],{"class":42},[36,97618,173],{"class":46},[36,97620,54],{"class":53},[36,97622,33723],{"class":42},[19,97624,97625],{},"④部分行部分列的元素",[26,97627,97629],{"className":28,"code":97628,"language":30,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\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",[33,97630,97631,97636,97646,97650,97654,97658,97662,97666,97678,97682,97686,97691,97696,97701,97706,97710,97715],{"__ignoreMap":31},[36,97632,97633],{"class":38,"line":39},[36,97634,97635],{"class":69},"#部分行部分列 数组名[行切片，列切片]\n",[36,97637,97638,97641,97643],{"class":38,"line":66},[36,97639,97640],{"class":42},"a[:",[36,97642,96],{"class":53},[36,97644,97645],{"class":42},",:]\n",[36,97647,97648],{"class":38,"line":73},[36,97649,244],{"class":69},[36,97651,97652],{"class":38,"line":79},[36,97653,406],{"class":405},[36,97655,97656],{"class":38,"line":85},[36,97657,502],{"class":405},[36,97659,97660],{"class":38,"line":419},[36,97661,507],{"class":405},[36,97663,97664],{"class":38,"line":425},[36,97665,406],{"class":405},[36,97667,97668,97670,97672,97674,97676],{"class":38,"line":431},[36,97669,97603],{"class":42},[36,97671,54],{"class":53},[36,97673,1472],{"class":42},[36,97675,912],{"class":53},[36,97677,33723],{"class":42},[36,97679,97680],{"class":38,"line":437},[36,97681,244],{"class":69},[36,97683,97684],{"class":38,"line":443},[36,97685,406],{"class":405},[36,97687,97688],{"class":38,"line":2092},[36,97689,97690],{"class":405},"array([[ 2,  3,  4],\n",[36,97692,97693],{"class":38,"line":2097},[36,97694,97695],{"class":405},"       [ 8,  9, 10],\n",[36,97697,97698],{"class":38,"line":2103},[36,97699,97700],{"class":405},"       [14, 15, 16],\n",[36,97702,97703],{"class":38,"line":2108},[36,97704,97705],{"class":405},"       [20, 21, 22]])\n",[36,97707,97708],{"class":38,"line":2122},[36,97709,406],{"class":405},[36,97711,97712],{"class":38,"line":2127},[36,97713,97714],{"class":69},"#对列行同时进行切片，使用了step参数\n",[36,97716,97717,97720,97722,97725,97727],{"class":38,"line":2133},[36,97718,97719],{"class":42},"a[::",[36,97721,96],{"class":53},[36,97723,97724],{"class":42},",::",[36,97726,96],{"class":53},[36,97728,33723],{"class":42},[19,97730,97731],{},"⑤同时获取两个元素",[26,97733,97735],{"className":28,"code":97734,"language":30,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,97736,97737,97742,97747],{"__ignoreMap":31},[36,97738,97739],{"class":38,"line":39},[36,97740,97741],{"class":69},"#同时获取第三行第二列，第四行第一列\n",[36,97743,97744],{"class":38,"line":66},[36,97745,97746],{"class":69},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,97748,97749,97752,97754,97756,97758,97760,97762,97764,97766],{"class":38,"line":73},[36,97750,97751],{"class":42},"a[(",[36,97753,96],{"class":53},[36,97755,57],{"class":42},[36,97757,127],{"class":53},[36,97759,42724],{"class":42},[36,97761,54],{"class":53},[36,97763,57],{"class":42},[36,97765,812],{"class":53},[36,97767,97768],{"class":42},")]\n",[19,97770,97771],{},"⑥切片，对行进行反向获取",[26,97773,97775],{"className":28,"code":97774,"language":30,"meta":31,"style":31},"#切片 对所有行进行反向获取\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",[33,97776,97777,97782,97792,97796,97800,97805,97810,97815,97820,97824,97829,97845,97849,97854,97859,97864,97869],{"__ignoreMap":31},[36,97778,97779],{"class":38,"line":39},[36,97780,97781],{"class":69},"#切片 对所有行进行反向获取\n",[36,97783,97784,97786,97788,97790],{"class":38,"line":66},[36,97785,97719],{"class":42},[36,97787,173],{"class":46},[36,97789,54],{"class":53},[36,97791,33723],{"class":42},[36,97793,97794],{"class":38,"line":73},[36,97795,244],{"class":69},[36,97797,97798],{"class":38,"line":79},[36,97799,406],{"class":405},[36,97801,97802],{"class":38,"line":85},[36,97803,97804],{"class":405},"array([[19, 20, 21, 22, 23, 24],\n",[36,97806,97807],{"class":38,"line":419},[36,97808,97809],{"class":405},"       [13, 14, 15, 16, 17, 18],\n",[36,97811,97812],{"class":38,"line":425},[36,97813,97814],{"class":405},"       [ 7,  8,  9, 10, 11, 12],\n",[36,97816,97817],{"class":38,"line":431},[36,97818,97819],{"class":405},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,97821,97822],{"class":38,"line":437},[36,97823,406],{"class":405},[36,97825,97826],{"class":38,"line":443},[36,97827,97828],{"class":69},"#对行列都进行反向切片获取\n",[36,97830,97831,97833,97835,97837,97839,97841,97843],{"class":38,"line":2092},[36,97832,97719],{"class":42},[36,97834,173],{"class":46},[36,97836,54],{"class":53},[36,97838,97724],{"class":42},[36,97840,173],{"class":46},[36,97842,54],{"class":53},[36,97844,33723],{"class":42},[36,97846,97847],{"class":38,"line":2097},[36,97848,406],{"class":405},[36,97850,97851],{"class":38,"line":2103},[36,97852,97853],{"class":405},"array([[24, 23, 22, 21, 20, 19],\n",[36,97855,97856],{"class":38,"line":2108},[36,97857,97858],{"class":405},"       [18, 17, 16, 15, 14, 13],\n",[36,97860,97861],{"class":38,"line":2122},[36,97862,97863],{"class":405},"       [12, 11, 10,  9,  8,  7],\n",[36,97865,97866],{"class":38,"line":2127},[36,97867,97868],{"class":405},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,97870,97871],{"class":38,"line":2133},[36,97872,406],{"class":405},[19,97874,97875],{},"⑦修改元素",[26,97877,97879],{"className":28,"code":97878,"language":30,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,97880,97881,97886,97904,97909],{"__ignoreMap":31},[36,97882,97883],{"class":38,"line":39},[36,97884,97885],{"class":69},"#获取前两行和前两列\n",[36,97887,97888,97891,97893,97895,97897,97900,97902],{"class":38,"line":66},[36,97889,97890],{"class":42},"sub_a",[36,97892,47],{"class":46},[36,97894,97640],{"class":42},[36,97896,96],{"class":53},[36,97898,97899],{"class":42},",:",[36,97901,96],{"class":53},[36,97903,33723],{"class":42},[36,97905,97906],{"class":38,"line":73},[36,97907,97908],{"class":69},"#修改sub_a第一个元素的值\n",[36,97910,97911,97914,97916,97918,97920,97922,97924],{"class":38,"line":79},[36,97912,97913],{"class":42},"sub_a[",[36,97915,812],{"class":53},[36,97917,57],{"class":42},[36,97919,812],{"class":53},[36,97921,1553],{"class":42},[36,97923,47],{"class":46},[36,97925,97926],{"class":53},"100\n",[19,97928,97929],{},"⑧数组复制copy()",[26,97931,97933],{"className":28,"code":97932,"language":30,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,97934,97935,97940,97950,97955],{"__ignoreMap":31},[36,97936,97937],{"class":38,"line":39},[36,97938,97939],{"class":69},"#数组复制\n",[36,97941,97942,97945,97947],{"class":38,"line":66},[36,97943,97944],{"class":42},"copy_a",[36,97946,47],{"class":46},[36,97948,97949],{"class":42},"np.copy(sub_a)\n",[36,97951,97952],{"class":38,"line":73},[36,97953,97954],{"class":69},"#修改copy_a后不影响原数组\n",[36,97956,97957,97960,97962,97964,97966,97968,97970],{"class":38,"line":79},[36,97958,97959],{"class":42},"copy_a[",[36,97961,812],{"class":53},[36,97963,57],{"class":42},[36,97965,812],{"class":53},[36,97967,1553],{"class":42},[36,97969,47],{"class":46},[36,97971,97926],{"class":53},[19,97973,97974],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[539,97976,97977],{},"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":31,"searchDepth":66,"depth":66,"links":97979},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97498,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":4,"title":5,"body":97986,"description":550,"extension":551,"meta":98416,"navigation":553,"path":554,"seo":98417,"stem":556,"__hash__":557},{"type":7,"value":97987,"toc":98408},[97988,97990,97992,97994,97996,98044,98046,98070,98072,98088,98106,98108,98122,98124,98166,98168,98208,98210,98212,98214,98216,98218,98220,98278,98330,98332,98334,98390,98392,98396,98402,98406],[10,97989,5],{"id":12},[14,97991,17],{"id":16},[19,97993,21],{},[19,97995,24],{},[26,97997,97998],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,97999,98000,98016,98020,98024,98028],{"__ignoreMap":31},[36,98001,98002,98004,98006,98008,98010,98012,98014],{"class":38,"line":39},[36,98003,43],{"class":42},[36,98005,47],{"class":46},[36,98007,50],{"class":42},[36,98009,54],{"class":53},[36,98011,57],{"class":42},[36,98013,60],{"class":53},[36,98015,63],{"class":42},[36,98017,98018],{"class":38,"line":66},[36,98019,70],{"class":69},[36,98021,98022],{"class":38,"line":73},[36,98023,76],{"class":69},[36,98025,98026],{"class":38,"line":79},[36,98027,82],{"class":69},[36,98029,98030,98032,98034,98036,98038,98040,98042],{"class":38,"line":85},[36,98031,88],{"class":42},[36,98033,47],{"class":46},[36,98035,93],{"class":42},[36,98037,96],{"class":53},[36,98039,57],{"class":42},[36,98041,101],{"class":53},[36,98043,63],{"class":42},[19,98045,106],{},[26,98047,98048],{"className":28,"code":109,"language":30,"meta":31,"style":31},[33,98049,98050],{"__ignoreMap":31},[36,98051,98052,98054,98056,98058,98060,98062,98064,98066,98068],{"class":38,"line":39},[36,98053,116],{"class":42},[36,98055,47],{"class":46},[36,98057,93],{"class":42},[36,98059,96],{"class":53},[36,98061,57],{"class":42},[36,98063,127],{"class":53},[36,98065,57],{"class":42},[36,98067,96],{"class":53},[36,98069,63],{"class":42},[19,98071,136],{},[26,98073,98074],{"className":28,"code":139,"language":30,"meta":31,"style":31},[33,98075,98076,98080],{"__ignoreMap":31},[36,98077,98078],{"class":38,"line":39},[36,98079,146],{"class":69},[36,98081,98082,98084,98086],{"class":38,"line":66},[36,98083,151],{"class":42},[36,98085,154],{"class":53},[36,98087,63],{"class":42},[26,98089,98090],{"className":28,"code":159,"language":30,"meta":31,"style":31},[33,98091,98092,98096],{"__ignoreMap":31},[36,98093,98094],{"class":38,"line":39},[36,98095,166],{"class":69},[36,98097,98098,98100,98102,98104],{"class":38,"line":66},[36,98099,151],{"class":42},[36,98101,173],{"class":46},[36,98103,54],{"class":53},[36,98105,63],{"class":42},[19,98107,180],{},[26,98109,98110],{"className":28,"code":183,"language":30,"meta":31,"style":31},[33,98111,98112],{"__ignoreMap":31},[36,98113,98114,98116,98118,98120],{"class":38,"line":39},[36,98115,190],{"class":42},[36,98117,173],{"class":46},[36,98119,54],{"class":53},[36,98121,63],{"class":42},[14,98123,200],{"id":199},[26,98125,98126],{"className":28,"code":203,"language":30,"meta":31,"style":31},[33,98127,98128,98154,98158,98162],{"__ignoreMap":31},[36,98129,98130,98132,98134,98136,98138,98140,98142,98144,98146,98148,98150,98152],{"class":38,"line":39},[36,98131,88],{"class":42},[36,98133,47],{"class":46},[36,98135,50],{"class":42},[36,98137,54],{"class":53},[36,98139,57],{"class":42},[36,98141,60],{"class":53},[36,98143,222],{"class":42},[36,98145,96],{"class":53},[36,98147,57],{"class":42},[36,98149,101],{"class":53},[36,98151,231],{"class":42},[36,98153,234],{"class":69},[36,98155,98156],{"class":38,"line":66},[36,98157,239],{"class":42},[36,98159,98160],{"class":38,"line":73},[36,98161,244],{"class":69},[36,98163,98164],{"class":38,"line":79},[36,98165,249],{"class":69},[14,98167,253],{"id":252},[26,98169,98170],{"className":28,"code":256,"language":30,"meta":31,"style":31},[33,98171,98172,98196,98200,98204],{"__ignoreMap":31},[36,98173,98174,98176,98178,98180,98182,98184,98186,98188,98190,98192,98194],{"class":38,"line":39},[36,98175,88],{"class":42},[36,98177,47],{"class":46},[36,98179,50],{"class":42},[36,98181,54],{"class":53},[36,98183,57],{"class":42},[36,98185,60],{"class":53},[36,98187,222],{"class":42},[36,98189,96],{"class":53},[36,98191,57],{"class":42},[36,98193,101],{"class":53},[36,98195,63],{"class":42},[36,98197,98198],{"class":38,"line":66},[36,98199,287],{"class":42},[36,98201,98202],{"class":38,"line":73},[36,98203,244],{"class":69},[36,98205,98206],{"class":38,"line":79},[36,98207,249],{"class":69},[14,98209,299],{"id":298},[19,98211,302],{},[19,98213,305],{},[19,98215,308],{},[19,98217,311],{},[19,98219,314],{},[26,98221,98222],{"className":28,"code":317,"language":30,"meta":31,"style":31},[33,98223,98224,98240,98258,98270,98274],{"__ignoreMap":31},[36,98225,98226,98228,98230,98232,98234,98236,98238],{"class":38,"line":39},[36,98227,43],{"class":42},[36,98229,47],{"class":46},[36,98231,50],{"class":42},[36,98233,54],{"class":53},[36,98235,57],{"class":42},[36,98237,60],{"class":53},[36,98239,63],{"class":42},[36,98241,98242,98244,98246,98248,98250,98252,98254,98256],{"class":38,"line":66},[36,98243,340],{"class":42},[36,98245,47],{"class":46},[36,98247,345],{"class":42},[36,98249,96],{"class":53},[36,98251,57],{"class":42},[36,98253,101],{"class":53},[36,98255,231],{"class":42},[36,98257,356],{"class":69},[36,98259,98260,98262,98264,98266,98268],{"class":38,"line":73},[36,98261,43],{"class":42},[36,98263,47],{"class":46},[36,98265,365],{"class":42},[36,98267,154],{"class":53},[36,98269,370],{"class":42},[36,98271,98272],{"class":38,"line":79},[36,98273,244],{"class":69},[36,98275,98276],{"class":38,"line":85},[36,98277,249],{"class":69},[26,98279,98280],{"className":28,"code":381,"language":30,"meta":31,"style":31},[33,98281,98282,98294,98298,98302,98306,98310,98314,98318,98322,98326],{"__ignoreMap":31},[36,98283,98284,98286,98288,98290,98292],{"class":38,"line":39},[36,98285,388],{"class":42},[36,98287,101],{"class":53},[36,98289,57],{"class":42},[36,98291,96],{"class":53},[36,98293,370],{"class":42},[36,98295,98296],{"class":38,"line":66},[36,98297,244],{"class":69},[36,98299,98300],{"class":38,"line":73},[36,98301,406],{"class":405},[36,98303,98304],{"class":38,"line":79},[36,98305,411],{"class":405},[36,98307,98308],{"class":38,"line":85},[36,98309,416],{"class":405},[36,98311,98312],{"class":38,"line":419},[36,98313,422],{"class":405},[36,98315,98316],{"class":38,"line":425},[36,98317,428],{"class":405},[36,98319,98320],{"class":38,"line":431},[36,98321,434],{"class":405},[36,98323,98324],{"class":38,"line":437},[36,98325,440],{"class":405},[36,98327,98328],{"class":38,"line":443},[36,98329,406],{"class":405},[14,98331,449],{"id":448},[19,98333,452],{},[26,98335,98336],{"className":28,"code":455,"language":30,"meta":31,"style":31},[33,98337,98338,98354,98370,98374,98378,98382,98386],{"__ignoreMap":31},[36,98339,98340,98342,98344,98346,98348,98350,98352],{"class":38,"line":39},[36,98341,43],{"class":42},[36,98343,47],{"class":46},[36,98345,50],{"class":42},[36,98347,54],{"class":53},[36,98349,57],{"class":42},[36,98351,60],{"class":53},[36,98353,63],{"class":42},[36,98355,98356,98358,98360,98362,98364,98366,98368],{"class":38,"line":66},[36,98357,340],{"class":42},[36,98359,47],{"class":46},[36,98361,345],{"class":42},[36,98363,96],{"class":53},[36,98365,57],{"class":42},[36,98367,101],{"class":53},[36,98369,63],{"class":42},[36,98371,98372],{"class":38,"line":73},[36,98373,244],{"class":69},[36,98375,98376],{"class":38,"line":79},[36,98377,406],{"class":405},[36,98379,98380],{"class":38,"line":85},[36,98381,502],{"class":405},[36,98383,98384],{"class":38,"line":419},[36,98385,507],{"class":405},[36,98387,98388],{"class":38,"line":425},[36,98389,406],{"class":405},[14,98391,515],{"id":514},[19,98393,98394],{},[519,98395],{"alt":31,"src":521},[19,98397,524,98398,528,98400,532],{},[33,98399,527],{},[33,98401,531],{},[19,98403,98404],{},[519,98405],{"alt":31,"src":537},[539,98407,541],{},{"title":31,"searchDepth":66,"depth":66,"links":98409},[98410,98411,98412,98413,98414,98415],{"id":16,"depth":66,"text":17},{"id":199,"depth":66,"text":200},{"id":252,"depth":66,"text":253},{"id":298,"depth":66,"text":299},{"id":448,"depth":66,"text":449},{"id":514,"depth":66,"text":515},{},{"title":5,"description":550},{"id":98419,"title":98420,"body":98421,"description":550,"extension":551,"meta":99493,"navigation":553,"path":99494,"seo":99495,"stem":99496,"__hash__":99497},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98422,"toc":99487},[98423,98426,98430,98433,98436,98439,98504,98507,98547,98550,98632,98635,98640,98662,98664,98669,98674,98677,98680,98835,98838,99040,99044,99047,99050,99118,99120,99125,99128,99131,99211,99215,99218,99220,99293,99295,99300,99302,99382,99386,99389,99392,99395,99398,99401,99404,99484],[10,98424,98420],{"id":98425},"_6数组的拼接",[14,98427,98429],{"id":98428},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98431,98432],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98434,98435],{},"函数内部传两个数列构成的数列或者元组",[19,98437,98438],{},"①一维数组的拼接",[26,98440,98442],{"className":28,"code":98441,"language":30,"meta":31,"style":31},"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",[33,98443,98444,98464,98484,98489,98494,98499],{"__ignoreMap":31},[36,98445,98446,98448,98450,98452,98454,98456,98458,98460,98462],{"class":38,"line":39},[36,98447,43],{"class":42},[36,98449,47],{"class":46},[36,98451,93499],{"class":42},[36,98453,54],{"class":53},[36,98455,57],{"class":42},[36,98457,96],{"class":53},[36,98459,57],{"class":42},[36,98461,127],{"class":53},[36,98463,5137],{"class":42},[36,98465,98466,98468,98470,98472,98474,98476,98478,98480,98482],{"class":38,"line":66},[36,98467,882],{"class":42},[36,98469,47],{"class":46},[36,98471,93499],{"class":42},[36,98473,912],{"class":53},[36,98475,57],{"class":42},[36,98477,938],{"class":53},[36,98479,57],{"class":42},[36,98481,101],{"class":53},[36,98483,5137],{"class":42},[36,98485,98486],{"class":38,"line":73},[36,98487,98488],{"class":69},"#调用concatenate进行数组拼接\n",[36,98490,98491],{"class":38,"line":79},[36,98492,98493],{"class":42},"np.concatenate((a,b))\n",[36,98495,98496],{"class":38,"line":85},[36,98497,98498],{"class":69},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,98500,98501],{"class":38,"line":419},[36,98502,98503],{"class":69},"#np.concatenate([a,b])\n",[19,98505,98506],{},"②一维多个数组拼接",[26,98508,98510],{"className":28,"code":98509,"language":30,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,98511,98512,98517,98537,98542],{"__ignoreMap":31},[36,98513,98514],{"class":38,"line":39},[36,98515,98516],{"class":69},"#也可以多个数组进行拼接\n",[36,98518,98519,98521,98523,98525,98527,98529,98531,98533,98535],{"class":38,"line":66},[36,98520,907],{"class":42},[36,98522,47],{"class":46},[36,98524,93499],{"class":42},[36,98526,1062],{"class":53},[36,98528,57],{"class":42},[36,98530,1088],{"class":53},[36,98532,57],{"class":42},[36,98534,60],{"class":53},[36,98536,5137],{"class":42},[36,98538,98539],{"class":38,"line":73},[36,98540,98541],{"class":42},"c\n",[36,98543,98544],{"class":38,"line":79},[36,98545,98546],{"class":42},"np.concatenate((a,b,c))\n",[19,98548,98549],{},"③二维数组拼接",[26,98551,98553],{"className":28,"code":98552,"language":30,"meta":31,"style":31},"#二维数组使用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",[33,98554,98555,98560,98584,98609,98614,98619],{"__ignoreMap":31},[36,98556,98557],{"class":38,"line":39},[36,98558,98559],{"class":69},"#二维数组使用concatenate进行拼接\n",[36,98561,98562,98564,98566,98568,98570,98572,98574,98576,98578,98580,98582],{"class":38,"line":66},[36,98563,88],{"class":42},[36,98565,47],{"class":46},[36,98567,50],{"class":42},[36,98569,54],{"class":53},[36,98571,57],{"class":42},[36,98573,60],{"class":53},[36,98575,222],{"class":42},[36,98577,127],{"class":53},[36,98579,57],{"class":42},[36,98581,912],{"class":53},[36,98583,63],{"class":42},[36,98585,98586,98589,98591,98593,98595,98597,98599,98601,98603,98605,98607],{"class":38,"line":73},[36,98587,98588],{"class":42},"bb",[36,98590,47],{"class":46},[36,98592,50],{"class":42},[36,98594,956],{"class":53},[36,98596,57],{"class":42},[36,98598,1255],{"class":53},[36,98600,222],{"class":42},[36,98602,127],{"class":53},[36,98604,57],{"class":42},[36,98606,912],{"class":53},[36,98608,63],{"class":42},[36,98610,98611],{"class":38,"line":79},[36,98612,98613],{"class":69},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,98615,98616],{"class":38,"line":85},[36,98617,98618],{"class":69},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,98620,98621,98624,98626,98628,98630],{"class":38,"line":419},[36,98622,98623],{"class":42},"np.concatenate((aa,bb),",[36,98625,47991],{"class":5696},[36,98627,47],{"class":46},[36,98629,812],{"class":53},[36,98631,63],{"class":42},[19,98633,98634],{},"结果：",[19,98636,98637],{},[519,98638],{"alt":31,"src":98639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,98641,98643],{"className":28,"code":98642,"language":30,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,98644,98645,98650],{"__ignoreMap":31},[36,98646,98647],{"class":38,"line":39},[36,98648,98649],{"class":69},"#指定axis为1进行拼接\n",[36,98651,98652,98654,98656,98658,98660],{"class":38,"line":66},[36,98653,98623],{"class":42},[36,98655,47991],{"class":5696},[36,98657,47],{"class":46},[36,98659,54],{"class":53},[36,98661,63],{"class":42},[19,98663,98634],{},[19,98665,98666],{},[519,98667],{"alt":31,"src":98668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98670,98671],{},[770,98672,98673],{},"二维数组总结：0竖着方向，1横着方向",[19,98675,98676],{},"④三维数组拼接",[19,98678,98679],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,98681,98683],{"className":28,"code":98682,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,98684,98685,98690,98718,98748,98753,98770,98775,98780,98785,98802,98807,98812,98817,98830],{"__ignoreMap":31},[36,98686,98687],{"class":38,"line":39},[36,98688,98689],{"class":69},"#两个三行六列\n",[36,98691,98692,98694,98696,98698,98700,98702,98704,98706,98708,98710,98712,98714,98716],{"class":38,"line":66},[36,98693,116],{"class":42},[36,98695,47],{"class":46},[36,98697,50],{"class":42},[36,98699,54],{"class":53},[36,98701,57],{"class":42},[36,98703,944],{"class":53},[36,98705,222],{"class":42},[36,98707,96],{"class":53},[36,98709,57],{"class":42},[36,98711,127],{"class":53},[36,98713,57],{"class":42},[36,98715,101],{"class":53},[36,98717,63],{"class":42},[36,98719,98720,98723,98725,98727,98729,98731,98734,98736,98738,98740,98742,98744,98746],{"class":38,"line":73},[36,98721,98722],{"class":42},"bbb",[36,98724,47],{"class":46},[36,98726,50],{"class":42},[36,98728,956],{"class":53},[36,98730,57],{"class":42},[36,98732,98733],{"class":53},"137",[36,98735,222],{"class":42},[36,98737,96],{"class":53},[36,98739,57],{"class":42},[36,98741,127],{"class":53},[36,98743,57],{"class":42},[36,98745,101],{"class":53},[36,98747,63],{"class":42},[36,98749,98750],{"class":38,"line":79},[36,98751,98752],{"class":69},"#axis=0\n",[36,98754,98755,98757,98759,98762,98764,98766,98768],{"class":38,"line":85},[36,98756,1308],{"class":42},[36,98758,47],{"class":46},[36,98760,98761],{"class":42},"np.concatenate((aaa,bbb),",[36,98763,47991],{"class":5696},[36,98765,47],{"class":46},[36,98767,812],{"class":53},[36,98769,63],{"class":42},[36,98771,98772],{"class":38,"line":419},[36,98773,98774],{"class":42},"s.shape\n",[36,98776,98777],{"class":38,"line":425},[36,98778,98779],{"class":69},"#输出：(4,3,6)\n",[36,98781,98782],{"class":38,"line":431},[36,98783,98784],{"class":69},"#axis=1\n",[36,98786,98787,98790,98792,98794,98796,98798,98800],{"class":38,"line":437},[36,98788,98789],{"class":42},"ss",[36,98791,47],{"class":46},[36,98793,98761],{"class":42},[36,98795,47991],{"class":5696},[36,98797,47],{"class":46},[36,98799,54],{"class":53},[36,98801,63],{"class":42},[36,98803,98804],{"class":38,"line":443},[36,98805,98806],{"class":42},"ss.shape\n",[36,98808,98809],{"class":38,"line":2092},[36,98810,98811],{"class":69},"#输出：(2,6,6)\n",[36,98813,98814],{"class":38,"line":2097},[36,98815,98816],{"class":69},"#axis=2\n",[36,98818,98819,98821,98823,98825,98827],{"class":38,"line":2103},[36,98820,98761],{"class":42},[36,98822,47991],{"class":5696},[36,98824,47],{"class":46},[36,98826,96],{"class":53},[36,98828,98829],{"class":42},").shape\n",[36,98831,98832],{"class":38,"line":2108},[36,98833,98834],{"class":69},"#输出：（2，3，12）\n",[19,98836,98837],{},"⑤四维数组拼接",[26,98839,98841],{"className":28,"code":98840,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,98842,98843,98847,98875,98903,98928,98954,98958,98971,98976,98980,98992,98997,99001,99013,99018,99023,99035],{"__ignoreMap":31},[36,98844,98845],{"class":38,"line":39},[36,98846,98689],{"class":69},[36,98848,98849,98851,98853,98855,98857,98859,98861,98863,98865,98867,98869,98871,98873],{"class":38,"line":66},[36,98850,116],{"class":42},[36,98852,47],{"class":46},[36,98854,50],{"class":42},[36,98856,54],{"class":53},[36,98858,57],{"class":42},[36,98860,944],{"class":53},[36,98862,222],{"class":42},[36,98864,96],{"class":53},[36,98866,57],{"class":42},[36,98868,127],{"class":53},[36,98870,57],{"class":42},[36,98872,101],{"class":53},[36,98874,63],{"class":42},[36,98876,98877,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901],{"class":38,"line":73},[36,98878,98722],{"class":42},[36,98880,47],{"class":46},[36,98882,50],{"class":42},[36,98884,956],{"class":53},[36,98886,57],{"class":42},[36,98888,98733],{"class":53},[36,98890,222],{"class":42},[36,98892,96],{"class":53},[36,98894,57],{"class":42},[36,98896,127],{"class":53},[36,98898,57],{"class":42},[36,98900,101],{"class":53},[36,98902,63],{"class":42},[36,98904,98905,98908,98910,98912,98914,98916,98918,98920,98922,98924,98926],{"class":38,"line":79},[36,98906,98907],{"class":42},"aaaa",[36,98909,47],{"class":46},[36,98911,190],{"class":42},[36,98913,96],{"class":53},[36,98915,57],{"class":42},[36,98917,127],{"class":53},[36,98919,57],{"class":42},[36,98921,127],{"class":53},[36,98923,57],{"class":42},[36,98925,96],{"class":53},[36,98927,63],{"class":42},[36,98929,98930,98933,98935,98938,98940,98942,98944,98946,98948,98950,98952],{"class":38,"line":85},[36,98931,98932],{"class":42},"bbbb",[36,98934,47],{"class":46},[36,98936,98937],{"class":42},"bbb.reshape(",[36,98939,96],{"class":53},[36,98941,57],{"class":42},[36,98943,127],{"class":53},[36,98945,57],{"class":42},[36,98947,127],{"class":53},[36,98949,57],{"class":42},[36,98951,96],{"class":53},[36,98953,63],{"class":42},[36,98955,98956],{"class":38,"line":419},[36,98957,98752],{"class":69},[36,98959,98960,98963,98965,98967,98969],{"class":38,"line":425},[36,98961,98962],{"class":42},"np.concatenate((aaaa,bbbb),",[36,98964,47991],{"class":5696},[36,98966,47],{"class":46},[36,98968,812],{"class":53},[36,98970,98829],{"class":42},[36,98972,98973],{"class":38,"line":431},[36,98974,98975],{"class":69},"#结果：（4，3，3，2）\n",[36,98977,98978],{"class":38,"line":437},[36,98979,98784],{"class":69},[36,98981,98982,98984,98986,98988,98990],{"class":38,"line":443},[36,98983,98962],{"class":42},[36,98985,47991],{"class":5696},[36,98987,47],{"class":46},[36,98989,54],{"class":53},[36,98991,98829],{"class":42},[36,98993,98994],{"class":38,"line":2092},[36,98995,98996],{"class":69},"#结果：（2，6，3，2）\n",[36,98998,98999],{"class":38,"line":2097},[36,99000,98816],{"class":69},[36,99002,99003,99005,99007,99009,99011],{"class":38,"line":2103},[36,99004,98962],{"class":42},[36,99006,47991],{"class":5696},[36,99008,47],{"class":46},[36,99010,96],{"class":53},[36,99012,98829],{"class":42},[36,99014,99015],{"class":38,"line":2108},[36,99016,99017],{"class":69},"#结果：（2，3，6，2）\n",[36,99019,99020],{"class":38,"line":2122},[36,99021,99022],{"class":69},"#axis=3\n",[36,99024,99025,99027,99029,99031,99033],{"class":38,"line":2127},[36,99026,98962],{"class":42},[36,99028,47991],{"class":5696},[36,99030,47],{"class":46},[36,99032,127],{"class":53},[36,99034,98829],{"class":42},[36,99036,99037],{"class":38,"line":2133},[36,99038,99039],{"class":69},"#结果：（2，3，3，4）\n",[14,99041,99043],{"id":99042},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99045,99046],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99048,99049],{},"①二维数组",[26,99051,99053],{"className":28,"code":99052,"language":30,"meta":31,"style":31},"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",[33,99054,99055,99079,99103,99108,99113],{"__ignoreMap":31},[36,99056,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075,99077],{"class":38,"line":39},[36,99058,88],{"class":42},[36,99060,47],{"class":46},[36,99062,50],{"class":42},[36,99064,54],{"class":53},[36,99066,57],{"class":42},[36,99068,60],{"class":53},[36,99070,222],{"class":42},[36,99072,127],{"class":53},[36,99074,57],{"class":42},[36,99076,912],{"class":53},[36,99078,63],{"class":42},[36,99080,99081,99083,99085,99087,99089,99091,99093,99095,99097,99099,99101],{"class":38,"line":66},[36,99082,98588],{"class":42},[36,99084,47],{"class":46},[36,99086,50],{"class":42},[36,99088,956],{"class":53},[36,99090,57],{"class":42},[36,99092,1255],{"class":53},[36,99094,222],{"class":42},[36,99096,127],{"class":53},[36,99098,57],{"class":42},[36,99100,912],{"class":53},[36,99102,63],{"class":42},[36,99104,99105],{"class":38,"line":73},[36,99106,99107],{"class":42},"np.hstack((aa,bb))\n",[36,99109,99110],{"class":38,"line":79},[36,99111,99112],{"class":69},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,99114,99115],{"class":38,"line":85},[36,99116,99117],{"class":69},"#np.hstack([aa,bb])\n",[19,99119,98634],{},[19,99121,99122],{},[519,99123],{"alt":31,"src":99124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99126,99127],{},"等效于concatenate()函数中axis=1时的情况",[19,99129,99130],{},"②三维数组",[26,99132,99134],{"className":28,"code":99133,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,99135,99136,99140,99168,99196,99201,99206],{"__ignoreMap":31},[36,99137,99138],{"class":38,"line":39},[36,99139,98689],{"class":69},[36,99141,99142,99144,99146,99148,99150,99152,99154,99156,99158,99160,99162,99164,99166],{"class":38,"line":66},[36,99143,116],{"class":42},[36,99145,47],{"class":46},[36,99147,50],{"class":42},[36,99149,54],{"class":53},[36,99151,57],{"class":42},[36,99153,944],{"class":53},[36,99155,222],{"class":42},[36,99157,96],{"class":53},[36,99159,57],{"class":42},[36,99161,127],{"class":53},[36,99163,57],{"class":42},[36,99165,101],{"class":53},[36,99167,63],{"class":42},[36,99169,99170,99172,99174,99176,99178,99180,99182,99184,99186,99188,99190,99192,99194],{"class":38,"line":73},[36,99171,98722],{"class":42},[36,99173,47],{"class":46},[36,99175,50],{"class":42},[36,99177,956],{"class":53},[36,99179,57],{"class":42},[36,99181,98733],{"class":53},[36,99183,222],{"class":42},[36,99185,96],{"class":53},[36,99187,57],{"class":42},[36,99189,127],{"class":53},[36,99191,57],{"class":42},[36,99193,101],{"class":53},[36,99195,63],{"class":42},[36,99197,99198],{"class":38,"line":79},[36,99199,99200],{"class":69},"#使用hstack\n",[36,99202,99203],{"class":38,"line":85},[36,99204,99205],{"class":42},"np.hstack((aaa,bbb)).shape\n",[36,99207,99208],{"class":38,"line":419},[36,99209,99210],{"class":69},"#输出：（2，6，6）\n",[14,99212,99214],{"id":99213},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99216,99217],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99219,99049],{},[26,99221,99223],{"className":28,"code":99222,"language":30,"meta":31,"style":31},"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",[33,99224,99225,99249,99273,99278,99283,99288],{"__ignoreMap":31},[36,99226,99227,99229,99231,99233,99235,99237,99239,99241,99243,99245,99247],{"class":38,"line":39},[36,99228,88],{"class":42},[36,99230,47],{"class":46},[36,99232,50],{"class":42},[36,99234,54],{"class":53},[36,99236,57],{"class":42},[36,99238,60],{"class":53},[36,99240,222],{"class":42},[36,99242,127],{"class":53},[36,99244,57],{"class":42},[36,99246,912],{"class":53},[36,99248,63],{"class":42},[36,99250,99251,99253,99255,99257,99259,99261,99263,99265,99267,99269,99271],{"class":38,"line":66},[36,99252,98588],{"class":42},[36,99254,47],{"class":46},[36,99256,50],{"class":42},[36,99258,956],{"class":53},[36,99260,57],{"class":42},[36,99262,1255],{"class":53},[36,99264,222],{"class":42},[36,99266,127],{"class":53},[36,99268,57],{"class":42},[36,99270,912],{"class":53},[36,99272,63],{"class":42},[36,99274,99275],{"class":38,"line":73},[36,99276,99277],{"class":69},"#vstack 垂直方向进行堆叠\n",[36,99279,99280],{"class":38,"line":79},[36,99281,99282],{"class":42},"np.vstack((aa,bb))\n",[36,99284,99285],{"class":38,"line":85},[36,99286,99287],{"class":69},"#与hstack传的参数类似，等价于：\n",[36,99289,99290],{"class":38,"line":419},[36,99291,99292],{"class":42},"np.vstack([aa,bb])\n",[19,99294,98634],{},[19,99296,99297],{},[519,99298],{"alt":31,"src":99299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99301,99130],{},[26,99303,99305],{"className":28,"code":99304,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,99306,99307,99311,99339,99367,99372,99377],{"__ignoreMap":31},[36,99308,99309],{"class":38,"line":39},[36,99310,98689],{"class":69},[36,99312,99313,99315,99317,99319,99321,99323,99325,99327,99329,99331,99333,99335,99337],{"class":38,"line":66},[36,99314,116],{"class":42},[36,99316,47],{"class":46},[36,99318,50],{"class":42},[36,99320,54],{"class":53},[36,99322,57],{"class":42},[36,99324,944],{"class":53},[36,99326,222],{"class":42},[36,99328,96],{"class":53},[36,99330,57],{"class":42},[36,99332,127],{"class":53},[36,99334,57],{"class":42},[36,99336,101],{"class":53},[36,99338,63],{"class":42},[36,99340,99341,99343,99345,99347,99349,99351,99353,99355,99357,99359,99361,99363,99365],{"class":38,"line":73},[36,99342,98722],{"class":42},[36,99344,47],{"class":46},[36,99346,50],{"class":42},[36,99348,956],{"class":53},[36,99350,57],{"class":42},[36,99352,98733],{"class":53},[36,99354,222],{"class":42},[36,99356,96],{"class":53},[36,99358,57],{"class":42},[36,99360,127],{"class":53},[36,99362,57],{"class":42},[36,99364,101],{"class":53},[36,99366,63],{"class":42},[36,99368,99369],{"class":38,"line":79},[36,99370,99371],{"class":69},"#使用vstack\n",[36,99373,99374],{"class":38,"line":85},[36,99375,99376],{"class":42},"np.vstack((aaa,bbb)).shape\n",[36,99378,99379],{"class":38,"line":419},[36,99380,99381],{"class":69},"#输出：（4，3，6）\n",[14,99383,99385],{"id":99384},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99387,99388],{},"该方法是三维数组特有的方法",[19,99390,99391],{},"也就是说",[19,99393,99394],{},"一维数组拼接方法用：concatenate()",[19,99396,99397],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99399,99400],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99402,99403],{},"四维数组及多维数组只能用concatenate进行拼接",[26,99405,99407],{"className":28,"code":99406,"language":30,"meta":31,"style":31},"#两个三行六列\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",[33,99408,99409,99413,99441,99469,99474,99479],{"__ignoreMap":31},[36,99410,99411],{"class":38,"line":39},[36,99412,98689],{"class":69},[36,99414,99415,99417,99419,99421,99423,99425,99427,99429,99431,99433,99435,99437,99439],{"class":38,"line":66},[36,99416,116],{"class":42},[36,99418,47],{"class":46},[36,99420,50],{"class":42},[36,99422,54],{"class":53},[36,99424,57],{"class":42},[36,99426,944],{"class":53},[36,99428,222],{"class":42},[36,99430,96],{"class":53},[36,99432,57],{"class":42},[36,99434,127],{"class":53},[36,99436,57],{"class":42},[36,99438,101],{"class":53},[36,99440,63],{"class":42},[36,99442,99443,99445,99447,99449,99451,99453,99455,99457,99459,99461,99463,99465,99467],{"class":38,"line":73},[36,99444,98722],{"class":42},[36,99446,47],{"class":46},[36,99448,50],{"class":42},[36,99450,956],{"class":53},[36,99452,57],{"class":42},[36,99454,98733],{"class":53},[36,99456,222],{"class":42},[36,99458,96],{"class":53},[36,99460,57],{"class":42},[36,99462,127],{"class":53},[36,99464,57],{"class":42},[36,99466,101],{"class":53},[36,99468,63],{"class":42},[36,99470,99471],{"class":38,"line":79},[36,99472,99473],{"class":69},"#使用dstack\n",[36,99475,99476],{"class":38,"line":85},[36,99477,99478],{"class":42},"np.dstack((aaa,bbb)).shape\n",[36,99480,99481],{"class":38,"line":419},[36,99482,99483],{"class":69},"#结果：（2，3，12）\n",[539,99485,99486],{},"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":31,"searchDepth":66,"depth":66,"links":99488},[99489,99490,99491,99492],{"id":98428,"depth":66,"text":98429},{"id":99042,"depth":66,"text":99043},{"id":99213,"depth":66,"text":99214},{"id":99384,"depth":66,"text":99385},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98420,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99499,"title":99500,"body":99501,"description":550,"extension":551,"meta":99776,"navigation":553,"path":99777,"seo":99778,"stem":99779,"__hash__":99780},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99502,"toc":99774},[99503,99506,99509,99603,99606,99609,99612,99615,99618,99621,99624,99627,99771],[10,99504,99500],{"id":99505},"_7数组转置",[19,99507,99508],{},"使用transpose()函数",[26,99510,99512],{"className":28,"code":99511,"language":30,"meta":31,"style":31},"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",[33,99513,99514,99524,99548,99553,99558,99563,99568,99576,99580,99584,99589,99594,99599],{"__ignoreMap":31},[36,99515,99516,99518,99520,99522],{"class":38,"line":39},[36,99517,30871],{"class":46},[36,99519,31858],{"class":42},[36,99521,31861],{"class":46},[36,99523,31864],{"class":42},[36,99525,99526,99528,99530,99532,99534,99536,99538,99540,99542,99544,99546],{"class":38,"line":66},[36,99527,43],{"class":42},[36,99529,47],{"class":46},[36,99531,32194],{"class":42},[36,99533,54],{"class":53},[36,99535,57],{"class":42},[36,99537,60],{"class":53},[36,99539,222],{"class":42},[36,99541,912],{"class":53},[36,99543,57],{"class":42},[36,99545,127],{"class":53},[36,99547,63],{"class":42},[36,99549,99550],{"class":38,"line":73},[36,99551,99552],{"class":69},"#二维数组转置\n",[36,99554,99555],{"class":38,"line":79},[36,99556,99557],{"class":69},"#调用transpose()函数\n",[36,99559,99560],{"class":38,"line":85},[36,99561,99562],{"class":42},"a.transpose()\n",[36,99564,99565],{"class":38,"line":419},[36,99566,99567],{"class":69},"#对于二维数组也可以采用.T来实现\n",[36,99569,99570,99573],{"class":38,"line":425},[36,99571,99572],{"class":42},"a.T",[36,99574,99575],{"class":69},"#与上述代码一样\n",[36,99577,99578],{"class":38,"line":431},[36,99579,244],{"class":69},[36,99581,99582],{"class":38,"line":437},[36,99583,406],{"class":405},[36,99585,99586],{"class":38,"line":443},[36,99587,99588],{"class":405},"array([[ 1,  4,  7, 10],\n",[36,99590,99591],{"class":38,"line":2092},[36,99592,99593],{"class":405},"       [ 2,  5,  8, 11],\n",[36,99595,99596],{"class":38,"line":2097},[36,99597,99598],{"class":405},"       [ 3,  6,  9, 12]])\n",[36,99600,99601],{"class":38,"line":2103},[36,99602,406],{"class":405},[19,99604,99605],{},"也可以使用np.transpose()的形式",[19,99607,99608],{},"#多维数组进行转置 np.transpose()",[19,99610,99611],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99613,99614],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99616,99617],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99619,99620],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99622,99623],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99625,99626],{},"四维及以上的数组也是一样的道理",[26,99628,99630],{"className":28,"code":99629,"language":30,"meta":31,"style":31},"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",[33,99631,99632,99660,99665,99670,99675,99693,99698,99730,99735,99740,99745,99766],{"__ignoreMap":31},[36,99633,99634,99636,99638,99640,99642,99644,99646,99648,99650,99652,99654,99656,99658],{"class":38,"line":39},[36,99635,1433],{"class":42},[36,99637,47],{"class":46},[36,99639,50],{"class":42},[36,99641,54],{"class":53},[36,99643,57],{"class":42},[36,99645,944],{"class":53},[36,99647,222],{"class":42},[36,99649,127],{"class":53},[36,99651,57],{"class":42},[36,99653,101],{"class":53},[36,99655,57],{"class":42},[36,99657,96],{"class":53},[36,99659,63],{"class":42},[36,99661,99662],{"class":38,"line":66},[36,99663,99664],{"class":42},"x.shape\n",[36,99666,99667],{"class":38,"line":73},[36,99668,99669],{"class":69},"#结果：（3,6,2）\n",[36,99671,99672],{"class":38,"line":79},[36,99673,99674],{"class":69},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,99676,99677,99680,99682,99684,99686,99688,99690],{"class":38,"line":85},[36,99678,99679],{"class":42},"np.transpose(x,(",[36,99681,96],{"class":53},[36,99683,57],{"class":42},[36,99685,54],{"class":53},[36,99687,57],{"class":42},[36,99689,812],{"class":53},[36,99691,99692],{"class":42},")).shape\n",[36,99694,99695],{"class":38,"line":419},[36,99696,99697],{"class":69},"#结果：(2,6,3)\n",[36,99699,99700,99702,99704,99706,99708,99710,99712,99714,99716,99718,99720,99722,99724,99726,99728],{"class":38,"line":425},[36,99701,98907],{"class":42},[36,99703,47],{"class":46},[36,99705,50],{"class":42},[36,99707,54],{"class":53},[36,99709,57],{"class":42},[36,99711,944],{"class":53},[36,99713,222],{"class":42},[36,99715,127],{"class":53},[36,99717,57],{"class":42},[36,99719,96],{"class":53},[36,99721,57],{"class":42},[36,99723,54],{"class":53},[36,99725,57],{"class":42},[36,99727,101],{"class":53},[36,99729,63],{"class":42},[36,99731,99732],{"class":38,"line":431},[36,99733,99734],{"class":42},"aaaa.shape\n",[36,99736,99737],{"class":38,"line":437},[36,99738,99739],{"class":69},"#结果：（3，2，1，6）\n",[36,99741,99742],{"class":38,"line":443},[36,99743,99744],{"class":69},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,99746,99747,99750,99752,99754,99756,99758,99760,99762,99764],{"class":38,"line":2092},[36,99748,99749],{"class":42},"np.transpose(aaaa,(",[36,99751,54],{"class":53},[36,99753,57],{"class":42},[36,99755,96],{"class":53},[36,99757,57],{"class":42},[36,99759,812],{"class":53},[36,99761,57],{"class":42},[36,99763,127],{"class":53},[36,99765,99692],{"class":42},[36,99767,99768],{"class":38,"line":2097},[36,99769,99770],{"class":69},"#结果：(2,1,3,6)\n",[539,99772,99773],{},"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":31,"searchDepth":66,"depth":66,"links":99775},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99500,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99782,"title":99783,"body":99784,"description":550,"extension":551,"meta":100518,"navigation":553,"path":100519,"seo":100520,"stem":100521,"__hash__":100522},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99785,"toc":100516},[99786,99789,99792,99795,99798,99801,99804,99807,99810,99919,99922,99925,100513],[10,99787,99783],{"id":99788},"_8数组分割",[19,99790,99791],{},"split分割",[19,99793,99794],{},"numpy.split(ary,indics_or_sections,axis)",[19,99796,99797],{},"解释：",[19,99799,99800],{},"ary:被分割的数组",[19,99802,99803],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99805,99806],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99808,99809],{},"①一维数组的分割",[26,99811,99813],{"className":28,"code":99812,"language":30,"meta":31,"style":31},"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",[33,99814,99815,99831,99836,99845,99849,99854,99862,99866,99871,99876,99889,99893,99898,99910,99914],{"__ignoreMap":31},[36,99816,99817,99819,99821,99823,99825,99827,99829],{"class":38,"line":39},[36,99818,43],{"class":42},[36,99820,47],{"class":46},[36,99822,50],{"class":42},[36,99824,54],{"class":53},[36,99826,57],{"class":42},[36,99828,1037],{"class":53},[36,99830,63],{"class":42},[36,99832,99833],{"class":38,"line":66},[36,99834,99835],{"class":69},"#如果传入整数，必须能够平分，否则会报错\n",[36,99837,99838,99841,99843],{"class":38,"line":73},[36,99839,99840],{"class":42},"np.split(a,",[36,99842,96],{"class":53},[36,99844,63],{"class":42},[36,99846,99847],{"class":38,"line":79},[36,99848,244],{"class":69},[36,99850,99851],{"class":38,"line":85},[36,99852,99853],{"class":69},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,99855,99856,99858,99860],{"class":38,"line":419},[36,99857,99840],{"class":42},[36,99859,912],{"class":53},[36,99861,63],{"class":42},[36,99863,99864],{"class":38,"line":425},[36,99865,244],{"class":69},[36,99867,99868],{"class":38,"line":431},[36,99869,99870],{"class":69},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,99872,99873],{"class":38,"line":437},[36,99874,99875],{"class":69},"#传入数组\n",[36,99877,99878,99881,99883,99885,99887],{"class":38,"line":443},[36,99879,99880],{"class":42},"np.split(a,[",[36,99882,127],{"class":53},[36,99884,57],{"class":42},[36,99886,938],{"class":53},[36,99888,5137],{"class":42},[36,99890,99891],{"class":38,"line":2092},[36,99892,244],{"class":69},[36,99894,99895],{"class":38,"line":2097},[36,99896,99897],{"class":69},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,99899,99900,99902,99904,99906,99908],{"class":38,"line":2103},[36,99901,99880],{"class":42},[36,99903,938],{"class":53},[36,99905,57],{"class":42},[36,99907,987],{"class":53},[36,99909,5137],{"class":42},[36,99911,99912],{"class":38,"line":2108},[36,99913,244],{"class":69},[36,99915,99916],{"class":38,"line":2122},[36,99917,99918],{"class":69},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99920,99921],{},"②二维数组的分割",[19,99923,99924],{},"使用split()",[26,99926,99928],{"className":28,"code":99927,"language":30,"meta":31,"style":31},"#二维数组分割\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",[33,99929,99930,99935,99959,99964,99973,99977,99981,99986,99991,99996,100001,100006,100011,100016,100020,100033,100037,100041,100045,100049,100053,100058,100063,100068,100072,100077,100093,100097,100101,100106,100111,100116,100121,100126,100131,100136,100141,100146,100151,100156,100161,100166,100171,100176,100181,100186,100191,100195,100199,100219,100223,100227,100232,100237,100242,100247,100252,100257,100262,100267,100272,100277,100282,100287,100292,100297,100302,100307,100312,100317,100321,100326,100335,100339,100343,100347,100351,100355,100359,100363,100367,100371,100380,100384,100388,100392,100396,100400,100404,100408,100412,100416,100420,100424,100428,100432,100436,100440,100444,100448,100452,100456,100460,100464,100477,100481,100485,100489,100493,100497,100501,100505,100509],{"__ignoreMap":31},[36,99931,99932],{"class":38,"line":39},[36,99933,99934],{"class":69},"#二维数组分割\n",[36,99936,99937,99939,99941,99943,99945,99947,99949,99951,99953,99955,99957],{"class":38,"line":66},[36,99938,88],{"class":42},[36,99940,47],{"class":46},[36,99942,50],{"class":42},[36,99944,54],{"class":53},[36,99946,57],{"class":42},[36,99948,944],{"class":53},[36,99950,222],{"class":42},[36,99952,101],{"class":53},[36,99954,57],{"class":42},[36,99956,101],{"class":53},[36,99958,63],{"class":42},[36,99960,99961],{"class":38,"line":73},[36,99962,99963],{"class":69},"#默认axis=0  传入整数平均分,按行来的\n",[36,99965,99966,99969,99971],{"class":38,"line":79},[36,99967,99968],{"class":42},"np.split(aa,",[36,99970,127],{"class":53},[36,99972,63],{"class":42},[36,99974,99975],{"class":38,"line":85},[36,99976,96235],{"class":69},[36,99978,99979],{"class":38,"line":419},[36,99980,406],{"class":405},[36,99982,99983],{"class":38,"line":425},[36,99984,99985],{"class":405},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,99987,99988],{"class":38,"line":431},[36,99989,99990],{"class":405},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,99992,99993],{"class":38,"line":437},[36,99994,99995],{"class":405}," array([[13, 14, 15, 16, 17, 18],\n",[36,99997,99998],{"class":38,"line":443},[36,99999,100000],{"class":405},"        [19, 20, 21, 22, 23, 24]]),\n",[36,100002,100003],{"class":38,"line":2092},[36,100004,100005],{"class":405}," array([[25, 26, 27, 28, 29, 30],\n",[36,100007,100008],{"class":38,"line":2097},[36,100009,100010],{"class":405},"        [31, 32, 33, 34, 35, 36]])]\n",[36,100012,100013],{"class":38,"line":2103},[36,100014,100015],{"class":405}," '''\n",[36,100017,100018],{"class":38,"line":2108},[36,100019,99875],{"class":69},[36,100021,100022,100025,100027,100029,100031],{"class":38,"line":2122},[36,100023,100024],{"class":42},"np.split(aa,[",[36,100026,96],{"class":53},[36,100028,57],{"class":42},[36,100030,938],{"class":53},[36,100032,5137],{"class":42},[36,100034,100035],{"class":38,"line":2127},[36,100036,96235],{"class":69},[36,100038,100039],{"class":38,"line":2133},[36,100040,406],{"class":405},[36,100042,100043],{"class":38,"line":2154},[36,100044,99985],{"class":405},[36,100046,100047],{"class":38,"line":2159},[36,100048,99990],{"class":405},[36,100050,100051],{"class":38,"line":2173},[36,100052,99995],{"class":405},[36,100054,100055],{"class":38,"line":2178},[36,100056,100057],{"class":405},"        [19, 20, 21, 22, 23, 24],\n",[36,100059,100060],{"class":38,"line":2207},[36,100061,100062],{"class":405},"        [25, 26, 27, 28, 29, 30]]),\n",[36,100064,100065],{"class":38,"line":2212},[36,100066,100067],{"class":405}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,100069,100070],{"class":38,"line":2229},[36,100071,406],{"class":405},[36,100073,100074],{"class":38,"line":2234},[36,100075,100076],{"class":69},"#axis=1 按照列来分\n",[36,100078,100079,100081,100083,100085,100087,100089,100091],{"class":38,"line":2239},[36,100080,99968],{"class":42},[36,100082,127],{"class":53},[36,100084,57],{"class":42},[36,100086,47991],{"class":5696},[36,100088,47],{"class":46},[36,100090,54],{"class":53},[36,100092,63],{"class":42},[36,100094,100095],{"class":38,"line":2244},[36,100096,96235],{"class":69},[36,100098,100099],{"class":38,"line":2258},[36,100100,406],{"class":405},[36,100102,100103],{"class":38,"line":2263},[36,100104,100105],{"class":405},"[array([[ 1,  2],\n",[36,100107,100108],{"class":38,"line":3057},[36,100109,100110],{"class":405},"        [ 7,  8],\n",[36,100112,100113],{"class":38,"line":3071},[36,100114,100115],{"class":405},"        [13, 14],\n",[36,100117,100118],{"class":38,"line":3079},[36,100119,100120],{"class":405},"        [19, 20],\n",[36,100122,100123],{"class":38,"line":3084},[36,100124,100125],{"class":405},"        [25, 26],\n",[36,100127,100128],{"class":38,"line":3090},[36,100129,100130],{"class":405},"        [31, 32]]),\n",[36,100132,100133],{"class":38,"line":3096},[36,100134,100135],{"class":405}," array([[ 3,  4],\n",[36,100137,100138],{"class":38,"line":3101},[36,100139,100140],{"class":405},"        [ 9, 10],\n",[36,100142,100143],{"class":38,"line":8428},[36,100144,100145],{"class":405},"        [15, 16],\n",[36,100147,100148],{"class":38,"line":8452},[36,100149,100150],{"class":405},"        [21, 22],\n",[36,100152,100153],{"class":38,"line":8457},[36,100154,100155],{"class":405},"        [27, 28],\n",[36,100157,100158],{"class":38,"line":8463},[36,100159,100160],{"class":405},"        [33, 34]]),\n",[36,100162,100163],{"class":38,"line":8490},[36,100164,100165],{"class":405}," array([[ 5,  6],\n",[36,100167,100168],{"class":38,"line":8495},[36,100169,100170],{"class":405},"        [11, 12],\n",[36,100172,100173],{"class":38,"line":8501},[36,100174,100175],{"class":405},"        [17, 18],\n",[36,100177,100178],{"class":38,"line":8513},[36,100179,100180],{"class":405},"        [23, 24],\n",[36,100182,100183],{"class":38,"line":8525},[36,100184,100185],{"class":405},"        [29, 30],\n",[36,100187,100188],{"class":38,"line":8537},[36,100189,100190],{"class":405},"        [35, 36]])]\n",[36,100192,100193],{"class":38,"line":10196},[36,100194,100015],{"class":405},[36,100196,100197],{"class":38,"line":10221},[36,100198,99875],{"class":69},[36,100200,100201,100203,100205,100207,100209,100211,100213,100215,100217],{"class":38,"line":10244},[36,100202,100024],{"class":42},[36,100204,54],{"class":53},[36,100206,57],{"class":42},[36,100208,96],{"class":53},[36,100210,42086],{"class":42},[36,100212,47991],{"class":5696},[36,100214,47],{"class":46},[36,100216,54],{"class":53},[36,100218,63],{"class":42},[36,100220,100221],{"class":38,"line":10268},[36,100222,244],{"class":69},[36,100224,100225],{"class":38,"line":10273},[36,100226,406],{"class":405},[36,100228,100229],{"class":38,"line":10278},[36,100230,100231],{"class":405},"[array([[ 1],\n",[36,100233,100234],{"class":38,"line":10283},[36,100235,100236],{"class":405},"        [ 7],\n",[36,100238,100239],{"class":38,"line":10292},[36,100240,100241],{"class":405},"        [13],\n",[36,100243,100244],{"class":38,"line":10297},[36,100245,100246],{"class":405},"        [19],\n",[36,100248,100249],{"class":38,"line":10303},[36,100250,100251],{"class":405},"        [25],\n",[36,100253,100254],{"class":38,"line":10324},[36,100255,100256],{"class":405},"        [31]]),\n",[36,100258,100259],{"class":38,"line":10330},[36,100260,100261],{"class":405}," array([[ 2],\n",[36,100263,100264],{"class":38,"line":10344},[36,100265,100266],{"class":405},"        [ 8],\n",[36,100268,100269],{"class":38,"line":10350},[36,100270,100271],{"class":405},"        [14],\n",[36,100273,100274],{"class":38,"line":10377},[36,100275,100276],{"class":405},"        [20],\n",[36,100278,100279],{"class":38,"line":10386},[36,100280,100281],{"class":405},"        [26],\n",[36,100283,100284],{"class":38,"line":10392},[36,100285,100286],{"class":405},"        [32]]),\n",[36,100288,100289],{"class":38,"line":10400},[36,100290,100291],{"class":405}," array([[ 3,  4,  5,  6],\n",[36,100293,100294],{"class":38,"line":10405},[36,100295,100296],{"class":405},"        [ 9, 10, 11, 12],\n",[36,100298,100299],{"class":38,"line":17084},[36,100300,100301],{"class":405},"        [15, 16, 17, 18],\n",[36,100303,100304],{"class":38,"line":17090},[36,100305,100306],{"class":405},"        [21, 22, 23, 24],\n",[36,100308,100309],{"class":38,"line":17113},[36,100310,100311],{"class":405},"        [27, 28, 29, 30],\n",[36,100313,100314],{"class":38,"line":17119},[36,100315,100316],{"class":405},"        [33, 34, 35, 36]])]\n",[36,100318,100319],{"class":38,"line":17142},[36,100320,406],{"class":405},[36,100322,100323],{"class":38,"line":17156},[36,100324,100325],{"class":69},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,100327,100328,100331,100333],{"class":38,"line":17176},[36,100329,100330],{"class":42},"np.vsplit(aa,",[36,100332,127],{"class":53},[36,100334,63],{"class":42},[36,100336,100337],{"class":38,"line":17182},[36,100338,244],{"class":69},[36,100340,100341],{"class":38,"line":17193},[36,100342,406],{"class":405},[36,100344,100345],{"class":38,"line":17216},[36,100346,99985],{"class":405},[36,100348,100349],{"class":38,"line":17238},[36,100350,99990],{"class":405},[36,100352,100353],{"class":38,"line":17243},[36,100354,99995],{"class":405},[36,100356,100357],{"class":38,"line":17249},[36,100358,100000],{"class":405},[36,100360,100361],{"class":38,"line":17263},[36,100362,100005],{"class":405},[36,100364,100365],{"class":38,"line":17276},[36,100366,100010],{"class":405},[36,100368,100369],{"class":38,"line":17281},[36,100370,406],{"class":405},[36,100372,100373,100376,100378],{"class":38,"line":17295},[36,100374,100375],{"class":42},"np.hsplit(aa,",[36,100377,127],{"class":53},[36,100379,63],{"class":42},[36,100381,100382],{"class":38,"line":17300},[36,100383,244],{"class":69},[36,100385,100386],{"class":38,"line":17306},[36,100387,406],{"class":405},[36,100389,100390],{"class":38,"line":17311},[36,100391,100105],{"class":405},[36,100393,100394],{"class":38,"line":17325},[36,100395,100110],{"class":405},[36,100397,100398],{"class":38,"line":17330},[36,100399,100115],{"class":405},[36,100401,100402],{"class":38,"line":17335},[36,100403,100120],{"class":405},[36,100405,100406],{"class":38,"line":17349},[36,100407,100125],{"class":405},[36,100409,100410],{"class":38,"line":17361},[36,100411,100130],{"class":405},[36,100413,100414],{"class":38,"line":17366},[36,100415,100135],{"class":405},[36,100417,100418],{"class":38,"line":17379},[36,100419,100140],{"class":405},[36,100421,100422],{"class":38,"line":17384},[36,100423,100145],{"class":405},[36,100425,100426],{"class":38,"line":17389},[36,100427,100150],{"class":405},[36,100429,100430],{"class":38,"line":17394},[36,100431,100155],{"class":405},[36,100433,100434],{"class":38,"line":17407},[36,100435,100160],{"class":405},[36,100437,100438],{"class":38,"line":17412},[36,100439,100165],{"class":405},[36,100441,100442],{"class":38,"line":33110},[36,100443,100170],{"class":405},[36,100445,100446],{"class":38,"line":33116},[36,100447,100175],{"class":405},[36,100449,100450],{"class":38,"line":33122},[36,100451,100180],{"class":405},[36,100453,100454],{"class":38,"line":33128},[36,100455,100185],{"class":405},[36,100457,100458],{"class":38,"line":33134},[36,100459,100190],{"class":405},[36,100461,100462],{"class":38,"line":33145},[36,100463,406],{"class":405},[36,100465,100466,100469,100471,100473,100475],{"class":38,"line":33151},[36,100467,100468],{"class":42},"np.vsplit(aa,[",[36,100470,96],{"class":53},[36,100472,57],{"class":42},[36,100474,938],{"class":53},[36,100476,5137],{"class":42},[36,100478,100479],{"class":38,"line":33171},[36,100480,244],{"class":69},[36,100482,100483],{"class":38,"line":33177},[36,100484,406],{"class":405},[36,100486,100487],{"class":38,"line":33188},[36,100488,99985],{"class":405},[36,100490,100491],{"class":38,"line":33194},[36,100492,99990],{"class":405},[36,100494,100495],{"class":38,"line":33200},[36,100496,99995],{"class":405},[36,100498,100499],{"class":38,"line":33206},[36,100500,100057],{"class":405},[36,100502,100503],{"class":38,"line":33212},[36,100504,100062],{"class":405},[36,100506,100507],{"class":38,"line":33218},[36,100508,100067],{"class":405},[36,100510,100511],{"class":38,"line":33224},[36,100512,100015],{"class":405},[539,100514,100515],{},"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":31,"searchDepth":66,"depth":66,"links":100517},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99783,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100524,"title":100525,"body":100526,"description":550,"extension":551,"meta":101020,"navigation":553,"path":101021,"seo":101022,"stem":101023,"__hash__":101024},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100527,"toc":101011},[100528,100531,100534,100559,100563,100622,100674,100678,100680,100716,100770,100772,100810,100881,100885,100890,100894,100897,100930,100933,100937,100940,100943,100946,100949,100954,100958,100961,100964,100967,100970,100975,100979,100984,100987,101008],[10,100529,100525],{"id":100530},"_9数学函数",[19,100532,100533],{},"补充回顾：python的列表推导式",[26,100535,100537],{"className":28,"code":100536,"language":30,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,100538,100539],{"__ignoreMap":31},[36,100540,100541,100543,100545,100547,100550,100552,100554,100556],{"class":38,"line":39},[36,100542,1503],{"class":42},[36,100544,54],{"class":53},[36,100546,1197],{"class":46},[36,100548,100549],{"class":42},"i ",[36,100551,3505],{"class":46},[36,100553,9918],{"class":42},[36,100555,26524],{"class":46},[36,100557,100558],{"class":42}," a]\n",[14,100560,100562],{"id":100561},"_91-求倒数","9.1 求倒数",[26,100564,100566],{"className":28,"code":100565,"language":30,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,100567,100568,100573,100601,100613],{"__ignoreMap":31},[36,100569,100570],{"class":38,"line":39},[36,100571,100572],{"class":69},"#数组求倒数\n",[36,100574,100575,100577,100579,100581,100583,100585,100587,100589,100591,100593,100595,100597,100599],{"class":38,"line":66},[36,100576,43],{"class":42},[36,100578,47],{"class":46},[36,100580,1503],{"class":42},[36,100582,54],{"class":53},[36,100584,57],{"class":42},[36,100586,96],{"class":53},[36,100588,57],{"class":42},[36,100590,127],{"class":53},[36,100592,57],{"class":42},[36,100594,912],{"class":53},[36,100596,57],{"class":42},[36,100598,938],{"class":53},[36,100600,33723],{"class":42},[36,100602,100603,100605,100607,100610],{"class":38,"line":73},[36,100604,882],{"class":42},[36,100606,47],{"class":46},[36,100608,100609],{"class":42},"np.array(a)",[36,100611,100612],{"class":69},"#将列表转换为数组\n",[36,100614,100615,100617,100619],{"class":38,"line":79},[36,100616,54],{"class":53},[36,100618,1197],{"class":46},[36,100620,100621],{"class":42},"b\n",[26,100623,100625],{"className":28,"code":100624,"language":30,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,100626,100627,100655,100664,100669],{"__ignoreMap":31},[36,100628,100629,100631,100633,100635,100637,100639,100641,100643,100645,100647,100649,100651,100653],{"class":38,"line":39},[36,100630,43],{"class":42},[36,100632,47],{"class":46},[36,100634,1503],{"class":42},[36,100636,54],{"class":53},[36,100638,57],{"class":42},[36,100640,96],{"class":53},[36,100642,57],{"class":42},[36,100644,127],{"class":53},[36,100646,57],{"class":42},[36,100648,912],{"class":53},[36,100650,57],{"class":42},[36,100652,938],{"class":53},[36,100654,33723],{"class":42},[36,100656,100657,100659,100661],{"class":38,"line":66},[36,100658,882],{"class":42},[36,100660,47],{"class":46},[36,100662,100663],{"class":42},"np.array(a)\n",[36,100665,100666],{"class":38,"line":73},[36,100667,100668],{"class":69},"#调用numpy中的函数reciprocal()\n",[36,100670,100671],{"class":38,"line":79},[36,100672,100673],{"class":42},"np.reciprocal(b)\n",[14,100675,100677],{"id":100676},"_92-求平方","9.2 求平方",[19,100679,95002],{},[26,100681,100683],{"className":28,"code":100682,"language":30,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,100684,100685,100690,100695,100711],{"__ignoreMap":31},[36,100686,100687],{"class":38,"line":39},[36,100688,100689],{"class":69},"#square()，求平方\n",[36,100691,100692],{"class":38,"line":66},[36,100693,100694],{"class":69},"#一维数组\n",[36,100696,100697,100699,100701,100703,100705,100707,100709],{"class":38,"line":73},[36,100698,43],{"class":42},[36,100700,47],{"class":46},[36,100702,50],{"class":42},[36,100704,54],{"class":53},[36,100706,57],{"class":42},[36,100708,1062],{"class":53},[36,100710,63],{"class":42},[36,100712,100713],{"class":38,"line":79},[36,100714,100715],{"class":42},"np.square(a)\n",[26,100717,100719],{"className":28,"code":100718,"language":30,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,100720,100721,100726,100731,100752],{"__ignoreMap":31},[36,100722,100723],{"class":38,"line":39},[36,100724,100725],{"class":69},"#或者通过循环遍历的形式来计算\n",[36,100727,100728],{"class":38,"line":66},[36,100729,100730],{"class":69},"#这是一个列表\n",[36,100732,100733,100736,100738,100740,100742,100744,100746,100749],{"class":38,"line":73},[36,100734,100735],{"class":42},"[i",[36,100737,1071],{"class":46},[36,100739,100549],{"class":42},[36,100741,3505],{"class":46},[36,100743,9918],{"class":42},[36,100745,26524],{"class":46},[36,100747,100748],{"class":42}," a]",[36,100750,100751],{"class":69},"#这个求完之后在数列当中\n",[36,100753,100754,100757,100759,100761,100763,100765,100767],{"class":38,"line":79},[36,100755,100756],{"class":42},"np.array([i",[36,100758,1071],{"class":46},[36,100760,100549],{"class":42},[36,100762,3505],{"class":46},[36,100764,9918],{"class":42},[36,100766,26524],{"class":46},[36,100768,100769],{"class":42}," a])\n",[19,100771,93766],{},[26,100773,100775],{"className":28,"code":100774,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,100776,100777,100781,100805],{"__ignoreMap":31},[36,100778,100779],{"class":38,"line":39},[36,100780,93776],{"class":69},[36,100782,100783,100785,100787,100789,100791,100793,100795,100797,100799,100801,100803],{"class":38,"line":66},[36,100784,88],{"class":42},[36,100786,47],{"class":46},[36,100788,50],{"class":42},[36,100790,54],{"class":53},[36,100792,57],{"class":42},[36,100794,60],{"class":53},[36,100796,222],{"class":42},[36,100798,912],{"class":53},[36,100800,57],{"class":42},[36,100802,127],{"class":53},[36,100804,63],{"class":42},[36,100806,100807],{"class":38,"line":73},[36,100808,100809],{"class":42},"np.square(aa)\n",[26,100811,100813],{"className":28,"code":100812,"language":30,"meta":31,"style":31},"#传统的方式\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",[33,100814,100815,100820,100829,100845,100861,100876],{"__ignoreMap":31},[36,100816,100817],{"class":38,"line":39},[36,100818,100819],{"class":69},"#传统的方式\n",[36,100821,100822,100824,100826],{"class":38,"line":66},[36,100823,98588],{"class":42},[36,100825,47],{"class":46},[36,100827,100828],{"class":42},"np.empty_like(aa)\n",[36,100830,100831,100833,100835,100837,100839,100841,100843],{"class":38,"line":73},[36,100832,3505],{"class":46},[36,100834,9918],{"class":42},[36,100836,26524],{"class":46},[36,100838,32920],{"class":53},[36,100840,345],{"class":42},[36,100842,912],{"class":53},[36,100844,31264],{"class":42},[36,100846,100847,100849,100851,100853,100855,100857,100859],{"class":38,"line":79},[36,100848,3681],{"class":46},[36,100850,9980],{"class":42},[36,100852,26524],{"class":46},[36,100854,32920],{"class":53},[36,100856,345],{"class":42},[36,100858,127],{"class":53},[36,100860,31264],{"class":42},[36,100862,100863,100866,100868,100871,100873],{"class":38,"line":85},[36,100864,100865],{"class":42},"        bb[i,j]",[36,100867,47],{"class":46},[36,100869,100870],{"class":42},"aa[i,j]",[36,100872,1071],{"class":46},[36,100874,100875],{"class":42},"aa[i,j]\n",[36,100877,100878],{"class":38,"line":419},[36,100879,100880],{"class":42},"bb\n",[14,100882,100884],{"id":100883},"_93-求各元素的符号","9.3 求各元素的符号",[19,100886,100887],{},[519,100888],{"alt":31,"src":100889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100891,100893],{"id":100892},"_94-modf函数","9.4 modf函数",[19,100895,100896],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,100898,100900],{"className":28,"code":100899,"language":30,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,100901,100902,100925],{"__ignoreMap":31},[36,100903,100904,100906,100908,100910,100912,100914,100916,100918,100920,100923],{"class":38,"line":39},[36,100905,43],{"class":42},[36,100907,47],{"class":46},[36,100909,50],{"class":42},[36,100911,173],{"class":46},[36,100913,1062],{"class":53},[36,100915,57],{"class":42},[36,100917,1062],{"class":53},[36,100919,57],{"class":42},[36,100921,100922],{"class":53},"0.3",[36,100924,63],{"class":42},[36,100926,100927],{"class":38,"line":66},[36,100928,100929],{"class":42},"np.modf(a)\n",[19,100931,100932],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100934,100936],{"id":100935},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100938,100939],{},"np.cell()",[19,100941,100942],{},"np.floor()",[19,100944,100945],{},"np.rint()",[19,100947,100948],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100950,100951],{},[519,100952],{"alt":31,"src":100953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100955,100957],{"id":100956},"_96-around函数","9.6 around()函数",[19,100959,100960],{},"around()函数也可以实现对数的小数位数进行操作",[19,100962,100963],{},"其中的参数：",[19,100965,100966],{},"1.要传的数组",[19,100968,100969],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100971,100972],{},[519,100973],{"alt":31,"src":100974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100976,100978],{"id":100977},"_97-三角函数","9.7 三角函数",[19,100980,100981],{},[519,100982],{"alt":31,"src":100983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100985,100986],{},"引入图像模块非常重要",[26,100988,100990],{"className":28,"code":100989,"language":30,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,100991,100992],{"__ignoreMap":31},[36,100993,100994,100996,100999,101001,101004,101006],{"class":38,"line":39},[36,100995,31215],{"class":46},[36,100997,100998],{"class":42}," matplotlib ",[36,101000,30871],{"class":46},[36,101002,101003],{"class":42}," pyplot ",[36,101005,31861],{"class":46},[36,101007,31915],{"class":42},[539,101009,101010],{},"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":31,"searchDepth":66,"depth":66,"links":101012},[101013,101014,101015,101016,101017,101018,101019],{"id":100561,"depth":66,"text":100562},{"id":100676,"depth":66,"text":100677},{"id":100883,"depth":66,"text":100884},{"id":100892,"depth":66,"text":100893},{"id":100935,"depth":66,"text":100936},{"id":100956,"depth":66,"text":100957},{"id":100977,"depth":66,"text":100978},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100525,"description":550},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101026,"title":101027,"body":101028,"description":550,"extension":551,"meta":101032,"navigation":553,"path":101033,"seo":101034,"stem":101035,"__hash__":101036},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101029,"toc":101030},[],{"title":31,"searchDepth":66,"depth":66,"links":101031},[],{"category":50897},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101027,"description":550},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101038,"title":101039,"body":101040,"description":31,"extension":551,"meta":103048,"navigation":553,"path":103049,"seo":103050,"stem":103051,"__hash__":103052},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101041,"toc":103024},[101042,101045,101049,101052,101055,101061,101064,101087,101090,101124,101127,101168,101172,101175,101268,101271,101315,101318,101335,101338,101352,101355,101358,101403,101406,101443,101447,101450,101456,101461,101481,101485,101488,101554,101557,101575,101579,101582,101611,101621,101627,101631,101634,101640,101651,101655,101658,101688,101691,101971,101974,101977,101988,101991,101994,102016,102023,102026,102044,102047,102050,102064,102072,102075,102101,102107,102110,102113,102123,102135,102155,102164,102184,102194,102218,102231,102245,102250,102291,102308,102333,102345,102365,102371,102416,102435,102452,102465,102481,102488,102500,102509,102544,102565,102590,102603,102627,102642,102667,102670,102691,102700,102703,102714,102718,102721,102727,102739,102746,102750,102753,102765,102768,102782,102785,102795,102805,102808,102848,102851,102855,102861,102864,102878,102882,102885,102918,102922,102925,102948,102956,102959,102965,102971,102974,102977,103005,103009,103012,103018,103021],[10,101043,101039],{"id":101044},"_1环境安装与第一个-mujoco-程序",[14,101046,101048],{"id":101047},"_1目标说明","1.目标说明",[19,101050,101051],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101053,101054],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,101056,101059],{"className":101057,"code":101058,"language":5667,"meta":31},[5665],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,101060,101058],{"__ignoreMap":31},[19,101062,101063],{},"需要掌握:",[579,101065,101066,101069,101072,101077,101082],{},[582,101067,101068],{},"Fedora 44 下 MuJoCo 的系统依赖",[582,101070,101071],{},"Python 虚拟环境创建",[582,101073,101074],{},[33,101075,101076],{},"mujoco.MjModel",[582,101078,101079],{},[33,101080,101081],{},"mujoco.MjData",[582,101083,101084],{},[33,101085,101086],{},"mujoco.mj_step(model, data)",[19,101088,101089],{},"MuJoCo 中最重要的两个对象:",[758,101091,101092,101102],{},[761,101093,101094],{},[764,101095,101096,101099],{},[767,101097,101098],{"align":24216},"对象",[767,101100,101101],{"align":24216},"含义",[805,101103,101104,101114],{},[764,101105,101106,101111],{},[810,101107,101108],{"align":24216},[33,101109,101110],{},"MjModel",[810,101112,101113],{"align":24216},"模型结构，来自 XML，基本不随时间变化",[764,101115,101116,101121],{},[810,101117,101118],{"align":24216},[33,101119,101120],{},"MjData",[810,101122,101123],{"align":24216},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101125,101126],{},"可以先用一个类比理解：",[758,101128,101129,101139],{},[761,101130,101131],{},[764,101132,101133,101136],{},[767,101134,101135],{"align":24216},"类比",[767,101137,101138],{"align":24216},"MuJoCo 对象",[805,101140,101141,101150,101159],{},[764,101142,101143,101146],{},[810,101144,101145],{"align":24216},"游戏地图和角色配置",[810,101147,101148],{"align":24216},[33,101149,101110],{},[764,101151,101152,101155],{},[810,101153,101154],{"align":24216},"游戏运行到当前帧的状态",[810,101156,101157],{"align":24216},[33,101158,101120],{},[764,101160,101161,101164],{},[810,101162,101163],{"align":24216},"前进一帧",[810,101165,101166],{"align":24216},[33,101167,101086],{},[14,101169,101171],{"id":101170},"_2环境与依赖安装","2.环境与依赖安装",[19,101173,101174],{},"Fedora 44 系统依赖:",[26,101176,101178],{"className":24302,"code":101177,"language":24304,"meta":31,"style":31},"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",[33,101179,101180,101192,101205,101218,101228,101238,101257],{"__ignoreMap":31},[36,101181,101182,101184,101186,101188,101190],{"class":38,"line":39},[36,101183,25057],{"class":2443},[36,101185,26796],{"class":405},[36,101187,24314],{"class":405},[36,101189,26881],{"class":53},[36,101191,25159],{"class":53},[36,101193,101194,101197,101200,101203],{"class":38,"line":66},[36,101195,101196],{"class":405},"  python3",[36,101198,101199],{"class":405}," python3-pip",[36,101201,101202],{"class":405}," python3-virtualenv",[36,101204,25159],{"class":53},[36,101206,101207,101210,101213,101216],{"class":38,"line":73},[36,101208,101209],{"class":405},"  mesa-libGL",[36,101211,101212],{"class":405}," mesa-libGLU",[36,101214,101215],{"class":405}," mesa-dri-drivers",[36,101217,25159],{"class":53},[36,101219,101220,101223,101226],{"class":38,"line":79},[36,101221,101222],{"class":405},"  libglvnd-glx",[36,101224,101225],{"class":405}," libglvnd-opengl",[36,101227,25159],{"class":53},[36,101229,101230,101233,101236],{"class":38,"line":85},[36,101231,101232],{"class":405},"  glfw",[36,101234,101235],{"class":405}," glfw-devel",[36,101237,25159],{"class":53},[36,101239,101240,101243,101246,101249,101252,101255],{"class":38,"line":419},[36,101241,101242],{"class":405},"  libX11",[36,101244,101245],{"class":405}," libXcursor",[36,101247,101248],{"class":405}," libXi",[36,101250,101251],{"class":405}," libXinerama",[36,101253,101254],{"class":405}," libXrandr",[36,101256,25159],{"class":53},[36,101258,101259,101262,101265],{"class":38,"line":425},[36,101260,101261],{"class":405},"  gcc",[36,101263,101264],{"class":405}," gcc-c++",[36,101266,101267],{"class":405}," make\n",[19,101269,101270],{},"创建 Python 环境:",[26,101272,101274],{"className":24302,"code":101273,"language":24304,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,101275,101276,101290,101298],{"__ignoreMap":31},[36,101277,101278,101281,101284,101287],{"class":38,"line":39},[36,101279,101280],{"class":2443},"python3",[36,101282,101283],{"class":53}," -m",[36,101285,101286],{"class":405}," venv",[36,101288,101289],{"class":405}," .venv\n",[36,101291,101292,101295],{"class":38,"line":66},[36,101293,101294],{"class":53},"source",[36,101296,101297],{"class":405}," .venv\u002Fbin\u002Factivate\n",[36,101299,101300,101302,101304,101307,101309,101312],{"class":38,"line":73},[36,101301,30],{"class":2443},[36,101303,101283],{"class":53},[36,101305,101306],{"class":405}," pip",[36,101308,24314],{"class":405},[36,101310,101311],{"class":53}," --upgrade",[36,101313,101314],{"class":405}," pip\n",[19,101316,101317],{},"pip 安装:",[26,101319,101321],{"className":24302,"code":101320,"language":24304,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,101322,101323],{"__ignoreMap":31},[36,101324,101325,101327,101329,101332],{"class":38,"line":39},[36,101326,24311],{"class":2443},[36,101328,24314],{"class":405},[36,101330,101331],{"class":405}," \"mujoco>=2.3\"",[36,101333,101334],{"class":405}," numpy\n",[19,101336,101337],{},"安装完成后，先做最小检查：",[26,101339,101341],{"className":24302,"code":101340,"language":24304,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,101342,101343],{"__ignoreMap":31},[36,101344,101345,101347,101349],{"class":38,"line":39},[36,101346,30],{"class":2443},[36,101348,30839],{"class":53},[36,101350,101351],{"class":405}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101353,101354],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101356,101357],{},"conda 安装:",[26,101359,101361],{"className":24302,"code":101360,"language":24304,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[33,101362,101363,101383,101393],{"__ignoreMap":31},[36,101364,101365,101367,101369,101371,101374,101377,101380],{"class":38,"line":39},[36,101366,30811],{"class":2443},[36,101368,29657],{"class":405},[36,101370,25596],{"class":53},[36,101372,101373],{"class":405}," mujoco-study",[36,101375,101376],{"class":405}," python=",[36,101378,101379],{"class":53},"3.10",[36,101381,101382],{"class":53}," -y\n",[36,101384,101385,101387,101390],{"class":38,"line":66},[36,101386,30811],{"class":2443},[36,101388,101389],{"class":405}," activate",[36,101391,101392],{"class":405}," mujoco-study\n",[36,101394,101395,101397,101399,101401],{"class":38,"line":73},[36,101396,24311],{"class":2443},[36,101398,24314],{"class":405},[36,101400,101331],{"class":405},[36,101402,101334],{"class":405},[19,101404,101405],{},"版本冲突说明:",[579,101407,101408,101414,101424,101433],{},[582,101409,101410,101411,28866],{},"不要安装 ",[33,101412,101413],{},"mujoco-py",[582,101415,101416,101417,101419,101420,101423],{},"如果旧项目里同时安装了 ",[33,101418,101413],{}," 和 ",[33,101421,101422],{},"mujoco","，建议新建干净虚拟环境。",[582,101425,101426,101429,101430,28866],{},[33,101427,101428],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,101431,101432],{},"~\u002F.mujoco\u002Fmujoco210",[582,101434,101435,101436,83016,101439,101442],{},"离屏渲染可能涉及 OpenGL 后端，",[33,101437,101438],{},"MUJOCO_GL=egl",[33,101440,101441],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101444,101446],{"id":101445},"_3核心概念解释","3.核心概念解释",[19,101448,101449],{},"MuJoCo 的基本执行流程:",[26,101451,101454],{"className":101452,"code":101453,"language":5667,"meta":31},[5665],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,101455,101453],{"__ignoreMap":31},[19,101457,101458,101460],{},[33,101459,101110],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101462,101463,101465,101466,833,101469,833,101472,833,101475,833,101478,28866],{},[33,101464,101120],{}," 存放仿真运行时状态，例如 ",[33,101467,101468],{},"data.time",[33,101470,101471],{},"data.qpos",[33,101473,101474],{},"data.qvel",[33,101476,101477],{},"data.ctrl",[33,101479,101480],{},"data.xpos",[596,101482,101484],{"id":101483},"xml-是什么","XML 是什么",[19,101486,101487],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,101489,101491],{"className":53544,"code":101490,"language":53546,"meta":31,"style":31},"\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",[33,101492,101493,101515,101546],{"__ignoreMap":31},[36,101494,101495,101497,101499,101501,101503,101505,101508,101510,101513],{"class":38,"line":39},[36,101496,1523],{"class":42},[36,101498,52277],{"class":51777},[36,101500,15400],{"class":2443},[36,101502,47],{"class":42},[36,101504,53968],{"class":405},[36,101506,101507],{"class":2443}," pos",[36,101509,47],{"class":42},[36,101511,101512],{"class":405},"\"0 0 1\"",[36,101514,51784],{"class":42},[36,101516,101517,101519,101522,101524,101526,101529,101531,101533,101535,101538,101540,101543],{"class":38,"line":66},[36,101518,52621],{"class":42},[36,101520,101521],{"class":51777},"geom",[36,101523,15400],{"class":2443},[36,101525,47],{"class":42},[36,101527,101528],{"class":405},"\"box_geom\"",[36,101530,54301],{"class":2443},[36,101532,47],{"class":42},[36,101534,53968],{"class":405},[36,101536,101537],{"class":2443}," size",[36,101539,47],{"class":42},[36,101541,101542],{"class":405},"\"0.1 0.1 0.1\"",[36,101544,101545],{"class":42},"\u002F>\n",[36,101547,101548,101550,101552],{"class":38,"line":73},[36,101549,52262],{"class":42},[36,101551,52277],{"class":51777},[36,101553,51784],{"class":42},[19,101555,101556],{},"这段意思是：",[579,101558,101559,101565,101572],{},[582,101560,101561,101562,101564],{},"创建一个叫 ",[33,101563,54191],{}," 的刚体。",[582,101566,101567,101568,101571],{},"它初始放在 ",[33,101569,101570],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[582,101573,101574],{},"它里面有一个盒子形状的几何体。",[596,101576,101578],{"id":101577},"timestep-是什么","timestep 是什么",[19,101580,101581],{},"XML 里的：",[26,101583,101585],{"className":53544,"code":101584,"language":53546,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,101586,101587],{"__ignoreMap":31},[36,101588,101589,101591,101593,101596,101598,101601,101604,101606,101609],{"class":38,"line":39},[36,101590,1523],{"class":42},[36,101592,69643],{"class":51777},[36,101594,101595],{"class":2443}," timestep",[36,101597,47],{"class":42},[36,101599,101600],{"class":405},"\"0.01\"",[36,101602,101603],{"class":2443}," gravity",[36,101605,47],{"class":42},[36,101607,101608],{"class":405},"\"0 0 -9.81\"",[36,101610,101545],{"class":42},[19,101612,101613,101614,101617,101618,101620],{},"表示每调用一次 ",[33,101615,101616],{},"mj_step","，仿真时间前进 ",[33,101619,39463],{}," 秒。循环 100 次，大约就是 1 秒：",[26,101622,101625],{"className":101623,"code":101624,"language":5667,"meta":31},[5665],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,101626,101624],{"__ignoreMap":31},[596,101628,101630],{"id":101629},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101632,101633],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,101635,101638],{"className":101636,"code":101637,"language":5667,"meta":31},[5665],"x y z qw qx qy qz\n",[33,101639,101637],{"__ignoreMap":31},[19,101641,101642,101643,101646,101647,101650],{},"表示一个自由刚体的位置和姿态。其中 ",[33,101644,101645],{},"x y z"," 是位置，",[33,101648,101649],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101652,101654],{"id":101653},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101656,101657],{},"新建文件:",[26,101659,101661],{"className":24302,"code":101660,"language":24304,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,101662,101663,101673,101680],{"__ignoreMap":31},[36,101664,101665,101668,101670],{"class":38,"line":39},[36,101666,101667],{"class":2443},"mkdir",[36,101669,29697],{"class":53},[36,101671,101672],{"class":405}," mujoco_tutorial\n",[36,101674,101675,101678],{"class":38,"line":66},[36,101676,101677],{"class":53},"cd",[36,101679,101672],{"class":405},[36,101681,101682,101685],{"class":38,"line":73},[36,101683,101684],{"class":2443},"touch",[36,101686,101687],{"class":405}," ch1_first_sim.py\n",[19,101689,101690],{},"写入:",[26,101692,101694],{"className":28,"code":101693,"language":30,"meta":31,"style":31},"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",[33,101695,101696,101703,101707,101711,101721,101726,101731,101735,101740,101745,101749,101754,101759,101764,101769,101774,101779,101783,101787,101791,101804,101818,101828,101832,101844,101856,101868,101880,101892,101896,101913,101918,101922,101933,101944,101948,101952,101966],{"__ignoreMap":31},[36,101697,101698,101700],{"class":38,"line":39},[36,101699,30871],{"class":46},[36,101701,101702],{"class":42}," mujoco\n",[36,101704,101705],{"class":38,"line":66},[36,101706,2880],{"emptyLinePlaceholder":553},[36,101708,101709],{"class":38,"line":73},[36,101710,2880],{"emptyLinePlaceholder":553},[36,101712,101713,101716,101718],{"class":38,"line":79},[36,101714,101715],{"class":53},"XML",[36,101717,14044],{"class":46},[36,101719,101720],{"class":405}," \"\"\"\n",[36,101722,101723],{"class":38,"line":85},[36,101724,101725],{"class":405},"\u003Cmujoco model=\"first_sim\">\n",[36,101727,101728],{"class":38,"line":419},[36,101729,101730],{"class":405},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,101732,101733],{"class":38,"line":425},[36,101734,2880],{"emptyLinePlaceholder":553},[36,101736,101737],{"class":38,"line":431},[36,101738,101739],{"class":405},"  \u003Cworldbody>\n",[36,101741,101742],{"class":38,"line":437},[36,101743,101744],{"class":405},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,101746,101747],{"class":38,"line":443},[36,101748,2880],{"emptyLinePlaceholder":553},[36,101750,101751],{"class":38,"line":2092},[36,101752,101753],{"class":405},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,101755,101756],{"class":38,"line":2097},[36,101757,101758],{"class":405},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,101760,101761],{"class":38,"line":2103},[36,101762,101763],{"class":405},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,101765,101766],{"class":38,"line":2108},[36,101767,101768],{"class":405},"    \u003C\u002Fbody>\n",[36,101770,101771],{"class":38,"line":2122},[36,101772,101773],{"class":405},"  \u003C\u002Fworldbody>\n",[36,101775,101776],{"class":38,"line":2127},[36,101777,101778],{"class":405},"\u003C\u002Fmujoco>\n",[36,101780,101781],{"class":38,"line":2133},[36,101782,96169],{"class":405},[36,101784,101785],{"class":38,"line":2154},[36,101786,2880],{"emptyLinePlaceholder":553},[36,101788,101789],{"class":38,"line":2159},[36,101790,2880],{"emptyLinePlaceholder":553},[36,101792,101793,101795,101797,101800,101802],{"class":38,"line":2173},[36,101794,32424],{"class":46},[36,101796,2453],{"class":2443},[36,101798,101799],{"class":42},"() -> ",[36,101801,96157],{"class":53},[36,101803,4219],{"class":42},[36,101805,101806,101809,101811,101814,101816],{"class":38,"line":2178},[36,101807,101808],{"class":42},"    model ",[36,101810,47],{"class":46},[36,101812,101813],{"class":42}," mujoco.MjModel.from_xml_string(",[36,101815,101715],{"class":53},[36,101817,63],{"class":42},[36,101819,101820,101823,101825],{"class":38,"line":2207},[36,101821,101822],{"class":42},"    data ",[36,101824,47],{"class":46},[36,101826,101827],{"class":42}," mujoco.MjData(model)\n",[36,101829,101830],{"class":38,"line":2212},[36,101831,2880],{"emptyLinePlaceholder":553},[36,101833,101834,101836,101838,101841],{"class":38,"line":2229},[36,101835,31777],{"class":53},[36,101837,345],{"class":42},[36,101839,101840],{"class":405},"\"nq:\"",[36,101842,101843],{"class":42},", model.nq)\n",[36,101845,101846,101848,101850,101853],{"class":38,"line":2234},[36,101847,31777],{"class":53},[36,101849,345],{"class":42},[36,101851,101852],{"class":405},"\"nv:\"",[36,101854,101855],{"class":42},", model.nv)\n",[36,101857,101858,101860,101862,101865],{"class":38,"line":2239},[36,101859,31777],{"class":53},[36,101861,345],{"class":42},[36,101863,101864],{"class":405},"\"nu:\"",[36,101866,101867],{"class":42},", model.nu)\n",[36,101869,101870,101872,101874,101877],{"class":38,"line":2244},[36,101871,31777],{"class":53},[36,101873,345],{"class":42},[36,101875,101876],{"class":405},"\"initial time:\"",[36,101878,101879],{"class":42},", data.time)\n",[36,101881,101882,101884,101886,101889],{"class":38,"line":2258},[36,101883,31777],{"class":53},[36,101885,345],{"class":42},[36,101887,101888],{"class":405},"\"initial qpos:\"",[36,101890,101891],{"class":42},", data.qpos.copy())\n",[36,101893,101894],{"class":38,"line":2263},[36,101895,2880],{"emptyLinePlaceholder":553},[36,101897,101898,101900,101903,101905,101907,101909,101911],{"class":38,"line":3057},[36,101899,3681],{"class":46},[36,101901,101902],{"class":42}," _ ",[36,101904,26524],{"class":46},[36,101906,32920],{"class":53},[36,101908,345],{"class":42},[36,101910,930],{"class":53},[36,101912,31264],{"class":42},[36,101914,101915],{"class":38,"line":3071},[36,101916,101917],{"class":42},"        mujoco.mj_step(model, data)\n",[36,101919,101920],{"class":38,"line":3079},[36,101921,2880],{"emptyLinePlaceholder":553},[36,101923,101924,101926,101928,101931],{"class":38,"line":3084},[36,101925,31777],{"class":53},[36,101927,345],{"class":42},[36,101929,101930],{"class":405},"\"final time:\"",[36,101932,101879],{"class":42},[36,101934,101935,101937,101939,101942],{"class":38,"line":3090},[36,101936,31777],{"class":53},[36,101938,345],{"class":42},[36,101940,101941],{"class":405},"\"final qpos:\"",[36,101943,101891],{"class":42},[36,101945,101946],{"class":38,"line":3096},[36,101947,2880],{"emptyLinePlaceholder":553},[36,101949,101950],{"class":38,"line":3101},[36,101951,2880],{"emptyLinePlaceholder":553},[36,101953,101954,101956,101958,101961,101964],{"class":38,"line":8428},[36,101955,2011],{"class":46},[36,101957,31698],{"class":53},[36,101959,101960],{"class":46}," ==",[36,101962,101963],{"class":405}," \"__main__\"",[36,101965,4219],{"class":42},[36,101967,101968],{"class":38,"line":8452},[36,101969,101970],{"class":42},"    main()\n",[596,101972,101973],{"id":101973},"代码逐段解释",[19,101975,101976],{},"导入库：",[26,101978,101980],{"className":28,"code":101979,"language":30,"meta":31,"style":31},"import mujoco\n",[33,101981,101982],{"__ignoreMap":31},[36,101983,101984,101986],{"class":38,"line":39},[36,101985,30871],{"class":46},[36,101987,101702],{"class":42},[19,101989,101990],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101992,101993],{},"定义 XML：",[26,101995,101997],{"className":28,"code":101996,"language":30,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,101998,101999,102007,102012],{"__ignoreMap":31},[36,102000,102001,102003,102005],{"class":38,"line":39},[36,102002,101715],{"class":53},[36,102004,14044],{"class":46},[36,102006,101720],{"class":405},[36,102008,102009],{"class":38,"line":66},[36,102010,102011],{"class":405},"...\n",[36,102013,102014],{"class":38,"line":73},[36,102015,96169],{"class":405},[19,102017,102018,102019,102022],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,102020,102021],{},"freejoint"," 的方块。",[19,102024,102025],{},"编译模型：",[26,102027,102029],{"className":28,"code":102028,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,102030,102031],{"__ignoreMap":31},[36,102032,102033,102036,102038,102040,102042],{"class":38,"line":39},[36,102034,102035],{"class":42},"model ",[36,102037,47],{"class":46},[36,102039,101813],{"class":42},[36,102041,101715],{"class":53},[36,102043,63],{"class":42},[19,102045,102046],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102048,102049],{},"创建数据：",[26,102051,102053],{"className":28,"code":102052,"language":30,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,102054,102055],{"__ignoreMap":31},[36,102056,102057,102060,102062],{"class":38,"line":39},[36,102058,102059],{"class":42},"data ",[36,102061,47],{"class":46},[36,102063,101827],{"class":42},[19,102065,102066,102068,102069,102071],{},[33,102067,33878],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,102070,812],{},"，方块还在初始位置。",[19,102073,102074],{},"推进仿真：",[26,102076,102078],{"className":28,"code":102077,"language":30,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,102079,102080,102096],{"__ignoreMap":31},[36,102081,102082,102084,102086,102088,102090,102092,102094],{"class":38,"line":39},[36,102083,3505],{"class":46},[36,102085,101902],{"class":42},[36,102087,26524],{"class":46},[36,102089,32920],{"class":53},[36,102091,345],{"class":42},[36,102093,930],{"class":53},[36,102095,31264],{"class":42},[36,102097,102098],{"class":38,"line":66},[36,102099,102100],{"class":42},"    mujoco.mj_step(model, data)\n",[19,102102,102103,102104,102106],{},"每次 ",[33,102105,101616],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[596,102108,102109],{"id":102109},"代码逐行细讲",[19,102111,102112],{},"下面把完整代码按新手视角拆开讲。",[26,102114,102115],{"className":28,"code":101979,"language":30,"meta":31,"style":31},[33,102116,102117],{"__ignoreMap":31},[36,102118,102119,102121],{"class":38,"line":39},[36,102120,30871],{"class":46},[36,102122,101702],{"class":42},[19,102124,102125,102127,102128,833,102130,833,102132,28866],{},[33,102126,30871],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,102129,101076],{},[33,102131,101081],{},[33,102133,102134],{},"mujoco.mj_step",[26,102136,102137],{"className":28,"code":101996,"language":30,"meta":31,"style":31},[33,102138,102139,102147,102151],{"__ignoreMap":31},[36,102140,102141,102143,102145],{"class":38,"line":39},[36,102142,101715],{"class":53},[36,102144,14044],{"class":46},[36,102146,101720],{"class":405},[36,102148,102149],{"class":38,"line":66},[36,102150,102011],{"class":405},[36,102152,102153],{"class":38,"line":73},[36,102154,96169],{"class":405},[19,102156,102157,102159,102160,102163],{},[33,102158,101715],{}," 是一个变量名。右边的三引号 ",[33,102161,102162],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,102165,102166],{"className":53544,"code":101725,"language":53546,"meta":31,"style":31},[33,102167,102168],{"__ignoreMap":31},[36,102169,102170,102172,102174,102177,102179,102182],{"class":38,"line":39},[36,102171,1523],{"class":42},[36,102173,101422],{"class":51777},[36,102175,102176],{"class":2443}," model",[36,102178,47],{"class":42},[36,102180,102181],{"class":405},"\"first_sim\"",[36,102183,51784],{"class":42},[19,102185,102186,102187,102190,102191,28866],{},"这是 XML 的根标签。",[33,102188,102189],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,102192,102193],{},"first_sim",[26,102195,102196],{"className":53544,"code":101584,"language":53546,"meta":31,"style":31},[33,102197,102198],{"__ignoreMap":31},[36,102199,102200,102202,102204,102206,102208,102210,102212,102214,102216],{"class":38,"line":39},[36,102201,1523],{"class":42},[36,102203,69643],{"class":51777},[36,102205,101595],{"class":2443},[36,102207,47],{"class":42},[36,102209,101600],{"class":405},[36,102211,101603],{"class":2443},[36,102213,47],{"class":42},[36,102215,101608],{"class":405},[36,102217,101545],{"class":42},[19,102219,102220,102222,102223,102226,102227,102230],{},[33,102221,69643],{}," 用来设置仿真参数。",[33,102224,102225],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,102228,102229],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,102232,102234],{"className":53544,"code":102233,"language":53546,"meta":31,"style":31},"\u003Cworldbody>\n",[33,102235,102236],{"__ignoreMap":31},[36,102237,102238,102240,102243],{"class":38,"line":39},[36,102239,1523],{"class":42},[36,102241,102242],{"class":51777},"worldbody",[36,102244,51784],{"class":42},[19,102246,102247,102249],{},[33,102248,102242],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,102251,102253],{"className":53544,"code":102252,"language":53546,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,102254,102255],{"__ignoreMap":31},[36,102256,102257,102259,102261,102263,102265,102268,102270,102272,102275,102277,102279,102282,102284,102286,102289],{"class":38,"line":39},[36,102258,1523],{"class":42},[36,102260,101521],{"class":51777},[36,102262,15400],{"class":2443},[36,102264,47],{"class":42},[36,102266,102267],{"class":405},"\"floor\"",[36,102269,54301],{"class":2443},[36,102271,47],{"class":42},[36,102273,102274],{"class":405},"\"plane\"",[36,102276,101537],{"class":2443},[36,102278,47],{"class":42},[36,102280,102281],{"class":405},"\"2 2 0.1\"",[36,102283,79244],{"class":2443},[36,102285,47],{"class":42},[36,102287,102288],{"class":405},"\"0.8 0.8 0.8 1\"",[36,102290,101545],{"class":42},[19,102292,102293,102294,102296,102297,102300,102301,102304,102305,102307],{},"这行创建地面。",[33,102295,101521],{}," 是几何体。",[33,102298,102299],{},"name=\"floor\""," 是名字。",[33,102302,102303],{},"type=\"plane\""," 表示平面。",[33,102306,55587],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,102309,102311],{"className":53544,"code":102310,"language":53546,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,102312,102313],{"__ignoreMap":31},[36,102314,102315,102317,102319,102321,102323,102325,102327,102329,102331],{"class":38,"line":39},[36,102316,1523],{"class":42},[36,102318,52277],{"class":51777},[36,102320,15400],{"class":2443},[36,102322,47],{"class":42},[36,102324,53968],{"class":405},[36,102326,101507],{"class":2443},[36,102328,47],{"class":42},[36,102330,101512],{"class":405},[36,102332,51784],{"class":42},[19,102334,102335,102336,28866,102338,102341,102342,102344],{},"这行创建一个刚体，名字叫 ",[33,102337,54191],{},[33,102339,102340],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,102343,101570],{},"，也就是离地面 1 米高。",[26,102346,102348],{"className":53544,"code":102347,"language":53546,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,102349,102350],{"__ignoreMap":31},[36,102351,102352,102354,102356,102358,102360,102363],{"class":38,"line":39},[36,102353,1523],{"class":42},[36,102355,102021],{"class":51777},[36,102357,15400],{"class":2443},[36,102359,47],{"class":42},[36,102361,102362],{"class":405},"\"box_free\"",[36,102364,101545],{"class":42},[19,102366,102367,102368,102370],{},"这行很重要。",[33,102369,102021],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,102372,102374],{"className":53544,"code":102373,"language":53546,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,102375,102376],{"__ignoreMap":31},[36,102377,102378,102380,102382,102384,102386,102388,102390,102392,102394,102396,102398,102400,102403,102405,102407,102409,102411,102414],{"class":38,"line":39},[36,102379,1523],{"class":42},[36,102381,101521],{"class":51777},[36,102383,15400],{"class":2443},[36,102385,47],{"class":42},[36,102387,101528],{"class":405},[36,102389,54301],{"class":2443},[36,102391,47],{"class":42},[36,102393,53968],{"class":405},[36,102395,101537],{"class":2443},[36,102397,47],{"class":42},[36,102399,101542],{"class":405},[36,102401,102402],{"class":2443}," mass",[36,102404,47],{"class":42},[36,102406,4158],{"class":405},[36,102408,79244],{"class":2443},[36,102410,47],{"class":42},[36,102412,102413],{"class":405},"\"1 0 0 1\"",[36,102415,101545],{"class":42},[19,102417,102418,102419,102422,102423,102426,102427,102430,102431,102434],{},"这行给 box body 添加一个盒子形状。",[33,102420,102421],{},"type=\"box\""," 表示形状是盒子。",[33,102424,102425],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,102428,102429],{},"mass=\"1\""," 表示质量是 1。",[33,102432,102433],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,102436,102438],{"className":28,"code":102437,"language":30,"meta":31,"style":31},"def main() -> None:\n",[33,102439,102440],{"__ignoreMap":31},[36,102441,102442,102444,102446,102448,102450],{"class":38,"line":39},[36,102443,32424],{"class":46},[36,102445,2453],{"class":2443},[36,102447,101799],{"class":42},[36,102449,96157],{"class":53},[36,102451,4219],{"class":42},[19,102453,102454,102456,102457,102460,102461,102464],{},[33,102455,32424],{}," 用来定义函数。这里定义了一个叫 ",[33,102458,102459],{},"main"," 的函数。",[33,102462,102463],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,102466,102467],{"className":28,"code":102028,"language":30,"meta":31,"style":31},[33,102468,102469],{"__ignoreMap":31},[36,102470,102471,102473,102475,102477,102479],{"class":38,"line":39},[36,102472,102035],{"class":42},[36,102474,47],{"class":46},[36,102476,101813],{"class":42},[36,102478,101715],{"class":53},[36,102480,63],{"class":42},[19,102482,102483,102484,102487],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,102485,102486],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,102489,102490],{"className":28,"code":102052,"language":30,"meta":31,"style":31},[33,102491,102492],{"__ignoreMap":31},[36,102493,102494,102496,102498],{"class":38,"line":39},[36,102495,102059],{"class":42},[36,102497,47],{"class":46},[36,102499,101827],{"class":42},[19,102501,102502,102503,102505,102506,102508],{},"这行创建仿真数据。",[33,102504,33878],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,102507,33878],{}," 都会变化。",[26,102510,102512],{"className":28,"code":102511,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,102513,102514,102524,102534],{"__ignoreMap":31},[36,102515,102516,102518,102520,102522],{"class":38,"line":39},[36,102517,30894],{"class":53},[36,102519,345],{"class":42},[36,102521,101840],{"class":405},[36,102523,101843],{"class":42},[36,102525,102526,102528,102530,102532],{"class":38,"line":66},[36,102527,30894],{"class":53},[36,102529,345],{"class":42},[36,102531,101852],{"class":405},[36,102533,101855],{"class":42},[36,102535,102536,102538,102540,102542],{"class":38,"line":73},[36,102537,30894],{"class":53},[36,102539,345],{"class":42},[36,102541,101864],{"class":405},[36,102543,101867],{"class":42},[19,102545,102546,102548,102549,102552,102553,102556,102557,102560,102561,102564],{},[33,102547,30894],{}," 用来输出信息。",[33,102550,102551],{},"model.nq"," 是位置变量数量，",[33,102554,102555],{},"model.nv"," 是速度变量数量，",[33,102558,102559],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,102562,102563],{},"nu"," 是 0。",[26,102566,102568],{"className":28,"code":102567,"language":30,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,102569,102570,102580],{"__ignoreMap":31},[36,102571,102572,102574,102576,102578],{"class":38,"line":39},[36,102573,30894],{"class":53},[36,102575,345],{"class":42},[36,102577,101876],{"class":405},[36,102579,101879],{"class":42},[36,102581,102582,102584,102586,102588],{"class":38,"line":66},[36,102583,30894],{"class":53},[36,102585,345],{"class":42},[36,102587,101888],{"class":405},[36,102589,101891],{"class":42},[19,102591,102592,102593,102595,102596,102598,102599,102602],{},"这里打印初始时间和初始位置。",[33,102594,101468],{}," 一开始是 0。",[33,102597,101471],{}," 是位置数组。",[33,102600,102601],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,102604,102605],{"className":28,"code":102077,"language":30,"meta":31,"style":31},[33,102606,102607,102623],{"__ignoreMap":31},[36,102608,102609,102611,102613,102615,102617,102619,102621],{"class":38,"line":39},[36,102610,3505],{"class":46},[36,102612,101902],{"class":42},[36,102614,26524],{"class":46},[36,102616,32920],{"class":53},[36,102618,345],{"class":42},[36,102620,930],{"class":53},[36,102622,31264],{"class":42},[36,102624,102625],{"class":38,"line":66},[36,102626,102100],{"class":42},[19,102628,102629,102631,102632,102635,102636,102638,102639,102641],{},[33,102630,3505],{}," 是循环。",[33,102633,102634],{},"range(100)"," 表示循环 100 次。",[33,102637,1605],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,102640,101616],{},"，仿真就前进一步。",[26,102643,102645],{"className":28,"code":102644,"language":30,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,102646,102647,102657],{"__ignoreMap":31},[36,102648,102649,102651,102653,102655],{"class":38,"line":39},[36,102650,30894],{"class":53},[36,102652,345],{"class":42},[36,102654,101930],{"class":405},[36,102656,101879],{"class":42},[36,102658,102659,102661,102663,102665],{"class":38,"line":66},[36,102660,30894],{"class":53},[36,102662,345],{"class":42},[36,102664,101941],{"class":405},[36,102666,101891],{"class":42},[19,102668,102669],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,102671,102673],{"className":28,"code":102672,"language":30,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,102674,102675,102687],{"__ignoreMap":31},[36,102676,102677,102679,102681,102683,102685],{"class":38,"line":39},[36,102678,2011],{"class":46},[36,102680,31698],{"class":53},[36,102682,101960],{"class":46},[36,102684,101963],{"class":405},[36,102686,4219],{"class":42},[36,102688,102689],{"class":38,"line":66},[36,102690,101970],{"class":42},[19,102692,102693,102694,102697,102698,28866],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,102695,102696],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,102699,102696],{},[19,102701,102702],{},"运行:",[26,102704,102706],{"className":24302,"code":102705,"language":24304,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,102707,102708],{"__ignoreMap":31},[36,102709,102710,102712],{"class":38,"line":39},[36,102711,30],{"class":2443},[36,102713,101687],{"class":405},[14,102715,102717],{"id":102716},"_5运行结果说明","5.运行结果说明",[19,102719,102720],{},"你应该看到类似输出:",[26,102722,102725],{"className":102723,"code":102724,"language":5667,"meta":31},[5665],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,102726,102724],{"__ignoreMap":31},[19,102728,102729,102731,102732,102735,102736,28866],{},[33,102730,102021],{}," 有 7 个位置变量: ",[33,102733,102734],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,102737,102738],{},"vx vy vz wx wy wz",[19,102740,102741,102742,102745],{},"你还会看到 ",[33,102743,102744],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102747,102749],{"id":102748},"_6验证步骤","6.验证步骤",[19,102751,102752],{},"确认版本:",[26,102754,102755],{"className":24302,"code":101340,"language":24304,"meta":31,"style":31},[33,102756,102757],{"__ignoreMap":31},[36,102758,102759,102761,102763],{"class":38,"line":39},[36,102760,30],{"class":2443},[36,102762,30839],{"class":53},[36,102764,101351],{"class":405},[19,102766,102767],{},"确认导入的是官方 bindings:",[26,102769,102771],{"className":24302,"code":102770,"language":24304,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,102772,102773],{"__ignoreMap":31},[36,102774,102775,102777,102779],{"class":38,"line":39},[36,102776,30],{"class":2443},[36,102778,30839],{"class":53},[36,102780,102781],{"class":405}," \"import mujoco; print(mujoco)\"\n",[19,102783,102784],{},"运行程序:",[26,102786,102787],{"className":24302,"code":102705,"language":24304,"meta":31,"style":31},[33,102788,102789],{"__ignoreMap":31},[36,102790,102791,102793],{"class":38,"line":39},[36,102792,30],{"class":2443},[36,102794,101687],{"class":405},[19,102796,102797,102798,102801,102802,28866],{},"检查 ",[33,102799,102800],{},"final time"," 是否约等于 ",[33,102803,102804],{},"1.0",[19,102806,102807],{},"再做几个小实验：",[579,102809,102810,102820,102828,102841],{},[582,102811,102812,102813,102815,102816,102819],{},"把 ",[33,102814,102340],{}," 改成 ",[33,102817,102818],{},"pos=\"0 0 2\"","，观察初始高度变化。",[582,102821,102812,102822,102815,102824,102827],{},[33,102823,102229],{},[33,102825,102826],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[582,102829,102812,102830,102815,102832,102835,102836,102838,102839,28866],{},[33,102831,102225],{},[33,102833,102834],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,102837,102800],{}," 是否变成约 ",[33,102840,35806],{},[582,102842,102843,102844,102847],{},"删除 ",[33,102845,102846],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102849,102850],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102852,102854],{"id":102853},"_7常见错误与解决方案","7.常见错误与解决方案",[596,102856,102858],{"id":102857},"modulenotfounderror-no-module-named-mujoco",[33,102859,102860],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102862,102863],{},"解决:",[26,102865,102867],{"className":24302,"code":102866,"language":24304,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,102868,102869],{"__ignoreMap":31},[36,102870,102871,102873,102875],{"class":38,"line":39},[36,102872,24311],{"class":2443},[36,102874,24314],{"class":405},[36,102876,102877],{"class":405}," \"mujoco>=2.3\"\n",[596,102879,102881],{"id":102880},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102883,102884],{},"先安装系统依赖:",[26,102886,102888],{"className":24302,"code":102887,"language":24304,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,102889,102890],{"__ignoreMap":31},[36,102891,102892,102894,102896,102898,102900,102903,102905,102908,102910,102913,102915],{"class":38,"line":39},[36,102893,25057],{"class":2443},[36,102895,26796],{"class":405},[36,102897,24314],{"class":405},[36,102899,26881],{"class":53},[36,102901,102902],{"class":405}," mesa-libGL",[36,102904,101215],{"class":405},[36,102906,102907],{"class":405}," glfw",[36,102909,101235],{"class":405},[36,102911,102912],{"class":405}," libX11",[36,102914,101248],{"class":405},[36,102916,102917],{"class":405}," libXrandr\n",[596,102919,102921],{"id":102920},"xml-解析失败","XML 解析失败",[19,102923,102924],{},"检查:",[579,102926,102927,102930,102933,102939],{},[582,102928,102929],{},"标签是否闭合",[582,102931,102932],{},"属性是否带引号",[582,102934,102935,102936],{},"根节点是否是 ",[33,102937,102938],{},"\u003Cmujoco>",[582,102940,102941,102943,102944,102947],{},[33,102942,52277],{}," 是否放在 ",[33,102945,102946],{},"\u003Cworldbody>"," 内部",[596,102949,102951,102953,102954],{"id":102950},"final-time-不是严格等于-10",[33,102952,102800],{}," 不是严格等于 ",[33,102955,102804],{},[19,102957,102958],{},"这通常不是错误。浮点数计算可能得到：",[26,102960,102963],{"className":102961,"code":102962,"language":5667,"meta":31},[5665],"1.0000000000000007\n",[33,102964,102962],{"__ignoreMap":31},[19,102966,102967,102968,102970],{},"只要接近 ",[33,102969,102804],{}," 就正常。",[596,102972,102973],{"id":102973},"方块没有掉下来",[19,102975,102976],{},"检查：",[579,102978,102979,102985,102991,102996],{},[582,102980,102981,102982],{},"方块 body 里是否有 ",[33,102983,102984],{},"\u003Cfreejoint\u002F>",[582,102986,102987,102988],{},"重力是否是 ",[33,102989,102990],{},"0 0 -9.81",[582,102992,102993,102994],{},"是否真的调用了 ",[33,102995,101086],{},[582,102997,102998,102999,103001,103002],{},"你看的是否是 ",[33,103000,102744],{},"，不是 ",[33,103003,103004],{},"initial qpos",[14,103006,103008],{"id":103007},"_8本章小结","8.本章小结",[19,103010,103011],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,103013,103016],{"className":103014,"code":103015,"language":5667,"meta":31},[5665],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,103017,103015],{"__ignoreMap":31},[19,103019,103020],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[539,103022,103023],{},"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":31,"searchDepth":66,"depth":66,"links":103025},[103026,103027,103028,103033,103037,103038,103039,103047],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":103029},[103030,103031,103032],{"id":101483,"depth":73,"text":101484},{"id":101577,"depth":73,"text":101578},{"id":101629,"depth":73,"text":101630},{"id":101653,"depth":66,"text":101654,"children":103034},[103035,103036],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":103040},[103041,103042,103043,103044,103046],{"id":102857,"depth":73,"text":102860},{"id":102880,"depth":73,"text":102881},{"id":102920,"depth":73,"text":102921},{"id":102950,"depth":73,"text":103045},"final time 不是严格等于 1.0",{"id":102973,"depth":73,"text":102973},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101039,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103054,"title":103055,"body":103056,"description":31,"extension":551,"meta":104712,"navigation":553,"path":104713,"seo":104714,"stem":104715,"__hash__":104716},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103057,"toc":104688},[103058,103061,103063,103066,103069,103086,103181,103184,103190,103192,103194,103218,103221,103235,103238,103279,103281,103294,103296,103299,103347,103359,103362,103365,103371,103384,103451,103454,103473,103476,103479,103485,103487,103496,103499,103503,103512,103594,103603,103607,103613,103627,103637,103639,103969,103972,103984,103986,103997,103999,104002,104020,104023,104026,104044,104055,104058,104073,104083,104085,104106,104123,104143,104149,104189,104205,104221,104227,104230,104254,104270,104275,104305,104322,104347,104350,104365,104374,104389,104398,104413,104420,104422,104432,104445,104452,104455,104494,104501,104503,104555,104557,104563,104566,104573,104580,104583,104585,104603,104606,104609,104643,104655,104657,104660,104682,104685],[10,103059,103055],{"id":103060},"_2xml-与-mjcf-物理建模基础",[14,103062,101048],{"id":101047},[19,103064,103065],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103067,103068],{},"本章结束后，你应该能看懂一个简单模型里：",[579,103070,103071,103074,103077,103080,103083],{},[582,103072,103073],{},"地面在哪里。",[582,103075,103076],{},"物体初始位置在哪里。",[582,103078,103079],{},"几何体是什么形状。",[582,103081,103082],{},"哪些 body 可以自由运动。",[582,103084,103085],{},"如何用名字在 Python 里找到 XML 中的对象。",[758,103087,103088,103098],{},[761,103089,103090],{},[764,103091,103092,103095],{},[767,103093,103094],{"align":24216},"标签",[767,103096,103097],{"align":24216},"作用",[805,103099,103100,103109,103119,103128,103138,103148,103161,103171],{},[764,103101,103102,103106],{},[810,103103,103104],{"align":24216},[33,103105,102938],{},[810,103107,103108],{"align":24216},"根节点",[764,103110,103111,103116],{},[810,103112,103113],{"align":24216},[33,103114,103115],{},"\u003Coption>",[810,103117,103118],{"align":24216},"仿真参数",[764,103120,103121,103125],{},[810,103122,103123],{"align":24216},[33,103124,102946],{},[810,103126,103127],{"align":24216},"世界中的物体",[764,103129,103130,103135],{},[810,103131,103132],{"align":24216},[33,103133,103134],{},"\u003Cbody>",[810,103136,103137],{"align":24216},"刚体",[764,103139,103140,103145],{},[810,103141,103142],{"align":24216},[33,103143,103144],{},"\u003Cgeom>",[810,103146,103147],{"align":24216},"几何体、碰撞体、可视体",[764,103149,103150,103158],{},[810,103151,103152,25459,103155],{"align":24216},[33,103153,103154],{},"\u003Cjoint>",[33,103156,103157],{},"\u003Cfreejoint>",[810,103159,103160],{"align":24216},"关节",[764,103162,103163,103168],{},[810,103164,103165],{"align":24216},[33,103166,103167],{},"\u003Csite>",[810,103169,103170],{"align":24216},"标记点",[764,103172,103173,103178],{},[810,103174,103175],{"align":24216},[33,103176,103177],{},"\u003Cactuator>",[810,103179,103180],{"align":24216},"控制器",[19,103182,103183],{},"初学时可以先记住：",[26,103185,103188],{"className":103186,"code":103187,"language":5667,"meta":31},[5665],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,103189,103187],{"__ignoreMap":31},[14,103191,101171],{"id":101170},[19,103193,101174],{},[26,103195,103197],{"className":24302,"code":103196,"language":24304,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,103198,103199],{"__ignoreMap":31},[36,103200,103201,103203,103205,103207,103209,103211,103213,103215],{"class":38,"line":39},[36,103202,25057],{"class":2443},[36,103204,26796],{"class":405},[36,103206,24314],{"class":405},[36,103208,26881],{"class":53},[36,103210,102902],{"class":405},[36,103212,101215],{"class":405},[36,103214,102907],{"class":405},[36,103216,103217],{"class":405}," glfw-devel\n",[19,103219,103220],{},"pip:",[26,103222,103223],{"className":24302,"code":101320,"language":24304,"meta":31,"style":31},[33,103224,103225],{"__ignoreMap":31},[36,103226,103227,103229,103231,103233],{"class":38,"line":39},[36,103228,24311],{"class":2443},[36,103230,24314],{"class":405},[36,103232,101331],{"class":405},[36,103234,101334],{"class":405},[19,103236,103237],{},"conda:",[26,103239,103241],{"className":24302,"code":103240,"language":24304,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[33,103242,103243,103260,103269],{"__ignoreMap":31},[36,103244,103245,103247,103249,103251,103254,103256,103258],{"class":38,"line":39},[36,103246,30811],{"class":2443},[36,103248,29657],{"class":405},[36,103250,25596],{"class":53},[36,103252,103253],{"class":405}," mujoco-xml",[36,103255,101376],{"class":405},[36,103257,101379],{"class":53},[36,103259,101382],{"class":53},[36,103261,103262,103264,103266],{"class":38,"line":66},[36,103263,30811],{"class":2443},[36,103265,101389],{"class":405},[36,103267,103268],{"class":405}," mujoco-xml\n",[36,103270,103271,103273,103275,103277],{"class":38,"line":73},[36,103272,24311],{"class":2443},[36,103274,24314],{"class":405},[36,103276,101331],{"class":405},[36,103278,101334],{"class":405},[19,103280,101405],{},[579,103282,103283,103286,103291],{},[582,103284,103285],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[582,103287,103288,103289,28866],{},"本章使用基础标签，适用于 ",[33,103290,101428],{},[582,103292,103293],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103295,101446],{"id":101445},[19,103297,103298],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,103300,103302],{"className":53544,"code":103301,"language":53546,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,103303,103304,103318,103326,103331,103339],{"__ignoreMap":31},[36,103305,103306,103308,103310,103312,103314,103316],{"class":38,"line":39},[36,103307,1523],{"class":42},[36,103309,101422],{"class":51777},[36,103311,102176],{"class":2443},[36,103313,47],{"class":42},[36,103315,63156],{"class":405},[36,103317,51784],{"class":42},[36,103319,103320,103322,103324],{"class":38,"line":66},[36,103321,52621],{"class":42},[36,103323,102242],{"class":51777},[36,103325,51784],{"class":42},[36,103327,103328],{"class":38,"line":73},[36,103329,103330],{"class":42},"    ...\n",[36,103332,103333,103335,103337],{"class":38,"line":79},[36,103334,52894],{"class":42},[36,103336,102242],{"class":51777},[36,103338,51784],{"class":42},[36,103340,103341,103343,103345],{"class":38,"line":85},[36,103342,52262],{"class":42},[36,103344,101422],{"class":51777},[36,103346,51784],{"class":42},[19,103348,103349,103351,103352,103354,103355,103358],{},[33,103350,52277],{}," 表示刚体。",[33,103353,101521],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,103356,103357],{},"joint"," 表示刚体相对父刚体如何运动。",[596,103360,103361],{"id":103361},"层级结构非常重要",[19,103363,103364],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,103366,103369],{"className":103367,"code":103368,"language":5667,"meta":31},[5665],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,103370,103368],{"__ignoreMap":31},[19,103372,103373,101419,103376,103379,103380,103383],{},[33,103374,103375],{},"red_box_geom",[33,103377,103378],{},"box_center"," 都属于 ",[33,103381,103382],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,103385,103387],{"className":53544,"code":103386,"language":53546,"meta":31,"style":31},"\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",[33,103388,103389,103409,103423,103443],{"__ignoreMap":31},[36,103390,103391,103393,103395,103397,103399,103401,103403,103405,103407],{"class":38,"line":39},[36,103392,1523],{"class":42},[36,103394,52277],{"class":51777},[36,103396,15400],{"class":2443},[36,103398,47],{"class":42},[36,103400,53968],{"class":405},[36,103402,101507],{"class":2443},[36,103404,47],{"class":42},[36,103406,101512],{"class":405},[36,103408,51784],{"class":42},[36,103410,103411,103413,103415,103417,103419,103421],{"class":38,"line":66},[36,103412,52621],{"class":42},[36,103414,102021],{"class":51777},[36,103416,15400],{"class":2443},[36,103418,47],{"class":42},[36,103420,102362],{"class":405},[36,103422,101545],{"class":42},[36,103424,103425,103427,103429,103431,103433,103435,103437,103439,103441],{"class":38,"line":73},[36,103426,52621],{"class":42},[36,103428,101521],{"class":51777},[36,103430,54301],{"class":2443},[36,103432,47],{"class":42},[36,103434,53968],{"class":405},[36,103436,101537],{"class":2443},[36,103438,47],{"class":42},[36,103440,101542],{"class":405},[36,103442,101545],{"class":42},[36,103444,103445,103447,103449],{"class":38,"line":79},[36,103446,52262],{"class":42},[36,103448,52277],{"class":51777},[36,103450,51784],{"class":42},[19,103452,103453],{},"含义:",[579,103455,103456,103462,103467,103470],{},[582,103457,103458,103459,103461],{},"创建名为 ",[33,103460,54191],{}," 的刚体",[582,103463,103464,103465],{},"初始位置在世界坐标 ",[33,103466,101570],{},[582,103468,103469],{},"它有一个自由关节",[582,103471,103472],{},"它有一个盒子几何体",[596,103474,103475],{"id":103475},"坐标怎么理解",[19,103477,103478],{},"MuJoCo 默认使用三维坐标：",[26,103480,103483],{"className":103481,"code":103482,"language":5667,"meta":31},[5665],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,103484,103482],{"__ignoreMap":31},[19,103486,15113],{},[26,103488,103490],{"className":53544,"code":103489,"language":53546,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,103491,103492],{"__ignoreMap":31},[36,103493,103494],{"class":38,"line":39},[36,103495,103489],{"class":42},[19,103497,103498],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[596,103500,103502],{"id":103501},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103504,103505,103506,83007,103509,103511],{},"不同 ",[33,103507,103508],{},"type",[33,103510,531],{}," 含义不同：",[758,103513,103514,103529],{},[761,103515,103516],{},[764,103517,103518,103522,103527],{},[767,103519,103520],{"align":24216},[33,103521,103508],{},[767,103523,103524,103526],{"align":24216},[33,103525,531],{}," 示例",[767,103528,101101],{"align":24216},[805,103530,103531,103545,103560,103579],{},[764,103532,103533,103537,103542],{},[810,103534,103535],{"align":24216},[33,103536,54191],{},[810,103538,103539],{"align":24216},[33,103540,103541],{},"size=\"0.1 0.2 0.3\"",[810,103543,103544],{"align":24216},"x\u002Fy\u002Fz 半边长，不是完整长度",[764,103546,103547,103552,103557],{},[810,103548,103549],{"align":24216},[33,103550,103551],{},"sphere",[810,103553,103554],{"align":24216},[33,103555,103556],{},"size=\"0.1\"",[810,103558,103559],{"align":24216},"球半径",[764,103561,103562,103567,103572],{},[810,103563,103564],{"align":24216},[33,103565,103566],{},"capsule",[810,103568,103569],{"align":24216},[33,103570,103571],{},"size=\"0.03\"",[810,103573,103574,103575,103578],{"align":24216},"胶囊半径，长度常用 ",[33,103576,103577],{},"fromto"," 指定",[764,103580,103581,103586,103591],{},[810,103582,103583],{"align":24216},[33,103584,103585],{},"plane",[810,103587,103588],{"align":24216},[33,103589,103590],{},"size=\"3 3 0.1\"",[810,103592,103593],{"align":24216},"可视平面大小，通常当地面",[19,103595,103596,103597,103599,103600,103602],{},"最容易踩坑的是 box：",[33,103598,102425],{}," 表示边长大约是 ",[33,103601,32514],{},"，因为 MuJoCo 用的是半边长。",[596,103604,103606],{"id":103605},"site-是什么","site 是什么",[19,103608,103609,103612],{},[33,103610,103611],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[579,103614,103615,103618,103621,103624],{},[582,103616,103617],{},"标记机械臂末端。",[582,103619,103620],{},"标记目标位置。",[582,103622,103623],{},"放传感器或相机参考点。",[582,103625,103626],{},"在 Python 中读取某个关键点的世界坐标。",[19,103628,103629,103630,101419,103633,103636],{},"在后面的 Reacher 任务中，",[33,103631,103632],{},"tip",[33,103634,103635],{},"target"," 就会用 site 表示。",[14,103638,101654],{"id":101653},[26,103640,103642],{"className":28,"code":103641,"language":30,"meta":31,"style":31},"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",[33,103643,103644,103650,103660,103664,103668,103676,103681,103685,103689,103693,103698,103702,103707,103712,103717,103722,103726,103730,103734,103738,103742,103746,103758,103770,103778,103782,103797,103812,103816,103829,103844,103857,103870,103874,103890,103894,103898,103909,103921,103933,103945,103949,103953,103965],{"__ignoreMap":31},[36,103645,103646,103648],{"class":38,"line":39},[36,103647,30871],{"class":46},[36,103649,101702],{"class":42},[36,103651,103652,103654,103656,103658],{"class":38,"line":66},[36,103653,30871],{"class":46},[36,103655,31858],{"class":42},[36,103657,31861],{"class":46},[36,103659,31864],{"class":42},[36,103661,103662],{"class":38,"line":73},[36,103663,2880],{"emptyLinePlaceholder":553},[36,103665,103666],{"class":38,"line":79},[36,103667,2880],{"emptyLinePlaceholder":553},[36,103669,103670,103672,103674],{"class":38,"line":85},[36,103671,101715],{"class":53},[36,103673,14044],{"class":46},[36,103675,101720],{"class":405},[36,103677,103678],{"class":38,"line":419},[36,103679,103680],{"class":405},"\u003Cmujoco model=\"xml_basic\">\n",[36,103682,103683],{"class":38,"line":425},[36,103684,101730],{"class":405},[36,103686,103687],{"class":38,"line":431},[36,103688,2880],{"emptyLinePlaceholder":553},[36,103690,103691],{"class":38,"line":437},[36,103692,101739],{"class":405},[36,103694,103695],{"class":38,"line":443},[36,103696,103697],{"class":405},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,103699,103700],{"class":38,"line":2092},[36,103701,2880],{"emptyLinePlaceholder":553},[36,103703,103704],{"class":38,"line":2097},[36,103705,103706],{"class":405},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,103708,103709],{"class":38,"line":2103},[36,103710,103711],{"class":405},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,103713,103714],{"class":38,"line":2108},[36,103715,103716],{"class":405},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,103718,103719],{"class":38,"line":2122},[36,103720,103721],{"class":405},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,103723,103724],{"class":38,"line":2127},[36,103725,101768],{"class":405},[36,103727,103728],{"class":38,"line":2133},[36,103729,101773],{"class":405},[36,103731,103732],{"class":38,"line":2154},[36,103733,101778],{"class":405},[36,103735,103736],{"class":38,"line":2159},[36,103737,96169],{"class":405},[36,103739,103740],{"class":38,"line":2173},[36,103741,2880],{"emptyLinePlaceholder":553},[36,103743,103744],{"class":38,"line":2178},[36,103745,2880],{"emptyLinePlaceholder":553},[36,103747,103748,103750,103752,103754,103756],{"class":38,"line":2207},[36,103749,32424],{"class":46},[36,103751,2453],{"class":2443},[36,103753,101799],{"class":42},[36,103755,96157],{"class":53},[36,103757,4219],{"class":42},[36,103759,103760,103762,103764,103766,103768],{"class":38,"line":2212},[36,103761,101808],{"class":42},[36,103763,47],{"class":46},[36,103765,101813],{"class":42},[36,103767,101715],{"class":53},[36,103769,63],{"class":42},[36,103771,103772,103774,103776],{"class":38,"line":2229},[36,103773,101822],{"class":42},[36,103775,47],{"class":46},[36,103777,101827],{"class":42},[36,103779,103780],{"class":38,"line":2234},[36,103781,2880],{"emptyLinePlaceholder":553},[36,103783,103784,103787,103789,103792,103795],{"class":38,"line":2239},[36,103785,103786],{"class":42},"    box_body_id ",[36,103788,47],{"class":46},[36,103790,103791],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,103793,103794],{"class":405},"\"red_box\"",[36,103796,63],{"class":42},[36,103798,103799,103802,103804,103807,103810],{"class":38,"line":2244},[36,103800,103801],{"class":42},"    site_id ",[36,103803,47],{"class":46},[36,103805,103806],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,103808,103809],{"class":405},"\"box_center\"",[36,103811,63],{"class":42},[36,103813,103814],{"class":38,"line":2258},[36,103815,2880],{"emptyLinePlaceholder":553},[36,103817,103818,103820,103823,103825,103827],{"class":38,"line":2263},[36,103819,3581],{"class":46},[36,103821,103822],{"class":42}," box_body_id ",[36,103824,1523],{"class":46},[36,103826,4573],{"class":53},[36,103828,4219],{"class":42},[36,103830,103831,103834,103837,103839,103842],{"class":38,"line":3057},[36,103832,103833],{"class":46},"        raise",[36,103835,103836],{"class":53}," RuntimeError",[36,103838,345],{"class":42},[36,103840,103841],{"class":405},"\"body red_box not found\"",[36,103843,63],{"class":42},[36,103845,103846,103848,103851,103853,103855],{"class":38,"line":3071},[36,103847,3581],{"class":46},[36,103849,103850],{"class":42}," site_id ",[36,103852,1523],{"class":46},[36,103854,4573],{"class":53},[36,103856,4219],{"class":42},[36,103858,103859,103861,103863,103865,103868],{"class":38,"line":3079},[36,103860,103833],{"class":46},[36,103862,103836],{"class":53},[36,103864,345],{"class":42},[36,103866,103867],{"class":405},"\"site box_center not found\"",[36,103869,63],{"class":42},[36,103871,103872],{"class":38,"line":3084},[36,103873,2880],{"emptyLinePlaceholder":553},[36,103875,103876,103878,103880,103882,103884,103886,103888],{"class":38,"line":3090},[36,103877,3681],{"class":46},[36,103879,101902],{"class":42},[36,103881,26524],{"class":46},[36,103883,32920],{"class":53},[36,103885,345],{"class":42},[36,103887,2202],{"class":53},[36,103889,31264],{"class":42},[36,103891,103892],{"class":38,"line":3096},[36,103893,101917],{"class":42},[36,103895,103896],{"class":38,"line":3101},[36,103897,2880],{"emptyLinePlaceholder":553},[36,103899,103900,103902,103904,103907],{"class":38,"line":8428},[36,103901,31777],{"class":53},[36,103903,345],{"class":42},[36,103905,103906],{"class":405},"\"simulation time:\"",[36,103908,101879],{"class":42},[36,103910,103911,103913,103915,103918],{"class":38,"line":8452},[36,103912,31777],{"class":53},[36,103914,345],{"class":42},[36,103916,103917],{"class":405},"\"box body position:\"",[36,103919,103920],{"class":42},", data.xpos[box_body_id].copy())\n",[36,103922,103923,103925,103927,103930],{"class":38,"line":8457},[36,103924,31777],{"class":53},[36,103926,345],{"class":42},[36,103928,103929],{"class":405},"\"site position:\"",[36,103931,103932],{"class":42},", data.site_xpos[site_id].copy())\n",[36,103934,103935,103937,103939,103942],{"class":38,"line":8463},[36,103936,31777],{"class":53},[36,103938,345],{"class":42},[36,103940,103941],{"class":405},"\"box qpos:\"",[36,103943,103944],{"class":42},", np.array(data.qpos))\n",[36,103946,103947],{"class":38,"line":8490},[36,103948,2880],{"emptyLinePlaceholder":553},[36,103950,103951],{"class":38,"line":8495},[36,103952,2880],{"emptyLinePlaceholder":553},[36,103954,103955,103957,103959,103961,103963],{"class":38,"line":8501},[36,103956,2011],{"class":46},[36,103958,31698],{"class":53},[36,103960,101960],{"class":46},[36,103962,101963],{"class":405},[36,103964,4219],{"class":42},[36,103966,103967],{"class":38,"line":8513},[36,103968,101970],{"class":42},[19,103970,103971],{},"保存为：",[26,103973,103975],{"className":24302,"code":103974,"language":24304,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,103976,103977],{"__ignoreMap":31},[36,103978,103979,103981],{"class":38,"line":39},[36,103980,101684],{"class":2443},[36,103982,103983],{"class":405}," ch2_xml_basic.py\n",[19,103985,102702],{},[26,103987,103989],{"className":24302,"code":103988,"language":24304,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,103990,103991],{"__ignoreMap":31},[36,103992,103993,103995],{"class":38,"line":39},[36,103994,30],{"class":2443},[36,103996,103983],{"class":405},[596,103998,101973],{"id":101973},[19,104000,104001],{},"用名字查找 body：",[26,104003,104005],{"className":28,"code":104004,"language":30,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,104006,104007],{"__ignoreMap":31},[36,104008,104009,104012,104014,104016,104018],{"class":38,"line":39},[36,104010,104011],{"class":42},"box_body_id ",[36,104013,47],{"class":46},[36,104015,103791],{"class":42},[36,104017,103794],{"class":405},[36,104019,63],{"class":42},[19,104021,104022],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104024,104025],{},"用名字查找 site：",[26,104027,104029],{"className":28,"code":104028,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,104030,104031],{"__ignoreMap":31},[36,104032,104033,104036,104038,104040,104042],{"class":38,"line":39},[36,104034,104035],{"class":42},"site_id ",[36,104037,47],{"class":46},[36,104039,103806],{"class":42},[36,104041,103809],{"class":405},[36,104043,63],{"class":42},[19,104045,104046,104047,104050,104051,104054],{},"注意第二个参数是对象类型。查 body 就用 ",[33,104048,104049],{},"mjOBJ_BODY","，查 site 就用 ",[33,104052,104053],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104056,104057],{},"读取世界坐标：",[26,104059,104061],{"className":28,"code":104060,"language":30,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,104062,104063,104068],{"__ignoreMap":31},[36,104064,104065],{"class":38,"line":39},[36,104066,104067],{"class":42},"data.xpos[box_body_id]\n",[36,104069,104070],{"class":38,"line":66},[36,104071,104072],{"class":42},"data.site_xpos[site_id]\n",[19,104074,104075,104078,104079,104082],{},[33,104076,104077],{},"xpos"," 是 body 的世界坐标，",[33,104080,104081],{},"site_xpos"," 是 site 的世界坐标。",[596,104084,102109],{"id":102109},[26,104086,104088],{"className":28,"code":104087,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,104089,104090,104096],{"__ignoreMap":31},[36,104091,104092,104094],{"class":38,"line":39},[36,104093,30871],{"class":46},[36,104095,101702],{"class":42},[36,104097,104098,104100,104102,104104],{"class":38,"line":66},[36,104099,30871],{"class":46},[36,104101,31858],{"class":42},[36,104103,31861],{"class":46},[36,104105,31864],{"class":42},[19,104107,104108,104109,104112,104113,104116,104117,833,104120,28866],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,104110,104111],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,104114,104115],{},"as np"," 是习惯写法，后面就可以写 ",[33,104118,104119],{},"np.array(...)",[33,104121,104122],{},"np.round(...)",[26,104124,104125],{"className":28,"code":101996,"language":30,"meta":31,"style":31},[33,104126,104127,104135,104139],{"__ignoreMap":31},[36,104128,104129,104131,104133],{"class":38,"line":39},[36,104130,101715],{"class":53},[36,104132,14044],{"class":46},[36,104134,101720],{"class":405},[36,104136,104137],{"class":38,"line":66},[36,104138,102011],{"class":405},[36,104140,104141],{"class":38,"line":73},[36,104142,96169],{"class":405},[19,104144,104145,104146,28866],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,104147,104148],{},"mujoco.MjModel.from_xml_string(XML)",[26,104150,104152],{"className":53544,"code":104151,"language":53546,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104153,104154],{"__ignoreMap":31},[36,104155,104156,104158,104160,104162,104164,104166,104168,104170,104173,104175,104177,104180,104182,104184,104187],{"class":38,"line":39},[36,104157,1523],{"class":42},[36,104159,103611],{"class":51777},[36,104161,15400],{"class":2443},[36,104163,47],{"class":42},[36,104165,103809],{"class":405},[36,104167,101507],{"class":2443},[36,104169,47],{"class":42},[36,104171,104172],{"class":405},"\"0 0 0\"",[36,104174,101537],{"class":2443},[36,104176,47],{"class":42},[36,104178,104179],{"class":405},"\"0.03\"",[36,104181,79244],{"class":2443},[36,104183,47],{"class":42},[36,104185,104186],{"class":405},"\"0 1 0 1\"",[36,104188,101545],{"class":42},[19,104190,104191,104193,104194,104197,104198,104200,104201,104204],{},[33,104192,103611],{}," 是标记点。",[33,104195,104196],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,104199,103571],{}," 表示显示出来的小球大小。",[33,104202,104203],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,104206,104207],{"className":28,"code":104004,"language":30,"meta":31,"style":31},[33,104208,104209],{"__ignoreMap":31},[36,104210,104211,104213,104215,104217,104219],{"class":38,"line":39},[36,104212,104011],{"class":42},[36,104214,47],{"class":46},[36,104216,103791],{"class":42},[36,104218,103794],{"class":405},[36,104220,63],{"class":42},[19,104222,104223,104224,104226],{},"这行的作用是：根据名字 ",[33,104225,103794],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104228,104229],{},"拆开看：",[579,104231,104232,104238,104243,104249],{},[582,104233,104234,104237],{},[33,104235,104236],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[582,104239,104240,104242],{},[33,104241,102486],{}," 是被查询的模型。",[582,104244,104245,104248],{},[33,104246,104247],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[582,104250,104251,104253],{},[33,104252,103794],{}," 是 XML 里写的名字。",[26,104255,104256],{"className":28,"code":104028,"language":30,"meta":31,"style":31},[33,104257,104258],{"__ignoreMap":31},[36,104259,104260,104262,104264,104266,104268],{"class":38,"line":39},[36,104261,104035],{"class":42},[36,104263,47],{"class":46},[36,104265,103806],{"class":42},[36,104267,103809],{"class":405},[36,104269,63],{"class":42},[19,104271,104272,104273,28866],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,104274,103809],{},[26,104276,104278],{"className":28,"code":104277,"language":30,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,104279,104280,104292],{"__ignoreMap":31},[36,104281,104282,104284,104286,104288,104290],{"class":38,"line":39},[36,104283,2011],{"class":46},[36,104285,103822],{"class":42},[36,104287,1523],{"class":46},[36,104289,4573],{"class":53},[36,104291,4219],{"class":42},[36,104293,104294,104297,104299,104301,104303],{"class":38,"line":66},[36,104295,104296],{"class":46},"    raise",[36,104298,103836],{"class":53},[36,104300,345],{"class":42},[36,104302,103841],{"class":405},[36,104304,63],{"class":42},[19,104306,104307,104309,104310,104313,104314,104317,104318,104321],{},[33,104308,2011],{}," 是条件判断。",[33,104311,104312],{},"mj_name2id"," 找不到对象时会返回 ",[33,104315,104316],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,104319,104320],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,104323,104325],{"className":28,"code":104324,"language":30,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,104326,104327,104343],{"__ignoreMap":31},[36,104328,104329,104331,104333,104335,104337,104339,104341],{"class":38,"line":39},[36,104330,3505],{"class":46},[36,104332,101902],{"class":42},[36,104334,26524],{"class":46},[36,104336,32920],{"class":53},[36,104338,345],{"class":42},[36,104340,2202],{"class":53},[36,104342,31264],{"class":42},[36,104344,104345],{"class":38,"line":66},[36,104346,102100],{"class":42},[19,104348,104349],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,104351,104353],{"className":28,"code":104352,"language":30,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,104354,104355],{"__ignoreMap":31},[36,104356,104357,104359,104361,104363],{"class":38,"line":39},[36,104358,30894],{"class":53},[36,104360,345],{"class":42},[36,104362,103917],{"class":405},[36,104364,103920],{"class":42},[19,104366,104367,104369,104370,104373],{},[33,104368,101480],{}," 保存所有 body 的世界坐标。",[33,104371,104372],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,104375,104377],{"className":28,"code":104376,"language":30,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,104378,104379],{"__ignoreMap":31},[36,104380,104381,104383,104385,104387],{"class":38,"line":39},[36,104382,30894],{"class":53},[36,104384,345],{"class":42},[36,104386,103929],{"class":405},[36,104388,103932],{"class":42},[19,104390,104391,104394,104395,104397],{},[33,104392,104393],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,104396,103378],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,104399,104401],{"className":28,"code":104400,"language":30,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,104402,104403],{"__ignoreMap":31},[36,104404,104405,104407,104409,104411],{"class":38,"line":39},[36,104406,30894],{"class":53},[36,104408,345],{"class":42},[36,104410,103941],{"class":405},[36,104412,103944],{"class":42},[19,104414,104415,104416,104419],{},"这里打印广义位置数组。",[33,104417,104418],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104421,102717],{"id":102716},[19,104423,104424,104425,104428,104429,28866],{},"程序会输出 ",[33,104426,104427],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,104430,104431],{},"qpos",[19,104433,104434,104436,104437,104440,104441,104444],{},[33,104435,104372],{}," 是 body 的世界坐标位置。",[33,104438,104439],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,104442,104443],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104446,82699,104447,83007,104449,104451],{},[33,104448,103378],{},[33,104450,104196],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104453,104454],{},"如果你把 site 改成：",[26,104456,104458],{"className":53544,"code":104457,"language":53546,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104459,104460],{"__ignoreMap":31},[36,104461,104462,104464,104466,104468,104470,104473,104475,104477,104480,104482,104484,104486,104488,104490,104492],{"class":38,"line":39},[36,104463,1523],{"class":42},[36,104465,103611],{"class":51777},[36,104467,15400],{"class":2443},[36,104469,47],{"class":42},[36,104471,104472],{"class":405},"\"box_top\"",[36,104474,101507],{"class":2443},[36,104476,47],{"class":42},[36,104478,104479],{"class":405},"\"0 0 0.15\"",[36,104481,101537],{"class":2443},[36,104483,47],{"class":42},[36,104485,104179],{"class":405},[36,104487,79244],{"class":2443},[36,104489,47],{"class":42},[36,104491,104186],{"class":405},[36,104493,101545],{"class":42},[19,104495,104496,104497,104500],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,104498,104499],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104502,102749],{"id":102748},[579,104504,104505,104514,104517,104524,104530,104541],{},[582,104506,102812,104507,104509,104510,102815,104512,28866],{},[33,104508,103382],{}," 的初始高度从 ",[33,104511,54],{},[33,104513,96],{},[582,104515,104516],{},"重新运行程序。",[582,104518,104519,104520,104523],{},"观察 ",[33,104521,104522],{},"box qpos"," 和最终位置是否变化。",[582,104525,104526,104527,104529],{},"故意把 ",[33,104528,103611],{}," 名称改错，确认程序能报错。",[582,104531,102812,104532,104534,104535,102815,104537,104540],{},[33,104533,101521],{}," 的颜色 ",[33,104536,102433],{},[33,104538,104539],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[582,104542,102812,104543,83007,104545,102815,104548,104551,104552,104554],{},[33,104544,103378],{},[33,104546,104547],{},"pos",[33,104549,104550],{},"0 0 0.2","，观察 ",[33,104553,104499],{}," 如何变化。",[14,104556,102854],{"id":102853},[596,104558,104560],{"id":104559},"xml-error-schema-violation",[33,104561,104562],{},"XML Error: Schema violation",[19,104564,104565],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[596,104567,104569,81767,104571],{"id":104568},"mj_name2id-返回-1",[33,104570,104312],{},[33,104572,104316],{},[19,104574,104575,104576,104579],{},"说明名字没有找到。检查 XML 中 ",[33,104577,104578],{},"name=\"...\"","，并确认对象类型正确。",[596,104581,104582],{"id":104582},"物体不下落",[19,104584,102924],{},[579,104586,104587,104592,104597],{},[582,104588,104589,104590],{},"body 是否有 ",[33,104591,102021],{},[582,104593,104594,104595],{},"gravity 是否为 ",[33,104596,102990],{},[582,104598,104599,104600,104602],{},"body 是否被固定在 ",[33,104601,102242],{}," 中",[596,104604,104605],{"id":104605},"坐标看起来不符合预期",[19,104607,104608],{},"先区分两种坐标：",[758,104610,104611,104620],{},[761,104612,104613],{},[764,104614,104615,104618],{},[767,104616,104617],{"align":24216},"坐标",[767,104619,101101],{"align":24216},[805,104621,104622,104632],{},[764,104623,104624,104629],{},[810,104625,104626,104627],{"align":24216},"XML 里的 ",[33,104628,104547],{},[810,104630,104631],{"align":24216},"相对父 body 的局部坐标",[764,104633,104634,104640],{},[810,104635,104636,25459,104638],{"align":24216},[33,104637,101480],{},[33,104639,104393],{},[810,104641,104642],{"align":24216},"仿真更新后的世界坐标",[19,104644,104645,104646,104648,104649,83016,104652,104654],{},"如果你修改了 ",[33,104647,101471],{},"，但还没调用 ",[33,104650,104651],{},"mj_forward",[33,104653,101616],{},"，世界坐标可能还没有更新。",[14,104656,103008],{"id":103007},[19,104658,104659],{},"MJCF 建模先掌握四件事：",[579,104661,104662,104667,104672,104677],{},[582,104663,104664,104666],{},[33,104665,52277],{}," 表示刚体层级。",[582,104668,104669,104671],{},[33,104670,101521],{}," 表示形状、碰撞和质量。",[582,104673,104674,104676],{},[33,104675,103357],{}," 决定 body 能不能动、怎么动。",[582,104678,104679,104681],{},[33,104680,103611],{}," 用来标记关键点，方便 Python 读取位置。",[19,104683,104684],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[539,104686,104687],{},"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":31,"searchDepth":66,"depth":66,"links":104689},[104690,104691,104692,104698,104702,104703,104704,104711],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":104693},[104694,104695,104696,104697],{"id":103361,"depth":73,"text":103361},{"id":103475,"depth":73,"text":103475},{"id":103501,"depth":73,"text":103502},{"id":103605,"depth":73,"text":103606},{"id":101653,"depth":66,"text":101654,"children":104699},[104700,104701],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":104705},[104706,104707,104709,104710],{"id":104559,"depth":73,"text":104562},{"id":104568,"depth":73,"text":104708},"mj_name2id 返回 -1",{"id":104582,"depth":73,"text":104582},{"id":104605,"depth":73,"text":104605},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103055,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104718,"title":104719,"body":104720,"description":31,"extension":551,"meta":106215,"navigation":553,"path":106216,"seo":106217,"stem":106218,"__hash__":106219},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104721,"toc":106187},[104722,104725,104727,104730,104733,104771,104774,104780,104783,104785,104787,104814,104816,104830,104832,104873,104875,104899,104901,104904,104913,104922,104925,104934,104942,104951,104954,104964,104967,105019,105026,105032,105040,105088,105091,105110,105113,105121,105125,105134,105167,105169,105517,105519,105531,105533,105544,105546,105549,105570,105576,105579,105604,105614,105617,105625,105628,105631,105652,105663,105665,105685,105688,105709,105718,105737,105743,105768,105771,105785,105792,105816,105819,105827,105836,105852,105864,105872,105881,105883,105886,105910,105915,105918,105940,105942,105981,105983,105990,105992,106000,106003,106006,106018,106059,106066,106077,106084,106087,106136,106139,106142,106148,106150,106155,106181,106184],[10,104723,104719],{"id":104724},"_3python-控制接口读取状态与推进仿真",[14,104726,101048],{"id":101047},[19,104728,104729],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104731,104732],{},"你将学习:",[579,104734,104735,104740,104745,104749,104754,104765],{},[582,104736,104737],{},[33,104738,104739],{},"MjModel.from_xml_string",[582,104741,104742],{},[33,104743,104744],{},"MjData(model)",[582,104746,104747],{},[33,104748,101616],{},[582,104750,104751],{},[33,104752,104753],{},"mj_resetData",[582,104755,104756,104757,833,104759,833,104762],{},"读取 ",[33,104758,104431],{},[33,104760,104761],{},"qvel",[33,104763,104764],{},"ctrl",[582,104766,104767,104768],{},"使用 ",[33,104769,104770],{},"model.opt.timestep",[19,104772,104773],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,104775,104778],{"className":104776,"code":104777,"language":5667,"meta":31},[5665],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,104779,104777],{"__ignoreMap":31},[19,104781,104782],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104784,101171],{"id":101170},[19,104786,101174],{},[26,104788,104790],{"className":24302,"code":104789,"language":24304,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[33,104791,104792],{"__ignoreMap":31},[36,104793,104794,104796,104798,104800,104802,104805,104807,104809,104811],{"class":38,"line":39},[36,104795,25057],{"class":2443},[36,104797,26796],{"class":405},[36,104799,24314],{"class":405},[36,104801,26881],{"class":53},[36,104803,104804],{"class":405}," python3",[36,104806,101199],{"class":405},[36,104808,102902],{"class":405},[36,104810,101215],{"class":405},[36,104812,104813],{"class":405}," glfw\n",[19,104815,103220],{},[26,104817,104818],{"className":24302,"code":101320,"language":24304,"meta":31,"style":31},[33,104819,104820],{"__ignoreMap":31},[36,104821,104822,104824,104826,104828],{"class":38,"line":39},[36,104823,24311],{"class":2443},[36,104825,24314],{"class":405},[36,104827,101331],{"class":405},[36,104829,101334],{"class":405},[19,104831,103237],{},[26,104833,104835],{"className":24302,"code":104834,"language":24304,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[33,104836,104837,104854,104863],{"__ignoreMap":31},[36,104838,104839,104841,104843,104845,104848,104850,104852],{"class":38,"line":39},[36,104840,30811],{"class":2443},[36,104842,29657],{"class":405},[36,104844,25596],{"class":53},[36,104846,104847],{"class":405}," mujoco-python-api",[36,104849,101376],{"class":405},[36,104851,101379],{"class":53},[36,104853,101382],{"class":53},[36,104855,104856,104858,104860],{"class":38,"line":66},[36,104857,30811],{"class":2443},[36,104859,101389],{"class":405},[36,104861,104862],{"class":405}," mujoco-python-api\n",[36,104864,104865,104867,104869,104871],{"class":38,"line":73},[36,104866,24311],{"class":2443},[36,104868,24314],{"class":405},[36,104870,101331],{"class":405},[36,104872,101334],{"class":405},[19,104874,101405],{},[579,104876,104877,104884,104893],{},[582,104878,104879,101419,104881,104883],{},[33,104880,101076],{},[33,104882,101081],{}," 是官方 Python bindings 的类名。",[582,104885,104886,104887,104890,104891,28866],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,104888,104889],{},"mjModel"," 在 Python 中是 ",[33,104892,101110],{},[582,104894,104895,104896,28866],{},"不要使用 ",[33,104897,104898],{},"sim = mujoco_py.MjSim(...)",[14,104900,101446],{"id":101445},[19,104902,104903],{},"仿真推进核心代码:",[26,104905,104907],{"className":28,"code":104906,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,104908,104909],{"__ignoreMap":31},[36,104910,104911],{"class":38,"line":39},[36,104912,104906],{"class":42},[19,104914,104915,104916,833,104918,833,104920,28866],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,104917,101471],{},[33,104919,101474],{},[33,104921,101468],{},[19,104923,104924],{},"重置仿真:",[26,104926,104928],{"className":28,"code":104927,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,104929,104930],{"__ignoreMap":31},[36,104931,104932],{"class":38,"line":39},[36,104933,104927],{"class":42},[19,104935,104936,104937,83016,104939,104941],{},"如果手动修改了 ",[33,104938,101471],{},[33,104940,101474],{},"，通常应调用:",[26,104943,104945],{"className":28,"code":104944,"language":30,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,104946,104947],{"__ignoreMap":31},[36,104948,104949],{"class":38,"line":39},[36,104950,104944],{"class":42},[19,104952,104953],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[596,104955,104957,833,104959,833,104961,104963],{"id":104956},"qposqvelctrl-是什么",[33,104958,104431],{},[33,104960,104761],{},[33,104962,104764],{}," 是什么",[19,104965,104966],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[758,104968,104969,104981],{},[761,104970,104971],{},[764,104972,104973,104976,104978],{},[767,104974,104975],{"align":24216},"字段",[767,104977,101101],{"align":24216},[767,104979,104980],{"align":24216},"谁来修改",[805,104982,104983,104995,105007],{},[764,104984,104985,104989,104992],{},[810,104986,104987],{"align":24216},[33,104988,101471],{},[810,104990,104991],{"align":24216},"广义位置，例如小车位置、关节角、自由物体位置姿态",[810,104993,104994],{"align":24216},"MuJoCo 更新，也可以手动设置初始状态",[764,104996,104997,105001,105004],{},[810,104998,104999],{"align":24216},[33,105000,101474],{},[810,105002,105003],{"align":24216},"广义速度，例如小车速度、关节角速度",[810,105005,105006],{"align":24216},"MuJoCo 更新，也可以手动清零",[764,105008,105009,105013,105016],{},[810,105010,105011],{"align":24216},[33,105012,101477],{},[810,105014,105015],{"align":24216},"actuator 的控制输入",[810,105017,105018],{"align":24216},"主要由你的控制代码写入",[19,105020,9505,105021,101419,105023,105025],{},[33,105022,104431],{},[33,105024,104761],{}," 不一定同维。自由刚体就是典型例子：",[26,105027,105030],{"className":105028,"code":105029,"language":5667,"meta":31},[5665],"freejoint: qpos 7 维，qvel 6 维\n",[33,105031,105029],{"__ignoreMap":31},[596,105033,105035,101419,105037,105039],{"id":105034},"mj_step-和-mj_forward-的区别",[33,105036,101616],{},[33,105038,104651],{}," 的区别",[758,105041,105042,105055],{},[761,105043,105044],{},[764,105045,105046,105049,105052],{},[767,105047,105048],{"align":24216},"函数",[767,105050,105051],{"align":24216},"是否推进时间",[767,105053,105054],{"align":24216},"什么时候用",[805,105056,105057,105070],{},[764,105058,105059,105064,105067],{},[810,105060,105061],{"align":24216},[33,105062,105063],{},"mj_step(model, data)",[810,105065,105066],{"align":24216},"是",[810,105068,105069],{"align":24216},"正常仿真循环，每调用一次前进一步",[764,105071,105072,105077,105080],{},[810,105073,105074],{"align":24216},[33,105075,105076],{},"mj_forward(model, data)",[810,105078,105079],{"align":24216},"否",[810,105081,105082,105083,833,105085,105087],{"align":24216},"手动改了 ",[33,105084,104431],{},[33,105086,104761],{}," 后，刷新派生量",[19,105089,105090],{},"例如你写：",[26,105092,105094],{"className":28,"code":105093,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,105095,105096],{"__ignoreMap":31},[36,105097,105098,105101,105103,105105,105107],{"class":38,"line":39},[36,105099,105100],{"class":42},"data.qpos[",[36,105102,96],{"class":53},[36,105104,4923],{"class":42},[36,105106,47],{"class":46},[36,105108,105109],{"class":53}," 2.0\n",[19,105111,105112],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,105114,105115],{"className":28,"code":104944,"language":30,"meta":31,"style":31},[33,105116,105117],{"__ignoreMap":31},[36,105118,105119],{"class":38,"line":39},[36,105120,104944],{"class":42},[596,105122,105124],{"id":105123},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105126,105127,105130,105131,105133],{},[33,105128,105129],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,105132,33878],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,105135,105137],{"className":28,"code":105136,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[33,105138,105139,105143,105153,105163],{"__ignoreMap":31},[36,105140,105141],{"class":38,"line":39},[36,105142,104927],{"class":42},[36,105144,105145,105148,105150],{"class":38,"line":66},[36,105146,105147],{"class":42},"data.qpos[:] ",[36,105149,47],{"class":46},[36,105151,105152],{"class":42}," random_qpos\n",[36,105154,105155,105158,105160],{"class":38,"line":73},[36,105156,105157],{"class":42},"data.qvel[:] ",[36,105159,47],{"class":46},[36,105161,105162],{"class":53}," 0.0\n",[36,105164,105165],{"class":38,"line":79},[36,105166,104944],{"class":42},[14,105168,101654],{"id":101653},[26,105170,105172],{"className":28,"code":105171,"language":30,"meta":31,"style":31},"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",[33,105173,105174,105180,105190,105194,105198,105206,105211,105215,105219,105223,105228,105232,105237,105242,105247,105251,105255,105259,105263,105267,105271,105290,105297,105309,105320,105336,105352,105356,105360,105372,105384,105392,105396,105407,105411,105427,105431,105435,105444,105448,105453,105462,105466,105479,105484,105493,105497,105501,105513],{"__ignoreMap":31},[36,105175,105176,105178],{"class":38,"line":39},[36,105177,30871],{"class":46},[36,105179,101702],{"class":42},[36,105181,105182,105184,105186,105188],{"class":38,"line":66},[36,105183,30871],{"class":46},[36,105185,31858],{"class":42},[36,105187,31861],{"class":46},[36,105189,31864],{"class":42},[36,105191,105192],{"class":38,"line":73},[36,105193,2880],{"emptyLinePlaceholder":553},[36,105195,105196],{"class":38,"line":79},[36,105197,2880],{"emptyLinePlaceholder":553},[36,105199,105200,105202,105204],{"class":38,"line":85},[36,105201,101715],{"class":53},[36,105203,14044],{"class":46},[36,105205,101720],{"class":405},[36,105207,105208],{"class":38,"line":419},[36,105209,105210],{"class":405},"\u003Cmujoco model=\"state_api\">\n",[36,105212,105213],{"class":38,"line":425},[36,105214,101730],{"class":405},[36,105216,105217],{"class":38,"line":431},[36,105218,2880],{"emptyLinePlaceholder":553},[36,105220,105221],{"class":38,"line":437},[36,105222,101739],{"class":405},[36,105224,105225],{"class":38,"line":443},[36,105226,105227],{"class":405},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,105229,105230],{"class":38,"line":2092},[36,105231,2880],{"emptyLinePlaceholder":553},[36,105233,105234],{"class":38,"line":2097},[36,105235,105236],{"class":405},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,105238,105239],{"class":38,"line":2103},[36,105240,105241],{"class":405},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,105243,105244],{"class":38,"line":2108},[36,105245,105246],{"class":405},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,105248,105249],{"class":38,"line":2122},[36,105250,101768],{"class":405},[36,105252,105253],{"class":38,"line":2127},[36,105254,101773],{"class":405},[36,105256,105257],{"class":38,"line":2133},[36,105258,101778],{"class":405},[36,105260,105261],{"class":38,"line":2154},[36,105262,96169],{"class":405},[36,105264,105265],{"class":38,"line":2159},[36,105266,2880],{"emptyLinePlaceholder":553},[36,105268,105269],{"class":38,"line":2173},[36,105270,2880],{"emptyLinePlaceholder":553},[36,105272,105273,105275,105278,105281,105283,105286,105288],{"class":38,"line":2178},[36,105274,32424],{"class":46},[36,105276,105277],{"class":2443}," print_state",[36,105279,105280],{"class":42},"(prefix: ",[36,105282,1783],{"class":53},[36,105284,105285],{"class":42},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,105287,96157],{"class":53},[36,105289,4219],{"class":42},[36,105291,105292,105294],{"class":38,"line":2207},[36,105293,31777],{"class":53},[36,105295,105296],{"class":42},"(prefix)\n",[36,105298,105299,105301,105303,105306],{"class":38,"line":2212},[36,105300,31777],{"class":53},[36,105302,345],{"class":42},[36,105304,105305],{"class":405},"\"  timestep:\"",[36,105307,105308],{"class":42},", model.opt.timestep)\n",[36,105310,105311,105313,105315,105318],{"class":38,"line":2229},[36,105312,31777],{"class":53},[36,105314,345],{"class":42},[36,105316,105317],{"class":405},"\"  time:\"",[36,105319,101879],{"class":42},[36,105321,105322,105324,105326,105329,105332,105334],{"class":38,"line":2234},[36,105323,31777],{"class":53},[36,105325,345],{"class":42},[36,105327,105328],{"class":405},"\"  qpos:\"",[36,105330,105331],{"class":42},", np.round(data.qpos.copy(), ",[36,105333,912],{"class":53},[36,105335,370],{"class":42},[36,105337,105338,105340,105342,105345,105348,105350],{"class":38,"line":2239},[36,105339,31777],{"class":53},[36,105341,345],{"class":42},[36,105343,105344],{"class":405},"\"  qvel:\"",[36,105346,105347],{"class":42},", np.round(data.qvel.copy(), ",[36,105349,912],{"class":53},[36,105351,370],{"class":42},[36,105353,105354],{"class":38,"line":2244},[36,105355,2880],{"emptyLinePlaceholder":553},[36,105357,105358],{"class":38,"line":2258},[36,105359,2880],{"emptyLinePlaceholder":553},[36,105361,105362,105364,105366,105368,105370],{"class":38,"line":2263},[36,105363,32424],{"class":46},[36,105365,2453],{"class":2443},[36,105367,101799],{"class":42},[36,105369,96157],{"class":53},[36,105371,4219],{"class":42},[36,105373,105374,105376,105378,105380,105382],{"class":38,"line":3057},[36,105375,101808],{"class":42},[36,105377,47],{"class":46},[36,105379,101813],{"class":42},[36,105381,101715],{"class":53},[36,105383,63],{"class":42},[36,105385,105386,105388,105390],{"class":38,"line":3071},[36,105387,101822],{"class":42},[36,105389,47],{"class":46},[36,105391,101827],{"class":42},[36,105393,105394],{"class":38,"line":3079},[36,105395,2880],{"emptyLinePlaceholder":553},[36,105397,105398,105401,105404],{"class":38,"line":3084},[36,105399,105400],{"class":42},"    print_state(",[36,105402,105403],{"class":405},"\"initial\"",[36,105405,105406],{"class":42},", model, data)\n",[36,105408,105409],{"class":38,"line":3090},[36,105410,2880],{"emptyLinePlaceholder":553},[36,105412,105413,105415,105417,105419,105421,105423,105425],{"class":38,"line":3096},[36,105414,3681],{"class":46},[36,105416,101902],{"class":42},[36,105418,26524],{"class":46},[36,105420,32920],{"class":53},[36,105422,345],{"class":42},[36,105424,1269],{"class":53},[36,105426,31264],{"class":42},[36,105428,105429],{"class":38,"line":3101},[36,105430,101917],{"class":42},[36,105432,105433],{"class":38,"line":8428},[36,105434,2880],{"emptyLinePlaceholder":553},[36,105436,105437,105439,105442],{"class":38,"line":8452},[36,105438,105400],{"class":42},[36,105440,105441],{"class":405},"\"after 50 steps\"",[36,105443,105406],{"class":42},[36,105445,105446],{"class":38,"line":8457},[36,105447,2880],{"emptyLinePlaceholder":553},[36,105449,105450],{"class":38,"line":8463},[36,105451,105452],{"class":42},"    mujoco.mj_resetData(model, data)\n",[36,105454,105455,105457,105460],{"class":38,"line":8490},[36,105456,105400],{"class":42},[36,105458,105459],{"class":405},"\"after reset\"",[36,105461,105406],{"class":42},[36,105463,105464],{"class":38,"line":8495},[36,105465,2880],{"emptyLinePlaceholder":553},[36,105467,105468,105471,105473,105475,105477],{"class":38,"line":8501},[36,105469,105470],{"class":42},"    data.qpos[",[36,105472,96],{"class":53},[36,105474,4923],{"class":42},[36,105476,47],{"class":46},[36,105478,105109],{"class":53},[36,105480,105481],{"class":38,"line":8513},[36,105482,105483],{"class":42},"    mujoco.mj_forward(model, data)\n",[36,105485,105486,105488,105491],{"class":38,"line":8525},[36,105487,105400],{"class":42},[36,105489,105490],{"class":405},"\"after manual qpos edit\"",[36,105492,105406],{"class":42},[36,105494,105495],{"class":38,"line":8537},[36,105496,2880],{"emptyLinePlaceholder":553},[36,105498,105499],{"class":38,"line":10196},[36,105500,2880],{"emptyLinePlaceholder":553},[36,105502,105503,105505,105507,105509,105511],{"class":38,"line":10221},[36,105504,2011],{"class":46},[36,105506,31698],{"class":53},[36,105508,101960],{"class":46},[36,105510,101963],{"class":405},[36,105512,4219],{"class":42},[36,105514,105515],{"class":38,"line":10244},[36,105516,101970],{"class":42},[19,105518,103971],{},[26,105520,105522],{"className":24302,"code":105521,"language":24304,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,105523,105524],{"__ignoreMap":31},[36,105525,105526,105528],{"class":38,"line":39},[36,105527,101684],{"class":2443},[36,105529,105530],{"class":405}," ch3_python_state.py\n",[19,105532,102702],{},[26,105534,105536],{"className":24302,"code":105535,"language":24304,"meta":31,"style":31},"python ch3_python_state.py\n",[33,105537,105538],{"__ignoreMap":31},[36,105539,105540,105542],{"class":38,"line":39},[36,105541,30],{"class":2443},[36,105543,105530],{"class":405},[596,105545,101973],{"id":101973},[19,105547,105548],{},"打印状态的函数：",[26,105550,105552],{"className":28,"code":105551,"language":30,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,105553,105554],{"__ignoreMap":31},[36,105555,105556,105558,105560,105562,105564,105566,105568],{"class":38,"line":39},[36,105557,32424],{"class":46},[36,105559,105277],{"class":2443},[36,105561,105280],{"class":42},[36,105563,1783],{"class":53},[36,105565,105285],{"class":42},[36,105567,96157],{"class":53},[36,105569,4219],{"class":42},[19,105571,105572,105573,105575],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,105574,33878],{}," 里发生了什么。",[19,105577,105578],{},"推进 50 步：",[26,105580,105582],{"className":28,"code":105581,"language":30,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,105583,105584,105600],{"__ignoreMap":31},[36,105585,105586,105588,105590,105592,105594,105596,105598],{"class":38,"line":39},[36,105587,3505],{"class":46},[36,105589,101902],{"class":42},[36,105591,26524],{"class":46},[36,105593,32920],{"class":53},[36,105595,345],{"class":42},[36,105597,1269],{"class":53},[36,105599,31264],{"class":42},[36,105601,105602],{"class":38,"line":66},[36,105603,102100],{"class":42},[19,105605,105606,105607,105610,105611,105613],{},"由于 ",[33,105608,105609],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,105612,35806],{}," 秒。",[19,105615,105616],{},"重置：",[26,105618,105619],{"className":28,"code":104927,"language":30,"meta":31,"style":31},[33,105620,105621],{"__ignoreMap":31},[36,105622,105623],{"class":38,"line":39},[36,105624,104927],{"class":42},[19,105626,105627],{},"这会把时间、位置、速度恢复到初始状态。",[19,105629,105630],{},"手动改高度：",[26,105632,105634],{"className":28,"code":105633,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,105635,105636,105648],{"__ignoreMap":31},[36,105637,105638,105640,105642,105644,105646],{"class":38,"line":39},[36,105639,105100],{"class":42},[36,105641,96],{"class":53},[36,105643,4923],{"class":42},[36,105645,47],{"class":46},[36,105647,105109],{"class":53},[36,105649,105650],{"class":38,"line":66},[36,105651,104944],{"class":42},[19,105653,105654,105655,105658,105659,105662],{},"这个例子里 ",[33,105656,105657],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,105660,105661],{},"2.0"," 表示把小球放到更高的位置。",[596,105664,102109],{"id":102109},[26,105666,105667],{"className":28,"code":105551,"language":30,"meta":31,"style":31},[33,105668,105669],{"__ignoreMap":31},[36,105670,105671,105673,105675,105677,105679,105681,105683],{"class":38,"line":39},[36,105672,32424],{"class":46},[36,105674,105277],{"class":2443},[36,105676,105280],{"class":42},[36,105678,1783],{"class":53},[36,105680,105285],{"class":42},[36,105682,96157],{"class":53},[36,105684,4219],{"class":42},[19,105686,105687],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[579,105689,105690,105699,105704],{},[582,105691,105692,105695,105696,105698],{},[33,105693,105694],{},"prefix","：一段文字，比如 ",[33,105697,105403],{},"，用来说明现在打印的是哪个阶段。",[582,105700,105701,105703],{},[33,105702,102486],{},"：MuJoCo 模型。",[582,105705,105706,105708],{},[33,105707,33878],{},"：MuJoCo 当前状态。",[19,105710,105711,833,105714,105717],{},[33,105712,105713],{},"prefix: str",[33,105715,105716],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,105719,105721],{"className":28,"code":105720,"language":30,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,105722,105723],{"__ignoreMap":31},[36,105724,105725,105727,105729,105731,105733,105735],{"class":38,"line":39},[36,105726,30894],{"class":53},[36,105728,345],{"class":42},[36,105730,105328],{"class":405},[36,105732,105331],{"class":42},[36,105734,912],{"class":53},[36,105736,370],{"class":42},[19,105738,105739,105742],{},[33,105740,105741],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,105744,105746],{"className":28,"code":105745,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,105747,105748,105760],{"__ignoreMap":31},[36,105749,105750,105752,105754,105756,105758],{"class":38,"line":39},[36,105751,102035],{"class":42},[36,105753,47],{"class":46},[36,105755,101813],{"class":42},[36,105757,101715],{"class":53},[36,105759,63],{"class":42},[36,105761,105762,105764,105766],{"class":38,"line":66},[36,105763,102059],{"class":42},[36,105765,47],{"class":46},[36,105767,101827],{"class":42},[19,105769,105770],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,105772,105774],{"className":28,"code":105773,"language":30,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,105775,105776],{"__ignoreMap":31},[36,105777,105778,105781,105783],{"class":38,"line":39},[36,105779,105780],{"class":42},"print_state(",[36,105782,105403],{"class":405},[36,105784,105406],{"class":42},[19,105786,105787,105788,105791],{},"调用刚才定义的 ",[33,105789,105790],{},"print_state"," 函数，打印初始状态。",[26,105793,105794],{"className":28,"code":105581,"language":30,"meta":31,"style":31},[33,105795,105796,105812],{"__ignoreMap":31},[36,105797,105798,105800,105802,105804,105806,105808,105810],{"class":38,"line":39},[36,105799,3505],{"class":46},[36,105801,101902],{"class":42},[36,105803,26524],{"class":46},[36,105805,32920],{"class":53},[36,105807,345],{"class":42},[36,105809,1269],{"class":53},[36,105811,31264],{"class":42},[36,105813,105814],{"class":38,"line":66},[36,105815,102100],{"class":42},[19,105817,105818],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,105820,105821],{"className":28,"code":104927,"language":30,"meta":31,"style":31},[33,105822,105823],{"__ignoreMap":31},[36,105824,105825],{"class":38,"line":39},[36,105826,104927],{"class":42},[19,105828,105829,105830,105832,105833,105835],{},"重置 ",[33,105831,33878],{},"。注意它不会重新创建 ",[33,105834,102486],{},"，因为模型结构没有变，只是状态回到初始值。",[26,105837,105838],{"className":28,"code":105093,"language":30,"meta":31,"style":31},[33,105839,105840],{"__ignoreMap":31},[36,105841,105842,105844,105846,105848,105850],{"class":38,"line":39},[36,105843,105100],{"class":42},[36,105845,96],{"class":53},[36,105847,4923],{"class":42},[36,105849,47],{"class":46},[36,105851,105109],{"class":53},[19,105853,105854,105855,833,105858,833,105861,105863],{},"这行是“手动改状态”。在 freejoint 中，",[33,105856,105857],{},"qpos[0]",[33,105859,105860],{},"qpos[1]",[33,105862,105657],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,105865,105866],{"className":28,"code":104944,"language":30,"meta":31,"style":31},[33,105867,105868],{"__ignoreMap":31},[36,105869,105870],{"class":38,"line":39},[36,105871,104944],{"class":42},[19,105873,105874,105875,105877,105878,105880],{},"手动改完 ",[33,105876,104431],{}," 后，调用 ",[33,105879,104651],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105882,102717],{"id":102716},[19,105884,105885],{},"你会看到:",[579,105887,105888,105893,105898,105901],{},[582,105889,105890,105891],{},"初始时间为 ",[33,105892,812],{},[582,105894,105895,105896],{},"50 步后时间约为 ",[33,105897,35806],{},[582,105899,105900],{},"reset 后状态恢复",[582,105902,105903,105904,105907,105908],{},"手动修改 ",[33,105905,105906],{},"data.qpos[2]"," 后，小球高度变为 ",[33,105909,105661],{},[19,105911,105912,105914],{},[33,105913,105657],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105916,105917],{},"输出里可以重点看三件事：",[579,105919,105920,105928,105933],{},[582,105921,105922,105924,105925,105927],{},[33,105923,2867],{}," 是否随着 ",[33,105926,101616],{}," 增加。",[582,105929,105930,105932],{},[33,105931,104431],{}," 的 z 坐标是否因为下落而变化。",[582,105934,105935,105937,105938,28866],{},[33,105936,104753],{}," 后时间是否回到 ",[33,105939,812],{},[14,105941,102749],{"id":102748},[579,105943,105944,105950,105956,105962,105965,105974],{},[582,105945,105946,105947,28866],{},"修改 timestep 为 ",[33,105948,105949],{},"0.005",[582,105951,105952,105953,28866],{},"重新运行，检查 50 步后时间是否约为 ",[33,105954,105955],{},"0.25",[582,105957,105958,105959,28866],{},"修改重力为 ",[33,105960,105961],{},"0 0 -1.0",[582,105963,105964],{},"观察小球下降速度是否变慢。",[582,105966,102812,105967,102815,105970,105973],{},[33,105968,105969],{},"data.qpos[2] = 2.0",[33,105971,105972],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[582,105975,105976,105977,105980],{},"注释掉 ",[33,105978,105979],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105982,102854],{"id":102853},[596,105984,105986,105987,105989],{"id":105985},"修改-dataqpos-后位置没有更新","修改 ",[33,105988,101471],{}," 后位置没有更新",[19,105991,102863],{},[26,105993,105994],{"className":28,"code":104944,"language":30,"meta":31,"style":31},[33,105995,105996],{"__ignoreMap":31},[36,105997,105998],{"class":38,"line":39},[36,105999,104944],{"class":42},[596,106001,106002],{"id":106002},"数组维度看不懂",[19,106004,106005],{},"打印模型维度:",[26,106007,106009],{"className":28,"code":106008,"language":30,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,106010,106011],{"__ignoreMap":31},[36,106012,106013,106015],{"class":38,"line":39},[36,106014,30894],{"class":53},[36,106016,106017],{"class":42},"(model.nq, model.nv, model.nu)\n",[758,106019,106020,106028],{},[761,106021,106022],{},[764,106023,106024,106026],{},[767,106025,104975],{"align":24216},[767,106027,101101],{"align":24216},[805,106029,106030,106040,106050],{},[764,106031,106032,106037],{},[810,106033,106034],{"align":24216},[33,106035,106036],{},"nq",[810,106038,106039],{"align":24216},"位置变量数量",[764,106041,106042,106047],{},[810,106043,106044],{"align":24216},[33,106045,106046],{},"nv",[810,106048,106049],{"align":24216},"速度变量数量",[764,106051,106052,106056],{},[810,106053,106054],{"align":24216},[33,106055,102563],{},[810,106057,106058],{"align":24216},"控制输入数量",[596,106060,106062,106063,106065],{"id":106061},"误以为-qpos-一定等于关节数","误以为 ",[33,106064,104431],{}," 一定等于关节数",[19,106067,106068,106069,83007,106071,106073,106074,106076],{},"不是。例如 ",[33,106070,102021],{},[33,106072,104431],{}," 是 7 维，但 ",[33,106075,104761],{}," 是 6 维。",[596,106078,106080,106081,106083],{"id":106079},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,106082,104431],{}," 的第几位",[19,106085,106086],{},"初学时可以先打印：",[26,106088,106090],{"className":28,"code":106089,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,106091,106092,106102,106112,106124],{"__ignoreMap":31},[36,106093,106094,106096,106098,106100],{"class":38,"line":39},[36,106095,30894],{"class":53},[36,106097,345],{"class":42},[36,106099,101840],{"class":405},[36,106101,101843],{"class":42},[36,106103,106104,106106,106108,106110],{"class":38,"line":66},[36,106105,30894],{"class":53},[36,106107,345],{"class":42},[36,106109,101852],{"class":405},[36,106111,101855],{"class":42},[36,106113,106114,106116,106118,106121],{"class":38,"line":73},[36,106115,30894],{"class":53},[36,106117,345],{"class":42},[36,106119,106120],{"class":405},"\"qpos:\"",[36,106122,106123],{"class":42},", data.qpos)\n",[36,106125,106126,106128,106130,106133],{"class":38,"line":79},[36,106127,30894],{"class":53},[36,106129,345],{"class":42},[36,106131,106132],{"class":405},"\"qvel:\"",[36,106134,106135],{"class":42},", data.qvel)\n",[19,106137,106138],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[596,106140,106141],{"id":106141},"仿真结果每次都一样",[19,106143,106144,106145,106147],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,106146,104431],{},"、目标点或控制输入。",[14,106149,103008],{"id":103007},[19,106151,106152,106153,25099],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,106154,33878],{},[579,106156,106157,106165,106170,106175],{},[582,106158,106159,106160,101419,106162,106164],{},"用 ",[33,106161,101471],{},[33,106163,101474],{}," 读取状态。",[582,106166,106159,106167,106169],{},[33,106168,101477],{}," 写入控制。",[582,106171,106159,106172,106174],{},[33,106173,101616],{}," 推进时间。",[582,106176,106177,106178,106180],{},"手动改状态后用 ",[33,106179,104651],{}," 刷新派生量。",[19,106182,106183],{},"理解这一章后，就可以进入关节和 actuator 控制。",[539,106185,106186],{},"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":31,"searchDepth":66,"depth":66,"links":106188},[106189,106190,106191,106198,106202,106203,106204,106214],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":106192},[106193,106195,106197],{"id":104956,"depth":73,"text":106194},"qpos、qvel、ctrl 是什么",{"id":105034,"depth":73,"text":106196},"mj_step 和 mj_forward 的区别",{"id":105123,"depth":73,"text":105124},{"id":101653,"depth":66,"text":101654,"children":106199},[106200,106201],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":106205},[106206,106208,106209,106211,106213],{"id":105985,"depth":73,"text":106207},"修改 data.qpos 后位置没有更新",{"id":106002,"depth":73,"text":106002},{"id":106061,"depth":73,"text":106210},"误以为 qpos 一定等于关节数",{"id":106079,"depth":73,"text":106212},"不知道某个元素在 qpos 的第几位",{"id":106141,"depth":73,"text":106141},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104719,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106221,"title":106222,"body":106223,"description":31,"extension":551,"meta":107913,"navigation":553,"path":107914,"seo":107915,"stem":107916,"__hash__":107917},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106224,"toc":107889},[106225,106228,106230,106233,106235,106260,106263,106282,106285,106287,106289,106313,106315,106329,106331,106372,106374,106398,106400,106403,106437,106439,106452,106455,106523,106532,106536,106539,106573,106579,106582,106586,106625,106628,106648,106652,106695,106697,106726,106729,106735,106738,106740,107134,107136,107148,107150,107161,107163,107166,107195,107203,107206,107241,107244,107246,107254,107257,107259,107270,107280,107300,107303,107339,107351,107399,107418,107460,107473,107501,107506,107527,107537,107555,107558,107592,107595,107615,107618,107637,107643,107645,107648,107654,107660,107670,107673,107679,107688,107690,107736,107738,107744,107750,107753,107756,107776,107779,107785,107791,107793,107816,107819,107822,107831,107834,107872,107874,107877,107883,107886],[10,106226,106222],{"id":106227},"_4关节actuator-与力控制",[14,106229,101048],{"id":101047},[19,106231,106232],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106234,104732],{},[579,106236,106237,106243,106248,106252,106257],{},[582,106238,106239,106242],{},[33,106240,106241],{},"hinge"," 关节",[582,106244,106245],{},[33,106246,106247],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[582,106249,106250],{},[33,106251,101477],{},[582,106253,106254],{},[33,106255,106256],{},"ctrlrange",[582,106258,106259],{},"读取关节角和角速度",[19,106261,106262],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,106264,106266],{"className":28,"code":106265,"language":30,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,106267,106268],{"__ignoreMap":31},[36,106269,106270,106273,106275,106277,106279],{"class":38,"line":39},[36,106271,106272],{"class":42},"data.ctrl[",[36,106274,812],{"class":53},[36,106276,4923],{"class":42},[36,106278,47],{"class":46},[36,106280,106281],{"class":53}," ...\n",[19,106283,106284],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106286,101171],{"id":101170},[19,106288,101174],{},[26,106290,106291],{"className":24302,"code":104789,"language":24304,"meta":31,"style":31},[33,106292,106293],{"__ignoreMap":31},[36,106294,106295,106297,106299,106301,106303,106305,106307,106309,106311],{"class":38,"line":39},[36,106296,25057],{"class":2443},[36,106298,26796],{"class":405},[36,106300,24314],{"class":405},[36,106302,26881],{"class":53},[36,106304,104804],{"class":405},[36,106306,101199],{"class":405},[36,106308,102902],{"class":405},[36,106310,101215],{"class":405},[36,106312,104813],{"class":405},[19,106314,103220],{},[26,106316,106317],{"className":24302,"code":101320,"language":24304,"meta":31,"style":31},[33,106318,106319],{"__ignoreMap":31},[36,106320,106321,106323,106325,106327],{"class":38,"line":39},[36,106322,24311],{"class":2443},[36,106324,24314],{"class":405},[36,106326,101331],{"class":405},[36,106328,101334],{"class":405},[19,106330,103237],{},[26,106332,106334],{"className":24302,"code":106333,"language":24304,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[33,106335,106336,106353,106362],{"__ignoreMap":31},[36,106337,106338,106340,106342,106344,106347,106349,106351],{"class":38,"line":39},[36,106339,30811],{"class":2443},[36,106341,29657],{"class":405},[36,106343,25596],{"class":53},[36,106345,106346],{"class":405}," mujoco-control",[36,106348,101376],{"class":405},[36,106350,101379],{"class":53},[36,106352,101382],{"class":53},[36,106354,106355,106357,106359],{"class":38,"line":66},[36,106356,30811],{"class":2443},[36,106358,101389],{"class":405},[36,106360,106361],{"class":405}," mujoco-control\n",[36,106363,106364,106366,106368,106370],{"class":38,"line":73},[36,106365,24311],{"class":2443},[36,106367,24314],{"class":405},[36,106369,101331],{"class":405},[36,106371,101334],{"class":405},[19,106373,101405],{},[579,106375,106376,106382,106389,106395],{},[582,106377,106378,106381],{},[33,106379,106380],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[582,106383,106384,106386,106387,28866],{},[33,106385,101477],{}," 长度等于 ",[33,106388,102559],{},[582,106390,82699,106391,106394],{},[33,106392,106393],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[582,106396,106397],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106399,101446],{"id":101445},[19,106401,106402],{},"关节决定 body 如何运动:",[26,106404,106406],{"className":53544,"code":106405,"language":53546,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,106407,106408],{"__ignoreMap":31},[36,106409,106410,106412,106414,106416,106418,106421,106423,106425,106427,106430,106432,106435],{"class":38,"line":39},[36,106411,1523],{"class":42},[36,106413,103357],{"class":51777},[36,106415,15400],{"class":2443},[36,106417,47],{"class":42},[36,106419,106420],{"class":405},"\"hinge\"",[36,106422,54301],{"class":2443},[36,106424,47],{"class":42},[36,106426,106420],{"class":405},[36,106428,106429],{"class":2443}," axis",[36,106431,47],{"class":42},[36,106433,106434],{"class":405},"\"0 1 0\"",[36,106436,101545],{"class":42},[19,106438,103453],{},[579,106440,106441,106446,106449],{},[582,106442,106443,106444],{},"名字是 ",[33,106445,106241],{},[582,106447,106448],{},"类型是旋转关节",[582,106450,106451],{},"绕 y 轴旋转",[19,106453,106454],{},"actuator 决定如何施加控制:",[26,106456,106458],{"className":53544,"code":106457,"language":53546,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[33,106459,106460,106469,106515],{"__ignoreMap":31},[36,106461,106462,106464,106467],{"class":38,"line":39},[36,106463,1523],{"class":42},[36,106465,106466],{"class":51777},"actuator",[36,106468,51784],{"class":42},[36,106470,106471,106473,106476,106478,106480,106483,106486,106488,106490,106493,106495,106497,106500,106502,106505,106508,106510,106513],{"class":38,"line":66},[36,106472,52621],{"class":42},[36,106474,106475],{"class":51777},"motor",[36,106477,15400],{"class":2443},[36,106479,47],{"class":42},[36,106481,106482],{"class":405},"\"hinge_motor\"",[36,106484,106485],{"class":2443}," joint",[36,106487,47],{"class":42},[36,106489,106420],{"class":405},[36,106491,106492],{"class":2443}," gear",[36,106494,47],{"class":42},[36,106496,4158],{"class":405},[36,106498,106499],{"class":2443}," ctrlrange",[36,106501,47],{"class":42},[36,106503,106504],{"class":405},"\"-2 2\"",[36,106506,106507],{"class":2443}," ctrllimited",[36,106509,47],{"class":42},[36,106511,106512],{"class":405},"\"true\"",[36,106514,101545],{"class":42},[36,106516,106517,106519,106521],{"class":38,"line":73},[36,106518,52262],{"class":42},[36,106520,106466],{"class":51777},[36,106522,51784],{"class":42},[19,106524,106525,106528,106529,28866],{},[33,106526,106527],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,106530,106531],{},"[-2, 2]",[596,106533,106535],{"id":106534},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106537,106538],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[758,106540,106541,106551],{},[761,106542,106543],{},[764,106544,106545,106547,106549],{},[767,106546,26234],{"align":24216},[767,106548,103097],{"align":24216},[767,106550,101135],{"align":24216},[805,106552,106553,106563],{},[764,106554,106555,106557,106560],{},[810,106556,103357],{"align":24216},[810,106558,106559],{"align":24216},"定义能怎么动",[810,106561,106562],{"align":24216},"门轴允许门旋转",[764,106564,106565,106567,106570],{},[810,106566,106466],{"align":24216},[810,106568,106569],{"align":24216},"定义怎么施力或控制",[810,106571,106572],{"align":24216},"人推门、马达带动门",[19,106574,106575,106576,106578],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,106577,101477],{}," 主动控制它。",[19,106580,106581],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[596,106583,106585],{"id":106584},"hinge-joint","hinge joint",[26,106587,106589],{"className":53544,"code":106588,"language":53546,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,106590,106591],{"__ignoreMap":31},[36,106592,106593,106595,106597,106599,106601,106603,106605,106607,106609,106611,106613,106615,106618,106620,106623],{"class":38,"line":39},[36,106594,1523],{"class":42},[36,106596,103357],{"class":51777},[36,106598,15400],{"class":2443},[36,106600,47],{"class":42},[36,106602,106420],{"class":405},[36,106604,54301],{"class":2443},[36,106606,47],{"class":42},[36,106608,106420],{"class":405},[36,106610,106429],{"class":2443},[36,106612,47],{"class":42},[36,106614,106434],{"class":405},[36,106616,106617],{"class":2443}," damping",[36,106619,47],{"class":42},[36,106621,106622],{"class":405},"\"0.1\"",[36,106624,101545],{"class":42},[19,106626,106627],{},"含义：",[579,106629,106630,106636,106642],{},[582,106631,106632,106635],{},[33,106633,106634],{},"type=\"hinge\"","：只能绕一个轴旋转。",[582,106637,106638,106641],{},[33,106639,106640],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[582,106643,106644,106647],{},[33,106645,106646],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[596,106649,106651],{"id":106650},"motor-actuator","motor actuator",[26,106653,106655],{"className":53544,"code":106654,"language":53546,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,106656,106657],{"__ignoreMap":31},[36,106658,106659,106661,106663,106665,106667,106669,106671,106673,106675,106677,106679,106681,106683,106685,106687,106689,106691,106693],{"class":38,"line":39},[36,106660,1523],{"class":42},[36,106662,106475],{"class":51777},[36,106664,15400],{"class":2443},[36,106666,47],{"class":42},[36,106668,106482],{"class":405},[36,106670,106485],{"class":2443},[36,106672,47],{"class":42},[36,106674,106420],{"class":405},[36,106676,106492],{"class":2443},[36,106678,47],{"class":42},[36,106680,4158],{"class":405},[36,106682,106499],{"class":2443},[36,106684,47],{"class":42},[36,106686,106504],{"class":405},[36,106688,106507],{"class":2443},[36,106690,47],{"class":42},[36,106692,106512],{"class":405},[36,106694,101545],{"class":42},[19,106696,106627],{},[579,106698,106699,106708,106714,106720],{},[582,106700,106701,106704,106705,106707],{},[33,106702,106703],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,106706,106241],{}," 的关节上。",[582,106709,106710,106713],{},[33,106711,106712],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[582,106715,106716,106719],{},[33,106717,106718],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[582,106721,106722,106725],{},[33,106723,106724],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106727,106728],{},"简单理解：",[26,106730,106733],{"className":106731,"code":106732,"language":5667,"meta":31},[5665],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,106734,106732],{"__ignoreMap":31},[19,106736,106737],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106739,101654],{"id":101653},[26,106741,106743],{"className":28,"code":106742,"language":30,"meta":31,"style":31},"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",[33,106744,106745,106752,106756,106762,106772,106776,106780,106788,106793,106798,106802,106806,106811,106816,106820,106825,106830,106835,106840,106844,106848,106852,106857,106862,106867,106871,106875,106879,106883,106895,106907,106915,106919,106929,106939,106949,106953,106966,106979,106983,107000,107014,107049,107053,107057,107068,107083,107098,107110,107114,107118,107130],{"__ignoreMap":31},[36,106746,106747,106749],{"class":38,"line":39},[36,106748,30871],{"class":46},[36,106750,106751],{"class":42}," math\n",[36,106753,106754],{"class":38,"line":66},[36,106755,2880],{"emptyLinePlaceholder":553},[36,106757,106758,106760],{"class":38,"line":73},[36,106759,30871],{"class":46},[36,106761,101702],{"class":42},[36,106763,106764,106766,106768,106770],{"class":38,"line":79},[36,106765,30871],{"class":46},[36,106767,31858],{"class":42},[36,106769,31861],{"class":46},[36,106771,31864],{"class":42},[36,106773,106774],{"class":38,"line":85},[36,106775,2880],{"emptyLinePlaceholder":553},[36,106777,106778],{"class":38,"line":419},[36,106779,2880],{"emptyLinePlaceholder":553},[36,106781,106782,106784,106786],{"class":38,"line":425},[36,106783,101715],{"class":53},[36,106785,14044],{"class":46},[36,106787,101720],{"class":405},[36,106789,106790],{"class":38,"line":431},[36,106791,106792],{"class":405},"\u003Cmujoco model=\"one_link_motor\">\n",[36,106794,106795],{"class":38,"line":437},[36,106796,106797],{"class":405},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,106799,106800],{"class":38,"line":443},[36,106801,2880],{"emptyLinePlaceholder":553},[36,106803,106804],{"class":38,"line":2092},[36,106805,101739],{"class":405},[36,106807,106808],{"class":38,"line":2097},[36,106809,106810],{"class":405},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,106812,106813],{"class":38,"line":2103},[36,106814,106815],{"class":405},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,106817,106818],{"class":38,"line":2108},[36,106819,2880],{"emptyLinePlaceholder":553},[36,106821,106822],{"class":38,"line":2122},[36,106823,106824],{"class":405},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,106826,106827],{"class":38,"line":2127},[36,106828,106829],{"class":405},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,106831,106832],{"class":38,"line":2133},[36,106833,106834],{"class":405},"        \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",[36,106836,106837],{"class":38,"line":2154},[36,106838,106839],{"class":405},"      \u003C\u002Fbody>\n",[36,106841,106842],{"class":38,"line":2159},[36,106843,101768],{"class":405},[36,106845,106846],{"class":38,"line":2173},[36,106847,101773],{"class":405},[36,106849,106850],{"class":38,"line":2178},[36,106851,2880],{"emptyLinePlaceholder":553},[36,106853,106854],{"class":38,"line":2207},[36,106855,106856],{"class":405},"  \u003Cactuator>\n",[36,106858,106859],{"class":38,"line":2212},[36,106860,106861],{"class":405},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,106863,106864],{"class":38,"line":2229},[36,106865,106866],{"class":405},"  \u003C\u002Factuator>\n",[36,106868,106869],{"class":38,"line":2234},[36,106870,101778],{"class":405},[36,106872,106873],{"class":38,"line":2239},[36,106874,96169],{"class":405},[36,106876,106877],{"class":38,"line":2244},[36,106878,2880],{"emptyLinePlaceholder":553},[36,106880,106881],{"class":38,"line":2258},[36,106882,2880],{"emptyLinePlaceholder":553},[36,106884,106885,106887,106889,106891,106893],{"class":38,"line":2263},[36,106886,32424],{"class":46},[36,106888,2453],{"class":2443},[36,106890,101799],{"class":42},[36,106892,96157],{"class":53},[36,106894,4219],{"class":42},[36,106896,106897,106899,106901,106903,106905],{"class":38,"line":3057},[36,106898,101808],{"class":42},[36,106900,47],{"class":46},[36,106902,101813],{"class":42},[36,106904,101715],{"class":53},[36,106906,63],{"class":42},[36,106908,106909,106911,106913],{"class":38,"line":3071},[36,106910,101822],{"class":42},[36,106912,47],{"class":46},[36,106914,101827],{"class":42},[36,106916,106917],{"class":38,"line":3079},[36,106918,2880],{"emptyLinePlaceholder":553},[36,106920,106921,106923,106925,106927],{"class":38,"line":3084},[36,106922,31777],{"class":53},[36,106924,345],{"class":42},[36,106926,101840],{"class":405},[36,106928,101843],{"class":42},[36,106930,106931,106933,106935,106937],{"class":38,"line":3090},[36,106932,31777],{"class":53},[36,106934,345],{"class":42},[36,106936,101852],{"class":405},[36,106938,101855],{"class":42},[36,106940,106941,106943,106945,106947],{"class":38,"line":3096},[36,106942,31777],{"class":53},[36,106944,345],{"class":42},[36,106946,101864],{"class":405},[36,106948,101867],{"class":42},[36,106950,106951],{"class":38,"line":3101},[36,106952,2880],{"emptyLinePlaceholder":553},[36,106954,106955,106957,106960,106962,106964],{"class":38,"line":8428},[36,106956,3581],{"class":46},[36,106958,106959],{"class":42}," model.nu ",[36,106961,21428],{"class":46},[36,106963,25599],{"class":53},[36,106965,4219],{"class":42},[36,106967,106968,106970,106972,106974,106977],{"class":38,"line":8452},[36,106969,103833],{"class":46},[36,106971,103836],{"class":53},[36,106973,345],{"class":42},[36,106975,106976],{"class":405},"\"expected exactly one actuator\"",[36,106978,63],{"class":42},[36,106980,106981],{"class":38,"line":8457},[36,106982,2880],{"emptyLinePlaceholder":553},[36,106984,106985,106987,106989,106991,106993,106995,106998],{"class":38,"line":8463},[36,106986,3681],{"class":46},[36,106988,32093],{"class":42},[36,106990,26524],{"class":46},[36,106992,32920],{"class":53},[36,106994,345],{"class":42},[36,106996,106997],{"class":53},"2000",[36,106999,31264],{"class":42},[36,107001,107002,107005,107007,107009,107011],{"class":38,"line":8490},[36,107003,107004],{"class":42},"        t ",[36,107006,47],{"class":46},[36,107008,32093],{"class":42},[36,107010,1071],{"class":46},[36,107012,107013],{"class":42}," model.opt.timestep\n",[36,107015,107016,107019,107021,107023,107025,107028,107030,107033,107035,107037,107040,107042,107044,107046],{"class":38,"line":8495},[36,107017,107018],{"class":42},"        data.ctrl[",[36,107020,812],{"class":53},[36,107022,4923],{"class":42},[36,107024,47],{"class":46},[36,107026,107027],{"class":53}," 1.5",[36,107029,6998],{"class":46},[36,107031,107032],{"class":42}," math.sin(",[36,107034,105661],{"class":53},[36,107036,6998],{"class":46},[36,107038,107039],{"class":42}," math.pi ",[36,107041,1071],{"class":46},[36,107043,62344],{"class":53},[36,107045,6998],{"class":46},[36,107047,107048],{"class":42}," t)\n",[36,107050,107051],{"class":38,"line":8501},[36,107052,101917],{"class":42},[36,107054,107055],{"class":38,"line":8513},[36,107056,2880],{"emptyLinePlaceholder":553},[36,107058,107059,107061,107063,107066],{"class":38,"line":8525},[36,107060,31777],{"class":53},[36,107062,345],{"class":42},[36,107064,107065],{"class":405},"\"time:\"",[36,107067,101879],{"class":42},[36,107069,107070,107072,107074,107077,107079,107081],{"class":38,"line":8537},[36,107071,31777],{"class":53},[36,107073,345],{"class":42},[36,107075,107076],{"class":405},"\"joint qpos:\"",[36,107078,105331],{"class":42},[36,107080,912],{"class":53},[36,107082,370],{"class":42},[36,107084,107085,107087,107089,107092,107094,107096],{"class":38,"line":10196},[36,107086,31777],{"class":53},[36,107088,345],{"class":42},[36,107090,107091],{"class":405},"\"joint qvel:\"",[36,107093,105347],{"class":42},[36,107095,912],{"class":53},[36,107097,370],{"class":42},[36,107099,107100,107102,107104,107107],{"class":38,"line":10221},[36,107101,31777],{"class":53},[36,107103,345],{"class":42},[36,107105,107106],{"class":405},"\"last ctrl:\"",[36,107108,107109],{"class":42},", data.ctrl.copy())\n",[36,107111,107112],{"class":38,"line":10244},[36,107113,2880],{"emptyLinePlaceholder":553},[36,107115,107116],{"class":38,"line":10268},[36,107117,2880],{"emptyLinePlaceholder":553},[36,107119,107120,107122,107124,107126,107128],{"class":38,"line":10273},[36,107121,2011],{"class":46},[36,107123,31698],{"class":53},[36,107125,101960],{"class":46},[36,107127,101963],{"class":405},[36,107129,4219],{"class":42},[36,107131,107132],{"class":38,"line":10278},[36,107133,101970],{"class":42},[19,107135,103971],{},[26,107137,107139],{"className":24302,"code":107138,"language":24304,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,107140,107141],{"__ignoreMap":31},[36,107142,107143,107145],{"class":38,"line":39},[36,107144,101684],{"class":2443},[36,107146,107147],{"class":405}," ch4_joint_motor.py\n",[19,107149,102702],{},[26,107151,107153],{"className":24302,"code":107152,"language":24304,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,107154,107155],{"__ignoreMap":31},[36,107156,107157,107159],{"class":38,"line":39},[36,107158,30],{"class":2443},[36,107160,107147],{"class":405},[596,107162,101973],{"id":101973},[19,107164,107165],{},"检查 actuator 数量：",[26,107167,107169],{"className":28,"code":107168,"language":30,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,107170,107171,107183],{"__ignoreMap":31},[36,107172,107173,107175,107177,107179,107181],{"class":38,"line":39},[36,107174,2011],{"class":46},[36,107176,106959],{"class":42},[36,107178,21428],{"class":46},[36,107180,25599],{"class":53},[36,107182,4219],{"class":42},[36,107184,107185,107187,107189,107191,107193],{"class":38,"line":66},[36,107186,104296],{"class":46},[36,107188,103836],{"class":53},[36,107190,345],{"class":42},[36,107192,106976],{"class":405},[36,107194,63],{"class":42},[19,107196,107197,107199,107200,107202],{},[33,107198,102559],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,107201,101477],{}," 长度应该是 1。",[19,107204,107205],{},"产生正弦控制信号：",[26,107207,107209],{"className":28,"code":107208,"language":30,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,107210,107211],{"__ignoreMap":31},[36,107212,107213,107215,107217,107219,107221,107223,107225,107227,107229,107231,107233,107235,107237,107239],{"class":38,"line":39},[36,107214,106272],{"class":42},[36,107216,812],{"class":53},[36,107218,4923],{"class":42},[36,107220,47],{"class":46},[36,107222,107027],{"class":53},[36,107224,6998],{"class":46},[36,107226,107032],{"class":42},[36,107228,105661],{"class":53},[36,107230,6998],{"class":46},[36,107232,107039],{"class":42},[36,107234,1071],{"class":46},[36,107236,62344],{"class":53},[36,107238,6998],{"class":46},[36,107240,107048],{"class":42},[19,107242,107243],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107245,102074],{},[26,107247,107248],{"className":28,"code":104906,"language":30,"meta":31,"style":31},[33,107249,107250],{"__ignoreMap":31},[36,107251,107252],{"class":38,"line":39},[36,107253,104906],{"class":42},[19,107255,107256],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[596,107258,102109],{"id":102109},[26,107260,107262],{"className":28,"code":107261,"language":30,"meta":31,"style":31},"import math\n",[33,107263,107264],{"__ignoreMap":31},[36,107265,107266,107268],{"class":38,"line":39},[36,107267,30871],{"class":46},[36,107269,106751],{"class":42},[19,107271,107272,107273,101419,107276,107279],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,107274,107275],{},"math.sin",[33,107277,107278],{},"math.pi"," 生成周期变化的控制信号。",[26,107281,107282],{"className":28,"code":104087,"language":30,"meta":31,"style":31},[33,107283,107284,107290],{"__ignoreMap":31},[36,107285,107286,107288],{"class":38,"line":39},[36,107287,30871],{"class":46},[36,107289,101702],{"class":42},[36,107291,107292,107294,107296,107298],{"class":38,"line":66},[36,107293,30871],{"class":46},[36,107295,31858],{"class":42},[36,107297,31861],{"class":46},[36,107299,31864],{"class":42},[19,107301,107302],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,107304,107305],{"className":53544,"code":106588,"language":53546,"meta":31,"style":31},[33,107306,107307],{"__ignoreMap":31},[36,107308,107309,107311,107313,107315,107317,107319,107321,107323,107325,107327,107329,107331,107333,107335,107337],{"class":38,"line":39},[36,107310,1523],{"class":42},[36,107312,103357],{"class":51777},[36,107314,15400],{"class":2443},[36,107316,47],{"class":42},[36,107318,106420],{"class":405},[36,107320,54301],{"class":2443},[36,107322,47],{"class":42},[36,107324,106420],{"class":405},[36,107326,106429],{"class":2443},[36,107328,47],{"class":42},[36,107330,106434],{"class":405},[36,107332,106617],{"class":2443},[36,107334,47],{"class":42},[36,107336,106622],{"class":405},[36,107338,101545],{"class":42},[19,107340,107341,107342,107344,107345,107347,107348,107350],{},"这行定义关节。",[33,107343,106241],{}," 表示旋转关节。",[33,107346,106640],{}," 表示绕 y 轴旋转。",[33,107349,106646],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,107352,107354],{"className":53544,"code":107353,"language":53546,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[33,107355,107356],{"__ignoreMap":31},[36,107357,107358,107360,107362,107364,107366,107369,107371,107373,107376,107379,107381,107384,107386,107388,107390,107392,107394,107397],{"class":38,"line":39},[36,107359,1523],{"class":42},[36,107361,101521],{"class":51777},[36,107363,15400],{"class":2443},[36,107365,47],{"class":42},[36,107367,107368],{"class":405},"\"link_geom\"",[36,107370,54301],{"class":2443},[36,107372,47],{"class":42},[36,107374,107375],{"class":405},"\"capsule\"",[36,107377,107378],{"class":2443}," fromto",[36,107380,47],{"class":42},[36,107382,107383],{"class":405},"\"0 0 0 0 0 0.5\"",[36,107385,101537],{"class":2443},[36,107387,47],{"class":42},[36,107389,104179],{"class":405},[36,107391,102402],{"class":2443},[36,107393,47],{"class":42},[36,107395,107396],{"class":405},"\"0.5\"",[36,107398,101545],{"class":42},[19,107400,107401,107402,107404,107405,107407,107408,107411,107412,28866,107415,107417],{},"这行定义摆杆的形状。",[33,107403,103566],{}," 是胶囊体，适合表示杆子。",[33,107406,103577],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,107409,107410],{},"(0,0,0)"," 延伸到 ",[33,107413,107414],{},"(0,0,0.5)",[33,107416,103571],{}," 是半径。",[26,107419,107420],{"className":53544,"code":106654,"language":53546,"meta":31,"style":31},[33,107421,107422],{"__ignoreMap":31},[36,107423,107424,107426,107428,107430,107432,107434,107436,107438,107440,107442,107444,107446,107448,107450,107452,107454,107456,107458],{"class":38,"line":39},[36,107425,1523],{"class":42},[36,107427,106475],{"class":51777},[36,107429,15400],{"class":2443},[36,107431,47],{"class":42},[36,107433,106482],{"class":405},[36,107435,106485],{"class":2443},[36,107437,47],{"class":42},[36,107439,106420],{"class":405},[36,107441,106492],{"class":2443},[36,107443,47],{"class":42},[36,107445,4158],{"class":405},[36,107447,106499],{"class":2443},[36,107449,47],{"class":42},[36,107451,106504],{"class":405},[36,107453,106507],{"class":2443},[36,107455,47],{"class":42},[36,107457,106512],{"class":405},[36,107459,101545],{"class":42},[19,107461,107462,107463,107465,107466,107469,107470,107472],{},"这行定义电机。它作用在 ",[33,107464,106241],{}," 关节上。",[33,107467,107468],{},"gear"," 可以理解成放大倍数。",[33,107471,106256],{}," 限制控制输入范围。",[26,107474,107475],{"className":28,"code":107168,"language":30,"meta":31,"style":31},[33,107476,107477,107489],{"__ignoreMap":31},[36,107478,107479,107481,107483,107485,107487],{"class":38,"line":39},[36,107480,2011],{"class":46},[36,107482,106959],{"class":42},[36,107484,21428],{"class":46},[36,107486,25599],{"class":53},[36,107488,4219],{"class":42},[36,107490,107491,107493,107495,107497,107499],{"class":38,"line":66},[36,107492,104296],{"class":46},[36,107494,103836],{"class":53},[36,107496,345],{"class":42},[36,107498,106976],{"class":405},[36,107500,63],{"class":42},[19,107502,107503,107505],{},[33,107504,102559],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,107507,107509],{"className":28,"code":107508,"language":30,"meta":31,"style":31},"for step in range(2000):\n",[33,107510,107511],{"__ignoreMap":31},[36,107512,107513,107515,107517,107519,107521,107523,107525],{"class":38,"line":39},[36,107514,3505],{"class":46},[36,107516,32093],{"class":42},[36,107518,26524],{"class":46},[36,107520,32920],{"class":53},[36,107522,345],{"class":42},[36,107524,106997],{"class":53},[36,107526,31264],{"class":42},[19,107528,107529,107530,107532,107533,107536],{},"循环 2000 步。这里没有用 ",[33,107531,1605],{},"，而是用 ",[33,107534,107535],{},"step","，因为后面要用当前步数计算时间。",[26,107538,107540],{"className":28,"code":107539,"language":30,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,107541,107542],{"__ignoreMap":31},[36,107543,107544,107547,107549,107551,107553],{"class":38,"line":39},[36,107545,107546],{"class":42},"t ",[36,107548,47],{"class":46},[36,107550,32093],{"class":42},[36,107552,1071],{"class":46},[36,107554,107013],{"class":42},[19,107556,107557],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,107559,107560],{"className":28,"code":107208,"language":30,"meta":31,"style":31},[33,107561,107562],{"__ignoreMap":31},[36,107563,107564,107566,107568,107570,107572,107574,107576,107578,107580,107582,107584,107586,107588,107590],{"class":38,"line":39},[36,107565,106272],{"class":42},[36,107567,812],{"class":53},[36,107569,4923],{"class":42},[36,107571,47],{"class":46},[36,107573,107027],{"class":53},[36,107575,6998],{"class":46},[36,107577,107032],{"class":42},[36,107579,105661],{"class":53},[36,107581,6998],{"class":46},[36,107583,107039],{"class":42},[36,107585,1071],{"class":46},[36,107587,62344],{"class":53},[36,107589,6998],{"class":46},[36,107591,107048],{"class":42},[19,107593,107594],{},"这行给电机输入一个正弦波。拆开看：",[579,107596,107597,107603,107609],{},[582,107598,107599,107602],{},[33,107600,107601],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[582,107604,107605,107608],{},[33,107606,107607],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[582,107610,107611,107614],{},[33,107612,107613],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107616,107617],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,107619,107621],{"className":28,"code":107620,"language":30,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,107622,107623],{"__ignoreMap":31},[36,107624,107625,107627,107629,107631,107633,107635],{"class":38,"line":39},[36,107626,30894],{"class":53},[36,107628,345],{"class":42},[36,107630,107076],{"class":405},[36,107632,105331],{"class":42},[36,107634,912],{"class":53},[36,107636,370],{"class":42},[19,107638,107639,107640,107642],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,107641,101471],{}," 只有一个数。",[14,107644,102717],{"id":102716},[19,107646,107647],{},"输出类似:",[26,107649,107652],{"className":107650,"code":107651,"language":5667,"meta":31},[5665],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,107653,107651],{"__ignoreMap":31},[19,107655,107656,107657,107659],{},"这里 ",[33,107658,106527],{}," 是电机输入。",[19,107661,107662,107665,107666,107669],{},[33,107663,107664],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,107667,107668],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107671,107672],{},"角度单位提示：",[26,107674,107677],{"className":107675,"code":107676,"language":5667,"meta":31},[5665],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,107678,107676],{"__ignoreMap":31},[19,107680,107681,107682,107684,107685,107687],{},"如果你看到 ",[33,107683,104431],{}," 是 ",[33,107686,35806],{},"，大约就是 28.6 度。",[14,107689,102749],{"id":102748},[579,107691,107692,107699,107702,107709,107712,107720,107728],{},[582,107693,102812,107694,102815,107696,28866],{},[33,107695,106712],{},[33,107697,107698],{},"gear=\"5\"",[582,107700,107701],{},"重新运行，观察关节运动是否更剧烈。",[582,107703,102812,107704,102815,107706,28866],{},[33,107705,106256],{},[33,107707,107708],{},"-0.2 0.2",[582,107710,107711],{},"重新运行，观察控制能力是否变弱。",[582,107713,107714,107715,107717,107718,28866],{},"去掉 actuator，确认 ",[33,107716,102559],{}," 变成 ",[33,107719,812],{},[582,107721,102812,107722,102815,107724,107727],{},[33,107723,106646],{},[33,107725,107726],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[582,107729,102812,107730,102815,107732,107735],{},[33,107731,106640],{},[33,107733,107734],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107737,102854],{"id":102853},[596,107739,107741],{"id":107740},"indexerror-index-0-is-out-of-bounds",[33,107742,107743],{},"IndexError: index 0 is out of bounds",[19,107745,107746,107747,107749],{},"原因是 ",[33,107748,106393],{},"，没有 actuator。",[596,107751,107752],{"id":107752},"关节几乎不动",[19,107754,107755],{},"可能原因:",[579,107757,107758,107763,107767,107773],{},[582,107759,107760,107762],{},[33,107761,107468],{}," 太小",[582,107764,107765,107762],{},[33,107766,106256],{},[582,107768,107769,107772],{},[33,107770,107771],{},"damping"," 太大",[582,107774,107775],{},"重力方向导致运动不明显",[596,107777,107778],{"id":107778},"模型编译失败",[19,107780,107781,107782,107784],{},"检查 actuator 引用的 ",[33,107783,106703],{}," 是否存在，joint 名称是否拼写一致。",[596,107786,107788,107790],{"id":107787},"datactrl0-写了但没有效果",[33,107789,106527],{}," 写了但没有效果",[19,107792,102976],{},[579,107794,107795,107800,107803,107808,107813],{},[582,107796,107797,107799],{},[33,107798,102559],{}," 是否大于 0。",[582,107801,107802],{},"motor 是否引用了正确 joint。",[582,107804,107805,107807],{},[33,107806,107468],{}," 是否太小。",[582,107809,107810,107812],{},[33,107811,106256],{}," 是否把输入限制得太小。",[582,107814,107815],{},"body 是否真的有可动 joint。",[596,107817,107818],{"id":107818},"控制输入超过范围会怎样",[19,107820,107821],{},"如果设置了：",[26,107823,107825],{"className":53544,"code":107824,"language":53546,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,107826,107827],{"__ignoreMap":31},[36,107828,107829],{"class":38,"line":39},[36,107830,107824],{"class":42},[19,107832,107833],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,107835,107837],{"className":28,"code":107836,"language":30,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,107838,107839,107859],{"__ignoreMap":31},[36,107840,107841,107844,107846,107849,107851,107853,107855,107857],{"class":38,"line":39},[36,107842,107843],{"class":42},"action ",[36,107845,47],{"class":46},[36,107847,107848],{"class":42}," np.clip(action, ",[36,107850,173],{"class":46},[36,107852,105661],{"class":53},[36,107854,12915],{"class":42},[36,107856,105661],{"class":53},[36,107858,63],{"class":42},[36,107860,107861,107863,107865,107867,107869],{"class":38,"line":66},[36,107862,106272],{"class":42},[36,107864,812],{"class":53},[36,107866,4923],{"class":42},[36,107868,47],{"class":46},[36,107870,107871],{"class":42}," action\n",[14,107873,103008],{"id":103007},[19,107875,107876],{},"这一章建立了控制任务的基本形式：",[26,107878,107881],{"className":107879,"code":107880,"language":5667,"meta":31},[5665],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,107882,107880],{"__ignoreMap":31},[19,107884,107885],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[539,107887,107888],{},"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":31,"searchDepth":66,"depth":66,"links":107890},[107891,107892,107893,107898,107902,107903,107904,107912],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":107894},[107895,107896,107897],{"id":106534,"depth":73,"text":106535},{"id":106584,"depth":73,"text":106585},{"id":106650,"depth":73,"text":106651},{"id":101653,"depth":66,"text":101654,"children":107899},[107900,107901],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":107905},[107906,107907,107908,107909,107911],{"id":107740,"depth":73,"text":107743},{"id":107752,"depth":73,"text":107752},{"id":107778,"depth":73,"text":107778},{"id":107787,"depth":73,"text":107910},"data.ctrl[0] 写了但没有效果",{"id":107818,"depth":73,"text":107818},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106222,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107919,"title":107920,"body":107921,"description":31,"extension":551,"meta":109830,"navigation":553,"path":109831,"seo":109832,"stem":109833,"__hash__":109834},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107922,"toc":109806},[107923,107926,107928,107931,107939,107942,107959,107962,107987,107990,108036,108038,108040,108095,108097,108116,108118,108161,108164,108181,108184,108200,108210,108217,108219,108222,108225,108259,108262,108310,108314,108317,108331,108340,108344,108347,108372,108375,108379,108392,108395,108401,108404,108419,108421,108424,108684,108686,108698,108701,109013,109015,109027,109029,109032,109047,109052,109055,109077,109080,109083,109117,109120,109124,109135,109138,109155,109158,109172,109179,109199,109206,109220,109223,109235,109250,109270,109273,109295,109298,109302,109317,109328,109343,109346,109376,109392,109421,109429,109453,109456,109474,109484,109496,109503,109512,109518,109527,109530,109532,109541,109544,109559,109561,109564,109575,109578,109589,109592,109610,109612,109629,109632,109660,109662,109666,109669,109699,109705,109708,109712,109720,109723,109725,109746,109749,109752,109768,109771,109787,109789,109792,109803],[10,107924,107920],{"id":107925},"_5viewer-可视化与-renderer-离屏渲染",[14,107927,101048],{"id":101047},[19,107929,107930],{},"本章掌握两类可视化方式:",[579,107932,107933,107936],{},[582,107934,107935],{},"交互式 viewer: 适合人工观察仿真",[582,107937,107938],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107940,107941],{},"使用官方接口:",[26,107943,107945],{"className":28,"code":107944,"language":30,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,107946,107947,107954],{"__ignoreMap":31},[36,107948,107949,107951],{"class":38,"line":39},[36,107950,30871],{"class":46},[36,107952,107953],{"class":42}," mujoco.viewer\n",[36,107955,107956],{"class":38,"line":66},[36,107957,107958],{"class":42},"mujoco.viewer.launch_passive(model, data)\n",[19,107960,107961],{},"以及:",[26,107963,107965],{"className":28,"code":107964,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,107966,107967,107977],{"__ignoreMap":31},[36,107968,107969,107972,107974],{"class":38,"line":39},[36,107970,107971],{"class":42},"renderer ",[36,107973,47],{"class":46},[36,107975,107976],{"class":42}," mujoco.Renderer(model)\n",[36,107978,107979,107982,107984],{"class":38,"line":66},[36,107980,107981],{"class":42},"image ",[36,107983,47],{"class":46},[36,107985,107986],{"class":42}," renderer.render()\n",[19,107988,107989],{},"新手建议先理解二者区别：",[758,107991,107992,108008],{},[761,107993,107994],{},[764,107995,107996,107999,108002,108005],{},[767,107997,107998],{"align":24216},"工具",[767,108000,108001],{"align":24216},"用途",[767,108003,108004],{"align":24216},"是否打开窗口",[767,108006,108007],{"align":24216},"常见场景",[805,108009,108010,108023],{},[764,108011,108012,108015,108018,108020],{},[810,108013,108014],{"align":24216},"Viewer",[810,108016,108017],{"align":24216},"人眼实时观察仿真",[810,108019,105066],{"align":24216},[810,108021,108022],{"align":24216},"调试模型、看控制效果",[764,108024,108025,108028,108031,108033],{},[810,108026,108027],{"align":24216},"Renderer",[810,108029,108030],{"align":24216},"生成图像数组",[810,108032,105079],{"align":24216},[810,108034,108035],{"align":24216},"保存图片、训练视觉策略、服务器批量采集",[14,108037,101171],{"id":101170},[19,108039,101174],{},[26,108041,108043],{"className":24302,"code":108042,"language":24304,"meta":31,"style":31},"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",[33,108044,108045,108057,108067,108075,108083],{"__ignoreMap":31},[36,108046,108047,108049,108051,108053,108055],{"class":38,"line":39},[36,108048,25057],{"class":2443},[36,108050,26796],{"class":405},[36,108052,24314],{"class":405},[36,108054,26881],{"class":53},[36,108056,25159],{"class":53},[36,108058,108059,108061,108063,108065],{"class":38,"line":66},[36,108060,101209],{"class":405},[36,108062,101212],{"class":405},[36,108064,101215],{"class":405},[36,108066,25159],{"class":53},[36,108068,108069,108071,108073],{"class":38,"line":73},[36,108070,101222],{"class":405},[36,108072,101225],{"class":405},[36,108074,25159],{"class":53},[36,108076,108077,108079,108081],{"class":38,"line":79},[36,108078,101232],{"class":405},[36,108080,101235],{"class":405},[36,108082,25159],{"class":53},[36,108084,108085,108087,108089,108091,108093],{"class":38,"line":85},[36,108086,101242],{"class":405},[36,108088,101245],{"class":405},[36,108090,101248],{"class":405},[36,108092,101251],{"class":405},[36,108094,102917],{"class":405},[19,108096,103220],{},[26,108098,108100],{"className":24302,"code":108099,"language":24304,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,108101,108102],{"__ignoreMap":31},[36,108103,108104,108106,108108,108110,108113],{"class":38,"line":39},[36,108105,24311],{"class":2443},[36,108107,24314],{"class":405},[36,108109,101331],{"class":405},[36,108111,108112],{"class":405}," numpy",[36,108114,108115],{"class":405}," pillow\n",[19,108117,103237],{},[26,108119,108121],{"className":24302,"code":108120,"language":24304,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[33,108122,108123,108140,108149],{"__ignoreMap":31},[36,108124,108125,108127,108129,108131,108134,108136,108138],{"class":38,"line":39},[36,108126,30811],{"class":2443},[36,108128,29657],{"class":405},[36,108130,25596],{"class":53},[36,108132,108133],{"class":405}," mujoco-render",[36,108135,101376],{"class":405},[36,108137,101379],{"class":53},[36,108139,101382],{"class":53},[36,108141,108142,108144,108146],{"class":38,"line":66},[36,108143,30811],{"class":2443},[36,108145,101389],{"class":405},[36,108147,108148],{"class":405}," mujoco-render\n",[36,108150,108151,108153,108155,108157,108159],{"class":38,"line":73},[36,108152,24311],{"class":2443},[36,108154,24314],{"class":405},[36,108156,101331],{"class":405},[36,108158,108112],{"class":405},[36,108160,108115],{"class":405},[19,108162,108163],{},"离屏渲染后端:",[26,108165,108167],{"className":24302,"code":108166,"language":24304,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,108168,108169],{"__ignoreMap":31},[36,108170,108171,108173,108176,108178],{"class":38,"line":39},[36,108172,25523],{"class":46},[36,108174,108175],{"class":42}," MUJOCO_GL",[36,108177,47],{"class":46},[36,108179,108180],{"class":42},"egl\n",[19,108182,108183],{},"或:",[26,108185,108187],{"className":24302,"code":108186,"language":24304,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,108188,108189],{"__ignoreMap":31},[36,108190,108191,108193,108195,108197],{"class":38,"line":39},[36,108192,25523],{"class":46},[36,108194,108175],{"class":42},[36,108196,47],{"class":46},[36,108198,108199],{"class":42},"osmesa\n",[19,108201,108202,108203,108206,108207,28866],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,108204,108205],{},"egl"," 失败，再尝试 ",[33,108208,108209],{},"osmesa",[19,108211,108212,108213,108216],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,108214,108215],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108218,101446],{"id":101445},[19,108220,108221],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108223,108224],{},"典型 viewer 流程:",[26,108226,108228],{"className":28,"code":108227,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[33,108229,108230,108243,108250,108254],{"__ignoreMap":31},[36,108231,108232,108235,108238,108240],{"class":38,"line":39},[36,108233,108234],{"class":46},"with",[36,108236,108237],{"class":42}," mujoco.viewer.launch_passive(model, data) ",[36,108239,31861],{"class":46},[36,108241,108242],{"class":42}," viewer:\n",[36,108244,108245,108247],{"class":38,"line":66},[36,108246,2731],{"class":46},[36,108248,108249],{"class":42}," viewer.is_running():\n",[36,108251,108252],{"class":38,"line":73},[36,108253,101917],{"class":42},[36,108255,108256],{"class":38,"line":79},[36,108257,108258],{"class":42},"        viewer.sync()\n",[19,108260,108261],{},"典型 renderer 流程:",[26,108263,108265],{"className":28,"code":108264,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[33,108266,108267,108293,108297,108302],{"__ignoreMap":31},[36,108268,108269,108271,108273,108276,108278,108280,108282,108284,108286,108288,108291],{"class":38,"line":39},[36,108270,107971],{"class":42},[36,108272,47],{"class":46},[36,108274,108275],{"class":42}," mujoco.Renderer(model, ",[36,108277,25462],{"class":5696},[36,108279,47],{"class":46},[36,108281,42819],{"class":53},[36,108283,12915],{"class":42},[36,108285,25458],{"class":5696},[36,108287,47],{"class":46},[36,108289,108290],{"class":53},"640",[36,108292,63],{"class":42},[36,108294,108295],{"class":38,"line":66},[36,108296,104906],{"class":42},[36,108298,108299],{"class":38,"line":73},[36,108300,108301],{"class":42},"renderer.update_scene(data)\n",[36,108303,108304,108306,108308],{"class":38,"line":79},[36,108305,107981],{"class":42},[36,108307,47],{"class":46},[36,108309,107986],{"class":42},[596,108311,108313],{"id":108312},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108315,108316],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,108318,108320],{"className":28,"code":108319,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,108321,108322,108326],{"__ignoreMap":31},[36,108323,108324],{"class":38,"line":39},[36,108325,104906],{"class":42},[36,108327,108328],{"class":38,"line":66},[36,108329,108330],{"class":42},"viewer.sync()\n",[19,108332,108333,108335,108336,108339],{},[33,108334,101616],{}," 负责算物理，",[33,108337,108338],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[596,108341,108343],{"id":108342},"为什么要-sleep","为什么要 sleep",[19,108345,108346],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,108348,108350],{"className":28,"code":108349,"language":30,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,108351,108352],{"__ignoreMap":31},[36,108353,108354,108357,108359,108362,108364,108367,108369],{"class":38,"line":39},[36,108355,108356],{"class":42},"sleep_time ",[36,108358,47],{"class":46},[36,108360,108361],{"class":42}," model.opt.timestep ",[36,108363,173],{"class":46},[36,108365,108366],{"class":42}," (time.time() ",[36,108368,173],{"class":46},[36,108370,108371],{"class":42}," step_start)\n",[19,108373,108374],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[596,108376,108378],{"id":108377},"renderer-输出是什么","renderer 输出是什么",[26,108380,108382],{"className":28,"code":108381,"language":30,"meta":31,"style":31},"image = renderer.render()\n",[33,108383,108384],{"__ignoreMap":31},[36,108385,108386,108388,108390],{"class":38,"line":39},[36,108387,107981],{"class":42},[36,108389,47],{"class":46},[36,108391,107986],{"class":42},[19,108393,108394],{},"得到的是 NumPy 数组，形状通常是：",[26,108396,108399],{"className":108397,"code":108398,"language":5667,"meta":31},[5665],"(height, width, 3)\n",[33,108400,108398],{"__ignoreMap":31},[19,108402,108403],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,108405,108407],{"className":28,"code":108406,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,108408,108409],{"__ignoreMap":31},[36,108410,108411,108414,108417],{"class":38,"line":39},[36,108412,108413],{"class":42},"Image.fromarray(image).save(",[36,108415,108416],{"class":405},"\"render_output.png\"",[36,108418,63],{"class":42},[14,108420,101654],{"id":101653},[19,108422,108423],{},"交互式 Viewer:",[26,108425,108427],{"className":28,"code":108426,"language":30,"meta":31,"style":31},"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",[33,108428,108429,108435,108439,108445,108451,108455,108459,108467,108472,108476,108480,108484,108489,108494,108498,108502,108506,108511,108515,108519,108523,108527,108531,108535,108547,108559,108567,108571,108581,108601,108611,108616,108621,108625,108642,108655,108660,108664,108668,108680],{"__ignoreMap":31},[36,108430,108431,108433],{"class":38,"line":39},[36,108432,30871],{"class":46},[36,108434,32306],{"class":42},[36,108436,108437],{"class":38,"line":66},[36,108438,2880],{"emptyLinePlaceholder":553},[36,108440,108441,108443],{"class":38,"line":73},[36,108442,30871],{"class":46},[36,108444,101702],{"class":42},[36,108446,108447,108449],{"class":38,"line":79},[36,108448,30871],{"class":46},[36,108450,107953],{"class":42},[36,108452,108453],{"class":38,"line":85},[36,108454,2880],{"emptyLinePlaceholder":553},[36,108456,108457],{"class":38,"line":419},[36,108458,2880],{"emptyLinePlaceholder":553},[36,108460,108461,108463,108465],{"class":38,"line":425},[36,108462,101715],{"class":53},[36,108464,14044],{"class":46},[36,108466,101720],{"class":405},[36,108468,108469],{"class":38,"line":431},[36,108470,108471],{"class":405},"\u003Cmujoco model=\"viewer_demo\">\n",[36,108473,108474],{"class":38,"line":437},[36,108475,101730],{"class":405},[36,108477,108478],{"class":38,"line":443},[36,108479,2880],{"emptyLinePlaceholder":553},[36,108481,108482],{"class":38,"line":2092},[36,108483,101739],{"class":405},[36,108485,108486],{"class":38,"line":2097},[36,108487,108488],{"class":405},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,108490,108491],{"class":38,"line":2103},[36,108492,108493],{"class":405},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,108495,108496],{"class":38,"line":2108},[36,108497,2880],{"emptyLinePlaceholder":553},[36,108499,108500],{"class":38,"line":2122},[36,108501,101753],{"class":405},[36,108503,108504],{"class":38,"line":2127},[36,108505,101758],{"class":405},[36,108507,108508],{"class":38,"line":2133},[36,108509,108510],{"class":405},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,108512,108513],{"class":38,"line":2154},[36,108514,101768],{"class":405},[36,108516,108517],{"class":38,"line":2159},[36,108518,101773],{"class":405},[36,108520,108521],{"class":38,"line":2173},[36,108522,101778],{"class":405},[36,108524,108525],{"class":38,"line":2178},[36,108526,96169],{"class":405},[36,108528,108529],{"class":38,"line":2207},[36,108530,2880],{"emptyLinePlaceholder":553},[36,108532,108533],{"class":38,"line":2212},[36,108534,2880],{"emptyLinePlaceholder":553},[36,108536,108537,108539,108541,108543,108545],{"class":38,"line":2229},[36,108538,32424],{"class":46},[36,108540,2453],{"class":2443},[36,108542,101799],{"class":42},[36,108544,96157],{"class":53},[36,108546,4219],{"class":42},[36,108548,108549,108551,108553,108555,108557],{"class":38,"line":2234},[36,108550,101808],{"class":42},[36,108552,47],{"class":46},[36,108554,101813],{"class":42},[36,108556,101715],{"class":53},[36,108558,63],{"class":42},[36,108560,108561,108563,108565],{"class":38,"line":2239},[36,108562,101822],{"class":42},[36,108564,47],{"class":46},[36,108566,101827],{"class":42},[36,108568,108569],{"class":38,"line":2244},[36,108570,2880],{"emptyLinePlaceholder":553},[36,108572,108573,108575,108577,108579],{"class":38,"line":2258},[36,108574,34655],{"class":46},[36,108576,108237],{"class":42},[36,108578,31861],{"class":46},[36,108580,108242],{"class":42},[36,108582,108583,108586,108589,108591,108594,108596,108599],{"class":38,"line":2263},[36,108584,108585],{"class":46},"        while",[36,108587,108588],{"class":42}," viewer.is_running() ",[36,108590,30941],{"class":46},[36,108592,108593],{"class":42}," data.time ",[36,108595,1523],{"class":46},[36,108597,108598],{"class":53}," 5.0",[36,108600,4219],{"class":42},[36,108602,108603,108606,108608],{"class":38,"line":3057},[36,108604,108605],{"class":42},"            step_start ",[36,108607,47],{"class":46},[36,108609,108610],{"class":42}," time.time()\n",[36,108612,108613],{"class":38,"line":3071},[36,108614,108615],{"class":42},"            mujoco.mj_step(model, data)\n",[36,108617,108618],{"class":38,"line":3079},[36,108619,108620],{"class":42},"            viewer.sync()\n",[36,108622,108623],{"class":38,"line":3084},[36,108624,2880],{"emptyLinePlaceholder":553},[36,108626,108627,108630,108632,108634,108636,108638,108640],{"class":38,"line":3090},[36,108628,108629],{"class":42},"            sleep_time ",[36,108631,47],{"class":46},[36,108633,108361],{"class":42},[36,108635,173],{"class":46},[36,108637,108366],{"class":42},[36,108639,173],{"class":46},[36,108641,108371],{"class":42},[36,108643,108644,108646,108649,108651,108653],{"class":38,"line":3096},[36,108645,5122],{"class":46},[36,108647,108648],{"class":42}," sleep_time ",[36,108650,1573],{"class":46},[36,108652,4573],{"class":53},[36,108654,4219],{"class":42},[36,108656,108657],{"class":38,"line":3101},[36,108658,108659],{"class":42},"                time.sleep(sleep_time)\n",[36,108661,108662],{"class":38,"line":8428},[36,108663,2880],{"emptyLinePlaceholder":553},[36,108665,108666],{"class":38,"line":8452},[36,108667,2880],{"emptyLinePlaceholder":553},[36,108669,108670,108672,108674,108676,108678],{"class":38,"line":8457},[36,108671,2011],{"class":46},[36,108673,31698],{"class":53},[36,108675,101960],{"class":46},[36,108677,101963],{"class":405},[36,108679,4219],{"class":42},[36,108681,108682],{"class":38,"line":8463},[36,108683,101970],{"class":42},[19,108685,103971],{},[26,108687,108689],{"className":24302,"code":108688,"language":24304,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,108690,108691],{"__ignoreMap":31},[36,108692,108693,108695],{"class":38,"line":39},[36,108694,101684],{"class":2443},[36,108696,108697],{"class":405}," ch5_viewer.py\n",[19,108699,108700],{},"离屏 Renderer 保存图片:",[26,108702,108704],{"className":28,"code":108703,"language":30,"meta":31,"style":31},"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",[33,108705,108706,108718,108722,108728,108738,108742,108746,108754,108759,108763,108767,108771,108775,108780,108784,108788,108792,108796,108800,108804,108808,108812,108816,108820,108824,108836,108848,108856,108881,108885,108901,108905,108909,108924,108933,108937,108951,108956,108961,108965,108977,108989,108993,108997,109009],{"__ignoreMap":31},[36,108707,108708,108710,108713,108715],{"class":38,"line":39},[36,108709,31215],{"class":46},[36,108711,108712],{"class":42}," pathlib ",[36,108714,30871],{"class":46},[36,108716,108717],{"class":42}," Path\n",[36,108719,108720],{"class":38,"line":66},[36,108721,2880],{"emptyLinePlaceholder":553},[36,108723,108724,108726],{"class":38,"line":73},[36,108725,30871],{"class":46},[36,108727,101702],{"class":42},[36,108729,108730,108732,108734,108736],{"class":38,"line":79},[36,108731,31215],{"class":46},[36,108733,47740],{"class":53},[36,108735,47743],{"class":46},[36,108737,47746],{"class":42},[36,108739,108740],{"class":38,"line":85},[36,108741,2880],{"emptyLinePlaceholder":553},[36,108743,108744],{"class":38,"line":419},[36,108745,2880],{"emptyLinePlaceholder":553},[36,108747,108748,108750,108752],{"class":38,"line":425},[36,108749,101715],{"class":53},[36,108751,14044],{"class":46},[36,108753,101720],{"class":405},[36,108755,108756],{"class":38,"line":431},[36,108757,108758],{"class":405},"\u003Cmujoco model=\"renderer_demo\">\n",[36,108760,108761],{"class":38,"line":437},[36,108762,101730],{"class":405},[36,108764,108765],{"class":38,"line":443},[36,108766,2880],{"emptyLinePlaceholder":553},[36,108768,108769],{"class":38,"line":2092},[36,108770,101739],{"class":405},[36,108772,108773],{"class":38,"line":2097},[36,108774,108488],{"class":405},[36,108776,108777],{"class":38,"line":2103},[36,108778,108779],{"class":405},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,108781,108782],{"class":38,"line":2108},[36,108783,108493],{"class":405},[36,108785,108786],{"class":38,"line":2122},[36,108787,2880],{"emptyLinePlaceholder":553},[36,108789,108790],{"class":38,"line":2127},[36,108791,101753],{"class":405},[36,108793,108794],{"class":38,"line":2133},[36,108795,101758],{"class":405},[36,108797,108798],{"class":38,"line":2154},[36,108799,108510],{"class":405},[36,108801,108802],{"class":38,"line":2159},[36,108803,101768],{"class":405},[36,108805,108806],{"class":38,"line":2173},[36,108807,101773],{"class":405},[36,108809,108810],{"class":38,"line":2178},[36,108811,101778],{"class":405},[36,108813,108814],{"class":38,"line":2207},[36,108815,96169],{"class":405},[36,108817,108818],{"class":38,"line":2212},[36,108819,2880],{"emptyLinePlaceholder":553},[36,108821,108822],{"class":38,"line":2229},[36,108823,2880],{"emptyLinePlaceholder":553},[36,108825,108826,108828,108830,108832,108834],{"class":38,"line":2234},[36,108827,32424],{"class":46},[36,108829,2453],{"class":2443},[36,108831,101799],{"class":42},[36,108833,96157],{"class":53},[36,108835,4219],{"class":42},[36,108837,108838,108840,108842,108844,108846],{"class":38,"line":2239},[36,108839,101808],{"class":42},[36,108841,47],{"class":46},[36,108843,101813],{"class":42},[36,108845,101715],{"class":53},[36,108847,63],{"class":42},[36,108849,108850,108852,108854],{"class":38,"line":2244},[36,108851,101822],{"class":42},[36,108853,47],{"class":46},[36,108855,101827],{"class":42},[36,108857,108858,108861,108863,108865,108867,108869,108871,108873,108875,108877,108879],{"class":38,"line":2258},[36,108859,108860],{"class":42},"    renderer ",[36,108862,47],{"class":46},[36,108864,108275],{"class":42},[36,108866,25462],{"class":5696},[36,108868,47],{"class":46},[36,108870,42819],{"class":53},[36,108872,12915],{"class":42},[36,108874,25458],{"class":5696},[36,108876,47],{"class":46},[36,108878,108290],{"class":53},[36,108880,63],{"class":42},[36,108882,108883],{"class":38,"line":2263},[36,108884,2880],{"emptyLinePlaceholder":553},[36,108886,108887,108889,108891,108893,108895,108897,108899],{"class":38,"line":3057},[36,108888,3681],{"class":46},[36,108890,101902],{"class":42},[36,108892,26524],{"class":46},[36,108894,32920],{"class":53},[36,108896,345],{"class":42},[36,108898,930],{"class":53},[36,108900,31264],{"class":42},[36,108902,108903],{"class":38,"line":3071},[36,108904,101917],{"class":42},[36,108906,108907],{"class":38,"line":3079},[36,108908,2880],{"emptyLinePlaceholder":553},[36,108910,108911,108914,108917,108919,108922],{"class":38,"line":3084},[36,108912,108913],{"class":42},"    renderer.update_scene(data, ",[36,108915,108916],{"class":5696},"camera",[36,108918,47],{"class":46},[36,108920,108921],{"class":405},"\"fixed_camera\"",[36,108923,63],{"class":42},[36,108925,108926,108929,108931],{"class":38,"line":3090},[36,108927,108928],{"class":42},"    image ",[36,108930,47],{"class":46},[36,108932,107986],{"class":42},[36,108934,108935],{"class":38,"line":3096},[36,108936,2880],{"emptyLinePlaceholder":553},[36,108938,108939,108942,108944,108947,108949],{"class":38,"line":3101},[36,108940,108941],{"class":42},"    output_path ",[36,108943,47],{"class":46},[36,108945,108946],{"class":42}," Path(",[36,108948,108416],{"class":405},[36,108950,63],{"class":42},[36,108952,108953],{"class":38,"line":8428},[36,108954,108955],{"class":42},"    Image.fromarray(image).save(output_path)\n",[36,108957,108958],{"class":38,"line":8452},[36,108959,108960],{"class":42},"    renderer.close()\n",[36,108962,108963],{"class":38,"line":8457},[36,108964,2880],{"emptyLinePlaceholder":553},[36,108966,108967,108969,108971,108974],{"class":38,"line":8463},[36,108968,31777],{"class":53},[36,108970,345],{"class":42},[36,108972,108973],{"class":405},"\"saved:\"",[36,108975,108976],{"class":42},", output_path.resolve())\n",[36,108978,108979,108981,108983,108986],{"class":38,"line":8490},[36,108980,31777],{"class":53},[36,108982,345],{"class":42},[36,108984,108985],{"class":405},"\"image shape:\"",[36,108987,108988],{"class":42},", image.shape)\n",[36,108990,108991],{"class":38,"line":8495},[36,108992,2880],{"emptyLinePlaceholder":553},[36,108994,108995],{"class":38,"line":8501},[36,108996,2880],{"emptyLinePlaceholder":553},[36,108998,108999,109001,109003,109005,109007],{"class":38,"line":8513},[36,109000,2011],{"class":46},[36,109002,31698],{"class":53},[36,109004,101960],{"class":46},[36,109006,101963],{"class":405},[36,109008,4219],{"class":42},[36,109010,109011],{"class":38,"line":8525},[36,109012,101970],{"class":42},[19,109014,103971],{},[26,109016,109018],{"className":24302,"code":109017,"language":24304,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,109019,109020],{"__ignoreMap":31},[36,109021,109022,109024],{"class":38,"line":39},[36,109023,101684],{"class":2443},[36,109025,109026],{"class":405}," ch5_renderer.py\n",[596,109028,101973],{"id":101973},[19,109030,109031],{},"viewer 上下文：",[26,109033,109035],{"className":28,"code":109034,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,109036,109037],{"__ignoreMap":31},[36,109038,109039,109041,109043,109045],{"class":38,"line":39},[36,109040,108234],{"class":46},[36,109042,108237],{"class":42},[36,109044,31861],{"class":46},[36,109046,108242],{"class":42},[19,109048,109049,109051],{},[33,109050,108234],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109053,109054],{},"窗口循环：",[26,109056,109058],{"className":28,"code":109057,"language":30,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,109059,109060],{"__ignoreMap":31},[36,109061,109062,109065,109067,109069,109071,109073,109075],{"class":38,"line":39},[36,109063,109064],{"class":46},"while",[36,109066,108588],{"class":42},[36,109068,30941],{"class":46},[36,109070,108593],{"class":42},[36,109072,1523],{"class":46},[36,109074,108598],{"class":53},[36,109076,4219],{"class":42},[19,109078,109079],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109081,109082],{},"固定相机：",[26,109084,109086],{"className":53544,"code":109085,"language":53546,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,109087,109088],{"__ignoreMap":31},[36,109089,109090,109092,109094,109096,109098,109100,109102,109104,109107,109110,109112,109115],{"class":38,"line":39},[36,109091,1523],{"class":42},[36,109093,108916],{"class":51777},[36,109095,15400],{"class":2443},[36,109097,47],{"class":42},[36,109099,108921],{"class":405},[36,109101,101507],{"class":2443},[36,109103,47],{"class":42},[36,109105,109106],{"class":405},"\"1.5 -2.0 1.2\"",[36,109108,109109],{"class":2443}," xyaxes",[36,109111,47],{"class":42},[36,109113,109114],{"class":405},"\"1 0.75 0 0 0 1\"",[36,109116,101545],{"class":42},[19,109118,109119],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[596,109121,109123],{"id":109122},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,109125,109127],{"className":28,"code":109126,"language":30,"meta":31,"style":31},"import time\n",[33,109128,109129],{"__ignoreMap":31},[36,109130,109131,109133],{"class":38,"line":39},[36,109132,30871],{"class":46},[36,109134,32306],{"class":42},[19,109136,109137],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,109139,109141],{"className":28,"code":109140,"language":30,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,109142,109143,109149],{"__ignoreMap":31},[36,109144,109145,109147],{"class":38,"line":39},[36,109146,30871],{"class":46},[36,109148,101702],{"class":42},[36,109150,109151,109153],{"class":38,"line":66},[36,109152,30871],{"class":46},[36,109154,107953],{"class":42},[19,109156,109157],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,109159,109160],{"className":28,"code":109034,"language":30,"meta":31,"style":31},[33,109161,109162],{"__ignoreMap":31},[36,109163,109164,109166,109168,109170],{"class":38,"line":39},[36,109165,108234],{"class":46},[36,109167,108237],{"class":42},[36,109169,31861],{"class":46},[36,109171,108242],{"class":42},[19,109173,109174,109175,109178],{},"打开一个 viewer 窗口。",[33,109176,109177],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,109180,109181],{"className":28,"code":109057,"language":30,"meta":31,"style":31},[33,109182,109183],{"__ignoreMap":31},[36,109184,109185,109187,109189,109191,109193,109195,109197],{"class":38,"line":39},[36,109186,109064],{"class":46},[36,109188,108588],{"class":42},[36,109190,30941],{"class":46},[36,109192,108593],{"class":42},[36,109194,1523],{"class":46},[36,109196,108598],{"class":53},[36,109198,4219],{"class":42},[19,109200,109201,109202,109205],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,109203,109204],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,109207,109209],{"className":28,"code":109208,"language":30,"meta":31,"style":31},"step_start = time.time()\n",[33,109210,109211],{"__ignoreMap":31},[36,109212,109213,109216,109218],{"class":38,"line":39},[36,109214,109215],{"class":42},"step_start ",[36,109217,47],{"class":46},[36,109219,108610],{"class":42},[19,109221,109222],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,109224,109225],{"className":28,"code":108319,"language":30,"meta":31,"style":31},[33,109226,109227,109231],{"__ignoreMap":31},[36,109228,109229],{"class":38,"line":39},[36,109230,104906],{"class":42},[36,109232,109233],{"class":38,"line":66},[36,109234,108330],{"class":42},[19,109236,109237,109239,109240,109242,109243,109245,109246,109249],{},[33,109238,101616],{}," 推进物理仿真。",[33,109241,108338],{}," 把最新的 ",[33,109244,33878],{}," 同步到窗口里显示。没有 ",[33,109247,109248],{},"sync()","，窗口可能看不到最新状态。",[26,109251,109252],{"className":28,"code":108349,"language":30,"meta":31,"style":31},[33,109253,109254],{"__ignoreMap":31},[36,109255,109256,109258,109260,109262,109264,109266,109268],{"class":38,"line":39},[36,109257,108356],{"class":42},[36,109259,47],{"class":46},[36,109261,108361],{"class":42},[36,109263,173],{"class":46},[36,109265,108366],{"class":42},[36,109267,173],{"class":46},[36,109269,108371],{"class":42},[19,109271,109272],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,109274,109276],{"className":28,"code":109275,"language":30,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,109277,109278,109290],{"__ignoreMap":31},[36,109279,109280,109282,109284,109286,109288],{"class":38,"line":39},[36,109281,2011],{"class":46},[36,109283,108648],{"class":42},[36,109285,1573],{"class":46},[36,109287,4573],{"class":53},[36,109289,4219],{"class":42},[36,109291,109292],{"class":38,"line":66},[36,109293,109294],{"class":42},"    time.sleep(sleep_time)\n",[19,109296,109297],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[596,109299,109301],{"id":109300},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,109303,109305],{"className":28,"code":109304,"language":30,"meta":31,"style":31},"from pathlib import Path\n",[33,109306,109307],{"__ignoreMap":31},[36,109308,109309,109311,109313,109315],{"class":38,"line":39},[36,109310,31215],{"class":46},[36,109312,108712],{"class":42},[36,109314,30871],{"class":46},[36,109316,108717],{"class":42},[19,109318,109319,109320,109323,109324,109327],{},"导入 ",[33,109321,109322],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,109325,109326],{},"Path(\"render_output.png\")"," 更清晰。",[26,109329,109331],{"className":28,"code":109330,"language":30,"meta":31,"style":31},"from PIL import Image\n",[33,109332,109333],{"__ignoreMap":31},[36,109334,109335,109337,109339,109341],{"class":38,"line":39},[36,109336,31215],{"class":46},[36,109338,47740],{"class":53},[36,109340,47743],{"class":46},[36,109342,47746],{"class":42},[19,109344,109345],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,109347,109348],{"className":53544,"code":109085,"language":53546,"meta":31,"style":31},[33,109349,109350],{"__ignoreMap":31},[36,109351,109352,109354,109356,109358,109360,109362,109364,109366,109368,109370,109372,109374],{"class":38,"line":39},[36,109353,1523],{"class":42},[36,109355,108916],{"class":51777},[36,109357,15400],{"class":2443},[36,109359,47],{"class":42},[36,109361,108921],{"class":405},[36,109363,101507],{"class":2443},[36,109365,47],{"class":42},[36,109367,109106],{"class":405},[36,109369,109109],{"class":2443},[36,109371,47],{"class":42},[36,109373,109114],{"class":405},[36,109375,101545],{"class":42},[19,109377,109378,109379,109381,109382,109384,109385,109388,109389,109391],{},"定义一个相机。",[33,109380,80287],{}," 是相机名字。",[33,109383,104547],{}," 是相机在世界里的位置。",[33,109386,109387],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,109390,104547],{}," 来调视角。",[26,109393,109395],{"className":28,"code":109394,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,109396,109397],{"__ignoreMap":31},[36,109398,109399,109401,109403,109405,109407,109409,109411,109413,109415,109417,109419],{"class":38,"line":39},[36,109400,107971],{"class":42},[36,109402,47],{"class":46},[36,109404,108275],{"class":42},[36,109406,25462],{"class":5696},[36,109408,47],{"class":46},[36,109410,42819],{"class":53},[36,109412,12915],{"class":42},[36,109414,25458],{"class":5696},[36,109416,47],{"class":46},[36,109418,108290],{"class":53},[36,109420,63],{"class":42},[19,109422,109423,109424,101419,109426,109428],{},"创建离屏渲染器。",[33,109425,25462],{},[33,109427,25458],{}," 决定输出图片大小。",[26,109430,109431],{"className":28,"code":102077,"language":30,"meta":31,"style":31},[33,109432,109433,109449],{"__ignoreMap":31},[36,109434,109435,109437,109439,109441,109443,109445,109447],{"class":38,"line":39},[36,109436,3505],{"class":46},[36,109438,101902],{"class":42},[36,109440,26524],{"class":46},[36,109442,32920],{"class":53},[36,109444,345],{"class":42},[36,109446,930],{"class":53},[36,109448,31264],{"class":42},[36,109450,109451],{"class":38,"line":66},[36,109452,102100],{"class":42},[19,109454,109455],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,109457,109459],{"className":28,"code":109458,"language":30,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,109460,109461],{"__ignoreMap":31},[36,109462,109463,109466,109468,109470,109472],{"class":38,"line":39},[36,109464,109465],{"class":42},"renderer.update_scene(data, ",[36,109467,108916],{"class":5696},[36,109469,47],{"class":46},[36,109471,108921],{"class":405},[36,109473,63],{"class":42},[19,109475,109476,109477,109479,109480,109483],{},"告诉 renderer：用当前 ",[33,109478,33878],{}," 的状态更新画面，并使用名为 ",[33,109481,109482],{},"fixed_camera"," 的相机视角。",[26,109485,109486],{"className":28,"code":108381,"language":30,"meta":31,"style":31},[33,109487,109488],{"__ignoreMap":31},[36,109489,109490,109492,109494],{"class":38,"line":39},[36,109491,107981],{"class":42},[36,109493,47],{"class":46},[36,109495,107986],{"class":42},[19,109497,109498,109499,109502],{},"真正渲染出图像。",[33,109500,109501],{},"image"," 是一个 NumPy 数组，不是文件。",[26,109504,109506],{"className":28,"code":109505,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,109507,109508],{"__ignoreMap":31},[36,109509,109510],{"class":38,"line":39},[36,109511,109505],{"class":42},[19,109513,109514,109515,28866],{},"把数组转换成图片，并保存到 ",[33,109516,109517],{},"render_output.png",[26,109519,109521],{"className":28,"code":109520,"language":30,"meta":31,"style":31},"renderer.close()\n",[33,109522,109523],{"__ignoreMap":31},[36,109524,109525],{"class":38,"line":39},[36,109526,109520],{"class":42},[19,109528,109529],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109531,102717],{"id":102716},[19,109533,109534,109535,109537,109538,28866],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,109536,109517],{},"，并输出图像数组形状，例如 ",[33,109539,109540],{},"(480, 640, 3)",[19,109542,109543],{},"如果图片里看不到方块，先检查：",[579,109545,109546,109549,109552],{},[582,109547,109548],{},"方块是否掉到相机视野外。",[582,109550,109551],{},"camera 位置是否合理。",[582,109553,109554,109555,109558],{},"是否在 ",[33,109556,109557],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109560,102749],{"id":102748},[19,109562,109563],{},"运行 viewer:",[26,109565,109567],{"className":24302,"code":109566,"language":24304,"meta":31,"style":31},"python ch5_viewer.py\n",[33,109568,109569],{"__ignoreMap":31},[36,109570,109571,109573],{"class":38,"line":39},[36,109572,30],{"class":2443},[36,109574,108697],{"class":405},[19,109576,109577],{},"运行 renderer:",[26,109579,109581],{"className":24302,"code":109580,"language":24304,"meta":31,"style":31},"python ch5_renderer.py\n",[33,109582,109583],{"__ignoreMap":31},[36,109584,109585,109587],{"class":38,"line":39},[36,109586,30],{"class":2443},[36,109588,109026],{"class":405},[19,109590,109591],{},"如果在服务器上运行:",[26,109593,109595],{"className":24302,"code":109594,"language":24304,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,109596,109597],{"__ignoreMap":31},[36,109598,109599,109601,109603,109605,109608],{"class":38,"line":39},[36,109600,108215],{"class":42},[36,109602,47],{"class":46},[36,109604,108205],{"class":405},[36,109606,109607],{"class":2443}," python",[36,109609,109026],{"class":405},[19,109611,108183],{},[26,109613,109615],{"className":24302,"code":109614,"language":24304,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,109616,109617],{"__ignoreMap":31},[36,109618,109619,109621,109623,109625,109627],{"class":38,"line":39},[36,109620,108215],{"class":42},[36,109622,47],{"class":46},[36,109624,108209],{"class":405},[36,109626,109607],{"class":2443},[36,109628,109026],{"class":405},[19,109630,109631],{},"再做几个练习：",[579,109633,109634,109641,109644,109650],{},[582,109635,109636,109637,109640],{},"把 renderer 分辨率改成 ",[33,109638,109639],{},"height=240, width=320","，观察输出 shape。",[582,109642,109643],{},"把方块颜色改成蓝色，重新保存图片。",[582,109645,109646,109647,109649],{},"把相机 ",[33,109648,104547],{}," 改远一点，观察画面中物体是否变小。",[582,109651,109652,109653,102815,109656,109659],{},"把 viewer 示例中的 ",[33,109654,109655],{},"data.time \u003C 5.0",[33,109657,109658],{},"data.time \u003C 20.0","，观察更长时间。",[14,109661,102854],{"id":102853},[596,109663,109665],{"id":109664},"viewer-窗口打不开","viewer 窗口打不开",[19,109667,109668],{},"安装:",[26,109670,109672],{"className":24302,"code":109671,"language":24304,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,109673,109674],{"__ignoreMap":31},[36,109675,109676,109678,109680,109682,109684,109686,109688,109690,109692,109694,109696],{"class":38,"line":39},[36,109677,25057],{"class":2443},[36,109679,26796],{"class":405},[36,109681,24314],{"class":405},[36,109683,26881],{"class":53},[36,109685,102907],{"class":405},[36,109687,101235],{"class":405},[36,109689,102912],{"class":405},[36,109691,101248],{"class":405},[36,109693,101254],{"class":405},[36,109695,101245],{"class":405},[36,109697,109698],{"class":405}," libXinerama\n",[596,109700,109702],{"id":109701},"glfwerror",[33,109703,109704],{},"GLFWError",[19,109706,109707],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[596,109709,109711],{"id":109710},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109713,109714,109715,83016,109717,109719],{},"尝试 ",[33,109716,101438],{},[33,109718,101441],{},"。可能存在版本差异。",[596,109721,109722],{"id":109722},"保存图片是黑的",[19,109724,102976],{},[579,109726,109727,109730,109733,109743],{},[582,109728,109729],{},"XML 里是否有 light。",[582,109731,109732],{},"相机是否对着模型。",[582,109734,109735,109736,109739,109740,28866],{},"是否先 ",[33,109737,109738],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,109741,109742],{},"renderer.render()",[582,109744,109745],{},"物体是否已经掉出视野。",[596,109747,109748],{"id":109748},"远程服务器没有显示器",[19,109750,109751],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,109753,109754],{"className":24302,"code":109594,"language":24304,"meta":31,"style":31},[33,109755,109756],{"__ignoreMap":31},[36,109757,109758,109760,109762,109764,109766],{"class":38,"line":39},[36,109759,108215],{"class":42},[36,109761,47],{"class":46},[36,109763,108205],{"class":405},[36,109765,109607],{"class":2443},[36,109767,109026],{"class":405},[19,109769,109770],{},"如果 EGL 不可用，再尝试：",[26,109772,109773],{"className":24302,"code":109614,"language":24304,"meta":31,"style":31},[33,109774,109775],{"__ignoreMap":31},[36,109776,109777,109779,109781,109783,109785],{"class":38,"line":39},[36,109778,108215],{"class":42},[36,109780,47],{"class":46},[36,109782,108209],{"class":405},[36,109784,109607],{"class":2443},[36,109786,109026],{"class":405},[14,109788,103008],{"id":103007},[19,109790,109791],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[579,109793,109794,109797,109800],{},[582,109795,109796],{},"先用 viewer 看模型和控制是否正常。",[582,109798,109799],{},"再用 renderer 保存图片或构造视觉观测。",[582,109801,109802],{},"最后把状态、动作、图像、奖励组织成训练数据。",[539,109804,109805],{},"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":31,"searchDepth":66,"depth":66,"links":109807},[109808,109809,109810,109815,109820,109821,109822,109829],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":109811},[109812,109813,109814],{"id":108312,"depth":73,"text":108313},{"id":108342,"depth":73,"text":108343},{"id":108377,"depth":73,"text":108378},{"id":101653,"depth":66,"text":101654,"children":109816},[109817,109818,109819],{"id":101973,"depth":73,"text":101973},{"id":109122,"depth":73,"text":109123},{"id":109300,"depth":73,"text":109301},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":109823},[109824,109825,109826,109827,109828],{"id":109664,"depth":73,"text":109665},{"id":109701,"depth":73,"text":109704},{"id":109710,"depth":73,"text":109711},{"id":109722,"depth":73,"text":109722},{"id":109748,"depth":73,"text":109748},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107920,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109836,"title":109837,"body":109838,"description":31,"extension":551,"meta":111749,"navigation":553,"path":111750,"seo":111751,"stem":111752,"__hash__":111753},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109839,"toc":111725},[109840,109843,109845,109848,109850,109869,109872,109878,109881,109883,109885,109909,109911,109925,109927,109968,109970,109981,109983,109986,109992,109995,110029,110032,110064,110067,110099,110103,110106,110146,110149,110155,110158,110164,110168,110171,110177,110180,110184,110187,110227,110229,110242,110245,110247,110829,110831,110843,110846,110857,110859,110862,110881,110893,110896,110917,110920,110923,110966,110969,110972,110992,110999,111001,111019,111034,111037,111043,111046,111052,111069,111076,111107,111118,111152,111163,111180,111189,111197,111202,111216,111219,111240,111246,111260,111265,111295,111305,111330,111338,111361,111364,111380,111383,111391,111397,111419,111432,111453,111462,111501,111512,111514,111517,111523,111526,111529,111535,111538,111558,111561,111563,111602,111604,111607,111615,111618,111621,111648,111651,111661,111667,111670,111676,111678,111684,111688,111691,111693,111696,111720,111723],[10,109841,109837],{"id":109842},"_6控制任务cartpole",[14,109844,101048],{"id":101047},[19,109846,109847],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109849,104732],{},[579,109851,109852,109855,109857,109860,109863,109866],{},[582,109853,109854],{},"slide joint",[582,109856,106585],{},[582,109858,109859],{},"cart force actuator",[582,109861,109862],{},"状态观测",[582,109864,109865],{},"简单控制循环",[582,109867,109868],{},"reward 设计雏形",[19,109870,109871],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,109873,109876],{"className":109874,"code":109875,"language":5667,"meta":31},[5665],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,109877,109875],{"__ignoreMap":31},[19,109879,109880],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109882,101171],{"id":101170},[19,109884,101174],{},[26,109886,109887],{"className":24302,"code":104789,"language":24304,"meta":31,"style":31},[33,109888,109889],{"__ignoreMap":31},[36,109890,109891,109893,109895,109897,109899,109901,109903,109905,109907],{"class":38,"line":39},[36,109892,25057],{"class":2443},[36,109894,26796],{"class":405},[36,109896,24314],{"class":405},[36,109898,26881],{"class":53},[36,109900,104804],{"class":405},[36,109902,101199],{"class":405},[36,109904,102902],{"class":405},[36,109906,101215],{"class":405},[36,109908,104813],{"class":405},[19,109910,103220],{},[26,109912,109913],{"className":24302,"code":101320,"language":24304,"meta":31,"style":31},[33,109914,109915],{"__ignoreMap":31},[36,109916,109917,109919,109921,109923],{"class":38,"line":39},[36,109918,24311],{"class":2443},[36,109920,24314],{"class":405},[36,109922,101331],{"class":405},[36,109924,101334],{"class":405},[19,109926,103237],{},[26,109928,109930],{"className":24302,"code":109929,"language":24304,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[33,109931,109932,109949,109958],{"__ignoreMap":31},[36,109933,109934,109936,109938,109940,109943,109945,109947],{"class":38,"line":39},[36,109935,30811],{"class":2443},[36,109937,29657],{"class":405},[36,109939,25596],{"class":53},[36,109941,109942],{"class":405}," mujoco-cartpole",[36,109944,101376],{"class":405},[36,109946,101379],{"class":53},[36,109948,101382],{"class":53},[36,109950,109951,109953,109955],{"class":38,"line":66},[36,109952,30811],{"class":2443},[36,109954,101389],{"class":405},[36,109956,109957],{"class":405}," mujoco-cartpole\n",[36,109959,109960,109962,109964,109966],{"class":38,"line":73},[36,109961,24311],{"class":2443},[36,109963,24314],{"class":405},[36,109965,101331],{"class":405},[36,109967,101334],{"class":405},[19,109969,101405],{},[579,109971,109972,109975,109978],{},[582,109973,109974],{},"本章不依赖 Gymnasium。",[582,109976,109977],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[582,109979,109980],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109982,101446],{"id":101445},[19,109984,109985],{},"Cartpole 的模型结构:",[26,109987,109990],{"className":109988,"code":109989,"language":5667,"meta":31},[5665],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,109991,109989],{"__ignoreMap":31},[19,109993,109994],{},"小车通过 slide joint 左右移动:",[26,109996,109998],{"className":53544,"code":109997,"language":53546,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,109999,110000],{"__ignoreMap":31},[36,110001,110002,110004,110006,110008,110010,110013,110015,110017,110020,110022,110024,110027],{"class":38,"line":39},[36,110003,1523],{"class":42},[36,110005,103357],{"class":51777},[36,110007,15400],{"class":2443},[36,110009,47],{"class":42},[36,110011,110012],{"class":405},"\"cart_x\"",[36,110014,54301],{"class":2443},[36,110016,47],{"class":42},[36,110018,110019],{"class":405},"\"slide\"",[36,110021,106429],{"class":2443},[36,110023,47],{"class":42},[36,110025,110026],{"class":405},"\"1 0 0\"",[36,110028,101545],{"class":42},[19,110030,110031],{},"杆子通过 hinge joint 旋转:",[26,110033,110035],{"className":53544,"code":110034,"language":53546,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,110036,110037],{"__ignoreMap":31},[36,110038,110039,110041,110043,110045,110047,110050,110052,110054,110056,110058,110060,110062],{"class":38,"line":39},[36,110040,1523],{"class":42},[36,110042,103357],{"class":51777},[36,110044,15400],{"class":2443},[36,110046,47],{"class":42},[36,110048,110049],{"class":405},"\"pole_hinge\"",[36,110051,54301],{"class":2443},[36,110053,47],{"class":42},[36,110055,106420],{"class":405},[36,110057,106429],{"class":2443},[36,110059,47],{"class":42},[36,110061,106434],{"class":405},[36,110063,101545],{"class":42},[19,110065,110066],{},"控制力作用在小车 slide joint 上:",[26,110068,110070],{"className":53544,"code":110069,"language":53546,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,110071,110072],{"__ignoreMap":31},[36,110073,110074,110076,110078,110080,110082,110085,110087,110089,110091,110093,110095,110097],{"class":38,"line":39},[36,110075,1523],{"class":42},[36,110077,106475],{"class":51777},[36,110079,15400],{"class":2443},[36,110081,47],{"class":42},[36,110083,110084],{"class":405},"\"cart_motor\"",[36,110086,106485],{"class":2443},[36,110088,47],{"class":42},[36,110090,110012],{"class":405},[36,110092,106492],{"class":2443},[36,110094,47],{"class":42},[36,110096,54793],{"class":405},[36,110098,101545],{"class":42},[596,110100,110102],{"id":110101},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110104,110105],{},"这个简化模型有两个关节：",[758,110107,110108,110119],{},[761,110109,110110],{},[764,110111,110112,110114,110116],{},[767,110113,103160],{"align":24216},[767,110115,24217],{"align":24216},[767,110117,110118],{"align":24216},"对应状态",[805,110120,110121,110134],{},[764,110122,110123,110128,110131],{},[810,110124,110125],{"align":24216},[33,110126,110127],{},"cart_x",[810,110129,110130],{"align":24216},"slide",[810,110132,110133],{"align":24216},"小车 x 位置",[764,110135,110136,110141,110143],{},[810,110137,110138],{"align":24216},[33,110139,110140],{},"pole_hinge",[810,110142,106241],{"align":24216},[810,110144,110145],{"align":24216},"杆子角度",[19,110147,110148],{},"所以：",[26,110150,110153],{"className":110151,"code":110152,"language":5667,"meta":31},[5665],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,110154,110152],{"__ignoreMap":31},[19,110156,110157],{},"把它们拼起来就是观测：",[26,110159,110162],{"className":110160,"code":110161,"language":5667,"meta":31},[5665],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,110163,110161],{"__ignoreMap":31},[596,110165,110167],{"id":110166},"action-是什么","action 是什么",[19,110169,110170],{},"本章只有一个 actuator：",[26,110172,110175],{"className":110173,"code":110174,"language":5667,"meta":31},[5665],"data.ctrl[0] = action\n",[33,110176,110174],{"__ignoreMap":31},[19,110178,110179],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[596,110181,110183],{"id":110182},"reward-是什么","reward 是什么",[19,110185,110186],{},"奖励函数：",[26,110188,110190],{"className":28,"code":110189,"language":30,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,110191,110192],{"__ignoreMap":31},[36,110193,110194,110196,110199,110201,110203,110205,110208,110210,110213,110215,110217,110219,110222,110224],{"class":38,"line":39},[36,110195,17526],{"class":46},[36,110197,110198],{"class":53}," float",[36,110200,345],{"class":42},[36,110202,102804],{"class":53},[36,110204,52748],{"class":46},[36,110206,110207],{"class":53}," 0.1",[36,110209,6998],{"class":46},[36,110211,110212],{"class":42}," cart_x ",[36,110214,1071],{"class":46},[36,110216,110212],{"class":42},[36,110218,173],{"class":46},[36,110220,110221],{"class":42}," pole_angle ",[36,110223,1071],{"class":46},[36,110225,110226],{"class":42}," pole_angle)\n",[19,110228,106627],{},[579,110230,110231,110236,110239],{},[582,110232,110233,110234,28866],{},"基础奖励是 ",[33,110235,102804],{},[582,110237,110238],{},"小车离中心越远，扣分越多。",[582,110240,110241],{},"杆子角度越大，扣分越多。",[19,110243,110244],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110246,101654],{"id":101653},[26,110248,110250],{"className":28,"code":110249,"language":30,"meta":31,"style":31},"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",[33,110251,110252,110258,110268,110272,110276,110284,110289,110293,110297,110301,110306,110310,110315,110320,110325,110329,110334,110339,110344,110348,110352,110356,110360,110364,110369,110373,110377,110381,110385,110389,110399,110406,110410,110414,110428,110442,110455,110485,110489,110493,110505,110517,110525,110529,110542,110546,110550,110559,110563,110579,110589,110602,110615,110619,110642,110660,110664,110676,110680,110684,110694,110704,110708,110724,110765,110769,110789,110805,110809,110813,110825],{"__ignoreMap":31},[36,110253,110254,110256],{"class":38,"line":39},[36,110255,30871],{"class":46},[36,110257,101702],{"class":42},[36,110259,110260,110262,110264,110266],{"class":38,"line":66},[36,110261,30871],{"class":46},[36,110263,31858],{"class":42},[36,110265,31861],{"class":46},[36,110267,31864],{"class":42},[36,110269,110270],{"class":38,"line":73},[36,110271,2880],{"emptyLinePlaceholder":553},[36,110273,110274],{"class":38,"line":79},[36,110275,2880],{"emptyLinePlaceholder":553},[36,110277,110278,110280,110282],{"class":38,"line":85},[36,110279,101715],{"class":53},[36,110281,14044],{"class":46},[36,110283,101720],{"class":405},[36,110285,110286],{"class":38,"line":419},[36,110287,110288],{"class":405},"\u003Cmujoco model=\"cartpole\">\n",[36,110290,110291],{"class":38,"line":425},[36,110292,101730],{"class":405},[36,110294,110295],{"class":38,"line":431},[36,110296,2880],{"emptyLinePlaceholder":553},[36,110298,110299],{"class":38,"line":437},[36,110300,101739],{"class":405},[36,110302,110303],{"class":38,"line":443},[36,110304,110305],{"class":405},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,110307,110308],{"class":38,"line":2092},[36,110309,2880],{"emptyLinePlaceholder":553},[36,110311,110312],{"class":38,"line":2097},[36,110313,110314],{"class":405},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,110316,110317],{"class":38,"line":2103},[36,110318,110319],{"class":405},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,110321,110322],{"class":38,"line":2108},[36,110323,110324],{"class":405},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,110326,110327],{"class":38,"line":2122},[36,110328,2880],{"emptyLinePlaceholder":553},[36,110330,110331],{"class":38,"line":2127},[36,110332,110333],{"class":405},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,110335,110336],{"class":38,"line":2133},[36,110337,110338],{"class":405},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,110340,110341],{"class":38,"line":2154},[36,110342,110343],{"class":405},"        \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",[36,110345,110346],{"class":38,"line":2159},[36,110347,106839],{"class":405},[36,110349,110350],{"class":38,"line":2173},[36,110351,101768],{"class":405},[36,110353,110354],{"class":38,"line":2178},[36,110355,101773],{"class":405},[36,110357,110358],{"class":38,"line":2207},[36,110359,2880],{"emptyLinePlaceholder":553},[36,110361,110362],{"class":38,"line":2212},[36,110363,106856],{"class":405},[36,110365,110366],{"class":38,"line":2229},[36,110367,110368],{"class":405},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,110370,110371],{"class":38,"line":2234},[36,110372,106866],{"class":405},[36,110374,110375],{"class":38,"line":2239},[36,110376,101778],{"class":405},[36,110378,110379],{"class":38,"line":2244},[36,110380,96169],{"class":405},[36,110382,110383],{"class":38,"line":2258},[36,110384,2880],{"emptyLinePlaceholder":553},[36,110386,110387],{"class":38,"line":2263},[36,110388,2880],{"emptyLinePlaceholder":553},[36,110390,110391,110393,110396],{"class":38,"line":3057},[36,110392,32424],{"class":46},[36,110394,110395],{"class":2443}," get_observation",[36,110397,110398],{"class":42},"(data: mujoco.MjData) -> np.ndarray:\n",[36,110400,110401,110403],{"class":38,"line":3071},[36,110402,4570],{"class":46},[36,110404,110405],{"class":42}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,110407,110408],{"class":38,"line":3079},[36,110409,2880],{"emptyLinePlaceholder":553},[36,110411,110412],{"class":38,"line":3084},[36,110413,2880],{"emptyLinePlaceholder":553},[36,110415,110416,110418,110421,110424,110426],{"class":38,"line":3090},[36,110417,32424],{"class":46},[36,110419,110420],{"class":2443}," compute_reward",[36,110422,110423],{"class":42},"(obs: np.ndarray) -> ",[36,110425,666],{"class":53},[36,110427,4219],{"class":42},[36,110429,110430,110433,110435,110438,110440],{"class":38,"line":3096},[36,110431,110432],{"class":42},"    cart_x ",[36,110434,47],{"class":46},[36,110436,110437],{"class":42}," obs[",[36,110439,812],{"class":53},[36,110441,33723],{"class":42},[36,110443,110444,110447,110449,110451,110453],{"class":38,"line":3101},[36,110445,110446],{"class":42},"    pole_angle ",[36,110448,47],{"class":46},[36,110450,110437],{"class":42},[36,110452,54],{"class":53},[36,110454,33723],{"class":42},[36,110456,110457,110459,110461,110463,110465,110467,110469,110471,110473,110475,110477,110479,110481,110483],{"class":38,"line":8428},[36,110458,4570],{"class":46},[36,110460,110198],{"class":53},[36,110462,345],{"class":42},[36,110464,102804],{"class":53},[36,110466,52748],{"class":46},[36,110468,110207],{"class":53},[36,110470,6998],{"class":46},[36,110472,110212],{"class":42},[36,110474,1071],{"class":46},[36,110476,110212],{"class":42},[36,110478,173],{"class":46},[36,110480,110221],{"class":42},[36,110482,1071],{"class":46},[36,110484,110226],{"class":42},[36,110486,110487],{"class":38,"line":8452},[36,110488,2880],{"emptyLinePlaceholder":553},[36,110490,110491],{"class":38,"line":8457},[36,110492,2880],{"emptyLinePlaceholder":553},[36,110494,110495,110497,110499,110501,110503],{"class":38,"line":8463},[36,110496,32424],{"class":46},[36,110498,2453],{"class":2443},[36,110500,101799],{"class":42},[36,110502,96157],{"class":53},[36,110504,4219],{"class":42},[36,110506,110507,110509,110511,110513,110515],{"class":38,"line":8490},[36,110508,101808],{"class":42},[36,110510,47],{"class":46},[36,110512,101813],{"class":42},[36,110514,101715],{"class":53},[36,110516,63],{"class":42},[36,110518,110519,110521,110523],{"class":38,"line":8495},[36,110520,101822],{"class":42},[36,110522,47],{"class":46},[36,110524,101827],{"class":42},[36,110526,110527],{"class":38,"line":8501},[36,110528,2880],{"emptyLinePlaceholder":553},[36,110530,110531,110533,110535,110537,110539],{"class":38,"line":8513},[36,110532,105470],{"class":42},[36,110534,54],{"class":53},[36,110536,4923],{"class":42},[36,110538,47],{"class":46},[36,110540,110541],{"class":53}," 0.1\n",[36,110543,110544],{"class":38,"line":8525},[36,110545,105483],{"class":42},[36,110547,110548],{"class":38,"line":8537},[36,110549,2880],{"emptyLinePlaceholder":553},[36,110551,110552,110555,110557],{"class":38,"line":10196},[36,110553,110554],{"class":42},"    total_reward ",[36,110556,47],{"class":46},[36,110558,105162],{"class":53},[36,110560,110561],{"class":38,"line":10221},[36,110562,2880],{"emptyLinePlaceholder":553},[36,110564,110565,110567,110569,110571,110573,110575,110577],{"class":38,"line":10244},[36,110566,3681],{"class":46},[36,110568,32093],{"class":42},[36,110570,26524],{"class":46},[36,110572,32920],{"class":53},[36,110574,345],{"class":42},[36,110576,6890],{"class":53},[36,110578,31264],{"class":42},[36,110580,110581,110584,110586],{"class":38,"line":10268},[36,110582,110583],{"class":42},"        obs ",[36,110585,47],{"class":46},[36,110587,110588],{"class":42}," get_observation(data)\n",[36,110590,110591,110594,110596,110598,110600],{"class":38,"line":10273},[36,110592,110593],{"class":42},"        pole_angle ",[36,110595,47],{"class":46},[36,110597,110437],{"class":42},[36,110599,54],{"class":53},[36,110601,33723],{"class":42},[36,110603,110604,110607,110609,110611,110613],{"class":38,"line":10278},[36,110605,110606],{"class":42},"        pole_angular_velocity ",[36,110608,47],{"class":46},[36,110610,110437],{"class":42},[36,110612,127],{"class":53},[36,110614,33723],{"class":42},[36,110616,110617],{"class":38,"line":10283},[36,110618,2880],{"emptyLinePlaceholder":553},[36,110620,110621,110624,110626,110629,110631,110633,110635,110637,110639],{"class":38,"line":10292},[36,110622,110623],{"class":42},"        action ",[36,110625,47],{"class":46},[36,110627,110628],{"class":53}," 2.0",[36,110630,6998],{"class":46},[36,110632,110221],{"class":42},[36,110634,1097],{"class":46},[36,110636,62344],{"class":53},[36,110638,6998],{"class":46},[36,110640,110641],{"class":42}," pole_angular_velocity\n",[36,110643,110644,110646,110648,110650,110652,110654,110656,110658],{"class":38,"line":10297},[36,110645,110623],{"class":42},[36,110647,47],{"class":46},[36,110649,107848],{"class":42},[36,110651,173],{"class":46},[36,110653,102804],{"class":53},[36,110655,12915],{"class":42},[36,110657,102804],{"class":53},[36,110659,63],{"class":42},[36,110661,110662],{"class":38,"line":10303},[36,110663,2880],{"emptyLinePlaceholder":553},[36,110665,110666,110668,110670,110672,110674],{"class":38,"line":10324},[36,110667,107018],{"class":42},[36,110669,812],{"class":53},[36,110671,4923],{"class":42},[36,110673,47],{"class":46},[36,110675,107871],{"class":42},[36,110677,110678],{"class":38,"line":10330},[36,110679,101917],{"class":42},[36,110681,110682],{"class":38,"line":10344},[36,110683,2880],{"emptyLinePlaceholder":553},[36,110685,110686,110689,110691],{"class":38,"line":10350},[36,110687,110688],{"class":42},"        reward ",[36,110690,47],{"class":46},[36,110692,110693],{"class":42}," compute_reward(get_observation(data))\n",[36,110695,110696,110699,110701],{"class":38,"line":10377},[36,110697,110698],{"class":42},"        total_reward ",[36,110700,9957],{"class":46},[36,110702,110703],{"class":42}," reward\n",[36,110705,110706],{"class":38,"line":10386},[36,110707,2880],{"emptyLinePlaceholder":553},[36,110709,110710,110712,110714,110716,110718,110720,110722],{"class":38,"line":10392},[36,110711,2977],{"class":46},[36,110713,32093],{"class":42},[36,110715,947],{"class":46},[36,110717,6234],{"class":53},[36,110719,101960],{"class":46},[36,110721,4573],{"class":53},[36,110723,4219],{"class":42},[36,110725,110726,110728,110730,110733,110736,110739,110742,110744,110747,110750,110752,110754,110756,110758,110761,110763],{"class":38,"line":10400},[36,110727,35127],{"class":53},[36,110729,345],{"class":42},[36,110731,110732],{"class":405},"\"step:\"",[36,110734,110735],{"class":42},", step, ",[36,110737,110738],{"class":405},"\"obs:\"",[36,110740,110741],{"class":42},", np.round(obs, ",[36,110743,127],{"class":53},[36,110745,110746],{"class":42},"), ",[36,110748,110749],{"class":405},"\"action:\"",[36,110751,12915],{"class":42},[36,110753,32495],{"class":53},[36,110755,345],{"class":42},[36,110757,666],{"class":53},[36,110759,110760],{"class":42},"(action), ",[36,110762,127],{"class":53},[36,110764,370],{"class":42},[36,110766,110767],{"class":38,"line":10405},[36,110768,2880],{"emptyLinePlaceholder":553},[36,110770,110771,110773,110775,110778,110780,110782,110785,110787],{"class":38,"line":17084},[36,110772,31777],{"class":53},[36,110774,345],{"class":42},[36,110776,110777],{"class":405},"\"total_reward:\"",[36,110779,12915],{"class":42},[36,110781,32495],{"class":53},[36,110783,110784],{"class":42},"(total_reward, ",[36,110786,127],{"class":53},[36,110788,370],{"class":42},[36,110790,110791,110793,110795,110798,110801,110803],{"class":38,"line":17090},[36,110792,31777],{"class":53},[36,110794,345],{"class":42},[36,110796,110797],{"class":405},"\"final obs:\"",[36,110799,110800],{"class":42},", np.round(get_observation(data), ",[36,110802,127],{"class":53},[36,110804,370],{"class":42},[36,110806,110807],{"class":38,"line":17113},[36,110808,2880],{"emptyLinePlaceholder":553},[36,110810,110811],{"class":38,"line":17119},[36,110812,2880],{"emptyLinePlaceholder":553},[36,110814,110815,110817,110819,110821,110823],{"class":38,"line":17142},[36,110816,2011],{"class":46},[36,110818,31698],{"class":53},[36,110820,101960],{"class":46},[36,110822,101963],{"class":405},[36,110824,4219],{"class":42},[36,110826,110827],{"class":38,"line":17156},[36,110828,101970],{"class":42},[19,110830,103971],{},[26,110832,110834],{"className":24302,"code":110833,"language":24304,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,110835,110836],{"__ignoreMap":31},[36,110837,110838,110840],{"class":38,"line":39},[36,110839,101684],{"class":2443},[36,110841,110842],{"class":405}," ch6_cartpole.py\n",[19,110844,110845],{},"运行：",[26,110847,110849],{"className":24302,"code":110848,"language":24304,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,110850,110851],{"__ignoreMap":31},[36,110852,110853,110855],{"class":38,"line":39},[36,110854,30],{"class":2443},[36,110856,110842],{"class":405},[596,110858,101973],{"id":101973},[19,110860,110861],{},"构造观测：",[26,110863,110865],{"className":28,"code":110864,"language":30,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,110866,110867,110875],{"__ignoreMap":31},[36,110868,110869,110871,110873],{"class":38,"line":39},[36,110870,32424],{"class":46},[36,110872,110395],{"class":2443},[36,110874,110398],{"class":42},[36,110876,110877,110879],{"class":38,"line":66},[36,110878,4570],{"class":46},[36,110880,110405],{"class":42},[19,110882,110883,110886,110887,110889,110890,110892],{},[33,110884,110885],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,110888,104431],{}," 2 维，",[33,110891,104761],{}," 2 维，所以 obs 是 4 维。",[19,110894,110895],{},"设置初始角度：",[26,110897,110899],{"className":28,"code":110898,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,110900,110901,110913],{"__ignoreMap":31},[36,110902,110903,110905,110907,110909,110911],{"class":38,"line":39},[36,110904,105100],{"class":42},[36,110906,54],{"class":53},[36,110908,4923],{"class":42},[36,110910,47],{"class":46},[36,110912,110541],{"class":53},[36,110914,110915],{"class":38,"line":66},[36,110916,104944],{"class":42},[19,110918,110919],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110921,110922],{},"简单反馈控制：",[26,110924,110926],{"className":28,"code":110925,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[33,110927,110928,110948],{"__ignoreMap":31},[36,110929,110930,110932,110934,110936,110938,110940,110942,110944,110946],{"class":38,"line":39},[36,110931,107843],{"class":42},[36,110933,47],{"class":46},[36,110935,110628],{"class":53},[36,110937,6998],{"class":46},[36,110939,110221],{"class":42},[36,110941,1097],{"class":46},[36,110943,62344],{"class":53},[36,110945,6998],{"class":46},[36,110947,110641],{"class":42},[36,110949,110950,110952,110954,110956,110958,110960,110962,110964],{"class":38,"line":66},[36,110951,107843],{"class":42},[36,110953,47],{"class":46},[36,110955,107848],{"class":42},[36,110957,173],{"class":46},[36,110959,102804],{"class":53},[36,110961,12915],{"class":42},[36,110963,102804],{"class":53},[36,110965,63],{"class":42},[19,110967,110968],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110970,110971],{},"限制动作：",[26,110973,110975],{"className":28,"code":110974,"language":30,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,110976,110977],{"__ignoreMap":31},[36,110978,110979,110982,110984,110986,110988,110990],{"class":38,"line":39},[36,110980,110981],{"class":42},"np.clip(action, ",[36,110983,173],{"class":46},[36,110985,102804],{"class":53},[36,110987,12915],{"class":42},[36,110989,102804],{"class":53},[36,110991,63],{"class":42},[19,110993,110994,110995,110998],{},"因为 XML 里 ",[33,110996,110997],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[596,111000,102109],{"id":102109},[26,111002,111003],{"className":28,"code":110864,"language":30,"meta":31,"style":31},[33,111004,111005,111013],{"__ignoreMap":31},[36,111006,111007,111009,111011],{"class":38,"line":39},[36,111008,32424],{"class":46},[36,111010,110395],{"class":2443},[36,111012,110398],{"class":42},[36,111014,111015,111017],{"class":38,"line":66},[36,111016,4570],{"class":46},[36,111018,110405],{"class":42},[19,111020,111021,111022,111025,111026,111029,111030,111033],{},"这段定义了一个函数，用来获取当前观测。",[33,111023,111024],{},"data.qpos.copy()"," 是位置数组副本，",[33,111027,111028],{},"data.qvel.copy()"," 是速度数组副本。",[33,111031,111032],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111035,111036],{},"在本章模型里：",[26,111038,111041],{"className":111039,"code":111040,"language":5667,"meta":31},[5665],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,111042,111040],{"__ignoreMap":31},[19,111044,111045],{},"所以返回的 obs 是：",[26,111047,111050],{"className":111048,"code":111049,"language":5667,"meta":31},[5665],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,111051,111049],{"__ignoreMap":31},[26,111053,111055],{"className":28,"code":111054,"language":30,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,111056,111057],{"__ignoreMap":31},[36,111058,111059,111061,111063,111065,111067],{"class":38,"line":39},[36,111060,32424],{"class":46},[36,111062,110420],{"class":2443},[36,111064,110423],{"class":42},[36,111066,666],{"class":53},[36,111068,4219],{"class":42},[19,111070,111071,111072,111075],{},"这行定义奖励函数。输入是观测 ",[33,111073,111074],{},"obs","，输出是一个浮点数奖励。",[26,111077,111079],{"className":28,"code":111078,"language":30,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,111080,111081,111094],{"__ignoreMap":31},[36,111082,111083,111086,111088,111090,111092],{"class":38,"line":39},[36,111084,111085],{"class":42},"cart_x ",[36,111087,47],{"class":46},[36,111089,110437],{"class":42},[36,111091,812],{"class":53},[36,111093,33723],{"class":42},[36,111095,111096,111099,111101,111103,111105],{"class":38,"line":66},[36,111097,111098],{"class":42},"pole_angle ",[36,111100,47],{"class":46},[36,111102,110437],{"class":42},[36,111104,54],{"class":53},[36,111106,33723],{"class":42},[19,111108,111109,111110,111113,111114,111117],{},"数组索引从 0 开始。",[33,111111,111112],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,111115,111116],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,111119,111120],{"className":28,"code":110189,"language":30,"meta":31,"style":31},[33,111121,111122],{"__ignoreMap":31},[36,111123,111124,111126,111128,111130,111132,111134,111136,111138,111140,111142,111144,111146,111148,111150],{"class":38,"line":39},[36,111125,17526],{"class":46},[36,111127,110198],{"class":53},[36,111129,345],{"class":42},[36,111131,102804],{"class":53},[36,111133,52748],{"class":46},[36,111135,110207],{"class":53},[36,111137,6998],{"class":46},[36,111139,110212],{"class":42},[36,111141,1071],{"class":46},[36,111143,110212],{"class":42},[36,111145,173],{"class":46},[36,111147,110221],{"class":42},[36,111149,1071],{"class":46},[36,111151,110226],{"class":42},[19,111153,111154,111155,111158,111159,111162],{},"这行计算奖励。",[33,111156,111157],{},"cart_x * cart_x"," 是小车位置的平方，",[33,111160,111161],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,111164,111166],{"className":28,"code":111165,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,111167,111168],{"__ignoreMap":31},[36,111169,111170,111172,111174,111176,111178],{"class":38,"line":39},[36,111171,105100],{"class":42},[36,111173,54],{"class":53},[36,111175,4923],{"class":42},[36,111177,47],{"class":46},[36,111179,110541],{"class":53},[19,111181,111182,111183,111185,111186,111188],{},"手动设置杆子的初始角度。因为 ",[33,111184,105857],{}," 是小车位置，",[33,111187,105860],{}," 是杆子角度，所以这里改的是杆子。",[26,111190,111191],{"className":28,"code":104944,"language":30,"meta":31,"style":31},[33,111192,111193],{"__ignoreMap":31},[36,111194,111195],{"class":38,"line":39},[36,111196,104944],{"class":42},[19,111198,105903,111199,111201],{},[33,111200,104431],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,111203,111205],{"className":28,"code":111204,"language":30,"meta":31,"style":31},"total_reward = 0.0\n",[33,111206,111207],{"__ignoreMap":31},[36,111208,111209,111212,111214],{"class":38,"line":39},[36,111210,111211],{"class":42},"total_reward ",[36,111213,47],{"class":46},[36,111215,105162],{"class":53},[19,111217,111218],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,111220,111222],{"className":28,"code":111221,"language":30,"meta":31,"style":31},"for step in range(1000):\n",[33,111223,111224],{"__ignoreMap":31},[36,111225,111226,111228,111230,111232,111234,111236,111238],{"class":38,"line":39},[36,111227,3505],{"class":46},[36,111229,32093],{"class":42},[36,111231,26524],{"class":46},[36,111233,32920],{"class":53},[36,111235,345],{"class":42},[36,111237,6890],{"class":53},[36,111239,31264],{"class":42},[19,111241,111242,111243,111245],{},"循环 1000 步。",[33,111244,107535],{}," 是当前步数，从 0 到 999。",[26,111247,111249],{"className":28,"code":111248,"language":30,"meta":31,"style":31},"obs = get_observation(data)\n",[33,111250,111251],{"__ignoreMap":31},[36,111252,111253,111256,111258],{"class":38,"line":39},[36,111254,111255],{"class":42},"obs ",[36,111257,47],{"class":46},[36,111259,110588],{"class":42},[19,111261,111262,111263,28866],{},"读取当前状态，保存到 ",[33,111264,111074],{},[26,111266,111268],{"className":28,"code":111267,"language":30,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,111269,111270,111282],{"__ignoreMap":31},[36,111271,111272,111274,111276,111278,111280],{"class":38,"line":39},[36,111273,111098],{"class":42},[36,111275,47],{"class":46},[36,111277,110437],{"class":42},[36,111279,54],{"class":53},[36,111281,33723],{"class":42},[36,111283,111284,111287,111289,111291,111293],{"class":38,"line":66},[36,111285,111286],{"class":42},"pole_angular_velocity ",[36,111288,47],{"class":46},[36,111290,110437],{"class":42},[36,111292,127],{"class":53},[36,111294,33723],{"class":42},[19,111296,111297,111298,111301,111302,28866],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,111299,111300],{},"obs[3]","？因为 obs 的顺序是 ",[33,111303,111304],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,111306,111308],{"className":28,"code":111307,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,111309,111310],{"__ignoreMap":31},[36,111311,111312,111314,111316,111318,111320,111322,111324,111326,111328],{"class":38,"line":39},[36,111313,107843],{"class":42},[36,111315,47],{"class":46},[36,111317,110628],{"class":53},[36,111319,6998],{"class":46},[36,111321,110221],{"class":42},[36,111323,1097],{"class":46},[36,111325,62344],{"class":53},[36,111327,6998],{"class":46},[36,111329,110641],{"class":42},[19,111331,111332,111333,101419,111335,111337],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,111334,105661],{},[33,111336,35806],{}," 是人为设置的系数，不是固定公式。",[26,111339,111341],{"className":28,"code":111340,"language":30,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,111342,111343],{"__ignoreMap":31},[36,111344,111345,111347,111349,111351,111353,111355,111357,111359],{"class":38,"line":39},[36,111346,107843],{"class":42},[36,111348,47],{"class":46},[36,111350,107848],{"class":42},[36,111352,173],{"class":46},[36,111354,102804],{"class":53},[36,111356,12915],{"class":42},[36,111358,102804],{"class":53},[36,111360,63],{"class":42},[19,111362,111363],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,111365,111366],{"className":28,"code":110174,"language":30,"meta":31,"style":31},[33,111367,111368],{"__ignoreMap":31},[36,111369,111370,111372,111374,111376,111378],{"class":38,"line":39},[36,111371,106272],{"class":42},[36,111373,812],{"class":53},[36,111375,4923],{"class":42},[36,111377,47],{"class":46},[36,111379,107871],{"class":42},[19,111381,111382],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,111384,111385],{"className":28,"code":104906,"language":30,"meta":31,"style":31},[33,111386,111387],{"__ignoreMap":31},[36,111388,111389],{"class":38,"line":39},[36,111390,104906],{"class":42},[19,111392,111393,111394,111396],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,111395,106527],{}," 计算小车和杆子的下一刻状态。",[26,111398,111400],{"className":28,"code":111399,"language":30,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,111401,111402,111411],{"__ignoreMap":31},[36,111403,111404,111407,111409],{"class":38,"line":39},[36,111405,111406],{"class":42},"reward ",[36,111408,47],{"class":46},[36,111410,110693],{"class":42},[36,111412,111413,111415,111417],{"class":38,"line":66},[36,111414,111211],{"class":42},[36,111416,9957],{"class":46},[36,111418,110703],{"class":42},[19,111420,111421,111422,111424,111425,111428,111429,28866],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,111423,9957],{}," 是简写，",[33,111426,111427],{},"total_reward += reward"," 等价于 ",[33,111430,111431],{},"total_reward = total_reward + reward",[26,111433,111435],{"className":28,"code":111434,"language":30,"meta":31,"style":31},"if step % 100 == 0:\n",[33,111436,111437],{"__ignoreMap":31},[36,111438,111439,111441,111443,111445,111447,111449,111451],{"class":38,"line":39},[36,111440,2011],{"class":46},[36,111442,32093],{"class":42},[36,111444,947],{"class":46},[36,111446,6234],{"class":53},[36,111448,101960],{"class":46},[36,111450,4573],{"class":53},[36,111452,4219],{"class":42},[19,111454,111455,111457,111458,111461],{},[33,111456,947],{}," 是取余数。",[33,111459,111460],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,111463,111465],{"className":28,"code":111464,"language":30,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,111466,111467],{"__ignoreMap":31},[36,111468,111469,111471,111473,111475,111477,111479,111481,111483,111485,111487,111489,111491,111493,111495,111497,111499],{"class":38,"line":39},[36,111470,30894],{"class":53},[36,111472,345],{"class":42},[36,111474,110732],{"class":405},[36,111476,110735],{"class":42},[36,111478,110738],{"class":405},[36,111480,110741],{"class":42},[36,111482,127],{"class":53},[36,111484,110746],{"class":42},[36,111486,110749],{"class":405},[36,111488,12915],{"class":42},[36,111490,32495],{"class":53},[36,111492,345],{"class":42},[36,111494,666],{"class":53},[36,111496,110760],{"class":42},[36,111498,127],{"class":53},[36,111500,370],{"class":42},[19,111502,111503,111504,111507,111508,111511],{},"打印当前步数、观测和动作。",[33,111505,111506],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,111509,111510],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111513,102717],{"id":102716},[19,111515,111516],{},"观测向量:",[26,111518,111521],{"className":111519,"code":111520,"language":5667,"meta":31},[5665],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,111522,111520],{"__ignoreMap":31},[19,111524,111525],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111527,111528],{},"每隔 100 步会打印一次：",[26,111530,111533],{"className":111531,"code":111532,"language":5667,"meta":31},[5665],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,111534,111532],{"__ignoreMap":31},[19,111536,111537],{},"重点观察：",[579,111539,111540,111546,111551],{},[582,111541,111542,111545],{},[33,111543,111544],{},"pole_angle"," 是否越来越大。",[582,111547,111548,111550],{},[33,111549,110127],{}," 是否跑得太远。",[582,111552,111553,111554,83016,111556,28866],{},"action 是否经常被 clip 到 ",[33,111555,104316],{},[33,111557,54],{},[19,111559,111560],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111562,102749],{"id":102748},[579,111564,111565,111571,111574,111580,111590,111596,111599],{},[582,111566,111567,111568,28866],{},"把初始角度改为 ",[33,111569,111570],{},"data.qpos[1] = 0.3",[582,111572,111573],{},"重新运行，观察控制是否变差。",[582,111575,111576,111577,111579],{},"把 actuator ",[33,111578,107468],{}," 改小。",[582,111581,111582,111583,111586,111587,28866],{},"打印 ",[33,111584,111585],{},"model.nq, model.nv, model.nu","，应为 ",[33,111588,111589],{},"2 2 1",[582,111591,111592,111593,111595],{},"把 reward 里的 ",[33,111594,111161],{}," 系数改大，观察总奖励变化。",[582,111597,111598],{},"把控制器改成反号，观察杆子是否更容易倒。",[582,111600,111601],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111603,102854],{"id":102853},[596,111605,111606],{"id":111606},"杆子方向和预期不一致",[19,111608,102797,111609,111611,111612,111614],{},[33,111610,106640],{}," 和 capsule 的 ",[33,111613,103577],{},"，必要时用 viewer 可视化确认。",[596,111616,111617],{"id":111617},"控制器越控越倒",[19,111619,111620],{},"说明反馈符号可能反了，尝试:",[26,111622,111624],{"className":28,"code":111623,"language":30,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,111625,111626],{"__ignoreMap":31},[36,111627,111628,111630,111632,111634,111636,111638,111640,111642,111644,111646],{"class":38,"line":39},[36,111629,107843],{"class":42},[36,111631,47],{"class":46},[36,111633,52748],{"class":46},[36,111635,105661],{"class":53},[36,111637,6998],{"class":46},[36,111639,110221],{"class":42},[36,111641,173],{"class":46},[36,111643,62344],{"class":53},[36,111645,6998],{"class":46},[36,111647,110641],{"class":42},[596,111649,111650],{"id":111650},"小车飞走",[19,111652,111653,111654,111656,111657,111660],{},"降低 ",[33,111655,107468],{}," 或缩小 ",[33,111658,111659],{},"action"," 的 clip 范围。",[596,111662,111664,111666],{"id":111663},"obs3-为什么是杆子角速度",[33,111665,111300],{}," 为什么是杆子角速度",[19,111668,111669],{},"因为这个模型里：",[26,111671,111674],{"className":111672,"code":111673,"language":5667,"meta":31},[5665],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,111675,111673],{"__ignoreMap":31},[19,111677,110148],{},[26,111679,111682],{"className":111680,"code":111681,"language":5667,"meta":31},[5665],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,111683,111681],{"__ignoreMap":31},[596,111685,111687],{"id":111686},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111689,111690],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111692,103008],{"id":103007},[19,111694,111695],{},"一个控制任务通常包含：",[579,111697,111698,111701,111709,111714,111717],{},[582,111699,111700],{},"模型：Cartpole 的 body、joint、actuator。",[582,111702,111703,111704,833,111706,111708],{},"观测：从 ",[33,111705,104431],{},[33,111707,104761],{}," 里取状态。",[582,111710,111711,111712,28866],{},"动作：写入 ",[33,111713,101477],{},[582,111715,111716],{},"奖励：根据任务目标打分。",[582,111718,111719],{},"循环：obs -> action -> step -> reward。",[19,111721,111722],{},"这就是后面 Gymnasium 环境的基本骨架。",[539,111724,104687],{},{"title":31,"searchDepth":66,"depth":66,"links":111726},[111727,111728,111729,111734,111738,111739,111740,111748],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":111730},[111731,111732,111733],{"id":110101,"depth":73,"text":110102},{"id":110166,"depth":73,"text":110167},{"id":110182,"depth":73,"text":110183},{"id":101653,"depth":66,"text":101654,"children":111735},[111736,111737],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":111741},[111742,111743,111744,111745,111747],{"id":111606,"depth":73,"text":111606},{"id":111617,"depth":73,"text":111617},{"id":111650,"depth":73,"text":111650},{"id":111663,"depth":73,"text":111746},"obs[3] 为什么是杆子角速度",{"id":111686,"depth":73,"text":111687},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109837,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111755,"title":111756,"body":111757,"description":31,"extension":551,"meta":113771,"navigation":553,"path":113772,"seo":113773,"stem":113774,"__hash__":113775},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111758,"toc":113747},[111759,111762,111764,111767,111769,111786,111789,111792,111798,111801,111803,111805,111829,111831,111845,111847,111888,111890,111908,111910,111913,111919,111922,111950,111954,111960,111985,111988,112019,112026,112029,112032,112038,112041,112047,112050,112056,112060,112063,112088,112091,112093,112853,112855,112867,112869,112880,112882,112885,112902,112905,112907,112918,112921,112923,112969,112972,112985,112988,113070,113073,113075,113091,113101,113114,113117,113156,113166,113177,113187,113200,113203,113232,113235,113245,113248,113254,113271,113282,113284,113290,113307,113318,113339,113342,113354,113357,113378,113381,113389,113397,113414,113417,113486,113493,113501,113504,113517,113524,113526,113529,113535,113538,113541,113547,113553,113555,113595,113597,113603,113612,113615,113617,113637,113640,113643,113649,113653,113655,113682,113685,113688,113715,113721,113724,113727,113729,113732,113735,113741,113744],[10,111760,111756],{"id":111761},"_7控制任务reacher-机械臂到达目标",[14,111763,101048],{"id":101047},[19,111765,111766],{},"本章搭建一个二维两关节 reacher 任务。",[19,111768,104732],{},[579,111770,111771,111774,111777,111780,111783],{},[582,111772,111773],{},"两个 hinge joint",[582,111775,111776],{},"两个 motor actuator",[582,111778,111779],{},"site 作为末端点和目标点",[582,111781,111782],{},"根据末端和目标距离设计 reward",[582,111784,111785],{},"构造机械臂任务的基本形式",[19,111787,111788],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111790,111791],{},"Reacher 任务可以理解为：",[26,111793,111796],{"className":111794,"code":111795,"language":5667,"meta":31},[5665],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,111797,111795],{"__ignoreMap":31},[19,111799,111800],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111802,101171],{"id":101170},[19,111804,101174],{},[26,111806,111807],{"className":24302,"code":104789,"language":24304,"meta":31,"style":31},[33,111808,111809],{"__ignoreMap":31},[36,111810,111811,111813,111815,111817,111819,111821,111823,111825,111827],{"class":38,"line":39},[36,111812,25057],{"class":2443},[36,111814,26796],{"class":405},[36,111816,24314],{"class":405},[36,111818,26881],{"class":53},[36,111820,104804],{"class":405},[36,111822,101199],{"class":405},[36,111824,102902],{"class":405},[36,111826,101215],{"class":405},[36,111828,104813],{"class":405},[19,111830,103220],{},[26,111832,111833],{"className":24302,"code":101320,"language":24304,"meta":31,"style":31},[33,111834,111835],{"__ignoreMap":31},[36,111836,111837,111839,111841,111843],{"class":38,"line":39},[36,111838,24311],{"class":2443},[36,111840,24314],{"class":405},[36,111842,101331],{"class":405},[36,111844,101334],{"class":405},[19,111846,103237],{},[26,111848,111850],{"className":24302,"code":111849,"language":24304,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[33,111851,111852,111869,111878],{"__ignoreMap":31},[36,111853,111854,111856,111858,111860,111863,111865,111867],{"class":38,"line":39},[36,111855,30811],{"class":2443},[36,111857,29657],{"class":405},[36,111859,25596],{"class":53},[36,111861,111862],{"class":405}," mujoco-reacher",[36,111864,101376],{"class":405},[36,111866,101379],{"class":53},[36,111868,101382],{"class":53},[36,111870,111871,111873,111875],{"class":38,"line":66},[36,111872,30811],{"class":2443},[36,111874,101389],{"class":405},[36,111876,111877],{"class":405}," mujoco-reacher\n",[36,111879,111880,111882,111884,111886],{"class":38,"line":73},[36,111881,24311],{"class":2443},[36,111883,24314],{"class":405},[36,111885,101331],{"class":405},[36,111887,101334],{"class":405},[19,111889,101405],{},[579,111891,111892,111895,111898],{},[582,111893,111894],{},"本章使用低维状态，不使用图像输入。",[582,111896,111897],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[582,111899,111900,111901,833,111903,833,111905,111907],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,111902,104431],{},[33,111904,104761],{},[33,111906,104081],{}," 的方法一致。",[14,111909,101446],{"id":101445},[19,111911,111912],{},"Reacher 任务核心:",[26,111914,111917],{"className":111915,"code":111916,"language":5667,"meta":31},[5665],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,111918,111916],{"__ignoreMap":31},[19,111920,111921],{},"读取 site 世界坐标:",[26,111923,111925],{"className":28,"code":111924,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[33,111926,111927,111940],{"__ignoreMap":31},[36,111928,111929,111931,111933,111935,111938],{"class":38,"line":39},[36,111930,104035],{"class":42},[36,111932,47],{"class":46},[36,111934,103806],{"class":42},[36,111936,111937],{"class":405},"\"tip\"",[36,111939,63],{"class":42},[36,111941,111942,111945,111947],{"class":38,"line":66},[36,111943,111944],{"class":42},"tip_pos ",[36,111946,47],{"class":46},[36,111948,111949],{"class":42}," data.site_xpos[site_id]\n",[596,111951,111953],{"id":111952},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111955,111956,111957,111959],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,111958,104431],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,111961,111963],{"className":28,"code":111962,"language":30,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,111964,111965,111975],{"__ignoreMap":31},[36,111966,111967,111970,111972],{"class":38,"line":39},[36,111968,111969],{"class":42},"tip ",[36,111971,47],{"class":46},[36,111973,111974],{"class":42}," data.site_xpos[tip_site_id]\n",[36,111976,111977,111980,111982],{"class":38,"line":66},[36,111978,111979],{"class":42},"target ",[36,111981,47],{"class":46},[36,111983,111984],{"class":42}," data.site_xpos[target_site_id]\n",[19,111986,111987],{},"这样 reward 就很容易写：",[26,111989,111991],{"className":28,"code":111990,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,111992,111993,112008],{"__ignoreMap":31},[36,111994,111995,111998,112000,112003,112005],{"class":38,"line":39},[36,111996,111997],{"class":42},"dist ",[36,111999,47],{"class":46},[36,112001,112002],{"class":42}," np.linalg.norm(tip ",[36,112004,173],{"class":46},[36,112006,112007],{"class":42}," target)\n",[36,112009,112010,112012,112014,112016],{"class":38,"line":66},[36,112011,111406],{"class":42},[36,112013,47],{"class":46},[36,112015,52748],{"class":46},[36,112017,112018],{"class":42},"dist\n",[19,112020,112021,112022,112025],{},"距离越小，",[33,112023,112024],{},"-dist"," 越接近 0，奖励越高。",[596,112027,112028],{"id":112028},"两关节机械臂的状态",[19,112030,112031],{},"这个模型有两个 hinge joint：",[26,112033,112036],{"className":112034,"code":112035,"language":5667,"meta":31},[5665],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,112037,112035],{"__ignoreMap":31},[19,112039,112040],{},"再加上末端和目标位置：",[26,112042,112045],{"className":112043,"code":112044,"language":5667,"meta":31},[5665],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,112046,112044],{"__ignoreMap":31},[19,112048,112049],{},"总维度：",[26,112051,112054],{"className":112052,"code":112053,"language":5667,"meta":31},[5665],"2 + 2 + 3 + 3 = 10\n",[33,112055,112053],{"__ignoreMap":31},[596,112057,112059],{"id":112058},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112061,112062],{},"本章把重力设为：",[26,112064,112066],{"className":53544,"code":112065,"language":53546,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,112067,112068],{"__ignoreMap":31},[36,112069,112070,112072,112074,112076,112078,112080,112082,112084,112086],{"class":38,"line":39},[36,112071,1523],{"class":42},[36,112073,69643],{"class":51777},[36,112075,101595],{"class":2443},[36,112077,47],{"class":42},[36,112079,101600],{"class":405},[36,112081,101603],{"class":2443},[36,112083,47],{"class":42},[36,112085,104172],{"class":405},[36,112087,101545],{"class":42},[19,112089,112090],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112092,101654],{"id":101653},[26,112094,112096],{"className":28,"code":112095,"language":30,"meta":31,"style":31},"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",[33,112097,112098,112104,112114,112118,112122,112130,112135,112140,112144,112148,112153,112158,112162,112167,112172,112177,112181,112186,112191,112196,112201,112205,112209,112213,112217,112221,112226,112231,112235,112239,112243,112247,112251,112266,112275,112287,112310,112317,112321,112325,112335,112349,112363,112370,112374,112378,112392,112404,112416,112429,112444,112461,112465,112469,112481,112493,112501,112509,112513,112529,112534,112547,112560,112575,112579,112614,112646,112650,112654,112663,112667,112683,112693,112704,112720,112736,112752,112768,112772,112790,112810,112829,112833,112837,112849],{"__ignoreMap":31},[36,112099,112100,112102],{"class":38,"line":39},[36,112101,30871],{"class":46},[36,112103,101702],{"class":42},[36,112105,112106,112108,112110,112112],{"class":38,"line":66},[36,112107,30871],{"class":46},[36,112109,31858],{"class":42},[36,112111,31861],{"class":46},[36,112113,31864],{"class":42},[36,112115,112116],{"class":38,"line":73},[36,112117,2880],{"emptyLinePlaceholder":553},[36,112119,112120],{"class":38,"line":79},[36,112121,2880],{"emptyLinePlaceholder":553},[36,112123,112124,112126,112128],{"class":38,"line":85},[36,112125,101715],{"class":53},[36,112127,14044],{"class":46},[36,112129,101720],{"class":405},[36,112131,112132],{"class":38,"line":419},[36,112133,112134],{"class":405},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,112136,112137],{"class":38,"line":425},[36,112138,112139],{"class":405},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,112141,112142],{"class":38,"line":431},[36,112143,2880],{"emptyLinePlaceholder":553},[36,112145,112146],{"class":38,"line":437},[36,112147,101739],{"class":405},[36,112149,112150],{"class":38,"line":443},[36,112151,112152],{"class":405},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,112154,112155],{"class":38,"line":2092},[36,112156,112157],{"class":405},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,112159,112160],{"class":38,"line":2097},[36,112161,2880],{"emptyLinePlaceholder":553},[36,112163,112164],{"class":38,"line":2103},[36,112165,112166],{"class":405},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,112168,112169],{"class":38,"line":2108},[36,112170,112171],{"class":405},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,112173,112174],{"class":38,"line":2122},[36,112175,112176],{"class":405},"      \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",[36,112178,112179],{"class":38,"line":2127},[36,112180,2880],{"emptyLinePlaceholder":553},[36,112182,112183],{"class":38,"line":2133},[36,112184,112185],{"class":405},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,112187,112188],{"class":38,"line":2154},[36,112189,112190],{"class":405},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,112192,112193],{"class":38,"line":2159},[36,112194,112195],{"class":405},"        \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",[36,112197,112198],{"class":38,"line":2173},[36,112199,112200],{"class":405},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,112202,112203],{"class":38,"line":2178},[36,112204,106839],{"class":405},[36,112206,112207],{"class":38,"line":2207},[36,112208,101768],{"class":405},[36,112210,112211],{"class":38,"line":2212},[36,112212,101773],{"class":405},[36,112214,112215],{"class":38,"line":2229},[36,112216,2880],{"emptyLinePlaceholder":553},[36,112218,112219],{"class":38,"line":2234},[36,112220,106856],{"class":405},[36,112222,112223],{"class":38,"line":2239},[36,112224,112225],{"class":405},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112227,112228],{"class":38,"line":2244},[36,112229,112230],{"class":405},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112232,112233],{"class":38,"line":2258},[36,112234,106866],{"class":405},[36,112236,112237],{"class":38,"line":2263},[36,112238,101778],{"class":405},[36,112240,112241],{"class":38,"line":3057},[36,112242,96169],{"class":405},[36,112244,112245],{"class":38,"line":3071},[36,112246,2880],{"emptyLinePlaceholder":553},[36,112248,112249],{"class":38,"line":3079},[36,112250,2880],{"emptyLinePlaceholder":553},[36,112252,112253,112255,112258,112261,112263],{"class":38,"line":3084},[36,112254,32424],{"class":46},[36,112256,112257],{"class":2443}," site_position",[36,112259,112260],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,112262,1783],{"class":53},[36,112264,112265],{"class":42},") -> np.ndarray:\n",[36,112267,112268,112270,112272],{"class":38,"line":3090},[36,112269,103801],{"class":42},[36,112271,47],{"class":46},[36,112273,112274],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,112276,112277,112279,112281,112283,112285],{"class":38,"line":3096},[36,112278,3581],{"class":46},[36,112280,103850],{"class":42},[36,112282,1523],{"class":46},[36,112284,4573],{"class":53},[36,112286,4219],{"class":42},[36,112288,112289,112291,112293,112295,112297,112300,112302,112304,112306,112308],{"class":38,"line":3101},[36,112290,103833],{"class":46},[36,112292,103836],{"class":53},[36,112294,345],{"class":42},[36,112296,677],{"class":46},[36,112298,112299],{"class":405},"\"site not found: ",[36,112301,1509],{"class":53},[36,112303,80287],{"class":42},[36,112305,1559],{"class":53},[36,112307,870],{"class":405},[36,112309,63],{"class":42},[36,112311,112312,112314],{"class":38,"line":8428},[36,112313,4570],{"class":46},[36,112315,112316],{"class":42}," data.site_xpos[site_id].copy()\n",[36,112318,112319],{"class":38,"line":8452},[36,112320,2880],{"emptyLinePlaceholder":553},[36,112322,112323],{"class":38,"line":8457},[36,112324,2880],{"emptyLinePlaceholder":553},[36,112326,112327,112329,112332],{"class":38,"line":8463},[36,112328,32424],{"class":46},[36,112330,112331],{"class":2443}," get_obs",[36,112333,112334],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,112336,112337,112340,112342,112345,112347],{"class":38,"line":8490},[36,112338,112339],{"class":42},"    tip ",[36,112341,47],{"class":46},[36,112343,112344],{"class":42}," site_position(model, data, ",[36,112346,111937],{"class":405},[36,112348,63],{"class":42},[36,112350,112351,112354,112356,112358,112361],{"class":38,"line":8495},[36,112352,112353],{"class":42},"    target ",[36,112355,47],{"class":46},[36,112357,112344],{"class":42},[36,112359,112360],{"class":405},"\"target\"",[36,112362,63],{"class":42},[36,112364,112365,112367],{"class":38,"line":8501},[36,112366,4570],{"class":46},[36,112368,112369],{"class":42}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,112371,112372],{"class":38,"line":8513},[36,112373,2880],{"emptyLinePlaceholder":553},[36,112375,112376],{"class":38,"line":8525},[36,112377,2880],{"emptyLinePlaceholder":553},[36,112379,112380,112382,112385,112388,112390],{"class":38,"line":8537},[36,112381,32424],{"class":46},[36,112383,112384],{"class":2443}," reward",[36,112386,112387],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,112389,666],{"class":53},[36,112391,4219],{"class":42},[36,112393,112394,112396,112398,112400,112402],{"class":38,"line":10196},[36,112395,112339],{"class":42},[36,112397,47],{"class":46},[36,112399,112344],{"class":42},[36,112401,111937],{"class":405},[36,112403,63],{"class":42},[36,112405,112406,112408,112410,112412,112414],{"class":38,"line":10221},[36,112407,112353],{"class":42},[36,112409,47],{"class":46},[36,112411,112344],{"class":42},[36,112413,112360],{"class":405},[36,112415,63],{"class":42},[36,112417,112418,112421,112423,112425,112427],{"class":38,"line":10244},[36,112419,112420],{"class":42},"    dist ",[36,112422,47],{"class":46},[36,112424,112002],{"class":42},[36,112426,173],{"class":46},[36,112428,112007],{"class":42},[36,112430,112431,112434,112436,112439,112441],{"class":38,"line":10268},[36,112432,112433],{"class":42},"    control_cost ",[36,112435,47],{"class":46},[36,112437,112438],{"class":53}," 0.01",[36,112440,6998],{"class":46},[36,112442,112443],{"class":42}," np.sum(np.square(data.ctrl))\n",[36,112445,112446,112448,112450,112452,112454,112456,112458],{"class":38,"line":10273},[36,112447,4570],{"class":46},[36,112449,110198],{"class":53},[36,112451,345],{"class":42},[36,112453,173],{"class":46},[36,112455,111997],{"class":42},[36,112457,173],{"class":46},[36,112459,112460],{"class":42}," control_cost)\n",[36,112462,112463],{"class":38,"line":10278},[36,112464,2880],{"emptyLinePlaceholder":553},[36,112466,112467],{"class":38,"line":10283},[36,112468,2880],{"emptyLinePlaceholder":553},[36,112470,112471,112473,112475,112477,112479],{"class":38,"line":10292},[36,112472,32424],{"class":46},[36,112474,2453],{"class":2443},[36,112476,101799],{"class":42},[36,112478,96157],{"class":53},[36,112480,4219],{"class":42},[36,112482,112483,112485,112487,112489,112491],{"class":38,"line":10297},[36,112484,101808],{"class":42},[36,112486,47],{"class":46},[36,112488,101813],{"class":42},[36,112490,101715],{"class":53},[36,112492,63],{"class":42},[36,112494,112495,112497,112499],{"class":38,"line":10303},[36,112496,101822],{"class":42},[36,112498,47],{"class":46},[36,112500,101827],{"class":42},[36,112502,112503,112505,112507],{"class":38,"line":10324},[36,112504,110554],{"class":42},[36,112506,47],{"class":46},[36,112508,105162],{"class":53},[36,112510,112511],{"class":38,"line":10330},[36,112512,2880],{"emptyLinePlaceholder":553},[36,112514,112515,112517,112519,112521,112523,112525,112527],{"class":38,"line":10344},[36,112516,3681],{"class":46},[36,112518,32093],{"class":42},[36,112520,26524],{"class":46},[36,112522,32920],{"class":53},[36,112524,345],{"class":42},[36,112526,65551],{"class":53},[36,112528,31264],{"class":42},[36,112530,112531],{"class":38,"line":10350},[36,112532,112533],{"class":42},"        mujoco.mj_forward(model, data)\n",[36,112535,112536,112539,112541,112543,112545],{"class":38,"line":10377},[36,112537,112538],{"class":42},"        tip ",[36,112540,47],{"class":46},[36,112542,112344],{"class":42},[36,112544,111937],{"class":405},[36,112546,63],{"class":42},[36,112548,112549,112552,112554,112556,112558],{"class":38,"line":10386},[36,112550,112551],{"class":42},"        target ",[36,112553,47],{"class":46},[36,112555,112344],{"class":42},[36,112557,112360],{"class":405},[36,112559,63],{"class":42},[36,112561,112562,112565,112567,112570,112572],{"class":38,"line":10392},[36,112563,112564],{"class":42},"        error ",[36,112566,47],{"class":46},[36,112568,112569],{"class":42}," target ",[36,112571,173],{"class":46},[36,112573,112574],{"class":42}," tip\n",[36,112576,112577],{"class":38,"line":10400},[36,112578,2880],{"emptyLinePlaceholder":553},[36,112580,112581,112583,112585,112587,112589,112592,112594,112596,112599,112601,112604,112606,112608,112610,112612],{"class":38,"line":10405},[36,112582,107018],{"class":42},[36,112584,812],{"class":53},[36,112586,4923],{"class":42},[36,112588,47],{"class":46},[36,112590,112591],{"class":42}," np.clip(",[36,112593,105661],{"class":53},[36,112595,6998],{"class":46},[36,112597,112598],{"class":42}," error[",[36,112600,96],{"class":53},[36,112602,112603],{"class":42},"], ",[36,112605,173],{"class":46},[36,112607,102804],{"class":53},[36,112609,12915],{"class":42},[36,112611,102804],{"class":53},[36,112613,63],{"class":42},[36,112615,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644],{"class":38,"line":17084},[36,112617,107018],{"class":42},[36,112619,54],{"class":53},[36,112621,4923],{"class":42},[36,112623,47],{"class":46},[36,112625,112591],{"class":42},[36,112627,105661],{"class":53},[36,112629,6998],{"class":46},[36,112631,112598],{"class":42},[36,112633,812],{"class":53},[36,112635,112603],{"class":42},[36,112637,173],{"class":46},[36,112639,102804],{"class":53},[36,112641,12915],{"class":42},[36,112643,102804],{"class":53},[36,112645,63],{"class":42},[36,112647,112648],{"class":38,"line":17090},[36,112649,2880],{"emptyLinePlaceholder":553},[36,112651,112652],{"class":38,"line":17113},[36,112653,101917],{"class":42},[36,112655,112656,112658,112660],{"class":38,"line":17119},[36,112657,110698],{"class":42},[36,112659,9957],{"class":46},[36,112661,112662],{"class":42}," reward(model, data)\n",[36,112664,112665],{"class":38,"line":17142},[36,112666,2880],{"emptyLinePlaceholder":553},[36,112668,112669,112671,112673,112675,112677,112679,112681],{"class":38,"line":17156},[36,112670,2977],{"class":46},[36,112672,32093],{"class":42},[36,112674,947],{"class":46},[36,112676,6234],{"class":53},[36,112678,101960],{"class":46},[36,112680,4573],{"class":53},[36,112682,4219],{"class":42},[36,112684,112685,112688,112690],{"class":38,"line":17176},[36,112686,112687],{"class":42},"            obs ",[36,112689,47],{"class":46},[36,112691,112692],{"class":42}," get_obs(model, data)\n",[36,112694,112695,112697,112699,112701],{"class":38,"line":17182},[36,112696,35127],{"class":53},[36,112698,345],{"class":42},[36,112700,110732],{"class":405},[36,112702,112703],{"class":42},", step)\n",[36,112705,112706,112708,112710,112713,112716,112718],{"class":38,"line":17193},[36,112707,35127],{"class":53},[36,112709,345],{"class":42},[36,112711,112712],{"class":405},"\"  tip:\"",[36,112714,112715],{"class":42},", np.round(tip, ",[36,112717,127],{"class":53},[36,112719,370],{"class":42},[36,112721,112722,112724,112726,112729,112732,112734],{"class":38,"line":17216},[36,112723,35127],{"class":53},[36,112725,345],{"class":42},[36,112727,112728],{"class":405},"\"  target:\"",[36,112730,112731],{"class":42},", np.round(target, ",[36,112733,127],{"class":53},[36,112735,370],{"class":42},[36,112737,112738,112740,112742,112745,112748,112750],{"class":38,"line":17238},[36,112739,35127],{"class":53},[36,112741,345],{"class":42},[36,112743,112744],{"class":405},"\"  ctrl:\"",[36,112746,112747],{"class":42},", np.round(data.ctrl.copy(), ",[36,112749,127],{"class":53},[36,112751,370],{"class":42},[36,112753,112754,112756,112758,112761,112764,112766],{"class":38,"line":17243},[36,112755,35127],{"class":53},[36,112757,345],{"class":42},[36,112759,112760],{"class":405},"\"  obs_dim:\"",[36,112762,112763],{"class":42},", obs.shape[",[36,112765,812],{"class":53},[36,112767,5137],{"class":42},[36,112769,112770],{"class":38,"line":17249},[36,112771,2880],{"emptyLinePlaceholder":553},[36,112773,112774,112776,112778,112780,112782,112784,112786,112788],{"class":38,"line":17263},[36,112775,31777],{"class":53},[36,112777,345],{"class":42},[36,112779,110777],{"class":405},[36,112781,12915],{"class":42},[36,112783,32495],{"class":53},[36,112785,110784],{"class":42},[36,112787,127],{"class":53},[36,112789,370],{"class":42},[36,112791,112792,112794,112796,112799,112802,112804,112806,112808],{"class":38,"line":17276},[36,112793,31777],{"class":53},[36,112795,345],{"class":42},[36,112797,112798],{"class":405},"\"final tip:\"",[36,112800,112801],{"class":42},", np.round(site_position(model, data, ",[36,112803,111937],{"class":405},[36,112805,110746],{"class":42},[36,112807,127],{"class":53},[36,112809,370],{"class":42},[36,112811,112812,112814,112816,112819,112821,112823,112825,112827],{"class":38,"line":17281},[36,112813,31777],{"class":53},[36,112815,345],{"class":42},[36,112817,112818],{"class":405},"\"target:\"",[36,112820,112801],{"class":42},[36,112822,112360],{"class":405},[36,112824,110746],{"class":42},[36,112826,127],{"class":53},[36,112828,370],{"class":42},[36,112830,112831],{"class":38,"line":17295},[36,112832,2880],{"emptyLinePlaceholder":553},[36,112834,112835],{"class":38,"line":17300},[36,112836,2880],{"emptyLinePlaceholder":553},[36,112838,112839,112841,112843,112845,112847],{"class":38,"line":17306},[36,112840,2011],{"class":46},[36,112842,31698],{"class":53},[36,112844,101960],{"class":46},[36,112846,101963],{"class":405},[36,112848,4219],{"class":42},[36,112850,112851],{"class":38,"line":17311},[36,112852,101970],{"class":42},[19,112854,103971],{},[26,112856,112858],{"className":24302,"code":112857,"language":24304,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,112859,112860],{"__ignoreMap":31},[36,112861,112862,112864],{"class":38,"line":39},[36,112863,101684],{"class":2443},[36,112865,112866],{"class":405}," ch7_reacher.py\n",[19,112868,110845],{},[26,112870,112872],{"className":24302,"code":112871,"language":24304,"meta":31,"style":31},"python ch7_reacher.py\n",[33,112873,112874],{"__ignoreMap":31},[36,112875,112876,112878],{"class":38,"line":39},[36,112877,30],{"class":2443},[36,112879,112866],{"class":405},[596,112881,101973],{"id":101973},[19,112883,112884],{},"读取 site 坐标：",[26,112886,112888],{"className":28,"code":112887,"language":30,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,112889,112890],{"__ignoreMap":31},[36,112891,112892,112894,112896,112898,112900],{"class":38,"line":39},[36,112893,32424],{"class":46},[36,112895,112257],{"class":2443},[36,112897,112260],{"class":42},[36,112899,1783],{"class":53},[36,112901,112265],{"class":42},[19,112903,112904],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112906,110861],{},[26,112908,112910],{"className":28,"code":112909,"language":30,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,112911,112912],{"__ignoreMap":31},[36,112913,112914,112916],{"class":38,"line":39},[36,112915,17526],{"class":46},[36,112917,112369],{"class":42},[19,112919,112920],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112922,110186],{},[26,112924,112926],{"className":28,"code":112925,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[33,112927,112928,112940,112953],{"__ignoreMap":31},[36,112929,112930,112932,112934,112936,112938],{"class":38,"line":39},[36,112931,111997],{"class":42},[36,112933,47],{"class":46},[36,112935,112002],{"class":42},[36,112937,173],{"class":46},[36,112939,112007],{"class":42},[36,112941,112942,112945,112947,112949,112951],{"class":38,"line":66},[36,112943,112944],{"class":42},"control_cost ",[36,112946,47],{"class":46},[36,112948,112438],{"class":53},[36,112950,6998],{"class":46},[36,112952,112443],{"class":42},[36,112954,112955,112957,112959,112961,112963,112965,112967],{"class":38,"line":73},[36,112956,17526],{"class":46},[36,112958,110198],{"class":53},[36,112960,345],{"class":42},[36,112962,173],{"class":46},[36,112964,111997],{"class":42},[36,112966,173],{"class":46},[36,112968,112460],{"class":42},[19,112970,112971],{},"奖励由两部分组成：",[579,112973,112974,112979],{},[582,112975,112976,112978],{},[33,112977,112024],{},"：末端离目标越远，奖励越低。",[582,112980,112981,112984],{},[33,112982,112983],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112986,112987],{},"简单控制器：",[26,112989,112991],{"className":28,"code":112990,"language":30,"meta":31,"style":31},"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",[33,112992,112993,113006,113038],{"__ignoreMap":31},[36,112994,112995,112998,113000,113002,113004],{"class":38,"line":39},[36,112996,112997],{"class":42},"error ",[36,112999,47],{"class":46},[36,113001,112569],{"class":42},[36,113003,173],{"class":46},[36,113005,112574],{"class":42},[36,113007,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032,113034,113036],{"class":38,"line":66},[36,113009,106272],{"class":42},[36,113011,812],{"class":53},[36,113013,4923],{"class":42},[36,113015,47],{"class":46},[36,113017,112591],{"class":42},[36,113019,105661],{"class":53},[36,113021,6998],{"class":46},[36,113023,112598],{"class":42},[36,113025,96],{"class":53},[36,113027,112603],{"class":42},[36,113029,173],{"class":46},[36,113031,102804],{"class":53},[36,113033,12915],{"class":42},[36,113035,102804],{"class":53},[36,113037,63],{"class":42},[36,113039,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064,113066,113068],{"class":38,"line":73},[36,113041,106272],{"class":42},[36,113043,54],{"class":53},[36,113045,4923],{"class":42},[36,113047,47],{"class":46},[36,113049,112591],{"class":42},[36,113051,105661],{"class":53},[36,113053,6998],{"class":46},[36,113055,112598],{"class":42},[36,113057,812],{"class":53},[36,113059,112603],{"class":42},[36,113061,173],{"class":46},[36,113063,102804],{"class":53},[36,113065,12915],{"class":42},[36,113067,102804],{"class":53},[36,113069,63],{"class":42},[19,113071,113072],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[596,113074,102109],{"id":102109},[26,113076,113077],{"className":28,"code":112887,"language":30,"meta":31,"style":31},[33,113078,113079],{"__ignoreMap":31},[36,113080,113081,113083,113085,113087,113089],{"class":38,"line":39},[36,113082,32424],{"class":46},[36,113084,112257],{"class":2443},[36,113086,112260],{"class":42},[36,113088,1783],{"class":53},[36,113090,112265],{"class":42},[19,113092,113093,113094,113096,113097,83016,113099,28866],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,113095,80287],{}," 是 site 的名字，比如 ",[33,113098,111937],{},[33,113100,112360],{},[26,113102,113104],{"className":28,"code":113103,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,113105,113106],{"__ignoreMap":31},[36,113107,113108,113110,113112],{"class":38,"line":39},[36,113109,104035],{"class":42},[36,113111,47],{"class":46},[36,113113,112274],{"class":42},[19,113115,113116],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,113118,113120],{"className":28,"code":113119,"language":30,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,113121,113122,113134],{"__ignoreMap":31},[36,113123,113124,113126,113128,113130,113132],{"class":38,"line":39},[36,113125,2011],{"class":46},[36,113127,103850],{"class":42},[36,113129,1523],{"class":46},[36,113131,4573],{"class":53},[36,113133,4219],{"class":42},[36,113135,113136,113138,113140,113142,113144,113146,113148,113150,113152,113154],{"class":38,"line":66},[36,113137,104296],{"class":46},[36,113139,103836],{"class":53},[36,113141,345],{"class":42},[36,113143,677],{"class":46},[36,113145,112299],{"class":405},[36,113147,1509],{"class":53},[36,113149,80287],{"class":42},[36,113151,1559],{"class":53},[36,113153,870],{"class":405},[36,113155,63],{"class":42},[19,113157,113158,113159,113162,113163,113165],{},"如果 site 没找到，就主动报错。",[33,113160,113161],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,113164,80287],{}," 的值放进字符串里。",[26,113167,113169],{"className":28,"code":113168,"language":30,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,113170,113171],{"__ignoreMap":31},[36,113172,113173,113175],{"class":38,"line":39},[36,113174,17526],{"class":46},[36,113176,112316],{"class":42},[19,113178,113179,113180,113182,113183,113186],{},"返回这个 site 的世界坐标。",[33,113181,104081],{}," 里的每一行都是一个 site 的 ",[33,113184,113185],{},"(x, y, z)"," 坐标。",[26,113188,113190],{"className":28,"code":113189,"language":30,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,113191,113192],{"__ignoreMap":31},[36,113193,113194,113196,113198],{"class":38,"line":39},[36,113195,32424],{"class":46},[36,113197,112331],{"class":2443},[36,113199,112334],{"class":42},[19,113201,113202],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,113204,113206],{"className":28,"code":113205,"language":30,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,113207,113208,113220],{"__ignoreMap":31},[36,113209,113210,113212,113214,113216,113218],{"class":38,"line":39},[36,113211,111969],{"class":42},[36,113213,47],{"class":46},[36,113215,112344],{"class":42},[36,113217,111937],{"class":405},[36,113219,63],{"class":42},[36,113221,113222,113224,113226,113228,113230],{"class":38,"line":66},[36,113223,111979],{"class":42},[36,113225,47],{"class":46},[36,113227,112344],{"class":42},[36,113229,112360],{"class":405},[36,113231,63],{"class":42},[19,113233,113234],{},"分别读取末端点和目标点的世界坐标。",[26,113236,113237],{"className":28,"code":112909,"language":30,"meta":31,"style":31},[33,113238,113239],{"__ignoreMap":31},[36,113240,113241,113243],{"class":38,"line":39},[36,113242,17526],{"class":46},[36,113244,112369],{"class":42},[19,113246,113247],{},"把四部分拼成一个观测数组：",[26,113249,113252],{"className":113250,"code":113251,"language":5667,"meta":31},[5665],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,113253,113251],{"__ignoreMap":31},[26,113255,113257],{"className":28,"code":113256,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,113258,113259],{"__ignoreMap":31},[36,113260,113261,113263,113265,113267,113269],{"class":38,"line":39},[36,113262,111997],{"class":42},[36,113264,47],{"class":46},[36,113266,112002],{"class":42},[36,113268,173],{"class":46},[36,113270,112007],{"class":42},[19,113272,113273,113274,113277,113278,113281],{},"计算 tip 到 target 的距离。",[33,113275,113276],{},"tip - target"," 得到一个三维向量，",[33,113279,113280],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113283,15113],{},[26,113285,113288],{"className":113286,"code":113287,"language":5667,"meta":31},[5665],"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",[33,113289,113287],{"__ignoreMap":31},[26,113291,113293],{"className":28,"code":113292,"language":30,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,113294,113295],{"__ignoreMap":31},[36,113296,113297,113299,113301,113303,113305],{"class":38,"line":39},[36,113298,112944],{"class":42},[36,113300,47],{"class":46},[36,113302,112438],{"class":53},[36,113304,6998],{"class":46},[36,113306,112443],{"class":42},[19,113308,113309,113310,113313,113314,113317],{},"计算动作惩罚。",[33,113311,113312],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,113315,113316],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,113319,113321],{"className":28,"code":113320,"language":30,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,113322,113323],{"__ignoreMap":31},[36,113324,113325,113327,113329,113331,113333,113335,113337],{"class":38,"line":39},[36,113326,17526],{"class":46},[36,113328,110198],{"class":53},[36,113330,345],{"class":42},[36,113332,173],{"class":46},[36,113334,111997],{"class":42},[36,113336,173],{"class":46},[36,113338,112460],{"class":42},[19,113340,113341],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,113343,113344],{"className":28,"code":111204,"language":30,"meta":31,"style":31},[33,113345,113346],{"__ignoreMap":31},[36,113347,113348,113350,113352],{"class":38,"line":39},[36,113349,111211],{"class":42},[36,113351,47],{"class":46},[36,113353,105162],{"class":53},[19,113355,113356],{},"累计奖励变量，记录整个运行过程的总分。",[26,113358,113360],{"className":28,"code":113359,"language":30,"meta":31,"style":31},"for step in range(500):\n",[33,113361,113362],{"__ignoreMap":31},[36,113363,113364,113366,113368,113370,113372,113374,113376],{"class":38,"line":39},[36,113365,3505],{"class":46},[36,113367,32093],{"class":42},[36,113369,26524],{"class":46},[36,113371,32920],{"class":53},[36,113373,345],{"class":42},[36,113375,65551],{"class":53},[36,113377,31264],{"class":42},[19,113379,113380],{},"运行 500 个控制步。",[26,113382,113383],{"className":28,"code":104944,"language":30,"meta":31,"style":31},[33,113384,113385],{"__ignoreMap":31},[36,113386,113387],{"class":38,"line":39},[36,113388,104944],{"class":42},[19,113390,113391,113392,101419,113394,113396],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,113393,103632],{},[33,113395,103635],{}," 是当前状态下的坐标。",[26,113398,113400],{"className":28,"code":113399,"language":30,"meta":31,"style":31},"error = target - tip\n",[33,113401,113402],{"__ignoreMap":31},[36,113403,113404,113406,113408,113410,113412],{"class":38,"line":39},[36,113405,112997],{"class":42},[36,113407,47],{"class":46},[36,113409,112569],{"class":42},[36,113411,173],{"class":46},[36,113413,112574],{"class":42},[19,113415,113416],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,113418,113420],{"className":28,"code":113419,"language":30,"meta":31,"style":31},"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",[33,113421,113422,113454],{"__ignoreMap":31},[36,113423,113424,113426,113428,113430,113432,113434,113436,113438,113440,113442,113444,113446,113448,113450,113452],{"class":38,"line":39},[36,113425,106272],{"class":42},[36,113427,812],{"class":53},[36,113429,4923],{"class":42},[36,113431,47],{"class":46},[36,113433,112591],{"class":42},[36,113435,105661],{"class":53},[36,113437,6998],{"class":46},[36,113439,112598],{"class":42},[36,113441,96],{"class":53},[36,113443,112603],{"class":42},[36,113445,173],{"class":46},[36,113447,102804],{"class":53},[36,113449,12915],{"class":42},[36,113451,102804],{"class":53},[36,113453,63],{"class":42},[36,113455,113456,113458,113460,113462,113464,113466,113468,113470,113472,113474,113476,113478,113480,113482,113484],{"class":38,"line":66},[36,113457,106272],{"class":42},[36,113459,54],{"class":53},[36,113461,4923],{"class":42},[36,113463,47],{"class":46},[36,113465,112591],{"class":42},[36,113467,105661],{"class":53},[36,113469,6998],{"class":46},[36,113471,112598],{"class":42},[36,113473,812],{"class":53},[36,113475,112603],{"class":42},[36,113477,173],{"class":46},[36,113479,102804],{"class":53},[36,113481,12915],{"class":42},[36,113483,102804],{"class":53},[36,113485,63],{"class":42},[19,113487,113488,113489,113492],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,113490,113491],{},"error -> ctrl -> step"," 的流程。",[26,113494,113495],{"className":28,"code":104906,"language":30,"meta":31,"style":31},[33,113496,113497],{"__ignoreMap":31},[36,113498,113499],{"class":38,"line":39},[36,113500,104906],{"class":42},[19,113502,113503],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,113505,113507],{"className":28,"code":113506,"language":30,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,113508,113509],{"__ignoreMap":31},[36,113510,113511,113513,113515],{"class":38,"line":39},[36,113512,111255],{"class":42},[36,113514,47],{"class":46},[36,113516,112692],{"class":42},[19,113518,113519,113520,113523],{},"读取最新观测。后面打印 ",[33,113521,113522],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113525,102717],{"id":102716},[19,113527,113528],{},"观测维度为:",[26,113530,113533],{"className":113531,"code":113532,"language":5667,"meta":31},[5665],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,113534,113532],{"__ignoreMap":31},[19,113536,113537],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113539,113540],{},"程序每 100 步打印：",[26,113542,113545],{"className":113543,"code":113544,"language":5667,"meta":31},[5665],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,113546,113544],{"__ignoreMap":31},[19,113548,113549,113550,113552],{},"如果控制有效，你应该看到最终 ",[33,113551,103632],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113554,102749],{"id":102748},[579,113556,113557,113560,113563,113569,113575,113582,113592],{},[582,113558,113559],{},"修改目标点位置。",[582,113561,113562],{},"重新运行，观察最终 tip 是否变化。",[582,113564,113565,113566,113568],{},"把 gravity 改成 ",[33,113567,102990],{},"，观察控制是否变差。",[582,113570,111582,113571,111586,113573,28866],{},[33,113572,102559],{},[33,113574,96],{},[582,113576,102812,113577,102815,113579,113581],{},[33,113578,110997],{},[33,113580,107708],{},"，观察机械臂是否更难移动。",[582,113583,102812,113584,83007,113586,102815,113588,113591],{},[33,113585,103635],{},[33,113587,104547],{},[33,113589,113590],{},"0.2 0 0.6","，观察 reward 和 final tip。",[582,113593,113594],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113596,102854],{"id":102853},[596,113598,113600],{"id":113599},"site-not-found",[33,113601,113602],{},"site not found",[19,113604,113605,113606,101419,113609,28866],{},"检查 XML 中是否有 ",[33,113607,113608],{},"site name=\"tip\"",[33,113610,113611],{},"site name=\"target\"",[596,113613,113614],{"id":113614},"机械臂完全不动",[19,113616,102924],{},[579,113618,113619,113624,113627,113632],{},[582,113620,113621,113623],{},[33,113622,102559],{}," 是否为 2",[582,113625,113626],{},"actuator 是否引用正确 joint",[582,113628,113629,113631],{},[33,113630,101477],{}," 是否被赋值",[582,113633,113634,113635],{},"是否执行了 ",[33,113636,101086],{},[596,113638,113639],{"id":113639},"控制效果不好",[19,113641,113642],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,113644,113647],{"className":113645,"code":113646,"language":5667,"meta":31},[5665],"obs → action → mj_step → reward → next_obs\n",[33,113648,113646],{"__ignoreMap":31},[596,113650,113652],{"id":113651},"tip-坐标不变化","tip 坐标不变化",[19,113654,102976],{},[579,113656,113657,113662,113670,113679],{},[582,113658,113659,113660,28866],{},"是否每步调用了 ",[33,113661,101086],{},[582,113663,113664,113665,101419,113667,28866],{},"是否写入了 ",[33,113666,106527],{},[33,113668,113669],{},"data.ctrl[1]",[582,113671,113672,113673,833,113676,28866],{},"actuator 是否正确引用 ",[33,113674,113675],{},"joint1",[33,113677,113678],{},"joint2",[582,113680,113681],{},"控制输入是否太小。",[596,113683,113684],{"id":113684},"目标点不会动",[19,113686,113687],{},"本章的 target 是固定 site：",[26,113689,113691],{"className":53544,"code":113690,"language":53546,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,113692,113693],{"__ignoreMap":31},[36,113694,113695,113697,113699,113701,113703,113705,113707,113709,113712],{"class":38,"line":39},[36,113696,1523],{"class":42},[36,113698,103611],{"class":51777},[36,113700,15400],{"class":2443},[36,113702,47],{"class":42},[36,113704,112360],{"class":405},[36,113706,101507],{"class":2443},[36,113708,47],{"class":42},[36,113710,113711],{"class":405},"\"0.5 0 0.4\"",[36,113713,113714],{"class":42}," ...\u002F>\n",[19,113716,113717,113718,113720],{},"它直接挂在 ",[33,113719,102242],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[596,113722,113723],{"id":113723},"机械臂不像真实机械臂",[19,113725,113726],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113728,103008],{"id":103007},[19,113730,113731],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113733,113734],{},"核心公式：",[26,113736,113739],{"className":113737,"code":113738,"language":5667,"meta":31},[5665],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,113740,113738],{"__ignoreMap":31},[19,113742,113743],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[539,113745,113746],{},"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":31,"searchDepth":66,"depth":66,"links":113748},[113749,113750,113751,113756,113760,113761,113762,113770],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":113752},[113753,113754,113755],{"id":111952,"depth":73,"text":111953},{"id":112028,"depth":73,"text":112028},{"id":112058,"depth":73,"text":112059},{"id":101653,"depth":66,"text":101654,"children":113757},[113758,113759],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":113763},[113764,113765,113766,113767,113768,113769],{"id":113599,"depth":73,"text":113602},{"id":113614,"depth":73,"text":113614},{"id":113639,"depth":73,"text":113639},{"id":113651,"depth":73,"text":113652},{"id":113684,"depth":73,"text":113684},{"id":113723,"depth":73,"text":113723},{"id":103007,"depth":66,"text":103008},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111756,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113777,"title":113778,"body":113779,"description":31,"extension":551,"meta":117241,"navigation":553,"path":117242,"seo":117243,"stem":117244,"__hash__":117245},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113780,"toc":117212},[113781,113784,113786,113789,113792,113817,113820,113826,113829,113835,113837,113839,113863,113865,113883,113885,113928,113930,113957,113959,113962,114014,114017,114023,114032,114035,114073,114076,114115,114118,114126,114133,114136,114142,114144,114198,114205,114250,114253,114257,114273,114283,114285,115546,115548,115560,115562,115573,115575,115578,115599,115602,115605,115638,115644,115647,115680,115683,115686,115727,115732,115746,115749,115762,115767,115790,115792,115807,115817,115832,115839,115859,115874,115892,115895,115912,115920,115936,115942,115974,115987,116019,116029,116064,116078,116124,116138,116180,116191,116204,116210,116243,116246,116273,116283,116323,116333,116350,116357,116375,116378,116419,116432,116447,116450,116473,116476,116488,116491,116510,116515,116536,116539,116554,116557,116591,116603,116618,116621,116646,116649,116668,116671,116703,116706,116730,116736,116766,116773,116786,116789,116791,116793,116799,116802,116805,116817,116820,116822,116876,116878,116882,116888,116897,116900,116907,116909,116932,116935,116939,116941,116959,116965,116967,117000,117003,117009,117013,117016,117036,117041,117045,117052,117072,117077,117081,117084,117104,117107,117193,117197,117200,117206,117209],[10,113782,113778],{"id":113783},"_8gymnasium-风格强化学习接口基础",[14,113785,101048],{"id":101047},[19,113787,113788],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113790,113791],{},"你将实现:",[26,113793,113795],{"className":28,"code":113794,"language":30,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[33,113796,113797,113807],{"__ignoreMap":31},[36,113798,113799,113802,113804],{"class":38,"line":39},[36,113800,113801],{"class":42},"obs, info ",[36,113803,47],{"class":46},[36,113805,113806],{"class":42}," env.reset()\n",[36,113808,113809,113812,113814],{"class":38,"line":66},[36,113810,113811],{"class":42},"obs, reward, terminated, truncated, info ",[36,113813,47],{"class":46},[36,113815,113816],{"class":42}," env.step(action)\n",[19,113818,113819],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113821,113822,113823,113825],{},"前面章节的代码都是“脚本式”的：在 ",[33,113824,102696],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113827,113828],{},"可以先记住 Gymnasium 环境的核心交互：",[26,113830,113833],{"className":113831,"code":113832,"language":5667,"meta":31},[5665],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[33,113834,113832],{"__ignoreMap":31},[14,113836,101171],{"id":101170},[19,113838,101174],{},[26,113840,113841],{"className":24302,"code":104789,"language":24304,"meta":31,"style":31},[33,113842,113843],{"__ignoreMap":31},[36,113844,113845,113847,113849,113851,113853,113855,113857,113859,113861],{"class":38,"line":39},[36,113846,25057],{"class":2443},[36,113848,26796],{"class":405},[36,113850,24314],{"class":405},[36,113852,26881],{"class":53},[36,113854,104804],{"class":405},[36,113856,101199],{"class":405},[36,113858,102902],{"class":405},[36,113860,101215],{"class":405},[36,113862,104813],{"class":405},[19,113864,103220],{},[26,113866,113868],{"className":24302,"code":113867,"language":24304,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,113869,113870],{"__ignoreMap":31},[36,113871,113872,113874,113876,113878,113880],{"class":38,"line":39},[36,113873,24311],{"class":2443},[36,113875,24314],{"class":405},[36,113877,101331],{"class":405},[36,113879,108112],{"class":405},[36,113881,113882],{"class":405}," gymnasium\n",[19,113884,103237],{},[26,113886,113888],{"className":24302,"code":113887,"language":24304,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[33,113889,113890,113907,113916],{"__ignoreMap":31},[36,113891,113892,113894,113896,113898,113901,113903,113905],{"class":38,"line":39},[36,113893,30811],{"class":2443},[36,113895,29657],{"class":405},[36,113897,25596],{"class":53},[36,113899,113900],{"class":405}," mujoco-gym-api",[36,113902,101376],{"class":405},[36,113904,101379],{"class":53},[36,113906,101382],{"class":53},[36,113908,113909,113911,113913],{"class":38,"line":66},[36,113910,30811],{"class":2443},[36,113912,101389],{"class":405},[36,113914,113915],{"class":405}," mujoco-gym-api\n",[36,113917,113918,113920,113922,113924,113926],{"class":38,"line":73},[36,113919,24311],{"class":2443},[36,113921,24314],{"class":405},[36,113923,101331],{"class":405},[36,113925,108112],{"class":405},[36,113927,113882],{"class":405},[19,113929,101405],{},[579,113931,113932,113942,113945,113951],{},[582,113933,113934,113935,113938,113939,28866],{},"本章使用 ",[33,113936,113937],{},"gymnasium","，不是旧版 ",[33,113940,113941],{},"gym",[582,113943,113944],{},"Gymnasium API 与旧 Gym API 有差异。",[582,113946,113947,113948,28866],{},"旧 Gym 常见返回值是 4 个: ",[33,113949,113950],{},"obs, reward, done, info",[582,113952,113953,113954,28866],{},"Gymnasium 返回值是 5 个: ",[33,113955,113956],{},"obs, reward, terminated, truncated, info",[14,113958,101446],{"id":101445},[19,113960,113961],{},"强化学习环境接口包含:",[758,113963,113964,113973],{},[761,113965,113966],{},[764,113967,113968,113971],{},[767,113969,113970],{"align":24216},"方法",[767,113972,103097],{"align":24216},[805,113974,113975,113985,113995,114005],{},[764,113976,113977,113982],{},[810,113978,113979],{"align":24216},[33,113980,113981],{},"reset()",[810,113983,113984],{"align":24216},"重置环境",[764,113986,113987,113992],{},[810,113988,113989],{"align":24216},[33,113990,113991],{},"step(action)",[810,113993,113994],{"align":24216},"执行动作",[764,113996,113997,114002],{},[810,113998,113999],{"align":24216},[33,114000,114001],{},"observation_space",[810,114003,114004],{"align":24216},"观测空间",[764,114006,114007,114012],{},[810,114008,114009],{"align":24216},[33,114010,114011],{},"action_space",[810,114013,24134],{"align":24216},[19,114015,114016],{},"一个最小环境需要完成:",[26,114018,114021],{"className":114019,"code":114020,"language":5667,"meta":31},[5665],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,114022,114020],{"__ignoreMap":31},[596,114024,114026,101419,114029,105039],{"id":114025},"terminated-和-truncated-的区别",[33,114027,114028],{},"terminated",[33,114030,114031],{},"truncated",[19,114033,114034],{},"Gymnasium 把“结束”拆成两个概念：",[758,114036,114037,114047],{},[761,114038,114039],{},[764,114040,114041,114043,114045],{},[767,114042,104975],{"align":24216},[767,114044,101101],{"align":24216},[767,114046,21667],{"align":24216},[805,114048,114049,114061],{},[764,114050,114051,114055,114058],{},[810,114052,114053],{"align":24216},[33,114054,114028],{},[810,114056,114057],{"align":24216},"任务自然结束",[810,114059,114060],{"align":24216},"机械臂到达目标、机器人摔倒",[764,114062,114063,114067,114070],{},[810,114064,114065],{"align":24216},[33,114066,114031],{},[810,114068,114069],{"align":24216},"因外部限制截断",[810,114071,114072],{"align":24216},"达到最大步数、时间限制",[19,114074,114075],{},"本章中：",[26,114077,114079],{"className":28,"code":114078,"language":30,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,114080,114081,114096],{"__ignoreMap":31},[36,114082,114083,114086,114088,114091,114093],{"class":38,"line":39},[36,114084,114085],{"class":42},"terminated ",[36,114087,47],{"class":46},[36,114089,114090],{"class":42}," dist ",[36,114092,1523],{"class":46},[36,114094,114095],{"class":53}," 0.05\n",[36,114097,114098,114101,114103,114105,114108,114110,114112],{"class":38,"line":66},[36,114099,114100],{"class":42},"truncated ",[36,114102,47],{"class":46},[36,114104,39350],{"class":53},[36,114106,114107],{"class":42},".steps ",[36,114109,2190],{"class":46},[36,114111,39350],{"class":53},[36,114113,114114],{"class":42},".max_steps\n",[19,114116,114117],{},"也就是：",[579,114119,114120,114123],{},[582,114121,114122],{},"末端距离目标小于 0.05，任务成功结束。",[582,114124,114125],{},"步数超过上限，episode 被截断。",[596,114127,114129,101419,114131],{"id":114128},"observation_space-和-action_space",[33,114130,114001],{},[33,114132,114011],{},[19,114134,114135],{},"这两个对象告诉算法：",[26,114137,114140],{"className":114138,"code":114139,"language":5667,"meta":31},[5665],"观测长什么样\n动作允许多大\n",[33,114141,114139],{"__ignoreMap":31},[19,114143,15113],{},[26,114145,114147],{"className":28,"code":114146,"language":30,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,114148,114149],{"__ignoreMap":31},[36,114150,114151,114153,114156,114158,114161,114164,114167,114169,114171,114174,114176,114178,114180,114182,114184,114186,114188,114191,114193,114195],{"class":38,"line":39},[36,114152,31301],{"class":53},[36,114154,114155],{"class":42},".action_space ",[36,114157,47],{"class":46},[36,114159,114160],{"class":42}," spaces.Box(",[36,114162,114163],{"class":5696},"low",[36,114165,114166],{"class":46},"=-",[36,114168,102804],{"class":53},[36,114170,12915],{"class":42},[36,114172,114173],{"class":5696},"high",[36,114175,47],{"class":46},[36,114177,102804],{"class":53},[36,114179,12915],{"class":42},[36,114181,527],{"class":5696},[36,114183,47],{"class":46},[36,114185,345],{"class":42},[36,114187,96],{"class":53},[36,114189,114190],{"class":42},",), ",[36,114192,93974],{"class":5696},[36,114194,47],{"class":46},[36,114196,114197],{"class":42},"np.float32)\n",[19,114199,114200,114201,114204],{},"表示动作是 2 维数组，每个值都在 ",[33,114202,114203],{},"[-1, 1]"," 范围内。",[26,114206,114208],{"className":28,"code":114207,"language":30,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,114209,114210],{"__ignoreMap":31},[36,114211,114212,114214,114217,114219,114221,114223,114225,114228,114230,114232,114234,114236,114238,114240,114242,114244,114246,114248],{"class":38,"line":39},[36,114213,31301],{"class":53},[36,114215,114216],{"class":42},".observation_space ",[36,114218,47],{"class":46},[36,114220,114160],{"class":42},[36,114222,114163],{"class":5696},[36,114224,114166],{"class":46},[36,114226,114227],{"class":42},"np.inf, ",[36,114229,114173],{"class":5696},[36,114231,47],{"class":46},[36,114233,114227],{"class":42},[36,114235,527],{"class":5696},[36,114237,47],{"class":46},[36,114239,345],{"class":42},[36,114241,1062],{"class":53},[36,114243,114190],{"class":42},[36,114245,93974],{"class":5696},[36,114247,47],{"class":46},[36,114249,114197],{"class":42},[19,114251,114252],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[596,114254,114256],{"id":114255},"frame_skip-是什么","frame_skip 是什么",[26,114258,114260],{"className":28,"code":114259,"language":30,"meta":31,"style":31},"self.frame_skip = 5\n",[33,114261,114262],{"__ignoreMap":31},[36,114263,114264,114266,114269,114271],{"class":38,"line":39},[36,114265,31301],{"class":53},[36,114267,114268],{"class":42},".frame_skip ",[36,114270,47],{"class":46},[36,114272,54904],{"class":53},[19,114274,114275,114276,114279,114280,114282],{},"表示外部调用一次 ",[33,114277,114278],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,114281,101616],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114284,101654],{"id":101653},[26,114286,114288],{"className":28,"code":114287,"language":30,"meta":31,"style":31},"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",[33,114289,114290,114302,114308,114318,114329,114333,114337,114345,114350,114354,114358,114362,114366,114370,114374,114378,114383,114387,114391,114395,114400,114404,114408,114412,114416,114420,114424,114428,114432,114436,114440,114444,114448,114452,114470,114485,114489,114502,114512,114527,114544,114548,114569,114588,114613,114627,114631,114641,114653,114663,114667,114709,114747,114751,114761,114777,114792,114811,114818,114822,114835,114850,114865,114878,114897,114913,114917,114958,114973,114988,114992,115031,115042,115055,115059,115069,115078,115082,115092,115107,115125,115129,115140,115157,115170,115174,115184,115188,115199,115210,115214,115228,115242,115258,115262,115275,115292,115307,115314,115318,115322,115334,115344,115362,115374,115386,115390,115398,115414,115423,115432,115440,115482,115495,115500,115504,115522,115526,115530,115542],{"__ignoreMap":31},[36,114291,114292,114294,114297,114299],{"class":38,"line":39},[36,114293,30871],{"class":46},[36,114295,114296],{"class":42}," gymnasium ",[36,114298,31861],{"class":46},[36,114300,114301],{"class":42}," gym\n",[36,114303,114304,114306],{"class":38,"line":66},[36,114305,30871],{"class":46},[36,114307,101702],{"class":42},[36,114309,114310,114312,114314,114316],{"class":38,"line":73},[36,114311,30871],{"class":46},[36,114313,31858],{"class":42},[36,114315,31861],{"class":46},[36,114317,31864],{"class":42},[36,114319,114320,114322,114324,114326],{"class":38,"line":79},[36,114321,31215],{"class":46},[36,114323,114296],{"class":42},[36,114325,30871],{"class":46},[36,114327,114328],{"class":42}," spaces\n",[36,114330,114331],{"class":38,"line":85},[36,114332,2880],{"emptyLinePlaceholder":553},[36,114334,114335],{"class":38,"line":419},[36,114336,2880],{"emptyLinePlaceholder":553},[36,114338,114339,114341,114343],{"class":38,"line":425},[36,114340,101715],{"class":53},[36,114342,14044],{"class":46},[36,114344,101720],{"class":405},[36,114346,114347],{"class":38,"line":431},[36,114348,114349],{"class":405},"\u003Cmujoco model=\"gym_reacher\">\n",[36,114351,114352],{"class":38,"line":437},[36,114353,112139],{"class":405},[36,114355,114356],{"class":38,"line":443},[36,114357,2880],{"emptyLinePlaceholder":553},[36,114359,114360],{"class":38,"line":2092},[36,114361,101739],{"class":405},[36,114363,114364],{"class":38,"line":2097},[36,114365,112157],{"class":405},[36,114367,114368],{"class":38,"line":2103},[36,114369,2880],{"emptyLinePlaceholder":553},[36,114371,114372],{"class":38,"line":2108},[36,114373,112166],{"class":405},[36,114375,114376],{"class":38,"line":2122},[36,114377,112171],{"class":405},[36,114379,114380],{"class":38,"line":2127},[36,114381,114382],{"class":405},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,114384,114385],{"class":38,"line":2133},[36,114386,2880],{"emptyLinePlaceholder":553},[36,114388,114389],{"class":38,"line":2154},[36,114390,112185],{"class":405},[36,114392,114393],{"class":38,"line":2159},[36,114394,112190],{"class":405},[36,114396,114397],{"class":38,"line":2173},[36,114398,114399],{"class":405},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,114401,114402],{"class":38,"line":2178},[36,114403,112200],{"class":405},[36,114405,114406],{"class":38,"line":2207},[36,114407,106839],{"class":405},[36,114409,114410],{"class":38,"line":2212},[36,114411,101768],{"class":405},[36,114413,114414],{"class":38,"line":2229},[36,114415,101773],{"class":405},[36,114417,114418],{"class":38,"line":2234},[36,114419,2880],{"emptyLinePlaceholder":553},[36,114421,114422],{"class":38,"line":2239},[36,114423,106856],{"class":405},[36,114425,114426],{"class":38,"line":2244},[36,114427,112225],{"class":405},[36,114429,114430],{"class":38,"line":2258},[36,114431,112230],{"class":405},[36,114433,114434],{"class":38,"line":2263},[36,114435,106866],{"class":405},[36,114437,114438],{"class":38,"line":3057},[36,114439,101778],{"class":405},[36,114441,114442],{"class":38,"line":3071},[36,114443,96169],{"class":405},[36,114445,114446],{"class":38,"line":3079},[36,114447,2880],{"emptyLinePlaceholder":553},[36,114449,114450],{"class":38,"line":3084},[36,114451,2880],{"emptyLinePlaceholder":553},[36,114453,114454,114456,114459,114461,114463,114465,114468],{"class":38,"line":3090},[36,114455,15174],{"class":46},[36,114457,114458],{"class":2443}," ReacherEnv",[36,114460,345],{"class":42},[36,114462,113941],{"class":2443},[36,114464,1171],{"class":42},[36,114466,114467],{"class":2443},"Env",[36,114469,31264],{"class":42},[36,114471,114472,114475,114477,114479,114482],{"class":38,"line":3096},[36,114473,114474],{"class":42},"    metadata ",[36,114476,47],{"class":46},[36,114478,4928],{"class":42},[36,114480,114481],{"class":405},"\"render_modes\"",[36,114483,114484],{"class":42},": []}\n",[36,114486,114487],{"class":38,"line":3101},[36,114488,2880],{"emptyLinePlaceholder":553},[36,114490,114491,114493,114495,114498,114500],{"class":38,"line":8428},[36,114492,31279],{"class":46},[36,114494,31282],{"class":53},[36,114496,114497],{"class":42},"(self) -> ",[36,114499,96157],{"class":53},[36,114501,4219],{"class":42},[36,114503,114504,114506,114508,114510],{"class":38,"line":8452},[36,114505,31295],{"class":53},[36,114507,17741],{"class":42},[36,114509,31307],{"class":53},[36,114511,2456],{"class":42},[36,114513,114514,114516,114519,114521,114523,114525],{"class":38,"line":8457},[36,114515,31323],{"class":53},[36,114517,114518],{"class":42},".model ",[36,114520,47],{"class":46},[36,114522,101813],{"class":42},[36,114524,101715],{"class":53},[36,114526,63],{"class":42},[36,114528,114529,114531,114534,114536,114539,114541],{"class":38,"line":8463},[36,114530,31323],{"class":53},[36,114532,114533],{"class":42},".data ",[36,114535,47],{"class":46},[36,114537,114538],{"class":42}," mujoco.MjData(",[36,114540,31301],{"class":53},[36,114542,114543],{"class":42},".model)\n",[36,114545,114546],{"class":38,"line":8490},[36,114547,2880],{"emptyLinePlaceholder":553},[36,114549,114550,114552,114555,114557,114560,114562,114565,114567],{"class":38,"line":8495},[36,114551,31323],{"class":53},[36,114553,114554],{"class":42},".tip_site_id ",[36,114556,47],{"class":46},[36,114558,114559],{"class":42}," mujoco.mj_name2id(",[36,114561,31301],{"class":53},[36,114563,114564],{"class":42},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,114566,111937],{"class":405},[36,114568,63],{"class":42},[36,114570,114571,114573,114576,114578,114580,114582,114584,114586],{"class":38,"line":8501},[36,114572,31323],{"class":53},[36,114574,114575],{"class":42},".target_site_id ",[36,114577,47],{"class":46},[36,114579,114559],{"class":42},[36,114581,31301],{"class":53},[36,114583,114564],{"class":42},[36,114585,112360],{"class":405},[36,114587,63],{"class":42},[36,114589,114590,114592,114594,114596,114598,114600,114603,114605,114607,114609,114611],{"class":38,"line":8513},[36,114591,2977],{"class":46},[36,114593,39350],{"class":53},[36,114595,114554],{"class":42},[36,114597,1523],{"class":46},[36,114599,4573],{"class":53},[36,114601,114602],{"class":46}," or",[36,114604,39350],{"class":53},[36,114606,114575],{"class":42},[36,114608,1523],{"class":46},[36,114610,4573],{"class":53},[36,114612,4219],{"class":42},[36,114614,114615,114618,114620,114622,114625],{"class":38,"line":8525},[36,114616,114617],{"class":46},"            raise",[36,114619,103836],{"class":53},[36,114621,345],{"class":42},[36,114623,114624],{"class":405},"\"required sites not found\"",[36,114626,63],{"class":42},[36,114628,114629],{"class":38,"line":8537},[36,114630,2880],{"emptyLinePlaceholder":553},[36,114632,114633,114635,114637,114639],{"class":38,"line":10196},[36,114634,31323],{"class":53},[36,114636,114268],{"class":42},[36,114638,47],{"class":46},[36,114640,54904],{"class":53},[36,114642,114643,114645,114648,114650],{"class":38,"line":10221},[36,114644,31323],{"class":53},[36,114646,114647],{"class":42},".max_steps ",[36,114649,47],{"class":46},[36,114651,114652],{"class":53}," 200\n",[36,114654,114655,114657,114659,114661],{"class":38,"line":10244},[36,114656,31323],{"class":53},[36,114658,114107],{"class":42},[36,114660,47],{"class":46},[36,114662,47810],{"class":53},[36,114664,114665],{"class":38,"line":10268},[36,114666,2880],{"emptyLinePlaceholder":553},[36,114668,114669,114671,114673,114675,114677,114679,114681,114683,114685,114687,114689,114691,114693,114695,114697,114699,114701,114703,114705,114707],{"class":38,"line":10273},[36,114670,31323],{"class":53},[36,114672,114155],{"class":42},[36,114674,47],{"class":46},[36,114676,114160],{"class":42},[36,114678,114163],{"class":5696},[36,114680,114166],{"class":46},[36,114682,102804],{"class":53},[36,114684,12915],{"class":42},[36,114686,114173],{"class":5696},[36,114688,47],{"class":46},[36,114690,102804],{"class":53},[36,114692,12915],{"class":42},[36,114694,527],{"class":5696},[36,114696,47],{"class":46},[36,114698,345],{"class":42},[36,114700,96],{"class":53},[36,114702,114190],{"class":42},[36,114704,93974],{"class":5696},[36,114706,47],{"class":46},[36,114708,114197],{"class":42},[36,114710,114711,114713,114715,114717,114719,114721,114723,114725,114727,114729,114731,114733,114735,114737,114739,114741,114743,114745],{"class":38,"line":10278},[36,114712,31323],{"class":53},[36,114714,114216],{"class":42},[36,114716,47],{"class":46},[36,114718,114160],{"class":42},[36,114720,114163],{"class":5696},[36,114722,114166],{"class":46},[36,114724,114227],{"class":42},[36,114726,114173],{"class":5696},[36,114728,47],{"class":46},[36,114730,114227],{"class":42},[36,114732,527],{"class":5696},[36,114734,47],{"class":46},[36,114736,345],{"class":42},[36,114738,1062],{"class":53},[36,114740,114190],{"class":42},[36,114742,93974],{"class":5696},[36,114744,47],{"class":46},[36,114746,114197],{"class":42},[36,114748,114749],{"class":38,"line":10283},[36,114750,2880],{"emptyLinePlaceholder":553},[36,114752,114753,114755,114758],{"class":38,"line":10292},[36,114754,31279],{"class":46},[36,114756,114757],{"class":2443}," _get_obs",[36,114759,114760],{"class":42},"(self) -> np.ndarray:\n",[36,114762,114763,114765,114767,114769,114772,114774],{"class":38,"line":10297},[36,114764,112538],{"class":42},[36,114766,47],{"class":46},[36,114768,39350],{"class":53},[36,114770,114771],{"class":42},".data.site_xpos[",[36,114773,31301],{"class":53},[36,114775,114776],{"class":42},".tip_site_id].copy()\n",[36,114778,114779,114781,114783,114785,114787,114789],{"class":38,"line":10303},[36,114780,112551],{"class":42},[36,114782,47],{"class":46},[36,114784,39350],{"class":53},[36,114786,114771],{"class":42},[36,114788,31301],{"class":53},[36,114790,114791],{"class":42},".target_site_id].copy()\n",[36,114793,114794,114796,114798,114801,114803,114806,114808],{"class":38,"line":10324},[36,114795,110583],{"class":42},[36,114797,47],{"class":46},[36,114799,114800],{"class":42}," np.concatenate([",[36,114802,31301],{"class":53},[36,114804,114805],{"class":42},".data.qpos.copy(), ",[36,114807,31301],{"class":53},[36,114809,114810],{"class":42},".data.qvel.copy(), tip, target])\n",[36,114812,114813,114815],{"class":38,"line":10330},[36,114814,15232],{"class":46},[36,114816,114817],{"class":42}," obs.astype(np.float32)\n",[36,114819,114820],{"class":38,"line":10344},[36,114821,2880],{"emptyLinePlaceholder":553},[36,114823,114824,114826,114829,114831,114833],{"class":38,"line":10350},[36,114825,31279],{"class":46},[36,114827,114828],{"class":2443}," _get_reward",[36,114830,114497],{"class":42},[36,114832,666],{"class":53},[36,114834,4219],{"class":42},[36,114836,114837,114839,114841,114843,114845,114847],{"class":38,"line":10377},[36,114838,112538],{"class":42},[36,114840,47],{"class":46},[36,114842,39350],{"class":53},[36,114844,114771],{"class":42},[36,114846,31301],{"class":53},[36,114848,114849],{"class":42},".tip_site_id]\n",[36,114851,114852,114854,114856,114858,114860,114862],{"class":38,"line":10386},[36,114853,112551],{"class":42},[36,114855,47],{"class":46},[36,114857,39350],{"class":53},[36,114859,114771],{"class":42},[36,114861,31301],{"class":53},[36,114863,114864],{"class":42},".target_site_id]\n",[36,114866,114867,114870,114872,114874,114876],{"class":38,"line":10392},[36,114868,114869],{"class":42},"        dist ",[36,114871,47],{"class":46},[36,114873,112002],{"class":42},[36,114875,173],{"class":46},[36,114877,112007],{"class":42},[36,114879,114880,114883,114885,114887,114889,114892,114894],{"class":38,"line":10400},[36,114881,114882],{"class":42},"        control_cost ",[36,114884,47],{"class":46},[36,114886,112438],{"class":53},[36,114888,6998],{"class":46},[36,114890,114891],{"class":42}," np.sum(np.square(",[36,114893,31301],{"class":53},[36,114895,114896],{"class":42},".data.ctrl))\n",[36,114898,114899,114901,114903,114905,114907,114909,114911],{"class":38,"line":10405},[36,114900,15232],{"class":46},[36,114902,110198],{"class":53},[36,114904,345],{"class":42},[36,114906,173],{"class":46},[36,114908,111997],{"class":42},[36,114910,173],{"class":46},[36,114912,112460],{"class":42},[36,114914,114915],{"class":38,"line":17084},[36,114916,2880],{"emptyLinePlaceholder":553},[36,114918,114919,114921,114924,114927,114929,114932,114934,114936,114938,114940,114942,114945,114948,114950,114952,114954,114956],{"class":38,"line":17090},[36,114920,31279],{"class":46},[36,114922,114923],{"class":2443}," reset",[36,114925,114926],{"class":42},"(self, ",[36,114928,1071],{"class":46},[36,114930,114931],{"class":42},", seed: ",[36,114933,631],{"class":53},[36,114935,25590],{"class":46},[36,114937,39410],{"class":53},[36,114939,14044],{"class":46},[36,114941,39410],{"class":53},[36,114943,114944],{"class":42},", options: ",[36,114946,114947],{"class":53},"dict",[36,114949,25590],{"class":46},[36,114951,39410],{"class":53},[36,114953,14044],{"class":46},[36,114955,39410],{"class":53},[36,114957,31264],{"class":42},[36,114959,114960,114962,114965,114968,114970],{"class":38,"line":17113},[36,114961,31295],{"class":53},[36,114963,114964],{"class":42},"().reset(",[36,114966,114967],{"class":5696},"seed",[36,114969,47],{"class":46},[36,114971,114972],{"class":42},"seed)\n",[36,114974,114975,114978,114980,114983,114985],{"class":38,"line":17119},[36,114976,114977],{"class":42},"        mujoco.mj_resetData(",[36,114979,31301],{"class":53},[36,114981,114982],{"class":42},".model, ",[36,114984,31301],{"class":53},[36,114986,114987],{"class":42},".data)\n",[36,114989,114990],{"class":38,"line":17142},[36,114991,2880],{"emptyLinePlaceholder":553},[36,114993,114994,114996,114999,115001,115003,115006,115008,115010,115012,115014,115016,115018,115020,115022,115024,115026,115028],{"class":38,"line":17156},[36,114995,31323],{"class":53},[36,114997,114998],{"class":42},".data.qpos[:] ",[36,115000,47],{"class":46},[36,115002,39350],{"class":53},[36,115004,115005],{"class":42},".np_random.uniform(",[36,115007,114163],{"class":5696},[36,115009,114166],{"class":46},[36,115011,86687],{"class":53},[36,115013,12915],{"class":42},[36,115015,114173],{"class":5696},[36,115017,47],{"class":46},[36,115019,86687],{"class":53},[36,115021,12915],{"class":42},[36,115023,531],{"class":5696},[36,115025,47],{"class":46},[36,115027,31301],{"class":53},[36,115029,115030],{"class":42},".model.nq)\n",[36,115032,115033,115035,115038,115040],{"class":38,"line":17176},[36,115034,31323],{"class":53},[36,115036,115037],{"class":42},".data.qvel[:] ",[36,115039,47],{"class":46},[36,115041,105162],{"class":53},[36,115043,115044,115047,115049,115051,115053],{"class":38,"line":17182},[36,115045,115046],{"class":42},"        mujoco.mj_forward(",[36,115048,31301],{"class":53},[36,115050,114982],{"class":42},[36,115052,31301],{"class":53},[36,115054,114987],{"class":42},[36,115056,115057],{"class":38,"line":17193},[36,115058,2880],{"emptyLinePlaceholder":553},[36,115060,115061,115063,115065,115067],{"class":38,"line":17216},[36,115062,31323],{"class":53},[36,115064,114107],{"class":42},[36,115066,47],{"class":46},[36,115068,47810],{"class":53},[36,115070,115071,115073,115075],{"class":38,"line":17238},[36,115072,15232],{"class":46},[36,115074,39350],{"class":53},[36,115076,115077],{"class":42},"._get_obs(), {}\n",[36,115079,115080],{"class":38,"line":17243},[36,115081,2880],{"emptyLinePlaceholder":553},[36,115083,115084,115086,115089],{"class":38,"line":17249},[36,115085,31279],{"class":46},[36,115087,115088],{"class":2443}," step",[36,115090,115091],{"class":42},"(self, action):\n",[36,115093,115094,115096,115098,115101,115103,115105],{"class":38,"line":17263},[36,115095,110623],{"class":42},[36,115097,47],{"class":46},[36,115099,115100],{"class":42}," np.asarray(action, ",[36,115102,93974],{"class":5696},[36,115104,47],{"class":46},[36,115106,114197],{"class":42},[36,115108,115109,115111,115113,115115,115117,115120,115122],{"class":38,"line":17276},[36,115110,110623],{"class":42},[36,115112,47],{"class":46},[36,115114,107848],{"class":42},[36,115116,31301],{"class":53},[36,115118,115119],{"class":42},".action_space.low, ",[36,115121,31301],{"class":53},[36,115123,115124],{"class":42},".action_space.high)\n",[36,115126,115127],{"class":38,"line":17281},[36,115128,2880],{"emptyLinePlaceholder":553},[36,115130,115131,115133,115136,115138],{"class":38,"line":17295},[36,115132,31323],{"class":53},[36,115134,115135],{"class":42},".data.ctrl[:] ",[36,115137,47],{"class":46},[36,115139,107871],{"class":42},[36,115141,115142,115144,115146,115148,115150,115152,115154],{"class":38,"line":17300},[36,115143,3883],{"class":46},[36,115145,101902],{"class":42},[36,115147,26524],{"class":46},[36,115149,32920],{"class":53},[36,115151,345],{"class":42},[36,115153,31301],{"class":53},[36,115155,115156],{"class":42},".frame_skip):\n",[36,115158,115159,115162,115164,115166,115168],{"class":38,"line":17306},[36,115160,115161],{"class":42},"            mujoco.mj_step(",[36,115163,31301],{"class":53},[36,115165,114982],{"class":42},[36,115167,31301],{"class":53},[36,115169,114987],{"class":42},[36,115171,115172],{"class":38,"line":17311},[36,115173,2880],{"emptyLinePlaceholder":553},[36,115175,115176,115178,115180,115182],{"class":38,"line":17325},[36,115177,31323],{"class":53},[36,115179,114107],{"class":42},[36,115181,9957],{"class":46},[36,115183,56176],{"class":53},[36,115185,115186],{"class":38,"line":17330},[36,115187,2880],{"emptyLinePlaceholder":553},[36,115189,115190,115192,115194,115196],{"class":38,"line":17335},[36,115191,110583],{"class":42},[36,115193,47],{"class":46},[36,115195,39350],{"class":53},[36,115197,115198],{"class":42},"._get_obs()\n",[36,115200,115201,115203,115205,115207],{"class":38,"line":17349},[36,115202,110688],{"class":42},[36,115204,47],{"class":46},[36,115206,39350],{"class":53},[36,115208,115209],{"class":42},"._get_reward()\n",[36,115211,115212],{"class":38,"line":17361},[36,115213,2880],{"emptyLinePlaceholder":553},[36,115215,115216,115218,115220,115222,115224,115226],{"class":38,"line":17366},[36,115217,112538],{"class":42},[36,115219,47],{"class":46},[36,115221,39350],{"class":53},[36,115223,114771],{"class":42},[36,115225,31301],{"class":53},[36,115227,114849],{"class":42},[36,115229,115230,115232,115234,115236,115238,115240],{"class":38,"line":17379},[36,115231,112551],{"class":42},[36,115233,47],{"class":46},[36,115235,39350],{"class":53},[36,115237,114771],{"class":42},[36,115239,31301],{"class":53},[36,115241,114864],{"class":42},[36,115243,115244,115246,115248,115250,115253,115255],{"class":38,"line":17384},[36,115245,114869],{"class":42},[36,115247,47],{"class":46},[36,115249,110198],{"class":53},[36,115251,115252],{"class":42},"(np.linalg.norm(tip ",[36,115254,173],{"class":46},[36,115256,115257],{"class":42}," target))\n",[36,115259,115260],{"class":38,"line":17389},[36,115261,2880],{"emptyLinePlaceholder":553},[36,115263,115264,115267,115269,115271,115273],{"class":38,"line":17394},[36,115265,115266],{"class":42},"        terminated ",[36,115268,47],{"class":46},[36,115270,114090],{"class":42},[36,115272,1523],{"class":46},[36,115274,114095],{"class":53},[36,115276,115277,115280,115282,115284,115286,115288,115290],{"class":38,"line":17407},[36,115278,115279],{"class":42},"        truncated ",[36,115281,47],{"class":46},[36,115283,39350],{"class":53},[36,115285,114107],{"class":42},[36,115287,2190],{"class":46},[36,115289,39350],{"class":53},[36,115291,114114],{"class":42},[36,115293,115294,115297,115299,115301,115304],{"class":38,"line":17412},[36,115295,115296],{"class":42},"        info ",[36,115298,47],{"class":46},[36,115300,4928],{"class":42},[36,115302,115303],{"class":405},"\"distance\"",[36,115305,115306],{"class":42},": dist}\n",[36,115308,115309,115311],{"class":38,"line":33110},[36,115310,15232],{"class":46},[36,115312,115313],{"class":42}," obs, reward, terminated, truncated, info\n",[36,115315,115316],{"class":38,"line":33116},[36,115317,2880],{"emptyLinePlaceholder":553},[36,115319,115320],{"class":38,"line":33122},[36,115321,2880],{"emptyLinePlaceholder":553},[36,115323,115324,115326,115328,115330,115332],{"class":38,"line":33128},[36,115325,32424],{"class":46},[36,115327,2453],{"class":2443},[36,115329,101799],{"class":42},[36,115331,96157],{"class":53},[36,115333,4219],{"class":42},[36,115335,115336,115339,115341],{"class":38,"line":33134},[36,115337,115338],{"class":42},"    env ",[36,115340,47],{"class":46},[36,115342,115343],{"class":42}," ReacherEnv()\n",[36,115345,115346,115349,115351,115354,115356,115358,115360],{"class":38,"line":33145},[36,115347,115348],{"class":42},"    obs, info ",[36,115350,47],{"class":46},[36,115352,115353],{"class":42}," env.reset(",[36,115355,114967],{"class":5696},[36,115357,47],{"class":46},[36,115359,812],{"class":53},[36,115361,63],{"class":42},[36,115363,115364,115366,115368,115371],{"class":38,"line":33151},[36,115365,31777],{"class":53},[36,115367,345],{"class":42},[36,115369,115370],{"class":405},"\"initial obs shape:\"",[36,115372,115373],{"class":42},", obs.shape)\n",[36,115375,115376,115378,115380,115383],{"class":38,"line":33171},[36,115377,31777],{"class":53},[36,115379,345],{"class":42},[36,115381,115382],{"class":405},"\"initial info:\"",[36,115384,115385],{"class":42},", info)\n",[36,115387,115388],{"class":38,"line":33177},[36,115389,2880],{"emptyLinePlaceholder":553},[36,115391,115392,115394,115396],{"class":38,"line":33188},[36,115393,110554],{"class":42},[36,115395,47],{"class":46},[36,115397,105162],{"class":53},[36,115399,115400,115402,115404,115406,115408,115410,115412],{"class":38,"line":33194},[36,115401,3681],{"class":46},[36,115403,32093],{"class":42},[36,115405,26524],{"class":46},[36,115407,32920],{"class":53},[36,115409,345],{"class":42},[36,115411,1313],{"class":53},[36,115413,31264],{"class":42},[36,115415,115416,115418,115420],{"class":38,"line":33200},[36,115417,110623],{"class":42},[36,115419,47],{"class":46},[36,115421,115422],{"class":42}," env.action_space.sample()\n",[36,115424,115425,115428,115430],{"class":38,"line":33206},[36,115426,115427],{"class":42},"        obs, reward, terminated, truncated, info ",[36,115429,47],{"class":46},[36,115431,113816],{"class":42},[36,115433,115434,115436,115438],{"class":38,"line":33212},[36,115435,110698],{"class":42},[36,115437,9957],{"class":46},[36,115439,110703],{"class":42},[36,115441,115442,115444,115446,115448,115450,115453,115455,115457,115460,115462,115464,115467,115469,115471,115474,115476,115478,115480],{"class":38,"line":33218},[36,115443,32928],{"class":53},[36,115445,345],{"class":42},[36,115447,110732],{"class":405},[36,115449,110735],{"class":42},[36,115451,115452],{"class":405},"\"reward:\"",[36,115454,12915],{"class":42},[36,115456,32495],{"class":53},[36,115458,115459],{"class":42},"(reward, ",[36,115461,127],{"class":53},[36,115463,110746],{"class":42},[36,115465,115466],{"class":405},"\"distance:\"",[36,115468,12915],{"class":42},[36,115470,32495],{"class":53},[36,115472,115473],{"class":42},"(info[",[36,115475,115303],{"class":405},[36,115477,112603],{"class":42},[36,115479,127],{"class":53},[36,115481,370],{"class":42},[36,115483,115484,115486,115489,115492],{"class":38,"line":33224},[36,115485,2977],{"class":46},[36,115487,115488],{"class":42}," terminated ",[36,115490,115491],{"class":46},"or",[36,115493,115494],{"class":42}," truncated:\n",[36,115496,115497],{"class":38,"line":33230},[36,115498,115499],{"class":46},"            break\n",[36,115501,115502],{"class":38,"line":33250},[36,115503,2880],{"emptyLinePlaceholder":553},[36,115505,115506,115508,115510,115512,115514,115516,115518,115520],{"class":38,"line":33256},[36,115507,31777],{"class":53},[36,115509,345],{"class":42},[36,115511,110777],{"class":405},[36,115513,12915],{"class":42},[36,115515,32495],{"class":53},[36,115517,110784],{"class":42},[36,115519,127],{"class":53},[36,115521,370],{"class":42},[36,115523,115524],{"class":38,"line":33272},[36,115525,2880],{"emptyLinePlaceholder":553},[36,115527,115528],{"class":38,"line":33278},[36,115529,2880],{"emptyLinePlaceholder":553},[36,115531,115532,115534,115536,115538,115540],{"class":38,"line":33292},[36,115533,2011],{"class":46},[36,115535,31698],{"class":53},[36,115537,101960],{"class":46},[36,115539,101963],{"class":405},[36,115541,4219],{"class":42},[36,115543,115544],{"class":38,"line":33298},[36,115545,101970],{"class":42},[19,115547,103971],{},[26,115549,115551],{"className":24302,"code":115550,"language":24304,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,115552,115553],{"__ignoreMap":31},[36,115554,115555,115557],{"class":38,"line":39},[36,115556,101684],{"class":2443},[36,115558,115559],{"class":405}," ch8_gym_env.py\n",[19,115561,110845],{},[26,115563,115565],{"className":24302,"code":115564,"language":24304,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,115566,115567],{"__ignoreMap":31},[36,115568,115569,115571],{"class":38,"line":39},[36,115570,30],{"class":2443},[36,115572,115559],{"class":405},[596,115574,101973],{"id":101973},[19,115576,115577],{},"继承 Gymnasium 环境：",[26,115579,115581],{"className":28,"code":115580,"language":30,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,115582,115583],{"__ignoreMap":31},[36,115584,115585,115587,115589,115591,115593,115595,115597],{"class":38,"line":39},[36,115586,15174],{"class":46},[36,115588,114458],{"class":2443},[36,115590,345],{"class":42},[36,115592,113941],{"class":2443},[36,115594,1171],{"class":42},[36,115596,114467],{"class":2443},[36,115598,31264],{"class":42},[19,115600,115601],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115603,115604],{},"初始化模型：",[26,115606,115608],{"className":28,"code":115607,"language":30,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,115609,115610,115624],{"__ignoreMap":31},[36,115611,115612,115614,115616,115618,115620,115622],{"class":38,"line":39},[36,115613,31301],{"class":53},[36,115615,114518],{"class":42},[36,115617,47],{"class":46},[36,115619,101813],{"class":42},[36,115621,101715],{"class":53},[36,115623,63],{"class":42},[36,115625,115626,115628,115630,115632,115634,115636],{"class":38,"line":66},[36,115627,31301],{"class":53},[36,115629,114533],{"class":42},[36,115631,47],{"class":46},[36,115633,114538],{"class":42},[36,115635,31301],{"class":53},[36,115637,114543],{"class":42},[19,115639,115640,115641,115643],{},"这和前面章节一样，只是现在放到了类的 ",[33,115642,31307],{}," 里。",[19,115645,115646],{},"缓存 site ID：",[26,115648,115650],{"className":28,"code":115649,"language":30,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,115651,115652,115666],{"__ignoreMap":31},[36,115653,115654,115656,115658,115660,115662,115664],{"class":38,"line":39},[36,115655,31301],{"class":53},[36,115657,114554],{"class":42},[36,115659,47],{"class":46},[36,115661,114559],{"class":42},[36,115663,90031],{"class":53},[36,115665,63],{"class":42},[36,115667,115668,115670,115672,115674,115676,115678],{"class":38,"line":66},[36,115669,31301],{"class":53},[36,115671,114575],{"class":42},[36,115673,47],{"class":46},[36,115675,114559],{"class":42},[36,115677,90031],{"class":53},[36,115679,63],{"class":42},[19,115681,115682],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115684,115685],{},"reset：",[26,115687,115689],{"className":28,"code":115688,"language":30,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,115690,115691],{"__ignoreMap":31},[36,115692,115693,115695,115697,115699,115701,115703,115705,115707,115709,115711,115713,115715,115717,115719,115721,115723,115725],{"class":38,"line":39},[36,115694,32424],{"class":46},[36,115696,114923],{"class":2443},[36,115698,114926],{"class":42},[36,115700,1071],{"class":46},[36,115702,114931],{"class":42},[36,115704,631],{"class":53},[36,115706,25590],{"class":46},[36,115708,39410],{"class":53},[36,115710,14044],{"class":46},[36,115712,39410],{"class":53},[36,115714,114944],{"class":42},[36,115716,114947],{"class":53},[36,115718,25590],{"class":46},[36,115720,39410],{"class":53},[36,115722,14044],{"class":46},[36,115724,39410],{"class":53},[36,115726,31264],{"class":42},[19,115728,115729,115731],{},[33,115730,70533],{}," 做四件事：",[579,115733,115734,115737,115740,115743],{},[582,115735,115736],{},"设置随机种子。",[582,115738,115739],{},"重置 MuJoCo data。",[582,115741,115742],{},"随机初始化关节角。",[582,115744,115745],{},"返回初始观测和 info。",[19,115747,115748],{},"step：",[26,115750,115752],{"className":28,"code":115751,"language":30,"meta":31,"style":31},"def step(self, action):\n",[33,115753,115754],{"__ignoreMap":31},[36,115755,115756,115758,115760],{"class":38,"line":39},[36,115757,32424],{"class":46},[36,115759,115088],{"class":2443},[36,115761,115091],{"class":42},[19,115763,115764,115766],{},[33,115765,107535],{}," 做六件事：",[579,115768,115769,115772,115778,115781,115784,115787],{},[582,115770,115771],{},"检查并裁剪 action。",[582,115773,115774,115775,28866],{},"写入 ",[33,115776,115777],{},"self.data.ctrl",[582,115779,115780],{},"连续推进若干个 MuJoCo 物理步。",[582,115782,115783],{},"计算新观测。",[582,115785,115786],{},"计算奖励和结束条件。",[582,115788,115789],{},"返回 Gymnasium 标准五元组。",[596,115791,102109],{"id":102109},[26,115793,115795],{"className":28,"code":115794,"language":30,"meta":31,"style":31},"import gymnasium as gym\n",[33,115796,115797],{"__ignoreMap":31},[36,115798,115799,115801,115803,115805],{"class":38,"line":39},[36,115800,30871],{"class":46},[36,115802,114296],{"class":42},[36,115804,31861],{"class":46},[36,115806,114301],{"class":42},[19,115808,115809,115810,115812,115813,115816],{},"导入 Gymnasium，并起别名 ",[33,115811,113941],{},"。后面写 ",[33,115814,115815],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,115818,115820],{"className":28,"code":115819,"language":30,"meta":31,"style":31},"from gymnasium import spaces\n",[33,115821,115822],{"__ignoreMap":31},[36,115823,115824,115826,115828,115830],{"class":38,"line":39},[36,115825,31215],{"class":46},[36,115827,114296],{"class":42},[36,115829,30871],{"class":46},[36,115831,114328],{"class":42},[19,115833,115834,115835,115838],{},"导入空间定义工具。",[33,115836,115837],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,115840,115841],{"className":28,"code":115580,"language":30,"meta":31,"style":31},[33,115842,115843],{"__ignoreMap":31},[36,115844,115845,115847,115849,115851,115853,115855,115857],{"class":38,"line":39},[36,115846,15174],{"class":46},[36,115848,114458],{"class":2443},[36,115850,345],{"class":42},[36,115852,113941],{"class":2443},[36,115854,1171],{"class":42},[36,115856,114467],{"class":2443},[36,115858,31264],{"class":42},[19,115860,115861,115862,115865,115866,115868,115869,101419,115871,115873],{},"定义一个类，名字叫 ",[33,115863,115864],{},"ReacherEnv","。括号里的 ",[33,115867,115815],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,115870,70533],{},[33,115872,107535],{}," 这两个核心方法。",[26,115875,115877],{"className":28,"code":115876,"language":30,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,115878,115879],{"__ignoreMap":31},[36,115880,115881,115884,115886,115888,115890],{"class":38,"line":39},[36,115882,115883],{"class":42},"metadata ",[36,115885,47],{"class":46},[36,115887,4928],{"class":42},[36,115889,114481],{"class":405},[36,115891,114484],{"class":42},[19,115893,115894],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,115896,115898],{"className":28,"code":115897,"language":30,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,115899,115900],{"__ignoreMap":31},[36,115901,115902,115904,115906,115908,115910],{"class":38,"line":39},[36,115903,32424],{"class":46},[36,115905,31282],{"class":53},[36,115907,114497],{"class":42},[36,115909,96157],{"class":53},[36,115911,4219],{"class":42},[19,115913,115914,115916,115917,28866],{},[33,115915,31307],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,115918,115919],{},"env = ReacherEnv()",[26,115921,115923],{"className":28,"code":115922,"language":30,"meta":31,"style":31},"super().__init__()\n",[33,115924,115925],{"__ignoreMap":31},[36,115926,115927,115930,115932,115934],{"class":38,"line":39},[36,115928,115929],{"class":53},"super",[36,115931,17741],{"class":42},[36,115933,31307],{"class":53},[36,115935,2456],{"class":42},[19,115937,115938,115939,115941],{},"调用父类 ",[33,115940,115815],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,115943,115944],{"className":28,"code":115607,"language":30,"meta":31,"style":31},[33,115945,115946,115960],{"__ignoreMap":31},[36,115947,115948,115950,115952,115954,115956,115958],{"class":38,"line":39},[36,115949,31301],{"class":53},[36,115951,114518],{"class":42},[36,115953,47],{"class":46},[36,115955,101813],{"class":42},[36,115957,101715],{"class":53},[36,115959,63],{"class":42},[36,115961,115962,115964,115966,115968,115970,115972],{"class":38,"line":66},[36,115963,31301],{"class":53},[36,115965,114533],{"class":42},[36,115967,47],{"class":46},[36,115969,114538],{"class":42},[36,115971,31301],{"class":53},[36,115973,114543],{"class":42},[19,115975,115976,115977,115979,115980,101419,115983,115986],{},"把 MuJoCo 模型和状态保存到 ",[33,115978,31301],{}," 上。",[33,115981,115982],{},"self.model",[33,115984,115985],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,115988,115989],{"className":28,"code":115649,"language":30,"meta":31,"style":31},[33,115990,115991,116005],{"__ignoreMap":31},[36,115992,115993,115995,115997,115999,116001,116003],{"class":38,"line":39},[36,115994,31301],{"class":53},[36,115996,114554],{"class":42},[36,115998,47],{"class":46},[36,116000,114559],{"class":42},[36,116002,90031],{"class":53},[36,116004,63],{"class":42},[36,116006,116007,116009,116011,116013,116015,116017],{"class":38,"line":66},[36,116008,31301],{"class":53},[36,116010,114575],{"class":42},[36,116012,47],{"class":46},[36,116014,114559],{"class":42},[36,116016,90031],{"class":53},[36,116018,63],{"class":42},[19,116020,116021,116022,101419,116025,116028],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,116023,116024],{},"_get_obs",[33,116026,116027],{},"_get_reward"," 里就不用每次按名字查找。",[26,116030,116032],{"className":28,"code":116031,"language":30,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,116033,116034,116044,116054],{"__ignoreMap":31},[36,116035,116036,116038,116040,116042],{"class":38,"line":39},[36,116037,31301],{"class":53},[36,116039,114268],{"class":42},[36,116041,47],{"class":46},[36,116043,54904],{"class":53},[36,116045,116046,116048,116050,116052],{"class":38,"line":66},[36,116047,31301],{"class":53},[36,116049,114647],{"class":42},[36,116051,47],{"class":46},[36,116053,114652],{"class":53},[36,116055,116056,116058,116060,116062],{"class":38,"line":73},[36,116057,31301],{"class":53},[36,116059,114107],{"class":42},[36,116061,47],{"class":46},[36,116063,47810],{"class":53},[19,116065,116066,116069,116070,116073,116074,116077],{},[33,116067,116068],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,116071,116072],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,116075,116076],{},"steps"," 记录当前 episode 已经走了多少步。",[26,116079,116080],{"className":28,"code":114146,"language":30,"meta":31,"style":31},[33,116081,116082],{"__ignoreMap":31},[36,116083,116084,116086,116088,116090,116092,116094,116096,116098,116100,116102,116104,116106,116108,116110,116112,116114,116116,116118,116120,116122],{"class":38,"line":39},[36,116085,31301],{"class":53},[36,116087,114155],{"class":42},[36,116089,47],{"class":46},[36,116091,114160],{"class":42},[36,116093,114163],{"class":5696},[36,116095,114166],{"class":46},[36,116097,102804],{"class":53},[36,116099,12915],{"class":42},[36,116101,114173],{"class":5696},[36,116103,47],{"class":46},[36,116105,102804],{"class":53},[36,116107,12915],{"class":42},[36,116109,527],{"class":5696},[36,116111,47],{"class":46},[36,116113,345],{"class":42},[36,116115,96],{"class":53},[36,116117,114190],{"class":42},[36,116119,93974],{"class":5696},[36,116121,47],{"class":46},[36,116123,114197],{"class":42},[19,116125,116126,116127,116130,116131,101419,116134,116137],{},"定义动作空间。",[33,116128,116129],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,116132,116133],{},"low=-1.0",[33,116135,116136],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,116139,116140],{"className":28,"code":114207,"language":30,"meta":31,"style":31},[33,116141,116142],{"__ignoreMap":31},[36,116143,116144,116146,116148,116150,116152,116154,116156,116158,116160,116162,116164,116166,116168,116170,116172,116174,116176,116178],{"class":38,"line":39},[36,116145,31301],{"class":53},[36,116147,114216],{"class":42},[36,116149,47],{"class":46},[36,116151,114160],{"class":42},[36,116153,114163],{"class":5696},[36,116155,114166],{"class":46},[36,116157,114227],{"class":42},[36,116159,114173],{"class":5696},[36,116161,47],{"class":46},[36,116163,114227],{"class":42},[36,116165,527],{"class":5696},[36,116167,47],{"class":46},[36,116169,345],{"class":42},[36,116171,1062],{"class":53},[36,116173,114190],{"class":42},[36,116175,93974],{"class":5696},[36,116177,47],{"class":46},[36,116179,114197],{"class":42},[19,116181,116182,116183,116186,116187,116190],{},"定义观测空间。",[33,116184,116185],{},"shape=(10,)"," 表示观测是 10 个数。",[33,116188,116189],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,116192,116194],{"className":28,"code":116193,"language":30,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,116195,116196],{"__ignoreMap":31},[36,116197,116198,116200,116202],{"class":38,"line":39},[36,116199,32424],{"class":46},[36,116201,114757],{"class":2443},[36,116203,114760],{"class":42},[19,116205,116206,116207,116209],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,116208,1605],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,116211,116213],{"className":28,"code":116212,"language":30,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[33,116214,116215,116229],{"__ignoreMap":31},[36,116216,116217,116219,116221,116223,116225,116227],{"class":38,"line":39},[36,116218,111969],{"class":42},[36,116220,47],{"class":46},[36,116222,39350],{"class":53},[36,116224,114771],{"class":42},[36,116226,31301],{"class":53},[36,116228,114776],{"class":42},[36,116230,116231,116233,116235,116237,116239,116241],{"class":38,"line":66},[36,116232,111979],{"class":42},[36,116234,47],{"class":46},[36,116236,39350],{"class":53},[36,116238,114771],{"class":42},[36,116240,31301],{"class":53},[36,116242,114791],{"class":42},[19,116244,116245],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,116247,116249],{"className":28,"code":116248,"language":30,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[33,116250,116251,116267],{"__ignoreMap":31},[36,116252,116253,116255,116257,116259,116261,116263,116265],{"class":38,"line":39},[36,116254,111255],{"class":42},[36,116256,47],{"class":46},[36,116258,114800],{"class":42},[36,116260,31301],{"class":53},[36,116262,114805],{"class":42},[36,116264,31301],{"class":53},[36,116266,114810],{"class":42},[36,116268,116269,116271],{"class":38,"line":66},[36,116270,17526],{"class":46},[36,116272,114817],{"class":42},[19,116274,116275,116276,116279,116280,116282],{},"拼接观测，并转换成 ",[33,116277,116278],{},"float32","。很多强化学习库默认使用 ",[33,116281,116278],{},"，所以这里主动转换。",[26,116284,116285],{"className":28,"code":115688,"language":30,"meta":31,"style":31},[33,116286,116287],{"__ignoreMap":31},[36,116288,116289,116291,116293,116295,116297,116299,116301,116303,116305,116307,116309,116311,116313,116315,116317,116319,116321],{"class":38,"line":39},[36,116290,32424],{"class":46},[36,116292,114923],{"class":2443},[36,116294,114926],{"class":42},[36,116296,1071],{"class":46},[36,116298,114931],{"class":42},[36,116300,631],{"class":53},[36,116302,25590],{"class":46},[36,116304,39410],{"class":53},[36,116306,14044],{"class":46},[36,116308,39410],{"class":53},[36,116310,114944],{"class":42},[36,116312,114947],{"class":53},[36,116314,25590],{"class":46},[36,116316,39410],{"class":53},[36,116318,14044],{"class":46},[36,116320,39410],{"class":53},[36,116322,31264],{"class":42},[19,116324,116325,116326,116328,116329,116332],{},"定义 reset。",[33,116327,114967],{}," 用来控制随机数，保证实验可以复现。",[33,116330,116331],{},"options"," 用来接收额外配置，本章暂时不用。",[26,116334,116336],{"className":28,"code":116335,"language":30,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,116337,116338],{"__ignoreMap":31},[36,116339,116340,116342,116344,116346,116348],{"class":38,"line":39},[36,116341,115929],{"class":53},[36,116343,114964],{"class":42},[36,116345,114967],{"class":5696},[36,116347,47],{"class":46},[36,116349,114972],{"class":42},[19,116351,116352,116353,116356],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,116354,116355],{},"self.np_random"," 生成可复现的随机数。",[26,116358,116360],{"className":28,"code":116359,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,116361,116362],{"__ignoreMap":31},[36,116363,116364,116367,116369,116371,116373],{"class":38,"line":39},[36,116365,116366],{"class":42},"mujoco.mj_resetData(",[36,116368,31301],{"class":53},[36,116370,114982],{"class":42},[36,116372,31301],{"class":53},[36,116374,114987],{"class":42},[19,116376,116377],{},"把 MuJoCo 状态重置到默认状态。",[26,116379,116381],{"className":28,"code":116380,"language":30,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[33,116382,116383],{"__ignoreMap":31},[36,116384,116385,116387,116389,116391,116393,116395,116397,116399,116401,116403,116405,116407,116409,116411,116413,116415,116417],{"class":38,"line":39},[36,116386,31301],{"class":53},[36,116388,114998],{"class":42},[36,116390,47],{"class":46},[36,116392,39350],{"class":53},[36,116394,115005],{"class":42},[36,116396,114163],{"class":5696},[36,116398,114166],{"class":46},[36,116400,86687],{"class":53},[36,116402,12915],{"class":42},[36,116404,114173],{"class":5696},[36,116406,47],{"class":46},[36,116408,86687],{"class":53},[36,116410,12915],{"class":42},[36,116412,531],{"class":5696},[36,116414,47],{"class":46},[36,116416,31301],{"class":53},[36,116418,115030],{"class":42},[19,116420,115742,116421,116424,116425,116428,116429,116431],{},[33,116422,116423],{},"[:]"," 表示修改整个数组。",[33,116426,116427],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,116430,102551],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,116433,116435],{"className":28,"code":116434,"language":30,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,116436,116437],{"__ignoreMap":31},[36,116438,116439,116441,116443,116445],{"class":38,"line":39},[36,116440,31301],{"class":53},[36,116442,115037],{"class":42},[36,116444,47],{"class":46},[36,116446,105162],{"class":53},[19,116448,116449],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,116451,116453],{"className":28,"code":116452,"language":30,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,116454,116455,116465],{"__ignoreMap":31},[36,116456,116457,116459,116461,116463],{"class":38,"line":39},[36,116458,31301],{"class":53},[36,116460,114107],{"class":42},[36,116462,47],{"class":46},[36,116464,47810],{"class":53},[36,116466,116467,116469,116471],{"class":38,"line":66},[36,116468,17526],{"class":46},[36,116470,39350],{"class":53},[36,116472,115077],{"class":42},[19,116474,116475],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,116477,116478],{"className":28,"code":115751,"language":30,"meta":31,"style":31},[33,116479,116480],{"__ignoreMap":31},[36,116481,116482,116484,116486],{"class":38,"line":39},[36,116483,32424],{"class":46},[36,116485,115088],{"class":2443},[36,116487,115091],{"class":42},[19,116489,116490],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,116492,116494],{"className":28,"code":116493,"language":30,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,116495,116496],{"__ignoreMap":31},[36,116497,116498,116500,116502,116504,116506,116508],{"class":38,"line":39},[36,116499,107843],{"class":42},[36,116501,47],{"class":46},[36,116503,115100],{"class":42},[36,116505,93974],{"class":5696},[36,116507,47],{"class":46},[36,116509,114197],{"class":42},[19,116511,116512,116513,28866],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,116514,116278],{},[26,116516,116518],{"className":28,"code":116517,"language":30,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,116519,116520],{"__ignoreMap":31},[36,116521,116522,116524,116526,116528,116530,116532,116534],{"class":38,"line":39},[36,116523,107843],{"class":42},[36,116525,47],{"class":46},[36,116527,107848],{"class":42},[36,116529,31301],{"class":53},[36,116531,115119],{"class":42},[36,116533,31301],{"class":53},[36,116535,115124],{"class":42},[19,116537,116538],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,116540,116542],{"className":28,"code":116541,"language":30,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,116543,116544],{"__ignoreMap":31},[36,116545,116546,116548,116550,116552],{"class":38,"line":39},[36,116547,31301],{"class":53},[36,116549,115135],{"class":42},[36,116551,47],{"class":46},[36,116553,107871],{"class":42},[19,116555,116556],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,116558,116560],{"className":28,"code":116559,"language":30,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,116561,116562,116578],{"__ignoreMap":31},[36,116563,116564,116566,116568,116570,116572,116574,116576],{"class":38,"line":39},[36,116565,3505],{"class":46},[36,116567,101902],{"class":42},[36,116569,26524],{"class":46},[36,116571,32920],{"class":53},[36,116573,345],{"class":42},[36,116575,31301],{"class":53},[36,116577,115156],{"class":42},[36,116579,116580,116583,116585,116587,116589],{"class":38,"line":66},[36,116581,116582],{"class":42},"    mujoco.mj_step(",[36,116584,31301],{"class":53},[36,116586,114982],{"class":42},[36,116588,31301],{"class":53},[36,116590,114987],{"class":42},[19,116592,116593,116594,116597,116598,116600,116601,28866],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,116595,116596],{},"frame_skip=5","，所以外部调用一次 ",[33,116599,114278],{},"，内部实际执行 5 次 ",[33,116602,101616],{},[26,116604,116606],{"className":28,"code":116605,"language":30,"meta":31,"style":31},"self.steps += 1\n",[33,116607,116608],{"__ignoreMap":31},[36,116609,116610,116612,116614,116616],{"class":38,"line":39},[36,116611,31301],{"class":53},[36,116613,114107],{"class":42},[36,116615,9957],{"class":46},[36,116617,56176],{"class":53},[19,116619,116620],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,116622,116624],{"className":28,"code":116623,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,116625,116626,116636],{"__ignoreMap":31},[36,116627,116628,116630,116632,116634],{"class":38,"line":39},[36,116629,111255],{"class":42},[36,116631,47],{"class":46},[36,116633,39350],{"class":53},[36,116635,115198],{"class":42},[36,116637,116638,116640,116642,116644],{"class":38,"line":66},[36,116639,111406],{"class":42},[36,116641,47],{"class":46},[36,116643,39350],{"class":53},[36,116645,115209],{"class":42},[19,116647,116648],{},"计算新的观测和奖励。",[26,116650,116652],{"className":28,"code":116651,"language":30,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,116653,116654],{"__ignoreMap":31},[36,116655,116656,116658,116660,116662,116664,116666],{"class":38,"line":39},[36,116657,111997],{"class":42},[36,116659,47],{"class":46},[36,116661,110198],{"class":53},[36,116663,115252],{"class":42},[36,116665,173],{"class":46},[36,116667,115257],{"class":42},[19,116669,116670],{},"计算末端到目标的距离，并转换成 Python float。",[26,116672,116673],{"className":28,"code":114078,"language":30,"meta":31,"style":31},[33,116674,116675,116687],{"__ignoreMap":31},[36,116676,116677,116679,116681,116683,116685],{"class":38,"line":39},[36,116678,114085],{"class":42},[36,116680,47],{"class":46},[36,116682,114090],{"class":42},[36,116684,1523],{"class":46},[36,116686,114095],{"class":53},[36,116688,116689,116691,116693,116695,116697,116699,116701],{"class":38,"line":66},[36,116690,114100],{"class":42},[36,116692,47],{"class":46},[36,116694,39350],{"class":53},[36,116696,114107],{"class":42},[36,116698,2190],{"class":46},[36,116700,39350],{"class":53},[36,116702,114114],{"class":42},[19,116704,116705],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,116707,116709],{"className":28,"code":116708,"language":30,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,116710,116711,116724],{"__ignoreMap":31},[36,116712,116713,116716,116718,116720,116722],{"class":38,"line":39},[36,116714,116715],{"class":42},"info ",[36,116717,47],{"class":46},[36,116719,4928],{"class":42},[36,116721,115303],{"class":405},[36,116723,115306],{"class":42},[36,116725,116726,116728],{"class":38,"line":66},[36,116727,17526],{"class":46},[36,116729,115313],{"class":42},[19,116731,116732,116735],{},[33,116733,116734],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,116737,116739],{"className":28,"code":116738,"language":30,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,116740,116741,116750],{"__ignoreMap":31},[36,116742,116743,116746,116748],{"class":38,"line":39},[36,116744,116745],{"class":42},"env ",[36,116747,47],{"class":46},[36,116749,115343],{"class":42},[36,116751,116752,116754,116756,116758,116760,116762,116764],{"class":38,"line":66},[36,116753,113801],{"class":42},[36,116755,47],{"class":46},[36,116757,115353],{"class":42},[36,116759,114967],{"class":5696},[36,116761,47],{"class":46},[36,116763,812],{"class":53},[36,116765,63],{"class":42},[19,116767,116768,116769,116772],{},"创建环境并重置。",[33,116770,116771],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,116774,116776],{"className":28,"code":116775,"language":30,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,116777,116778],{"__ignoreMap":31},[36,116779,116780,116782,116784],{"class":38,"line":39},[36,116781,107843],{"class":42},[36,116783,47],{"class":46},[36,116785,115422],{"class":42},[19,116787,116788],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116790,102717],{"id":102716},[19,116792,105885],{},[26,116794,116797],{"className":116795,"code":116796,"language":5667,"meta":31},[5665],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,116798,116796],{"__ignoreMap":31},[19,116800,116801],{},"这个环境已经具备强化学习环境的基本结构。",[19,116803,116804],{},"主函数里使用随机动作：",[26,116806,116807],{"className":28,"code":116775,"language":30,"meta":31,"style":31},[33,116808,116809],{"__ignoreMap":31},[36,116810,116811,116813,116815],{"class":38,"line":39},[36,116812,107843],{"class":42},[36,116814,47],{"class":46},[36,116816,115422],{"class":42},[19,116818,116819],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116821,102749],{"id":102748},[579,116823,116824,116827,116833,116842,116851,116860,116866],{},[582,116825,116826],{},"运行程序。",[582,116828,116829,116830,28866],{},"确认 ",[33,116831,116832],{},"obs.shape == (10,)",[582,116834,111582,116835,116838,116839,28866],{},[33,116836,116837],{},"env.action_space","，应类似 ",[33,116840,116841],{},"Box(-1.0, 1.0, (2,), float32)",[582,116843,105986,116844,116847,116848,28866],{},[33,116845,116846],{},"self.max_steps = 10","，确认环境会更快 ",[33,116849,116850],{},"truncated=True",[582,116852,102812,116853,102815,116856,116859],{},[33,116854,116855],{},"terminated = dist \u003C 0.05",[33,116857,116858],{},"dist \u003C 0.2","，观察是否更容易结束。",[582,116861,102812,116862,116865],{},[33,116863,116864],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[582,116867,116868,116869,116871,116872,116875],{},"在 ",[33,116870,116734],{}," 里加入 ",[33,116873,116874],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116877,102854],{"id":102853},[596,116879,116881],{"id":116880},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116883,116884,116885,116887],{},"Gymnasium 的 ",[33,116886,107535],{}," 返回 5 个值:",[26,116889,116891],{"className":28,"code":116890,"language":30,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,116892,116893],{"__ignoreMap":31},[36,116894,116895],{"class":38,"line":39},[36,116896,116890],{"class":42},[19,116898,116899],{},"不是旧 Gym 的 4 个值。",[596,116901,116903,116906],{"id":116902},"datactrl-action-维度错误",[33,116904,116905],{},"data.ctrl[:] = action"," 维度错误",[19,116908,102924],{},[26,116910,116912],{"className":28,"code":116911,"language":30,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,116913,116914,116925],{"__ignoreMap":31},[36,116915,116916,116918,116920,116922],{"class":38,"line":39},[36,116917,30894],{"class":53},[36,116919,345],{"class":42},[36,116921,31301],{"class":53},[36,116923,116924],{"class":42},".model.nu)\n",[36,116926,116927,116929],{"class":38,"line":66},[36,116928,30894],{"class":53},[36,116930,116931],{"class":42},"(action.shape)\n",[19,116933,116934],{},"两者必须匹配。",[596,116936,116938],{"id":116937},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116940,102863],{},[26,116942,116944],{"className":28,"code":116943,"language":30,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,116945,116946],{"__ignoreMap":31},[36,116947,116948,116951,116953,116955,116957],{"class":38,"line":39},[36,116949,116950],{"class":42},"mujoco.mj_forward(",[36,116952,31301],{"class":53},[36,116954,114982],{"class":42},[36,116956,31301],{"class":53},[36,116958,114987],{"class":42},[596,116960,116962,116964],{"id":116961},"observation_space-维度和-obs-不一致",[33,116963,114001],{}," 维度和 obs 不一致",[19,116966,102976],{},[26,116968,116970],{"className":28,"code":116969,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,116971,116972,116982,116989],{"__ignoreMap":31},[36,116973,116974,116976,116978,116980],{"class":38,"line":39},[36,116975,111255],{"class":42},[36,116977,47],{"class":46},[36,116979,39350],{"class":53},[36,116981,115198],{"class":42},[36,116983,116984,116986],{"class":38,"line":66},[36,116985,30894],{"class":53},[36,116987,116988],{"class":42},"(obs.shape)\n",[36,116990,116991,116993,116995,116997],{"class":38,"line":73},[36,116992,30894],{"class":53},[36,116994,345],{"class":42},[36,116996,31301],{"class":53},[36,116998,116999],{"class":42},".observation_space.shape)\n",[19,117001,117002],{},"两者必须一致。本章观测是：",[26,117004,117007],{"className":117005,"code":117006,"language":5667,"meta":31},[5665],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,117008,117006],{"__ignoreMap":31},[596,117010,117012],{"id":117011},"action-超过范围","action 超过范围",[19,117014,117015],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,117017,117018],{"className":28,"code":116517,"language":30,"meta":31,"style":31},[33,117019,117020],{"__ignoreMap":31},[36,117021,117022,117024,117026,117028,117030,117032,117034],{"class":38,"line":39},[36,117023,107843],{"class":42},[36,117025,47],{"class":46},[36,117027,107848],{"class":42},[36,117029,31301],{"class":53},[36,117031,115119],{"class":42},[36,117033,31301],{"class":53},[36,117035,115124],{"class":42},[19,117037,117038,117039,28866],{},"这能避免无效动作直接写入 ",[33,117040,101477],{},[596,117042,117044],{"id":117043},"忘记返回-info","忘记返回 info",[19,117046,116884,117047,101419,117049,117051],{},[33,117048,70533],{},[33,117050,107535],{}," 都会返回 info：",[26,117053,117054],{"className":28,"code":113794,"language":30,"meta":31,"style":31},[33,117055,117056,117064],{"__ignoreMap":31},[36,117057,117058,117060,117062],{"class":38,"line":39},[36,117059,113801],{"class":42},[36,117061,47],{"class":46},[36,117063,113806],{"class":42},[36,117065,117066,117068,117070],{"class":38,"line":66},[36,117067,113811],{"class":42},[36,117069,47],{"class":46},[36,117071,113816],{"class":42},[19,117073,117074,117075,28866],{},"即使暂时没有额外信息，也返回 ",[33,117076,32936],{},[14,117078,117080],{"id":117079},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117082,117083],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[579,117085,117086,117089,117092,117095,117098,117101],{},[582,117087,117088],{},"更稳定的 reward。",[582,117090,117091],{},"合理的 episode 长度。",[582,117093,117094],{},"可重复的随机目标采样。",[582,117096,117097],{},"render 接口。",[582,117099,117100],{},"环境注册代码。",[582,117102,117103],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117105,117106],{},"如果只是自己写训练循环，最小形式是：",[26,117108,117110],{"className":28,"code":117109,"language":30,"meta":31,"style":31},"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",[33,117111,117112,117120,117136,117140,117156,117165,117174,117184],{"__ignoreMap":31},[36,117113,117114,117116,117118],{"class":38,"line":39},[36,117115,116745],{"class":42},[36,117117,47],{"class":46},[36,117119,115343],{"class":42},[36,117121,117122,117124,117126,117128,117130,117132,117134],{"class":38,"line":66},[36,117123,113801],{"class":42},[36,117125,47],{"class":46},[36,117127,115353],{"class":42},[36,117129,114967],{"class":5696},[36,117131,47],{"class":46},[36,117133,812],{"class":53},[36,117135,63],{"class":42},[36,117137,117138],{"class":38,"line":73},[36,117139,2880],{"emptyLinePlaceholder":553},[36,117141,117142,117144,117146,117148,117150,117152,117154],{"class":38,"line":79},[36,117143,3505],{"class":46},[36,117145,101902],{"class":42},[36,117147,26524],{"class":46},[36,117149,32920],{"class":53},[36,117151,345],{"class":42},[36,117153,6890],{"class":53},[36,117155,31264],{"class":42},[36,117157,117158,117161,117163],{"class":38,"line":85},[36,117159,117160],{"class":42},"    action ",[36,117162,47],{"class":46},[36,117164,115422],{"class":42},[36,117166,117167,117170,117172],{"class":38,"line":419},[36,117168,117169],{"class":42},"    obs, reward, terminated, truncated, info ",[36,117171,47],{"class":46},[36,117173,113816],{"class":42},[36,117175,117176,117178,117180,117182],{"class":38,"line":425},[36,117177,3581],{"class":46},[36,117179,115488],{"class":42},[36,117181,115491],{"class":46},[36,117183,115494],{"class":42},[36,117185,117186,117189,117191],{"class":38,"line":431},[36,117187,117188],{"class":42},"        obs, info ",[36,117190,47],{"class":46},[36,117192,113806],{"class":42},[14,117194,117196],{"id":117195},"_9本章小结","9.本章小结",[19,117198,117199],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,117201,117204],{"className":117202,"code":117203,"language":5667,"meta":31},[5665],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,117205,117203],{"__ignoreMap":31},[19,117207,117208],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[539,117210,117211],{},"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":31,"searchDepth":66,"depth":66,"links":117213},[117214,117215,117216,117223,117227,117228,117229,117239,117240],{"id":101047,"depth":66,"text":101048},{"id":101170,"depth":66,"text":101171},{"id":101445,"depth":66,"text":101446,"children":117217},[117218,117220,117222],{"id":114025,"depth":73,"text":117219},"terminated 和 truncated 的区别",{"id":114128,"depth":73,"text":117221},"observation_space 和 action_space",{"id":114255,"depth":73,"text":114256},{"id":101653,"depth":66,"text":101654,"children":117224},[117225,117226],{"id":101973,"depth":73,"text":101973},{"id":102109,"depth":73,"text":102109},{"id":102716,"depth":66,"text":102717},{"id":102748,"depth":66,"text":102749},{"id":102853,"depth":66,"text":102854,"children":117230},[117231,117232,117234,117235,117237,117238],{"id":116880,"depth":73,"text":116881},{"id":116902,"depth":73,"text":117233},"data.ctrl[:] = action 维度错误",{"id":116937,"depth":73,"text":116938},{"id":116961,"depth":73,"text":117236},"observation_space 维度和 obs 不一致",{"id":117011,"depth":73,"text":117012},{"id":117043,"depth":73,"text":117044},{"id":117079,"depth":66,"text":117080},{"id":117195,"depth":66,"text":117196},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113778,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117247,"title":117248,"body":117249,"description":117672,"extension":551,"meta":117673,"navigation":553,"path":117674,"seo":117675,"stem":117676,"__hash__":117677},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117250,"toc":117662},[117251,117255,117258,117261,117281,117287,117293,117303,117306,117309,117329,117332,117336,117339,117345,117348,117362,117365,117368,117442,117445,117451,117454,117477,117480,117530,117533,117539,117542,117545,117548,117567,117570,117576,117579,117582,117585,117605,117608,117611,117614,117659],[10,117252,117254],{"id":117253},"mujoco-学习","MuJoCo 学习",[19,117256,117257],{},"初版",[19,117259,117260],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[579,117262,117263,117266,117269,117278],{},[582,117264,117265],{},"MuJoCo 模型文件在描述什么。",[582,117267,117268],{},"Python 代码怎样读取和推进仿真。",[582,117270,117271,833,117273,833,117275,117277],{},[33,117272,104431],{},[33,117274,104761],{},[33,117276,104764],{}," 这些数组为什么重要。",[582,117279,117280],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117282,117283,117284,117286],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,117285,101428],{}," 官方 Python bindings。",[19,117288,117289,117290,117292],{},"注意：本文禁止使用 ",[33,117291,101413],{},"。所有示例均使用：",[26,117294,117295],{"className":28,"code":101979,"language":30,"meta":31,"style":31},[33,117296,117297],{"__ignoreMap":31},[36,117298,117299,117301],{"class":38,"line":39},[36,117300,30871],{"class":46},[36,117302,101702],{"class":42},[14,117304,117305],{"id":117305},"适合谁阅读",[19,117307,117308],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[579,117310,117311,117314,117317,117320],{},[582,117312,117313],{},"没学过 MuJoCo，只会一点 Python。",[582,117315,117316],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[582,117318,117319],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[582,117321,117322,117323,117325,117326,117328],{},"以前接触过 ",[33,117324,101413],{},"，现在想迁移到官方 ",[33,117327,101422],{}," Python bindings。",[19,117330,117331],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117333,117335],{"id":117334},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117337,117338],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,117340,117343],{"className":117341,"code":117342,"language":5667,"meta":31},[5665],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,117344,117342],{"__ignoreMap":31},[19,117346,117347],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[579,117349,117350,117353,117356,117359],{},[582,117351,117352],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[582,117354,117355],{},"快速测试控制算法，不必一开始就上真实机器人。",[582,117357,117358],{},"生成强化学习环境。",[582,117360,117361],{},"采集状态、动作、图像、奖励等训练数据。",[14,117363,117364],{"id":117364},"学习前的心智模型",[19,117366,117367],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[758,117369,117370,117382],{},[761,117371,117372],{},[764,117373,117374,117377,117380],{},[767,117375,117376],{"align":24216},"部分",[767,117378,117379],{"align":24216},"负责什么",[767,117381,21667],{"align":24216},[805,117383,117384,117395,117407,117419,117431],{},[764,117385,117386,117389,117392],{},[810,117387,117388],{"align":24216},"MJCF XML",[810,117390,117391],{"align":24216},"定义世界和机器人结构",[810,117393,117394],{"align":24216},"地面、盒子、关节、电机、摄像头",[764,117396,117397,117401,117404],{},[810,117398,117399],{"align":24216},[33,117400,101110],{},[810,117402,117403],{"align":24216},"编译后的静态模型",[810,117405,117406],{"align":24216},"有几个关节、有几个电机、时间步长是多少",[764,117408,117409,117413,117416],{},[810,117410,117411],{"align":24216},[33,117412,101120],{},[810,117414,117415],{"align":24216},"运行中的动态状态",[810,117417,117418],{"align":24216},"当前时间、位置、速度、电机输入",[764,117420,117421,117425,117428],{},[810,117422,117423],{"align":24216},[33,117424,101616],{},[810,117426,117427],{"align":24216},"推进一步物理仿真",[810,117429,117430],{"align":24216},"根据重力、力、碰撞更新状态",[764,117432,117433,117436,117439],{},[810,117434,117435],{"align":24216},"Viewer \u002F Renderer",[810,117437,117438],{"align":24216},"把仿真显示出来",[810,117440,117441],{"align":24216},"打开窗口或保存图片",[19,117443,117444],{},"一句话总结：",[26,117446,117449],{"className":117447,"code":117448,"language":5667,"meta":31},[5665],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,117450,117448],{"__ignoreMap":31},[19,117452,117453],{},"参考来源：",[1620,117455,117456,117463,117470],{},[582,117457,117458,117459],{},"MuJoCo Python 官方文档：",[43,117460,117461],{"href":117461,"rel":117462},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24345],[582,117464,117465,117466],{},"MuJoCo XML Reference：",[43,117467,117468],{"href":117468,"rel":117469},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24345],[582,117471,117472,117473],{},"MuJoCo Overview：",[43,117474,117475],{"href":117475,"rel":117476},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24345],[14,117478,117479],{"id":117479},"章节目录",[579,117481,117482,117488,117494,117500,117506,117512,117518,117524],{},[582,117483,117484],{},[43,117485,117487],{"href":117486},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[582,117489,117490],{},[43,117491,117493],{"href":117492},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[582,117495,117496],{},[43,117497,117499],{"href":117498},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[582,117501,117502],{},[43,117503,117505],{"href":117504},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[582,117507,117508],{},[43,117509,117511],{"href":117510},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[582,117513,117514],{},[43,117515,117517],{"href":117516},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[582,117519,117520],{},[43,117521,117523],{"href":117522},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[582,117525,117526],{},[43,117527,117529],{"href":117528},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117531,117532],{"id":117532},"推荐学习路线",[26,117534,117537],{"className":117535,"code":117536,"language":5667,"meta":31},[5665],"环境安装\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",[33,117538,117536],{"__ignoreMap":31},[19,117540,117541],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117543,117544],{"id":117544},"建议的目录结构",[19,117546,117547],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,117549,117551],{"className":24302,"code":117550,"language":24304,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,117552,117553,117561],{"__ignoreMap":31},[36,117554,117555,117557,117559],{"class":38,"line":39},[36,117556,101667],{"class":2443},[36,117558,29697],{"class":53},[36,117560,101672],{"class":405},[36,117562,117563,117565],{"class":38,"line":66},[36,117564,101677],{"class":53},[36,117566,101672],{"class":405},[19,117568,117569],{},"每一章的代码都单独保存：",[26,117571,117574],{"className":117572,"code":117573,"language":5667,"meta":31},[5665],"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",[33,117575,117573],{"__ignoreMap":31},[19,117577,117578],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117580,117581],{"id":117581},"学习方法",[19,117583,117584],{},"每章建议按这个顺序操作：",[579,117586,117587,117590,117593,117596,117599,117602],{},[582,117588,117589],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[582,117591,117592],{},"复制最小可运行代码，保存成指定文件。",[582,117594,117595],{},"运行代码，确认没有报错。",[582,117597,117598],{},"对照“运行结果说明”理解输出。",[582,117600,117601],{},"做“验证步骤”，主动改一两个参数。",[582,117603,117604],{},"遇到报错先看“常见错误与解决方案”。",[19,117606,117607],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117609,117610],{"id":117610},"全局排错顺序",[19,117612,117613],{},"遇到问题时，按下面顺序查：",[579,117615,117616,117622,117628,117633,117636,117639,117646,117656],{},[582,117617,117618,117619],{},"Python 环境是否激活：",[33,117620,117621],{},"which python",[582,117623,117624,117625],{},"MuJoCo 是否能导入：",[33,117626,117627],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[582,117629,117630,117631],{},"是否误装了 ",[33,117632,101413],{},[582,117634,117635],{},"XML 标签是否闭合、属性是否拼写正确",[582,117637,117638],{},"actuator 引用的 joint 名字是否存在",[582,117640,117641,117643,117644],{},[33,117642,101477],{}," 的长度是否等于 ",[33,117645,102559],{},[582,117647,105986,117648,83016,117650,117652,117653],{},[33,117649,104431],{},[33,117651,104761],{}," 后是否调用了 ",[33,117654,117655],{},"mujoco.mj_forward",[582,117657,117658],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[539,117660,117661],{},"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":31,"searchDepth":66,"depth":66,"links":117663},[117664,117665,117666,117667,117668,117669,117670,117671],{"id":117305,"depth":66,"text":117305},{"id":117334,"depth":66,"text":117335},{"id":117364,"depth":66,"text":117364},{"id":117479,"depth":66,"text":117479},{"id":117532,"depth":66,"text":117532},{"id":117544,"depth":66,"text":117544},{"id":117581,"depth":66,"text":117581},{"id":117610,"depth":66,"text":117610},"仿真搭建。",{"category":23858},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117248,"description":117672},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117679,"title":117680,"body":117681,"description":550,"extension":551,"meta":118136,"navigation":553,"path":118137,"seo":118138,"stem":118139,"__hash__":118140},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117682,"toc":118134},[117683,117686,117689,117695,118131],[10,117684,117680],{"id":117685},"_1-最常用的基本操作更新",[19,117687,117688],{},"装linux系统教程：",[19,117690,117691],{},[43,117692,117693],{"href":117693,"rel":117694},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24345],[26,117696,117700],{"className":117697,"code":117698,"language":117699,"meta":31,"style":31},"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",[33,117701,117702,117707,117712,117721,117726,117735,117740,117760,117765,117776,117781,117790,117795,117823,117828,117847,117852,117871,117875,117880,117896,117900,117905,117935,117939,117944,117960,117964,117969,117984,117988,117993,118009,118013,118018,118030,118042,118046,118051,118068,118072,118077,118095,118099,118104,118113,118117,118122],{"__ignoreMap":31},[36,117703,117704],{"class":38,"line":39},[36,117705,117706],{"class":69},"#更新相关的知识\n",[36,117708,117709],{"class":38,"line":66},[36,117710,117711],{"class":69},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,117713,117714,117716,117719],{"class":38,"line":73},[36,117715,25057],{"class":2443},[36,117717,117718],{"class":405}," apt",[36,117720,26723],{"class":405},[36,117722,117723],{"class":38,"line":79},[36,117724,117725],{"class":69},"# 升级所有可更新的软件包（不删除旧包）\n",[36,117727,117728,117730,117732],{"class":38,"line":85},[36,117729,25057],{"class":2443},[36,117731,117718],{"class":405},[36,117733,117734],{"class":405}," upgrade\n",[36,117736,117737],{"class":38,"line":419},[36,117738,117739],{"class":69},"#更新和升级软件包\n",[36,117741,117742,117744,117746,117749,117751,117753,117755,117758],{"class":38,"line":425},[36,117743,25057],{"class":2443},[36,117745,117718],{"class":405},[36,117747,117748],{"class":405}," update",[36,117750,26671],{"class":42},[36,117752,25057],{"class":2443},[36,117754,117718],{"class":405},[36,117756,117757],{"class":405}," upgrade",[36,117759,101382],{"class":53},[36,117761,117762],{"class":38,"line":431},[36,117763,117764],{"class":69},"#列出可更新的软件包及版本信息\n",[36,117766,117767,117770,117773],{"class":38,"line":437},[36,117768,117769],{"class":2443},"apt",[36,117771,117772],{"class":405}," list",[36,117774,117775],{"class":53}," --upgradable\n",[36,117777,117778],{"class":38,"line":443},[36,117779,117780],{"class":69},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,117782,117783,117785,117787],{"class":38,"line":2092},[36,117784,25057],{"class":2443},[36,117786,117718],{"class":405},[36,117788,117789],{"class":405}," full-upgrade\n",[36,117791,117792],{"class":38,"line":2097},[36,117793,117794],{"class":69},"#设置指定版本\n",[36,117796,117797,117799,117801,117803,117805,117808,117810,117812,117814,117816,117819,117821],{"class":38,"line":2103},[36,117798,25057],{"class":2443},[36,117800,117718],{"class":405},[36,117802,24314],{"class":405},[36,117804,29383],{"class":46},[36,117806,117807],{"class":405},"package_nam",[36,117809,697],{"class":42},[36,117811,1573],{"class":46},[36,117813,47],{"class":405},[36,117815,1523],{"class":46},[36,117817,117818],{"class":405},"version_numbe",[36,117820,1283],{"class":42},[36,117822,51784],{"class":46},[36,117824,117825],{"class":38,"line":2108},[36,117826,117827],{"class":69},"#只安装软件包不升级\n",[36,117829,117830,117832,117834,117836,117838,117840,117842,117844],{"class":38,"line":2122},[36,117831,25057],{"class":2443},[36,117833,117718],{"class":405},[36,117835,24314],{"class":405},[36,117837,29383],{"class":46},[36,117839,117807],{"class":405},[36,117841,697],{"class":42},[36,117843,1573],{"class":46},[36,117845,117846],{"class":53}," --no-upgrade\n",[36,117848,117849],{"class":38,"line":2127},[36,117850,117851],{"class":69},"#只升级，不存在就不安装\n",[36,117853,117854,117856,117858,117860,117862,117864,117866,117868],{"class":38,"line":2133},[36,117855,25057],{"class":2443},[36,117857,117718],{"class":405},[36,117859,24314],{"class":405},[36,117861,29383],{"class":46},[36,117863,117807],{"class":405},[36,117865,697],{"class":42},[36,117867,1573],{"class":46},[36,117869,117870],{"class":53}," --only-upgrade\n",[36,117872,117873],{"class":38,"line":2154},[36,117874,2880],{"emptyLinePlaceholder":553},[36,117876,117877],{"class":38,"line":2159},[36,117878,117879],{"class":69},"#安装指定的软件命令\n",[36,117881,117882,117884,117886,117888,117890,117892,117894],{"class":38,"line":2173},[36,117883,25057],{"class":2443},[36,117885,117718],{"class":405},[36,117887,24314],{"class":405},[36,117889,29383],{"class":46},[36,117891,117807],{"class":405},[36,117893,697],{"class":42},[36,117895,51784],{"class":46},[36,117897,117898],{"class":38,"line":2178},[36,117899,2880],{"emptyLinePlaceholder":553},[36,117901,117902],{"class":38,"line":2207},[36,117903,117904],{"class":69},"#安装多个软件包\n",[36,117906,117907,117909,117911,117913,117915,117918,117921,117923,117925,117928,117930,117932],{"class":38,"line":2212},[36,117908,25057],{"class":2443},[36,117910,117718],{"class":405},[36,117912,24314],{"class":405},[36,117914,29383],{"class":46},[36,117916,117917],{"class":405},"package_",[36,117919,117920],{"class":46},"1>",[36,117922,29383],{"class":46},[36,117924,117917],{"class":405},[36,117926,117927],{"class":46},"2>",[36,117929,29383],{"class":46},[36,117931,117917],{"class":405},[36,117933,117934],{"class":46},"3>\n",[36,117936,117937],{"class":38,"line":2229},[36,117938,2880],{"emptyLinePlaceholder":553},[36,117940,117941],{"class":38,"line":2234},[36,117942,117943],{"class":69},"#更新指定的软件命令\n",[36,117945,117946,117948,117950,117952,117954,117956,117958],{"class":38,"line":2239},[36,117947,25057],{"class":2443},[36,117949,117718],{"class":405},[36,117951,117748],{"class":405},[36,117953,29383],{"class":46},[36,117955,117807],{"class":405},[36,117957,697],{"class":42},[36,117959,51784],{"class":46},[36,117961,117962],{"class":38,"line":2244},[36,117963,2880],{"emptyLinePlaceholder":553},[36,117965,117966],{"class":38,"line":2258},[36,117967,117968],{"class":69},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,117970,117971,117973,117976,117978,117980,117982],{"class":38,"line":2263},[36,117972,117769],{"class":2443},[36,117974,117975],{"class":405}," show",[36,117977,29383],{"class":46},[36,117979,117807],{"class":405},[36,117981,697],{"class":42},[36,117983,51784],{"class":46},[36,117985,117986],{"class":38,"line":3057},[36,117987,2880],{"emptyLinePlaceholder":553},[36,117989,117990],{"class":38,"line":3071},[36,117991,117992],{"class":69},"#删除软件包命令\n",[36,117994,117995,117997,117999,118001,118003,118005,118007],{"class":38,"line":3079},[36,117996,25057],{"class":2443},[36,117998,117718],{"class":405},[36,118000,26560],{"class":405},[36,118002,29383],{"class":46},[36,118004,117807],{"class":405},[36,118006,697],{"class":42},[36,118008,51784],{"class":46},[36,118010,118011],{"class":38,"line":3084},[36,118012,2880],{"emptyLinePlaceholder":553},[36,118014,118015],{"class":38,"line":3090},[36,118016,118017],{"class":69},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,118019,118020,118022,118024,118027],{"class":38,"line":3096},[36,118021,25057],{"class":2443},[36,118023,117718],{"class":405},[36,118025,118026],{"class":405}," autoremove",[36,118028,118029],{"class":69},"  # 删除不再需要的依赖和库文件\n",[36,118031,118032,118034,118036,118039],{"class":38,"line":3101},[36,118033,25057],{"class":2443},[36,118035,117718],{"class":405},[36,118037,118038],{"class":405}," clean",[36,118040,118041],{"class":69},"       # 清理下载的缓存包\n",[36,118043,118044],{"class":38,"line":8428},[36,118045,2880],{"emptyLinePlaceholder":553},[36,118047,118048],{"class":38,"line":8452},[36,118049,118050],{"class":69},"#移除软件包及配置文件\n",[36,118052,118053,118055,118057,118060,118062,118064,118066],{"class":38,"line":8457},[36,118054,25057],{"class":2443},[36,118056,117718],{"class":405},[36,118058,118059],{"class":405}," purge",[36,118061,29383],{"class":46},[36,118063,117807],{"class":405},[36,118065,697],{"class":42},[36,118067,51784],{"class":46},[36,118069,118070],{"class":38,"line":8463},[36,118071,2880],{"emptyLinePlaceholder":553},[36,118073,118074],{"class":38,"line":8490},[36,118075,118076],{"class":69},"#查找软件包命令\n",[36,118078,118079,118081,118083,118086,118088,118091,118093],{"class":38,"line":8495},[36,118080,25057],{"class":2443},[36,118082,117718],{"class":405},[36,118084,118085],{"class":405}," search",[36,118087,29383],{"class":46},[36,118089,118090],{"class":405},"keywor",[36,118092,933],{"class":42},[36,118094,51784],{"class":46},[36,118096,118097],{"class":38,"line":8501},[36,118098,2880],{"emptyLinePlaceholder":553},[36,118100,118101],{"class":38,"line":8513},[36,118102,118103],{"class":69},"#列出所有已安装的包\n",[36,118105,118106,118108,118110],{"class":38,"line":8525},[36,118107,117769],{"class":2443},[36,118109,117772],{"class":405},[36,118111,118112],{"class":53}," --installed\n",[36,118114,118115],{"class":38,"line":8537},[36,118116,2880],{"emptyLinePlaceholder":553},[36,118118,118119],{"class":38,"line":10196},[36,118120,118121],{"class":69},"#列出所有已安装的包的版本信息\n",[36,118123,118124,118126,118128],{"class":38,"line":10221},[36,118125,117769],{"class":2443},[36,118127,117772],{"class":405},[36,118129,118130],{"class":53}," --all-versions\n",[539,118132,118133],{},"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":31,"searchDepth":66,"depth":66,"links":118135},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117680,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118142,"title":118143,"body":118144,"description":550,"extension":551,"meta":118885,"navigation":553,"path":118886,"seo":118887,"stem":118888,"__hash__":118889},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118145,"toc":118872},[118146,118149,118153,118156,118162,118166,118170,118176,118181,118186,118191,118196,118201,118204,118207,118210,118213,118217,118220,118225,118228,118233,118236,118241,118248,118251,118254,118257,118260,118263,118274,118278,118282,118287,118292,118296,118301,118305,118310,118314,118318,118323,118326,118371,118376,118380,118384,118389,118395,118400,118410,118415,118425,118430,118435,118462,118466,118469,118474,118477,118502,118506,118511,118514,118519,118524,118544,118549,118552,118567,118571,118624,118627,118632,118636,118639,118654,118657,118660,118665,118669,118673,118676,118680,118684,118687,118692,118697,118701,118708,118716,118719,118726,118731,118736,118739,118744,118751,118756,118763,118767,118769,118774,118778,118781,118784,118789,118792,118797,118800,118805,118810,118815,118819,118824,118828,118869],[10,118147,118143],{"id":118148},"_2-linux装机教程",[14,118150,118152],{"id":118151},"_21-实体机","2.1 实体机",[19,118154,118155],{},"使用清华源：（Ubuntu24.04）",[19,118157,118158],{},[43,118159,118160],{"href":118160,"rel":118161},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24345],[14,118163,118165],{"id":118164},"_22-普通虚拟机","2.2 普通虚拟机",[596,118167,118169],{"id":118168},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118171,118172],{},[43,118173,118174],{"href":118174,"rel":118175},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24345],[19,118177,118178],{},[519,118179],{"alt":31,"src":118180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118182,118183],{},[519,118184],{"alt":31,"src":118185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118187,118188],{},[519,118189],{"alt":31,"src":118190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118192,118193],{},[519,118194],{"alt":31,"src":118195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118197,118198],{},[519,118199],{"alt":31,"src":118200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118202,118203],{},"内存4G（4096MB）；",[19,118205,118206],{},"CPU给4个核；",[19,118208,118209],{},"硬盘动态分配60G；",[19,118211,118212],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[596,118214,118216],{"id":118215},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118218,118219],{},"按照1.1的步骤下载Ubuntu",[19,118221,118222],{},[519,118223],{"alt":31,"src":118224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118226,118227],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118229,118230],{},[519,118231],{"alt":31,"src":118232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118234,118235],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118237,118238],{},[519,118239],{"alt":31,"src":118240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118242,118243,118244,118247],{},"选择“正常安装”(找不到都用Alt+F7)， ",[770,118245,118246],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118249,118250],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118252,118253],{},"将改动写入磁盘吗 继续",[19,118255,118256],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118258,118259],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118261,118262],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118264,118265,118266,118269,118270,118273],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[770,118267,118268],{},"除了"," 选不发送系统信息与不升级之外， ",[770,118271,118272],{},"其它"," 都跳过或前进）",[596,118275,118277],{"id":118276},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22478,118279,118281],{"id":118280},"_2231-全屏","2.2.3.1 全屏",[19,118283,118284],{},[519,118285],{"alt":31,"src":118286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118288,118289],{},[519,118290],{"alt":31,"src":118291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22478,118293,118295],{"id":118294},"_2232-文件交换","2.2.3.2 文件交换",[19,118297,118298],{},[519,118299],{"alt":31,"src":118300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22478,118302,118304],{"id":118303},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118306,118307],{},[519,118308],{"alt":31,"src":118309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118311,118313],{"id":118312},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[596,118315,118317],{"id":118316},"_231-简介与优缺点","2.3.1 简介与优缺点",[579,118319,118320],{},[582,118321,118322],{},"什么情况下推荐？",[19,118324,118325],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[579,118327,118328],{"start":66},[582,118329,118330,118331],{},"优缺点：",[579,118332,118333,118363],{},[582,118334,118335,118336],{},"优点：",[579,118337,118338,118341,118348,118351,118354,118357,118360],{},[582,118339,118340],{},"WSL2是最好的Linux发行版;(bushi)",[582,118342,118343,118344,118347],{},"性能损耗极低。且比在Windows上跑深度性能 ",[770,118345,118346],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[582,118349,118350],{},"非常方便调用USB设备，可以USB直通;",[582,118352,118353],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[582,118355,118356],{},"非常方便Win与WSL2互相传文件等协同操作;",[582,118358,118359],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[582,118361,118362],{},"非常方便使用Windows的VScode远程开发;",[582,118364,118365,118366],{},"缺点：",[579,118367,118368],{},[582,118369,118370],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118372,118373],{},[519,118374],{"alt":31,"src":118375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[596,118377,118379],{"id":118378},"_232-安装教程","2.3.2 安装教程",[22478,118381,118383],{"id":118382},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[579,118385,118386],{},[582,118387,118388],{},"方法一(图形界面)",[19,118390,118391,118392,25099],{},"用Win+R输入",[33,118393,118394],{},"appwiz.cpl",[19,118396,118397],{},[519,118398],{"alt":31,"src":118399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118401,118402,118403,118406,118407,26954],{},"点击OK进入 ",[770,118404,118405],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[770,118408,118409],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118411,118412],{},[519,118413],{"alt":31,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118416,118417,118418,101419,118421,118424],{},"选择 ",[770,118419,118420],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[770,118422,118423],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118426,118427],{},[519,118428],{"alt":31,"src":118429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[579,118431,118432],{"start":66},[582,118433,118434],{},"方法二(命令行)",[26,118436,118440],{"className":118437,"code":118438,"language":118439,"meta":31,"style":31},"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",[33,118441,118442,118447,118452,118457],{"__ignoreMap":31},[36,118443,118444],{"class":38,"line":39},[36,118445,118446],{},"# 开启 Linux 子系统\n",[36,118448,118449],{"class":38,"line":66},[36,118450,118451],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,118453,118454],{"class":38,"line":73},[36,118455,118456],{},"# 开启虚拟机平台\n",[36,118458,118459],{"class":38,"line":79},[36,118460,118461],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22478,118463,118465],{"id":118464},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118467,118468],{},"用管理员权限打开powershell",[19,118470,118471],{},[519,118472],{"alt":31,"src":118473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118475,118476],{},"升级WSL并设置默认版本为WSL2",[26,118478,118480],{"className":118437,"code":118479,"language":118439,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,118481,118482,118487,118492,118497],{"__ignoreMap":31},[36,118483,118484],{"class":38,"line":39},[36,118485,118486],{},"# 更新 wsl\n",[36,118488,118489],{"class":38,"line":66},[36,118490,118491],{},"wsl --update\n",[36,118493,118494],{"class":38,"line":73},[36,118495,118496],{},"# 将 wsl 版本设置为 wsl2\n",[36,118498,118499],{"class":38,"line":79},[36,118500,118501],{},"wsl --set-default-version 2\n",[22478,118503,118505],{"id":118504},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[579,118507,118508],{},[582,118509,118510],{},"方式一(商店下载)",[19,118512,118513],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118515,118516],{},[519,118517],{"alt":31,"src":118518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[579,118520,118521],{"start":66},[582,118522,118523],{},"方式二(命令行安装)",[26,118525,118527],{"className":118437,"code":118526,"language":118439,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,118528,118529,118534,118539],{"__ignoreMap":31},[36,118530,118531],{"class":38,"line":39},[36,118532,118533],{},"# 列出可安装的 Linux 版本\n",[36,118535,118536],{"class":38,"line":66},[36,118537,118538],{},"#（需要科学手段）\n",[36,118540,118541],{"class":38,"line":73},[36,118542,118543],{},"wsl --list --online\n",[19,118545,118546],{},[519,118547],{"alt":31,"src":118548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118550,118551],{},"选择对应发行版并安装",[26,118553,118555],{"className":118437,"code":118554,"language":118439,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,118556,118557,118562],{"__ignoreMap":31},[36,118558,118559],{"class":38,"line":39},[36,118560,118561],{},"# Ubuntu安装完毕后需要重启系统\n",[36,118563,118564],{"class":38,"line":66},[36,118565,118566],{},"wsl --install -d Ubuntu-24.04\n",[22478,118568,118570],{"id":118569},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,118572,118574],{"className":118437,"code":118573,"language":118439,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[33,118575,118576,118581,118586,118591,118596,118600,118604,118609,118614,118619],{"__ignoreMap":31},[36,118577,118578],{"class":38,"line":39},[36,118579,118580],{},"# 查看 wsl\n",[36,118582,118583],{"class":38,"line":66},[36,118584,118585],{},"wsl -l\n",[36,118587,118588],{"class":38,"line":73},[36,118589,118590],{},"# 查看 wsl 运行版本或模式\n",[36,118592,118593],{"class":38,"line":79},[36,118594,118595],{},"wsl -l -v\n",[36,118597,118598],{"class":38,"line":85},[36,118599,2880],{"emptyLinePlaceholder":553},[36,118601,118602],{"class":38,"line":419},[36,118603,2880],{"emptyLinePlaceholder":553},[36,118605,118606],{"class":38,"line":425},[36,118607,118608],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,118610,118611],{"class":38,"line":431},[36,118612,118613],{},"wsl --set-version \u003Cdistro> 2\n",[36,118615,118616],{"class":38,"line":437},[36,118617,118618],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,118620,118621],{"class":38,"line":443},[36,118622,118623],{},"wsl --unregister \u003Cdistro>\n",[19,118625,118626],{},"输出Version为2即正常",[19,118628,118629],{},[519,118630],{"alt":31,"src":118631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22478,118633,118635],{"id":118634},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118637,118638],{},"直接在Powershell里输入wsl命令进入子系统",[26,118640,118642],{"className":118437,"code":118641,"language":118439,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,118643,118644,118649],{"__ignoreMap":31},[36,118645,118646],{"class":38,"line":39},[36,118647,118648],{},"# 进入子系统\n",[36,118650,118651],{"class":38,"line":66},[36,118652,118653],{},"wsl\n",[19,118655,118656],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118658,118659],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118661,118662],{},[519,118663],{"alt":31,"src":118664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[596,118666,118668],{"id":118667},"_233-配置各种环境","2.3.3 配置各种环境",[22478,118670,118672],{"id":118671},"_2331-换源","2.3.3.1 换源",[19,118674,118675],{},"(同实体机LINUX，往下找教程)",[22478,118677,118679],{"id":118678},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23390,118681,118683],{"id":118682},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118685,118686],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118688,118689],{},[519,118690],{"alt":31,"src":118691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118693,118694],{},[519,118695],{"alt":31,"src":118696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23390,118698,118700],{"id":118699},"_23322-cuda","2.3.3.2.2 CUDA",[19,118702,118703,118704],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[43,118705,118706],{"href":118706,"rel":118707},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24345],[19,118709,118710,118713],{},[519,118711],{"alt":31,"src":118712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[519,118714],{"alt":31,"src":118715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118717,118718],{},"在下方的网站，选择合适的版本。",[19,118720,118721,118722],{},"WSL2 专属 CUDA 指南：",[43,118723,118724],{"href":118724,"rel":118725},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24345],[19,118727,118728],{},[770,118729,118730],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118732,118733],{},[519,118734],{"alt":31,"src":118735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118737,118738],{},"挨行敲一遍",[19,118740,118741],{},[519,118742],{"alt":31,"src":118743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118745,118746,118747,118750],{},"敲完后，输入",[33,118748,118749],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118752,118753],{},[519,118754],{"alt":31,"src":118755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118757,118758,118759,118762],{},"（请详看下方教程的",[770,118760,118761],{},"安装CUDA的配置环境来看","如何配置环境）",[23390,118764,118766],{"id":118765},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118768,118675],{},[19,118770,118771],{},[519,118772],{"alt":31,"src":118773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22478,118775,118777],{"id":118776},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118779,118780],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118782,118783],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118785,118786],{},[519,118787],{"alt":31,"src":118788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118790,118791],{},"连接WSL2",[19,118793,118794],{},[519,118795],{"alt":31,"src":118796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118798,118799],{},"远程开发成功。",[19,118801,118802],{},[519,118803],{"alt":31,"src":118804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118806,118807],{},[519,118808],{"alt":31,"src":118809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118811,118812],{},[519,118813],{"alt":31,"src":118814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22478,118816,118818],{"id":118817},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118820,118821],{},[519,118822],{"alt":31,"src":118823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22478,118825,118827],{"id":118826},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,118829,118831],{"className":117697,"code":118830,"language":117699,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,118832,118833,118841,118849,118860,118864],{"__ignoreMap":31},[36,118834,118835,118837,118839],{"class":38,"line":39},[36,118836,25057],{"class":2443},[36,118838,117718],{"class":405},[36,118840,26723],{"class":405},[36,118842,118843,118845,118847],{"class":38,"line":66},[36,118844,25057],{"class":2443},[36,118846,117718],{"class":405},[36,118848,117734],{"class":405},[36,118850,118851,118853,118855,118857],{"class":38,"line":73},[36,118852,25057],{"class":2443},[36,118854,117718],{"class":405},[36,118856,24314],{"class":405},[36,118858,118859],{"class":405}," mesa-utils\n",[36,118861,118862],{"class":38,"line":79},[36,118863,2880],{"emptyLinePlaceholder":553},[36,118865,118866],{"class":38,"line":85},[36,118867,118868],{"class":69},"#然后重启wsl2即可\n",[539,118870,118871],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":66,"depth":66,"links":118873},[118874,118875,118880],{"id":118151,"depth":66,"text":118152},{"id":118164,"depth":66,"text":118165,"children":118876},[118877,118878,118879],{"id":118168,"depth":73,"text":118169},{"id":118215,"depth":73,"text":118216},{"id":118276,"depth":73,"text":118277},{"id":118312,"depth":66,"text":118313,"children":118881},[118882,118883,118884],{"id":118316,"depth":73,"text":118317},{"id":118378,"depth":73,"text":118379},{"id":118667,"depth":73,"text":118668},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118143,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118891,"title":118892,"body":118893,"description":550,"extension":551,"meta":121829,"navigation":553,"path":121830,"seo":121831,"stem":121832,"__hash__":121833},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118894,"toc":121801},[118895,118898,118902,118908,118912,118918,118922,119110,119113,119118,119122,119126,119129,119132,119138,119143,119146,119149,119154,119187,119192,119196,119273,119276,119281,119285,119288,119327,119330,119339,119357,119362,119369,119486,119491,119494,119521,119526,119530,119539,119589,119596,119600,119603,119617,119624,119658,119663,119667,119690,119693,119698,119702,119705,119708,119711,119753,119757,119760,119763,119804,119808,119812,119815,119820,119825,119828,119851,119854,119862,119867,119870,119875,119880,119883,119888,119892,119897,119920,119925,119987,119995,120000,120005,120008,120013,120016,120021,120026,120044,120049,120055,120060,120074,120078,120081,120084,120087,120130,120133,120138,120239,120242,120247,120251,120255,120292,120296,120300,120304,120350,120354,120399,120403,120410,120418,120473,120476,120553,120556,120579,120583,120586,120591,120596,120604,120607,120612,120617,120622,120625,120630,120639,120642,120647,120650,120721,120726,120729,120734,120737,120742,120745,120750,120753,120758,120763,120766,120841,120844,120857,120862,120865,120879,120882,120911,120916,120945,120948,120953,120957,120962,120971,120974,120979,120982,120987,120990,120993,120998,121001,121006,121011,121014,121019,121022,121147,121152,121182,121185,121190,121195,121212,121215,121258,121261,121288,121293,121306,121449,121453,121458,121472,121475,121526,121529,121559,121562,121578,121583,121597,121600,121667,121672,121681,121686,121689,121701,121706,121713,121737,121740,121745,121748,121767,121772,121779,121791,121798],[10,118896,118892],{"id":118897},"_3-安装必备配置",[14,118899,118901],{"id":118900},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,118903,118906],{"className":118904,"code":118905,"language":5667},[5665],"  打开下方网站（注意，该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",[33,118907,118905],{"__ignoreMap":31},[596,118909,118911],{"id":118910},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,118913,118916],{"className":118914,"code":118915,"language":5667},[5665],"  输入以下命令\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",[33,118917,118915],{"__ignoreMap":31},[596,118919,118921],{"id":118920},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,118923,118927],{"className":118924,"code":118925,"language":118926,"meta":31,"style":31},"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",[33,118928,118929,118937,118948,118960,118974,118978,118988,118993,118997,119001,119006,119010,119022,119026,119031,119035,119046,119050,119066,119070,119081,119085,119090,119094,119102],{"__ignoreMap":31},[36,118930,118931,118933,118935],{"class":38,"line":39},[36,118932,25057],{"class":2443},[36,118934,117718],{"class":405},[36,118936,26723],{"class":405},[36,118938,118939,118941,118943,118945],{"class":38,"line":66},[36,118940,25057],{"class":2443},[36,118942,117718],{"class":405},[36,118944,24314],{"class":405},[36,118946,118947],{"class":405}," vim\n",[36,118949,118950,118952,118955,118957],{"class":38,"line":73},[36,118951,25057],{"class":2443},[36,118953,118954],{"class":405}," rm",[36,118956,25806],{"class":53},[36,118958,118959],{"class":405}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,118961,118962,118964,118966,118968,118971],{"class":38,"line":79},[36,118963,25057],{"class":2443},[36,118965,118954],{"class":405},[36,118967,25806],{"class":53},[36,118969,118970],{"class":405}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,118972,118973],{"class":53},"**\n",[36,118975,118976],{"class":38,"line":85},[36,118977,2880],{"emptyLinePlaceholder":553},[36,118979,118980,118982,118985],{"class":38,"line":419},[36,118981,25057],{"class":2443},[36,118983,118984],{"class":405}," vim",[36,118986,118987],{"class":405}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,118989,118990],{"class":38,"line":425},[36,118991,118992],{"class":405},"```\n",[36,118994,118995],{"class":38,"line":431},[36,118996,2880],{"emptyLinePlaceholder":553},[36,118998,118999],{"class":38,"line":437},[36,119000,2880],{"emptyLinePlaceholder":553},[36,119002,119003],{"class":38,"line":443},[36,119004,119005],{"class":2443},"选择好Ubuntu版本后，复制下方的内容。\n",[36,119007,119008],{"class":38,"line":2092},[36,119009,2880],{"emptyLinePlaceholder":553},[36,119011,119012,119014,119017,119020],{"class":38,"line":2097},[36,119013,846],{"class":46},[36,119015,119016],{"class":405},"[](",[36,119018,119019],{"class":2443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,119021,63],{"class":405},[36,119023,119024],{"class":38,"line":2103},[36,119025,2880],{"emptyLinePlaceholder":553},[36,119027,119028],{"class":38,"line":2108},[36,119029,119030],{"class":2443},"粘贴进去\n",[36,119032,119033],{"class":38,"line":2122},[36,119034,2880],{"emptyLinePlaceholder":553},[36,119036,119037,119039,119041,119044],{"class":38,"line":2127},[36,119038,846],{"class":46},[36,119040,119016],{"class":405},[36,119042,119043],{"class":2443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,119045,63],{"class":405},[36,119047,119048],{"class":38,"line":2133},[36,119049,2880],{"emptyLinePlaceholder":553},[36,119051,119052,119055,119058,119061,119063],{"class":38,"line":2154},[36,119053,119054],{"class":2443},"按一下ESC，然后英文冒号，输入",[36,119056,119057],{"class":405}," `",[36,119059,119060],{"class":2443},":wq!",[36,119062,1585],{"class":405},[36,119064,119065],{"class":2443},"然后回车\n",[36,119067,119068],{"class":38,"line":2159},[36,119069,2880],{"emptyLinePlaceholder":553},[36,119071,119072,119074,119076,119079],{"class":38,"line":2173},[36,119073,846],{"class":46},[36,119075,119016],{"class":405},[36,119077,119078],{"class":2443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,119080,63],{"class":405},[36,119082,119083],{"class":38,"line":2178},[36,119084,2880],{"emptyLinePlaceholder":553},[36,119086,119087],{"class":38,"line":2207},[36,119088,119089],{"class":2443},"输入以下命令\n",[36,119091,119092],{"class":38,"line":2212},[36,119093,2880],{"emptyLinePlaceholder":553},[36,119095,119096,119099],{"class":38,"line":2229},[36,119097,119098],{"class":405},"```",[36,119100,119101],{"class":2443},"Bash\n",[36,119103,119104,119106,119108],{"class":38,"line":2234},[36,119105,25057],{"class":2443},[36,119107,117718],{"class":405},[36,119109,26723],{"class":405},[19,119111,119112],{},"这里被替换成对应学校则成功",[19,119114,119115],{},[519,119116],{"alt":31,"src":119117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119119,119121],{"id":119120},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[596,119123,119125],{"id":119124},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119127,119128],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119130,119131],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119133,119134],{},[43,119135,119136],{"href":119136,"rel":119137},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24345],[19,119139,119140],{},[519,119141],{"alt":31,"src":119142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119144,119145],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119147,119148],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119150,119151],{},[519,119152],{"alt":31,"src":119153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,119155,119157],{"className":117697,"code":119156,"language":117699,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,119158,119159,119164,119171,119176],{"__ignoreMap":31},[36,119160,119161],{"class":38,"line":39},[36,119162,119163],{"class":69},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,119165,119166,119168],{"class":38,"line":66},[36,119167,101677],{"class":53},[36,119169,119170],{"class":405}," ~\u002FDownloads\n",[36,119172,119173],{"class":38,"line":73},[36,119174,119175],{"class":69},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,119177,119178,119180,119182,119184],{"class":38,"line":79},[36,119179,25057],{"class":2443},[36,119181,117718],{"class":405},[36,119183,24314],{"class":405},[36,119185,119186],{"class":405}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119188,119189],{},[519,119190],{"alt":31,"src":119191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[596,119193,119195],{"id":119194},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,119197,119199],{"className":117697,"code":119198,"language":117699,"meta":31,"style":31},"# 老版\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",[33,119200,119201,119206,119214,119225,119230,119234,119239,119249,119257,119268],{"__ignoreMap":31},[36,119202,119203],{"class":38,"line":39},[36,119204,119205],{"class":69},"# 老版\n",[36,119207,119208,119210,119212],{"class":38,"line":66},[36,119209,25057],{"class":2443},[36,119211,117718],{"class":405},[36,119213,26723],{"class":405},[36,119215,119216,119218,119220,119222],{"class":38,"line":73},[36,119217,25057],{"class":2443},[36,119219,117718],{"class":405},[36,119221,24314],{"class":405},[36,119223,119224],{"class":405}," neofetch\n",[36,119226,119227],{"class":38,"line":79},[36,119228,119229],{"class":2443},"neofetch\n",[36,119231,119232],{"class":38,"line":85},[36,119233,2880],{"emptyLinePlaceholder":553},[36,119235,119236],{"class":38,"line":419},[36,119237,119238],{"class":69},"# 新版\n",[36,119240,119241,119243,119246],{"class":38,"line":425},[36,119242,25057],{"class":2443},[36,119244,119245],{"class":405}," add-apt-repository",[36,119247,119248],{"class":405}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,119250,119251,119253,119255],{"class":38,"line":431},[36,119252,25057],{"class":2443},[36,119254,117718],{"class":405},[36,119256,26723],{"class":405},[36,119258,119259,119261,119263,119265],{"class":38,"line":437},[36,119260,25057],{"class":2443},[36,119262,117718],{"class":405},[36,119264,24314],{"class":405},[36,119266,119267],{"class":405}," fastfetch\n",[36,119269,119270],{"class":38,"line":443},[36,119271,119272],{"class":2443},"fastfetch\n",[19,119274,119275],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119277,119278],{},[519,119279],{"alt":31,"src":119280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[596,119282,119284],{"id":119283},"_323-移除snap应用","3.2.3 移除snap应用",[19,119286,119287],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,119289,119291],{"className":117697,"code":119290,"language":117699,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,119292,119293,119305,119316],{"__ignoreMap":31},[36,119294,119295,119297,119299,119302],{"class":38,"line":39},[36,119296,25057],{"class":2443},[36,119298,26994],{"class":405},[36,119300,119301],{"class":405}," disable",[36,119303,119304],{"class":405}," snapd.service\n",[36,119306,119307,119309,119311,119313],{"class":38,"line":66},[36,119308,25057],{"class":2443},[36,119310,26994],{"class":405},[36,119312,119301],{"class":405},[36,119314,119315],{"class":405}," snapd.socket\n",[36,119317,119318,119320,119322,119324],{"class":38,"line":73},[36,119319,25057],{"class":2443},[36,119321,26994],{"class":405},[36,119323,119301],{"class":405},[36,119325,119326],{"class":405}," snapd.seeded.service\n",[19,119328,119329],{},"然后查看snap应用列表",[19,119331,119332,119333,119338],{},"根据你安装的选择不同（最小安装或普通安装），有",[43,119334,119337],{"href":119335,"rel":119336},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24345],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,119340,119342],{"className":117697,"code":119341,"language":117699,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,119343,119344,119349],{"__ignoreMap":31},[36,119345,119346],{"class":38,"line":39},[36,119347,119348],{"class":69},"# 查询当前系统上snap安装了哪些app\n",[36,119350,119351,119354],{"class":38,"line":66},[36,119352,119353],{"class":2443},"snap",[36,119355,119356],{"class":405}," list\n",[19,119358,119359],{},[519,119360],{"alt":31,"src":119361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119363,119364,119365,119368],{},"卸载掉图中所有应用，按照 ",[770,119366,119367],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,119370,119372],{"className":117697,"code":119371,"language":117699,"meta":31,"style":31},"#移除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",[33,119373,119374,119379,119391,119396,119407,119412,119423,119428,119439,119444,119448,119453,119464,119475],{"__ignoreMap":31},[36,119375,119376],{"class":38,"line":39},[36,119377,119378],{"class":69},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,119380,119381,119383,119386,119388],{"class":38,"line":66},[36,119382,25057],{"class":2443},[36,119384,119385],{"class":405}," snap",[36,119387,26560],{"class":405},[36,119389,119390],{"class":405}," snap-store\n",[36,119392,119393],{"class":38,"line":73},[36,119394,119395],{"class":69},"#移除firefox浏览器\n",[36,119397,119398,119400,119402,119404],{"class":38,"line":79},[36,119399,25057],{"class":2443},[36,119401,119385],{"class":405},[36,119403,26560],{"class":405},[36,119405,119406],{"class":405}," firefox\n",[36,119408,119409],{"class":38,"line":85},[36,119410,119411],{"class":69},"#移除gnome-42-2204\n",[36,119413,119414,119416,119418,119420],{"class":38,"line":419},[36,119415,25057],{"class":2443},[36,119417,119385],{"class":405},[36,119419,26560],{"class":405},[36,119421,119422],{"class":405}," gnome-42-2204\n",[36,119424,119425],{"class":38,"line":425},[36,119426,119427],{"class":69},"#移除gtk-common-themes\n",[36,119429,119430,119432,119434,119436],{"class":38,"line":431},[36,119431,25057],{"class":2443},[36,119433,119385],{"class":405},[36,119435,26560],{"class":405},[36,119437,119438],{"class":405}," gtk-common-themes\n",[36,119440,119441],{"class":38,"line":437},[36,119442,119443],{"class":69},"#移除其它...\n",[36,119445,119446],{"class":38,"line":443},[36,119447,3154],{"class":42},[36,119449,119450],{"class":38,"line":2092},[36,119451,119452],{"class":69},"#移除core22,bare以及snapd\n",[36,119454,119455,119457,119459,119461],{"class":38,"line":2097},[36,119456,25057],{"class":2443},[36,119458,119385],{"class":405},[36,119460,26560],{"class":405},[36,119462,119463],{"class":405}," core22\n",[36,119465,119466,119468,119470,119472],{"class":38,"line":2103},[36,119467,25057],{"class":2443},[36,119469,119385],{"class":405},[36,119471,26560],{"class":405},[36,119473,119474],{"class":405}," bare\n",[36,119476,119477,119479,119481,119483],{"class":38,"line":2108},[36,119478,25057],{"class":2443},[36,119480,119385],{"class":405},[36,119482,26560],{"class":405},[36,119484,119485],{"class":405}," snapd\n",[19,119487,119488],{},[519,119489],{"alt":31,"src":119490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119492,119493],{},"输入以下命令查看是否还有snap包",[26,119495,119497],{"className":117697,"code":119496,"language":117699,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,119498,119499,119505,119509,119513,119517],{"__ignoreMap":31},[36,119500,119501,119503],{"class":38,"line":39},[36,119502,119353],{"class":2443},[36,119504,119356],{"class":405},[36,119506,119507],{"class":38,"line":66},[36,119508,119205],{"class":69},[36,119510,119511],{"class":38,"line":73},[36,119512,119229],{"class":2443},[36,119514,119515],{"class":38,"line":79},[36,119516,119238],{"class":69},[36,119518,119519],{"class":38,"line":85},[36,119520,119272],{"class":2443},[19,119522,119523],{},[519,119524],{"alt":31,"src":119525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[596,119527,119529],{"id":119528},"_324-移除snap","3.2.4 移除snap",[19,119531,119532,119533,119538],{},"在删除掉",[43,119534,119537],{"href":119535,"rel":119536},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24345],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,119540,119542],{"className":117697,"code":119541,"language":117699,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[33,119543,119544,119549,119562,119567,119578],{"__ignoreMap":31},[36,119545,119546],{"class":38,"line":39},[36,119547,119548],{"class":69}," #使用apt移除掉snap\n",[36,119550,119551,119553,119555,119557,119560],{"class":38,"line":66},[36,119552,25057],{"class":2443},[36,119554,117718],{"class":405},[36,119556,118026],{"class":405},[36,119558,119559],{"class":53}," --purge",[36,119561,119485],{"class":405},[36,119563,119564],{"class":38,"line":73},[36,119565,119566],{"class":69},"#移除snapd的一些目录\n",[36,119568,119569,119571,119573,119575],{"class":38,"line":79},[36,119570,25057],{"class":2443},[36,119572,118954],{"class":405},[36,119574,25806],{"class":53},[36,119576,119577],{"class":405}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,119579,119580,119582,119584,119586],{"class":38,"line":85},[36,119581,25057],{"class":2443},[36,119583,118954],{"class":405},[36,119585,25806],{"class":53},[36,119587,119588],{"class":405}," ~\u002Fsnap\n",[19,119590,119591,119592,119595],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,119593,119594],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[596,119597,119599],{"id":119598},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119601,119602],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,119604,119606],{"className":117697,"code":119605,"language":117699,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,119607,119608],{"__ignoreMap":31},[36,119609,119610,119612,119614],{"class":38,"line":39},[36,119611,25057],{"class":2443},[36,119613,118984],{"class":405},[36,119615,119616],{"class":405}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119618,119619,119620,119623],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,119621,119622],{},":wq"," 回车",[26,119625,119627],{"className":117697,"code":119626,"language":117699,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,119628,119629,119636,119650],{"__ignoreMap":31},[36,119630,119631,119634],{"class":38,"line":39},[36,119632,119633],{"class":2443},"Package:",[36,119635,119485],{"class":405},[36,119637,119638,119641,119644,119647],{"class":38,"line":66},[36,119639,119640],{"class":2443},"Pin:",[36,119642,119643],{"class":405}," release",[36,119645,119646],{"class":405}," a=",[36,119648,119649],{"class":53},"*\n",[36,119651,119652,119655],{"class":38,"line":73},[36,119653,119654],{"class":2443},"Pin-Priority:",[36,119656,119657],{"class":53}," -10\n",[19,119659,119660],{},[519,119661],{"alt":31,"src":119662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[596,119664,119666],{"id":119665},"_326-测试是否成功","3.2.6 测试是否成功",[26,119668,119670],{"className":117697,"code":119669,"language":117699,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,119671,119672,119680],{"__ignoreMap":31},[36,119673,119674,119676,119678],{"class":38,"line":39},[36,119675,25057],{"class":2443},[36,119677,117718],{"class":405},[36,119679,26723],{"class":405},[36,119681,119682,119684,119686,119688],{"class":38,"line":66},[36,119683,25057],{"class":2443},[36,119685,117718],{"class":405},[36,119687,24314],{"class":405},[36,119689,119406],{"class":405},[19,119691,119692],{},"这里提示snapd无法被安装，就证明成功了",[19,119694,119695],{},[519,119696],{"alt":31,"src":119697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[596,119699,119701],{"id":119700},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119703,119704],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119706,119707],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119709,119710],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,119712,119714],{"className":117697,"code":119713,"language":117699,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,119715,119716,119721,119730,119735,119743],{"__ignoreMap":31},[36,119717,119718],{"class":38,"line":39},[36,119719,119720],{"class":69},"# 添加Mozilla提供的源\n",[36,119722,119723,119725,119727],{"class":38,"line":66},[36,119724,25057],{"class":2443},[36,119726,119245],{"class":405},[36,119728,119729],{"class":405}," ppa:mozillateam\u002Fppa\n",[36,119731,119732],{"class":38,"line":73},[36,119733,119734],{"class":69},"# 安装Firefox\n",[36,119736,119737,119739,119741],{"class":38,"line":79},[36,119738,25057],{"class":2443},[36,119740,117718],{"class":405},[36,119742,26723],{"class":405},[36,119744,119745,119747,119749,119751],{"class":38,"line":85},[36,119746,25057],{"class":2443},[36,119748,117718],{"class":405},[36,119750,24314],{"class":405},[36,119752,119406],{"class":405},[596,119754,119756],{"id":119755},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119758,119759],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119761,119762],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,119764,119766],{"className":117697,"code":119765,"language":117699,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,119767,119768,119773,119783,119791,119795],{"__ignoreMap":31},[36,119769,119770],{"class":38,"line":39},[36,119771,119772],{"class":69},"#删掉禁止安装snap的配置文件\n",[36,119774,119775,119777,119779,119781],{"class":38,"line":66},[36,119776,25057],{"class":2443},[36,119778,118954],{"class":405},[36,119780,25806],{"class":53},[36,119782,119616],{"class":405},[36,119784,119785,119787,119789],{"class":38,"line":73},[36,119786,25057],{"class":2443},[36,119788,117718],{"class":405},[36,119790,26723],{"class":405},[36,119792,119793],{"class":38,"line":79},[36,119794,2880],{"emptyLinePlaceholder":553},[36,119796,119797,119799,119801],{"class":38,"line":85},[36,119798,25057],{"class":2443},[36,119800,117718],{"class":405},[36,119802,119803],{"class":405}," dist-update\n",[14,119805,119807],{"id":119806},"_33-中文输入法","3.3 中文输入法",[596,119809,119811],{"id":119810},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119813,119814],{},"官网下载搜狗输入法",[19,119816,119817],{},[519,119818],{"alt":31,"src":119819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119821,119822],{},[519,119823],{"alt":31,"src":119824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119826,119827],{},"打开终端输入如下",[26,119829,119831],{"className":117697,"code":119830,"language":117699,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,119832,119833,119840],{"__ignoreMap":31},[36,119834,119835,119837],{"class":38,"line":39},[36,119836,101677],{"class":53},[36,119838,119839],{"class":405}," ~\u002FDownloads\u002F\n",[36,119841,119842,119844,119846,119848],{"class":38,"line":66},[36,119843,25057],{"class":2443},[36,119845,117718],{"class":405},[36,119847,24314],{"class":405},[36,119849,119850],{"class":405}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119852,119853],{},"打开Fcitx",[19,119855,119856,119859],{},[519,119857],{"alt":31,"src":119858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[519,119860],{"alt":31,"src":119861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119863,119864],{},[519,119865],{"alt":31,"src":119866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119868,119869],{},"添加搜狗输入法",[19,119871,119872],{},[519,119873],{"alt":31,"src":119874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119876,119877],{},[519,119878],{"alt":31,"src":119879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119881,119882],{},"将搜狗输入法设置为唯一输入法",[19,119884,119885],{},[519,119886],{"alt":31,"src":119887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[596,119889,119891],{"id":119890},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[579,119893,119894],{},[582,119895,119896],{},"卸载旧输入法",[26,119898,119900],{"className":118924,"code":119899,"language":118926,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,119901,119902],{"__ignoreMap":31},[36,119903,119904,119906,119908,119910,119913,119915,119918],{"class":38,"line":39},[36,119905,25057],{"class":2443},[36,119907,117718],{"class":405},[36,119909,118059],{"class":405},[36,119911,119912],{"class":405}," fcitx",[36,119914,1071],{"class":53},[36,119916,119917],{"class":405}," ibus",[36,119919,119649],{"class":53},[579,119921,119922],{"start":66},[582,119923,119924],{},"安装Fcitx5",[26,119926,119928],{"className":117697,"code":119927,"language":117699,"meta":31,"style":31},"# 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",[33,119929,119930,119935,119949,119953,119958,119967,119975],{"__ignoreMap":31},[36,119931,119932],{"class":38,"line":39},[36,119933,119934],{"class":69},"# Ubuntu22.04及以上、Debian12及以上\n",[36,119936,119937,119939,119941,119943,119946],{"class":38,"line":66},[36,119938,25057],{"class":2443},[36,119940,117718],{"class":405},[36,119942,24314],{"class":405},[36,119944,119945],{"class":405}," fcitx5",[36,119947,119948],{"class":405}," fcitx5-chinese-addons\n",[36,119950,119951],{"class":38,"line":73},[36,119952,2880],{"emptyLinePlaceholder":553},[36,119954,119955],{"class":38,"line":79},[36,119956,119957],{"class":69},"# Ubuntu20.04\n",[36,119959,119960,119962,119964],{"class":38,"line":85},[36,119961,25057],{"class":2443},[36,119963,119245],{"class":405},[36,119965,119966],{"class":405}," ppa:zhsj\u002Ffcitx5\n",[36,119968,119969,119971,119973],{"class":38,"line":419},[36,119970,25057],{"class":2443},[36,119972,117718],{"class":405},[36,119974,26723],{"class":405},[36,119976,119977,119979,119981,119983,119985],{"class":38,"line":425},[36,119978,25057],{"class":2443},[36,119980,117718],{"class":405},[36,119982,24314],{"class":405},[36,119984,119945],{"class":405},[36,119986,119948],{"class":405},[579,119988,119989,119992],{"start":73},[582,119990,119991],{},"Reboot System",[582,119993,119994],{},"启动Fcitx5",[19,119996,119997],{},[519,119998],{"alt":31,"src":119999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[579,120001,120002],{"start":85},[582,120003,120004],{},"修改一些设置",[19,120006,120007],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120009,120010],{},[519,120011],{"alt":31,"src":120012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120014,120015],{},"添加快捷键以便于更好切换中英文",[19,120017,120018],{},[519,120019],{"alt":31,"src":120020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[579,120022,120023],{"start":419},[582,120024,120025],{},"重启",[26,120027,120029],{"className":118924,"code":120028,"language":118926,"meta":31,"style":31},"sudo shutdown -r now\n",[33,120030,120031],{"__ignoreMap":31},[36,120032,120033,120035,120038,120041],{"class":38,"line":39},[36,120034,25057],{"class":2443},[36,120036,120037],{"class":405}," shutdown",[36,120039,120040],{"class":53}," -r",[36,120042,120043],{"class":405}," now\n",[579,120045,120046],{"start":425},[582,120047,120048],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120050,120051],{},[43,120052,120053],{"href":120053,"rel":120054},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24345],[579,120056,120057],{"start":431},[582,120058,120059],{},"再重启",[26,120061,120062],{"className":118924,"code":120028,"language":118926,"meta":31,"style":31},[33,120063,120064],{"__ignoreMap":31},[36,120065,120066,120068,120070,120072],{"class":38,"line":39},[36,120067,25057],{"class":2443},[36,120069,120037],{"class":405},[36,120071,120040],{"class":53},[36,120073,120043],{"class":405},[14,120075,120077],{"id":120076},"_34-pip3源替换","3.4 pip3源替换",[19,120079,120080],{},"非Debian系发行版需要做。",[19,120082,120083],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120085,120086],{},"使用dnf的系统也可能不用做。",[26,120088,120090],{"className":117697,"code":120089,"language":117699,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,120091,120092,120097,120104,120109,120114],{"__ignoreMap":31},[36,120093,120094],{"class":38,"line":39},[36,120095,120096],{"class":69},"# 检查是否已安装 pip\n",[36,120098,120099,120102],{"class":38,"line":66},[36,120100,120101],{"class":2443},"pip3",[36,120103,26774],{"class":53},[36,120105,120106],{"class":38,"line":73},[36,120107,120108],{"class":69},"# 如果未安装，先安装 pip3（见下方）\n",[36,120110,120111],{"class":38,"line":79},[36,120112,120113],{"class":69},"# 配置 pip 使用清华源\n",[36,120115,120116,120118,120121,120124,120127],{"class":38,"line":85},[36,120117,120101],{"class":2443},[36,120119,120120],{"class":405}," config",[36,120122,120123],{"class":405}," set",[36,120125,120126],{"class":405}," global.index-url",[36,120128,120129],{"class":405}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120131,120132],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120134,120135],{},[519,120136],{"alt":31,"src":120137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,120139,120141],{"className":117697,"code":120140,"language":117699,"meta":31,"style":31},"#安装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",[33,120142,120143,120148,120156,120167,120171,120176,120195,120199,120204,120216,120220,120225],{"__ignoreMap":31},[36,120144,120145],{"class":38,"line":39},[36,120146,120147],{"class":69},"#安装pip3\n",[36,120149,120150,120152,120154],{"class":38,"line":66},[36,120151,25057],{"class":2443},[36,120153,117718],{"class":405},[36,120155,26723],{"class":405},[36,120157,120158,120160,120162,120164],{"class":38,"line":73},[36,120159,25057],{"class":2443},[36,120161,26557],{"class":405},[36,120163,24314],{"class":405},[36,120165,120166],{"class":405}," python3-pip\n",[36,120168,120169],{"class":38,"line":79},[36,120170,2880],{"emptyLinePlaceholder":553},[36,120172,120173],{"class":38,"line":85},[36,120174,120175],{"class":69},"#更新pip3\n",[36,120177,120178,120180,120182,120184,120186,120188,120191,120193],{"class":38,"line":419},[36,120179,101280],{"class":2443},[36,120181,101283],{"class":53},[36,120183,101306],{"class":405},[36,120185,24314],{"class":405},[36,120187,26911],{"class":53},[36,120189,120190],{"class":405}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,120192,101311],{"class":53},[36,120194,101314],{"class":405},[36,120196,120197],{"class":38,"line":425},[36,120198,2880],{"emptyLinePlaceholder":553},[36,120200,120201],{"class":38,"line":431},[36,120202,120203],{"class":69},"#设置pip源为清华源\n",[36,120205,120206,120208,120210,120212,120214],{"class":38,"line":437},[36,120207,120101],{"class":2443},[36,120209,120120],{"class":405},[36,120211,120123],{"class":405},[36,120213,120126],{"class":405},[36,120215,120129],{"class":405},[36,120217,120218],{"class":38,"line":443},[36,120219,2880],{"emptyLinePlaceholder":553},[36,120221,120222],{"class":38,"line":2092},[36,120223,120224],{"class":69},"#测试\n",[36,120226,120227,120229,120231,120233,120235,120237],{"class":38,"line":2097},[36,120228,101280],{"class":2443},[36,120230,101283],{"class":53},[36,120232,101306],{"class":405},[36,120234,24314],{"class":405},[36,120236,101311],{"class":53},[36,120238,101314],{"class":405},[19,120240,120241],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120243,120244],{},[519,120245],{"alt":31,"src":120246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120248,120250],{"id":120249},"_35-显卡驱动安装","3.5 显卡驱动安装",[596,120252,120254],{"id":120253},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,120256,120258],{"className":118924,"code":120257,"language":118926,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,120259,120260,120265,120280,120285],{"__ignoreMap":31},[36,120261,120262],{"class":38,"line":39},[36,120263,120264],{"class":69},"# 如果是使用apt安装的驱动\n",[36,120266,120267,120269,120271,120273,120275,120278],{"class":38,"line":66},[36,120268,25057],{"class":2443},[36,120270,26557],{"class":405},[36,120272,26560],{"class":405},[36,120274,119559],{"class":53},[36,120276,120277],{"class":405}," nvidia",[36,120279,119649],{"class":53},[36,120281,120282],{"class":38,"line":73},[36,120283,120284],{"class":69},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,120286,120287,120289],{"class":38,"line":79},[36,120288,25057],{"class":2443},[36,120290,120291],{"class":405}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[596,120293,120295],{"id":120294},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22478,120297,120299],{"id":120298},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23390,120301,120303],{"id":120302},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,120305,120307],{"className":118924,"code":120306,"language":118926,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120308,120309,120314,120325,120330,120340,120345],{"__ignoreMap":31},[36,120310,120311],{"class":38,"line":39},[36,120312,120313],{"class":69},"# 安装英伟达驱动\n",[36,120315,120316,120318,120320,120322],{"class":38,"line":66},[36,120317,25057],{"class":2443},[36,120319,117718],{"class":405},[36,120321,24314],{"class":405},[36,120323,120324],{"class":405}," nvidia-driver-版本号\n",[36,120326,120327],{"class":38,"line":73},[36,120328,120329],{"class":69},"# 重启 \n",[36,120331,120332,120334,120336,120338],{"class":38,"line":79},[36,120333,25057],{"class":2443},[36,120335,120037],{"class":405},[36,120337,120040],{"class":53},[36,120339,120043],{"class":405},[36,120341,120342],{"class":38,"line":85},[36,120343,120344],{"class":69},"# 检查驱动是否安装成功\n",[36,120346,120347],{"class":38,"line":419},[36,120348,120349],{"class":2443},"nvidia-smi\n",[23390,120351,120353],{"id":120352},"_35212-debian","3.5.2.1.2 Debian",[26,120355,120357],{"className":118924,"code":120356,"language":118926,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120358,120359,120363,120377,120381,120391,120395],{"__ignoreMap":31},[36,120360,120361],{"class":38,"line":39},[36,120362,120313],{"class":69},[36,120364,120365,120367,120369,120371,120374],{"class":38,"line":66},[36,120366,25057],{"class":2443},[36,120368,117718],{"class":405},[36,120370,24314],{"class":405},[36,120372,120373],{"class":405}," nvidia-driver",[36,120375,120376],{"class":405}," nvidia-settings\n",[36,120378,120379],{"class":38,"line":73},[36,120380,120329],{"class":69},[36,120382,120383,120385,120387,120389],{"class":38,"line":79},[36,120384,25057],{"class":2443},[36,120386,120037],{"class":405},[36,120388,120040],{"class":53},[36,120390,120043],{"class":405},[36,120392,120393],{"class":38,"line":85},[36,120394,120344],{"class":69},[36,120396,120397],{"class":38,"line":419},[36,120398,120349],{"class":2443},[22478,120400,120402],{"id":120401},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120404,120405,120406,120409],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[770,120407,120408],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120411,120412,120413],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24033,120414,120415],{},[770,120416,120417],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,120419,120421],{"className":118924,"code":120420,"language":118926,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[33,120422,120423,120428,120438,120443,120456,120461],{"__ignoreMap":31},[36,120424,120425],{"class":38,"line":39},[36,120426,120427],{"class":69},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,120429,120430,120432,120435],{"class":38,"line":66},[36,120431,25057],{"class":2443},[36,120433,120434],{"class":405}," telinit",[36,120436,120437],{"class":53}," 3\n",[36,120439,120440],{"class":38,"line":73},[36,120441,120442],{"class":69},"# ubuntu 使用下方命令\n",[36,120444,120445,120447,120450,120453],{"class":38,"line":79},[36,120446,25057],{"class":2443},[36,120448,120449],{"class":405}," service",[36,120451,120452],{"class":405}," lightdm",[36,120454,120455],{"class":405}," stop\n",[36,120457,120458],{"class":38,"line":85},[36,120459,120460],{"class":69},"# Fedora 使用下方命令\n",[36,120462,120463,120465,120467,120470],{"class":38,"line":419},[36,120464,25057],{"class":2443},[36,120466,26994],{"class":405},[36,120468,120469],{"class":405}," isolate",[36,120471,120472],{"class":405}," multi-user.target\n",[19,120474,120475],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,120477,120479],{"className":118924,"code":120478,"language":118926,"meta":31,"style":31},"# 编译环境+准备工作\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",[33,120480,120481,120486,120497,120502,120509,120514,120526,120531,120538,120543],{"__ignoreMap":31},[36,120482,120483],{"class":38,"line":39},[36,120484,120485],{"class":69},"# 编译环境+准备工作\n",[36,120487,120488,120490,120492,120494],{"class":38,"line":66},[36,120489,25057],{"class":2443},[36,120491,117718],{"class":405},[36,120493,24314],{"class":405},[36,120495,120496],{"class":405}," build-essential\n",[36,120498,120499],{"class":38,"line":73},[36,120500,120501],{"class":69},"# 进入到.run目录中\n",[36,120503,120504,120506],{"class":38,"line":79},[36,120505,101677],{"class":53},[36,120507,120508],{"class":405}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,120510,120511],{"class":38,"line":85},[36,120512,120513],{"class":69},"# 给驱动文件增加可执行权限：\n",[36,120515,120516,120518,120520,120523],{"class":38,"line":419},[36,120517,25057],{"class":2443},[36,120519,25060],{"class":405},[36,120521,120522],{"class":405}," a+x",[36,120524,120525],{"class":405}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,120527,120528],{"class":38,"line":425},[36,120529,120530],{"class":69},"# 然后执行安装：\n",[36,120532,120533,120535],{"class":38,"line":431},[36,120534,25057],{"class":2443},[36,120536,120537],{"class":405}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,120539,120540],{"class":38,"line":437},[36,120541,120542],{"class":69},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,120544,120545,120547,120550],{"class":38,"line":443},[36,120546,25057],{"class":2443},[36,120548,120549],{"class":405}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,120551,120552],{"class":53},"  --no-opengl-files\n",[19,120554,120555],{},"安装完毕重启即可",[26,120557,120559],{"className":118924,"code":120558,"language":118926,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120560,120561,120565,120571,120575],{"__ignoreMap":31},[36,120562,120563],{"class":38,"line":39},[36,120564,120329],{"class":69},[36,120566,120567,120569],{"class":38,"line":66},[36,120568,25057],{"class":2443},[36,120570,27128],{"class":405},[36,120572,120573],{"class":38,"line":73},[36,120574,120344],{"class":69},[36,120576,120577],{"class":38,"line":79},[36,120578,120349],{"class":2443},[596,120580,120582],{"id":120581},"_353-安装cuda","3.5.3 安装CUDA",[19,120584,120585],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120587,120588],{},[519,120589],{"alt":31,"src":120590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[579,120592,120593],{},[582,120594,120595],{},"先查看显卡驱动所支持的最高CUDA版本",[26,120597,120598],{"className":118924,"code":120349,"language":118926,"meta":31,"style":31},[33,120599,120600],{"__ignoreMap":31},[36,120601,120602],{"class":38,"line":39},[36,120603,120349],{"class":2443},[19,120605,120606],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120608,120609],{},[519,120610],{"alt":31,"src":120611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[579,120613,120614],{"start":66},[582,120615,120616],{},"下载CUDA并安装CUDA",[19,120618,118703,120619],{},[43,120620,118706],{"href":118706,"rel":120621},[24345],[19,120623,120624],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120626,120627],{},[519,120628],{"alt":31,"src":120629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120631,120632,120633,120638],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[43,120634,120637],{"href":120635,"rel":120636},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24345],"Vinci机器人队单片机教程","）",[19,120640,120641],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120643,120644],{},[519,120645],{"alt":31,"src":120646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120648,120649],{},"将最下方框框里的命令敲入终端",[26,120651,120653],{"className":118924,"code":120652,"language":118926,"meta":31,"style":31},"# 在当前文件夹下创建一个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",[33,120654,120655,120660,120669,120674,120681,120686,120694,120699,120710,120715],{"__ignoreMap":31},[36,120656,120657],{"class":38,"line":39},[36,120658,120659],{"class":69},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,120661,120662,120664,120666],{"class":38,"line":66},[36,120663,101667],{"class":2443},[36,120665,29697],{"class":53},[36,120667,120668],{"class":405}," .\u002Fttt\n",[36,120670,120671],{"class":38,"line":73},[36,120672,120673],{"class":69},"# 进入ttt文件夹\n",[36,120675,120676,120678],{"class":38,"line":79},[36,120677,101677],{"class":53},[36,120679,120680],{"class":405}," ttt\n",[36,120682,120683],{"class":38,"line":85},[36,120684,120685],{"class":69},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,120687,120688,120691],{"class":38,"line":419},[36,120689,120690],{"class":2443},"wget",[36,120692,120693],{"class":405}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,120695,120696],{"class":38,"line":425},[36,120697,120698],{"class":69},"# 给予权限\n",[36,120700,120701,120703,120705,120707],{"class":38,"line":431},[36,120702,25057],{"class":2443},[36,120704,25060],{"class":405},[36,120706,120522],{"class":405},[36,120708,120709],{"class":405}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,120711,120712],{"class":38,"line":437},[36,120713,120714],{"class":69},"# 运行脚本\n",[36,120716,120717,120719],{"class":38,"line":443},[36,120718,25057],{"class":2443},[36,120720,120709],{"class":405},[19,120722,120723],{},[519,120724],{"alt":31,"src":120725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120727,120728],{},"正在安装中：",[19,120730,120731],{},[519,120732],{"alt":31,"src":120733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120735,120736],{},"输入accept接受即可",[19,120738,120739],{},[519,120740],{"alt":31,"src":120741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120743,120744],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120746,120747],{},[519,120748],{"alt":31,"src":120749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120751,120752],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120754,120755],{},[519,120756],{"alt":31,"src":120757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[579,120759,120760],{"start":73},[582,120761,120762],{},"配置环境",[19,120764,120765],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,120767,120769],{"className":118924,"code":120768,"language":118926,"meta":31,"style":31},"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",[33,120770,120771,120787,120802],{"__ignoreMap":31},[36,120772,120773,120776,120779,120782,120785],{"class":38,"line":39},[36,120774,120775],{"class":2443},"Please",[36,120777,120778],{"class":405}," make",[36,120780,120781],{"class":405}," sure",[36,120783,120784],{"class":405}," that",[36,120786,3154],{"class":42},[36,120788,120789,120791,120794,120797,120800],{"class":38,"line":66},[36,120790,52748],{"class":2443},[36,120792,120793],{"class":405},"   PATH",[36,120795,120796],{"class":405}," includes",[36,120798,120799],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,120801,3154],{"class":42},[36,120803,120804,120806,120809,120811,120814,120817,120819,120822,120825,120828,120831,120833,120836,120838],{"class":38,"line":73},[36,120805,52748],{"class":2443},[36,120807,120808],{"class":405},"   LD_LIBRARY_PATH",[36,120810,120796],{"class":405},[36,120812,120813],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,120815,120816],{"class":405}," or,",[36,120818,5689],{"class":405},[36,120820,120821],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,120823,120824],{"class":405}," to",[36,120826,120827],{"class":405}," \u002Fetc\u002Fld.so.conf",[36,120829,120830],{"class":405}," and",[36,120832,27711],{"class":405},[36,120834,120835],{"class":405}," ldconfig",[36,120837,65081],{"class":405},[36,120839,120840],{"class":405}," root\n",[19,120842,120843],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,120845,120847],{"className":118924,"code":120846,"language":118926,"meta":31,"style":31},"which nvcc\n",[33,120848,120849],{"__ignoreMap":31},[36,120850,120851,120854],{"class":38,"line":39},[36,120852,120853],{"class":53},"which",[36,120855,120856],{"class":405}," nvcc\n",[19,120858,120859],{},[519,120860],{"alt":31,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120863,120864],{},"所以我进行以下操作：",[26,120866,120868],{"className":118924,"code":120867,"language":118926,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,120869,120870],{"__ignoreMap":31},[36,120871,120872,120874,120876],{"class":38,"line":39},[36,120873,25057],{"class":2443},[36,120875,118984],{"class":405},[36,120877,120878],{"class":405}," ~\u002F.bashrc\n",[19,120880,120881],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,120883,120885],{"className":118924,"code":120884,"language":118926,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[33,120886,120887,120899],{"__ignoreMap":31},[36,120888,120889,120891,120894,120896],{"class":38,"line":39},[36,120890,25523],{"class":46},[36,120892,120893],{"class":42}," PATH",[36,120895,47],{"class":46},[36,120897,120898],{"class":42},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,120900,120901,120903,120906,120908],{"class":38,"line":66},[36,120902,25523],{"class":46},[36,120904,120905],{"class":42}," LD_LIBRARY_PATH",[36,120907,47],{"class":46},[36,120909,120910],{"class":42},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120912,120913],{},[519,120914],{"alt":31,"src":120915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,120917,120919],{"className":118924,"code":120918,"language":118926,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,120920,120921,120926,120932,120937],{"__ignoreMap":31},[36,120922,120923],{"class":38,"line":39},[36,120924,120925],{"class":69},"# 刷新当前终端的环境变量\n",[36,120927,120928,120930],{"class":38,"line":66},[36,120929,101294],{"class":53},[36,120931,120878],{"class":405},[36,120933,120934],{"class":38,"line":73},[36,120935,120936],{"class":69},"# 验证CUDA是否安装成功\n",[36,120938,120939,120942],{"class":38,"line":79},[36,120940,120941],{"class":2443},"nvcc",[36,120943,120944],{"class":53}," -V\n",[19,120946,120947],{},"出现下图这种则安装成功。",[19,120949,120950],{},[519,120951],{"alt":31,"src":120952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[596,120954,120956],{"id":120955},"_354-安装cudnn","3.5.4 安装cuDNN",[579,120958,120959],{},[582,120960,120961],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120963,120964,120965,120970],{},"前往 NVIDIA cuDNN 下载页面：",[43,120966,120969],{"href":120967,"rel":120968},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24345],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120972,120973],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120975,120976],{},[519,120977],{"alt":31,"src":120978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120980,120981],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120983,120984],{},[519,120985],{"alt":31,"src":120986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120988,120989],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120991,120992],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120994,120995],{},[770,120996,120997],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120999,121000],{},"下载好的：",[19,121002,121003],{},[519,121004],{"alt":31,"src":121005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[579,121007,121008],{"start":66},[582,121009,121010],{},"安装cuDNN",[19,121012,121013],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121015,121016],{},[519,121017],{"alt":31,"src":121018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121020,121021],{},"解压文件，并复制到对应位置完成安装",[26,121023,121025],{"className":118924,"code":121024,"language":118926,"meta":31,"style":31},"# 解压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",[33,121026,121027,121032,121043,121048,121055,121060,121076,121090,121095,121106,121115,121119,121135],{"__ignoreMap":31},[36,121028,121029],{"class":38,"line":39},[36,121030,121031],{"class":69},"# 解压cuDNN文件\n",[36,121033,121034,121037,121040],{"class":38,"line":66},[36,121035,121036],{"class":2443},"tar",[36,121038,121039],{"class":53}," -xvf",[36,121041,121042],{"class":405}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,121044,121045],{"class":38,"line":73},[36,121046,121047],{"class":69},"# cd进文件夹\n",[36,121049,121050,121052],{"class":38,"line":79},[36,121051,101677],{"class":53},[36,121053,121054],{"class":405}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,121056,121057],{"class":38,"line":85},[36,121058,121059],{"class":69},"# 复制cuDNN文件到CUDA目录\n",[36,121061,121062,121064,121066,121069,121071,121074],{"class":38,"line":419},[36,121063,25057],{"class":2443},[36,121065,28342],{"class":405},[36,121067,121068],{"class":405}," include\u002Fcudnn",[36,121070,1071],{"class":53},[36,121072,121073],{"class":405},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,121075,3154],{"class":42},[36,121077,121078,121080,121082,121085,121087],{"class":38,"line":425},[36,121079,25057],{"class":2443},[36,121081,28342],{"class":405},[36,121083,121084],{"class":405}," lib\u002Flibcudnn",[36,121086,1071],{"class":53},[36,121088,121089],{"class":405},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,121091,121092],{"class":38,"line":431},[36,121093,121094],{"class":69},"# 对比一下有没有缺文件\n",[36,121096,121097,121099,121102,121104],{"class":38,"line":437},[36,121098,27242],{"class":2443},[36,121100,121101],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,121103,1071],{"class":53},[36,121105,3154],{"class":42},[36,121107,121108,121110,121113],{"class":38,"line":443},[36,121109,27242],{"class":2443},[36,121111,121112],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,121114,119649],{"class":53},[36,121116,121117],{"class":38,"line":2092},[36,121118,120698],{"class":69},[36,121120,121121,121123,121125,121128,121130,121132],{"class":38,"line":2097},[36,121122,25057],{"class":2443},[36,121124,25060],{"class":405},[36,121126,121127],{"class":405}," a+r",[36,121129,121101],{"class":405},[36,121131,1071],{"class":53},[36,121133,121134],{"class":42},"   \n",[36,121136,121137,121139,121141,121143,121145],{"class":38,"line":2103},[36,121138,25057],{"class":2443},[36,121140,25060],{"class":405},[36,121142,121127],{"class":405},[36,121144,121112],{"class":405},[36,121146,119649],{"class":53},[579,121148,121149],{"start":73},[582,121150,121151],{},"检查是否安装成功",[26,121153,121155],{"className":118924,"code":121154,"language":118926,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,121156,121157,121162],{"__ignoreMap":31},[36,121158,121159],{"class":38,"line":39},[36,121160,121161],{"class":69},"# 检查cuDNN版本命令\n",[36,121163,121164,121167,121170,121172,121174,121177,121180],{"class":38,"line":66},[36,121165,121166],{"class":2443},"cat",[36,121168,121169],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,121171,25590],{"class":46},[36,121173,30717],{"class":2443},[36,121175,121176],{"class":405}," CUDNN_MAJOR",[36,121178,121179],{"class":53}," -A",[36,121181,48200],{"class":53},[19,121183,121184],{},"出现下图这样的就是安装成功了",[19,121186,121187],{},[519,121188],{"alt":31,"src":121189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[579,121191,121192],{"start":79},[582,121193,121194],{},"软链接(一般不需要)",[26,121196,121198],{"className":118924,"code":121197,"language":118926,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,121199,121200,121205],{"__ignoreMap":31},[36,121201,121202],{"class":38,"line":39},[36,121203,121204],{"class":69},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,121206,121207,121209],{"class":38,"line":66},[36,121208,25057],{"class":2443},[36,121210,121211],{"class":405}," ldconfig\n",[19,121213,121214],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,121216,121221],{"className":121217,"code":121218,"language":121219,"meta":121220,"style":31},"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",[33,121222,121223,121228,121233,121238,121243,121248,121253],{"__ignoreMap":31},[36,121224,121225],{"class":38,"line":39},[36,121226,121227],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,121229,121230],{"class":38,"line":66},[36,121231,121232],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,121234,121235],{"class":38,"line":73},[36,121236,121237],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,121239,121240],{"class":38,"line":79},[36,121241,121242],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,121244,121245],{"class":38,"line":85},[36,121246,121247],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,121249,121250],{"class":38,"line":419},[36,121251,121252],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,121254,121255],{"class":38,"line":425},[36,121256,121257],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121259,121260],{},"运行下方的命令",[26,121262,121264],{"className":118924,"code":121263,"language":118926,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,121265,121266,121271,121278,121283],{"__ignoreMap":31},[36,121267,121268],{"class":38,"line":39},[36,121269,121270],{"class":69},"# cd进入CUDA路径\n",[36,121272,121273,121275],{"class":38,"line":66},[36,121274,101677],{"class":53},[36,121276,121277],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,121279,121280],{"class":38,"line":73},[36,121281,121282],{"class":69}," # 查看本路径下的需要软链接的文件名\n",[36,121284,121285],{"class":38,"line":79},[36,121286,121287],{"class":2443}," ls\n",[19,121289,121290],{},[519,121291],{"alt":31,"src":121292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121294,121295,121296,18890,121299,18890,121302,121305],{},"如上图，我需要将",[33,121297,121298],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,121300,121301],{},"libcudnn_xxx_xxxxx.so.8",[33,121303,121304],{},"libcudnn_xxx_xxxxx.so","软链接",[26,121307,121309],{"className":118924,"code":121308,"language":118926,"meta":31,"style":31},"# 创建符号链接。对于每个 .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",[33,121310,121311,121316,121332,121346,121360,121374,121388,121402,121416,121421,121427,121432],{"__ignoreMap":31},[36,121312,121313],{"class":38,"line":39},[36,121314,121315],{"class":69},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,121317,121318,121320,121323,121326,121329],{"class":38,"line":66},[36,121319,25057],{"class":2443},[36,121321,121322],{"class":405}," ln",[36,121324,121325],{"class":53}," -sf",[36,121327,121328],{"class":405}," libcudnn_cnn_train.so.8.9.7",[36,121330,121331],{"class":405}," libcudnn_cnn_train.so.8\n",[36,121333,121334,121336,121338,121340,121343],{"class":38,"line":73},[36,121335,25057],{"class":2443},[36,121337,121322],{"class":405},[36,121339,121325],{"class":53},[36,121341,121342],{"class":405}," libcudnn_adv_infer.so.8.9.7",[36,121344,121345],{"class":405}," libcudnn_adv_infer.so.8\n",[36,121347,121348,121350,121352,121354,121357],{"class":38,"line":79},[36,121349,25057],{"class":2443},[36,121351,121322],{"class":405},[36,121353,121325],{"class":53},[36,121355,121356],{"class":405}," libcudnn_adv_train.so.8.9.7",[36,121358,121359],{"class":405}," libcudnn_adv_train.so.8\n",[36,121361,121362,121364,121366,121368,121371],{"class":38,"line":85},[36,121363,25057],{"class":2443},[36,121365,121322],{"class":405},[36,121367,121325],{"class":53},[36,121369,121370],{"class":405}," libcudnn_cnn_infer.so.8.9.7",[36,121372,121373],{"class":405}," libcudnn_cnn_infer.so.8\n",[36,121375,121376,121378,121380,121382,121385],{"class":38,"line":419},[36,121377,25057],{"class":2443},[36,121379,121322],{"class":405},[36,121381,121325],{"class":53},[36,121383,121384],{"class":405}," libcudnn.so.8.9.7",[36,121386,121387],{"class":405}," libcudnn.so.8\n",[36,121389,121390,121392,121394,121396,121399],{"class":38,"line":425},[36,121391,25057],{"class":2443},[36,121393,121322],{"class":405},[36,121395,121325],{"class":53},[36,121397,121398],{"class":405}," libcudnn_ops_infer.so.8.9.7",[36,121400,121401],{"class":405}," libcudnn_ops_infer.so.8\n",[36,121403,121404,121406,121408,121410,121413],{"class":38,"line":431},[36,121405,25057],{"class":2443},[36,121407,121322],{"class":405},[36,121409,121325],{"class":53},[36,121411,121412],{"class":405}," libcudnn_ops_train.so.8.9.7",[36,121414,121415],{"class":405}," libcudnn_ops_train.so.8\n",[36,121417,121418],{"class":38,"line":437},[36,121419,121420],{"class":69},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,121422,121423,121425],{"class":38,"line":443},[36,121424,25057],{"class":2443},[36,121426,121211],{"class":405},[36,121428,121429],{"class":38,"line":2092},[36,121430,121431],{"class":69},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,121433,121434,121436,121439,121442,121444,121447],{"class":38,"line":2097},[36,121435,27242],{"class":2443},[36,121437,121438],{"class":53}," -l",[36,121440,121441],{"class":405}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,121443,1071],{"class":53},[36,121445,121446],{"class":405},".so",[36,121448,119649],{"class":53},[596,121450,121452],{"id":121451},"_355-常见问题","3.5.5 常见问题",[579,121454,121455],{},[582,121456,121457],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,121459,121461],{"className":118924,"code":121460,"language":118926,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,121462,121463],{"__ignoreMap":31},[36,121464,121465,121467,121469],{"class":38,"line":39},[36,121466,25057],{"class":2443},[36,121468,118984],{"class":405},[36,121470,121471],{"class":405}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121473,121474],{},"blacklist-nouveau.conf文件内容如下：",[26,121476,121478],{"className":118924,"code":121477,"language":118926,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,121479,121480,121488,121495,121507,121517],{"__ignoreMap":31},[36,121481,121482,121485],{"class":38,"line":39},[36,121483,121484],{"class":2443},"blacklist",[36,121486,121487],{"class":405}," nouveau\n",[36,121489,121490,121492],{"class":38,"line":66},[36,121491,121484],{"class":2443},[36,121493,121494],{"class":405}," lbm-nouveau\n",[36,121496,121497,121499,121502,121505],{"class":38,"line":73},[36,121498,116331],{"class":2443},[36,121500,121501],{"class":405}," nouveau",[36,121503,121504],{"class":405}," modeset=",[36,121506,3565],{"class":53},[36,121508,121509,121512,121514],{"class":38,"line":79},[36,121510,121511],{"class":53},"alias",[36,121513,121501],{"class":405},[36,121515,121516],{"class":405}," off\n",[36,121518,121519,121521,121524],{"class":38,"line":85},[36,121520,121511],{"class":53},[36,121522,121523],{"class":405}," lbm-nouveau",[36,121525,121516],{"class":405},[19,121527,121528],{},"接着运行下方命令",[26,121530,121532],{"className":118924,"code":121531,"language":118926,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,121533,121534,121544,121549],{"__ignoreMap":31},[36,121535,121536,121538,121541],{"class":38,"line":39},[36,121537,25057],{"class":2443},[36,121539,121540],{"class":405}," update-initramfs",[36,121542,121543],{"class":53}," -u\n",[36,121545,121546],{"class":38,"line":66},[36,121547,121548],{"class":2443},"或者\n",[36,121550,121551,121553,121556],{"class":38,"line":73},[36,121552,25057],{"class":2443},[36,121554,121555],{"class":405}," dracut",[36,121557,121558],{"class":53}," --force\n",[19,121560,121561],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,121563,121565],{"className":118924,"code":121564,"language":118926,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,121566,121567],{"__ignoreMap":31},[36,121568,121569,121572,121574,121576],{"class":38,"line":39},[36,121570,121571],{"class":2443},"lsmod",[36,121573,25590],{"class":46},[36,121575,30717],{"class":2443},[36,121577,121487],{"class":405},[579,121579,121580],{"start":66},[582,121581,121582],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,121584,121586],{"className":118924,"code":121585,"language":118926,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,121587,121588],{"__ignoreMap":31},[36,121589,121590,121592,121594],{"class":38,"line":39},[36,121591,25057],{"class":2443},[36,121593,118984],{"class":405},[36,121595,121596],{"class":405}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121598,121599],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,121601,121603],{"className":118924,"code":121602,"language":118926,"meta":31,"style":31},"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",[33,121604,121605,121613,121621,121629,121636,121644,121654,121662],{"__ignoreMap":31},[36,121606,121607,121610],{"class":38,"line":39},[36,121608,121609],{"class":2443},"Section",[36,121611,121612],{"class":405}," \"OutputClass\"\n",[36,121614,121615,121618],{"class":38,"line":66},[36,121616,121617],{"class":2443},"   Identifier",[36,121619,121620],{"class":405}," \"nvidia\"\n",[36,121622,121623,121626],{"class":38,"line":73},[36,121624,121625],{"class":2443},"   MatchDriver",[36,121627,121628],{"class":405}," \"nvidia-drm\"\n",[36,121630,121631,121634],{"class":38,"line":79},[36,121632,121633],{"class":2443},"   Driver",[36,121635,121620],{"class":405},[36,121637,121638,121641],{"class":38,"line":85},[36,121639,121640],{"class":2443},"   Option",[36,121642,121643],{"class":405}," \"AllowEmptyInitialConfiguration\"\n",[36,121645,121646,121648,121651],{"class":38,"line":419},[36,121647,121640],{"class":2443},[36,121649,121650],{"class":405}," \"PrimaryGPU\"",[36,121652,121653],{"class":405}," \"yes\"\n",[36,121655,121656,121659],{"class":38,"line":425},[36,121657,121658],{"class":2443},"   ModulePath",[36,121660,121661],{"class":405}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,121663,121664],{"class":38,"line":431},[36,121665,121666],{"class":2443},"EndSection\n",[579,121668,121669],{"start":73},[582,121670,121671],{},"安装N卡驱动提示错误",[26,121673,121675],{"className":121217,"code":121674,"language":121219,"meta":121220,"style":31},"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",[33,121676,121677],{"__ignoreMap":31},[36,121678,121679],{"class":38,"line":39},[36,121680,121674],{},[579,121682,121683],{},[582,121684,121685],{},"检查当前运行的内核版本：",[19,121687,121688],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,121690,121692],{"className":117697,"code":121691,"language":117699,"meta":31,"style":31},"uname -r\n",[33,121693,121694],{"__ignoreMap":31},[36,121695,121696,121698],{"class":38,"line":39},[36,121697,70681],{"class":2443},[36,121699,121700],{"class":53}," -r\n",[579,121702,121703],{"start":66},[582,121704,121705],{},"安装内核开发文件：",[19,121707,121708,121709,121712],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,121710,121711],{},"kernel-devel"," 包。运行以下命令来安装：",[26,121714,121716],{"className":117697,"code":121715,"language":117699,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,121717,121718],{"__ignoreMap":31},[36,121719,121720,121722,121724,121726,121729,121731,121733,121735],{"class":38,"line":39},[36,121721,25057],{"class":2443},[36,121723,26796],{"class":405},[36,121725,24314],{"class":405},[36,121727,121728],{"class":405}," kernel-devel-",[36,121730,25580],{"class":42},[36,121732,70681],{"class":2443},[36,121734,120040],{"class":53},[36,121736,63],{"class":42},[19,121738,121739],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[579,121741,121742],{"start":73},[582,121743,121744],{},"安装内核源代码（如果需要）：",[19,121746,121747],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,121749,121751],{"className":117697,"code":121750,"language":117699,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,121752,121753],{"__ignoreMap":31},[36,121754,121755,121757,121759,121761,121764],{"class":38,"line":39},[36,121756,25057],{"class":2443},[36,121758,26796],{"class":405},[36,121760,24314],{"class":405},[36,121762,121763],{"class":405}," kernel-headers",[36,121765,121766],{"class":405}," kernel-source\n",[579,121768,121769],{"start":79},[582,121770,121771],{},"检查安装：",[19,121773,121774,121775,121778],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,121776,121777],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,121780,121782],{"className":117697,"code":121781,"language":117699,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,121783,121784],{"__ignoreMap":31},[36,121785,121786,121788],{"class":38,"line":39},[36,121787,27242],{"class":2443},[36,121789,121790],{"class":405}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121792,121793,121794,121797],{},"如果仍然遇到问题，可以通过 ",[33,121795,121796],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[539,121799,121800],{},"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":31,"searchDepth":66,"depth":66,"links":121802},[121803,121807,121817,121821,121822],{"id":118900,"depth":66,"text":118901,"children":121804},[121805,121806],{"id":118910,"depth":73,"text":118911},{"id":118920,"depth":73,"text":118921},{"id":119120,"depth":66,"text":119121,"children":121808},[121809,121810,121811,121812,121813,121814,121815,121816],{"id":119124,"depth":73,"text":119125},{"id":119194,"depth":73,"text":119195},{"id":119283,"depth":73,"text":119284},{"id":119528,"depth":73,"text":119529},{"id":119598,"depth":73,"text":119599},{"id":119665,"depth":73,"text":119666},{"id":119700,"depth":73,"text":119701},{"id":119755,"depth":73,"text":119756},{"id":119806,"depth":66,"text":119807,"children":121818},[121819,121820],{"id":119810,"depth":73,"text":119811},{"id":119890,"depth":73,"text":119891},{"id":120076,"depth":66,"text":120077},{"id":120249,"depth":66,"text":120250,"children":121823},[121824,121825,121826,121827,121828],{"id":120253,"depth":73,"text":120254},{"id":120294,"depth":73,"text":120295},{"id":120581,"depth":73,"text":120582},{"id":120955,"depth":73,"text":120956},{"id":121451,"depth":73,"text":121452},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118892,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121835,"title":121836,"body":121837,"description":550,"extension":551,"meta":122177,"navigation":553,"path":122178,"seo":122179,"stem":122180,"__hash__":122181},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121838,"toc":122175},[121839,121842,121847,121850,122096,122101,122104,122140,122143,122172],[10,121840,121836],{"id":121841},"_4-命令教程长期积累",[579,121843,121844],{},[582,121845,121846],{},"大多数命令",[19,121848,121849],{},"常用 Linux 命令速查：",[26,121851,121853],{"className":117697,"code":121852,"language":117699,"meta":31,"style":31},"# 文件与目录\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",[33,121854,121855,121860,121867,121874,121882,121889,121896,121904,121912,121919,121926,121934,121938,121943,121950,121958,121965,121969,121974,121981,121989,121997,122005,122013,122017,122022,122030,122037,122044,122052,122060,122064,122069,122078,122087],{"__ignoreMap":31},[36,121856,121857],{"class":38,"line":39},[36,121858,121859],{"class":69},"# 文件与目录\n",[36,121861,121862,121864],{"class":38,"line":66},[36,121863,27242],{"class":2443},[36,121865,121866],{"class":69},"        # 列出目录内容\n",[36,121868,121869,121871],{"class":38,"line":73},[36,121870,101677],{"class":53},[36,121872,121873],{"class":69},"        # 切换目录\n",[36,121875,121876,121879],{"class":38,"line":79},[36,121877,121878],{"class":53},"pwd",[36,121880,121881],{"class":69},"       # 显示当前路径\n",[36,121883,121884,121886],{"class":38,"line":85},[36,121885,101667],{"class":2443},[36,121887,121888],{"class":69},"     # 创建目录\n",[36,121890,121891,121893],{"class":38,"line":419},[36,121892,25803],{"class":2443},[36,121894,121895],{"class":69},"        # 删除文件或目录\n",[36,121897,121898,121901],{"class":38,"line":425},[36,121899,121900],{"class":2443},"cp",[36,121902,121903],{"class":69},"        # 复制文件或目录\n",[36,121905,121906,121909],{"class":38,"line":431},[36,121907,121908],{"class":2443},"mv",[36,121910,121911],{"class":69},"        # 移动\u002F重命名文件或目录\n",[36,121913,121914,121916],{"class":38,"line":437},[36,121915,101684],{"class":2443},[36,121917,121918],{"class":69},"     # 创建空文件\n",[36,121920,121921,121923],{"class":38,"line":443},[36,121922,121166],{"class":2443},[36,121924,121925],{"class":69},"       # 查看文件内容\n",[36,121927,121928,121931],{"class":38,"line":2092},[36,121929,121930],{"class":2443},"head\u002Ftail",[36,121932,121933],{"class":69}," # 查看文件头部\u002F尾部\n",[36,121935,121936],{"class":38,"line":2097},[36,121937,2880],{"emptyLinePlaceholder":553},[36,121939,121940],{"class":38,"line":2103},[36,121941,121942],{"class":69},"# 权限管理\n",[36,121944,121945,121947],{"class":38,"line":2108},[36,121946,25092],{"class":2443},[36,121948,121949],{"class":69},"     # 修改文件权限\n",[36,121951,121952,121955],{"class":38,"line":2122},[36,121953,121954],{"class":2443},"chown",[36,121956,121957],{"class":69},"     # 修改文件所有者\n",[36,121959,121960,121962],{"class":38,"line":2127},[36,121961,25057],{"class":2443},[36,121963,121964],{"class":69},"      # 以管理员身份执行\n",[36,121966,121967],{"class":38,"line":2133},[36,121968,2880],{"emptyLinePlaceholder":553},[36,121970,121971],{"class":38,"line":2154},[36,121972,121973],{"class":69},"# 系统信息\n",[36,121975,121976,121978],{"class":38,"line":2159},[36,121977,70681],{"class":2443},[36,121979,121980],{"class":69},"     # 系统信息\n",[36,121982,121983,121986],{"class":38,"line":2173},[36,121984,121985],{"class":2443},"df",[36,121987,121988],{"class":69},"        # 磁盘使用情况\n",[36,121990,121991,121994],{"class":38,"line":2178},[36,121992,121993],{"class":2443},"free",[36,121995,121996],{"class":69},"      # 内存使用情况\n",[36,121998,121999,122002],{"class":38,"line":2207},[36,122000,122001],{"class":2443},"top\u002Fhtop",[36,122003,122004],{"class":69},"  # 进程监控\n",[36,122006,122007,122010],{"class":38,"line":2212},[36,122008,122009],{"class":2443},"ps",[36,122011,122012],{"class":69},"        # 查看进程\n",[36,122014,122015],{"class":38,"line":2229},[36,122016,2880],{"emptyLinePlaceholder":553},[36,122018,122019],{"class":38,"line":2234},[36,122020,122021],{"class":69},"# 网络\n",[36,122023,122024,122027],{"class":38,"line":2239},[36,122025,122026],{"class":2443},"ping",[36,122028,122029],{"class":69},"      # 测试网络连通性\n",[36,122031,122032,122034],{"class":38,"line":2244},[36,122033,27330],{"class":2443},[36,122035,122036],{"class":69},"      # 发送 HTTP 请求\n",[36,122038,122039,122041],{"class":38,"line":2258},[36,122040,120690],{"class":2443},[36,122042,122043],{"class":69},"      # 下载文件\n",[36,122045,122046,122049],{"class":38,"line":2263},[36,122047,122048],{"class":2443},"ssh",[36,122050,122051],{"class":69},"       # 远程登录\n",[36,122053,122054,122057],{"class":38,"line":3057},[36,122055,122056],{"class":2443},"scp",[36,122058,122059],{"class":69},"       # 远程文件传输\n",[36,122061,122062],{"class":38,"line":3071},[36,122063,2880],{"emptyLinePlaceholder":553},[36,122065,122066],{"class":38,"line":3079},[36,122067,122068],{"class":69},"# 包管理（Debian\u002FUbuntu）\n",[36,122070,122071,122073,122075],{"class":38,"line":3084},[36,122072,117769],{"class":2443},[36,122074,117748],{"class":405},[36,122076,122077],{"class":69},"   # 更新软件源\n",[36,122079,122080,122082,122084],{"class":38,"line":3090},[36,122081,117769],{"class":2443},[36,122083,24314],{"class":405},[36,122085,122086],{"class":69},"  # 安装软件包\n",[36,122088,122089,122091,122093],{"class":38,"line":3096},[36,122090,117769],{"class":2443},[36,122092,26560],{"class":405},[36,122094,122095],{"class":69},"   # 卸载软件包\n",[579,122097,122098],{"start":66},[582,122099,122100],{},"KDE Dolphin 以root打开",[19,122102,122103],{},"kde5",[26,122105,122107],{"className":117697,"code":122106,"language":117699,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,122108,122109],{"__ignoreMap":31},[36,122110,122111,122114,122117,122120,122122,122124,122127,122130,122132,122135,122137],{"class":38,"line":39},[36,122112,122113],{"class":2443},"pkexec",[36,122115,122116],{"class":405}," env",[36,122118,122119],{"class":405}," DISPLAY=",[36,122121,28624],{"class":42},[36,122123,28682],{"class":405},[36,122125,122126],{"class":42},"$XAUTHORITY ",[36,122128,122129],{"class":405},"KDE_SESSION_VERSION=",[36,122131,938],{"class":53},[36,122133,122134],{"class":405}," KDE_FULL_SESSION=",[36,122136,1843],{"class":53},[36,122138,122139],{"class":405}," dolphin\n",[19,122141,122142],{},"kde6",[26,122144,122146],{"className":117697,"code":122145,"language":117699,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,122147,122148],{"__ignoreMap":31},[36,122149,122150,122152,122154,122156,122158,122160,122162,122164,122166,122168,122170],{"class":38,"line":39},[36,122151,122113],{"class":2443},[36,122153,122116],{"class":405},[36,122155,122119],{"class":405},[36,122157,28624],{"class":42},[36,122159,28682],{"class":405},[36,122161,122126],{"class":42},[36,122163,122129],{"class":405},[36,122165,101],{"class":53},[36,122167,122134],{"class":405},[36,122169,1843],{"class":53},[36,122171,122139],{"class":405},[539,122173,122174],{},"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":31,"searchDepth":66,"depth":66,"links":122176},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121836,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122183,"title":122184,"body":122185,"description":550,"extension":551,"meta":122199,"navigation":553,"path":122200,"seo":122201,"stem":122202,"__hash__":122203},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122186,"toc":122197},[122187,122190],[10,122188,122184],{"id":122189},"_5-各种环境配置",[19,122191,122192],{},[43,122193,122196],{"href":122194,"rel":122195},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24345],"电控组环境搭建大全",{"title":31,"searchDepth":66,"depth":66,"links":122198},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122184,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122205,"title":122206,"body":122207,"description":550,"extension":551,"meta":122555,"navigation":553,"path":122556,"seo":122557,"stem":122558,"__hash__":122559},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122208,"toc":122547},[122209,122212,122216,122220,122224,122229,122236,122240,122533,122537,122544],[10,122210,122206],{"id":122211},"_6-拓展功能",[14,122213,122215],{"id":122214},"_61-wine","6.1 Wine",[14,122217,122219],{"id":122218},"_62-android","6.2 Android",[596,122221,122223],{"id":122222},"_621-i卡a卡","6.2.1 I卡、A卡",[579,122225,122226],{},[582,122227,122228],{},"Wayland-Waydroid(体验超级好)",[19,122230,122231,122232],{},"Waydroid 官网与安装指南：",[43,122233,122234],{"href":122234,"rel":122235},"https:\u002F\u002Fwaydro.id\u002F",[24345],[596,122237,122239],{"id":122238},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[579,122241,122242],{},[582,122243,122244,122245,122247,122248,122252,122254,122257,122262,122459],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54193,122246],{},"BlissOS 官网下载：",[43,122249,122250],{"href":122250,"rel":122251},"https:\u002F\u002Fblissos.org\u002F",[24345],[54193,122253],{},[519,122255],{"alt":31,"src":122256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[579,122258,122259],{"start":73},[582,122260,122261],{},"比较推荐的配置",[26,122263,122265],{"className":117697,"code":122264,"language":117699,"meta":31,"style":31},"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",[33,122266,122267,122274,122284,122294,122304,122316,122326,122333,122343,122352,122361,122371,122381,122390,122400,122410,122422,122432,122441,122451],{"__ignoreMap":31},[36,122268,122269,122272],{"class":38,"line":39},[36,122270,122271],{"class":2443},"qemu-system-x86_64",[36,122273,25159],{"class":53},[36,122275,122276,122279,122282],{"class":38,"line":66},[36,122277,122278],{"class":53},"        -M",[36,122280,122281],{"class":405}," q35,vmport=off",[36,122283,25159],{"class":53},[36,122285,122286,122289,122292],{"class":38,"line":73},[36,122287,122288],{"class":53},"        -accel",[36,122290,122291],{"class":405}," kvm",[36,122293,25159],{"class":53},[36,122295,122296,122299,122302],{"class":38,"line":79},[36,122297,122298],{"class":53},"        -cpu",[36,122300,122301],{"class":405}," qemu64,+sse3,+sse4.2",[36,122303,25159],{"class":53},[36,122305,122306,122309,122312,122314],{"class":38,"line":85},[36,122307,122308],{"class":53},"        -smp",[36,122310,122311],{"class":405}," 8,cores=",[36,122313,912],{"class":53},[36,122315,25159],{"class":53},[36,122317,122318,122321,122324],{"class":38,"line":419},[36,122319,122320],{"class":53},"        -m",[36,122322,122323],{"class":405}," 6G",[36,122325,25159],{"class":53},[36,122327,122328,122331],{"class":38,"line":425},[36,122329,122330],{"class":53},"        -usb",[36,122332,25159],{"class":53},[36,122334,122335,122338,122341],{"class":38,"line":431},[36,122336,122337],{"class":53},"        -device",[36,122339,122340],{"class":405}," virtio-tablet",[36,122342,25159],{"class":53},[36,122344,122345,122347,122350],{"class":38,"line":437},[36,122346,122337],{"class":53},[36,122348,122349],{"class":405}," virtio-keyboard",[36,122351,25159],{"class":53},[36,122353,122354,122356,122359],{"class":38,"line":443},[36,122355,122337],{"class":53},[36,122357,122358],{"class":405}," usb-tablet",[36,122360,25159],{"class":53},[36,122362,122363,122366,122369],{"class":38,"line":2092},[36,122364,122365],{"class":53},"        -bios",[36,122367,122368],{"class":405}," OVMF-pure-efi64.fd",[36,122370,25159],{"class":53},[36,122372,122373,122376,122379],{"class":38,"line":2097},[36,122374,122375],{"class":53},"        -net",[36,122377,122378],{"class":405}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,122380,25159],{"class":53},[36,122382,122383,122385,122388],{"class":38,"line":2103},[36,122384,122375],{"class":53},[36,122386,122387],{"class":405}," nic,model=virtio",[36,122389,25159],{"class":53},[36,122391,122392,122395,122398],{"class":38,"line":2108},[36,122393,122394],{"class":53},"        -audio",[36,122396,122397],{"class":405}," sdl,model=hda",[36,122399,25159],{"class":53},[36,122401,122402,122405,122408],{"class":38,"line":2122},[36,122403,122404],{"class":53},"        -display",[36,122406,122407],{"class":405}," sdl,gl=on,show-cursor=on",[36,122409,25159],{"class":53},[36,122411,122412,122414,122417,122420],{"class":38,"line":2127},[36,122413,122337],{"class":53},[36,122415,122416],{"class":405}," virtio-vga-gl,xres=1920,yres=",[36,122418,122419],{"class":53},"1080",[36,122421,25159],{"class":53},[36,122423,122424,122427,122430],{"class":38,"line":2133},[36,122425,122426],{"class":53},"        -drive",[36,122428,122429],{"class":405}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,122431,25159],{"class":53},[36,122433,122434,122436,122439],{"class":38,"line":2154},[36,122435,122426],{"class":53},[36,122437,122438],{"class":405}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,122440,25159],{"class":53},[36,122442,122443,122446,122449],{"class":38,"line":2159},[36,122444,122445],{"class":53},"        -monitor",[36,122447,122448],{"class":405}," stdio",[36,122450,25159],{"class":53},[36,122452,122453,122456],{"class":38,"line":2173},[36,122454,122455],{"class":53},"        -serial",[36,122457,122458],{"class":405}," none\n",[579,122460,122461],{"start":85},[582,122462,122463,122464],{},"常用操作：",[579,122465,122466,122469,122525],{},[582,122467,122468],{},"全屏：Ctrl+Alt+F",[582,122470,122471,122472,122477],{},"adb调试",[579,122473,122474],{},[582,122475,122476],{},"使Linux与Android用ADB连接。",[26,122478,122480],{"className":117697,"code":122479,"language":117699,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[33,122481,122482,122487,122498,122503,122515,122520],{"__ignoreMap":31},[36,122483,122484],{"class":38,"line":39},[36,122485,122486],{"class":69},"# 连接安卓\n",[36,122488,122489,122492,122495],{"class":38,"line":66},[36,122490,122491],{"class":2443},"adb",[36,122493,122494],{"class":405}," connect",[36,122496,122497],{"class":53}," 127.0.0.1\n",[36,122499,122500],{"class":38,"line":73},[36,122501,122502],{"class":69},"# 打开shell\n",[36,122504,122505,122507,122509,122512],{"class":38,"line":79},[36,122506,122491],{"class":2443},[36,122508,27364],{"class":53},[36,122510,122511],{"class":405}," 127.0.0.1:5555",[36,122513,122514],{"class":405}," shell\n",[36,122516,122517],{"class":38,"line":85},[36,122518,122519],{"class":69},"# 使用root权限\n",[36,122521,122522],{"class":38,"line":419},[36,122523,122524],{"class":2443},"su\n",[582,122526,122527,122528],{},"中文输入法",[579,122529,122530],{},[582,122531,122532],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122534,122536],{"id":122535},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122538,122539,122540],{},"rEFInd 官网与文档：",[43,122541,122542],{"href":122542,"rel":122543},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24345],[539,122545,122546],{},"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":31,"searchDepth":66,"depth":66,"links":122548},[122549,122550,122554],{"id":122214,"depth":66,"text":122215},{"id":122218,"depth":66,"text":122219,"children":122551},[122552,122553],{"id":122222,"depth":73,"text":122223},{"id":122238,"depth":73,"text":122239},{"id":122535,"depth":66,"text":122536},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122206,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122561,"title":122562,"body":122563,"description":550,"extension":551,"meta":125862,"navigation":553,"path":125863,"seo":125864,"stem":125865,"__hash__":125866},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122564,"toc":125836},[122565,122568,122572,122575,122582,122832,122835,122907,122910,122914,122918,122923,122926,122929,122932,122937,122940,122943,122946,122951,122954,122959,122962,122965,122970,122973,122978,122981,122985,122989,122992,122997,123000,123014,123017,123020,123029,123032,123041,123044,123047,123056,123059,123068,123071,123074,123083,123086,123089,123104,123107,123110,123119,123124,123127,123130,123139,123142,123151,123154,123163,123166,123175,123180,123183,123191,123196,123199,123208,123211,123219,123224,123227,123236,123239,123242,123246,123249,123254,123257,123262,123276,123281,123286,123297,123302,123308,123313,123328,123333,123336,123341,123346,123351,123359,123364,123371,123376,123387,123392,123395,123399,123402,123405,123410,123413,123432,123437,123440,123449,123454,123457,123479,123482,123512,123515,123520,123523,123537,123542,123561,123564,123567,123572,123584,123589,123594,123597,123602,123605,123620,123623,123628,123633,123637,123642,123682,123685,123689,123695,123701,123706,123709,123716,123721,123728,123731,123734,123741,123755,123758,123818,123821,123835,123847,123850,123853,123856,123920,123923,123926,123929,123949,123952,123957,123964,123968,123971,123975,123980,123985,123989,123992,123995,124037,124042,124045,124067,124082,124084,124089,124101,124161,124163,124165,124219,124221,124223,124229,124234,124237,124242,124246,124249,124311,124316,124319,124321,124325,124337,124419,124421,124423,124477,124483,124485,124489,124494,124496,124501,124505,124525,124560,124564,124567,124570,124573,124580,124583,124595,124598,124613,124616,124635,124683,124686,124703,124706,124720,124725,124728,124737,124752,124764,124802,124807,124816,124821,124826,124852,124861,124865,124869,124874,124877,124881,124885,124890,124893,124898,124901,124906,124909,124914,124917,124921,124926,124929,124934,124937,124941,124946,124949,124954,124957,124962,124965,124969,124974,124977,124982,124985,124990,124993,124997,125002,125005,125010,125013,125018,125021,125026,125029,125034,125037,125042,125045,125049,125054,125057,125062,125069,125073,125078,125081,125086,125089,125093,125098,125101,125104,125107,125110,125113,125117,125120,125130,125135,125140,125162,125167,125172,125179,125183,125188,125191,125194,125199,125202,125205,125208,125211,125214,125217,125220,125223,125226,125229,125232,125235,125240,125245,125250,125255,125260,125265,125270,125273,125277,125280,125284,125289,125294,125299,125304,125308,125314,125322,125327,125330,125335,125350,125353,125358,125392,125407,125410,125465,125491,125503,125506,125515,125518,125533,125538,125541,125547,125552,125555,125560,125563,125568,125573,125580,125583,125598,125601,125636,125641,125649,125687,125690,125693,125698,125701,125706,125717,125751,125756,125759,125768,125773,125779,125782,125787,125796,125801,125804,125807,125812,125820,125823,125828,125833],[10,122566,122562],{"id":122567},"_7-其他操作",[14,122569,122571],{"id":122570},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122573,122574],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122576,122577,122578,122581],{},"进入工控机的硬盘目录，进入",[33,122579,122580],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,122583,122587],{"className":122584,"code":122585,"language":122586,"meta":31,"style":31},"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",[33,122588,122589,122597,122608,122615,122622,122634,122641,122653,122664,122675,122682,122689,122696,122708,122720,122727,122739,122751,122758,122770,122782,122794,122805,122812,122823],{"__ignoreMap":31},[36,122590,122591,122594],{"class":38,"line":39},[36,122592,122593],{"class":51777},"network",[36,122595,122596],{"class":42},": \n",[36,122598,122599,122602,122604,122606],{"class":38,"line":66},[36,122600,122601],{"class":51777},"  version",[36,122603,51914],{"class":42},[36,122605,96],{"class":53},[36,122607,3154],{"class":42},[36,122609,122610,122613],{"class":38,"line":73},[36,122611,122612],{"class":51777},"  wifis",[36,122614,122596],{"class":42},[36,122616,122617,122620],{"class":38,"line":79},[36,122618,122619],{"class":51777},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,122621,122596],{"class":42},[36,122623,122624,122627,122629,122632],{"class":38,"line":85},[36,122625,122626],{"class":51777},"      renderer",[36,122628,51914],{"class":42},[36,122630,122631],{"class":405},"NetworkManager",[36,122633,3154],{"class":42},[36,122635,122636,122639],{"class":38,"line":419},[36,122637,122638],{"class":51777},"      match",[36,122640,122596],{"class":42},[36,122642,122643,122646,122648,122651],{"class":38,"line":425},[36,122644,122645],{"class":51777},"        name",[36,122647,51914],{"class":42},[36,122649,122650],{"class":405},"\"wlan0\"",[36,122652,3154],{"class":42},[36,122654,122655,122658,122660,122662],{"class":38,"line":431},[36,122656,122657],{"class":51777},"      dhcp4",[36,122659,51914],{"class":42},[36,122661,1843],{"class":53},[36,122663,3154],{"class":42},[36,122665,122666,122669,122671,122673],{"class":38,"line":437},[36,122667,122668],{"class":51777},"      dhcp6",[36,122670,51914],{"class":42},[36,122672,1843],{"class":53},[36,122674,3154],{"class":42},[36,122676,122677,122680],{"class":38,"line":443},[36,122678,122679],{"class":51777},"      access-points",[36,122681,122596],{"class":42},[36,122683,122684,122687],{"class":38,"line":2092},[36,122685,122686],{"class":405},"        \"EMIS_Vinci_Robocon_5G\"",[36,122688,122596],{"class":42},[36,122690,122691,122694],{"class":38,"line":2097},[36,122692,122693],{"class":51777},"          auth",[36,122695,122596],{"class":42},[36,122697,122698,122701,122703,122706],{"class":38,"line":2103},[36,122699,122700],{"class":51777},"            key-management",[36,122702,51914],{"class":42},[36,122704,122705],{"class":405},"\"psk\"",[36,122707,3154],{"class":42},[36,122709,122710,122713,122715,122718],{"class":38,"line":2108},[36,122711,122712],{"class":51777},"            password",[36,122714,51914],{"class":42},[36,122716,122717],{"class":405},"\"vinci666\"",[36,122719,3154],{"class":42},[36,122721,122722,122725],{"class":38,"line":2122},[36,122723,122724],{"class":51777},"          networkmanager",[36,122726,122596],{"class":42},[36,122728,122729,122732,122734,122737],{"class":38,"line":2127},[36,122730,122731],{"class":51777},"            uuid",[36,122733,51914],{"class":42},[36,122735,122736],{"class":405},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,122738,3154],{"class":42},[36,122740,122741,122744,122746,122749],{"class":38,"line":2133},[36,122742,122743],{"class":51777},"            name",[36,122745,51914],{"class":42},[36,122747,122748],{"class":405},"\"EMIS_Vinci_Robocon_5G\"",[36,122750,3154],{"class":42},[36,122752,122753,122756],{"class":38,"line":2154},[36,122754,122755],{"class":51777},"            passthrough",[36,122757,122596],{"class":42},[36,122759,122760,122763,122765,122768],{"class":38,"line":2159},[36,122761,122762],{"class":51777},"              wifi-security.auth-alg",[36,122764,51914],{"class":42},[36,122766,122767],{"class":405},"\"open\"",[36,122769,3154],{"class":42},[36,122771,122772,122775,122777,122780],{"class":38,"line":2173},[36,122773,122774],{"class":51777},"              ipv6.addr-gen-mode",[36,122776,51914],{"class":42},[36,122778,122779],{"class":405},"\"default\"",[36,122781,3154],{"class":42},[36,122783,122784,122787,122789,122792],{"class":38,"line":2178},[36,122785,122786],{"class":51777},"              ipv6.ip6-privacy",[36,122788,51914],{"class":42},[36,122790,122791],{"class":405},"\"-1\"",[36,122793,3154],{"class":42},[36,122795,122796,122799,122801,122803],{"class":38,"line":2207},[36,122797,122798],{"class":51777},"              proxy._",[36,122800,51914],{"class":42},[36,122802,8132],{"class":405},[36,122804,3154],{"class":42},[36,122806,122807,122810],{"class":38,"line":2212},[36,122808,122809],{"class":51777},"      networkmanager",[36,122811,122596],{"class":42},[36,122813,122814,122817,122819,122821],{"class":38,"line":2229},[36,122815,122816],{"class":51777},"        uuid",[36,122818,51914],{"class":42},[36,122820,122736],{"class":405},[36,122822,3154],{"class":42},[36,122824,122825,122827,122829],{"class":38,"line":2234},[36,122826,122645],{"class":51777},[36,122828,51914],{"class":42},[36,122830,122831],{"class":405},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122833,122834],{},"将其改为新wifi的名和密码：",[26,122836,122838],{"className":122584,"code":122837,"language":122586,"meta":31,"style":31},"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",[33,122839,122840,122846,122855,122861,122868,122877,122885,122891,122897],{"__ignoreMap":31},[36,122841,122842,122844],{"class":38,"line":39},[36,122843,122593],{"class":51777},[36,122845,4219],{"class":42},[36,122847,122848,122850,122852],{"class":38,"line":66},[36,122849,122601],{"class":51777},[36,122851,51914],{"class":42},[36,122853,122854],{"class":53},"2\n",[36,122856,122857,122859],{"class":38,"line":73},[36,122858,122612],{"class":51777},[36,122860,4219],{"class":42},[36,122862,122863,122866],{"class":38,"line":79},[36,122864,122865],{"class":51777},"    wlan0",[36,122867,4219],{"class":42},[36,122869,122870,122872,122874],{"class":38,"line":85},[36,122871,122657],{"class":51777},[36,122873,51914],{"class":42},[36,122875,122876],{"class":53},"true\n",[36,122878,122879,122881,122883],{"class":38,"line":419},[36,122880,122668],{"class":51777},[36,122882,51914],{"class":42},[36,122884,122876],{"class":53},[36,122886,122887,122889],{"class":38,"line":425},[36,122888,122679],{"class":51777},[36,122890,4219],{"class":42},[36,122892,122893,122895],{"class":38,"line":431},[36,122894,122686],{"class":405},[36,122896,4219],{"class":42},[36,122898,122899,122902,122904],{"class":38,"line":437},[36,122900,122901],{"class":51777},"          password",[36,122903,51914],{"class":42},[36,122905,122906],{"class":405},"\"vinci666\"\n",[19,122908,122909],{},"工控机开机即可连上网。",[14,122911,122913],{"id":122912},"_72-ssh远程开发","7.2 SSH远程开发",[596,122915,122917],{"id":122916},"_721-环境准备","7.2.1 环境准备",[19,122919,122920],{},[770,122921,122922],{},"1.硬件准备",[19,122924,122925],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122927,122928],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122930,122931],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122933,122934],{},[770,122935,122936],{},"2.设置固定IP",[19,122938,122939],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122941,122942],{},"1.进入设置界面",[19,122944,122945],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122947,122948],{},[519,122949],{"alt":31,"src":122950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122952,122953],{},"2.配置所连接的网络",[19,122955,122956],{},[519,122957],{"alt":31,"src":122958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122960,122961],{},"3.设置固定IP",[19,122963,122964],{},"查看当前IP地址。",[19,122966,122967],{},[519,122968],{"alt":31,"src":122969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122971,122972],{},"设置固定IP。",[19,122974,122975],{},[519,122976],{"alt":31,"src":122977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122979,122980],{},"至此，IP配置完毕。",[596,122982,122984],{"id":122983},"_722-环境搭建","7.2.2 环境搭建",[19,122986,122987],{},[770,122988,26234],{},[19,122990,122991],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122993,122994],{},[770,122995,122996],{},"实现",[19,122998,122999],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[579,123001,123002,123005,123008,123011],{},[582,123003,123004],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[582,123006,123007],{},"远程主机启动SSH服务；",[582,123009,123010],{},"本地主机登陆远程主机；",[582,123012,123013],{},"实现数据传输。",[19,123015,123016],{},"1.安装SSH客户端与服务端",[19,123018,123019],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,123021,123023],{"className":121217,"code":123022,"language":121219,"meta":121220,"style":31}," sudo apt install openssh-server\n",[33,123024,123025],{"__ignoreMap":31},[36,123026,123027],{"class":38,"line":39},[36,123028,123022],{},[19,123030,123031],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,123033,123035],{"className":121217,"code":123034,"language":121219,"meta":121220,"style":31},"sudo apt install openssh-client\n",[33,123036,123037],{"__ignoreMap":31},[36,123038,123039],{"class":38,"line":39},[36,123040,123034],{},[19,123042,123043],{},"2.远程主机启动SSH服务",[19,123045,123046],{},"远程主机启动 ssh 服务命令如下：",[26,123048,123050],{"className":121217,"code":123049,"language":121219,"meta":121220,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,123051,123052],{"__ignoreMap":31},[36,123053,123054],{"class":38,"line":39},[36,123055,123049],{},[19,123057,123058],{},"启动后可使用如下命令查看服务是否正常运行：",[26,123060,123062],{"className":121217,"code":123061,"language":121219,"meta":121220,"style":31},"ps -e | grep ssh\n",[33,123063,123064],{"__ignoreMap":31},[36,123065,123066],{"class":38,"line":39},[36,123067,123061],{},[19,123069,123070],{},"如果启动成功，会包含 sshd 程序。",[19,123072,123073],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,123075,123077],{"className":121217,"code":123076,"language":121219,"meta":121220,"style":31},"sudo systemctl enable ssh\n",[33,123078,123079],{"__ignoreMap":31},[36,123080,123081],{"class":38,"line":39},[36,123082,123076],{},[19,123084,123085],{},"3.本地远程登录",[19,123087,123088],{},"登录远程主机可以调用如下命令:",[26,123090,123092],{"className":117697,"code":123091,"language":117699,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,123093,123094],{"__ignoreMap":31},[36,123095,123096,123098,123101],{"class":38,"line":39},[36,123097,122048],{"class":2443},[36,123099,123100],{"class":53}," -X",[36,123102,123103],{"class":405}," 用户名@ip地址\n",[19,123105,123106],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123108,123109],{},"如果退出，可以调用exit命令：",[26,123111,123113],{"className":121217,"code":123112,"language":121219,"meta":121220,"style":31},"exit\n",[33,123114,123115],{"__ignoreMap":31},[36,123116,123117],{"class":38,"line":39},[36,123118,123112],{},[19,123120,123121],{},[770,123122,123123],{},"4.实现数据传输",[19,123125,123126],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123128,123129],{},"上传文件指令格式如下：",[26,123131,123133],{"className":121217,"code":123132,"language":121219,"meta":121220,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,123134,123135],{"__ignoreMap":31},[36,123136,123137],{"class":38,"line":39},[36,123138,123132],{},[19,123140,123141],{},"上传文件夹指令格式如下：",[26,123143,123145],{"className":121217,"code":123144,"language":121219,"meta":121220,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,123146,123147],{"__ignoreMap":31},[36,123148,123149],{"class":38,"line":39},[36,123150,123144],{},[19,123152,123153],{},"下载文件指令格式如下：",[26,123155,123157],{"className":121217,"code":123156,"language":121219,"meta":121220,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,123158,123159],{"__ignoreMap":31},[36,123160,123161],{"class":38,"line":39},[36,123162,123156],{},[19,123164,123165],{},"下载文件夹指令格式如下：",[26,123167,123169],{"className":121217,"code":123168,"language":121219,"meta":121220,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,123170,123171],{"__ignoreMap":31},[36,123172,123173],{"class":38,"line":39},[36,123174,123168],{},[19,123176,123177],{},[770,123178,123179],{},"优化",[19,123181,123182],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[579,123184,123185,123188],{},[582,123186,123187],{},"本地生成密钥对；",[582,123189,123190],{},"将公钥上传至远程主机。",[19,123192,123193],{},[770,123194,123195],{},"1.生成密钥对",[19,123197,123198],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,123200,123202],{"className":121217,"code":123201,"language":121219,"meta":121220,"style":31},"ssh-keygen\n",[33,123203,123204],{"__ignoreMap":31},[36,123205,123206],{"class":38,"line":39},[36,123207,123201],{},[19,123209,123210],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[579,123212,123213,123216],{},[582,123214,123215],{},"id_rsa （私钥）；",[582,123217,123218],{},"id_rsa.pub (公钥)。",[19,123220,123221],{},[770,123222,123223],{},"2.公钥上传",[19,123225,123226],{},"上传指令如下：",[26,123228,123230],{"className":121217,"code":123229,"language":121219,"meta":121220,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,123231,123232],{"__ignoreMap":31},[36,123233,123234],{"class":38,"line":39},[36,123235,123229],{},[19,123237,123238],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123240,123241],{},"以后再远程登录就无需录入密码了。",[596,123243,123245],{"id":123244},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123247,123248],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123250,123251],{},[770,123252,123253],{},"1.准备工作",[19,123255,123256],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123258,123259],{},[770,123260,123261],{},"2.为VScode安装远程开发插件",[19,123263,123264,123265,123268,123269,123272,123273,28866],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,123266,123267],{},"扩展：商店","的搜索栏输入",[33,123270,123271],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,123274,123275],{},"安装",[19,123277,123278],{},[519,123279],{"alt":31,"src":123280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123282,123283],{},[770,123284,123285],{},"3.配置远程连接",[19,123287,123288,123289,123292,123293,123296],{},"步骤1：使用快捷键",[33,123290,123291],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,123294,123295],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123298,123299],{},[519,123300],{"alt":31,"src":123301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123303,123304,123305,28866],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,123306,123307],{},"Add New SSH Host",[19,123309,123310],{},[519,123311],{"alt":31,"src":123312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123314,123315,123316,123319,123320,123323,123324,123327],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,123317,123318],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,123321,123322],{},"ubuntu","需要替换为你的登录用户名，",[33,123325,123326],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123329,123330],{},[519,123331],{"alt":31,"src":123332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123334,123335],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123337,123338],{},[519,123339],{"alt":31,"src":123340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123342,123343],{},[519,123344],{"alt":31,"src":123345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123347,123348],{},[770,123349,123350],{},"4.使用",[19,123352,123353,123354,123292,123356,123358],{},"步骤1：继续使用快捷键",[33,123355,123291],{},[33,123357,123295],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123360,123361],{},[519,123362],{"alt":31,"src":123363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123365,123366,123367,123370],{},"或者，也可以点击侧边栏的",[33,123368,123369],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123372,123373],{},[519,123374],{"alt":31,"src":123375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123377,123378,123379,123382,123383,123386],{},"步骤2：选择菜单栏的",[33,123380,123381],{},"文件","下的",[33,123384,123385],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123388,123389],{},[519,123390],{"alt":31,"src":123391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123393,123394],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123396,123398],{"id":123397},"_73-远程桌面","7.3 远程桌面",[19,123400,123401],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123403,123404],{},"我们选择使用VNC来看。",[579,123406,123407],{},[582,123408,123409],{},"安装VNC服务器：",[19,123411,123412],{},"这里以TigerVNC为例进行安装：",[26,123414,123416],{"className":117697,"code":123415,"language":117699,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,123417,123418],{"__ignoreMap":31},[36,123419,123420,123422,123424,123426,123429],{"class":38,"line":39},[36,123421,25057],{"class":2443},[36,123423,117718],{"class":405},[36,123425,24314],{"class":405},[36,123427,123428],{"class":405}," tigervnc-standalone-server",[36,123430,123431],{"class":405}," tigervnc-common\n",[579,123433,123434],{"start":66},[582,123435,123436],{},"设置VNC密码：",[19,123438,123439],{},"为VNC用户设置密码，运行以下命令：",[26,123441,123443],{"className":117697,"code":123442,"language":117699,"meta":31,"style":31},"vncpasswd\n",[33,123444,123445],{"__ignoreMap":31},[36,123446,123447],{"class":38,"line":39},[36,123448,123442],{"class":2443},[579,123450,123451],{"start":73},[582,123452,123453],{},"配置VNC启动脚本:",[19,123455,123456],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,123458,123460],{"className":117697,"code":123459,"language":117699,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,123461,123462,123471],{"__ignoreMap":31},[36,123463,123464,123466,123468],{"class":38,"line":39},[36,123465,101667],{"class":2443},[36,123467,29697],{"class":53},[36,123469,123470],{"class":405}," ~\u002F.vnc\n",[36,123472,123473,123476],{"class":38,"line":66},[36,123474,123475],{"class":2443},"nano",[36,123477,123478],{"class":405}," ~\u002F.vnc\u002Fxstartup\n",[19,123480,123481],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,123483,123485],{"className":117697,"code":123484,"language":117699,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,123486,123487,123492,123500,123507],{"__ignoreMap":31},[36,123488,123489],{"class":38,"line":39},[36,123490,123491],{"class":69},"#!\u002Fbin\u002Fsh\n",[36,123493,123494,123497],{"class":38,"line":66},[36,123495,123496],{"class":53},"unset",[36,123498,123499],{"class":405}," SESSION_MANAGER\n",[36,123501,123502,123504],{"class":38,"line":73},[36,123503,123496],{"class":53},[36,123505,123506],{"class":405}," DBUS_SESSION_BUS_ADDRESS\n",[36,123508,123509],{"class":38,"line":79},[36,123510,123511],{"class":2443},"gnome-session\n",[19,123513,123514],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[579,123516,123517],{"start":79},[582,123518,123519],{},"给予执行权限：",[19,123521,123522],{},"为xstartup文件设置执行权限：",[26,123524,123526],{"className":117697,"code":123525,"language":117699,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,123527,123528],{"__ignoreMap":31},[36,123529,123530,123532,123535],{"class":38,"line":39},[36,123531,25092],{"class":2443},[36,123533,123534],{"class":405}," +x",[36,123536,123478],{"class":405},[579,123538,123539],{"start":85},[582,123540,123541],{},"启动VNC服务器：",[26,123543,123545],{"className":117697,"code":123544,"language":117699,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,123546,123547],{"__ignoreMap":31},[36,123548,123549,123552,123555,123558],{"class":38,"line":39},[36,123550,123551],{"class":2443},"vncserver",[36,123553,123554],{"class":53}," -geometry",[36,123556,123557],{"class":405}," 1920x1080",[36,123559,123560],{"class":53}," -localhost=0\n",[19,123562,123563],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123565,123566],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[579,123568,123569],{"start":419},[582,123570,123571],{},"查看已开启的VNC服务器：",[26,123573,123575],{"className":117697,"code":123574,"language":117699,"meta":31,"style":31},"vncserver -list\n",[33,123576,123577],{"__ignoreMap":31},[36,123578,123579,123581],{"class":38,"line":39},[36,123580,123551],{"class":2443},[36,123582,123583],{"class":53}," -list\n",[19,123585,123586],{},[519,123587],{"alt":31,"src":123588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[579,123590,123591],{"start":425},[582,123592,123593],{},"连接到VNC服务器：",[19,123595,123596],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[579,123598,123599],{"start":431},[582,123600,123601],{},"停止VNC服务器：",[19,123603,123604],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,123606,123608],{"className":117697,"code":123607,"language":117699,"meta":31,"style":31},"vncserver -kill :1\n",[33,123609,123610],{"__ignoreMap":31},[36,123611,123612,123614,123617],{"class":38,"line":39},[36,123613,123551],{"class":2443},[36,123615,123616],{"class":53}," -kill",[36,123618,123619],{"class":405}," :1\n",[19,123621,123622],{},"将:1替换为你实际使用的显示编号。",[19,123624,123625],{},[519,123626],{"alt":31,"src":123627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123629,123630],{},[519,123631],{"alt":31,"src":123632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123634,123636],{"id":123635},"_74-usb端口设置","7.4 USB端口设置",[19,123638,123639],{},[770,123640,123641],{},"首先先配置好权限",[26,123643,123645],{"className":117697,"code":123644,"language":117699,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,123646,123647,123652,123665,123672,123677],{"__ignoreMap":31},[36,123648,123649],{"class":38,"line":39},[36,123650,123651],{"class":69},"# 将用户权限提高\n",[36,123653,123654,123656,123658,123660,123663],{"class":38,"line":66},[36,123655,25057],{"class":2443},[36,123657,27055],{"class":405},[36,123659,27058],{"class":53},[36,123661,123662],{"class":405}," dialout",[36,123664,27063],{"class":42},[36,123666,123667,123669],{"class":38,"line":73},[36,123668,27082],{"class":2443},[36,123670,123671],{"class":405}," dialout\n",[36,123673,123674],{"class":38,"line":79},[36,123675,123676],{"class":69},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,123678,123679],{"class":38,"line":85},[36,123680,123681],{"class":2443},"groups\n",[19,123683,123684],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[596,123686,123688],{"id":123687},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123690,123691,123694],{},[770,123692,123693],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123696,123697,123700],{},[770,123698,123699],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123702,123703],{},[770,123704,123705],{},"流程如下：",[19,123707,123708],{},"（1）.查找设备idVendor和idProduct",[19,123710,123711,123712,123715],{},"接入两个USB设备，在终端调用指令",[33,123713,123714],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123717,123718],{},[519,123719],{"alt":31,"src":123720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123722,123723,123724,123727],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,123725,123726],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123729,123730],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123732,123733],{},"（2）.编写映射规则",[19,123735,123736,123737,123740],{},"在",[33,123738,123739],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,123742,123744],{"className":117697,"code":123743,"language":117699,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,123745,123746],{"__ignoreMap":31},[36,123747,123748,123750,123752],{"class":38,"line":39},[36,123749,25057],{"class":2443},[36,123751,118984],{"class":405},[36,123753,123754],{"class":405}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123756,123757],{},"输入如下内容：",[26,123759,123761],{"className":117697,"code":123760,"language":117699,"meta":31,"style":31},"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",[33,123762,123763,123793],{"__ignoreMap":31},[36,123764,123765,123768,123770,123773,123776,123779,123782,123784,123787,123790],{"class":38,"line":39},[36,123766,123767],{"class":42},"KERNEL",[36,123769,47],{"class":46},[36,123771,123772],{"class":405},"=\"ttyUSB*\",",[36,123774,123775],{"class":2443}," ATTRS",[36,123777,123778],{"class":405},"{idVendor}==",[36,123780,123781],{"class":2443},"\"10c4\"",[36,123783,57],{"class":2443},[36,123785,123786],{"class":405}," ATTRS{idProduct}==\"ea60\",",[36,123788,123789],{"class":405}," MODE:=\"0777\",",[36,123791,123792],{"class":405}," SYMLINK+=\"mylidar\"\n",[36,123794,123795,123797,123799,123801,123803,123805,123808,123810,123813,123815],{"class":38,"line":66},[36,123796,123767],{"class":42},[36,123798,47],{"class":46},[36,123800,123772],{"class":405},[36,123802,123775],{"class":2443},[36,123804,123778],{"class":405},[36,123806,123807],{"class":2443},"\"1a86\"",[36,123809,57],{"class":2443},[36,123811,123812],{"class":405}," ATTRS{idProduct}==\"7523\",",[36,123814,123789],{"class":405},[36,123816,123817],{"class":405}," SYMLINK+=\"mycar\"\n",[19,123819,123820],{},"代码解释：",[1620,123822,123823,123826,123829,123832],{},[582,123824,123825],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[582,123827,123828],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[582,123830,123831],{},"SYMLINK是符号连接，即绑定的别名；",[582,123833,123834],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123836,123837,123838,123841,123844],{},"***小提示：***",[24033,123839,123840],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,123842,123843],{},"\u002Fetc\u002Fudev\u002Frule.d",[24033,123845,123846],{},"目录即可。",[19,123848,123849],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123851,123852],{},"（3）.使规则生效",[19,123854,123855],{},"在终端下输入如下指令：",[26,123857,123859],{"className":117697,"code":123858,"language":117699,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[33,123860,123861,123866,123878,123889,123893,123898,123911],{"__ignoreMap":31},[36,123862,123863],{"class":38,"line":39},[36,123864,123865],{"class":69},"# Ubuntu用下方命令\n",[36,123867,123868,123870,123872,123875],{"class":38,"line":66},[36,123869,25057],{"class":2443},[36,123871,120449],{"class":405},[36,123873,123874],{"class":405}," udev",[36,123876,123877],{"class":405}," reload\n",[36,123879,123880,123882,123884,123886],{"class":38,"line":73},[36,123881,25057],{"class":2443},[36,123883,120449],{"class":405},[36,123885,123874],{"class":405},[36,123887,123888],{"class":405}," restart\n",[36,123890,123891],{"class":38,"line":79},[36,123892,2880],{"emptyLinePlaceholder":553},[36,123894,123895],{"class":38,"line":85},[36,123896,123897],{"class":69},"#Fedora用下方命令\n",[36,123899,123900,123902,123905,123908],{"class":38,"line":419},[36,123901,25057],{"class":2443},[36,123903,123904],{"class":405}," udevadm",[36,123906,123907],{"class":405}," control",[36,123909,123910],{"class":53}," --reload\n",[36,123912,123913,123915,123917],{"class":38,"line":425},[36,123914,25057],{"class":2443},[36,123916,123904],{"class":405},[36,123918,123919],{"class":405}," trigger\n",[19,123921,123922],{},"再重新插拔设备即可。",[19,123924,123925],{},"（4）.测试",[19,123927,123928],{},"终端下输入如下指令",[26,123930,123932],{"className":117697,"code":123931,"language":117699,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,123933,123934],{"__ignoreMap":31},[36,123935,123936,123939,123942,123944,123946],{"class":38,"line":39},[36,123937,123938],{"class":2443},"ll",[36,123940,123941],{"class":405}," \u002Fdev",[36,123943,25590],{"class":46},[36,123945,30717],{"class":2443},[36,123947,123948],{"class":405}," ttyUSB\n",[19,123950,123951],{},"运行结果如下：",[19,123953,123954],{},[519,123955],{"alt":31,"src":123956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123958,123959,123960,123963],{},"也可以多次插拔USB设备，会发现设备端口",[33,123961,123962],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123965,123966],{},[770,123967,118365],{},[19,123969,123970],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[596,123972,123974],{"id":123973},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123976,123977,123979],{},[770,123978,123693],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123981,123982,123984],{},[770,123983,123699],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123986,123987],{},[770,123988,123705],{},[19,123990,123991],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123993,123994],{},"调用如下指令查看第一台雷达的USB信息：",[26,123996,123998],{"className":117697,"code":123997,"language":117699,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,123999,124000,124020],{"__ignoreMap":31},[36,124001,124002,124005,124007,124010,124013,124015,124017],{"class":38,"line":39},[36,124003,124004],{"class":2443},"udevadm",[36,124006,70298],{"class":405},[36,124008,124009],{"class":53}," --attribute-walk",[36,124011,124012],{"class":53}," --name=\u002Fdev\u002FttyUSB0",[36,124014,25590],{"class":46},[36,124016,30717],{"class":2443},[36,124018,124019],{"class":405}," KERNELS\n",[36,124021,124022,124024,124026,124028,124031,124033,124035],{"class":38,"line":66},[36,124023,124004],{"class":2443},[36,124025,70298],{"class":405},[36,124027,124009],{"class":53},[36,124029,124030],{"class":53}," --name=\u002Fdev\u002FttyACM0",[36,124032,25590],{"class":46},[36,124034,30717],{"class":2443},[36,124036,124019],{"class":405},[19,124038,124039],{},[519,124040],{"alt":31,"src":124041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124043,124044],{},"调用如下指令查看第二台雷达的USB信息：",[26,124046,124048],{"className":117697,"code":124047,"language":117699,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,124049,124050],{"__ignoreMap":31},[36,124051,124052,124054,124056,124058,124061,124063,124065],{"class":38,"line":39},[36,124053,124004],{"class":2443},[36,124055,70298],{"class":405},[36,124057,124009],{"class":53},[36,124059,124060],{"class":53}," --name=\u002Fdev\u002FttyUSB1",[36,124062,25590],{"class":46},[36,124064,30717],{"class":2443},[36,124066,124019],{"class":405},[19,124068,124069,124070,124073,124074,124077,124078,124081],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,124071,124072],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,124075,124076],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[770,124079,124080],{},"唯一性标识","”。",[19,124083,123733],{},[19,124085,123736,124086,124088],{},[33,124087,123739],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,124090,124091],{"className":117697,"code":123743,"language":117699,"meta":31,"style":31},[33,124092,124093],{"__ignoreMap":31},[36,124094,124095,124097,124099],{"class":38,"line":39},[36,124096,25057],{"class":2443},[36,124098,118984],{"class":405},[36,124100,123754],{"class":405},[26,124102,124104],{"className":117697,"code":124103,"language":117699,"meta":31,"style":31},"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",[33,124105,124106,124135],{"__ignoreMap":31},[36,124107,124108,124110,124112,124114,124117,124119,124122,124125,124127,124130,124132],{"class":38,"line":39},[36,124109,123767],{"class":42},[36,124111,47],{"class":46},[36,124113,123772],{"class":405},[36,124115,124116],{"class":42}," KERNELS",[36,124118,47],{"class":46},[36,124120,124121],{"class":405},"=\"1-1.3:1.0\",",[36,124123,124124],{"class":2443}," MODE:",[36,124126,47],{"class":405},[36,124128,124129],{"class":2443},"\"0777\"",[36,124131,57],{"class":2443},[36,124133,124134],{"class":405}," SYMLINK+=\"rplidar_front\"\n",[36,124136,124137,124139,124141,124143,124145,124147,124150,124152,124154,124156,124158],{"class":38,"line":66},[36,124138,123767],{"class":42},[36,124140,47],{"class":46},[36,124142,123772],{"class":405},[36,124144,124116],{"class":42},[36,124146,47],{"class":46},[36,124148,124149],{"class":405},"=\"1-1.4:1.0\",",[36,124151,124124],{"class":2443},[36,124153,47],{"class":405},[36,124155,124129],{"class":2443},[36,124157,57],{"class":2443},[36,124159,124160],{"class":405}," SYMLINK+=\"rplidar_back\"\n",[19,124162,123852],{},[19,124164,123855],{},[26,124166,124167],{"className":117697,"code":123858,"language":117699,"meta":31,"style":31},[33,124168,124169,124173,124183,124193,124197,124201,124211],{"__ignoreMap":31},[36,124170,124171],{"class":38,"line":39},[36,124172,123865],{"class":69},[36,124174,124175,124177,124179,124181],{"class":38,"line":66},[36,124176,25057],{"class":2443},[36,124178,120449],{"class":405},[36,124180,123874],{"class":405},[36,124182,123877],{"class":405},[36,124184,124185,124187,124189,124191],{"class":38,"line":73},[36,124186,25057],{"class":2443},[36,124188,120449],{"class":405},[36,124190,123874],{"class":405},[36,124192,123888],{"class":405},[36,124194,124195],{"class":38,"line":79},[36,124196,2880],{"emptyLinePlaceholder":553},[36,124198,124199],{"class":38,"line":85},[36,124200,123897],{"class":69},[36,124202,124203,124205,124207,124209],{"class":38,"line":419},[36,124204,25057],{"class":2443},[36,124206,123904],{"class":405},[36,124208,123907],{"class":405},[36,124210,123910],{"class":53},[36,124212,124213,124215,124217],{"class":38,"line":425},[36,124214,25057],{"class":2443},[36,124216,123904],{"class":405},[36,124218,123919],{"class":405},[19,124220,123922],{},[19,124222,123925],{},[19,124224,123928,124225,124228],{},[33,124226,124227],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124230,124231],{},[519,124232],{"alt":31,"src":124233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124235,124236],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124238,124239,124241],{},[770,124240,118365],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[596,124243,124245],{"id":124244},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124247,124248],{},"（1）.查看所连接的主机USB接口的信息",[26,124250,124252],{"className":117697,"code":124251,"language":117699,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[33,124253,124254,124284],{"__ignoreMap":31},[36,124255,124256,124258,124260,124263,124265,124267,124269,124271,124274,124277,124279,124282],{"class":38,"line":39},[36,124257,124004],{"class":2443},[36,124259,70298],{"class":405},[36,124261,124262],{"class":53}," -a",[36,124264,29697],{"class":53},[36,124266,28903],{"class":42},[36,124268,124004],{"class":2443},[36,124270,70298],{"class":405},[36,124272,124273],{"class":53}," -q",[36,124275,124276],{"class":405}," path",[36,124278,25596],{"class":53},[36,124280,124281],{"class":405}," \u002Fdev\u002FttyACM0",[36,124283,63],{"class":42},[36,124285,124286,124288,124290,124292,124294,124296,124298,124300,124302,124304,124306,124309],{"class":38,"line":66},[36,124287,124004],{"class":2443},[36,124289,70298],{"class":405},[36,124291,124262],{"class":53},[36,124293,29697],{"class":53},[36,124295,28903],{"class":42},[36,124297,124004],{"class":2443},[36,124299,70298],{"class":405},[36,124301,124273],{"class":53},[36,124303,124276],{"class":405},[36,124305,25596],{"class":53},[36,124307,124308],{"class":405}," \u002Fdev\u002FttyUSB0",[36,124310,63],{"class":42},[19,124312,124313],{},[519,124314],{"alt":31,"src":124315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124317,124318],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124320,123733],{},[19,124322,123736,124323,124088],{},[33,124324,123739],{},[26,124326,124327],{"className":117697,"code":123743,"language":117699,"meta":31,"style":31},[33,124328,124329],{"__ignoreMap":31},[36,124330,124331,124333,124335],{"class":38,"line":39},[36,124332,25057],{"class":2443},[36,124334,118984],{"class":405},[36,124336,123754],{"class":405},[26,124338,124340],{"className":117697,"code":124339,"language":117699,"meta":31,"style":31},"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",[33,124341,124342,124370,124396],{"__ignoreMap":31},[36,124343,124344,124346,124348,124351,124353,124355,124357,124359,124362,124365,124367],{"class":38,"line":39},[36,124345,123767],{"class":42},[36,124347,47],{"class":46},[36,124349,124350],{"class":405},"=\"ttyACM*\",",[36,124352,123775],{"class":2443},[36,124354,123778],{"class":405},[36,124356,123807],{"class":2443},[36,124358,57],{"class":2443},[36,124360,124361],{"class":405}," ATTRS{idProduct}==\"55d4\",",[36,124363,124364],{"class":405}," ATTRS{serial}==\"0001\",",[36,124366,123789],{"class":405},[36,124368,124369],{"class":405}," SYMLINK+=\"ttyACM_MCU\"\n",[36,124371,124372,124374,124376,124378,124380,124382,124384,124386,124388,124391,124393],{"class":38,"line":66},[36,124373,123767],{"class":42},[36,124375,47],{"class":46},[36,124377,124350],{"class":405},[36,124379,123775],{"class":2443},[36,124381,123778],{"class":405},[36,124383,123807],{"class":2443},[36,124385,57],{"class":2443},[36,124387,124361],{"class":405},[36,124389,124390],{"class":405}," ATTRS{serial}==\"0002\",",[36,124392,123789],{"class":405},[36,124394,124395],{"class":405}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,124397,124398,124400,124402,124404,124406,124408,124410,124412,124414,124416],{"class":38,"line":73},[36,124399,123767],{"class":42},[36,124401,47],{"class":46},[36,124403,123772],{"class":405},[36,124405,123775],{"class":2443},[36,124407,123778],{"class":405},[36,124409,123807],{"class":2443},[36,124411,57],{"class":2443},[36,124413,123812],{"class":405},[36,124415,123789],{"class":405},[36,124417,124418],{"class":405}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124420,123852],{},[19,124422,123855],{},[26,124424,124425],{"className":117697,"code":123858,"language":117699,"meta":31,"style":31},[33,124426,124427,124431,124441,124451,124455,124459,124469],{"__ignoreMap":31},[36,124428,124429],{"class":38,"line":39},[36,124430,123865],{"class":69},[36,124432,124433,124435,124437,124439],{"class":38,"line":66},[36,124434,25057],{"class":2443},[36,124436,120449],{"class":405},[36,124438,123874],{"class":405},[36,124440,123877],{"class":405},[36,124442,124443,124445,124447,124449],{"class":38,"line":73},[36,124444,25057],{"class":2443},[36,124446,120449],{"class":405},[36,124448,123874],{"class":405},[36,124450,123888],{"class":405},[36,124452,124453],{"class":38,"line":79},[36,124454,2880],{"emptyLinePlaceholder":553},[36,124456,124457],{"class":38,"line":85},[36,124458,123897],{"class":69},[36,124460,124461,124463,124465,124467],{"class":38,"line":419},[36,124462,25057],{"class":2443},[36,124464,123904],{"class":405},[36,124466,123907],{"class":405},[36,124468,123910],{"class":53},[36,124470,124471,124473,124475],{"class":38,"line":425},[36,124472,25057],{"class":2443},[36,124474,123904],{"class":405},[36,124476,123919],{"class":405},[19,124478,124479,124480],{},"再重新插拔设备即可，或者 ",[770,124481,124482],{},"直接重启系统。",[19,124484,123925],{},[19,124486,123928,124487,124228],{},[33,124488,124227],{},[19,124490,124491],{},[519,124492],{"alt":31,"src":124493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124495,124236],{},[19,124497,124498,124500],{},[770,124499,118365],{}," 一些设备可能没有串口号等。",[596,124502,124504],{"id":124503},"_744-其他注意事项","7.4.4 其他注意事项",[19,124506,124507,124508,124510,124511,124514,124515,18890,124518,124521,124522,124524],{},"并非所有的USB设备端口号都是",[33,124509,123962],{},"的格式，比如Arduino的端口号可能是",[33,124512,124513],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,124516,124517],{},"videon",[33,124519,124520],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,124523,124517],{},"端口，绑定时需要关联的也是该接口。",[19,124526,124527,124528,124531,124532,124535,124536,124538,124539,124542,124543,124546,124547,124550,124551,124550,124554,124550,124557,28866],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,124529,124530],{},"KERNEL==\"ttyUSB*\"","修改为",[33,124533,124534],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,124537,124530],{},"修改为类似于",[33,124540,124541],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,124544,124545],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,124548,124549],{},"video0","或",[33,124552,124553],{},"video2",[33,124555,124556],{},"video4",[33,124558,124559],{},"video6",[14,124561,124563],{"id":124562},"_75-挂载内网网页","7.5 挂载内网网页",[19,124565,124566],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124568,124569],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124571,124572],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124574,124575,124576],{},"Termux 下载地址（F-Droid）：",[43,124577,124578],{"href":124578,"rel":124579},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24345],[19,124581,124582],{},"首先打开app后，先更新软件缓存：",[26,124584,124586],{"className":117697,"code":124585,"language":117699,"meta":31,"style":31},"pkg update\n",[33,124587,124588],{"__ignoreMap":31},[36,124589,124590,124593],{"class":38,"line":39},[36,124591,124592],{"class":2443},"pkg",[36,124594,26723],{"class":405},[19,124596,124597],{},"然后换源",[26,124599,124601],{"className":117697,"code":124600,"language":117699,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,124602,124603],{"__ignoreMap":31},[36,124604,124605,124607,124610],{"class":38,"line":39},[36,124606,123475],{"class":2443},[36,124608,124609],{"class":42}," $PREFIX",[36,124611,124612],{"class":405},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124614,124615],{},"将该文件内容替换为下面：",[26,124617,124619],{"className":117697,"code":124618,"language":117699,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,124620,124621],{"__ignoreMap":31},[36,124622,124623,124626,124629,124632],{"class":38,"line":39},[36,124624,124625],{"class":2443},"deb",[36,124627,124628],{"class":405}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,124630,124631],{"class":405}," stable",[36,124633,124634],{"class":405}," main\n",[1620,124636,124637,124664],{},[582,124638,124639,124640,124642,124643],{},"如果你使用的是",[33,124641,123475],{},"编辑器：",[1620,124644,124645,124652,124658],{},[582,124646,124647,124648,124651],{},"按 ",[33,124649,124650],{},"Ctrl+O"," 保存文件。",[582,124653,124647,124654,124657],{},[33,124655,124656],{},"Enter"," 确认文件名。",[582,124659,124647,124660,124663],{},[33,124661,124662],{},"Ctrl+X"," 退出编辑器。",[582,124665,124639,124666,124642,124669],{},[33,124667,124668],{},"vim",[1620,124670,124671,124677],{},[582,124672,124647,124673,124676],{},[33,124674,124675],{},"Esc"," 退出编辑模式。",[582,124678,124679,124680,124682],{},"输入 ",[33,124681,119622],{}," 保存并退出。",[19,124684,124685],{},"接下来重新更新软件源：",[26,124687,124689],{"className":117697,"code":124688,"language":117699,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,124690,124691],{"__ignoreMap":31},[36,124692,124693,124695,124697,124699,124701],{"class":38,"line":39},[36,124694,124592],{"class":2443},[36,124696,117748],{"class":405},[36,124698,26671],{"class":42},[36,124700,124592],{"class":2443},[36,124702,117734],{"class":405},[19,124704,124705],{},"安装python：",[26,124707,124709],{"className":117697,"code":124708,"language":117699,"meta":31,"style":31},"pkg install python\n",[33,124710,124711],{"__ignoreMap":31},[36,124712,124713,124715,124717],{"class":38,"line":39},[36,124714,124592],{"class":2443},[36,124716,24314],{"class":405},[36,124718,124719],{"class":405}," python\n",[19,124721,124722,26954],{},[770,124723,124724],{},"通过Termux访问设备存储",[19,124726,124727],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,124729,124731],{"className":117697,"code":124730,"language":117699,"meta":31,"style":31},"termux-setup-storage\n",[33,124732,124733],{"__ignoreMap":31},[36,124734,124735],{"class":38,"line":39},[36,124736,124730],{"class":2443},[579,124738,124739],{},[582,124740,124741,26954,124744],{},[770,124742,124743],{},"进入HTML文件所在的目录",[579,124745,124746],{},[582,124747,124748,124749,124751],{},"使用",[33,124750,101677],{},"命令进入HTML文件所在的目录：",[26,124753,124755],{"className":117697,"code":124754,"language":117699,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,124756,124757],{"__ignoreMap":31},[36,124758,124759,124761],{"class":38,"line":39},[36,124760,101677],{"class":53},[36,124762,124763],{"class":405}," ~\u002Fyour_html_folder\n",[579,124765,124766],{"start":66},[582,124767,124768,26954,124771,124776,124793],{},[770,124769,124770],{},"启动Python HTTP服务器",[579,124772,124773],{},[582,124774,124775],{},"运行以下命令启动一个简单的HTTP服务器：",[26,124777,124779],{"className":117697,"code":124778,"language":117699,"meta":31,"style":31},"python -m http.server 8000\n",[33,124780,124781],{"__ignoreMap":31},[36,124782,124783,124785,124787,124790],{"class":38,"line":39},[36,124784,30],{"class":2443},[36,124786,101283],{"class":53},[36,124788,124789],{"class":405}," http.server",[36,124791,124792],{"class":53}," 8000\n",[579,124794,124795],{"start":73},[582,124796,124797,124798,124801],{},"这会在端口",[33,124799,124800],{},"8000","上启动一个Web服务器。",[1620,124803,124804],{},[582,124805,124806],{},"启动服务器后，Termux会显示日志信息，例如：",[26,124808,124810],{"className":121217,"code":124809,"language":121219,"meta":121220,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,124811,124812],{"__ignoreMap":31},[36,124813,124814],{"class":38,"line":39},[36,124815,124809],{},[1620,124817,124818],{},[582,124819,124820],{},"这表示服务器已成功启动。",[19,124822,124823],{},[770,124824,124825],{},"在浏览器中访问HTML文件",[579,124827,124828],{},[582,124829,124830,26954,124833,124838],{},[770,124831,124832],{},"在同一设备上访问",[579,124834,124835],{},[582,124836,124837],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,124839,124842],{"className":124840,"code":124841,"language":72141,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,124843,124844],{"__ignoreMap":31},[36,124845,124846,124849],{"class":38,"line":39},[36,124847,124848],{"class":42},"http:",[36,124850,124851],{"class":69},"\u002F\u002Flocalhost:8000\n",[1620,124853,124854],{},[582,124855,124856,124857,124860],{},"如果HTML文件中有",[33,124858,124859],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124862,124864],{"id":124863},"_76-linux重点知识","7.6 Linux重点知识",[596,124866,124868],{"id":124867},"_761-关于点的说明","7.6.1 关于点的说明",[19,124870,124871],{},[519,124872],{"alt":31,"src":124873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124875,124876],{},"一点本目录，两点上目录",[596,124878,124880],{"id":124879},"_762-目录","7.6.2 目录",[22478,124882,124884],{"id":124883},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124886,124887],{},[770,124888,124889],{},"\u002Fboot:",[19,124891,124892],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124894,124895],{},[770,124896,124897],{},"\u002Fetc:",[19,124899,124900],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124902,124903],{},[770,124904,124905],{},"\u002Flib：",[19,124907,124908],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124910,124911],{},[770,124912,124913],{},"\u002Fsys:",[19,124915,124916],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22478,124918,124920],{"id":124919},"_7622-指令集合","7.6.2.2 指令集合",[19,124922,124923],{},[770,124924,124925],{},"\u002Fbin:",[19,124927,124928],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124930,124931],{},[770,124932,124933],{},"\u002Fsbin:",[19,124935,124936],{},"只有系统管理员才能使用的程序和指令",[22478,124938,124940],{"id":124939},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124942,124943],{},[770,124944,124945],{},"\u002Fdev:",[19,124947,124948],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124950,124951],{},[770,124952,124953],{},"\u002Fmedia:",[19,124955,124956],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124958,124959],{},[770,124960,124961],{},"\u002Fmnt:",[19,124963,124964],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22478,124966,124968],{"id":124967},"_7624-临时文件","7.6.2.4 临时文件",[19,124970,124971],{},[770,124972,124973],{},"\u002Frun:",[19,124975,124976],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124978,124979],{},[770,124980,124981],{},"\u002Flost+found:",[19,124983,124984],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124986,124987],{},[770,124988,124989],{},"\u002Ftmp:",[19,124991,124992],{},"这个目录是用来存放一些临时文件的",[22478,124994,124996],{"id":124995},"_7625-账户","7.6.2.5 账户",[19,124998,124999],{},[770,125000,125001],{},"\u002Froot：",[19,125003,125004],{},"系统管理员的用户主目录",[19,125006,125007,26954],{},[770,125008,125009],{},"\u002Fhome",[19,125011,125012],{},"用户的主目录，以用户的账号命名的",[19,125014,125015,26954],{},[770,125016,125017],{},"\u002Fusr",[19,125019,125020],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125022,125023],{},[770,125024,125025],{},"\u002Fusr\u002Fbin：",[19,125027,125028],{},"系统用户使用的应用程序与指令",[19,125030,125031],{},[770,125032,125033],{},"\u002Fusr\u002Fsbin：",[19,125035,125036],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125038,125039],{},[770,125040,125041],{},"\u002Fusr\u002Fsrc：",[19,125043,125044],{},"内核源代码默认的放置目录",[22478,125046,125048],{"id":125047},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125050,125051],{},[770,125052,125053],{},"\u002Fvar：",[19,125055,125056],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125058,125059],{},[770,125060,125061],{},"\u002Fproc:",[19,125063,125064,125065,125068],{},"管理 ",[770,125066,125067],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22478,125070,125072],{"id":125071},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125074,125075],{},[770,125076,125077],{},"\u002Fopt:",[19,125079,125080],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125082,125083],{},[770,125084,125085],{},"\u002Fsrv:",[19,125087,125088],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[596,125090,125092],{"id":125091},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125094,125095],{},[519,125096],{"alt":31,"src":125097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125099,125100],{},"windows-->linux:",[19,125102,125103],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125105,125106],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125108,125109],{},"linux传输文件到windows",[19,125111,125112],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[596,125114,125116],{"id":125115},"_764-易忘知识","7.6.4 易忘知识",[19,125118,125119],{},"操作系统内核查看",[26,125121,125122],{"className":117697,"code":121691,"language":117699,"meta":31,"style":31},[33,125123,125124],{"__ignoreMap":31},[36,125125,125126,125128],{"class":38,"line":39},[36,125127,70681],{"class":2443},[36,125129,121700],{"class":53},[19,125131,125132],{},[519,125133],{"alt":31,"src":125134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125136,125137],{},[519,125138],{"alt":31,"src":125139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,125141,125143],{"className":117697,"code":125142,"language":117699,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,125144,125145,125157],{"__ignoreMap":31},[36,125146,125147,125149,125152,125155],{"class":38,"line":39},[36,125148,121908],{"class":2443},[36,125150,125151],{"class":405}," mvtest",[36,125153,125154],{"class":405}," mvtest2",[36,125156,3154],{"class":42},[36,125158,125159],{"class":38,"line":66},[36,125160,125161],{"class":2443},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125163,125164],{},[519,125165],{"alt":31,"src":125166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125168,125169],{},[519,125170],{"alt":31,"src":125171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125173,125174,125175,125178],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,125176,125177],{},"du -a"," 可以快速查看磁盘使用细节。",[596,125180,125182],{"id":125181},"_765-vim","7.6.5 Vim",[19,125184,125185],{},[519,125186],{"alt":31,"src":125187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125189,125190],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125192,125193],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125195,125196],{},[770,125197,125198],{},"1.命令模式：",[19,125200,125201],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125203,125204],{},"x 删除当前光标所在处的字符",[19,125206,125207],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125209,125210],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125212,125213],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125215,125216],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125218,125219],{},"dd 剪切当前行",[19,125221,125222],{},"yy 复制当前行",[19,125224,125225],{},"p 粘贴剪贴板内容到光标下方",[19,125227,125228],{},"P 粘贴剪贴板内容到光标上方",[19,125230,125231],{},"u 撤销上一次操作",[19,125233,125234],{},"ctrl+r 重做上一次操作",[19,125236,125237,125239],{},[1408,125238],{}," 保存文件",[19,125241,125242,125244],{},[1258,125243],{}," 退出Vim编辑器",[19,125246,125247,125249],{},[1258,125248],{},"! 强制退出Vim编辑器，不保存修改",[19,125251,125252],{},[770,125253,125254],{},"2.输入模式：",[19,125256,125257],{},[519,125258],{"alt":31,"src":125259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125261,125262],{},[770,125263,125264],{},"3.底线命令模式：",[19,125266,125267],{},[519,125268],{"alt":31,"src":125269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125271,125272],{},"按下esc可以退出底线命令模式",[596,125274,125276],{"id":125275},"_766-apt","7.6.6 apt",[19,125278,125279],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[596,125281,125283],{"id":125282},"_767-home与root的区别","7.6.7 home与root的区别",[19,125285,125286],{},[519,125287],{"alt":31,"src":125288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125290,125291],{},[519,125292],{"alt":31,"src":125293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125295,125296],{},[519,125297],{"alt":31,"src":125298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125300,125301],{},[519,125302],{"alt":31,"src":125303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[596,125305,125307],{"id":125306},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125309,125310],{},[43,125311,125312],{"href":125312,"rel":125313},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24345],[579,125315,125316,125319],{},[582,125317,125318],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[582,125320,125321],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125323,125324],{},[519,125325],{"alt":31,"src":125326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125328,125329],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125331,125332],{},[519,125333],{"alt":31,"src":125334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,125336,125338],{"className":121217,"code":125337,"language":121219,"meta":121220,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,125339,125340,125345],{"__ignoreMap":31},[36,125341,125342],{"class":38,"line":39},[36,125343,125344],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,125346,125347],{"class":38,"line":66},[36,125348,125349],{},".\u002Fpycharm.sh\n",[19,125351,125352],{},"3️⃣创建.desktop文件",[19,125354,125355],{},[770,125356,125357],{},"原理：",[1620,125359,125360,125370],{},[582,125361,125362,125363,125369],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[770,125364,125365,125368],{},[33,125366,125367],{},".desktop"," 文件"," 来识别应用。",[582,125371,125372,125374,125375],{},[33,125373,125367],{}," 文件相当于一个“应用注册表”，告诉系统：",[1620,125376,125377,125380,125383,125386,125389],{},[582,125378,125379],{},"应用名字（Name）",[582,125381,125382],{},"图标（Icon）",[582,125384,125385],{},"执行命令（Exec）",[582,125387,125388],{},"分类（Categories）",[582,125390,125391],{},"是否需要终端（Terminal）",[26,125393,125395],{"className":121217,"code":125394,"language":121219,"meta":121220,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,125396,125397,125402],{"__ignoreMap":31},[36,125398,125399],{"class":38,"line":39},[36,125400,125401],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,125403,125404],{"class":38,"line":66},[36,125405,125406],{},"nano pycharm.desktop\n",[19,125408,125409],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,125411,125413],{"className":121217,"code":125412,"language":121219,"meta":121220,"style":31},"[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",[33,125414,125415,125420,125425,125430,125435,125440,125445,125450,125455,125460],{"__ignoreMap":31},[36,125416,125417],{"class":38,"line":39},[36,125418,125419],{},"[Desktop Entry]\n",[36,125421,125422],{"class":38,"line":66},[36,125423,125424],{},"Version=1.0\n",[36,125426,125427],{"class":38,"line":73},[36,125428,125429],{},"Type=Application\n",[36,125431,125432],{"class":38,"line":79},[36,125433,125434],{},"Name=PyCharm\n",[36,125436,125437],{"class":38,"line":85},[36,125438,125439],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,125441,125442],{"class":38,"line":419},[36,125443,125444],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,125446,125447],{"class":38,"line":425},[36,125448,125449],{},"Comment=JetBrains PyCharm IDE\n",[36,125451,125452],{"class":38,"line":431},[36,125453,125454],{},"Categories=Development;IDE;\n",[36,125456,125457],{"class":38,"line":437},[36,125458,125459],{},"Terminal=false\n",[36,125461,125462],{"class":38,"line":443},[36,125463,125464],{},"StartupWMClass=jetbrains-pycharm\n",[1620,125466,125467,125473,125479,125485],{},[582,125468,125469,125472],{},[33,125470,125471],{},"Exec"," → 点击图标时执行的命令",[582,125474,125475,125478],{},[33,125476,125477],{},"Icon"," → 显示在菜单和桌面上的图标",[582,125480,125481,125484],{},[33,125482,125483],{},"Terminal=false"," → 不打开终端",[582,125486,125487,125490],{},[33,125488,125489],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125492,125493,125494],"blockquote",{},[19,125495,125496,125497,125499,125500],{},"可以理解成 ",[33,125498,125367],{}," 文件是 Linux 的 ",[770,125501,125502],{},"快捷方式配置文件",[19,125504,125505],{},"4️⃣设置可执行权限",[26,125507,125509],{"className":121217,"code":125508,"language":121219,"meta":121220,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,125510,125511],{"__ignoreMap":31},[36,125512,125513],{"class":38,"line":39},[36,125514,125508],{},[19,125516,125517],{},"5️⃣桌面图标启动的话如下：",[26,125519,125521],{"className":121217,"code":125520,"language":121219,"meta":121220,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,125522,125523,125528],{"__ignoreMap":31},[36,125524,125525],{"class":38,"line":39},[36,125526,125527],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,125529,125530],{"class":38,"line":66},[36,125531,125532],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[579,125534,125535],{"start":73},[582,125536,125537],{},"下载Appimage文件实现软件的安装",[19,125539,125540],{},"1️⃣先下载appimage",[19,125542,125543],{},[43,125544,125545],{"href":125545,"rel":125546},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24345],[19,125548,125549],{},[519,125550],{"alt":31,"src":125551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125553,125554],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125556,125557],{},[519,125558],{"alt":31,"src":125559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125561,125562],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125564,125565],{},[519,125566],{"alt":31,"src":125567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125569,125570],{},[519,125571],{"alt":31,"src":125572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125574,125575,125576,125579],{},"3️⃣给他们放在",[33,125577,125578],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125581,125582],{},"4️⃣给软件执行权限",[26,125584,125586],{"className":121217,"code":125585,"language":121219,"meta":121220,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,125587,125588,125593],{"__ignoreMap":31},[36,125589,125590],{"class":38,"line":39},[36,125591,125592],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,125594,125595],{"class":38,"line":66},[36,125596,125597],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125599,125600],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,125602,125604],{"className":117697,"code":125603,"language":117699,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,125605,125606,125613,125620,125626],{"__ignoreMap":31},[36,125607,125608,125610],{"class":38,"line":39},[36,125609,101677],{"class":53},[36,125611,125612],{"class":405}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,125614,125615,125617],{"class":38,"line":66},[36,125616,101684],{"class":2443},[36,125618,125619],{"class":405}," .\u002Fqqmusic.desktop\n",[36,125621,125622,125624],{"class":38,"line":73},[36,125623,124668],{"class":2443},[36,125625,125619],{"class":405},[36,125627,125628,125630,125632,125634],{"class":38,"line":79},[36,125629,25057],{"class":2443},[36,125631,25060],{"class":405},[36,125633,123534],{"class":405},[36,125635,125619],{"class":405},[19,125637,125638,125640],{},[33,125639,101684],{},"：一个 Linux 命令，主要功能是：",[1620,125642,125643,125646],{},[582,125644,125645],{},"如果文件不存在，就创建一个新的空文件",[582,125647,125648],{},"如果文件已存在，就更新该文件的最后修改时间",[26,125650,125652],{"className":121217,"code":125651,"language":121219,"meta":121220,"style":31},"[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",[33,125653,125654,125658,125663,125668,125673,125677,125682],{"__ignoreMap":31},[36,125655,125656],{"class":38,"line":39},[36,125657,125419],{},[36,125659,125660],{"class":38,"line":66},[36,125661,125662],{},"Name=QQ音乐\n",[36,125664,125665],{"class":38,"line":73},[36,125666,125667],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,125669,125670],{"class":38,"line":79},[36,125671,125672],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,125674,125675],{"class":38,"line":85},[36,125676,125429],{},[36,125678,125679],{"class":38,"line":419},[36,125680,125681],{},"Categories=Audio;Music;Player;\n",[36,125683,125684],{"class":38,"line":425},[36,125685,125686],{},"Comment=QQ Music Client for Linux\n",[19,125688,125689],{},"将文件复制进去",[19,125691,125692],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125694,125695],{},[519,125696],{"alt":31,"src":125697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125699,125700],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125702,125703],{},[519,125704],{"alt":31,"src":125705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125707,125708,125709,125712,125713,125716],{},"如果你用的不是KDE，那么也可以直接修改",[33,125710,125711],{},"qqmuic.desktop","：在exec的末尾加上",[33,125714,125715],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,125718,125720],{"className":121217,"code":125719,"language":121219,"meta":121220,"style":31},"[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",[33,125721,125722,125726,125730,125735,125739,125743,125747],{"__ignoreMap":31},[36,125723,125724],{"class":38,"line":39},[36,125725,125419],{},[36,125727,125728],{"class":38,"line":66},[36,125729,125662],{},[36,125731,125732],{"class":38,"line":73},[36,125733,125734],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,125736,125737],{"class":38,"line":79},[36,125738,125672],{},[36,125740,125741],{"class":38,"line":85},[36,125742,125429],{},[36,125744,125745],{"class":38,"line":419},[36,125746,125681],{},[36,125748,125749],{"class":38,"line":425},[36,125750,125686],{},[19,125752,125753],{},[519,125754],{"alt":31,"src":125755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125757,125758],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,125760,125762],{"className":121217,"code":125761,"language":121219,"meta":121220,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,125763,125764],{"__ignoreMap":31},[36,125765,125766],{"class":38,"line":39},[36,125767,125761],{},[579,125769,125770],{"start":79},[582,125771,125772],{},"去Flathub上安装软件",[19,125774,125775],{},[43,125776,125777],{"href":125777,"rel":125778},"https:\u002F\u002Fflathub.org\u002F",[24345],[19,125780,125781],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125783,125784],{},[519,125785],{"alt":31,"src":125786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,125788,125790],{"className":121217,"code":125789,"language":121219,"meta":121220,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,125791,125792],{"__ignoreMap":31},[36,125793,125794],{"class":38,"line":39},[36,125795,125789],{},[19,125797,125798],{},[519,125799],{"alt":31,"src":125800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125802,125803],{},"2️⃣运行软件",[19,125805,125806],{},"a.官方方式：",[19,125808,125809],{},[519,125810],{"alt":31,"src":125811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,125813,125814],{"className":121217,"code":125789,"language":121219,"meta":121220,"style":31},[33,125815,125816],{"__ignoreMap":31},[36,125817,125818],{"class":38,"line":39},[36,125819,125789],{},[19,125821,125822],{},"b.当普通软件运行：",[19,125824,125825],{},[519,125826],{"alt":31,"src":125827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125829,125830],{},[519,125831],{"alt":31,"src":125832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[539,125834,125835],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":66,"depth":66,"links":125837},[125838,125839,125844,125845,125851,125852],{"id":122570,"depth":66,"text":122571},{"id":122912,"depth":66,"text":122913,"children":125840},[125841,125842,125843],{"id":122916,"depth":73,"text":122917},{"id":122983,"depth":73,"text":122984},{"id":123244,"depth":73,"text":123245},{"id":123397,"depth":66,"text":123398},{"id":123635,"depth":66,"text":123636,"children":125846},[125847,125848,125849,125850],{"id":123687,"depth":73,"text":123688},{"id":123973,"depth":73,"text":123974},{"id":124244,"depth":73,"text":124245},{"id":124503,"depth":73,"text":124504},{"id":124562,"depth":66,"text":124563},{"id":124863,"depth":66,"text":124864,"children":125853},[125854,125855,125856,125857,125858,125859,125860,125861],{"id":124867,"depth":73,"text":124868},{"id":124879,"depth":73,"text":124880},{"id":125091,"depth":73,"text":125092},{"id":125115,"depth":73,"text":125116},{"id":125181,"depth":73,"text":125182},{"id":125275,"depth":73,"text":125276},{"id":125282,"depth":73,"text":125283},{"id":125306,"depth":73,"text":125307},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122562,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125868,"title":125869,"body":125870,"description":550,"extension":551,"meta":125874,"navigation":553,"path":125875,"seo":125876,"stem":125877,"__hash__":125878},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125871,"toc":125872},[],{"title":31,"searchDepth":66,"depth":66,"links":125873},[],{"category":30744},"\u002Fwiki\u002F2025-01-27-linux",{"title":125869,"description":550},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125880,"title":125881,"body":125882,"description":125886,"extension":551,"meta":126277,"navigation":553,"path":126278,"seo":126279,"stem":126280,"__hash__":126281},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125883,"toc":126275},[125884,125887,125891,125908,125911,125964,125968,125970,126010,126019,126023,126026,126267,126272],[19,125885,125886],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125888,125890],{"id":125889},"_1ubuntu环境配置","1.Ubuntu环境配置",[579,125892,125893,125896,125899,125902,125905],{},[582,125894,125895],{},"ubuntu环境换源",[582,125897,125898],{},"安装cuda",[582,125900,125901],{},"安装miniconda",[582,125903,125904],{},"安装pytorch",[582,125906,125907],{},"安装genesis",[19,125909,125910],{},"参考链接：",[26,125912,125914],{"className":24302,"code":125913,"language":24304,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[33,125915,125916],{"__ignoreMap":31},[36,125917,125918,125921,125924,125927,125929,125932,125935,125937,125940,125943,125945,125948,125951,125953,125956,125959,125961],{"class":38,"line":39},[36,125919,125920],{"class":2443},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,125922,125923],{"class":405},"=blogdetail",[36,125925,125926],{"class":42},"&sharetype",[36,125928,47],{"class":46},[36,125930,125931],{"class":405},"blogdetail",[36,125933,125934],{"class":42},"&sharerId",[36,125936,47],{"class":46},[36,125938,125939],{"class":405},"144728092",[36,125941,125942],{"class":42},"&sharerefer",[36,125944,47],{"class":46},[36,125946,125947],{"class":405},"PC",[36,125949,125950],{"class":42},"&sharesource",[36,125952,47],{"class":46},[36,125954,125955],{"class":405},"qq_69379513",[36,125957,125958],{"class":42},"&sharefrom",[36,125960,47],{"class":46},[36,125962,125963],{"class":405},"from_link\n",[10,125965,125967],{"id":125966},"_2genesis-报错issue","2.Genesis 报错issue",[19,125969,125910],{},[26,125971,125972],{"className":24302,"code":125913,"language":24304,"meta":31,"style":31},[33,125973,125974],{"__ignoreMap":31},[36,125975,125976,125978,125980,125982,125984,125986,125988,125990,125992,125994,125996,125998,126000,126002,126004,126006,126008],{"class":38,"line":39},[36,125977,125920],{"class":2443},[36,125979,125923],{"class":405},[36,125981,125926],{"class":42},[36,125983,47],{"class":46},[36,125985,125931],{"class":405},[36,125987,125934],{"class":42},[36,125989,47],{"class":46},[36,125991,125939],{"class":405},[36,125993,125942],{"class":42},[36,125995,47],{"class":46},[36,125997,125947],{"class":405},[36,125999,125950],{"class":42},[36,126001,47],{"class":46},[36,126003,125955],{"class":405},[36,126005,125958],{"class":42},[36,126007,47],{"class":46},[36,126009,125963],{"class":405},[26,126011,126013],{"className":24302,"code":126012,"language":24304,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,126014,126015],{"__ignoreMap":31},[36,126016,126017],{"class":38,"line":39},[36,126018,126012],{"class":2443},[10,126020,126022],{"id":126021},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126024,126025],{},"hello_robot.py",[26,126027,126029],{"className":28,"code":126028,"language":30,"meta":31,"style":31},"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",[33,126030,126031,126037,126052,126056,126068,126080,126084,126097,126101,126120,126130,126140,126154,126158,126162,126167,126171,126181,126188,126202,126209,126219,126224,126228,126246,126251,126255,126262],{"__ignoreMap":31},[36,126032,126033,126035],{"class":38,"line":39},[36,126034,30871],{"class":46},[36,126036,45782],{"class":42},[36,126038,126039,126042,126045,126047,126049],{"class":38,"line":66},[36,126040,126041],{"class":42},"os.environ[",[36,126043,126044],{"class":405},"'PYOPENGL_PLATFORM'",[36,126046,4923],{"class":42},[36,126048,47],{"class":46},[36,126050,126051],{"class":405}," 'glx'\n",[36,126053,126054],{"class":38,"line":73},[36,126055,2880],{"emptyLinePlaceholder":553},[36,126057,126058,126060,126063,126065],{"class":38,"line":79},[36,126059,30871],{"class":46},[36,126061,126062],{"class":42}," genesis ",[36,126064,31861],{"class":46},[36,126066,126067],{"class":42}," gs\n",[36,126069,126070,126072,126075,126077],{"class":38,"line":85},[36,126071,31215],{"class":46},[36,126073,126074],{"class":42}," pynput ",[36,126076,30871],{"class":46},[36,126078,126079],{"class":42}," keyboard\n",[36,126081,126082],{"class":38,"line":419},[36,126083,2880],{"emptyLinePlaceholder":553},[36,126085,126086,126089,126092,126094],{"class":38,"line":425},[36,126087,126088],{"class":42},"gs.init(",[36,126090,126091],{"class":5696},"backend",[36,126093,47],{"class":46},[36,126095,126096],{"class":42},"gs.gpu)\n",[36,126098,126099],{"class":38,"line":431},[36,126100,2880],{"emptyLinePlaceholder":553},[36,126102,126103,126106,126108,126111,126114,126116,126118],{"class":38,"line":437},[36,126104,126105],{"class":42},"scene ",[36,126107,47],{"class":46},[36,126109,126110],{"class":42}," gs.Scene(",[36,126112,126113],{"class":5696},"show_viewer",[36,126115,47],{"class":46},[36,126117,31954],{"class":53},[36,126119,63],{"class":42},[36,126121,126122,126125,126127],{"class":38,"line":443},[36,126123,126124],{"class":42},"plane ",[36,126126,47],{"class":46},[36,126128,126129],{"class":42}," scene.add_entity(gs.morphs.Plane())\n",[36,126131,126132,126135,126137],{"class":38,"line":2092},[36,126133,126134],{"class":42},"franka ",[36,126136,47],{"class":46},[36,126138,126139],{"class":42}," scene.add_entity(\n",[36,126141,126142,126145,126147,126149,126152],{"class":38,"line":2097},[36,126143,126144],{"class":42},"    gs.morphs.MJCF(",[36,126146,45831],{"class":5696},[36,126148,47],{"class":46},[36,126150,126151],{"class":405},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,126153,38524],{"class":42},[36,126155,126156],{"class":38,"line":2103},[36,126157,63],{"class":42},[36,126159,126160],{"class":38,"line":2108},[36,126161,2880],{"emptyLinePlaceholder":553},[36,126163,126164],{"class":38,"line":2122},[36,126165,126166],{"class":42},"scene.build()\n",[36,126168,126169],{"class":38,"line":2127},[36,126170,2880],{"emptyLinePlaceholder":553},[36,126172,126173,126175,126178],{"class":38,"line":2133},[36,126174,32424],{"class":46},[36,126176,126177],{"class":2443}," on_press",[36,126179,126180],{"class":42},"(key):\n",[36,126182,126183,126186],{"class":38,"line":2154},[36,126184,126185],{"class":46},"    try",[36,126187,4219],{"class":42},[36,126189,126190,126192,126195,126197,126200],{"class":38,"line":2159},[36,126191,2977],{"class":46},[36,126193,126194],{"class":42}," key.char ",[36,126196,3429],{"class":46},[36,126198,126199],{"class":405}," 'q'",[36,126201,4219],{"class":42},[36,126203,126204,126206],{"class":38,"line":2173},[36,126205,16212],{"class":46},[36,126207,126208],{"class":53}," False\n",[36,126210,126211,126214,126217],{"class":38,"line":2178},[36,126212,126213],{"class":46},"    except",[36,126215,126216],{"class":53}," AttributeError",[36,126218,4219],{"class":42},[36,126220,126221],{"class":38,"line":2207},[36,126222,126223],{"class":46},"        pass\n",[36,126225,126226],{"class":38,"line":2212},[36,126227,2880],{"emptyLinePlaceholder":553},[36,126229,126230,126233,126235,126238,126241,126243],{"class":38,"line":2229},[36,126231,126232],{"class":42},"listener ",[36,126234,47],{"class":46},[36,126236,126237],{"class":42}," keyboard.Listener(",[36,126239,126240],{"class":5696},"on_press",[36,126242,47],{"class":46},[36,126244,126245],{"class":42},"on_press)\n",[36,126247,126248],{"class":38,"line":2234},[36,126249,126250],{"class":42},"listener.start()\n",[36,126252,126253],{"class":38,"line":2239},[36,126254,2880],{"emptyLinePlaceholder":553},[36,126256,126257,126259],{"class":38,"line":2244},[36,126258,109064],{"class":46},[36,126260,126261],{"class":42}," listener.running:\n",[36,126263,126264],{"class":38,"line":2258},[36,126265,126266],{"class":42},"    scene.step()\n",[19,126268,126269],{},[519,126270],{"alt":31,"src":126271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[539,126273,126274],{},"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":31,"searchDepth":66,"depth":66,"links":126276},[],{"category":23858},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125881,"description":125886},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126283,"title":126284,"body":126285,"description":550,"extension":551,"meta":126300,"navigation":553,"path":126301,"seo":126302,"stem":126303,"__hash__":126304},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126286,"toc":126297},[126287,126290,126294],[10,126288,126284],{"id":126289},"_1-基础知识",[14,126291,126293],{"id":126292},"_11-js的组成","1.1 js的组成",[19,126295,126296],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":66,"depth":66,"links":126298},[126299],{"id":126292,"depth":66,"text":126293},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126284,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126306,"title":126307,"body":126308,"description":550,"extension":551,"meta":126447,"navigation":553,"path":126448,"seo":126449,"stem":126450,"__hash__":126451},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126309,"toc":126435},[126310,126313,126317,126320,126324,126334,126338,126341,126344,126347,126351,126358,126364,126368,126374,126385,126389,126392,126396,126399,126403,126406,126410,126413,126417,126420,126423,126426,126429,126432],[10,126311,126307],{"id":126312},"_2-vscode必备内容",[14,126314,126316],{"id":126315},"_21-标签分类","2.1 标签分类",[19,126318,126319],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126321,126323],{"id":126322},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126325,126326,126327,126329,126330,126333],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,126328,846],{}," 然后按 ",[33,126331,126332],{},"Tab","，快速自动生成基本结构。",[14,126335,126337],{"id":126336},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126339,126340],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126342,126343],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126345,126346],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126348,126350],{"id":126349},"_24-视图缩放","2.4 视图缩放",[19,126352,126353,126354,126357],{},"缩放视图 ",[33,126355,126356],{},"ctrl+"," 可实现代码增大。",[19,126359,126360,126363],{},[33,126361,126362],{},"ctrl-"," 可实现代码减小。",[14,126365,126367],{"id":126366},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126369,126370,126371,28866],{},"VSCode 新建文件快捷键为 ",[33,126372,126373],{},"ctrl+N",[19,126375,126376,126377,126380,126381,126384],{},"保存快捷键为 ",[33,126378,126379],{},"ctrl+S","，将文本保存为 ",[33,126382,126383],{},".html"," 文件。",[14,126386,126388],{"id":126387},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126390,126391],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126393,126395],{"id":126394},"_27-vscode-icons","2.7 vscode-icons",[19,126397,126398],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126400,126402],{"id":126401},"_28-easy-less","2.8 Easy LESS",[19,126404,126405],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126407,126409],{"id":126408},"_29-会了吧插件","2.9 会了吧插件",[19,126411,126412],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126414,126416],{"id":126415},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126418,126419],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126421,126422],{},"②选定多个相同的单词:ctrl+D",[19,126424,126425],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126427,126428],{},"④全局替换某些单词:ctrl+h",[19,126430,126431],{},"⑤快速定位到某一行:ctrl+g",[19,126433,126434],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":66,"depth":66,"links":126436},[126437,126438,126439,126440,126441,126442,126443,126444,126445,126446],{"id":126315,"depth":66,"text":126316},{"id":126322,"depth":66,"text":126323},{"id":126336,"depth":66,"text":126337},{"id":126349,"depth":66,"text":126350},{"id":126366,"depth":66,"text":126367},{"id":126387,"depth":66,"text":126388},{"id":126394,"depth":66,"text":126395},{"id":126401,"depth":66,"text":126402},{"id":126408,"depth":66,"text":126409},{"id":126415,"depth":66,"text":126416},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126307,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126453,"title":126454,"body":126455,"description":550,"extension":551,"meta":126614,"navigation":553,"path":126615,"seo":126616,"stem":126617,"__hash__":126618},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126456,"toc":126606},[126457,126460,126464,126474,126480,126486,126490,126499,126503,126508,126511,126514,126518,126521,126531,126540,126549,126558,126568,126575,126580,126585,126598],[10,126458,126454],{"id":126459},"_3-html文本与容器标签",[14,126461,126463],{"id":126462},"_31-标题标签","3.1 标题标签",[19,126465,126466,126469,126470,126473],{},[33,126467,126468],{},"\u003Ch1>","我是一级标签",[33,126471,126472],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126475,126476,126469,126478],{},[33,126477,126468],{},[33,126479,126472],{},[19,126481,123736,126482,126485],{},[33,126483,126484],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126487,126489],{"id":126488},"_32-段落标签","3.2 段落标签",[19,126491,126492,126495,126496],{},[33,126493,126494],{},"\u003Cp>","....",[33,126497,126498],{},"\u003C\u002Fp>",[14,126500,126502],{"id":126501},"_33-换行标签","3.3 换行标签",[19,126504,126505],{},[33,126506,126507],{},"\u003Cbr \u002F>",[19,126509,126510],{},"具有强制换行的作用",[19,126512,126513],{},"单标签",[14,126515,126517],{"id":126516},"_34-文本格式化标签","3.4 文本格式化标签",[19,126519,126520],{},"提供粗体、斜体和下划线等效果",[19,126522,126523,126524,83016,126527,126530],{},"加粗：",[33,126525,126526],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,126528,126529],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126532,126533,126534,83016,126537,126530],{},"斜体：",[33,126535,126536],{},"\u003Cem>...\u003C\u002Fem>",[33,126538,126539],{},"\u003Ci>...\u003C\u002Fi>",[19,126541,126542,126543,83016,126546,126530],{},"删除线：",[33,126544,126545],{},"\u003Cdel>...\u003C\u002Fdel>",[33,126547,126548],{},"\u003Cs>...\u003C\u002Fs>",[19,126550,126551,126552,83016,126555,126530],{},"下划线：",[33,126553,126554],{},"\u003Cins>...\u003C\u002Fins>",[33,126556,126557],{},"\u003Cu>...\u003C\u002Fu>",[14,126559,126561,126562,18890,126565,103094],{"id":126560},"_35-div和span标签","3.5 ",[33,126563,126564],{},"\u003Cdiv>",[33,126566,126567],{},"\u003Cspan>",[19,126569,126570,101419,126572,126574],{},[33,126571,126564],{},[33,126573,126567],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126576,126577],{},[33,126578,126579],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126581,126582],{},[33,126583,126584],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126586,126587,126588,126590,126591,126593,126594,126597],{},"两者特点：①",[33,126589,126564],{}," 标签用来布局，但一行通常只放一个 ",[33,126592,126564],{},"。可以理解为一个大盒子，独占一行，在 ",[33,126595,126596],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126599,77726,126600,126602,126603,126605],{},[33,126601,126567],{}," 标签也可用于布局，一行可以放多个 ",[33,126604,126567],{},"，可理解为小盒子。",{"title":31,"searchDepth":66,"depth":66,"links":126607},[126608,126609,126610,126611,126612],{"id":126462,"depth":66,"text":126463},{"id":126488,"depth":66,"text":126489},{"id":126501,"depth":66,"text":126502},{"id":126516,"depth":66,"text":126517},{"id":126560,"depth":66,"text":126613},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126454,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126620,"title":126621,"body":126622,"description":550,"extension":551,"meta":126819,"navigation":553,"path":126820,"seo":126821,"stem":126822,"__hash__":126823},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126623,"toc":126811},[126624,126627,126631,126634,126640,126647,126653,126659,126662,126665,126668,126671,126674,126677,126680,126684,126687,126690,126693,126699,126705,126711,126718,126722,126728,126734,126737,126740,126746,126752,126758,126761,126764,126768,126771,126781,126787,126791,126800,126804,126807],[10,126625,126621],{"id":126626},"_4-html图像与链接",[14,126628,126630],{"id":126629},"_41-图像标签","4.1 图像标签",[19,126632,126633],{},"（1）标签",[19,126635,126636,126639],{},[33,126637,126638],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126641,126642,126643,126646],{},"src是",[33,126644,126645],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126648,126649,126650],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,126651,126652],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126654,126655,126656],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,126657,126658],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126660,126661],{},"width:像素，设置图像的宽度",[19,126663,126664],{},"height:像素，设置图像的高度",[19,126666,126667],{},"border：像素，设置图像的边框粗细",[19,126669,126670],{},"（2）图像标签属性的注意点：",[19,126672,126673],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126675,126676],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126678,126679],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126681,126683],{"id":126682},"_42-路径注意要点","4.2 路径注意要点：",[19,126685,126686],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126688,126689],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126691,126692],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126694,126695,126696],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,126697,126698],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126700,126701,126702],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,126703,126704],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126706,126707,126708],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,126709,126710],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126712,126713,126714,870],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[43,126715,126716],{"href":126716,"rel":126717},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24345],[14,126719,126721],{"id":126720},"_43-超链接标签","4.3 超链接标签",[19,126723,126724,126727],{},[33,126725,126726],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126729,126730,126731],{},"①语法格式：",[33,126732,126733],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126735,126736],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126738,126739],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126741,126742,126743],{},"③链接分类：外部链接：",[33,126744,126745],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126747,126748,126749],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,126750,126751],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126753,126754,126755],{},"空链接：如果当时没有确定链接目标时，",[33,126756,126757],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126759,126760],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126762,126763],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126765,126767],{"id":126766},"_44-锚点链接","4.4 锚点链接",[19,126769,126770],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126772,126773,126774,126777,126778],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,126775,126776],{},"\u003Ca href=\"#two\">","第二级",[33,126779,126780],{},"\u003C\u002Fa>",[19,126782,126783,126784],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,126785,126786],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126788,126790],{"id":126789},"_45-注释标签","4.5 注释标签",[19,126792,126793,126796,126797],{},[33,126794,126795],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,126798,126799],{},"ctrl+\u002F",[14,126801,126803],{"id":126802},"_46-特殊字符","4.6 特殊字符",[19,126805,126806],{},"可以实现添加多个空格",[519,126808],{"style":126809,"src":126810},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":66,"depth":66,"links":126812},[126813,126814,126815,126816,126817,126818],{"id":126629,"depth":66,"text":126630},{"id":126682,"depth":66,"text":126683},{"id":126720,"depth":66,"text":126721},{"id":126766,"depth":66,"text":126767},{"id":126789,"depth":66,"text":126790},{"id":126802,"depth":66,"text":126803},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126621,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126825,"title":126826,"body":126827,"description":550,"extension":551,"meta":127120,"navigation":553,"path":127121,"seo":127122,"stem":127123,"__hash__":127124},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126828,"toc":127111},[126829,126832,126836,126839,126842,126845,126848,126851,126854,126857,126860,126863,126883,126889,126893,126896,126899,126902,126905,126908,126911,126915,126918,126921,126924,126927,126940,126945,126948,126951,126966,126969,126972,126975,126978,126981,126985,126988,126995,126998,127001,127004,127007,127010,127016,127019,127022,127028,127031,127034,127037,127043,127046,127049,127063,127070,127073,127076,127083,127092,127095,127098,127101,127105,127108],[10,126830,126826],{"id":126831},"_5-html表格列表与表单",[14,126833,126835],{"id":126834},"_51-表格标签","5.1 表格标签",[19,126837,126838],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126840,126841],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126843,126844],{},"②表格基本语法：",[519,126846],{"style":126809,"src":126847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126849,126850],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[519,126852],{"style":126809,"src":126853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126855,126856],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[519,126858],{"style":126809,"src":126859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126861,126862],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126864,126865,126868,126869,126871,126872,126875,126876,126878,126879,126882],{},[33,126866,126867],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,126870,126867],{},"内部必须拥有",[33,126873,126874],{},"\u003Ctr>","标签，一般位于第一行，",[33,126877,126867],{},"比",[33,126880,126881],{},"\u003Cth>","范围广",[19,126884,126885,126888],{},[33,126886,126887],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126890,126892],{"id":126891},"_52-合并单元格","5.2 合并单元格",[19,126894,126895],{},"（1）合并单元格方式：",[19,126897,126898],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126900,126901],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126903,126904],{},"（2）目标单元格：",[19,126906,126907],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126909,126910],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126912,126914],{"id":126913},"_53-列表标签","5.3 列表标签",[19,126916,126917],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126919,126920],{},"①无序列表：",[519,126922],{"style":126809,"src":126923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126925,126926],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126928,126929,126932,126933,126936,126937,126939],{},[33,126930,126931],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,126934,126935],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,126938,126931],{},"中输入其他标签或文字是不对的",[19,126941,126942,126944],{},[33,126943,126935],{},"之间相当于一个容器，可以容纳所有元素",[19,126946,126947],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126949,126950],{},"在css中去除前边的小圆点采用如下代码:",[26,126952,126956],{"className":126953,"code":126954,"language":126955,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,126957,126958],{"__ignoreMap":31},[36,126959,126960,126963],{"class":38,"line":39},[36,126961,126962],{"class":51777},"list-style",[36,126964,126965],{"class":42},": none;\n",[19,126967,126968],{},"②有序列表：",[519,126970],{"style":126809,"src":126971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126973,126974],{},"③自定义列表：",[519,126976],{"style":126809,"src":126977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[519,126979],{"style":126809,"src":126980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126982,126984],{"id":126983},"_54-表单标签","5.4 表单标签",[19,126986,126987],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126989,126990,126991,126994],{},"（1）表单域：包含单元素的区域，",[33,126992,126993],{},"\u003Cform>","标签可以实现信息的收集和传递。",[519,126996],{"style":126809,"src":126997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126999,127000],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127002,127003],{},"表单元素提交必须有name属性",[19,127005,127006],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127008,127009],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127011,77703,127012,127015],{},[33,127013,127014],{},"\u003Cinput>","输入表单元素",[519,127017],{"style":126809,"src":127018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[519,127020],{"style":126809,"src":127021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127023,127024,127025],{},"单选按钮：",[33,127026,127027],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[519,127029],{"style":126809,"src":127030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127032,127033],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[519,127035],{"style":126809,"src":127036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127038,127039,127042],{},[770,127040,127041],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127044,127045],{},"②select下拉表单元素：可以节约页面控件",[519,127047],{"style":126809,"src":127048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127050,127051,14275,127053,127056,127057,127059,127060,127062],{},[770,127052,656],{},[33,127054,127055],{},"\u003Cselect>","中至少包含一对",[33,127058,103115],{},"；在",[33,127061,103115],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127064,127065,127066,127069],{},"③",[33,127067,127068],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[519,127071],{"style":126809,"src":127072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127074,127075],{},"3行20列",[14,127077,127079,127080,103094],{"id":127078},"_55-lable标签","5.5 ",[33,127081,127082],{},"\u003Clable>",[19,127084,127085,127086,127088,127089,127091],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,127087,127082],{},"标签用于绑定一个表单标签，当点击",[33,127090,127082],{},"标签内的文本",[19,127093,127094],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[519,127096],{"style":126809,"src":127097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[519,127099],{"style":126809,"src":127100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127102,127104],{"id":127103},"_56-实例","5.6 实例",[519,127106],{"style":126809,"src":127107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[539,127109,127110],{},"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":31,"searchDepth":66,"depth":66,"links":127112},[127113,127114,127115,127116,127117,127119],{"id":126834,"depth":66,"text":126835},{"id":126891,"depth":66,"text":126892},{"id":126913,"depth":66,"text":126914},{"id":126983,"depth":66,"text":126984},{"id":127078,"depth":66,"text":127118},"5.5 \u003Clable>标签",{"id":127103,"depth":66,"text":127104},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126826,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127126,"title":127127,"body":127128,"description":550,"extension":551,"meta":127677,"navigation":553,"path":127678,"seo":127679,"stem":127680,"__hash__":127681},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127129,"toc":127652},[127130,127133,127137,127140,127143,127147,127150,127153,127156,127159,127162,127165,127168,127172,127175,127179,127182,127185,127188,127192,127195,127198,127201,127207,127210,127213,127216,127219,127222,127225,127228,127261,127265,127268,127271,127274,127278,127281,127284,127287,127290,127293,127297,127300,127303,127306,127310,127313,127317,127320,127324,127327,127332,127336,127339,127343,127346,127349,127352,127355,127382,127385,127389,127392,127395,127400,127403,127406,127410,127413,127418,127421,127424,127427,127431,127434,127437,127440,127444,127447,127450,127453,127457,127461,127464,127504,127507,127511,127518,127521,127525,127528,127574,127578,127581,127584,127587,127615,127619,127622,127649],[10,127131,127127],{"id":127132},"_6-css语法与文本样式",[14,127134,127136],{"id":127135},"_61-css语法规范","6.1 css语法规范",[19,127138,127139],{},"由两部分组成，选择器及一条或多条声明",[519,127141],{"style":126809,"src":127142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127144,127145],{},[770,127146,656],{},[19,127148,127149],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127151,127152],{},"②属性与属性值以“键值对”的形式出现",[19,127154,127155],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127157,127158],{},"④属性和属性值之间用英文“;”分开",[519,127160],{"style":126809,"src":127161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[519,127163],{"style":126809,"src":127164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[519,127166],{"style":126809,"src":127167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127169,127171],{"id":127170},"_62-css选择器","6.2 css选择器",[19,127173,127174],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[596,127176,127178],{"id":127177},"_621-标签选择器","6.2.1 标签选择器",[19,127180,127181],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127183,127184],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[519,127186],{"style":126809,"src":127187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[596,127189,127191],{"id":127190},"_622-类选择器","6.2.2 类选择器",[19,127193,127194],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127196,127197],{},"②样例",[519,127199],{"style":126809,"src":127200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127202,127203,127204,127206],{},"③ ",[770,127205,127041],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127208,127209],{},"可以理解为给这个标签起了个名字，来表示；",[19,127211,127212],{},"长名称或词组可以使用横线来为选择器命名；",[19,127214,127215],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127217,127218],{},"命名要有意义；",[519,127220],{"style":126809,"src":127221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127223,127224],{},"类选择器也可以指定特殊的元素p.center{}",[19,127226,127227],{},"p.center和.center都对",[26,127229,127231],{"className":126953,"code":127230,"language":126955,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,127232,127233,127238,127247,127257],{"__ignoreMap":31},[36,127234,127235],{"class":38,"line":39},[36,127236,127237],{"class":69},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,127239,127240,127242,127245],{"class":38,"line":66},[36,127241,19],{"class":51777},[36,127243,127244],{"class":2443},".center",[36,127246,16052],{"class":42},[36,127248,127249,127251,127253,127255],{"class":38,"line":73},[36,127250,71003],{"class":53},[36,127252,51914],{"class":42},[36,127254,52069],{"class":53},[36,127256,1774],{"class":42},[36,127258,127259],{"class":38,"line":79},[36,127260,2045],{"class":42},[596,127262,127264],{"id":127263},"_623-多类名使用","6.2.3 多类名使用",[19,127266,127267],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[519,127269],{"style":126809,"src":127270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127272,127273],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[596,127275,127277],{"id":127276},"_624-id选择器","6.2.4 id选择器",[19,127279,127280],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127282,127283],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[519,127285],{"style":126809,"src":127286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127288,127289],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127291,127292],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[596,127294,127296],{"id":127295},"_625-通配符选择器","6.2.5 通配符选择器",[19,127298,127299],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127301,127302],{},"* {",[19,127304,127305],{},"color=\"red\"}",[596,127307,127309],{"id":127308},"_626-总结","6.2.6 总结",[519,127311],{"style":126809,"src":127312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127314,127316],{"id":127315},"_63-css字体属性","6.3 css字体属性",[19,127318,127319],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[596,127321,127323],{"id":127322},"_631-字体系列","6.3.1 字体系列",[19,127325,127326],{},"font-family: '宋体';",[19,127328,127329,127331],{},[770,127330,656],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[596,127333,127335],{"id":127334},"_632-字体大小","6.3.2 字体大小",[19,127337,127338],{},"font-size: 20px",[19,127340,127341,26954],{},[770,127342,127041],{},[19,127344,127345],{},"①px（像素）大小是网页的最常用单位",[19,127347,127348],{},"②谷歌浏览器默认为16px",[19,127350,127351],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127353,127354],{},"④可以给body指定整个页面的大小：会自动引用",[26,127356,127358],{"className":126953,"code":127357,"language":126955,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,127359,127360,127366,127378],{"__ignoreMap":31},[36,127361,127362,127364],{"class":38,"line":39},[36,127363,52277],{"class":51777},[36,127365,16052],{"class":42},[36,127367,127368,127370,127372,127374,127376],{"class":38,"line":66},[36,127369,71103],{"class":53},[36,127371,51914],{"class":42},[36,127373,1214],{"class":53},[36,127375,51969],{"class":46},[36,127377,1774],{"class":42},[36,127379,127380],{"class":38,"line":73},[36,127381,2045],{"class":42},[19,127383,127384],{},"⑤标题标签比较特殊，需要单独指定大小",[596,127386,127388],{"id":127387},"_633-字体粗细","6.3.3 字体粗细",[19,127390,127391],{},"font-weight: bold;",[19,127393,127394],{},"font-weight: 100；",[19,127396,127397,127399],{},[770,127398,656],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127401,127402],{},"font-weight= 400;",[19,127404,127405],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[596,127407,127409],{"id":127408},"_634-文字样式","6.3.4 文字样式",[19,127411,127412],{},"font-style: normal；",[19,127414,127415,26954],{},[770,127416,127417],{},"属性值",[19,127419,127420],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127422,127423],{},"②italic：浏览器会显示斜体的字体样式",[519,127425],{"style":126809,"src":127426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[596,127428,127430],{"id":127429},"_635-字体符合属性","6.3.5 字体符合属性",[519,127432],{"style":126809,"src":127433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[519,127435],{"style":126809,"src":127436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127438,127439],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127441,127442,26954],{},[770,127443,127041],{},[19,127445,127446],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127448,127449],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127451,127452],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127454,127456],{"id":127455},"_64-css-test文本属性","6.4 css test文本属性",[596,127458,127460],{"id":127459},"_641-文本颜色","6.4.1 文本颜色",[19,127462,127463],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,127465,127467],{"className":126953,"code":127466,"language":126955,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[33,127468,127469,127474,127480,127490,127495,127500],{"__ignoreMap":31},[36,127470,127471],{"class":38,"line":39},[36,127472,127473],{"class":69},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,127475,127476,127478],{"class":38,"line":66},[36,127477,19],{"class":51777},[36,127479,16052],{"class":42},[36,127481,127482,127484,127486,127488],{"class":38,"line":73},[36,127483,71382],{"class":53},[36,127485,51914],{"class":42},[36,127487,57898],{"class":53},[36,127489,1774],{"class":42},[36,127491,127492],{"class":38,"line":79},[36,127493,127494],{"class":69},"  \u002F* color: #ff0000; *\u002F\n",[36,127496,127497],{"class":38,"line":85},[36,127498,127499],{"class":69},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,127501,127502],{"class":38,"line":419},[36,127503,2045],{"class":42},[519,127505],{"style":126809,"src":127506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[596,127508,127510],{"id":127509},"_642-对齐文本","6.4.2 对齐文本",[19,127512,127513,127514,127517],{},"text-align属于用于设置元素内文本内容的 ",[770,127515,127516],{},"水平对齐"," 方式",[19,127519,127520],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[596,127522,127524],{"id":127523},"_643-装饰文本","6.4.3 装饰文本",[19,127526,127527],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,127529,127531],{"className":126953,"code":127530,"language":126955,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,127532,127533,127539,127549,127553,127559,127570],{"__ignoreMap":31},[36,127534,127535,127537],{"class":38,"line":39},[36,127536,43],{"class":51777},[36,127538,16052],{"class":42},[36,127540,127541,127543,127545,127547],{"class":38,"line":66},[36,127542,70979],{"class":53},[36,127544,51914],{"class":42},[36,127546,55214],{"class":53},[36,127548,1774],{"class":42},[36,127550,127551],{"class":38,"line":73},[36,127552,2045],{"class":42},[36,127554,127555,127557],{"class":38,"line":79},[36,127556,19],{"class":51777},[36,127558,16052],{"class":42},[36,127560,127561,127563,127565,127568],{"class":38,"line":85},[36,127562,70979],{"class":53},[36,127564,51914],{"class":42},[36,127566,127567],{"class":53},"underline",[36,127569,1774],{"class":42},[36,127571,127572],{"class":38,"line":419},[36,127573,2045],{"class":42},[596,127575,127577],{"id":127576},"_644-文本缩进","6.4.4 文本缩进",[19,127579,127580],{},"实现文本的第一行首行缩进自己指定的距离",[19,127582,127583],{},"20px往右边走；-20px往左边走",[19,127585,127586],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,127588,127590],{"className":126953,"code":127589,"language":126955,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,127591,127592,127598,127611],{"__ignoreMap":31},[36,127593,127594,127596],{"class":38,"line":39},[36,127595,19],{"class":51777},[36,127597,16052],{"class":42},[36,127599,127600,127603,127605,127607,127609],{"class":38,"line":66},[36,127601,127602],{"class":53},"  text-indent",[36,127604,51914],{"class":42},[36,127606,96],{"class":53},[36,127608,24033],{"class":46},[36,127610,1774],{"class":42},[36,127612,127613],{"class":38,"line":73},[36,127614,2045],{"class":42},[596,127616,127618],{"id":127617},"_645-行间距","6.4.5 行间距",[19,127620,127621],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,127623,127625],{"className":126953,"code":127624,"language":126955,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,127626,127627,127633,127645],{"__ignoreMap":31},[36,127628,127629,127631],{"class":38,"line":39},[36,127630,19],{"class":51777},[36,127632,16052],{"class":42},[36,127634,127635,127638,127640,127643],{"class":38,"line":66},[36,127636,127637],{"class":53},"  line-height",[36,127639,51914],{"class":42},[36,127641,127642],{"class":53},"1.6",[36,127644,1774],{"class":42},[36,127646,127647],{"class":38,"line":73},[36,127648,2045],{"class":42},[539,127650,127651],{},"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":31,"searchDepth":66,"depth":66,"links":127653},[127654,127655,127663,127670],{"id":127135,"depth":66,"text":127136},{"id":127170,"depth":66,"text":127171,"children":127656},[127657,127658,127659,127660,127661,127662],{"id":127177,"depth":73,"text":127178},{"id":127190,"depth":73,"text":127191},{"id":127263,"depth":73,"text":127264},{"id":127276,"depth":73,"text":127277},{"id":127295,"depth":73,"text":127296},{"id":127308,"depth":73,"text":127309},{"id":127315,"depth":66,"text":127316,"children":127664},[127665,127666,127667,127668,127669],{"id":127322,"depth":73,"text":127323},{"id":127334,"depth":73,"text":127335},{"id":127387,"depth":73,"text":127388},{"id":127408,"depth":73,"text":127409},{"id":127429,"depth":73,"text":127430},{"id":127455,"depth":66,"text":127456,"children":127671},[127672,127673,127674,127675,127676],{"id":127459,"depth":73,"text":127460},{"id":127509,"depth":73,"text":127510},{"id":127523,"depth":73,"text":127524},{"id":127576,"depth":73,"text":127577},{"id":127617,"depth":73,"text":127618},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127127,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127683,"title":127684,"body":127685,"description":550,"extension":551,"meta":128334,"navigation":553,"path":128335,"seo":128336,"stem":128337,"__hash__":128338},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127686,"toc":128315},[127687,127690,127694,127698,127758,127762,127772,127775,127778,127782,127807,127811,127814,127817,127820,127823,127826,127830,127833,127836,127878,127881,127907,127913,127916,127920,127924,127930,127933,127936,127939,127942,127945,127948,127993,127997,128000,128003,128007,128011,128040,128043,128048,128051,128054,128057,128060,128064,128068,128071,128073,128076,128080,128083,128087,128090,128093,128096,128100,128104,128110,128120,128123,128126,128129,128132,128135,128258,128266,128274,128312],[10,127688,127684],{"id":127689},"_7-css引入方式与选择器进阶",[14,127691,127693],{"id":127692},"_71-css引入方式","7.1 css引入方式",[596,127695,127697],{"id":127696},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,127699,127703],{"className":127700,"code":127701,"language":127702,"meta":31,"style":31},"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",[33,127704,127705,127713,127720,127732,127745,127750],{"__ignoreMap":31},[36,127706,127707,127709,127711],{"class":38,"line":39},[36,127708,1523],{"class":42},[36,127710,539],{"class":51777},[36,127712,51784],{"class":42},[36,127714,127715,127718],{"class":38,"line":66},[36,127716,127717],{"class":51777},"  h1",[36,127719,16052],{"class":42},[36,127721,127722,127725,127727,127730],{"class":38,"line":73},[36,127723,127724],{"class":53},"    color",[36,127726,51914],{"class":42},[36,127728,127729],{"class":53},"blue",[36,127731,1774],{"class":42},[36,127733,127734,127737,127739,127741,127743],{"class":38,"line":79},[36,127735,127736],{"class":53},"    font-size",[36,127738,51914],{"class":42},[36,127740,1413],{"class":53},[36,127742,51969],{"class":46},[36,127744,1774],{"class":42},[36,127746,127747],{"class":38,"line":85},[36,127748,127749],{"class":42},"  }\n",[36,127751,127752,127754,127756],{"class":38,"line":419},[36,127753,52262],{"class":42},[36,127755,539],{"class":51777},[36,127757,51784],{"class":42},[19,127759,127760,26954],{},[770,127761,127041],{},[19,127763,77703,127764,127767,127768,127771],{},[33,127765,127766],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,127769,127770],{},"\u003Chead>","标签中",[19,127773,127774],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127776,127777],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[596,127779,127781],{"id":127780},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,127783,127785],{"className":127700,"code":127784,"language":127702,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,127786,127787],{"__ignoreMap":31},[36,127788,127789,127791,127793,127795,127797,127800,127803,127805],{"class":38,"line":39},[36,127790,1523],{"class":42},[36,127792,19],{"class":51777},[36,127794,63103],{"class":2443},[36,127796,47],{"class":42},[36,127798,127799],{"class":405},"\"color: red; font-size: 16px;\"",[36,127801,127802],{"class":42},">这是一个段落\u003C\u002F",[36,127804,19],{"class":51777},[36,127806,51784],{"class":42},[19,127808,127809,26954],{},[770,127810,127041],{},[19,127812,127813],{},"①style其实就是标签的属性",[19,127815,127816],{},"②在双引号中间，写法要符合css规范",[19,127818,127819],{},"③可以控制当前的标签设置样式",[19,127821,127822],{},"④书写繁琐，简单时才用",[19,127824,127825],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[596,127827,127829],{"id":127828},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127831,127832],{},"使用最多，单独建一个css文件，然后html引用",[19,127834,127835],{},"①css文件部分： style.css",[26,127837,127839],{"className":126953,"code":127838,"language":126955,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,127840,127841,127846,127852,127862,127874],{"__ignoreMap":31},[36,127842,127843],{"class":38,"line":39},[36,127844,127845],{"class":69},"\u002F* style.css *\u002F\n",[36,127847,127848,127850],{"class":38,"line":66},[36,127849,10],{"class":51777},[36,127851,16052],{"class":42},[36,127853,127854,127856,127858,127860],{"class":38,"line":73},[36,127855,71382],{"class":53},[36,127857,51914],{"class":42},[36,127859,127729],{"class":53},[36,127861,1774],{"class":42},[36,127863,127864,127866,127868,127870,127872],{"class":38,"line":79},[36,127865,71103],{"class":53},[36,127867,51914],{"class":42},[36,127869,1413],{"class":53},[36,127871,51969],{"class":46},[36,127873,1774],{"class":42},[36,127875,127876],{"class":38,"line":85},[36,127877,2045],{"class":42},[19,127879,127880],{},"②html部分",[26,127882,127884],{"className":127700,"code":127883,"language":127702,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,127885,127886],{"__ignoreMap":31},[36,127887,127888,127890,127892,127894,127896,127898,127900,127902,127905],{"class":38,"line":39},[36,127889,1523],{"class":42},[36,127891,69482],{"class":51777},[36,127893,69485],{"class":2443},[36,127895,47],{"class":42},[36,127897,69490],{"class":405},[36,127899,61534],{"class":2443},[36,127901,47],{"class":42},[36,127903,127904],{"class":405},"\"style.css\"",[36,127906,51784],{"class":42},[19,127908,127909,127912],{},[33,127910,127911],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127914,127915],{},"ctrl+0回到页面原来大小",[14,127917,127919],{"id":127918},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[596,127921,127923],{"id":127922},"_721-快速生成html","7.2.1 快速生成html",[19,127925,127926,127927],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,127928,127929],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127931,127932],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127934,127935],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127937,127938],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127940,127941],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127943,127944],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127946,127947],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,127949,127951],{"className":127700,"code":127950,"language":127702,"meta":31,"style":31},"\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",[33,127952,127953,127958,127963,127968,127973,127978,127983,127988],{"__ignoreMap":31},[36,127954,127955],{"class":38,"line":39},[36,127956,127957],{"class":69},"\u003C!-- Emmet 语法示例 -->\n",[36,127959,127960],{"class":38,"line":66},[36,127961,127962],{"class":69},"\u003C!-- div*3        → 生成3个div -->\n",[36,127964,127965],{"class":38,"line":73},[36,127966,127967],{"class":69},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,127969,127970],{"class":38,"line":79},[36,127971,127972],{"class":69},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,127974,127975],{"class":38,"line":85},[36,127976,127977],{"class":69},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,127979,127980],{"class":38,"line":419},[36,127981,127982],{"class":69},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,127984,127985],{"class":38,"line":425},[36,127986,127987],{"class":69},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,127989,127990],{"class":38,"line":431},[36,127991,127992],{"class":69},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[596,127994,127996],{"id":127995},"_722-快速生成css","7.2.2 快速生成css",[19,127998,127999],{},"简写开头",[19,128001,128002],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128004,128006],{"id":128005},"_73-css复合选择器","7.3 css复合选择器",[596,128008,128010],{"id":128009},"_731-后代选择器","7.3.1 后代选择器",[26,128012,128014],{"className":126953,"code":128013,"language":126955,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,128015,128016,128026,128036],{"__ignoreMap":31},[36,128017,128018,128021,128024],{"class":38,"line":39},[36,128019,128020],{"class":2443},".parent",[36,128022,128023],{"class":2443}," .child",[36,128025,16052],{"class":42},[36,128027,128028,128030,128032,128034],{"class":38,"line":66},[36,128029,71382],{"class":53},[36,128031,51914],{"class":42},[36,128033,127729],{"class":53},[36,128035,1774],{"class":42},[36,128037,128038],{"class":38,"line":73},[36,128039,2045],{"class":42},[19,128041,128042],{},"元素1 元素2 {样式声明}",[19,128044,128045],{},[770,128046,128047],{},"注意点:",[19,128049,128050],{},"①元素1和元素2中间用空格隔开",[19,128052,128053],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128055,128056],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128058,128059],{},"④元素1和元素2可以是任意基础选择器",[596,128061,128063],{"id":128062},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128065,128066],{},[770,128067,128047],{},[19,128069,128070],{},"①元素1和元素2中间用大于号隔开",[19,128072,128053],{},[19,128074,128075],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[596,128077,128079],{"id":128078},"_733-并集选择器","7.3.3 并集选择器",[19,128081,128082],{},"元素1，元素2 {样式声明}",[19,128084,128085],{},[770,128086,128047],{},[19,128088,128089],{},"①元素1和元素2中间用逗号隔开",[19,128091,128092],{},"②逗号可以理解为和的意思",[19,128094,128095],{},"③并集选择器通常用于集体声明",[596,128097,128099],{"id":128098},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128101,128102],{},[770,128103,128047],{},[19,128105,128106,128107,128109],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69482,128108],{},"－:visited－:hover－:active。",[19,128111,128112,128113,128116,128117,26221],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128114,128115],"hover",{}," 、 ",[128118,128119],"first-child",{},[19,128121,128122],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128124,128125],{},"link对没访问的进行设置",[19,128127,128128],{},"vistied对已访问的进行改变",[19,128130,128131],{},"hover鼠标经过就会变",[19,128133,128134],{},"active常按(点)就会变",[26,128136,128138],{"className":126953,"code":128137,"language":126955,"meta":31,"style":31},"\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",[33,128139,128140,128145,128154,128164,128174,128178,128187,128198,128202,128210,128220,128230,128234,128243,128254],{"__ignoreMap":31},[36,128141,128142],{"class":38,"line":39},[36,128143,128144],{"class":69},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,128146,128147,128149,128152],{"class":38,"line":66},[36,128148,43],{"class":51777},[36,128150,128151],{"class":2443},":link",[36,128153,16052],{"class":42},[36,128155,128156,128158,128160,128162],{"class":38,"line":73},[36,128157,71382],{"class":53},[36,128159,51914],{"class":42},[36,128161,62846],{"class":53},[36,128163,1774],{"class":42},[36,128165,128166,128168,128170,128172],{"class":38,"line":79},[36,128167,70979],{"class":53},[36,128169,51914],{"class":42},[36,128171,55214],{"class":53},[36,128173,1774],{"class":42},[36,128175,128176],{"class":38,"line":85},[36,128177,2045],{"class":42},[36,128179,128180,128182,128185],{"class":38,"line":419},[36,128181,43],{"class":51777},[36,128183,128184],{"class":2443},":visited",[36,128186,16052],{"class":42},[36,128188,128189,128191,128193,128196],{"class":38,"line":425},[36,128190,71382],{"class":53},[36,128192,51914],{"class":42},[36,128194,128195],{"class":53},"purple",[36,128197,1774],{"class":42},[36,128199,128200],{"class":38,"line":431},[36,128201,2045],{"class":42},[36,128203,128204,128206,128208],{"class":38,"line":437},[36,128205,43],{"class":51777},[36,128207,61417],{"class":2443},[36,128209,16052],{"class":42},[36,128211,128212,128214,128216,128218],{"class":38,"line":443},[36,128213,71382],{"class":53},[36,128215,51914],{"class":42},[36,128217,55366],{"class":53},[36,128219,1774],{"class":42},[36,128221,128222,128224,128226,128228],{"class":38,"line":2092},[36,128223,70979],{"class":53},[36,128225,51914],{"class":42},[36,128227,127567],{"class":53},[36,128229,1774],{"class":42},[36,128231,128232],{"class":38,"line":2097},[36,128233,2045],{"class":42},[36,128235,128236,128238,128241],{"class":38,"line":2103},[36,128237,43],{"class":51777},[36,128239,128240],{"class":2443},":active",[36,128242,16052],{"class":42},[36,128244,128245,128247,128249,128252],{"class":38,"line":2108},[36,128246,71382],{"class":53},[36,128248,51914],{"class":42},[36,128250,128251],{"class":53},"green",[36,128253,1774],{"class":42},[36,128255,128256],{"class":38,"line":2122},[36,128257,2045],{"class":42},[596,128259,128261,128262,128265],{"id":128260},"_735-伪类选择器","7.3.5 ",[128263,128264],"focus",{},"伪类选择器",[19,128267,128268,128270,128271,128273],{},[128263,128269],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,128272,127014],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,128275,128277],{"className":126953,"code":128276,"language":126955,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,128278,128279,128287,128298,128308],{"__ignoreMap":31},[36,128280,128281,128283,128285],{"class":38,"line":39},[36,128282,54298],{"class":51777},[36,128284,62377],{"class":2443},[36,128286,16052],{"class":42},[36,128288,128289,128292,128294,128296],{"class":38,"line":66},[36,128290,128291],{"class":53},"  border-color",[36,128293,51914],{"class":42},[36,128295,55366],{"class":53},[36,128297,1774],{"class":42},[36,128299,128300,128302,128304,128306],{"class":38,"line":73},[36,128301,71275],{"class":53},[36,128303,51914],{"class":42},[36,128305,55214],{"class":53},[36,128307,1774],{"class":42},[36,128309,128310],{"class":38,"line":79},[36,128311,2045],{"class":42},[539,128313,128314],{},"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":31,"searchDepth":66,"depth":66,"links":128316},[128317,128322,128326],{"id":127692,"depth":66,"text":127693,"children":128318},[128319,128320,128321],{"id":127696,"depth":73,"text":127697},{"id":127780,"depth":73,"text":127781},{"id":127828,"depth":73,"text":127829},{"id":127918,"depth":66,"text":127919,"children":128323},[128324,128325],{"id":127922,"depth":73,"text":127923},{"id":127995,"depth":73,"text":127996},{"id":128005,"depth":66,"text":128006,"children":128327},[128328,128329,128330,128331,128332],{"id":128009,"depth":73,"text":128010},{"id":128062,"depth":73,"text":128063},{"id":128078,"depth":73,"text":128079},{"id":128098,"depth":73,"text":128099},{"id":128260,"depth":73,"text":128333},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127684,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128340,"title":128341,"body":128342,"description":550,"extension":551,"meta":130265,"navigation":553,"path":130266,"seo":130267,"stem":130268,"__hash__":130269},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128343,"toc":130239},[128344,128347,128351,128360,128364,128390,128395,128398,128401,128404,128407,128411,128414,128424,128432,128436,128471,128476,128479,128482,128485,128488,128492,128495,128504,128508,128521,128526,128529,128532,128535,128539,128542,128546,128549,128604,128607,128638,128641,128695,128699,128702,128868,128991,128994,128997,129000,129003,129007,129010,129014,129017,129020,129024,129027,129058,129085,129113,129116,129120,129146,129189,129193,129287,129290,129317,129320,129323,129326,129329,129332,129335,129338,129341,129344,129348,129405,129432,129436,129484,129488,129529,129531,129534,129537,129540,129543,129547,129639,129642,129645,129648,129652,129775,129976,129980,129984,129987,129990,129993,129997,130000,130003,130028,130031,130034,130037,130040,130043,130047,130055,130117,130120,130178,130181,130184,130187,130190,130193,130196,130199,130236],[10,128345,128341],{"id":128346},"_8-css显示模式与背景特性",[14,128348,128350],{"id":128349},"_81-css元素显示模式","8.1 css元素显示模式",[19,128352,128353,128354,128356,128357,128359],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,128355,126564],{},"自己占一行，比如一行可以放多个",[33,128358,126567],{},"，HTML 元素一般分为块元素和行内元素两种类型",[596,128361,128363],{"id":128362},"_811-块元素","8.1.1 块元素",[19,128365,128366,128367,128369,128370,833,128373,833,128375,833,128377,833,128380,833,128383,128386,128387,128389],{},"常见的块元素有",[33,128368,126468],{},"~",[33,128371,128372],{},"\u003Ch6>",[33,128374,126494],{},[33,128376,126564],{},[33,128378,128379],{},"\u003Cul>",[33,128381,128382],{},"\u003Col>",[33,128384,128385],{},"\u003Cli>","等，其中 ",[33,128388,126564],{}," 标签是最典型的块元素",[19,128391,128392],{},[770,128393,128394],{},"块级元素的特点：",[19,128396,128397],{},"① 比较霸道，自己独占一行。",[19,128399,128400],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128402,128403],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128405,128406],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128408,128409],{},[770,128410,656],{},[19,128412,128413],{},"①文字类的元素内不能使用块级元素",[19,128415,77726,128416,128418,128419,128421,128422],{},[33,128417,126494],{}," 标签主要用于存放文字，因此 ",[33,128420,126494],{}," 里面不能放块级元素，特别是不能放",[33,128423,126564],{},[19,128425,128426,128427,128369,128429,128431],{},"⑥同理， ",[33,128428,126468],{},[33,128430,128372],{},"等都是文字类块级标签，里面也不能放其他块级元素",[596,128433,128435],{"id":128434},"_812-行内元素","8.1.2 行内元素",[19,128437,128438,128439,833,128441,833,128444,833,128447,833,128450,833,128453,833,128456,833,128459,833,128462,833,128465,128467,128468,128470],{},"常见的行内元素有 ",[33,128440,126726],{},[33,128442,128443],{},"\u003Cstrong>",[33,128445,128446],{},"\u003Cb>",[33,128448,128449],{},"\u003Cem>",[33,128451,128452],{},"\u003Ci>",[33,128454,128455],{},"\u003Cdel>",[33,128457,128458],{},"\u003Cs>",[33,128460,128461],{},"\u003Cins>",[33,128463,128464],{},"\u003Cu>",[33,128466,126567],{}," 等，其中 ",[33,128469,126567],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128472,128473],{},[770,128474,128475],{},"特点：",[19,128477,128478],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128480,128481],{},"② 高、宽直接设置是无效的。",[19,128483,128484],{},"③ 默认宽度就是它本身内容的宽度。",[19,128486,128487],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128489,128490],{},[770,128491,656],{},[19,128493,128494],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128496,128497,128498,128500,128501,128503],{},"②特殊情况链接 ",[33,128499,126726],{}," 里面可以放块级元素，但是给 ",[33,128502,126726],{}," 转换一下块级模式最安全",[596,128505,128507],{"id":128506},"_813-行内块元素","8.1.3 行内块元素",[19,128509,128510,128511,833,128514,833,128517,128520],{},"在行内元素中有几个特殊的标签 —— ",[33,128512,128513],{},"\u003Cimg \u002F>",[33,128515,128516],{},"\u003Cinput \u002F>",[33,128518,128519],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128522,128523],{},[770,128524,128525],{},"行内块元素的特点：",[19,128527,128528],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128530,128531],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128533,128534],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[596,128536,128538],{"id":128537},"_814-总结","8.1.4 总结",[519,128540],{"style":126809,"src":128541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[596,128543,128545],{"id":128544},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128547,128548],{},"①转换为块元素：display:block;",[26,128550,128552],{"className":126953,"code":128551,"language":126955,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,128553,128554,128559,128565,128576,128588,128600],{"__ignoreMap":31},[36,128555,128556],{"class":38,"line":39},[36,128557,128558],{"class":69},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,128560,128561,128563],{"class":38,"line":66},[36,128562,43],{"class":51777},[36,128564,16052],{"class":42},[36,128566,128567,128570,128572,128574],{"class":38,"line":73},[36,128568,128569],{"class":53},"  display",[36,128571,51914],{"class":42},[36,128573,61346],{"class":53},[36,128575,1774],{"class":42},[36,128577,128578,128580,128582,128584,128586],{"class":38,"line":79},[36,128579,71045],{"class":53},[36,128581,51914],{"class":42},[36,128583,930],{"class":53},[36,128585,51969],{"class":46},[36,128587,1774],{"class":42},[36,128589,128590,128592,128594,128596,128598],{"class":38,"line":85},[36,128591,71265],{"class":53},[36,128593,51914],{"class":42},[36,128595,1018],{"class":53},[36,128597,51969],{"class":46},[36,128599,1774],{"class":42},[36,128601,128602],{"class":38,"line":419},[36,128603,2045],{"class":42},[19,128605,128606],{},"②转换为行内元素：display:inline;",[26,128608,128610],{"className":126953,"code":128609,"language":126955,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,128611,128612,128617,128623,128634],{"__ignoreMap":31},[36,128613,128614],{"class":38,"line":39},[36,128615,128616],{"class":69},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,128618,128619,128621],{"class":38,"line":66},[36,128620,52088],{"class":51777},[36,128622,16052],{"class":42},[36,128624,128625,128627,128629,128632],{"class":38,"line":73},[36,128626,128569],{"class":53},[36,128628,51914],{"class":42},[36,128630,128631],{"class":53},"inline",[36,128633,1774],{"class":42},[36,128635,128636],{"class":38,"line":79},[36,128637,2045],{"class":42},[19,128639,128640],{},"③转换为行内块：display:inline-block;",[26,128642,128644],{"className":126953,"code":128643,"language":126955,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,128645,128646,128651,128657,128667,128679,128691],{"__ignoreMap":31},[36,128647,128648],{"class":38,"line":39},[36,128649,128650],{"class":69},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,128652,128653,128655],{"class":38,"line":66},[36,128654,36],{"class":51777},[36,128656,16052],{"class":42},[36,128658,128659,128661,128663,128665],{"class":38,"line":73},[36,128660,128569],{"class":53},[36,128662,51914],{"class":42},[36,128664,72860],{"class":53},[36,128666,1774],{"class":42},[36,128668,128669,128671,128673,128675,128677],{"class":38,"line":79},[36,128670,71045],{"class":53},[36,128672,51914],{"class":42},[36,128674,1225],{"class":53},[36,128676,51969],{"class":46},[36,128678,1774],{"class":42},[36,128680,128681,128683,128685,128687,128689],{"class":38,"line":85},[36,128682,71265],{"class":53},[36,128684,51914],{"class":42},[36,128686,1564],{"class":53},[36,128688,51969],{"class":46},[36,128690,1774],{"class":42},[36,128692,128693],{"class":38,"line":419},[36,128694,2045],{"class":42},[596,128696,128698],{"id":128697},"_816-小米侧边栏","8.1.6 小米侧边栏",[519,128700],{"style":126809,"src":128701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,128703,128705],{"className":127700,"code":128704,"language":127702,"meta":31,"style":31},"\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",[33,128706,128707,128712,128727,128746,128765,128784,128803,128822,128841,128860],{"__ignoreMap":31},[36,128708,128709],{"class":38,"line":39},[36,128710,128711],{"class":69},"\u003C!-- 小米侧边栏案例 -->\n",[36,128713,128714,128716,128718,128720,128722,128725],{"class":38,"line":66},[36,128715,1523],{"class":42},[36,128717,52088],{"class":51777},[36,128719,53963],{"class":2443},[36,128721,47],{"class":42},[36,128723,128724],{"class":405},"\"sidebar\"",[36,128726,51784],{"class":42},[36,128728,128729,128731,128733,128735,128737,128739,128742,128744],{"class":38,"line":73},[36,128730,52621],{"class":42},[36,128732,43],{"class":51777},[36,128734,61534],{"class":2443},[36,128736,47],{"class":42},[36,128738,61539],{"class":405},[36,128740,128741],{"class":42},">手机 电话卡\u003C\u002F",[36,128743,43],{"class":51777},[36,128745,51784],{"class":42},[36,128747,128748,128750,128752,128754,128756,128758,128761,128763],{"class":38,"line":79},[36,128749,52621],{"class":42},[36,128751,43],{"class":51777},[36,128753,61534],{"class":2443},[36,128755,47],{"class":42},[36,128757,61539],{"class":405},[36,128759,128760],{"class":42},">电视 盒子\u003C\u002F",[36,128762,43],{"class":51777},[36,128764,51784],{"class":42},[36,128766,128767,128769,128771,128773,128775,128777,128780,128782],{"class":38,"line":85},[36,128768,52621],{"class":42},[36,128770,43],{"class":51777},[36,128772,61534],{"class":2443},[36,128774,47],{"class":42},[36,128776,61539],{"class":405},[36,128778,128779],{"class":42},">笔记本 平板\u003C\u002F",[36,128781,43],{"class":51777},[36,128783,51784],{"class":42},[36,128785,128786,128788,128790,128792,128794,128796,128799,128801],{"class":38,"line":419},[36,128787,52621],{"class":42},[36,128789,43],{"class":51777},[36,128791,61534],{"class":2443},[36,128793,47],{"class":42},[36,128795,61539],{"class":405},[36,128797,128798],{"class":42},">出行 穿戴\u003C\u002F",[36,128800,43],{"class":51777},[36,128802,51784],{"class":42},[36,128804,128805,128807,128809,128811,128813,128815,128818,128820],{"class":38,"line":425},[36,128806,52621],{"class":42},[36,128808,43],{"class":51777},[36,128810,61534],{"class":2443},[36,128812,47],{"class":42},[36,128814,61539],{"class":405},[36,128816,128817],{"class":42},">智能 路由器\u003C\u002F",[36,128819,43],{"class":51777},[36,128821,51784],{"class":42},[36,128823,128824,128826,128828,128830,128832,128834,128837,128839],{"class":38,"line":431},[36,128825,52621],{"class":42},[36,128827,43],{"class":51777},[36,128829,61534],{"class":2443},[36,128831,47],{"class":42},[36,128833,61539],{"class":405},[36,128835,128836],{"class":42},">健康 儿童\u003C\u002F",[36,128838,43],{"class":51777},[36,128840,51784],{"class":42},[36,128842,128843,128845,128847,128849,128851,128853,128856,128858],{"class":38,"line":437},[36,128844,52621],{"class":42},[36,128846,43],{"class":51777},[36,128848,61534],{"class":2443},[36,128850,47],{"class":42},[36,128852,61539],{"class":405},[36,128854,128855],{"class":42},">耳机 音响\u003C\u002F",[36,128857,43],{"class":51777},[36,128859,51784],{"class":42},[36,128861,128862,128864,128866],{"class":38,"line":443},[36,128863,52262],{"class":42},[36,128865,52088],{"class":51777},[36,128867,51784],{"class":42},[26,128869,128871],{"className":126953,"code":128870,"language":126955,"meta":31,"style":31},".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",[33,128872,128873,128882,128892,128905,128917,128929,128941,128951,128962,128966,128976,128987],{"__ignoreMap":31},[36,128874,128875,128878,128880],{"class":38,"line":39},[36,128876,128877],{"class":2443},".sidebar",[36,128879,1879],{"class":51777},[36,128881,16052],{"class":42},[36,128883,128884,128886,128888,128890],{"class":38,"line":66},[36,128885,128569],{"class":53},[36,128887,51914],{"class":42},[36,128889,61346],{"class":53},[36,128891,1774],{"class":42},[36,128893,128894,128896,128898,128901,128903],{"class":38,"line":73},[36,128895,71045],{"class":53},[36,128897,51914],{"class":42},[36,128899,128900],{"class":53},"234",[36,128902,51969],{"class":46},[36,128904,1774],{"class":42},[36,128906,128907,128909,128911,128913,128915],{"class":38,"line":79},[36,128908,71265],{"class":53},[36,128910,51914],{"class":42},[36,128912,1068],{"class":53},[36,128914,51969],{"class":46},[36,128916,1774],{"class":42},[36,128918,128919,128921,128923,128925,128927],{"class":38,"line":85},[36,128920,127637],{"class":53},[36,128922,51914],{"class":42},[36,128924,1068],{"class":53},[36,128926,51969],{"class":46},[36,128928,1774],{"class":42},[36,128930,128931,128933,128935,128937,128939],{"class":38,"line":419},[36,128932,71300],{"class":53},[36,128934,51914],{"class":42},[36,128936,1564],{"class":53},[36,128938,51969],{"class":46},[36,128940,1774],{"class":42},[36,128942,128943,128945,128947,128949],{"class":38,"line":425},[36,128944,71382],{"class":53},[36,128946,51914],{"class":42},[36,128948,61319],{"class":53},[36,128950,1774],{"class":42},[36,128952,128953,128955,128957,128960],{"class":38,"line":431},[36,128954,71355],{"class":53},[36,128956,51914],{"class":42},[36,128958,128959],{"class":53},"#55585a",[36,128961,1774],{"class":42},[36,128963,128964],{"class":38,"line":437},[36,128965,2045],{"class":42},[36,128967,128968,128970,128972,128974],{"class":38,"line":443},[36,128969,128877],{"class":2443},[36,128971,1879],{"class":51777},[36,128973,61417],{"class":2443},[36,128975,16052],{"class":42},[36,128977,128978,128980,128982,128985],{"class":38,"line":2092},[36,128979,71355],{"class":53},[36,128981,51914],{"class":42},[36,128983,128984],{"class":53},"#ff6700",[36,128986,1774],{"class":42},[36,128988,128989],{"class":38,"line":2097},[36,128990,2045],{"class":42},[519,128992],{"style":126809,"src":128993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128995,128996],{},"行高=盒子高度：实现文字的垂直居中",[19,128998,128999],{},"原理讲解：",[519,129001],{"style":126809,"src":129002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129004,129006],{"id":129005},"_82-css背景","8.2 css背景",[19,129008,129009],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[596,129011,129013],{"id":129012},"_821-背景颜色","8.2.1 背景颜色",[19,129015,129016],{},"background-color:颜色值;",[19,129018,129019],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[596,129021,129023],{"id":129022},"_822-背景图片","8.2.2 背景图片",[19,129025,129026],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,129028,129030],{"className":126953,"code":129029,"language":126955,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,129031,129032,129038,129054],{"__ignoreMap":31},[36,129033,129034,129036],{"class":38,"line":39},[36,129035,52088],{"class":51777},[36,129037,16052],{"class":42},[36,129039,129040,129043,129045,129047,129049,129052],{"class":38,"line":66},[36,129041,129042],{"class":53},"  background-image",[36,129044,51914],{"class":42},[36,129046,62203],{"class":53},[36,129048,345],{"class":42},[36,129050,129051],{"class":5696},"images\u002Fbg.png",[36,129053,3199],{"class":42},[36,129055,129056],{"class":38,"line":73},[36,129057,2045],{"class":42},[758,129059,129060,129069],{},[761,129061,129062],{},[764,129063,129064,129067],{},[767,129065,129066],{"align":24216},"参数值",[767,129068,103097],{"align":24216},[805,129070,129071,129078],{},[764,129072,129073,129075],{},[810,129074,55214],{"align":24216},[810,129076,129077],{"align":24216},"无背景图（默认的）",[764,129079,129080,129082],{},[810,129081,62203],{"align":24216},[810,129083,129084],{"align":24216},"使用绝对或相对地址指定背景图像",[26,129086,129087],{"className":126953,"code":129029,"language":126955,"meta":31,"style":31},[33,129088,129089,129095,129109],{"__ignoreMap":31},[36,129090,129091,129093],{"class":38,"line":39},[36,129092,52088],{"class":51777},[36,129094,16052],{"class":42},[36,129096,129097,129099,129101,129103,129105,129107],{"class":38,"line":66},[36,129098,129042],{"class":53},[36,129100,51914],{"class":42},[36,129102,62203],{"class":53},[36,129104,345],{"class":42},[36,129106,129051],{"class":5696},[36,129108,3199],{"class":42},[36,129110,129111],{"class":38,"line":73},[36,129112,2045],{"class":42},[19,129114,129115],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[596,129117,129119],{"id":129118},"_823-背景平铺","8.2.3 背景平铺",[26,129121,129123],{"className":126953,"code":129122,"language":126955,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,129124,129125,129131,129142],{"__ignoreMap":31},[36,129126,129127,129129],{"class":38,"line":39},[36,129128,52088],{"class":51777},[36,129130,16052],{"class":42},[36,129132,129133,129136,129138,129140],{"class":38,"line":66},[36,129134,129135],{"class":53},"  background-repeat",[36,129137,51914],{"class":42},[36,129139,62213],{"class":53},[36,129141,1774],{"class":42},[36,129143,129144],{"class":38,"line":73},[36,129145,2045],{"class":42},[758,129147,129148,129156],{},[761,129149,129150],{},[764,129151,129152,129154],{},[767,129153,129066],{"align":24216},[767,129155,103097],{"align":24216},[805,129157,129158,129166,129173,129181],{},[764,129159,129160,129163],{},[810,129161,129162],{"align":24216},"repeat",[810,129164,129165],{"align":24216},"背景图像在纵向和横向上平铺（默认的）",[764,129167,129168,129170],{},[810,129169,62213],{"align":24216},[810,129171,129172],{"align":24216},"背景图像不平铺",[764,129174,129175,129178],{},[810,129176,129177],{"align":24216},"repeat-x",[810,129179,129180],{"align":24216},"背景图像在横向上平铺",[764,129182,129183,129186],{},[810,129184,129185],{"align":24216},"repeat-y",[810,129187,129188],{"align":24216},"背景图像在纵向平铺",[596,129190,129192],{"id":129191},"_824-背景图片位置","8.2.4 背景图片位置",[26,129194,129196],{"className":126953,"code":129195,"language":126955,"meta":31,"style":31},"\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",[33,129197,129198,129203,129209,129223,129227,129232,129238,129254,129258,129263,129269,129283],{"__ignoreMap":31},[36,129199,129200],{"class":38,"line":39},[36,129201,129202],{"class":69},"\u002F* 方位名词 *\u002F\n",[36,129204,129205,129207],{"class":38,"line":66},[36,129206,52088],{"class":51777},[36,129208,16052],{"class":42},[36,129210,129211,129214,129216,129218,129221],{"class":38,"line":73},[36,129212,129213],{"class":53},"  background-position",[36,129215,51914],{"class":42},[36,129217,52069],{"class":53},[36,129219,129220],{"class":53}," top",[36,129222,1774],{"class":42},[36,129224,129225],{"class":38,"line":79},[36,129226,2045],{"class":42},[36,129228,129229],{"class":38,"line":85},[36,129230,129231],{"class":69},"\u002F* 精确单位 *\u002F\n",[36,129233,129234,129236],{"class":38,"line":419},[36,129235,52088],{"class":51777},[36,129237,16052],{"class":42},[36,129239,129240,129242,129244,129246,129248,129250,129252],{"class":38,"line":425},[36,129241,129213],{"class":53},[36,129243,51914],{"class":42},[36,129245,1313],{"class":53},[36,129247,51969],{"class":46},[36,129249,57981],{"class":53},[36,129251,51969],{"class":46},[36,129253,1774],{"class":42},[36,129255,129256],{"class":38,"line":431},[36,129257,2045],{"class":42},[36,129259,129260],{"class":38,"line":437},[36,129261,129262],{"class":69},"\u002F* 混合单位 *\u002F\n",[36,129264,129265,129267],{"class":38,"line":443},[36,129266,52088],{"class":51777},[36,129268,16052],{"class":42},[36,129270,129271,129273,129275,129277,129279,129281],{"class":38,"line":2092},[36,129272,129213],{"class":53},[36,129274,51914],{"class":42},[36,129276,1313],{"class":53},[36,129278,51969],{"class":46},[36,129280,17624],{"class":53},[36,129282,1774],{"class":42},[36,129284,129285],{"class":38,"line":2097},[36,129286,2045],{"class":42},[19,129288,129289],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[758,129291,129292,129300],{},[761,129293,129294],{},[764,129295,129296,129298],{},[767,129297,129066],{"align":24216},[767,129299,26350],{"align":24216},[805,129301,129302,129309],{},[764,129303,129304,129306],{},[810,129305,52445],{"align":24216},[810,129307,129308],{"align":24216},"百分数|由浮点数和单位标识符组成的长度值",[764,129310,129311,129314],{},[810,129312,129313],{"align":24216},"position",[810,129315,129316],{"align":24216},"top|center|bottom|left|center|right 方位名词",[19,129318,129319],{},"其他说明：",[19,129321,129322],{},"①参数是方位名词",[19,129324,129325],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129327,129328],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129330,129331],{},"②参数是精确单位",[19,129333,129334],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129336,129337],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129339,129340],{},"③参数是混合单位",[19,129342,129343],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[596,129345,129347],{"id":129346},"_825-背景图片固定","8.2.5 背景图片固定",[26,129349,129351],{"className":126953,"code":129350,"language":126955,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,129352,129353,129358,129364,129376,129380,129385,129391,129401],{"__ignoreMap":31},[36,129354,129355],{"class":38,"line":39},[36,129356,129357],{"class":69},"\u002F* 背景滚动（默认） *\u002F\n",[36,129359,129360,129362],{"class":38,"line":66},[36,129361,52088],{"class":51777},[36,129363,16052],{"class":42},[36,129365,129366,129369,129371,129374],{"class":38,"line":73},[36,129367,129368],{"class":53},"  background-attachment",[36,129370,51914],{"class":42},[36,129372,129373],{"class":53},"scroll",[36,129375,1774],{"class":42},[36,129377,129378],{"class":38,"line":79},[36,129379,2045],{"class":42},[36,129381,129382],{"class":38,"line":85},[36,129383,129384],{"class":69},"\u002F* 背景固定 *\u002F\n",[36,129386,129387,129389],{"class":38,"line":419},[36,129388,52088],{"class":51777},[36,129390,16052],{"class":42},[36,129392,129393,129395,129397,129399],{"class":38,"line":425},[36,129394,129368],{"class":53},[36,129396,51914],{"class":42},[36,129398,86710],{"class":53},[36,129400,1774],{"class":42},[36,129402,129403],{"class":38,"line":431},[36,129404,2045],{"class":42},[758,129406,129407,129416],{},[761,129408,129409],{},[764,129410,129411,129414],{},[767,129412,129413],{"align":24216},"参数",[767,129415,103097],{"align":24216},[805,129417,129418,129425],{},[764,129419,129420,129422],{},[810,129421,129373],{"align":24216},[810,129423,129424],{"align":24216},"背景图像是随对象内容滚动",[764,129426,129427,129429],{},[810,129428,86710],{"align":24216},[810,129430,129431],{"align":24216},"背景图像固定",[596,129433,129435],{"id":129434},"_826-背景样式合写","8.2.6 背景样式合写",[26,129437,129439],{"className":126953,"code":129438,"language":126955,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,129440,129441,129446,129452,129480],{"__ignoreMap":31},[36,129442,129443],{"class":38,"line":39},[36,129444,129445],{"class":69},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,129447,129448,129450],{"class":38,"line":66},[36,129449,52088],{"class":51777},[36,129451,16052],{"class":42},[36,129453,129454,129456,129458,129460,129463,129465,129467,129469,129471,129474,129476,129478],{"class":38,"line":73},[36,129455,71088],{"class":53},[36,129457,51914],{"class":42},[36,129459,61319],{"class":53},[36,129461,129462],{"class":53}," url",[36,129464,345],{"class":42},[36,129466,129051],{"class":5696},[36,129468,14194],{"class":42},[36,129470,62213],{"class":53},[36,129472,129473],{"class":53}," fixed",[36,129475,17624],{"class":53},[36,129477,129220],{"class":53},[36,129479,1774],{"class":42},[36,129481,129482],{"class":38,"line":79},[36,129483,2045],{"class":42},[596,129485,129487],{"id":129486},"_827-背景色半透明","8.2.7 背景色半透明",[26,129489,129491],{"className":126953,"code":129490,"language":126955,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,129492,129493,129499,129525],{"__ignoreMap":31},[36,129494,129495,129497],{"class":38,"line":39},[36,129496,52088],{"class":51777},[36,129498,16052],{"class":42},[36,129500,129501,129503,129505,129507,129509,129511,129513,129515,129517,129519,129521,129523],{"class":38,"line":66},[36,129502,71088],{"class":53},[36,129504,51914],{"class":42},[36,129506,55587],{"class":53},[36,129508,345],{"class":42},[36,129510,812],{"class":53},[36,129512,12915],{"class":42},[36,129514,812],{"class":53},[36,129516,12915],{"class":42},[36,129518,812],{"class":53},[36,129520,12915],{"class":42},[36,129522,100922],{"class":53},[36,129524,3199],{"class":42},[36,129526,129527],{"class":38,"line":73},[36,129528,2045],{"class":42},[19,129530,99797],{},[19,129532,129533],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129535,129536],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129538,129539],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129541,129542],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[596,129544,129546],{"id":129545},"_828-总结","8.2.8 总结",[758,129548,129549,129560],{},[761,129550,129551],{},[764,129552,129553,129556,129558],{},[767,129554,129555],{"align":24216},"属性",[767,129557,103097],{"align":24216},[767,129559,773],{"align":24216},[805,129561,129562,129573,129584,129595,129606,129617,129628],{},[764,129563,129564,129567,129570],{},[810,129565,129566],{"align":24216},"background-color",[810,129568,129569],{"align":24216},"背景颜色",[810,129571,129572],{"align":24216},"预定义的颜色值\u002F十六进制\u002FRGB代码",[764,129574,129575,129578,129581],{},[810,129576,129577],{"align":24216},"background-image",[810,129579,129580],{"align":24216},"背景图片",[810,129582,129583],{"align":24216},"url(图片路径)",[764,129585,129586,129589,129592],{},[810,129587,129588],{"align":24216},"background-repeat",[810,129590,129591],{"align":24216},"是否平铺",[810,129593,129594],{"align":24216},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[764,129596,129597,129600,129603],{},[810,129598,129599],{"align":24216},"background-position",[810,129601,129602],{"align":24216},"背景位置",[810,129604,129605],{"align":24216},"length\u002Fposition 分别是x和y坐标",[764,129607,129608,129611,129614],{},[810,129609,129610],{"align":24216},"background-attachment",[810,129612,129613],{"align":24216},"背景附着",[810,129615,129616],{"align":24216},"scroll(背景滚动) \u002Ffixed (背景固定)",[764,129618,129619,129622,129625],{},[810,129620,129621],{"align":24216},"背景简写",[810,129623,129624],{"align":24216},"书写更简单",[810,129626,129627],{"align":24216},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[764,129629,129630,129633,129636],{},[810,129631,129632],{"align":24216},"背景半透明",[810,129634,129635],{"align":24216},"背景颜色半透明",[810,129637,129638],{"align":24216},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129640,129641],{},"颜色渐变：",[519,129643],{"style":126809,"src":129644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[519,129646],{"style":126809,"src":129647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[596,129649,129651],{"id":129650},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,129653,129655],{"className":127700,"code":129654,"language":127702,"meta":31,"style":31},"\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",[33,129656,129657,129672,129691,129710,129729,129748,129767],{"__ignoreMap":31},[36,129658,129659,129661,129663,129665,129667,129670],{"class":38,"line":39},[36,129660,1523],{"class":42},[36,129662,52088],{"class":51777},[36,129664,53963],{"class":2443},[36,129666,47],{"class":42},[36,129668,129669],{"class":405},"\"nav\"",[36,129671,51784],{"class":42},[36,129673,129674,129676,129678,129680,129682,129684,129687,129689],{"class":38,"line":66},[36,129675,52621],{"class":42},[36,129677,43],{"class":51777},[36,129679,61534],{"class":2443},[36,129681,47],{"class":42},[36,129683,61539],{"class":405},[36,129685,129686],{"class":42},">五彩导航1\u003C\u002F",[36,129688,43],{"class":51777},[36,129690,51784],{"class":42},[36,129692,129693,129695,129697,129699,129701,129703,129706,129708],{"class":38,"line":73},[36,129694,52621],{"class":42},[36,129696,43],{"class":51777},[36,129698,61534],{"class":2443},[36,129700,47],{"class":42},[36,129702,61539],{"class":405},[36,129704,129705],{"class":42},">五彩导航2\u003C\u002F",[36,129707,43],{"class":51777},[36,129709,51784],{"class":42},[36,129711,129712,129714,129716,129718,129720,129722,129725,129727],{"class":38,"line":79},[36,129713,52621],{"class":42},[36,129715,43],{"class":51777},[36,129717,61534],{"class":2443},[36,129719,47],{"class":42},[36,129721,61539],{"class":405},[36,129723,129724],{"class":42},">五彩导航3\u003C\u002F",[36,129726,43],{"class":51777},[36,129728,51784],{"class":42},[36,129730,129731,129733,129735,129737,129739,129741,129744,129746],{"class":38,"line":85},[36,129732,52621],{"class":42},[36,129734,43],{"class":51777},[36,129736,61534],{"class":2443},[36,129738,47],{"class":42},[36,129740,61539],{"class":405},[36,129742,129743],{"class":42},">五彩导航4\u003C\u002F",[36,129745,43],{"class":51777},[36,129747,51784],{"class":42},[36,129749,129750,129752,129754,129756,129758,129760,129763,129765],{"class":38,"line":419},[36,129751,52621],{"class":42},[36,129753,43],{"class":51777},[36,129755,61534],{"class":2443},[36,129757,47],{"class":42},[36,129759,61539],{"class":405},[36,129761,129762],{"class":42},">五彩导航5\u003C\u002F",[36,129764,43],{"class":51777},[36,129766,51784],{"class":42},[36,129768,129769,129771,129773],{"class":38,"line":425},[36,129770,52262],{"class":42},[36,129772,52088],{"class":51777},[36,129774,51784],{"class":42},[26,129776,129778],{"className":126953,"code":129777,"language":126955,"meta":31,"style":31},".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",[33,129779,129780,129789,129799,129811,129823,129833,129845,129855,129859,129884,129907,129930,129953],{"__ignoreMap":31},[36,129781,129782,129785,129787],{"class":38,"line":39},[36,129783,129784],{"class":2443},".nav",[36,129786,1879],{"class":51777},[36,129788,16052],{"class":42},[36,129790,129791,129793,129795,129797],{"class":38,"line":66},[36,129792,128569],{"class":53},[36,129794,51914],{"class":42},[36,129796,72860],{"class":53},[36,129798,1774],{"class":42},[36,129800,129801,129803,129805,129807,129809],{"class":38,"line":73},[36,129802,71045],{"class":53},[36,129804,51914],{"class":42},[36,129806,1430],{"class":53},[36,129808,51969],{"class":46},[36,129810,1774],{"class":42},[36,129812,129813,129815,129817,129819,129821],{"class":38,"line":79},[36,129814,71265],{"class":53},[36,129816,51914],{"class":42},[36,129818,1469],{"class":53},[36,129820,51969],{"class":46},[36,129822,1774],{"class":42},[36,129824,129825,129827,129829,129831],{"class":38,"line":85},[36,129826,71003],{"class":53},[36,129828,51914],{"class":42},[36,129830,52069],{"class":53},[36,129832,1774],{"class":42},[36,129834,129835,129837,129839,129841,129843],{"class":38,"line":419},[36,129836,127637],{"class":53},[36,129838,51914],{"class":42},[36,129840,1469],{"class":53},[36,129842,51969],{"class":46},[36,129844,1774],{"class":42},[36,129846,129847,129849,129851,129853],{"class":38,"line":425},[36,129848,71382],{"class":53},[36,129850,51914],{"class":42},[36,129852,61319],{"class":53},[36,129854,1774],{"class":42},[36,129856,129857],{"class":38,"line":431},[36,129858,2045],{"class":42},[36,129860,129861,129863,129865,129868,129870,129872,129875,129877,129879,129881],{"class":38,"line":437},[36,129862,129784],{"class":2443},[36,129864,1879],{"class":51777},[36,129866,129867],{"class":2443},":nth-child",[36,129869,345],{"class":42},[36,129871,54],{"class":53},[36,129873,129874],{"class":42},") { ",[36,129876,129566],{"class":53},[36,129878,51914],{"class":42},[36,129880,128984],{"class":53},[36,129882,129883],{"class":42},"; }\n",[36,129885,129886,129888,129890,129892,129894,129896,129898,129900,129902,129905],{"class":38,"line":443},[36,129887,129784],{"class":2443},[36,129889,1879],{"class":51777},[36,129891,129867],{"class":2443},[36,129893,345],{"class":42},[36,129895,96],{"class":53},[36,129897,129874],{"class":42},[36,129899,129566],{"class":53},[36,129901,51914],{"class":42},[36,129903,129904],{"class":53},"#ff0000",[36,129906,129883],{"class":42},[36,129908,129909,129911,129913,129915,129917,129919,129921,129923,129925,129928],{"class":38,"line":2092},[36,129910,129784],{"class":2443},[36,129912,1879],{"class":51777},[36,129914,129867],{"class":2443},[36,129916,345],{"class":42},[36,129918,127],{"class":53},[36,129920,129874],{"class":42},[36,129922,129566],{"class":53},[36,129924,51914],{"class":42},[36,129926,129927],{"class":53},"#00a4ff",[36,129929,129883],{"class":42},[36,129931,129932,129934,129936,129938,129940,129942,129944,129946,129948,129951],{"class":38,"line":2097},[36,129933,129784],{"class":2443},[36,129935,1879],{"class":51777},[36,129937,129867],{"class":2443},[36,129939,345],{"class":42},[36,129941,912],{"class":53},[36,129943,129874],{"class":42},[36,129945,129566],{"class":53},[36,129947,51914],{"class":42},[36,129949,129950],{"class":53},"#ff00ff",[36,129952,129883],{"class":42},[36,129954,129955,129957,129959,129961,129963,129965,129967,129969,129971,129974],{"class":38,"line":2103},[36,129956,129784],{"class":2443},[36,129958,1879],{"class":51777},[36,129960,129867],{"class":2443},[36,129962,345],{"class":42},[36,129964,938],{"class":53},[36,129966,129874],{"class":42},[36,129968,129566],{"class":53},[36,129970,51914],{"class":42},[36,129972,129973],{"class":53},"#00ff00",[36,129975,129883],{"class":42},[14,129977,129979],{"id":129978},"_83-css三大特性","8.3 css三大特性",[596,129981,129983],{"id":129982},"_831-层叠性","8.3.1 层叠性",[19,129985,129986],{},"为了解决样式冲突问题",[19,129988,129989],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129991,129992],{},"   ②样式不冲突，不会层叠",[596,129994,129996],{"id":129995},"_832-继承性","8.3.2 继承性",[19,129998,129999],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130001,130002],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,130004,130006],{"className":126953,"code":130005,"language":126955,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,130007,130008,130014,130024],{"__ignoreMap":31},[36,130009,130010,130012],{"class":38,"line":39},[36,130011,19],{"class":51777},[36,130013,16052],{"class":42},[36,130015,130016,130018,130020,130022],{"class":38,"line":66},[36,130017,71382],{"class":53},[36,130019,51914],{"class":42},[36,130021,62846],{"class":53},[36,130023,1774],{"class":42},[36,130025,130026],{"class":38,"line":73},[36,130027,2045],{"class":42},[519,130029],{"style":126809,"src":130030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130032,130033],{},"解释：①行高可以跟单位也可以不跟单位",[19,130035,130036],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130038,130039],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130041,130042],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[596,130044,130046],{"id":130045},"_833-优先级","8.3.3 优先级",[579,130048,130049,130052],{},[582,130050,130051],{},"选择器相同，则执行层叠性",[582,130053,130054],{},"选择器不同，则根据选择器权重执行",[758,130056,130057,130067],{},[761,130058,130059],{},[764,130060,130061,130064],{},[767,130062,130063],{"align":24216},"选择器",[767,130065,130066],{"align":24216},"选择器权重",[805,130068,130069,130077,130085,130093,130101,130109],{},[764,130070,130071,130074],{},[810,130072,130073],{"align":24216},"继承 或者*",[810,130075,130076],{"align":24216},"0，0，0，0",[764,130078,130079,130082],{},[810,130080,130081],{"align":24216},"标签选择器",[810,130083,130084],{"align":24216},"0，0，0，1",[764,130086,130087,130090],{},[810,130088,130089],{"align":24216},"类选择器，伪类选择器",[810,130091,130092],{"align":24216},"0，0，1，0",[764,130094,130095,130098],{},[810,130096,130097],{"align":24216},"ID选择器",[810,130099,130100],{"align":24216},"0，1，0，0",[764,130102,130103,130106],{},[810,130104,130105],{"align":24216},"行内样式",[810,130107,130108],{"align":24216},"1，0，0，0",[764,130110,130111,130114],{},[810,130112,130113],{"align":24216},"！important",[810,130115,130116],{"align":24216},"无穷大",[19,130118,130119],{},"! important用法：",[26,130121,130123],{"className":126953,"code":130122,"language":126955,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,130124,130125,130130,130136,130149,130153,130158,130164,130174],{"__ignoreMap":31},[36,130126,130127],{"class":38,"line":39},[36,130128,130129],{"class":69},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,130131,130132,130134],{"class":38,"line":66},[36,130133,52088],{"class":51777},[36,130135,16052],{"class":42},[36,130137,130138,130140,130142,130144,130147],{"class":38,"line":73},[36,130139,71382],{"class":53},[36,130141,51914],{"class":42},[36,130143,52122],{"class":53},[36,130145,130146],{"class":46}," !important",[36,130148,1774],{"class":42},[36,130150,130151],{"class":38,"line":79},[36,130152,2045],{"class":42},[36,130154,130155],{"class":38,"line":85},[36,130156,130157],{"class":69},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,130159,130160,130162],{"class":38,"line":419},[36,130161,52088],{"class":51777},[36,130163,16052],{"class":42},[36,130165,130166,130168,130170,130172],{"class":38,"line":425},[36,130167,71382],{"class":53},[36,130169,51914],{"class":42},[36,130171,57898],{"class":53},[36,130173,1774],{"class":42},[36,130175,130176],{"class":38,"line":431},[36,130177,2045],{"class":42},[19,130179,130180],{},"优先级注意点：",[19,130182,130183],{},"①权重是有4组数字组成,但是不会有进位",[19,130185,130186],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130188,130189],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130191,130192],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130194,130195],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130197,130198],{},"⑥复合选择器",[758,130200,130201,130211],{},[761,130202,130203],{},[764,130204,130205,130208],{},[767,130206,130207],{"align":24216},"div ul li",[767,130209,130210],{"align":24216},"0,0,0,3",[805,130212,130213,130221,130229],{},[764,130214,130215,130218],{},[810,130216,130217],{"align":24216},".nav ul li",[810,130219,130220],{"align":24216},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[764,130222,130223,130226],{},[810,130224,130225],{"align":24216},"a:hover",[810,130227,130228],{"align":24216},"0,0,1,1",[764,130230,130231,130234],{},[810,130232,130233],{"align":24216},".nav a",[810,130235,130228],{"align":24216},[539,130237,130238],{},"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":31,"searchDepth":66,"depth":66,"links":130240},[130241,130249,130260],{"id":128349,"depth":66,"text":128350,"children":130242},[130243,130244,130245,130246,130247,130248],{"id":128362,"depth":73,"text":128363},{"id":128434,"depth":73,"text":128435},{"id":128506,"depth":73,"text":128507},{"id":128537,"depth":73,"text":128538},{"id":128544,"depth":73,"text":128545},{"id":128697,"depth":73,"text":128698},{"id":129005,"depth":66,"text":129006,"children":130250},[130251,130252,130253,130254,130255,130256,130257,130258,130259],{"id":129012,"depth":73,"text":129013},{"id":129022,"depth":73,"text":129023},{"id":129118,"depth":73,"text":129119},{"id":129191,"depth":73,"text":129192},{"id":129346,"depth":73,"text":129347},{"id":129434,"depth":73,"text":129435},{"id":129486,"depth":73,"text":129487},{"id":129545,"depth":73,"text":129546},{"id":129650,"depth":73,"text":129651},{"id":129978,"depth":66,"text":129979,"children":130261},[130262,130263,130264],{"id":129982,"depth":73,"text":129983},{"id":129995,"depth":73,"text":129996},{"id":130045,"depth":73,"text":130046},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128341,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130271,"title":130272,"body":130273,"description":550,"extension":551,"meta":131863,"navigation":553,"path":131864,"seo":131865,"stem":131866,"__hash__":131867},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130274,"toc":131842},[130275,130278,130282,130285,130288,130291,130294,130297,130300,130303,130307,130315,130352,130388,130391,130405,130410,130444,130447,130540,130545,130548,130578,130581,130586,130594,130598,130605,130651,130695,130700,130703,130706,130709,130712,130715,130718,130720,130723,130727,130732,130776,130781,130784,130787,130824,130829,130832,130835,130838,130841,130873,130876,130879,130882,130914,130917,130920,130923,130927,130930,130962,130965,130969,130989,130992,131000,131003,131007,131012,131015,131047,131052,131055,131093,131097,131102,131105,131108,131139,131142,131159,131164,131216,131276,131281,131335,131373,131377,131381,131384,131388,131396,131399,131401,131412,131417,131465,131499,131502,131505,131508,131511,131555,131558,131561,131564,131567,131570,131573,131617,131620,131623,131626,131629,131632,131635,131641,131644,131688,131691,131694,131697,131700,131703,131747,131750,131752,131755,131759,131763,131801,131805,131808,131811,131815,131823,131827,131830,131833,131836,131839],[10,130276,130272],{"id":130277},"_9-css盒模型浮动与切图",[14,130279,130281],{"id":130280},"_91-盒子模型","9.1 盒子模型",[19,130283,130284],{},"利用盒子来设计网页",[19,130286,130287],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130289,130290],{},"网页布局设置：",[19,130292,130293],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130295,130296],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130298,130299],{},"③往盒子里装内容",[519,130301],{"style":126809,"src":130302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[596,130304,130306],{"id":130305},"_911-边框border","9.1.1 边框（border）",[579,130308,130309,130312],{},[582,130310,130311],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[582,130313,130314],{},"语法",[26,130316,130318],{"className":126953,"code":130317,"language":126955,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,130319,130320,130325,130331,130348],{"__ignoreMap":31},[36,130321,130322],{"class":38,"line":39},[36,130323,130324],{"class":69},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,130326,130327,130329],{"class":38,"line":66},[36,130328,52088],{"class":51777},[36,130330,16052],{"class":42},[36,130332,130333,130335,130337,130339,130341,130343,130346],{"class":38,"line":73},[36,130334,71373],{"class":53},[36,130336,51914],{"class":42},[36,130338,54],{"class":53},[36,130340,51969],{"class":46},[36,130342,51998],{"class":53},[36,130344,130345],{"class":53}," #ccc",[36,130347,1774],{"class":42},[36,130349,130350],{"class":38,"line":79},[36,130351,2045],{"class":42},[758,130353,130354,130362],{},[761,130355,130356],{},[764,130357,130358,130360],{},[767,130359,129555],{"align":24216},[767,130361,103097],{"align":24216},[805,130363,130364,130372,130380],{},[764,130365,130366,130369],{},[810,130367,130368],{"align":24216},"border-width",[810,130370,130371],{"align":24216},"定义边框粗细，单位是px",[764,130373,130374,130377],{},[810,130375,130376],{"align":24216},"border-style",[810,130378,130379],{"align":24216},"边框的样式",[764,130381,130382,130385],{},[810,130383,130384],{"align":24216},"border-color",[810,130386,130387],{"align":24216},"边框的颜色",[19,130389,130390],{},"边框样式 border-style 可以设置如下值：",[1620,130392,130393,130396,130399,130402],{},[582,130394,130395],{},"none：没有边框即忽略所有边框的宽度（默认值）",[582,130397,130398],{},"solid：边框为单实线(最为常用的)",[582,130400,130401],{},"dashed：边框为虚线",[582,130403,130404],{},"dotted：边框为点线",[579,130406,130407],{"start":73},[582,130408,130409],{},"边框的合写分写",[26,130411,130412],{"className":126953,"code":130317,"language":126955,"meta":31,"style":31},[33,130413,130414,130418,130424,130440],{"__ignoreMap":31},[36,130415,130416],{"class":38,"line":39},[36,130417,130324],{"class":69},[36,130419,130420,130422],{"class":38,"line":66},[36,130421,52088],{"class":51777},[36,130423,16052],{"class":42},[36,130425,130426,130428,130430,130432,130434,130436,130438],{"class":38,"line":73},[36,130427,71373],{"class":53},[36,130429,51914],{"class":42},[36,130431,54],{"class":53},[36,130433,51969],{"class":46},[36,130435,51998],{"class":53},[36,130437,130345],{"class":53},[36,130439,1774],{"class":42},[36,130441,130442],{"class":38,"line":79},[36,130443,2045],{"class":42},[19,130445,130446],{},"边框分开写法：",[26,130448,130450],{"className":126953,"code":130449,"language":126955,"meta":31,"style":31},"\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",[33,130451,130452,130457,130463,130481,130499,130518,130536],{"__ignoreMap":31},[36,130453,130454],{"class":38,"line":39},[36,130455,130456],{"class":69},"\u002F* 边框分开写法 *\u002F\n",[36,130458,130459,130461],{"class":38,"line":66},[36,130460,52088],{"class":51777},[36,130462,16052],{"class":42},[36,130464,130465,130468,130470,130472,130474,130476,130479],{"class":38,"line":73},[36,130466,130467],{"class":53},"  border-top",[36,130469,51914],{"class":42},[36,130471,54],{"class":53},[36,130473,51969],{"class":46},[36,130475,51998],{"class":53},[36,130477,130478],{"class":53}," #000",[36,130480,1774],{"class":42},[36,130482,130483,130486,130488,130490,130492,130494,130497],{"class":38,"line":79},[36,130484,130485],{"class":53},"  border-right",[36,130487,51914],{"class":42},[36,130489,96],{"class":53},[36,130491,51969],{"class":46},[36,130493,62718],{"class":53},[36,130495,130496],{"class":53}," #333",[36,130498,1774],{"class":42},[36,130500,130501,130504,130506,130508,130510,130513,130516],{"class":38,"line":85},[36,130502,130503],{"class":53},"  border-bottom",[36,130505,51914],{"class":42},[36,130507,127],{"class":53},[36,130509,51969],{"class":46},[36,130511,130512],{"class":53}," dotted",[36,130514,130515],{"class":53}," #666",[36,130517,1774],{"class":42},[36,130519,130520,130523,130525,130527,130529,130531,130534],{"class":38,"line":419},[36,130521,130522],{"class":53},"  border-left",[36,130524,51914],{"class":42},[36,130526,54],{"class":53},[36,130528,51969],{"class":46},[36,130530,51998],{"class":53},[36,130532,130533],{"class":53}," #999",[36,130535,1774],{"class":42},[36,130537,130538],{"class":38,"line":425},[36,130539,2045],{"class":42},[579,130541,130542],{"start":79},[582,130543,130544],{},"表格的细线边框",[19,130546,130547],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,130549,130551],{"className":126953,"code":130550,"language":126955,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,130552,130553,130558,130564,130574],{"__ignoreMap":31},[36,130554,130555],{"class":38,"line":39},[36,130556,130557],{"class":69},"\u002F* 表格细线边框合并 *\u002F\n",[36,130559,130560,130562],{"class":38,"line":66},[36,130561,758],{"class":51777},[36,130563,16052],{"class":42},[36,130565,130566,130568,130570,130572],{"class":38,"line":73},[36,130567,71055],{"class":53},[36,130569,51914],{"class":42},[36,130571,65512],{"class":53},[36,130573,1774],{"class":42},[36,130575,130576],{"class":38,"line":79},[36,130577,2045],{"class":42},[19,130579,130580],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[579,130582,130583],{"start":85},[582,130584,130585],{},"解决边框额外增加盒子的实际大小的方法：",[1620,130587,130588,130591],{},[582,130589,130590],{},"测量盒子大小的时候,不量边框",[582,130592,130593],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[596,130595,130597],{"id":130596},"_912-内边距","9.1.2 内边距",[579,130599,130600,130603],{},[582,130601,130602],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[582,130604,130314],{},[758,130606,130607,130617],{},[761,130608,130609],{},[764,130610,130611,130614],{},[767,130612,130613],{"align":24216},"值的个数",[767,130615,130616],{"align":24216},"表达意思",[805,130618,130619,130627,130635,130643],{},[764,130620,130621,130624],{},[810,130622,130623],{"align":24216},"padding: 5px;",[810,130625,130626],{"align":24216},"1个值，代表上下左右都有5个元素",[764,130628,130629,130632],{},[810,130630,130631],{"align":24216},"padding: 5px 10px;",[810,130633,130634],{"align":24216},"2个值，代表上下内边距为5像素，左右内边距为10像素",[764,130636,130637,130640],{},[810,130638,130639],{"align":24216},"padding: 5px 10px 20px;",[810,130641,130642],{"align":24216},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[764,130644,130645,130648],{},[810,130646,130647],{"align":24216},"padding: 5px 10px 20px 30px;",[810,130649,130650],{"align":24216},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[758,130652,130653,130661],{},[761,130654,130655],{},[764,130656,130657,130659],{},[767,130658,129555],{"align":24216},[767,130660,103097],{"align":24216},[805,130662,130663,130671,130679,130687],{},[764,130664,130665,130668],{},[810,130666,130667],{"align":24216},"padding-left",[810,130669,130670],{"align":24216},"左内边距",[764,130672,130673,130676],{},[810,130674,130675],{"align":24216},"padding-right",[810,130677,130678],{"align":24216},"右内边距",[764,130680,130681,130684],{},[810,130682,130683],{"align":24216},"padding-top",[810,130685,130686],{"align":24216},"上内边距",[764,130688,130689,130692],{},[810,130690,130691],{"align":24216},"padding-bottom",[810,130693,130694],{"align":24216},"下内边距",[579,130696,130697],{"start":73},[582,130698,130699],{},"内边距会影响盒子的实际大小",[19,130701,130702],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130704,130705],{},"①内容和边框有了距离，添加了内边距",[19,130707,130708],{},"②padding影响了盒子实际大小",[19,130710,130711],{},"内边距对盒子大小的影响：",[19,130713,130714],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130716,130717],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130719,95692],{},[19,130721,130722],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[596,130724,130726],{"id":130725},"_913-外边距","9.1.3 外边距",[579,130728,130729],{},[582,130730,130731],{},"控制盒子与盒子之间的距离",[758,130733,130734,130742],{},[761,130735,130736],{},[764,130737,130738,130740],{},[767,130739,129555],{"align":24216},[767,130741,103097],{"align":24216},[805,130743,130744,130752,130760,130768],{},[764,130745,130746,130749],{},[810,130747,130748],{"align":24216},"margin-left",[810,130750,130751],{"align":24216},"左外边距",[764,130753,130754,130757],{},[810,130755,130756],{"align":24216},"margin-right",[810,130758,130759],{"align":24216},"右外边距",[764,130761,130762,130765],{},[810,130763,130764],{"align":24216},"margin-top",[810,130766,130767],{"align":24216},"上外边距",[764,130769,130770,130773],{},[810,130771,130772],{"align":24216},"margin-bottom",[810,130774,130775],{"align":24216},"下外边距",[579,130777,130778],{"start":66},[582,130779,130780],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130782,130783],{},"①盒子必须指定了宽度（width）",[19,130785,130786],{},"②盒子左右的外边距都设置为 auto",[26,130788,130790],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,130791,130792,130797,130804,130820],{"__ignoreMap":31},[36,130793,130794],{"class":38,"line":39},[36,130795,130796],{"class":69},"\u002F* margin 复合写法（同上） *\u002F\n",[36,130798,130799,130802],{"class":38,"line":66},[36,130800,130801],{"class":2443},".box",[36,130803,16052],{"class":42},[36,130805,130806,130808,130810,130812,130814,130817],{"class":38,"line":73},[36,130807,70947],{"class":53},[36,130809,51914],{"class":42},[36,130811,812],{"class":53},[36,130813,52033],{"class":53},[36,130815,130816],{"class":42},";  ",[36,130818,130819],{"class":69},"\u002F* 块级盒子水平居中 *\u002F\n",[36,130821,130822],{"class":38,"line":79},[36,130823,2045],{"class":42},[579,130825,130826],{"start":73},[582,130827,130828],{},"外边距塌陷问题",[19,130830,130831],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[519,130833],{"style":126809,"src":130834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130836,130837],{},"解决方案：",[19,130839,130840],{},"①可以为父亲元素定义上边距",[26,130842,130843],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},[33,130844,130845,130849,130855,130869],{"__ignoreMap":31},[36,130846,130847],{"class":38,"line":39},[36,130848,130796],{"class":69},[36,130850,130851,130853],{"class":38,"line":66},[36,130852,130801],{"class":2443},[36,130854,16052],{"class":42},[36,130856,130857,130859,130861,130863,130865,130867],{"class":38,"line":73},[36,130858,70947],{"class":53},[36,130860,51914],{"class":42},[36,130862,812],{"class":53},[36,130864,52033],{"class":53},[36,130866,130816],{"class":42},[36,130868,130819],{"class":69},[36,130870,130871],{"class":38,"line":79},[36,130872,2045],{"class":42},[19,130874,130875],{},"②可以为父亲元素定义上内边距",[19,130877,130878],{},"③可以为父亲元素添加overflow:hidden",[519,130880],{"style":126809,"src":130881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,130883,130884],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},[33,130885,130886,130890,130896,130910],{"__ignoreMap":31},[36,130887,130888],{"class":38,"line":39},[36,130889,130796],{"class":69},[36,130891,130892,130894],{"class":38,"line":66},[36,130893,130801],{"class":2443},[36,130895,16052],{"class":42},[36,130897,130898,130900,130902,130904,130906,130908],{"class":38,"line":73},[36,130899,70947],{"class":53},[36,130901,51914],{"class":42},[36,130903,812],{"class":53},[36,130905,52033],{"class":53},[36,130907,130816],{"class":42},[36,130909,130819],{"class":69},[36,130911,130912],{"class":38,"line":79},[36,130913,2045],{"class":42},[519,130915],{"style":126809,"src":130916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130918,130919],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130921,130922],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[596,130924,130926],{"id":130925},"_914-清除内外边距","9.1.4 清除内外边距",[19,130928,130929],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,130931,130932],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},[33,130933,130934,130938,130944,130958],{"__ignoreMap":31},[36,130935,130936],{"class":38,"line":39},[36,130937,130796],{"class":69},[36,130939,130940,130942],{"class":38,"line":66},[36,130941,130801],{"class":2443},[36,130943,16052],{"class":42},[36,130945,130946,130948,130950,130952,130954,130956],{"class":38,"line":73},[36,130947,70947],{"class":53},[36,130949,51914],{"class":42},[36,130951,812],{"class":53},[36,130953,52033],{"class":53},[36,130955,130816],{"class":42},[36,130957,130819],{"class":69},[36,130959,130960],{"class":38,"line":79},[36,130961,2045],{"class":42},[19,130963,130964],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[596,130966,130968],{"id":130967},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1620,130970,130971,130974,130977,130980,130983,130986],{},[582,130972,130973],{},"文件→打开 ：可以打开我们要测量的图片",[582,130975,130976],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[582,130978,130979],{},"右击标尺，把里面的单位改为像素",[582,130981,130982],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[582,130984,130985],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[582,130987,130988],{},"用选区拖动 可以测量大小",[519,130990],{"style":126809,"src":130991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1620,130993,130994,130997],{},[582,130995,130996],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[582,130998,130999],{},"吸管取色工具",[519,131001],{"style":126809,"src":131002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[596,131004,131006],{"id":131005},"_916-案例","9.1.6 案例",[579,131008,131009],{},[582,131010,131011],{},"小米商品",[519,131013],{"style":126809,"src":131014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,131016,131017],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},[33,131018,131019,131023,131029,131043],{"__ignoreMap":31},[36,131020,131021],{"class":38,"line":39},[36,131022,130796],{"class":69},[36,131024,131025,131027],{"class":38,"line":66},[36,131026,130801],{"class":2443},[36,131028,16052],{"class":42},[36,131030,131031,131033,131035,131037,131039,131041],{"class":38,"line":73},[36,131032,70947],{"class":53},[36,131034,51914],{"class":42},[36,131036,812],{"class":53},[36,131038,52033],{"class":53},[36,131040,130816],{"class":42},[36,131042,130819],{"class":69},[36,131044,131045],{"class":38,"line":79},[36,131046,2045],{"class":42},[579,131048,131049],{"start":66},[582,131050,131051],{},"快报模块",[519,131053],{"style":126809,"src":131054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,131056,131058],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,131059,131060,131065,131080,131085],{"__ignoreMap":31},[36,131061,131062],{"class":38,"line":39},[36,131063,131064],{"class":69},"\u003C!-- HTML 代码示例 -->\n",[36,131066,131067,131069,131071,131073,131075,131078],{"class":38,"line":66},[36,131068,1523],{"class":42},[36,131070,52088],{"class":51777},[36,131072,53963],{"class":2443},[36,131074,47],{"class":42},[36,131076,131077],{"class":405},"\"example\"",[36,131079,51784],{"class":42},[36,131081,131082],{"class":38,"line":73},[36,131083,131084],{"class":42},"  示例内容\n",[36,131086,131087,131089,131091],{"class":38,"line":79},[36,131088,52262],{"class":42},[36,131090,52088],{"class":51777},[36,131092,51784],{"class":42},[596,131094,131096],{"id":131095},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[579,131098,131099],{},[582,131100,131101],{},"圆角边框",[19,131103,131104],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[519,131106],{"style":126809,"src":131107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,131109,131111],{"className":126953,"code":131110,"language":126955,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,131112,131113,131119,131135],{"__ignoreMap":31},[36,131114,131115,131117],{"class":38,"line":39},[36,131116,52088],{"class":51777},[36,131118,16052],{"class":42},[36,131120,131121,131123,131125,131127,131129,131131,131133],{"class":38,"line":66},[36,131122,71373],{"class":53},[36,131124,51914],{"class":42},[36,131126,54],{"class":53},[36,131128,51969],{"class":46},[36,131130,51998],{"class":53},[36,131132,130345],{"class":53},[36,131134,1774],{"class":42},[36,131136,131137],{"class":38,"line":73},[36,131138,2045],{"class":42},[19,131140,131141],{},"解释:",[1620,131143,131144,131147,131150,131153,131156],{},[582,131145,131146],{},"参数值可以为数值或百分比的形式",[582,131148,131149],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[582,131151,131152],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[582,131154,131155],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[582,131157,131158],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[579,131160,131161],{"start":66},[582,131162,131163],{},"盒子阴影",[26,131165,131167],{"className":126953,"code":131166,"language":126955,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,131168,131169,131175,131212],{"__ignoreMap":31},[36,131170,131171,131173],{"class":38,"line":39},[36,131172,52088],{"class":51777},[36,131174,16052],{"class":42},[36,131176,131177,131180,131182,131184,131186,131188,131190,131192,131194,131196,131198,131200,131202,131204,131206,131208,131210],{"class":38,"line":66},[36,131178,131179],{"class":53},"  box-shadow",[36,131181,51914],{"class":42},[36,131183,812],{"class":53},[36,131185,15235],{"class":53},[36,131187,51969],{"class":46},[36,131189,2518],{"class":53},[36,131191,51969],{"class":46},[36,131193,79244],{"class":53},[36,131195,345],{"class":42},[36,131197,812],{"class":53},[36,131199,12915],{"class":42},[36,131201,812],{"class":53},[36,131203,12915],{"class":42},[36,131205,812],{"class":53},[36,131207,12915],{"class":42},[36,131209,86687],{"class":53},[36,131211,3199],{"class":42},[36,131213,131214],{"class":38,"line":73},[36,131215,2045],{"class":42},[758,131217,131218,131226],{},[761,131219,131220],{},[764,131221,131222,131224],{},[767,131223,773],{"align":24216},[767,131225,27970],{"align":24216},[805,131227,131228,131236,131244,131252,131260,131268],{},[764,131229,131230,131233],{},[810,131231,131232],{"align":24216},"h-shadow",[810,131234,131235],{"align":24216},"必需,水平阴影的位置,允许负值",[764,131237,131238,131241],{},[810,131239,131240],{"align":24216},"v-shadow",[810,131242,131243],{"align":24216},"必需,垂直阴影的位置,允许负值",[764,131245,131246,131249],{},[810,131247,131248],{"align":24216},"blur",[810,131250,131251],{"align":24216},"可选,模糊距离,就是影子的虚实",[764,131253,131254,131257],{},[810,131255,131256],{"align":24216},"spread",[810,131258,131259],{"align":24216},"可选,阴影尺寸",[764,131261,131262,131265],{},[810,131263,131264],{"align":24216},"color",[810,131266,131267],{"align":24216},"可选,阴影的颜色",[764,131269,131270,131273],{},[810,131271,131272],{"align":24216},"inset",[810,131274,131275],{"align":24216},"可选,将外部阴影(outset)改为内部阴影",[579,131277,131278],{"start":73},[582,131279,131280],{},"文字阴影",[26,131282,131284],{"className":126953,"code":131283,"language":126955,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,131285,131286,131292,131331],{"__ignoreMap":31},[36,131287,131288,131290],{"class":38,"line":39},[36,131289,19],{"class":51777},[36,131291,16052],{"class":42},[36,131293,131294,131297,131299,131301,131303,131305,131307,131309,131311,131313,131315,131317,131319,131321,131323,131325,131327,131329],{"class":38,"line":66},[36,131295,131296],{"class":53},"  text-shadow",[36,131298,51914],{"class":42},[36,131300,54],{"class":53},[36,131302,51969],{"class":46},[36,131304,25599],{"class":53},[36,131306,51969],{"class":46},[36,131308,15235],{"class":53},[36,131310,51969],{"class":46},[36,131312,79244],{"class":53},[36,131314,345],{"class":42},[36,131316,812],{"class":53},[36,131318,12915],{"class":42},[36,131320,812],{"class":53},[36,131322,12915],{"class":42},[36,131324,812],{"class":53},[36,131326,12915],{"class":42},[36,131328,100922],{"class":53},[36,131330,3199],{"class":42},[36,131332,131333],{"class":38,"line":73},[36,131334,2045],{"class":42},[758,131336,131337,131345],{},[761,131338,131339],{},[764,131340,131341,131343],{},[767,131342,773],{"align":24216},[767,131344,27970],{"align":24216},[805,131346,131347,131353,131360,131367],{},[764,131348,131349,131351],{},[810,131350,131232],{"align":24216},[810,131352,131235],{"align":24216},[764,131354,131355,131357],{},[810,131356,131240],{"align":24216},[810,131358,131359],{"align":24216},"必需,垂直阴影位置,允许负值",[764,131361,131362,131364],{},[810,131363,131248],{"align":24216},[810,131365,131366],{"align":24216},"可选,模糊的距离",[764,131368,131369,131371],{},[810,131370,131264],{"align":24216},[810,131372,131267],{"align":24216},[14,131374,131376],{"id":131375},"_92-浮动","9.2 浮动",[596,131378,131380],{"id":131379},"_921-浮动介绍","9.2.1 浮动介绍",[19,131382,131383],{},"在16.2中详细介绍",[596,131385,131387],{"id":131386},"_922-清除浮动","9.2.2 清除浮动",[579,131389,131390,131393],{},[582,131391,131392],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[582,131394,131395],{},"清除浮动的本质",[19,131397,131398],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131400,9505],{},[1620,131402,131403,131406,131409],{},[582,131404,131405],{},"如果父盒子本身有高度，则不需要清除浮动",[582,131407,131408],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[582,131410,131411],{},"父级有了高度，就不会影响下面的标准流了",[579,131413,131414],{"start":73},[582,131415,131416],{},"清除浮动样式",[26,131418,131420],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,131421,131422,131429,131440,131444,131451,131461],{"__ignoreMap":31},[36,131423,131424,131427],{"class":38,"line":39},[36,131425,131426],{"class":2443},".left",[36,131428,16052],{"class":42},[36,131430,131431,131434,131436,131438],{"class":38,"line":66},[36,131432,131433],{"class":53},"  float",[36,131435,51914],{"class":42},[36,131437,24216],{"class":53},[36,131439,1774],{"class":42},[36,131441,131442],{"class":38,"line":73},[36,131443,2045],{"class":42},[36,131445,131446,131449],{"class":38,"line":79},[36,131447,131448],{"class":2443},".right",[36,131450,16052],{"class":42},[36,131452,131453,131455,131457,131459],{"class":38,"line":85},[36,131454,131433],{"class":53},[36,131456,51914],{"class":42},[36,131458,72999],{"class":53},[36,131460,1774],{"class":42},[36,131462,131463],{"class":38,"line":419},[36,131464,2045],{"class":42},[758,131466,131467,131475],{},[761,131468,131469],{},[764,131470,131471,131473],{},[767,131472,127417],{"align":24216},[767,131474,27970],{"align":24216},[805,131476,131477,131484,131491],{},[764,131478,131479,131481],{},[810,131480,24216],{"align":24216},[810,131482,131483],{"align":24216},"不允许左侧有浮动元素（清除左侧浮动的影响）",[764,131485,131486,131488],{},[810,131487,72999],{"align":24216},[810,131489,131490],{"align":24216},"不允许右侧有浮动元素（清除右侧浮动的影响）",[764,131492,131493,131496],{},[810,131494,131495],{"align":24216},"both",[810,131497,131498],{"align":24216},"同时清除左右侧浮动的影响",[19,131500,131501],{},"法一",[19,131503,131504],{},"额外标签法也称为隔墙法",[19,131506,131507],{},"使用方式：",[19,131509,131510],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,131512,131513],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,131514,131515,131521,131531,131535,131541,131551],{"__ignoreMap":31},[36,131516,131517,131519],{"class":38,"line":39},[36,131518,131426],{"class":2443},[36,131520,16052],{"class":42},[36,131522,131523,131525,131527,131529],{"class":38,"line":66},[36,131524,131433],{"class":53},[36,131526,51914],{"class":42},[36,131528,24216],{"class":53},[36,131530,1774],{"class":42},[36,131532,131533],{"class":38,"line":73},[36,131534,2045],{"class":42},[36,131536,131537,131539],{"class":38,"line":79},[36,131538,131448],{"class":2443},[36,131540,16052],{"class":42},[36,131542,131543,131545,131547,131549],{"class":38,"line":85},[36,131544,131433],{"class":53},[36,131546,51914],{"class":42},[36,131548,72999],{"class":53},[36,131550,1774],{"class":42},[36,131552,131553],{"class":38,"line":419},[36,131554,2045],{"class":42},[19,131556,131557],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131559,131560],{},"优点： 通俗易懂，书写方便",[19,131562,131563],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131565,131566],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131568,131569],{},"法二",[19,131571,131572],{},"父级添加overflow属性",[26,131574,131575],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,131576,131577,131583,131593,131597,131603,131613],{"__ignoreMap":31},[36,131578,131579,131581],{"class":38,"line":39},[36,131580,131426],{"class":2443},[36,131582,16052],{"class":42},[36,131584,131585,131587,131589,131591],{"class":38,"line":66},[36,131586,131433],{"class":53},[36,131588,51914],{"class":42},[36,131590,24216],{"class":53},[36,131592,1774],{"class":42},[36,131594,131595],{"class":38,"line":73},[36,131596,2045],{"class":42},[36,131598,131599,131601],{"class":38,"line":79},[36,131600,131448],{"class":2443},[36,131602,16052],{"class":42},[36,131604,131605,131607,131609,131611],{"class":38,"line":85},[36,131606,131433],{"class":53},[36,131608,51914],{"class":42},[36,131610,72999],{"class":53},[36,131612,1774],{"class":42},[36,131614,131615],{"class":38,"line":419},[36,131616,2045],{"class":42},[19,131618,131619],{},"overflow: hidden;",[19,131621,131622],{},"优点：代码简洁",[19,131624,131625],{},"缺点：无法显示溢出的部分",[19,131627,131628],{},"注意：是给父元素添加代码",[19,131630,131631],{},"法三",[19,131633,131634],{},"父级添加after伪元素",[19,131636,131637,131640],{},[131638,131639],"after",{}," 方式是额外标签法的升级版",[19,131642,131643],{},"使用的时候复制就可以",[26,131645,131646],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,131647,131648,131654,131664,131668,131674,131684],{"__ignoreMap":31},[36,131649,131650,131652],{"class":38,"line":39},[36,131651,131426],{"class":2443},[36,131653,16052],{"class":42},[36,131655,131656,131658,131660,131662],{"class":38,"line":66},[36,131657,131433],{"class":53},[36,131659,51914],{"class":42},[36,131661,24216],{"class":53},[36,131663,1774],{"class":42},[36,131665,131666],{"class":38,"line":73},[36,131667,2045],{"class":42},[36,131669,131670,131672],{"class":38,"line":79},[36,131671,131448],{"class":2443},[36,131673,16052],{"class":42},[36,131675,131676,131678,131680,131682],{"class":38,"line":85},[36,131677,131433],{"class":53},[36,131679,51914],{"class":42},[36,131681,72999],{"class":53},[36,131683,1774],{"class":42},[36,131685,131686],{"class":38,"line":419},[36,131687,2045],{"class":42},[19,131689,131690],{},"优点：没有增加标签，结构更简单",[19,131692,131693],{},"缺点：照顾低版本浏览器",[19,131695,131696],{},"代表网站： 百度、淘宝网、网易等",[19,131698,131699],{},"法四",[19,131701,131702],{},"父级添加双伪元素",[26,131704,131705],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,131706,131707,131713,131723,131727,131733,131743],{"__ignoreMap":31},[36,131708,131709,131711],{"class":38,"line":39},[36,131710,131426],{"class":2443},[36,131712,16052],{"class":42},[36,131714,131715,131717,131719,131721],{"class":38,"line":66},[36,131716,131433],{"class":53},[36,131718,51914],{"class":42},[36,131720,24216],{"class":53},[36,131722,1774],{"class":42},[36,131724,131725],{"class":38,"line":73},[36,131726,2045],{"class":42},[36,131728,131729,131731],{"class":38,"line":79},[36,131730,131448],{"class":2443},[36,131732,16052],{"class":42},[36,131734,131735,131737,131739,131741],{"class":38,"line":85},[36,131736,131433],{"class":53},[36,131738,51914],{"class":42},[36,131740,72999],{"class":53},[36,131742,1774],{"class":42},[36,131744,131745],{"class":38,"line":419},[36,131746,2045],{"class":42},[19,131748,131749],{},"优点：代码更简洁",[19,131751,131693],{},[19,131753,131754],{},"代表网站：小米、腾讯等",[14,131756,131758],{"id":131757},"_93-ps切图","9.3 PS切图",[596,131760,131762],{"id":131761},"_931-常见图片格式","9.3.1 常见图片格式",[758,131764,131765,131775],{},[761,131766,131767],{},[764,131768,131769,131772],{},[767,131770,131771],{"align":24216},"jpg图像格式",[767,131773,131774],{"align":24216},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[805,131776,131777,131785,131793],{},[764,131778,131779,131782],{},[810,131780,131781],{"align":24216},"gif图像格式",[810,131783,131784],{"align":24216},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[764,131786,131787,131790],{},[810,131788,131789],{"align":24216},"png图像格式",[810,131791,131792],{"align":24216},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[764,131794,131795,131798],{},[810,131796,131797],{"align":24216},"PSD图像格式",[810,131799,131800],{"align":24216},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[596,131802,131804],{"id":131803},"_932-图层切图","9.3.2 图层切图",[19,131806,131807],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131809,131810],{},"按住shift选中两个图层->图层菜单->合并图层",[596,131812,131814],{"id":131813},"_933-切片切图","9.3.3 切片切图",[1620,131816,131817,131820],{},[582,131818,131819],{},"利用切片工具手动划出",[582,131821,131822],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[596,131824,131826],{"id":131825},"_934-切图步骤","9.3.4 切图步骤",[19,131828,131829],{},"用切片工具选中：",[519,131831],{"style":126809,"src":131832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131834,131835],{},"文件 -> 导出",[519,131837],{"style":126809,"src":131838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[539,131840,131841],{},"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":31,"searchDepth":66,"depth":66,"links":131843},[131844,131853,131857],{"id":130280,"depth":66,"text":130281,"children":131845},[131846,131847,131848,131849,131850,131851,131852],{"id":130305,"depth":73,"text":130306},{"id":130596,"depth":73,"text":130597},{"id":130725,"depth":73,"text":130726},{"id":130925,"depth":73,"text":130926},{"id":130967,"depth":73,"text":130968},{"id":131005,"depth":73,"text":131006},{"id":131095,"depth":73,"text":131096},{"id":131375,"depth":66,"text":131376,"children":131854},[131855,131856],{"id":131379,"depth":73,"text":131380},{"id":131386,"depth":73,"text":131387},{"id":131757,"depth":66,"text":131758,"children":131858},[131859,131860,131861,131862],{"id":131761,"depth":73,"text":131762},{"id":131803,"depth":73,"text":131804},{"id":131813,"depth":73,"text":131814},{"id":131825,"depth":73,"text":131826},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130272,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131869,"title":131870,"body":131871,"description":550,"extension":551,"meta":132512,"navigation":553,"path":132513,"seo":132514,"stem":132515,"__hash__":132516},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131872,"toc":132500},[131873,131876,131880,131906,131940,131944,131948,131951,131993,132000,132010,132018,132020,132023,132026,132029,132036,132050,132054,132057,132086,132090,132093,132107,132111,132114,132142,132146,132149,132175,132179,132184,132217,132222,132250,132254,132271,132317,132322,132366,132383,132490,132498],[10,131874,131870],{"id":131875},"_10-css规范与学成在线案例",[14,131877,131879],{"id":131878},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[579,131881,131882,131888,131894,131900],{},[582,131883,131884,131887],{},[770,131885,131886],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[582,131889,131890,131893],{},[770,131891,131892],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[582,131895,131896,131899],{},[770,131897,131898],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[582,131901,131902,131905],{},[770,131903,131904],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,131907,131908],{"className":126953,"code":130317,"language":126955,"meta":31,"style":31},[33,131909,131910,131914,131920,131936],{"__ignoreMap":31},[36,131911,131912],{"class":38,"line":39},[36,131913,130324],{"class":69},[36,131915,131916,131918],{"class":38,"line":66},[36,131917,52088],{"class":51777},[36,131919,16052],{"class":42},[36,131921,131922,131924,131926,131928,131930,131932,131934],{"class":38,"line":73},[36,131923,71373],{"class":53},[36,131925,51914],{"class":42},[36,131927,54],{"class":53},[36,131929,51969],{"class":46},[36,131931,51998],{"class":53},[36,131933,130345],{"class":53},[36,131935,1774],{"class":42},[36,131937,131938],{"class":38,"line":79},[36,131939,2045],{"class":42},[14,131941,131943],{"id":131942},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[596,131945,131947],{"id":131946},"_1021-header头部制作","10.2.1 header头部制作",[519,131949],{"style":126809,"src":131950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1620,131952,131953,131960,131967,131973,131980,131987],{},[582,131954,131955,131956,131959],{},"1号是版心盒子 ",[770,131957,131958],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[582,131961,131962,131963,131966],{},"版心盒子 里面包含 2号盒子 ",[770,131964,131965],{},"logo"," 图标",[582,131968,131969,131970,131972],{},"版心盒子 里面包含 3号盒子 ",[770,131971,54190],{}," 导航栏",[582,131974,131975,131976,131979],{},"版心盒子 里面包含 4号盒子 ",[770,131977,131978],{},"search"," 搜索框",[582,131981,131982,131983,131986],{},"版心盒子 里面包含 5号盒子 ",[770,131984,131985],{},"user"," 个人信息",[582,131988,131989,131990],{},"注意，要求里面的 ",[770,131991,131992],{},"4个子盒子 必须都浮动",[579,131994,131995],{},[582,131996,131997],{},[770,131998,131999],{},"导航栏注意点:",[19,132001,132002,132003,132006,132007],{},"实际开发中， ",[770,132004,132005],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[770,132008,132009],{},"用 li 包含链接(li+a)的做法",[1620,132011,132012,132015],{},[582,132013,132014],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[582,132016,132017],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132019,9505],{},[19,132021,132022],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132024,132025],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132027,132028],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[579,132030,132031],{"start":66},[582,132032,132033],{},[770,132034,132035],{},"4号盒子search的细节：",[1620,132037,132038,132041,132044],{},[582,132039,132040],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[582,132042,132043],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[582,132045,132046,132049],{},[33,132047,132048],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[596,132051,132053],{"id":132052},"_1022-banner制作","10.2.2 banner制作",[519,132055],{"style":126809,"src":132056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1620,132058,132059,132066,132072,132079],{},[582,132060,132061,132062,132065],{},"1号盒子是通栏的大盒子 ",[770,132063,132064],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[582,132067,132068,132069,132071],{},"2号盒子是版心 ",[770,132070,1408],{}," ， 要水平居中对齐",[582,132073,132074,132075,132078],{},"3号盒子版心内，左对齐 ",[770,132076,132077],{},"subnav"," 侧导航栏",[582,132080,132081,132082,132085],{},"4号盒子版心内，右对齐 ",[770,132083,132084],{},"course"," 课程",[596,132087,132089],{"id":132088},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[519,132091],{"style":126809,"src":132092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1620,132094,132095,132098,132101,132104],{},[582,132096,132097],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[582,132099,132100],{},"1号盒子是标题 H3 左侧浮动",[582,132102,132103],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[582,132105,132106],{},"3号盒子 右浮动 mod 修改",[596,132108,132110],{"id":132109},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[519,132112],{"style":126809,"src":132113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1620,132115,132116,132122,132129,132136,132139],{},[582,132117,132118,132119,132121],{},"1号盒子为最大的盒子 ",[770,132120,54191],{}," 版心水平居中对齐",[582,132123,132124,132125,132128],{},"2号盒子为上面部分 ",[770,132126,132127],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[582,132130,132131,132132,132135],{},"3号盒子为底下部分 ",[770,132133,132134],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[582,132137,132138],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[582,132140,132141],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[596,132143,132145],{"id":132144},"_1025-底部模块制作","10.2.5 底部模块制作",[519,132147],{"style":126809,"src":132148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1620,132150,132151,132158,132161,132168],{},[582,132152,132153,132154,132157],{},"1号盒子通栏大盒子 底部 ",[770,132155,132156],{},"footer"," 给高度 底色是白色",[582,132159,132160],{},"2号盒子版心水平居中",[582,132162,132163,132164,132167],{},"3号盒子版权 ",[770,132165,132166],{},"copyright"," 左对齐",[582,132169,132170,132171,132174],{},"4号盒子 链接组 ",[770,132172,132173],{},"links"," 右对齐",[596,132176,132178],{"id":132177},"_1026-代码模块","10.2.6 代码模块",[579,132180,132181],{},[582,132182,132183],{},"html部分",[26,132185,132187],{"className":127700,"code":132186,"language":127702,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,132188,132189],{"__ignoreMap":31},[36,132190,132191,132193,132195,132197,132199,132202,132205,132207,132210,132213,132215],{"class":38,"line":39},[36,132192,1523],{"class":42},[36,132194,43],{"class":51777},[36,132196,61534],{"class":2443},[36,132198,47],{"class":42},[36,132200,132201],{"class":405},"\"https:\u002F\u002Fexample.com\"",[36,132203,132204],{"class":2443}," target",[36,132206,47],{"class":42},[36,132208,132209],{"class":405},"\"_blank\"",[36,132211,132212],{"class":42},">链接文字\u003C\u002F",[36,132214,43],{"class":51777},[36,132216,51784],{"class":42},[579,132218,132219],{"start":66},[582,132220,132221],{},"css部分",[26,132223,132224],{"className":127700,"code":132186,"language":127702,"meta":31,"style":31},[33,132225,132226],{"__ignoreMap":31},[36,132227,132228,132230,132232,132234,132236,132238,132240,132242,132244,132246,132248],{"class":38,"line":39},[36,132229,1523],{"class":42},[36,132231,43],{"class":51777},[36,132233,61534],{"class":2443},[36,132235,47],{"class":42},[36,132237,132201],{"class":405},[36,132239,132204],{"class":2443},[36,132241,47],{"class":42},[36,132243,132209],{"class":405},[36,132245,132212],{"class":42},[36,132247,43],{"class":51777},[36,132249,51784],{"class":42},[596,132251,132253],{"id":132252},"_1027-收获","10.2.7 收获",[579,132255,132256,132259,132262,132265,132268],{},[582,132257,132258],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[582,132260,132261],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[582,132263,132264],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[582,132266,132267],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[582,132269,132270],{},"遗忘代码",[26,132272,132274],{"className":126953,"code":132273,"language":126955,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,132275,132276,132298,132303,132313],{"__ignoreMap":31},[36,132277,132278,132280,132282,132284,132286,132288,132290,132292,132294,132296],{"class":38,"line":39},[36,132279,52088],{"class":51777},[36,132281,12915],{"class":42},[36,132283,19],{"class":51777},[36,132285,12915],{"class":42},[36,132287,10],{"class":51777},[36,132289,12915],{"class":42},[36,132291,1620],{"class":51777},[36,132293,12915],{"class":42},[36,132295,582],{"class":51777},[36,132297,16052],{"class":42},[36,132299,132300],{"class":38,"line":66},[36,132301,132302],{"class":69},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,132304,132305,132307,132309,132311],{"class":38,"line":73},[36,132306,128569],{"class":53},[36,132308,51914],{"class":42},[36,132310,61346],{"class":53},[36,132312,1774],{"class":42},[36,132314,132315],{"class":38,"line":79},[36,132316,2045],{"class":42},[579,132318,132319],{"start":419},[582,132320,132321],{},"html引css的程序",[26,132323,132324],{"className":126953,"code":132273,"language":126955,"meta":31,"style":31},[33,132325,132326,132348,132352,132362],{"__ignoreMap":31},[36,132327,132328,132330,132332,132334,132336,132338,132340,132342,132344,132346],{"class":38,"line":39},[36,132329,52088],{"class":51777},[36,132331,12915],{"class":42},[36,132333,19],{"class":51777},[36,132335,12915],{"class":42},[36,132337,10],{"class":51777},[36,132339,12915],{"class":42},[36,132341,1620],{"class":51777},[36,132343,12915],{"class":42},[36,132345,582],{"class":51777},[36,132347,16052],{"class":42},[36,132349,132350],{"class":38,"line":66},[36,132351,132302],{"class":69},[36,132353,132354,132356,132358,132360],{"class":38,"line":73},[36,132355,128569],{"class":53},[36,132357,51914],{"class":42},[36,132359,61346],{"class":53},[36,132361,1774],{"class":42},[36,132363,132364],{"class":38,"line":79},[36,132365,2045],{"class":42},[579,132367,132368,132371,132374,132377,132380],{"start":425},[582,132369,132370],{},"浮动的盒子不会有外边距合并问题",[582,132372,132373],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[582,132375,132376],{},"ctrl+g快速定位行；shift+alt多个光标",[582,132378,132379],{},"学习上方各个模块的选择器起名方法，以后就这样用",[582,132381,132382],{},"在写选择器时尽量写全一些，例如",[26,132384,132386],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},"\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",[33,132387,132388,132393,132409,132414,132429,132434,132449,132454,132469,132474],{"__ignoreMap":31},[36,132389,132390],{"class":38,"line":39},[36,132391,132392],{"class":69},"\u002F* 静态定位（默认） *\u002F\n",[36,132394,132395,132398,132400,132402,132404,132407],{"class":38,"line":66},[36,132396,132397],{"class":2443},".static",[36,132399,80284],{"class":42},[36,132401,129313],{"class":53},[36,132403,51914],{"class":42},[36,132405,132406],{"class":53},"static",[36,132408,129883],{"class":42},[36,132410,132411],{"class":38,"line":73},[36,132412,132413],{"class":69},"\u002F* 相对定位 *\u002F\n",[36,132415,132416,132419,132421,132423,132425,132427],{"class":38,"line":79},[36,132417,132418],{"class":2443},".relative",[36,132420,80284],{"class":42},[36,132422,129313],{"class":53},[36,132424,51914],{"class":42},[36,132426,55241],{"class":53},[36,132428,129883],{"class":42},[36,132430,132431],{"class":38,"line":85},[36,132432,132433],{"class":69},"\u002F* 绝对定位 *\u002F\n",[36,132435,132436,132439,132441,132443,132445,132447],{"class":38,"line":419},[36,132437,132438],{"class":2443},".absolute",[36,132440,80284],{"class":42},[36,132442,129313],{"class":53},[36,132444,51914],{"class":42},[36,132446,55308],{"class":53},[36,132448,129883],{"class":42},[36,132450,132451],{"class":38,"line":425},[36,132452,132453],{"class":69},"\u002F* 固定定位 *\u002F\n",[36,132455,132456,132459,132461,132463,132465,132467],{"class":38,"line":431},[36,132457,132458],{"class":2443},".fixed",[36,132460,80284],{"class":42},[36,132462,129313],{"class":53},[36,132464,51914],{"class":42},[36,132466,86710],{"class":53},[36,132468,129883],{"class":42},[36,132470,132471],{"class":38,"line":437},[36,132472,132473],{"class":69},"\u002F* 粘性定位 *\u002F\n",[36,132475,132476,132479,132481,132483,132485,132488],{"class":38,"line":443},[36,132477,132478],{"class":2443},".sticky",[36,132480,80284],{"class":42},[36,132482,129313],{"class":53},[36,132484,51914],{"class":42},[36,132486,132487],{"class":53},"sticky",[36,132489,129883],{"class":42},[579,132491,132492,132495],{"start":2097},[582,132493,132494],{},"一定要用好注释",[582,132496,132497],{},"浮动的盒子不会有外边距合并的问题",[539,132499,131841],{},{"title":31,"searchDepth":66,"depth":66,"links":132501},[132502,132503],{"id":131878,"depth":66,"text":131879},{"id":131942,"depth":66,"text":131943,"children":132504},[132505,132506,132507,132508,132509,132510,132511],{"id":131946,"depth":73,"text":131947},{"id":132052,"depth":73,"text":132053},{"id":132088,"depth":73,"text":132089},{"id":132109,"depth":73,"text":132110},{"id":132144,"depth":73,"text":132145},{"id":132177,"depth":73,"text":132178},{"id":132252,"depth":73,"text":132253},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131870,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132518,"title":132519,"body":132520,"description":550,"extension":551,"meta":134006,"navigation":553,"path":134007,"seo":134008,"stem":134009,"__hash__":134010},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132521,"toc":133998},[132522,132525,132529,132533,132544,132548,132565,132609,132642,132645,132662,132665,132668,132712,132716,132720,132723,132726,132730,132733,132744,132807,132848,132851,132866,132920,132928,132931,132942,132996,133022,133025,133038,133092,133124,133178,133201,133255,133258,133261,133268,133322,133343,133397,133400,133403,133488,133496,133553,133576,133580,133583,133601,133605,133624,133678,133716,133720,133723,133726,133748,133752,133760,133763,133768,133779,133782,133786,133800,133844,133847,133851,133854,133859,133885,133890,133967,133970,133974,133977,133980,133983,133986,133989,133992,133995],[10,132523,132519],{"id":132524},"_11-传统布局与定位体系",[14,132526,132528],{"id":132527},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[596,132530,132532],{"id":132531},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1620,132534,132535,132538,132541],{},[582,132536,132537],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[582,132539,132540],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[582,132542,132543],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[596,132545,132547],{"id":132546},"_1112-浮动","11.1.2 浮动",[1620,132549,132550,132553,132556,132559,132562],{},[582,132551,132552],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[582,132554,132555],{},"浮动可以改变元素标签默认的排列方式",[582,132557,132558],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[582,132560,132561],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[582,132563,132564],{},"在使用行内块转换时盒子之间是有空隙的",[26,132566,132567],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,132568,132569,132575,132585,132589,132595,132605],{"__ignoreMap":31},[36,132570,132571,132573],{"class":38,"line":39},[36,132572,131426],{"class":2443},[36,132574,16052],{"class":42},[36,132576,132577,132579,132581,132583],{"class":38,"line":66},[36,132578,131433],{"class":53},[36,132580,51914],{"class":42},[36,132582,24216],{"class":53},[36,132584,1774],{"class":42},[36,132586,132587],{"class":38,"line":73},[36,132588,2045],{"class":42},[36,132590,132591,132593],{"class":38,"line":79},[36,132592,131448],{"class":2443},[36,132594,16052],{"class":42},[36,132596,132597,132599,132601,132603],{"class":38,"line":85},[36,132598,131433],{"class":53},[36,132600,51914],{"class":42},[36,132602,72999],{"class":53},[36,132604,1774],{"class":42},[36,132606,132607],{"class":38,"line":419},[36,132608,2045],{"class":42},[758,132610,132611,132619],{},[761,132612,132613],{},[764,132614,132615,132617],{},[767,132616,127417],{"align":24216},[767,132618,27970],{"align":24216},[805,132620,132621,132628,132635],{},[764,132622,132623,132625],{},[810,132624,55214],{"align":24216},[810,132626,132627],{"align":24216},"元素不浮动（默认值）",[764,132629,132630,132632],{},[810,132631,24216],{"align":24216},[810,132633,132634],{"align":24216},"元素向左浮动",[764,132636,132637,132639],{},[810,132638,72999],{"align":24216},[810,132640,132641],{"align":24216},"元素向右浮动",[19,132643,132644],{},"浮动重点：",[1620,132646,132647,132650,132653,132656,132659],{},[582,132648,132649],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[582,132651,132652],{},"浮动的元素会一行内显示并且元素顶部对齐",[582,132654,132655],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[582,132657,132658],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[582,132660,132661],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132663,132664],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132666,132667],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,132669,132670],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,132671,132672,132678,132688,132692,132698,132708],{"__ignoreMap":31},[36,132673,132674,132676],{"class":38,"line":39},[36,132675,131426],{"class":2443},[36,132677,16052],{"class":42},[36,132679,132680,132682,132684,132686],{"class":38,"line":66},[36,132681,131433],{"class":53},[36,132683,51914],{"class":42},[36,132685,24216],{"class":53},[36,132687,1774],{"class":42},[36,132689,132690],{"class":38,"line":73},[36,132691,2045],{"class":42},[36,132693,132694,132696],{"class":38,"line":79},[36,132695,131448],{"class":2443},[36,132697,16052],{"class":42},[36,132699,132700,132702,132704,132706],{"class":38,"line":85},[36,132701,131433],{"class":53},[36,132703,51914],{"class":42},[36,132705,72999],{"class":53},[36,132707,1774],{"class":42},[36,132709,132710],{"class":38,"line":419},[36,132711,2045],{"class":42},[596,132713,132715],{"id":132714},"_1113-定位","11.1.3 定位",[22478,132717,132719],{"id":132718},"_11131-使用场景","11.1.3.1 使用场景",[19,132721,132722],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132724,132725],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22478,132727,132729],{"id":132728},"_11132-定位组成","11.1.3.2 定位组成",[19,132731,132732],{},"定位 = 定位模式 + 边偏移",[579,132734,132735],{},[582,132736,132737,132740,132741],{},[770,132738,132739],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[770,132742,132743],{},"定位模式",[26,132745,132747],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,132748,132749,132755,132769,132786,132803],{"__ignoreMap":31},[36,132750,132751,132753],{"class":38,"line":39},[36,132752,130801],{"class":2443},[36,132754,16052],{"class":42},[36,132756,132757,132760,132762,132764,132766],{"class":38,"line":66},[36,132758,132759],{"class":53},"  position",[36,132761,51914],{"class":42},[36,132763,55241],{"class":53},[36,132765,130816],{"class":42},[36,132767,132768],{"class":69},"\u002F* 定位模式 *\u002F\n",[36,132770,132771,132774,132776,132778,132780,132783],{"class":38,"line":73},[36,132772,132773],{"class":53},"  top",[36,132775,51914],{"class":42},[36,132777,1062],{"class":53},[36,132779,51969],{"class":46},[36,132781,132782],{"class":42},";           ",[36,132784,132785],{"class":69},"\u002F* 边偏移：上 *\u002F\n",[36,132787,132788,132791,132793,132795,132797,132800],{"class":38,"line":79},[36,132789,132790],{"class":53},"  left",[36,132792,51914],{"class":42},[36,132794,1313],{"class":53},[36,132796,51969],{"class":46},[36,132798,132799],{"class":42},";          ",[36,132801,132802],{"class":69},"\u002F* 边偏移：左 *\u002F\n",[36,132804,132805],{"class":38,"line":85},[36,132806,2045],{"class":42},[758,132808,132809,132818],{},[761,132810,132811],{},[764,132812,132813,132815],{},[767,132814,773],{"align":24216},[767,132816,132817],{"align":24216},"语义",[805,132819,132820,132827,132834,132841],{},[764,132821,132822,132824],{},[810,132823,132406],{"align":24216},[810,132825,132826],{"align":24216},"静态定位",[764,132828,132829,132831],{},[810,132830,55241],{"align":24216},[810,132832,132833],{"align":24216},"相对定位",[764,132835,132836,132838],{},[810,132837,55308],{"align":24216},[810,132839,132840],{"align":24216},"绝对定位",[764,132842,132843,132845],{},[810,132844,86710],{"align":24216},[810,132846,132847],{"align":24216},"固定定位",[19,132849,132850],{},"（1）静态定位：",[1620,132852,132853,132864],{},[582,132854,132855,132856,132859,132860,132863],{},"静态定位是元素的 ",[770,132857,132858],{},"默认定位方式"," ， ",[770,132861,132862],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[582,132865,5661],{},[26,132867,132868],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,132869,132870,132876,132888,132902,132916],{"__ignoreMap":31},[36,132871,132872,132874],{"class":38,"line":39},[36,132873,130801],{"class":2443},[36,132875,16052],{"class":42},[36,132877,132878,132880,132882,132884,132886],{"class":38,"line":66},[36,132879,132759],{"class":53},[36,132881,51914],{"class":42},[36,132883,55241],{"class":53},[36,132885,130816],{"class":42},[36,132887,132768],{"class":69},[36,132889,132890,132892,132894,132896,132898,132900],{"class":38,"line":73},[36,132891,132773],{"class":53},[36,132893,51914],{"class":42},[36,132895,1062],{"class":53},[36,132897,51969],{"class":46},[36,132899,132782],{"class":42},[36,132901,132785],{"class":69},[36,132903,132904,132906,132908,132910,132912,132914],{"class":38,"line":79},[36,132905,132790],{"class":53},[36,132907,51914],{"class":42},[36,132909,1313],{"class":53},[36,132911,51969],{"class":46},[36,132913,132799],{"class":42},[36,132915,132802],{"class":69},[36,132917,132918],{"class":38,"line":85},[36,132919,2045],{"class":42},[1620,132921,132922,132925],{},[582,132923,132924],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[582,132926,132927],{},"静态定位在布局时我们几乎不用的",[19,132929,132930],{},"（2）相对定位",[1620,132932,132933,132940],{},[582,132934,132935,132936,132939],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[770,132937,132938],{},"原来的位置"," 来说的（自恋型）",[582,132941,5661],{},[26,132943,132944],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,132945,132946,132952,132964,132978,132992],{"__ignoreMap":31},[36,132947,132948,132950],{"class":38,"line":39},[36,132949,130801],{"class":2443},[36,132951,16052],{"class":42},[36,132953,132954,132956,132958,132960,132962],{"class":38,"line":66},[36,132955,132759],{"class":53},[36,132957,51914],{"class":42},[36,132959,55241],{"class":53},[36,132961,130816],{"class":42},[36,132963,132768],{"class":69},[36,132965,132966,132968,132970,132972,132974,132976],{"class":38,"line":73},[36,132967,132773],{"class":53},[36,132969,51914],{"class":42},[36,132971,1062],{"class":53},[36,132973,51969],{"class":46},[36,132975,132782],{"class":42},[36,132977,132785],{"class":69},[36,132979,132980,132982,132984,132986,132988,132990],{"class":38,"line":79},[36,132981,132790],{"class":53},[36,132983,51914],{"class":42},[36,132985,1313],{"class":53},[36,132987,51969],{"class":46},[36,132989,132799],{"class":42},[36,132991,132802],{"class":69},[36,132993,132994],{"class":38,"line":85},[36,132995,2045],{"class":42},[1620,132997,132998],{},[582,132999,133000,133001,133003,133004,133006,133007,133010,133011,133014,133015,133017,133018,133021],{},"相对定位的特点：",[54193,133002],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54193,133005],{},"  ② ",[770,133008,133009],{},"原来"," 在标准流的 ",[770,133012,133013],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54193,133016],{},"  ③因此， ",[770,133019,133020],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133023,133024],{},"（3）绝对定位",[1620,133026,133027,133036],{},[582,133028,133029,133031,133032,133035],{},[770,133030,132840],{}," 是元素在移动位置的时候，是相对于它 ",[770,133033,133034],{},"祖先元素"," 来说的（拼爹型）",[582,133037,5661],{},[26,133039,133040],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,133041,133042,133048,133060,133074,133088],{"__ignoreMap":31},[36,133043,133044,133046],{"class":38,"line":39},[36,133045,130801],{"class":2443},[36,133047,16052],{"class":42},[36,133049,133050,133052,133054,133056,133058],{"class":38,"line":66},[36,133051,132759],{"class":53},[36,133053,51914],{"class":42},[36,133055,55241],{"class":53},[36,133057,130816],{"class":42},[36,133059,132768],{"class":69},[36,133061,133062,133064,133066,133068,133070,133072],{"class":38,"line":73},[36,133063,132773],{"class":53},[36,133065,51914],{"class":42},[36,133067,1062],{"class":53},[36,133069,51969],{"class":46},[36,133071,132782],{"class":42},[36,133073,132785],{"class":69},[36,133075,133076,133078,133080,133082,133084,133086],{"class":38,"line":79},[36,133077,132790],{"class":53},[36,133079,51914],{"class":42},[36,133081,1313],{"class":53},[36,133083,51969],{"class":46},[36,133085,132799],{"class":42},[36,133087,132802],{"class":69},[36,133089,133090],{"class":38,"line":85},[36,133091,2045],{"class":42},[1620,133093,133094,133109,133118,133121],{},[582,133095,133096,133097,133099,133100,133102,133103,133105,133106,133108],{},"绝对定位的特点：",[54193,133098],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54193,133101],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54193,133104],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54193,133107],{},"  (4)固定定位",[582,133110,133111,133113,133114,133117],{},[770,133112,132847],{}," 是元素 ",[770,133115,133116],{},"固定于浏览器可视区的位置"," 。（认死理型）",[582,133119,133120],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[582,133122,133123],{},"语法:",[26,133125,133126],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,133127,133128,133134,133146,133160,133174],{"__ignoreMap":31},[36,133129,133130,133132],{"class":38,"line":39},[36,133131,130801],{"class":2443},[36,133133,16052],{"class":42},[36,133135,133136,133138,133140,133142,133144],{"class":38,"line":66},[36,133137,132759],{"class":53},[36,133139,51914],{"class":42},[36,133141,55241],{"class":53},[36,133143,130816],{"class":42},[36,133145,132768],{"class":69},[36,133147,133148,133150,133152,133154,133156,133158],{"class":38,"line":73},[36,133149,132773],{"class":53},[36,133151,51914],{"class":42},[36,133153,1062],{"class":53},[36,133155,51969],{"class":46},[36,133157,132782],{"class":42},[36,133159,132785],{"class":69},[36,133161,133162,133164,133166,133168,133170,133172],{"class":38,"line":79},[36,133163,132790],{"class":53},[36,133165,51914],{"class":42},[36,133167,1313],{"class":53},[36,133169,51969],{"class":46},[36,133171,132799],{"class":42},[36,133173,132802],{"class":69},[36,133175,133176],{"class":38,"line":85},[36,133177,2045],{"class":42},[1620,133179,133180,133189],{},[582,133181,133182,133183,133185,133186,133188],{},"特点:",[54193,133184],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54193,133187],{},"  ②固定定位不再占有原先的位置,完全脱标",[582,133190,133191,133192,133194,133195,133197,133198,133200],{},"固定在版心位置的方法:",[54193,133193],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54193,133196],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54193,133199],{},"  实例：",[26,133202,133203],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,133204,133205,133211,133223,133237,133251],{"__ignoreMap":31},[36,133206,133207,133209],{"class":38,"line":39},[36,133208,130801],{"class":2443},[36,133210,16052],{"class":42},[36,133212,133213,133215,133217,133219,133221],{"class":38,"line":66},[36,133214,132759],{"class":53},[36,133216,51914],{"class":42},[36,133218,55241],{"class":53},[36,133220,130816],{"class":42},[36,133222,132768],{"class":69},[36,133224,133225,133227,133229,133231,133233,133235],{"class":38,"line":73},[36,133226,132773],{"class":53},[36,133228,51914],{"class":42},[36,133230,1062],{"class":53},[36,133232,51969],{"class":46},[36,133234,132782],{"class":42},[36,133236,132785],{"class":69},[36,133238,133239,133241,133243,133245,133247,133249],{"class":38,"line":79},[36,133240,132790],{"class":53},[36,133242,51914],{"class":42},[36,133244,1313],{"class":53},[36,133246,51969],{"class":46},[36,133248,132799],{"class":42},[36,133250,132802],{"class":69},[36,133252,133253],{"class":38,"line":85},[36,133254,2045],{"class":42},[519,133256],{"style":126809,"src":133257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133259,133260],{},"(5)粘性定位",[1620,133262,133263,133266],{},[582,133264,133265],{},"粘性定位可以被认为是相对定位和固定定位的混合",[582,133267,5661],{},[26,133269,133270],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,133271,133272,133278,133290,133304,133318],{"__ignoreMap":31},[36,133273,133274,133276],{"class":38,"line":39},[36,133275,130801],{"class":2443},[36,133277,16052],{"class":42},[36,133279,133280,133282,133284,133286,133288],{"class":38,"line":66},[36,133281,132759],{"class":53},[36,133283,51914],{"class":42},[36,133285,55241],{"class":53},[36,133287,130816],{"class":42},[36,133289,132768],{"class":69},[36,133291,133292,133294,133296,133298,133300,133302],{"class":38,"line":73},[36,133293,132773],{"class":53},[36,133295,51914],{"class":42},[36,133297,1062],{"class":53},[36,133299,51969],{"class":46},[36,133301,132782],{"class":42},[36,133303,132785],{"class":69},[36,133305,133306,133308,133310,133312,133314,133316],{"class":38,"line":79},[36,133307,132790],{"class":53},[36,133309,51914],{"class":42},[36,133311,1313],{"class":53},[36,133313,51969],{"class":46},[36,133315,132799],{"class":42},[36,133317,132802],{"class":69},[36,133319,133320],{"class":38,"line":85},[36,133321,2045],{"class":42},[1620,133323,133324],{},[582,133325,133326,133327,133329,133330,133332,133333,133335,133336,133339,133340,133342],{},"粘性定位的特点：",[54193,133328],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54193,133331],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54193,133334],{},"  ③必须添加 top 、left、right、bottom ",[770,133337,133338],{},"其中一个"," 才有效",[54193,133341],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,133344,133345],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,133346,133347,133353,133365,133379,133393],{"__ignoreMap":31},[36,133348,133349,133351],{"class":38,"line":39},[36,133350,130801],{"class":2443},[36,133352,16052],{"class":42},[36,133354,133355,133357,133359,133361,133363],{"class":38,"line":66},[36,133356,132759],{"class":53},[36,133358,51914],{"class":42},[36,133360,55241],{"class":53},[36,133362,130816],{"class":42},[36,133364,132768],{"class":69},[36,133366,133367,133369,133371,133373,133375,133377],{"class":38,"line":73},[36,133368,132773],{"class":53},[36,133370,51914],{"class":42},[36,133372,1062],{"class":53},[36,133374,51969],{"class":46},[36,133376,132782],{"class":42},[36,133378,132785],{"class":69},[36,133380,133381,133383,133385,133387,133389,133391],{"class":38,"line":79},[36,133382,132790],{"class":53},[36,133384,51914],{"class":42},[36,133386,1313],{"class":53},[36,133388,51969],{"class":46},[36,133390,132799],{"class":42},[36,133392,132802],{"class":69},[36,133394,133395],{"class":38,"line":85},[36,133396,2045],{"class":42},[519,133398],{"style":126809,"src":133399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133401,133402],{},"(6)总结",[758,133404,133405,133420],{},[761,133406,133407],{},[764,133408,133409,133411,133414,133417],{},[767,133410,132743],{"align":24216},[767,133412,133413],{"align":24216},"是否脱标",[767,133415,133416],{"align":24216},"移动位置",[767,133418,133419],{"align":24216},"是否常用",[805,133421,133422,133435,133449,133463,133476],{},[764,133423,133424,133427,133429,133432],{},[810,133425,133426],{"align":24216},"Static 静态定位",[810,133428,105079],{"align":24216},[810,133430,133431],{"align":24216},"不能使用边偏移",[810,133433,133434],{"align":24216},"很少",[764,133436,133437,133440,133443,133446],{},[810,133438,133439],{"align":24216},"Relative 相对定位",[810,133441,133442],{"align":24216},"否(占有位置)",[810,133444,133445],{"align":24216},"相对于自身位置移动",[810,133447,133448],{"align":24216},"基本单独使用",[764,133450,133451,133454,133457,133460],{},[810,133452,133453],{"align":24216},"Absolute 绝对定位",[810,133455,133456],{"align":24216},"是(不占有位置)",[810,133458,133459],{"align":24216},"带有定位的父级",[810,133461,133462],{"align":24216},"要和定位父级元素搭配使用",[764,133464,133465,133468,133470,133473],{},[810,133466,133467],{"align":24216},"Fixed 固定定位",[810,133469,133456],{"align":24216},[810,133471,133472],{"align":24216},"浏览器可视区",[810,133474,133475],{"align":24216},"单独使用,不需要父级",[764,133477,133478,133481,133483,133485],{},[810,133479,133480],{"align":24216},"Sticky 粘性定位",[810,133482,133442],{"align":24216},[810,133484,133472],{"align":24216},[810,133486,133487],{"align":24216},"当前阶段少",[579,133489,133490],{"start":66},[582,133491,133492,133495],{},[770,133493,133494],{},"边偏移"," 则决定了该元素的最终位置",[758,133497,133498,133509],{},[761,133499,133500],{},[764,133501,133502,133505,133507],{},[767,133503,133504],{"align":24216},"边偏移属性",[767,133506,27973],{"align":24216},[767,133508,27970],{"align":24216},[805,133510,133511,133522,133533,133543],{},[764,133512,133513,133516,133519],{},[810,133514,133515],{"align":24216},"top",[810,133517,133518],{"align":24216},"top: 80px;",[810,133520,133521],{"align":24216},"顶端偏移量，定义元素相对于父元素上边线的距离",[764,133523,133524,133527,133530],{},[810,133525,133526],{"align":24216},"bottom",[810,133528,133529],{"align":24216},"bottom: 80px ;",[810,133531,133532],{"align":24216},"底部偏移量，定义元素相对于其父元素下边线的距离",[764,133534,133535,133537,133540],{},[810,133536,24216],{"align":24216},[810,133538,133539],{"align":24216},"left: 80px ;",[810,133541,133542],{"align":24216},"左侧偏移量，定义元素相对于其父元素左边线的距离",[764,133544,133545,133547,133550],{},[810,133546,72999],{"align":24216},[810,133548,133549],{"align":24216},"right: 80px ;",[810,133551,133552],{"align":24216},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1620,133554,133555],{},[582,133556,9505,133557,133559,133560,133562,133563,133565,133566,133569,133570,133572,133573,133575],{},[54193,133558],{},"  ① ",[770,133561,133494],{}," 需要和 ",[770,133564,132743],{}," 联合使用， ",[770,133567,133568],{},"单独使用无效"," ；",[54193,133571],{},"  ②top和bottom不要同时使用",[54193,133574],{},"  ③left和right不要同时使用",[22478,133577,133579],{"id":133578},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133581,133582],{},"子级是绝对定位的话，父级要用相对定位",[1620,133584,133585,133588,133591,133594],{},[582,133586,133587],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[582,133589,133590],{},"父盒子需要加定位限制子盒子在父盒子内显示",[582,133592,133593],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[582,133595,133596,133597,133600],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[770,133598,133599],{},"子绝父绝"," 也会遇到",[22478,133602,133604],{"id":133603},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1620,133606,133607,133622],{},[582,133608,133609,133610,133613,133614,133617,133618,133621],{},"在使用 ",[770,133611,133612],{},"定位"," 布局时，可能会 ",[770,133615,133616],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[770,133619,133620],{},"z-index"," 来控制盒子的前后次序 (z轴)",[582,133623,5661],{},[26,133625,133626],{"className":126953,"code":132746,"language":126955,"meta":31,"style":31},[33,133627,133628,133634,133646,133660,133674],{"__ignoreMap":31},[36,133629,133630,133632],{"class":38,"line":39},[36,133631,130801],{"class":2443},[36,133633,16052],{"class":42},[36,133635,133636,133638,133640,133642,133644],{"class":38,"line":66},[36,133637,132759],{"class":53},[36,133639,51914],{"class":42},[36,133641,55241],{"class":53},[36,133643,130816],{"class":42},[36,133645,132768],{"class":69},[36,133647,133648,133650,133652,133654,133656,133658],{"class":38,"line":73},[36,133649,132773],{"class":53},[36,133651,51914],{"class":42},[36,133653,1062],{"class":53},[36,133655,51969],{"class":46},[36,133657,132782],{"class":42},[36,133659,132785],{"class":69},[36,133661,133662,133664,133666,133668,133670,133672],{"class":38,"line":79},[36,133663,132790],{"class":53},[36,133665,51914],{"class":42},[36,133667,1313],{"class":53},[36,133669,51969],{"class":46},[36,133671,132799],{"class":42},[36,133673,132802],{"class":69},[36,133675,133676],{"class":38,"line":85},[36,133677,2045],{"class":42},[1620,133679,133680],{},[582,133681,133682,133683,133559,133685,133687,133688,128116,133691,83016,133694,133696,133697,133699,133700,133703,133704,133569,133707,133709,133710,133713,133715],{},"z-index的特性",[54193,133684],{},[770,133686,127417],{}," ： ",[770,133689,133690],{},"正整数",[770,133692,133693],{},"负整数",[770,133695,812],{}," ，默认值是 0，数值越大，盒子越靠上；",[54193,133698],{},"  ②如果 ",[770,133701,133702],{},"属性值相同"," ，则按照书写顺序， ",[770,133705,133706],{},"后来居上",[54193,133708],{},"  ③数字后面 ",[770,133711,133712],{},"不能加单位",[54193,133714],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22478,133717,133719],{"id":133718},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133721,133722],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133724,133725],{},"方法:",[1620,133727,133728,133738],{},[582,133729,133730,133731,133734,133735],{},"left: 50%; 让 ",[770,133732,133733],{},"盒子的左侧"," 移动到 ",[770,133736,133737],{},"父级元素的水平中心位置",[582,133739,133740,133741,133744,133745],{},"margin-left: -100px; 让盒子 ",[770,133742,133743],{},"向左"," 移动 ",[770,133746,133747],{},"自身宽度的一半",[22478,133749,133751],{"id":133750},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[579,133753,133754,133757],{},[582,133755,133756],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[582,133758,133759],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133761,133762],{},"也就是说绝对定位和固定定位和浮动类似",[579,133764,133765],{"start":73},[582,133766,133767],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1620,133769,133770,133773,133776],{},[582,133771,133772],{},"可以用inline-block 转换为行内块",[582,133774,133775],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[582,133777,133778],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133780,133781],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22478,133783,133785],{"id":133784},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[579,133787,133788,133791,133794,133797],{},[582,133789,133790],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[582,133792,133793],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[582,133795,133796],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[582,133798,133799],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,133801,133802],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,133803,133804,133810,133820,133824,133830,133840],{"__ignoreMap":31},[36,133805,133806,133808],{"class":38,"line":39},[36,133807,131426],{"class":2443},[36,133809,16052],{"class":42},[36,133811,133812,133814,133816,133818],{"class":38,"line":66},[36,133813,131433],{"class":53},[36,133815,51914],{"class":42},[36,133817,24216],{"class":53},[36,133819,1774],{"class":42},[36,133821,133822],{"class":38,"line":73},[36,133823,2045],{"class":42},[36,133825,133826,133828],{"class":38,"line":79},[36,133827,131448],{"class":2443},[36,133829,16052],{"class":42},[36,133831,133832,133834,133836,133838],{"class":38,"line":85},[36,133833,131433],{"class":53},[36,133835,51914],{"class":42},[36,133837,72999],{"class":53},[36,133839,1774],{"class":42},[36,133841,133842],{"class":38,"line":419},[36,133843,2045],{"class":42},[519,133845],{"style":126809,"src":133846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22478,133848,133850],{"id":133849},"_11138-轮播图","11.1.3.8 轮播图",[519,133852],{"style":126809,"src":133853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[579,133855,133856],{},[582,133857,133858],{},"制作顺序:",[1620,133860,133861,133864,133867,133876],{},[582,133862,133863],{},"大盒子我们类名为： tb-promo 淘宝广告",[582,133865,133866],{},"里面先放一张图片",[582,133868,133869,133870,133872,133873,133875],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54193,133871],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54193,133874],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[582,133877,133878,133879,133881,133882,133884],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54193,133880],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54193,133883],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[579,133886,133887],{"start":66},[582,133888,133889],{},"代码模块",[26,133891,133893],{"className":126953,"code":133892,"language":126955,"meta":31,"style":31},"\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",[33,133894,133895,133900,133907,133917,133927,133937,133941,133946,133953,133963],{"__ignoreMap":31},[36,133896,133897],{"class":38,"line":39},[36,133898,133899],{"class":69},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,133901,133902,133905],{"class":38,"line":66},[36,133903,133904],{"class":2443},".son",[36,133906,16052],{"class":42},[36,133908,133909,133911,133913,133915],{"class":38,"line":73},[36,133910,132759],{"class":53},[36,133912,51914],{"class":42},[36,133914,55308],{"class":53},[36,133916,1774],{"class":42},[36,133918,133919,133921,133923,133925],{"class":38,"line":79},[36,133920,132773],{"class":53},[36,133922,51914],{"class":42},[36,133924,812],{"class":53},[36,133926,1774],{"class":42},[36,133928,133929,133931,133933,133935],{"class":38,"line":85},[36,133930,132790],{"class":53},[36,133932,51914],{"class":42},[36,133934,812],{"class":53},[36,133936,1774],{"class":42},[36,133938,133939],{"class":38,"line":419},[36,133940,2045],{"class":42},[36,133942,133943],{"class":38,"line":425},[36,133944,133945],{"class":69},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,133947,133948,133951],{"class":38,"line":431},[36,133949,133950],{"class":2443},".father",[36,133952,16052],{"class":42},[36,133954,133955,133957,133959,133961],{"class":38,"line":437},[36,133956,132759],{"class":53},[36,133958,51914],{"class":42},[36,133960,55241],{"class":53},[36,133962,1774],{"class":42},[36,133964,133965],{"class":38,"line":443},[36,133966,2045],{"class":42},[19,133968,133969],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[596,133971,133973],{"id":133972},"_1114-定位数值的移动","11.1.4 定位数值的移动",[519,133975],{"style":126809,"src":133976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133978,133979],{},"✨ 黄金口诀：",[19,133981,133982],{},"\"TOP正下负上，LEFT正右负左\"",[19,133984,133985],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133987,133988],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133990,133991],{},"✨ 简单记：",[19,133993,133994],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[539,133996,133997],{},"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":31,"searchDepth":66,"depth":66,"links":133999},[134000],{"id":132527,"depth":66,"text":132528,"children":134001},[134002,134003,134004,134005],{"id":132531,"depth":73,"text":132532},{"id":132546,"depth":73,"text":132547},{"id":132714,"depth":73,"text":132715},{"id":133972,"depth":73,"text":133973},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132519,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134012,"title":134013,"body":134014,"description":550,"extension":551,"meta":135437,"navigation":553,"path":135438,"seo":135439,"stem":135440,"__hash__":135441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134015,"toc":135416},[134016,134019,134023,134031,134035,134040,134048,134060,134064,134069,134077,134088,134092,134097,134138,134146,134150,134153,134156,134159,134253,134256,134350,134353,134447,134450,134453,134488,134491,134494,134524,134527,134530,134533,134536,134539,134542,134545,134615,134618,134622,134626,134667,134671,134677,134680,134683,134687,134690,134693,134696,134777,134780,134783,134787,134791,134794,134797,134800,134803,134806,134812,134821,134825,134844,134848,134858,134861,134864,134867,134870,134873,134876,134879,134882,134891,134895,134904,134907,134912,134965,134970,135136,135139,135142,135147,135150,135153,135156,135159,135164,135312,135315,135318,135323,135326,135331,135365,135368,135371,135375,135378,135385,135388,135391,135394,135397,135400,135403,135406,135410,135413],[10,134017,134013],{"id":134018},"_12-显示隐藏与图形资源",[14,134020,134022],{"id":134021},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1620,134024,134025,134028],{},[582,134026,134027],{},"目的:让一个元素在页面中消失或者显示出来",[582,134029,134030],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[596,134032,134034],{"id":134033},"_1211-display-显示","12.1.1 display 显示",[579,134036,134037],{},[582,134038,134039],{},"display 设置或检索对象是否及如何显示",[1620,134041,134042,134045],{},[582,134043,134044],{},"display: none;隐藏对象",[582,134046,134047],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[579,134049,134050,134057],{"start":66},[582,134051,134052,134053,134056],{},"特点： display 隐藏元素后， ",[770,134054,134055],{},"不再占"," 有原来的位置",[582,134058,134059],{},"在js中使用非常的广泛",[596,134061,134063],{"id":134062},"_1212-visibility可见性","12.1.2 visibility可见性",[579,134065,134066],{},[582,134067,134068],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1620,134070,134071,134074],{},[582,134072,134073],{},"visibility： visible；元素可见",[582,134075,134076],{},"visibility：hidden；元素隐藏",[579,134078,134079,134082,134085],{"start":66},[582,134080,134081],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[582,134083,134084],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[582,134086,134087],{},"隐藏后继续占有原有位置",[596,134089,134091],{"id":134090},"_1213-overflow溢出","12.1.3 overflow溢出",[1620,134093,134094],{},[582,134095,134096],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[758,134098,134099,134107],{},[761,134100,134101],{},[764,134102,134103,134105],{},[767,134104,127417],{"align":24216},[767,134106,27970],{"align":24216},[805,134108,134109,134117,134124,134131],{},[764,134110,134111,134114],{},[810,134112,134113],{"align":24216},"visible",[810,134115,134116],{"align":24216},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[764,134118,134119,134121],{},[810,134120,62191],{"align":24216},[810,134122,134123],{"align":24216},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[764,134125,134126,134128],{},[810,134127,129373],{"align":24216},[810,134129,134130],{"align":24216},"不管超出内容否，总是显示滚动条",[764,134132,134133,134135],{},[810,134134,73140],{"align":24216},[810,134136,134137],{"align":24216},"超出自动显示滚动条，不超出不显示滚动条",[1620,134139,134140,134143],{},[582,134141,134142],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[582,134144,134145],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[596,134147,134149],{"id":134148},"_1214-案例收获","12.1.4 案例收获",[519,134151],{"style":126809,"src":134152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134154,134155],{},"问题：没做出来动态效果，使用hover没实现",[19,134157,134158],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,134160,134161],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,134162,134163,134167,134181,134185,134199,134203,134217,134221,134235,134239],{"__ignoreMap":31},[36,134164,134165],{"class":38,"line":39},[36,134166,132392],{"class":69},[36,134168,134169,134171,134173,134175,134177,134179],{"class":38,"line":66},[36,134170,132397],{"class":2443},[36,134172,80284],{"class":42},[36,134174,129313],{"class":53},[36,134176,51914],{"class":42},[36,134178,132406],{"class":53},[36,134180,129883],{"class":42},[36,134182,134183],{"class":38,"line":73},[36,134184,132413],{"class":69},[36,134186,134187,134189,134191,134193,134195,134197],{"class":38,"line":79},[36,134188,132418],{"class":2443},[36,134190,80284],{"class":42},[36,134192,129313],{"class":53},[36,134194,51914],{"class":42},[36,134196,55241],{"class":53},[36,134198,129883],{"class":42},[36,134200,134201],{"class":38,"line":85},[36,134202,132433],{"class":69},[36,134204,134205,134207,134209,134211,134213,134215],{"class":38,"line":419},[36,134206,132438],{"class":2443},[36,134208,80284],{"class":42},[36,134210,129313],{"class":53},[36,134212,51914],{"class":42},[36,134214,55308],{"class":53},[36,134216,129883],{"class":42},[36,134218,134219],{"class":38,"line":425},[36,134220,132453],{"class":69},[36,134222,134223,134225,134227,134229,134231,134233],{"class":38,"line":431},[36,134224,132458],{"class":2443},[36,134226,80284],{"class":42},[36,134228,129313],{"class":53},[36,134230,51914],{"class":42},[36,134232,86710],{"class":53},[36,134234,129883],{"class":42},[36,134236,134237],{"class":38,"line":437},[36,134238,132473],{"class":69},[36,134240,134241,134243,134245,134247,134249,134251],{"class":38,"line":443},[36,134242,132478],{"class":2443},[36,134244,80284],{"class":42},[36,134246,129313],{"class":53},[36,134248,51914],{"class":42},[36,134250,132487],{"class":53},[36,134252,129883],{"class":42},[19,134254,134255],{},"完整代码：",[26,134257,134258],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,134259,134260,134264,134278,134282,134296,134300,134314,134318,134332,134336],{"__ignoreMap":31},[36,134261,134262],{"class":38,"line":39},[36,134263,132392],{"class":69},[36,134265,134266,134268,134270,134272,134274,134276],{"class":38,"line":66},[36,134267,132397],{"class":2443},[36,134269,80284],{"class":42},[36,134271,129313],{"class":53},[36,134273,51914],{"class":42},[36,134275,132406],{"class":53},[36,134277,129883],{"class":42},[36,134279,134280],{"class":38,"line":73},[36,134281,132413],{"class":69},[36,134283,134284,134286,134288,134290,134292,134294],{"class":38,"line":79},[36,134285,132418],{"class":2443},[36,134287,80284],{"class":42},[36,134289,129313],{"class":53},[36,134291,51914],{"class":42},[36,134293,55241],{"class":53},[36,134295,129883],{"class":42},[36,134297,134298],{"class":38,"line":85},[36,134299,132433],{"class":69},[36,134301,134302,134304,134306,134308,134310,134312],{"class":38,"line":419},[36,134303,132438],{"class":2443},[36,134305,80284],{"class":42},[36,134307,129313],{"class":53},[36,134309,51914],{"class":42},[36,134311,55308],{"class":53},[36,134313,129883],{"class":42},[36,134315,134316],{"class":38,"line":425},[36,134317,132453],{"class":69},[36,134319,134320,134322,134324,134326,134328,134330],{"class":38,"line":431},[36,134321,132458],{"class":2443},[36,134323,80284],{"class":42},[36,134325,129313],{"class":53},[36,134327,51914],{"class":42},[36,134329,86710],{"class":53},[36,134331,129883],{"class":42},[36,134333,134334],{"class":38,"line":437},[36,134335,132473],{"class":69},[36,134337,134338,134340,134342,134344,134346,134348],{"class":38,"line":443},[36,134339,132478],{"class":2443},[36,134341,80284],{"class":42},[36,134343,129313],{"class":53},[36,134345,51914],{"class":42},[36,134347,132487],{"class":53},[36,134349,129883],{"class":42},[19,134351,134352],{},"分布思路重点详解：",[26,134354,134355],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,134356,134357,134361,134375,134379,134393,134397,134411,134415,134429,134433],{"__ignoreMap":31},[36,134358,134359],{"class":38,"line":39},[36,134360,132392],{"class":69},[36,134362,134363,134365,134367,134369,134371,134373],{"class":38,"line":66},[36,134364,132397],{"class":2443},[36,134366,80284],{"class":42},[36,134368,129313],{"class":53},[36,134370,51914],{"class":42},[36,134372,132406],{"class":53},[36,134374,129883],{"class":42},[36,134376,134377],{"class":38,"line":73},[36,134378,132413],{"class":69},[36,134380,134381,134383,134385,134387,134389,134391],{"class":38,"line":79},[36,134382,132418],{"class":2443},[36,134384,80284],{"class":42},[36,134386,129313],{"class":53},[36,134388,51914],{"class":42},[36,134390,55241],{"class":53},[36,134392,129883],{"class":42},[36,134394,134395],{"class":38,"line":85},[36,134396,132433],{"class":69},[36,134398,134399,134401,134403,134405,134407,134409],{"class":38,"line":419},[36,134400,132438],{"class":2443},[36,134402,80284],{"class":42},[36,134404,129313],{"class":53},[36,134406,51914],{"class":42},[36,134408,55308],{"class":53},[36,134410,129883],{"class":42},[36,134412,134413],{"class":38,"line":425},[36,134414,132453],{"class":69},[36,134416,134417,134419,134421,134423,134425,134427],{"class":38,"line":431},[36,134418,132458],{"class":2443},[36,134420,80284],{"class":42},[36,134422,129313],{"class":53},[36,134424,51914],{"class":42},[36,134426,86710],{"class":53},[36,134428,129883],{"class":42},[36,134430,134431],{"class":38,"line":437},[36,134432,132473],{"class":69},[36,134434,134435,134437,134439,134441,134443,134445],{"class":38,"line":443},[36,134436,132478],{"class":2443},[36,134438,80284],{"class":42},[36,134440,129313],{"class":53},[36,134442,51914],{"class":42},[36,134444,132487],{"class":53},[36,134446,129883],{"class":42},[519,134448],{"style":126809,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134451,134452],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,134454,134456],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,134457,134458],{"__ignoreMap":31},[36,134459,134460,134462,134464,134466,134468,134471,134473,134475,134478,134481,134483,134486],{"class":38,"line":39},[36,134461,1523],{"class":42},[36,134463,519],{"class":51777},[36,134465,55716],{"class":2443},[36,134467,47],{"class":42},[36,134469,134470],{"class":405},"\"images\u002Fpic.jpg\"",[36,134472,55724],{"class":2443},[36,134474,47],{"class":42},[36,134476,134477],{"class":405},"\"描述文字\"",[36,134479,134480],{"class":2443}," title",[36,134482,47],{"class":42},[36,134484,134485],{"class":405},"\"悬停提示\"",[36,134487,51784],{"class":42},[519,134489],{"style":126809,"src":134490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134492,134493],{},"制造遮罩层",[26,134495,134496],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,134497,134498],{"__ignoreMap":31},[36,134499,134500,134502,134504,134506,134508,134510,134512,134514,134516,134518,134520,134522],{"class":38,"line":39},[36,134501,1523],{"class":42},[36,134503,519],{"class":51777},[36,134505,55716],{"class":2443},[36,134507,47],{"class":42},[36,134509,134470],{"class":405},[36,134511,55724],{"class":2443},[36,134513,47],{"class":42},[36,134515,134477],{"class":405},[36,134517,134480],{"class":2443},[36,134519,47],{"class":42},[36,134521,134485],{"class":405},[36,134523,51784],{"class":42},[19,134525,134526],{},"此时是这样的为标准流",[519,134528],{"style":126809,"src":134529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134531,134532],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134534,134535],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134537,134538],{},"让他在中间，用center(background-position)",[19,134540,134541],{},"将需要变的尽可能放到一个盒子中",[19,134543,134544],{},"放大盒子上内部盒子发生变化",[26,134546,134548],{"className":126953,"code":134547,"language":126955,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,134549,134550,134556,134566,134570,134577,134587,134599,134611],{"__ignoreMap":31},[36,134551,134552,134554],{"class":38,"line":39},[36,134553,128020],{"class":2443},[36,134555,16052],{"class":42},[36,134557,134558,134560,134562,134564],{"class":38,"line":66},[36,134559,132759],{"class":53},[36,134561,51914],{"class":42},[36,134563,55241],{"class":53},[36,134565,1774],{"class":42},[36,134567,134568],{"class":38,"line":73},[36,134569,2045],{"class":42},[36,134571,134572,134575],{"class":38,"line":79},[36,134573,134574],{"class":2443},".child",[36,134576,16052],{"class":42},[36,134578,134579,134581,134583,134585],{"class":38,"line":85},[36,134580,132759],{"class":53},[36,134582,51914],{"class":42},[36,134584,55308],{"class":53},[36,134586,1774],{"class":42},[36,134588,134589,134591,134593,134595,134597],{"class":38,"line":419},[36,134590,132773],{"class":53},[36,134592,51914],{"class":42},[36,134594,1269],{"class":53},[36,134596,947],{"class":46},[36,134598,1774],{"class":42},[36,134600,134601,134603,134605,134607,134609],{"class":38,"line":425},[36,134602,132790],{"class":53},[36,134604,51914],{"class":42},[36,134606,1269],{"class":53},[36,134608,947],{"class":46},[36,134610,1774],{"class":42},[36,134612,134613],{"class":38,"line":431},[36,134614,2045],{"class":42},[19,134616,134617],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134619,134621],{"id":134620},"_122-精灵图","12.2 精灵图",[596,134623,134625],{"id":134624},"_1221-理解","12.2.1 理解",[579,134627,134628,134646],{},[582,134629,134630,134631,132859,134634,134637,134638,134641,134642,134645],{},"目的： ",[770,134632,134633],{},"为了有效地减少服务器接收和发送请求的次数",[770,134635,134636],{},"提高"," 页面的 ",[770,134639,134640],{},"加载速度"," ，出现了 ",[770,134643,134644],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[582,134647,134648,134649,134651,134652,134654,134655,134657,134658,134660,134661,134663,134664,134666],{},"使用精灵图核心：",[54193,134650],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54193,134653],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54193,134656],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54193,134659],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54193,134662],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54193,134665],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[596,134668,134670],{"id":134669},"_1222-扒图","12.2.2 扒图",[26,134672,134675],{"className":134673,"code":134674,"language":5667},[5665],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,134676,134674],{"__ignoreMap":31},[519,134678],{"style":126809,"src":134679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[519,134681],{"style":126809,"src":134682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[596,134684,134686],{"id":134685},"_1223-精灵图的实现","12.2.3 精灵图的实现",[519,134688],{"style":126809,"src":134689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134691,134692],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[519,134694],{"style":126809,"src":134695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,134697,134699],{"className":126953,"code":134698,"language":126955,"meta":31,"style":31},"\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",[33,134700,134701,134706,134713,134725,134737,134756,134773],{"__ignoreMap":31},[36,134702,134703],{"class":38,"line":39},[36,134704,134705],{"class":69},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,134707,134708,134711],{"class":38,"line":66},[36,134709,134710],{"class":2443},".icon",[36,134712,16052],{"class":42},[36,134714,134715,134717,134719,134721,134723],{"class":38,"line":73},[36,134716,71045],{"class":53},[36,134718,51914],{"class":42},[36,134720,1313],{"class":53},[36,134722,51969],{"class":46},[36,134724,1774],{"class":42},[36,134726,134727,134729,134731,134733,134735],{"class":38,"line":79},[36,134728,71265],{"class":53},[36,134730,51914],{"class":42},[36,134732,1313],{"class":53},[36,134734,51969],{"class":46},[36,134736,1774],{"class":42},[36,134738,134739,134741,134743,134745,134747,134750,134752,134754],{"class":38,"line":85},[36,134740,71088],{"class":53},[36,134742,51914],{"class":42},[36,134744,62203],{"class":53},[36,134746,345],{"class":42},[36,134748,134749],{"class":5696},"sprites.png",[36,134751,14194],{"class":42},[36,134753,62213],{"class":53},[36,134755,1774],{"class":42},[36,134757,134758,134760,134762,134764,134766,134769,134771],{"class":38,"line":419},[36,134759,129213],{"class":53},[36,134761,51914],{"class":42},[36,134763,52240],{"class":53},[36,134765,51969],{"class":46},[36,134767,134768],{"class":53}," -20",[36,134770,51969],{"class":46},[36,134772,1774],{"class":42},[36,134774,134775],{"class":38,"line":425},[36,134776,2045],{"class":42},[519,134778],{"style":126809,"src":134779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134781,134782],{},"在前端中坐标轴的正方向是右和下",[14,134784,134786],{"id":134785},"_123-字体图标","12.3 字体图标",[596,134788,134790],{"id":134789},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134792,134793],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134795,134796],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134798,134799],{},"1.图片文件还是比较大的。",[19,134801,134802],{},"2.图片本身放大和缩小会失真。",[19,134804,134805],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134807,134808,134809,26221],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[770,134810,134811],{},"字体图标 iconfont",[19,134813,134814,134817,134818,28866],{},[770,134815,134816],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[770,134819,134820],{},"展示的是图标，本质属于字体",[596,134822,134824],{"id":134823},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1620,134826,134827,134832,134835,134838,134841],{},[582,134828,134829,134831],{},[770,134830,26357],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[582,134833,134834],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[582,134836,134837],{},"兼容性：几乎支持所有的浏览器，请放心使用",[582,134839,134840],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[582,134842,134843],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[596,134845,134847],{"id":134846},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1620,134849,134850],{},[582,134851,134852,134853],{},"icomoon字体库：",[43,134854,134857],{"href":134855,"rel":134856},"http:\u002F\u002Ficomoon.io\u002F",[24345],"http:\u002F\u002Ficomoon.io",[19,134859,134860],{},"进去之后点icomoon app",[519,134862],{"style":126809,"src":134863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134865,134866],{},"可以对其编辑：",[519,134868],{"style":126809,"src":134869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134871,134872],{},"生成字体：",[519,134874],{"style":126809,"src":134875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134877,134878],{},"下载：",[519,134880],{"style":126809,"src":134881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1620,134883,134884],{},[582,134885,134886,134887],{},"阿里iconfont字体库： ",[43,134888,134889],{"href":134889,"rel":134890},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24345],[596,134892,134894],{"id":134893},"_1234-字体图标的引入","12.3.4 字体图标的引入",[579,134896,134897],{},[582,134898,134899,134900,134903],{},"把下载包里面的 ",[770,134901,134902],{},"fonts"," 文件夹放入页面根目录下",[519,134905],{"style":126809,"src":134906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[579,134908,134909],{"start":66},[582,134910,134911],{},"字体文件格式",[758,134913,134914,134923],{},[761,134915,134916],{},[764,134917,134918,134921],{},[767,134919,134920],{"align":24216},"格式",[767,134922,24220],{"align":24216},[805,134924,134925,134935,134945,134955],{},[764,134926,134927,134932],{},[810,134928,134929],{"align":24216},[770,134930,134931],{},".ttf",[810,134933,134934],{"align":24216},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[764,134936,134937,134942],{},[810,134938,134939],{"align":24216},[770,134940,134941],{},".woff",[810,134943,134944],{"align":24216},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[764,134946,134947,134952],{},[810,134948,134949],{"align":24216},[770,134950,134951],{},".eot",[810,134953,134954],{"align":24216},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[764,134956,134957,134962],{},[810,134958,134959],{"align":24216},[770,134960,134961],{},"svg",[810,134963,134964],{"align":24216},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[579,134966,134967],{"start":73},[582,134968,134969],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,134971,134973],{"className":126953,"code":134972,"language":126955,"meta":31,"style":31},"\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",[33,134974,134975,134980,134987,134999,135015,135040,135061,135081,135101,135105,135111,135121,135132],{"__ignoreMap":31},[36,134976,134977],{"class":38,"line":39},[36,134978,134979],{"class":69},"\u002F* 引入字体图标 *\u002F\n",[36,134981,134982,134985],{"class":38,"line":66},[36,134983,134984],{"class":46},"@font-face",[36,134986,16052],{"class":42},[36,134988,134989,134992,134994,134997],{"class":38,"line":73},[36,134990,134991],{"class":53},"  font-family",[36,134993,51914],{"class":42},[36,134995,134996],{"class":405},"'icomoon'",[36,134998,1774],{"class":42},[36,135000,135001,135004,135006,135008,135010,135013],{"class":38,"line":79},[36,135002,135003],{"class":53},"  src",[36,135005,51914],{"class":42},[36,135007,62203],{"class":53},[36,135009,345],{"class":42},[36,135011,135012],{"class":405},"'fonts\u002Ficomoon.eot'",[36,135014,3199],{"class":42},[36,135016,135017,135019,135021,135023,135025,135028,135030,135033,135035,135038],{"class":38,"line":85},[36,135018,135003],{"class":53},[36,135020,51914],{"class":42},[36,135022,62203],{"class":53},[36,135024,345],{"class":42},[36,135026,135027],{"class":405},"'fonts\u002Ficomoon.eot?#iefix'",[36,135029,14194],{"class":42},[36,135031,135032],{"class":53},"format",[36,135034,345],{"class":42},[36,135036,135037],{"class":405},"'embedded-opentype'",[36,135039,38524],{"class":42},[36,135041,135042,135045,135047,135050,135052,135054,135056,135059],{"class":38,"line":419},[36,135043,135044],{"class":53},"       url",[36,135046,345],{"class":42},[36,135048,135049],{"class":405},"'fonts\u002Ficomoon.woff'",[36,135051,14194],{"class":42},[36,135053,135032],{"class":53},[36,135055,345],{"class":42},[36,135057,135058],{"class":405},"'woff'",[36,135060,38524],{"class":42},[36,135062,135063,135065,135067,135070,135072,135074,135076,135079],{"class":38,"line":425},[36,135064,135044],{"class":53},[36,135066,345],{"class":42},[36,135068,135069],{"class":405},"'fonts\u002Ficomoon.ttf'",[36,135071,14194],{"class":42},[36,135073,135032],{"class":53},[36,135075,345],{"class":42},[36,135077,135078],{"class":405},"'truetype'",[36,135080,38524],{"class":42},[36,135082,135083,135085,135087,135090,135092,135094,135096,135099],{"class":38,"line":431},[36,135084,135044],{"class":53},[36,135086,345],{"class":42},[36,135088,135089],{"class":405},"'fonts\u002Ficomoon.svg#icomoon'",[36,135091,14194],{"class":42},[36,135093,135032],{"class":53},[36,135095,345],{"class":42},[36,135097,135098],{"class":405},"'svg'",[36,135100,3199],{"class":42},[36,135102,135103],{"class":38,"line":437},[36,135104,2045],{"class":42},[36,135106,135107,135109],{"class":38,"line":443},[36,135108,134710],{"class":2443},[36,135110,16052],{"class":42},[36,135112,135113,135115,135117,135119],{"class":38,"line":2092},[36,135114,134991],{"class":53},[36,135116,51914],{"class":42},[36,135118,134996],{"class":405},[36,135120,1774],{"class":42},[36,135122,135123,135126,135128,135130],{"class":38,"line":2097},[36,135124,135125],{"class":53},"  font-style",[36,135127,51914],{"class":42},[36,135129,64318],{"class":53},[36,135131,1774],{"class":42},[36,135133,135134],{"class":38,"line":2103},[36,135135,2045],{"class":42},[19,135137,135138],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[519,135140],{"style":126809,"src":135141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[579,135143,135144],{"start":79},[582,135145,135146],{},"添加字体",[519,135148],{"style":126809,"src":135149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135151,135152],{},"复制：",[519,135154],{"style":126809,"src":135155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135157,135158],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[579,135160,135161],{"start":85},[582,135162,135163],{},"代码展示：",[26,135165,135166],{"className":126953,"code":134972,"language":126955,"meta":31,"style":31},[33,135167,135168,135172,135178,135188,135202,135224,135242,135260,135278,135282,135288,135298,135308],{"__ignoreMap":31},[36,135169,135170],{"class":38,"line":39},[36,135171,134979],{"class":69},[36,135173,135174,135176],{"class":38,"line":66},[36,135175,134984],{"class":46},[36,135177,16052],{"class":42},[36,135179,135180,135182,135184,135186],{"class":38,"line":73},[36,135181,134991],{"class":53},[36,135183,51914],{"class":42},[36,135185,134996],{"class":405},[36,135187,1774],{"class":42},[36,135189,135190,135192,135194,135196,135198,135200],{"class":38,"line":79},[36,135191,135003],{"class":53},[36,135193,51914],{"class":42},[36,135195,62203],{"class":53},[36,135197,345],{"class":42},[36,135199,135012],{"class":405},[36,135201,3199],{"class":42},[36,135203,135204,135206,135208,135210,135212,135214,135216,135218,135220,135222],{"class":38,"line":85},[36,135205,135003],{"class":53},[36,135207,51914],{"class":42},[36,135209,62203],{"class":53},[36,135211,345],{"class":42},[36,135213,135027],{"class":405},[36,135215,14194],{"class":42},[36,135217,135032],{"class":53},[36,135219,345],{"class":42},[36,135221,135037],{"class":405},[36,135223,38524],{"class":42},[36,135225,135226,135228,135230,135232,135234,135236,135238,135240],{"class":38,"line":419},[36,135227,135044],{"class":53},[36,135229,345],{"class":42},[36,135231,135049],{"class":405},[36,135233,14194],{"class":42},[36,135235,135032],{"class":53},[36,135237,345],{"class":42},[36,135239,135058],{"class":405},[36,135241,38524],{"class":42},[36,135243,135244,135246,135248,135250,135252,135254,135256,135258],{"class":38,"line":425},[36,135245,135044],{"class":53},[36,135247,345],{"class":42},[36,135249,135069],{"class":405},[36,135251,14194],{"class":42},[36,135253,135032],{"class":53},[36,135255,345],{"class":42},[36,135257,135078],{"class":405},[36,135259,38524],{"class":42},[36,135261,135262,135264,135266,135268,135270,135272,135274,135276],{"class":38,"line":431},[36,135263,135044],{"class":53},[36,135265,345],{"class":42},[36,135267,135089],{"class":405},[36,135269,14194],{"class":42},[36,135271,135032],{"class":53},[36,135273,345],{"class":42},[36,135275,135098],{"class":405},[36,135277,3199],{"class":42},[36,135279,135280],{"class":38,"line":437},[36,135281,2045],{"class":42},[36,135283,135284,135286],{"class":38,"line":443},[36,135285,134710],{"class":2443},[36,135287,16052],{"class":42},[36,135289,135290,135292,135294,135296],{"class":38,"line":2092},[36,135291,134991],{"class":53},[36,135293,51914],{"class":42},[36,135295,134996],{"class":405},[36,135297,1774],{"class":42},[36,135299,135300,135302,135304,135306],{"class":38,"line":2097},[36,135301,135125],{"class":53},[36,135303,51914],{"class":42},[36,135305,64318],{"class":53},[36,135307,1774],{"class":42},[36,135309,135310],{"class":38,"line":2103},[36,135311,2045],{"class":42},[519,135313],{"style":126809,"src":135314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135316,135317],{},"更加细节展示：",[579,135319,135320],{},[582,135321,135322],{},"html 标签内添加小图标",[519,135324],{"style":126809,"src":135325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[579,135327,135328],{"start":66},[582,135329,135330],{},"给标签定义字体",[26,135332,135333],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,135334,135335,135339,135353,135357],{"__ignoreMap":31},[36,135336,135337],{"class":38,"line":39},[36,135338,131064],{"class":69},[36,135340,135341,135343,135345,135347,135349,135351],{"class":38,"line":66},[36,135342,1523],{"class":42},[36,135344,52088],{"class":51777},[36,135346,53963],{"class":2443},[36,135348,47],{"class":42},[36,135350,131077],{"class":405},[36,135352,51784],{"class":42},[36,135354,135355],{"class":38,"line":73},[36,135356,131084],{"class":42},[36,135358,135359,135361,135363],{"class":38,"line":79},[36,135360,52262],{"class":42},[36,135362,52088],{"class":51777},[36,135364,51784],{"class":42},[19,135366,135367],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[519,135369],{"style":126809,"src":135370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[596,135372,135374],{"id":135373},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135376,135377],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135379,135380,135381,135384],{},"把压缩包里面的 ",[770,135382,135383],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135386,135387],{},"打开网站，点下方：",[519,135389],{"style":126809,"src":135390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[519,135392],{"style":126809,"src":135393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[519,135395],{"style":126809,"src":135396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135398,135399],{},"点yes重新加载",[19,135401,135402],{},"然后重复之前的操作就可以实现了",[19,135404,135405],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[596,135407,135409],{"id":135408},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[519,135411],{"style":126809,"src":135412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[539,135414,135415],{},"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":31,"searchDepth":66,"depth":66,"links":135417},[135418,135424,135429],{"id":134021,"depth":66,"text":134022,"children":135419},[135420,135421,135422,135423],{"id":134033,"depth":73,"text":134034},{"id":134062,"depth":73,"text":134063},{"id":134090,"depth":73,"text":134091},{"id":134148,"depth":73,"text":134149},{"id":134620,"depth":66,"text":134621,"children":135425},[135426,135427,135428],{"id":134624,"depth":73,"text":134625},{"id":134669,"depth":73,"text":134670},{"id":134685,"depth":73,"text":134686},{"id":134785,"depth":66,"text":134786,"children":135430},[135431,135432,135433,135434,135435,135436],{"id":134789,"depth":73,"text":134790},{"id":134823,"depth":73,"text":134824},{"id":134846,"depth":73,"text":134847},{"id":134893,"depth":73,"text":134894},{"id":135373,"depth":73,"text":135374},{"id":135408,"depth":73,"text":135409},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134013,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135443,"title":135444,"body":135445,"description":550,"extension":551,"meta":136672,"navigation":553,"path":136673,"seo":136674,"stem":136675,"__hash__":136676},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135446,"toc":136653},[135447,135450,135454,135457,135471,135539,135569,135572,135576,135580,135682,135729,135733,135736,135739,135773,135776,135779,135782,135785,135788,135791,135794,135796,135799,135802,135805,135808,135811,135814,135817,135845,135848,135852,135855,135862,135865,135868,135894,135897,135901,135904,135907,135914,135918,135921,135923,135955,135958,135961,135973,135979,135982,135985,135988,135990,135994,135997,136000,136003,136048,136052,136054,136057,136064,136106,136109,136113,136118,136132,136136,136139,136142,136145,136148,136151,136185,136188,136191,136245,136248,136251,136254,136257,136309,136312,136315,136364,136368,136370,136373,136376,136379,136382,136385,136443,136446,136452,136455,136458,136490,136493,136497,136501,136504,136536,136540,136543,136587,136591,136594,136597,136600,136603,136606,136609,136612,136614,136617,136619,136622,136625,136628,136631,136636,136639,136641,136644,136647,136650],[10,135448,135444],{"id":135449},"_13-界面样式与布局技巧",[14,135451,135453],{"id":135452},"_131-css三角","13.1 css三角",[19,135455,135456],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1620,135458,135459,135462,135465,135468],{},[582,135460,135461],{},"用css 边框可以模拟三角效果",[582,135463,135464],{},"宽度高度为0",[582,135466,135467],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[582,135469,135470],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,135472,135474],{"className":126953,"code":135473,"language":126955,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[33,135475,135476,135481,135488,135498,135508,135524,135535],{"__ignoreMap":31},[36,135477,135478],{"class":38,"line":39},[36,135479,135480],{"class":69},"\u002F* CSS 实现三角形 *\u002F\n",[36,135482,135483,135486],{"class":38,"line":66},[36,135484,135485],{"class":2443},".triangle",[36,135487,16052],{"class":42},[36,135489,135490,135492,135494,135496],{"class":38,"line":73},[36,135491,71045],{"class":53},[36,135493,51914],{"class":42},[36,135495,812],{"class":53},[36,135497,1774],{"class":42},[36,135499,135500,135502,135504,135506],{"class":38,"line":79},[36,135501,71265],{"class":53},[36,135503,51914],{"class":42},[36,135505,812],{"class":53},[36,135507,1774],{"class":42},[36,135509,135510,135512,135514,135516,135518,135520,135522],{"class":38,"line":85},[36,135511,71373],{"class":53},[36,135513,51914],{"class":42},[36,135515,1062],{"class":53},[36,135517,51969],{"class":46},[36,135519,51998],{"class":53},[36,135521,64468],{"class":53},[36,135523,1774],{"class":42},[36,135525,135526,135529,135531,135533],{"class":38,"line":419},[36,135527,135528],{"class":53},"  border-bottom-color",[36,135530,51914],{"class":42},[36,135532,62846],{"class":53},[36,135534,1774],{"class":42},[36,135536,135537],{"class":38,"line":425},[36,135538,2045],{"class":42},[26,135540,135541],{"className":126953,"code":131110,"language":126955,"meta":31,"style":31},[33,135542,135543,135549,135565],{"__ignoreMap":31},[36,135544,135545,135547],{"class":38,"line":39},[36,135546,52088],{"class":51777},[36,135548,16052],{"class":42},[36,135550,135551,135553,135555,135557,135559,135561,135563],{"class":38,"line":66},[36,135552,71373],{"class":53},[36,135554,51914],{"class":42},[36,135556,54],{"class":53},[36,135558,51969],{"class":46},[36,135560,51998],{"class":53},[36,135562,130345],{"class":53},[36,135564,1774],{"class":42},[36,135566,135567],{"class":38,"line":73},[36,135568,2045],{"class":42},[519,135570],{"style":126809,"src":135571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135573,135575],{"id":135574},"_132-css用户界面样式","13.2 css用户界面样式",[596,135577,135579],{"id":135578},"_1321-鼠标样式","13.2.1 鼠标样式",[26,135581,135583],{"className":126953,"code":135582,"language":126955,"meta":31,"style":31},"\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",[33,135584,135585,135590,135609,135627,135646,135663],{"__ignoreMap":31},[36,135586,135587],{"class":38,"line":39},[36,135588,135589],{"class":69},"\u002F* 鼠标样式 *\u002F\n",[36,135591,135592,135594,135596,135599,135601,135603,135606],{"class":38,"line":66},[36,135593,52088],{"class":51777},[36,135595,80284],{"class":42},[36,135597,135598],{"class":53},"cursor",[36,135600,51914],{"class":42},[36,135602,62507],{"class":53},[36,135604,135605],{"class":42},"; }   ",[36,135607,135608],{"class":69},"\u002F* 手型 *\u002F\n",[36,135610,135611,135613,135615,135617,135619,135622,135624],{"class":38,"line":73},[36,135612,52088],{"class":51777},[36,135614,80284],{"class":42},[36,135616,135598],{"class":53},[36,135618,51914],{"class":42},[36,135620,135621],{"class":53},"default",[36,135623,135605],{"class":42},[36,135625,135626],{"class":69},"\u002F* 默认 *\u002F\n",[36,135628,135629,135631,135633,135635,135637,135640,135643],{"class":38,"line":79},[36,135630,52088],{"class":51777},[36,135632,80284],{"class":42},[36,135634,135598],{"class":53},[36,135636,51914],{"class":42},[36,135638,135639],{"class":53},"move",[36,135641,135642],{"class":42},"; }      ",[36,135644,135645],{"class":69},"\u002F* 移动 *\u002F\n",[36,135647,135648,135650,135652,135654,135656,135658,135660],{"class":38,"line":85},[36,135649,52088],{"class":51777},[36,135651,80284],{"class":42},[36,135653,135598],{"class":53},[36,135655,51914],{"class":42},[36,135657,5667],{"class":53},[36,135659,135642],{"class":42},[36,135661,135662],{"class":69},"\u002F* 文本 *\u002F\n",[36,135664,135665,135667,135669,135671,135673,135676,135679],{"class":38,"line":419},[36,135666,52088],{"class":51777},[36,135668,80284],{"class":42},[36,135670,135598],{"class":53},[36,135672,51914],{"class":42},[36,135674,135675],{"class":53},"not-allowed",[36,135677,135678],{"class":42},"; } ",[36,135680,135681],{"class":69},"\u002F* 禁止 *\u002F\n",[758,135683,135684,135692],{},[761,135685,135686],{},[764,135687,135688,135690],{},[767,135689,127417],{"align":24216},[767,135691,27970],{"align":24216},[805,135693,135694,135701,135708,135715,135722],{},[764,135695,135696,135698],{},[810,135697,135621],{"align":24216},[810,135699,135700],{"align":24216},"小白 默认",[764,135702,135703,135705],{},[810,135704,62507],{"align":24216},[810,135706,135707],{"align":24216},"小手",[764,135709,135710,135712],{},[810,135711,135639],{"align":24216},[810,135713,135714],{"align":24216},"移动",[764,135716,135717,135719],{},[810,135718,5667],{"align":24216},[810,135720,135721],{"align":24216},"文本",[764,135723,135724,135726],{},[810,135725,135675],{"align":24216},[810,135727,135728],{"align":24216},"禁止",[596,135730,135732],{"id":135731},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135734,135735],{},"去除表单轮廓线",[19,135737,135738],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,135740,135741],{"className":126953,"code":130317,"language":126955,"meta":31,"style":31},[33,135742,135743,135747,135753,135769],{"__ignoreMap":31},[36,135744,135745],{"class":38,"line":39},[36,135746,130324],{"class":69},[36,135748,135749,135751],{"class":38,"line":66},[36,135750,52088],{"class":51777},[36,135752,16052],{"class":42},[36,135754,135755,135757,135759,135761,135763,135765,135767],{"class":38,"line":73},[36,135756,71373],{"class":53},[36,135758,51914],{"class":42},[36,135760,54],{"class":53},[36,135762,51969],{"class":46},[36,135764,51998],{"class":53},[36,135766,130345],{"class":53},[36,135768,1774],{"class":42},[36,135770,135771],{"class":38,"line":79},[36,135772,2045],{"class":42},[19,135774,135775],{},"文本域：",[519,135777],{"style":126809,"src":135778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135780,135781],{},"此时会有一个空白区域",[519,135783],{"style":126809,"src":135784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135786,135787],{},"写在同一行就不会出现这个问题",[519,135789],{"style":126809,"src":135790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135792,135793],{},"文本域是行内块元素，一定记住！！！",[19,135795,98634],{},[519,135797],{"style":126809,"src":135798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135800,135801],{},"文本域尽量放在一行",[19,135803,135804],{},"知识回顾：cols是列，rols是行",[519,135806],{"style":126809,"src":135807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135809,135810],{},"它可以进行拖动，显然这是我们不愿意看到的",[519,135812],{"style":126809,"src":135813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135815,135816],{},"使用resize进行解决",[26,135818,135820],{"className":126953,"code":135819,"language":126955,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,135821,135822,135828,135841],{"__ignoreMap":31},[36,135823,135824,135826],{"class":38,"line":39},[36,135825,54298],{"class":51777},[36,135827,16052],{"class":42},[36,135829,135830,135832,135834,135836,135838],{"class":38,"line":66},[36,135831,71275],{"class":53},[36,135833,51914],{"class":42},[36,135835,55214],{"class":53},[36,135837,130816],{"class":42},[36,135839,135840],{"class":69},"\u002F* 取消表单轮廓线 *\u002F\n",[36,135842,135843],{"class":38,"line":73},[36,135844,2045],{"class":42},[19,135846,135847],{},"此时就无法通过右下方实现拖动了",[596,135849,135851],{"id":135850},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135853,135854],{},"实现一个盒子中的文字和图片对齐",[19,135856,135857,135858,135861],{},"用于设置一个元素的 ",[770,135859,135860],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135863,135864],{},"图片和文字默认是基线对齐",[519,135866],{"style":126809,"src":135867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,135869,135870],{"className":126953,"code":135819,"language":126955,"meta":31,"style":31},[33,135871,135872,135878,135890],{"__ignoreMap":31},[36,135873,135874,135876],{"class":38,"line":39},[36,135875,54298],{"class":51777},[36,135877,16052],{"class":42},[36,135879,135880,135882,135884,135886,135888],{"class":38,"line":66},[36,135881,71275],{"class":53},[36,135883,51914],{"class":42},[36,135885,55214],{"class":53},[36,135887,130816],{"class":42},[36,135889,135840],{"class":69},[36,135891,135892],{"class":38,"line":73},[36,135893,2045],{"class":42},[519,135895],{"style":126809,"src":135896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22478,135898,135900],{"id":135899},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135902,135903],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[519,135905],{"style":126809,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135908,135909,135910,135913],{},"此时可以给图片、表单这些行内块元素的 ",[770,135911,135912],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22478,135915,135917],{"id":135916},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135919,135920],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135922,15113],{},[26,135924,135926],{"className":126953,"code":135925,"language":126955,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,135927,135928,135933,135939,135951],{"__ignoreMap":31},[36,135929,135930],{"class":38,"line":39},[36,135931,135932],{"class":69},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,135934,135935,135937],{"class":38,"line":66},[36,135936,519],{"class":51777},[36,135938,16052],{"class":42},[36,135940,135941,135944,135946,135949],{"class":38,"line":73},[36,135942,135943],{"class":53},"  vertical-align",[36,135945,51914],{"class":42},[36,135947,135948],{"class":53},"middle",[36,135950,1774],{"class":42},[36,135952,135953],{"class":38,"line":79},[36,135954,2045],{"class":42},[519,135956],{"style":126809,"src":135957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135959,135960],{},"主要解决方法有两种：",[579,135962,135963],{},[582,135964,135965,135968,135969,135972],{},[770,135966,135967],{},"给图片"," 添加 ",[770,135970,135971],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135974,135975,135976],{},"2.把图片转换为块级元素 ",[770,135977,135978],{},"display: block",[19,135980,135981],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135983,135984],{},"img {",[19,135986,135987],{},"vertical-align:middle;",[19,135989,1559],{},[596,135991,135993],{"id":135992},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135995,135996],{},"效果：",[519,135998],{"style":126809,"src":135999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136001,136002],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,136004,136006],{"className":126953,"code":136005,"language":126955,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,136007,136008,136013,136019,136029,136034,136044],{"__ignoreMap":31},[36,136009,136010],{"class":38,"line":39},[36,136011,136012],{"class":69},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,136014,136015,136017],{"class":38,"line":66},[36,136016,519],{"class":51777},[36,136018,16052],{"class":42},[36,136020,136021,136023,136025,136027],{"class":38,"line":73},[36,136022,135943],{"class":53},[36,136024,51914],{"class":42},[36,136026,135948],{"class":53},[36,136028,1774],{"class":42},[36,136030,136031],{"class":38,"line":79},[36,136032,136033],{"class":69},"  \u002F* 或 *\u002F\n",[36,136035,136036,136038,136040,136042],{"class":38,"line":85},[36,136037,128569],{"class":53},[36,136039,51914],{"class":42},[36,136041,61346],{"class":53},[36,136043,1774],{"class":42},[36,136045,136046],{"class":38,"line":419},[36,136047,2045],{"class":42},[596,136049,136051],{"id":136050},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136053,135996],{},[519,136055],{"style":126809,"src":136056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136058,136059,136060,136063],{},"多行文本溢出显示省略号， ",[770,136061,136062],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,136065,136066],{"className":126953,"code":136005,"language":126955,"meta":31,"style":31},[33,136067,136068,136072,136078,136088,136092,136102],{"__ignoreMap":31},[36,136069,136070],{"class":38,"line":39},[36,136071,136012],{"class":69},[36,136073,136074,136076],{"class":38,"line":66},[36,136075,519],{"class":51777},[36,136077,16052],{"class":42},[36,136079,136080,136082,136084,136086],{"class":38,"line":73},[36,136081,135943],{"class":53},[36,136083,51914],{"class":42},[36,136085,135948],{"class":53},[36,136087,1774],{"class":42},[36,136089,136090],{"class":38,"line":79},[36,136091,136033],{"class":69},[36,136093,136094,136096,136098,136100],{"class":38,"line":85},[36,136095,128569],{"class":53},[36,136097,51914],{"class":42},[36,136099,61346],{"class":53},[36,136101,1774],{"class":42},[36,136103,136104],{"class":38,"line":419},[36,136105,2045],{"class":42},[19,136107,136108],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136110,136112],{"id":136111},"_133-常见布局技巧","13.3 常见布局技巧",[19,136114,136115],{},[770,136116,136117],{},"巧妙利用一个技术更快更好的布局：",[579,136119,136120,136123,136126,136129],{},[582,136121,136122],{},"margin负值的运用",[582,136124,136125],{},"文字围绕浮动元素",[582,136127,136128],{},"行内块的巧妙运用",[582,136130,136131],{},"CSS三角强化",[596,136133,136135],{"id":136134},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136137,136138],{},"应用场景：",[519,136140],{"style":126809,"src":136141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[519,136143],{"style":126809,"src":136144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136146,136147],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136149,136150],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,136152,136153],{"className":126953,"code":130317,"language":126955,"meta":31,"style":31},[33,136154,136155,136159,136165,136181],{"__ignoreMap":31},[36,136156,136157],{"class":38,"line":39},[36,136158,130324],{"class":69},[36,136160,136161,136163],{"class":38,"line":66},[36,136162,52088],{"class":51777},[36,136164,16052],{"class":42},[36,136166,136167,136169,136171,136173,136175,136177,136179],{"class":38,"line":73},[36,136168,71373],{"class":53},[36,136170,51914],{"class":42},[36,136172,54],{"class":53},[36,136174,51969],{"class":46},[36,136176,51998],{"class":53},[36,136178,130345],{"class":53},[36,136180,1774],{"class":42},[36,136182,136183],{"class":38,"line":79},[36,136184,2045],{"class":42},[519,136186],{"style":126809,"src":136187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136189,136190],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,136192,136194],{"className":126953,"code":136193,"language":126955,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,136195,136196,136201,136207,136217,136229,136241],{"__ignoreMap":31},[36,136197,136198],{"class":38,"line":39},[36,136199,136200],{"class":69},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,136202,136203,136205],{"class":38,"line":66},[36,136204,130801],{"class":2443},[36,136206,16052],{"class":42},[36,136208,136209,136211,136213,136215],{"class":38,"line":73},[36,136210,132759],{"class":53},[36,136212,51914],{"class":42},[36,136214,55241],{"class":53},[36,136216,1774],{"class":42},[36,136218,136219,136221,136223,136225,136227],{"class":38,"line":79},[36,136220,132773],{"class":53},[36,136222,51914],{"class":42},[36,136224,1062],{"class":53},[36,136226,51969],{"class":46},[36,136228,1774],{"class":42},[36,136230,136231,136233,136235,136237,136239],{"class":38,"line":85},[36,136232,132790],{"class":53},[36,136234,51914],{"class":42},[36,136236,1313],{"class":53},[36,136238,51969],{"class":46},[36,136240,1774],{"class":42},[36,136242,136243],{"class":38,"line":419},[36,136244,2045],{"class":42},[19,136246,136247],{},"加上上述代码会发现：",[519,136249],{"style":126809,"src":136250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136252,136253],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136255,136256],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,136258,136259],{"className":126953,"code":136193,"language":126955,"meta":31,"style":31},[33,136260,136261,136265,136271,136281,136293,136305],{"__ignoreMap":31},[36,136262,136263],{"class":38,"line":39},[36,136264,136200],{"class":69},[36,136266,136267,136269],{"class":38,"line":66},[36,136268,130801],{"class":2443},[36,136270,16052],{"class":42},[36,136272,136273,136275,136277,136279],{"class":38,"line":73},[36,136274,132759],{"class":53},[36,136276,51914],{"class":42},[36,136278,55241],{"class":53},[36,136280,1774],{"class":42},[36,136282,136283,136285,136287,136289,136291],{"class":38,"line":79},[36,136284,132773],{"class":53},[36,136286,51914],{"class":42},[36,136288,1062],{"class":53},[36,136290,51969],{"class":46},[36,136292,1774],{"class":42},[36,136294,136295,136297,136299,136301,136303],{"class":38,"line":85},[36,136296,132790],{"class":53},[36,136298,51914],{"class":42},[36,136300,1313],{"class":53},[36,136302,51969],{"class":46},[36,136304,1774],{"class":42},[36,136306,136307],{"class":38,"line":419},[36,136308,2045],{"class":42},[19,136310,136311],{},"解决方式2：",[19,136313,136314],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,136316,136318],{"className":126953,"code":136317,"language":126955,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,136319,136320,136326,136336,136348,136360],{"__ignoreMap":31},[36,136321,136322,136324],{"class":38,"line":39},[36,136323,52088],{"class":51777},[36,136325,16052],{"class":42},[36,136327,136328,136330,136332,136334],{"class":38,"line":66},[36,136329,132759],{"class":53},[36,136331,51914],{"class":42},[36,136333,55241],{"class":53},[36,136335,1774],{"class":42},[36,136337,136338,136340,136342,136344,136346],{"class":38,"line":73},[36,136339,132773],{"class":53},[36,136341,51914],{"class":42},[36,136343,1062],{"class":53},[36,136345,51969],{"class":46},[36,136347,1774],{"class":42},[36,136349,136350,136352,136354,136356,136358],{"class":38,"line":79},[36,136351,132790],{"class":53},[36,136353,51914],{"class":42},[36,136355,1313],{"class":53},[36,136357,51969],{"class":46},[36,136359,1774],{"class":42},[36,136361,136362],{"class":38,"line":85},[36,136363,2045],{"class":42},[596,136365,136367],{"id":136366},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136369,136138],{},[519,136371],{"style":126809,"src":136372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136374,136375],{},"实现结构图：",[519,136377],{"style":126809,"src":136378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136380,136381],{},"巧妙运用浮动元素不会压住文字的特性",[19,136383,136384],{},"代码显示：",[26,136386,136388],{"className":126953,"code":136387,"language":126955,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,136389,136390,136396,136406,136410,136415,136419,136425,136439],{"__ignoreMap":31},[36,136391,136392,136394],{"class":38,"line":39},[36,136393,130801],{"class":2443},[36,136395,16052],{"class":42},[36,136397,136398,136400,136402,136404],{"class":38,"line":66},[36,136399,131433],{"class":53},[36,136401,51914],{"class":42},[36,136403,24216],{"class":53},[36,136405,1774],{"class":42},[36,136407,136408],{"class":38,"line":73},[36,136409,2045],{"class":42},[36,136411,136412],{"class":38,"line":79},[36,136413,136414],{"class":42},"```Css\n",[36,136416,136417],{"class":38,"line":85},[36,136418,130796],{"class":69},[36,136420,136421,136423],{"class":38,"line":419},[36,136422,130801],{"class":2443},[36,136424,16052],{"class":42},[36,136426,136427,136429,136431,136433,136435,136437],{"class":38,"line":425},[36,136428,70947],{"class":53},[36,136430,51914],{"class":42},[36,136432,812],{"class":53},[36,136434,52033],{"class":53},[36,136436,130816],{"class":42},[36,136438,130819],{"class":69},[36,136440,136441],{"class":38,"line":431},[36,136442,2045],{"class":42},[19,136444,136445],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,136447,136450],{"className":136448,"code":136449,"language":5667},[5665],"\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",[33,136451,136449],{"__ignoreMap":31},[519,136453],{"style":126809,"src":136454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136456,136457],{},"最终展示结果：",[26,136459,136460],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},[33,136461,136462,136466,136472,136486],{"__ignoreMap":31},[36,136463,136464],{"class":38,"line":39},[36,136465,130796],{"class":69},[36,136467,136468,136470],{"class":38,"line":66},[36,136469,130801],{"class":2443},[36,136471,16052],{"class":42},[36,136473,136474,136476,136478,136480,136482,136484],{"class":38,"line":73},[36,136475,70947],{"class":53},[36,136477,51914],{"class":42},[36,136479,812],{"class":53},[36,136481,52033],{"class":53},[36,136483,130816],{"class":42},[36,136485,130819],{"class":69},[36,136487,136488],{"class":38,"line":79},[36,136489,2045],{"class":42},[519,136491],{"style":126809,"src":136492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136494,136496],{"id":136495},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[596,136498,136500],{"id":136499},"_1341-原理","13.4.1 原理",[519,136502],{"style":126809,"src":136503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,136505,136506],{"className":126953,"code":130789,"language":126955,"meta":31,"style":31},[33,136507,136508,136512,136518,136532],{"__ignoreMap":31},[36,136509,136510],{"class":38,"line":39},[36,136511,130796],{"class":69},[36,136513,136514,136516],{"class":38,"line":66},[36,136515,130801],{"class":2443},[36,136517,16052],{"class":42},[36,136519,136520,136522,136524,136526,136528,136530],{"class":38,"line":73},[36,136521,70947],{"class":53},[36,136523,51914],{"class":42},[36,136525,812],{"class":53},[36,136527,52033],{"class":53},[36,136529,130816],{"class":42},[36,136531,130819],{"class":69},[36,136533,136534],{"class":38,"line":79},[36,136535,2045],{"class":42},[596,136537,136539],{"id":136538},"_1342-实例","13.4.2 实例",[519,136541],{"style":126809,"src":136542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,136544,136545],{"className":126953,"code":131419,"language":126955,"meta":31,"style":31},[33,136546,136547,136553,136563,136567,136573,136583],{"__ignoreMap":31},[36,136548,136549,136551],{"class":38,"line":39},[36,136550,131426],{"class":2443},[36,136552,16052],{"class":42},[36,136554,136555,136557,136559,136561],{"class":38,"line":66},[36,136556,131433],{"class":53},[36,136558,51914],{"class":42},[36,136560,24216],{"class":53},[36,136562,1774],{"class":42},[36,136564,136565],{"class":38,"line":73},[36,136566,2045],{"class":42},[36,136568,136569,136571],{"class":38,"line":79},[36,136570,131448],{"class":2443},[36,136572,16052],{"class":42},[36,136574,136575,136577,136579,136581],{"class":38,"line":85},[36,136576,131433],{"class":53},[36,136578,51914],{"class":42},[36,136580,72999],{"class":53},[36,136582,1774],{"class":42},[36,136584,136585],{"class":38,"line":419},[36,136586,2045],{"class":42},[14,136588,136590],{"id":136589},"_135-css的初始化","13.5 css的初始化",[19,136592,136593],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136595,136596],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136598,136599],{},"每个网页都必须首先进行 CSS初始化。",[19,136601,136602],{},"这里我们以 京东CSS初始化代码为例。",[19,136604,136605],{},"在网页右键查看网页源代码",[19,136607,136608],{},"找到css的link引入语句",[19,136610,136611],{},"然后ctrl+f 输入body",[19,136613,77703],{},[519,136615],{"style":126809,"src":136616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136618,77726],{},[519,136620],{"style":126809,"src":136621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136623,136624],{},"③打开了网页上传压缩的代码",[519,136626],{"style":126809,"src":136627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136629,136630],{},"④从body前可以查看这个网页的初始化代码",[19,136632,136633],{},[770,136634,136635],{},"Unicode编码字体：",[19,136637,136638],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136640,83684],{},[19,136642,136643],{},"黑体 \\9ED1\\4F53",[19,136645,136646],{},"宋体 \\5B8B\\4F53",[19,136648,136649],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[539,136651,136652],{},"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":31,"searchDepth":66,"depth":66,"links":136654},[136655,136656,136663,136667,136671],{"id":135452,"depth":66,"text":135453},{"id":135574,"depth":66,"text":135575,"children":136657},[136658,136659,136660,136661,136662],{"id":135578,"depth":73,"text":135579},{"id":135731,"depth":73,"text":135732},{"id":135850,"depth":73,"text":135851},{"id":135992,"depth":73,"text":135993},{"id":136050,"depth":73,"text":136051},{"id":136111,"depth":66,"text":136112,"children":136664},[136665,136666],{"id":136134,"depth":73,"text":136135},{"id":136366,"depth":73,"text":136367},{"id":136495,"depth":66,"text":136496,"children":136668},[136669,136670],{"id":136499,"depth":73,"text":136500},{"id":136538,"depth":73,"text":136539},{"id":136589,"depth":66,"text":136590},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135444,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136678,"title":136679,"body":136680,"description":550,"extension":551,"meta":138366,"navigation":553,"path":138367,"seo":138368,"stem":138369,"__hash__":138370},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136681,"toc":138355},[136682,136685,136689,136693,136696,136703,136706,136709,136747,136750,136752,136766,136770,136779,136783,136788,136791,136794,136797,136832,136837,136840,136870,136873,136878,136881,136884,136914,136917,136971,136974,136978,136983,136995,136998,137002,137032,137035,137040,137043,137073,137076,137080,137097,137101,137105,137108,137141,137144,137148,137151,137154,137157,137160,137163,137274,137277,137280,137283,137385,137388,137392,137396,137400,137403,137443,137446,137448,137464,137468,137471,137476,137557,137560,137563,137689,137694,137697,137705,137708,137713,137798,137801,137805,137808,137811,137815,137835,137840,137924,137927,137932,137935,137938,138016,138019,138022,138025,138028,138031,138036,138039,138042,138114,138117,138122,138125,138222,138225,138231,138234,138237,138240,138243,138246,138249,138252,138255,138259,138264,138267,138300,138305,138308,138349,138352],[10,136683,136679],{"id":136684},"_14-html5与css3新特性",[14,136686,136688],{"id":136687},"_141-html5的新特性","14.1 HTML5的新特性",[596,136690,136692],{"id":136691},"_1411-基本标签","14.1.1 基本标签",[19,136694,136695],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136697,136698,136699,136702],{},"这些新特性都有兼容性问题，基本是 ",[770,136700,136701],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136704,136705],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136707,136708],{},"现在使用的是新特性：",[1620,136710,136711,136717,136723,136729,136735,136741],{},[582,136712,136713,136716],{},[33,136714,136715],{},"\u003Cheader>"," 头部标签",[582,136718,136719,136722],{},[33,136720,136721],{},"\u003Cnav>"," 导航标签",[582,136724,136725,136728],{},[33,136726,136727],{},"\u003Carticle>"," 内容标签",[582,136730,136731,136734],{},[33,136732,136733],{},"\u003Csection>"," 定义文档某个区域",[582,136736,136737,136740],{},[33,136738,136739],{},"\u003Caside>"," 侧边栏标签",[582,136742,136743,136746],{},[33,136744,136745],{},"\u003Cfooter>"," 尾部标签",[519,136748],{"style":126809,"src":136749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136751,656],{},[1620,136753,136754,136757,136760,136763],{},[582,136755,136756],{},"这种语义化标准主要是针对搜索引擎的",[582,136758,136759],{},"这些标签页面中可以经常使用",[582,136761,136762],{},"在IE9中，需要把这些元素转换为块级元素",[582,136764,136765],{},"移动端更喜欢使用这些标签",[596,136767,136769],{"id":136768},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136771,136772,136773,136775,136776,136778],{},"音频 ",[770,136774,28655],{}," 和视频 ",[770,136777,28664],{}," 两个标签",[22478,136780,136782],{"id":136781},"_14121-视频标签-video","14.1.2.1 视频标签- video",[579,136784,136785],{},[582,136786,136787],{},"支持格式：",[519,136789],{"style":126809,"src":136790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136792,136793],{},"尽量使用MP4，兼容性好",[19,136795,136796],{},"用MP4就可以",[26,136798,136800],{"className":127700,"code":136799,"language":127702,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,136801,136802],{"__ignoreMap":31},[36,136803,136804,136806,136808,136810,136812,136815,136817,136820,136823,136826,136828,136830],{"class":38,"line":39},[36,136805,1523],{"class":42},[36,136807,28664],{"class":51777},[36,136809,55716],{"class":2443},[36,136811,47],{"class":42},[36,136813,136814],{"class":405},"\"movie.mp4\"",[36,136816,92900],{"class":2443},[36,136818,136819],{"class":2443}," autoplay",[36,136821,136822],{"class":2443}," muted",[36,136824,136825],{"class":2443}," loop",[36,136827,55791],{"class":42},[36,136829,28664],{"class":51777},[36,136831,51784],{"class":42},[579,136833,136834],{"start":66},[582,136835,136836],{},"兼容写法",[19,136838,136839],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,136841,136842],{"className":127700,"code":136799,"language":127702,"meta":31,"style":31},[33,136843,136844],{"__ignoreMap":31},[36,136845,136846,136848,136850,136852,136854,136856,136858,136860,136862,136864,136866,136868],{"class":38,"line":39},[36,136847,1523],{"class":42},[36,136849,28664],{"class":51777},[36,136851,55716],{"class":2443},[36,136853,47],{"class":42},[36,136855,136814],{"class":405},[36,136857,92900],{"class":2443},[36,136859,136819],{"class":2443},[36,136861,136822],{"class":2443},[36,136863,136825],{"class":2443},[36,136865,55791],{"class":42},[36,136867,28664],{"class":51777},[36,136869,51784],{"class":42},[19,136871,136872],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[579,136874,136875],{"start":73},[582,136876,136877],{},"video常用属性",[519,136879],{"style":126809,"src":136880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136882,136883],{},"poster属性后面是跟的等待加载图片的地址",[26,136885,136886],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,136887,136888],{"__ignoreMap":31},[36,136889,136890,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912],{"class":38,"line":39},[36,136891,1523],{"class":42},[36,136893,519],{"class":51777},[36,136895,55716],{"class":2443},[36,136897,47],{"class":42},[36,136899,134470],{"class":405},[36,136901,55724],{"class":2443},[36,136903,47],{"class":42},[36,136905,134477],{"class":405},[36,136907,134480],{"class":2443},[36,136909,47],{"class":42},[36,136911,134485],{"class":405},[36,136913,51784],{"class":42},[19,136915,136916],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,136918,136920],{"className":126953,"code":136919,"language":126955,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[33,136921,136922,136927,136933,136957,136962,136967],{"__ignoreMap":31},[36,136923,136924],{"class":38,"line":39},[36,136925,136926],{"class":69},"\u002F* 2D 位移 *\u002F\n",[36,136928,136929,136931],{"class":38,"line":66},[36,136930,52088],{"class":51777},[36,136932,16052],{"class":42},[36,136934,136935,136938,136940,136943,136945,136947,136949,136951,136953,136955],{"class":38,"line":73},[36,136936,136937],{"class":53},"  transform",[36,136939,51914],{"class":42},[36,136941,136942],{"class":53},"translate",[36,136944,345],{"class":42},[36,136946,930],{"class":53},[36,136948,51969],{"class":46},[36,136950,12915],{"class":42},[36,136952,1269],{"class":53},[36,136954,51969],{"class":46},[36,136956,3199],{"class":42},[36,136958,136959],{"class":38,"line":79},[36,136960,136961],{"class":69},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,136963,136964],{"class":38,"line":85},[36,136965,136966],{"class":69},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,136968,136969],{"class":38,"line":419},[36,136970,2045],{"class":42},[19,136972,136973],{},"muted:自动静音属性",[22478,136975,136977],{"id":136976},"_14122-音频标签audio","14.1.2.2 音频标签audio",[579,136979,136980],{},[582,136981,136982],{},"基本使用",[19,136984,136985,136986,136991,136992],{},"当前 ",[770,136987,136988],{},[33,136989,136990],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[770,136993,136994],{},"mp3格式",[519,136996],{"style":126809,"src":136997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[579,136999,137000],{"start":66},[582,137001,136836],{},[26,137003,137004],{"className":127700,"code":136799,"language":127702,"meta":31,"style":31},[33,137005,137006],{"__ignoreMap":31},[36,137007,137008,137010,137012,137014,137016,137018,137020,137022,137024,137026,137028,137030],{"class":38,"line":39},[36,137009,1523],{"class":42},[36,137011,28664],{"class":51777},[36,137013,55716],{"class":2443},[36,137015,47],{"class":42},[36,137017,136814],{"class":405},[36,137019,92900],{"class":2443},[36,137021,136819],{"class":2443},[36,137023,136822],{"class":2443},[36,137025,136825],{"class":2443},[36,137027,55791],{"class":42},[36,137029,28664],{"class":51777},[36,137031,51784],{"class":42},[19,137033,137034],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[579,137036,137037],{"start":73},[582,137038,137039],{},"常用属性",[519,137041],{"style":126809,"src":137042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,137044,137045],{"className":127700,"code":136799,"language":127702,"meta":31,"style":31},[33,137046,137047],{"__ignoreMap":31},[36,137048,137049,137051,137053,137055,137057,137059,137061,137063,137065,137067,137069,137071],{"class":38,"line":39},[36,137050,1523],{"class":42},[36,137052,28664],{"class":51777},[36,137054,55716],{"class":2443},[36,137056,47],{"class":42},[36,137058,136814],{"class":405},[36,137060,92900],{"class":2443},[36,137062,136819],{"class":2443},[36,137064,136822],{"class":2443},[36,137066,136825],{"class":2443},[36,137068,55791],{"class":42},[36,137070,28664],{"class":51777},[36,137072,51784],{"class":42},[19,137074,137075],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22478,137077,137079],{"id":137078},"_14123-总结","14.1.2.3 总结",[1620,137081,137082,137085,137088,137091,137094],{},[582,137083,137084],{},"音频标签和视频标签使用方式基本一致",[582,137086,137087],{},"浏览器支持情况不同",[582,137089,137090],{},"谷歌浏览器把音频和视频自动播放禁止了",[582,137092,137093],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[582,137095,137096],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[596,137098,137100],{"id":137099},"_1413-表单元素","14.1.3 表单元素",[22478,137102,137104],{"id":137103},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[519,137106],{"style":126809,"src":137107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,137109,137111],{"className":127700,"code":137110,"language":127702,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,137112,137113],{"__ignoreMap":31},[36,137114,137115,137117,137119,137121,137123,137125,137127,137129,137132,137134,137136,137139],{"class":38,"line":39},[36,137116,1523],{"class":42},[36,137118,54298],{"class":51777},[36,137120,54301],{"class":2443},[36,137122,47],{"class":42},[36,137124,63176],{"class":405},[36,137126,15400],{"class":2443},[36,137128,47],{"class":42},[36,137130,137131],{"class":405},"\"username\"",[36,137133,61497],{"class":2443},[36,137135,47],{"class":42},[36,137137,137138],{"class":405},"\"请输入用户名\"",[36,137140,51784],{"class":42},[519,137142],{"style":126809,"src":137143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22478,137145,137147],{"id":137146},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[519,137149],{"style":126809,"src":137150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137152,137153],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137155,137156],{},"快捷操作：",[519,137158],{"style":126809,"src":137159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137161,137162],{},"例子1：",[26,137164,137166],{"className":127700,"code":137165,"language":127702,"meta":31,"style":31},"\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",[33,137167,137168,137191,137218,137247,137266],{"__ignoreMap":31},[36,137169,137170,137172,137174,137176,137178,137181,137184,137186,137189],{"class":38,"line":39},[36,137171,1523],{"class":42},[36,137173,67102],{"class":51777},[36,137175,67105],{"class":2443},[36,137177,47],{"class":42},[36,137179,137180],{"class":405},"\"\u002Fsubmit\"",[36,137182,137183],{"class":2443}," method",[36,137185,47],{"class":42},[36,137187,137188],{"class":405},"\"post\"",[36,137190,51784],{"class":42},[36,137192,137193,137195,137197,137199,137201,137203,137205,137207,137209,137211,137213,137216],{"class":38,"line":66},[36,137194,52621],{"class":42},[36,137196,54298],{"class":51777},[36,137198,54301],{"class":2443},[36,137200,47],{"class":42},[36,137202,63176],{"class":405},[36,137204,15400],{"class":2443},[36,137206,47],{"class":42},[36,137208,137131],{"class":405},[36,137210,61497],{"class":2443},[36,137212,47],{"class":42},[36,137214,137215],{"class":405},"\"用户名\"",[36,137217,51784],{"class":42},[36,137219,137220,137222,137224,137226,137228,137231,137233,137235,137238,137240,137242,137245],{"class":38,"line":73},[36,137221,52621],{"class":42},[36,137223,54298],{"class":51777},[36,137225,54301],{"class":2443},[36,137227,47],{"class":42},[36,137229,137230],{"class":405},"\"password\"",[36,137232,15400],{"class":2443},[36,137234,47],{"class":42},[36,137236,137237],{"class":405},"\"pwd\"",[36,137239,61497],{"class":2443},[36,137241,47],{"class":42},[36,137243,137244],{"class":405},"\"密码\"",[36,137246,51784],{"class":42},[36,137248,137249,137251,137253,137255,137257,137259,137262,137264],{"class":38,"line":79},[36,137250,52621],{"class":42},[36,137252,54364],{"class":51777},[36,137254,54301],{"class":2443},[36,137256,47],{"class":42},[36,137258,67125],{"class":405},[36,137260,137261],{"class":42},">提交\u003C\u002F",[36,137263,54364],{"class":51777},[36,137265,51784],{"class":42},[36,137267,137268,137270,137272],{"class":38,"line":85},[36,137269,52262],{"class":42},[36,137271,67102],{"class":51777},[36,137273,51784],{"class":42},[519,137275],{"style":126809,"src":137276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137278,137279],{},"value是表单域的内容",[19,137281,137282],{},"例子2：",[26,137284,137285],{"className":127700,"code":137165,"language":127702,"meta":31,"style":31},[33,137286,137287,137307,137333,137359,137377],{"__ignoreMap":31},[36,137288,137289,137291,137293,137295,137297,137299,137301,137303,137305],{"class":38,"line":39},[36,137290,1523],{"class":42},[36,137292,67102],{"class":51777},[36,137294,67105],{"class":2443},[36,137296,47],{"class":42},[36,137298,137180],{"class":405},[36,137300,137183],{"class":2443},[36,137302,47],{"class":42},[36,137304,137188],{"class":405},[36,137306,51784],{"class":42},[36,137308,137309,137311,137313,137315,137317,137319,137321,137323,137325,137327,137329,137331],{"class":38,"line":66},[36,137310,52621],{"class":42},[36,137312,54298],{"class":51777},[36,137314,54301],{"class":2443},[36,137316,47],{"class":42},[36,137318,63176],{"class":405},[36,137320,15400],{"class":2443},[36,137322,47],{"class":42},[36,137324,137131],{"class":405},[36,137326,61497],{"class":2443},[36,137328,47],{"class":42},[36,137330,137215],{"class":405},[36,137332,51784],{"class":42},[36,137334,137335,137337,137339,137341,137343,137345,137347,137349,137351,137353,137355,137357],{"class":38,"line":73},[36,137336,52621],{"class":42},[36,137338,54298],{"class":51777},[36,137340,54301],{"class":2443},[36,137342,47],{"class":42},[36,137344,137230],{"class":405},[36,137346,15400],{"class":2443},[36,137348,47],{"class":42},[36,137350,137237],{"class":405},[36,137352,61497],{"class":2443},[36,137354,47],{"class":42},[36,137356,137244],{"class":405},[36,137358,51784],{"class":42},[36,137360,137361,137363,137365,137367,137369,137371,137373,137375],{"class":38,"line":79},[36,137362,52621],{"class":42},[36,137364,54364],{"class":51777},[36,137366,54301],{"class":2443},[36,137368,47],{"class":42},[36,137370,67125],{"class":405},[36,137372,137261],{"class":42},[36,137374,54364],{"class":51777},[36,137376,51784],{"class":42},[36,137378,137379,137381,137383],{"class":38,"line":85},[36,137380,52262],{"class":42},[36,137382,67102],{"class":51777},[36,137384,51784],{"class":42},[519,137386],{"style":126809,"src":137387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137389,137391],{"id":137390},"_142-css新特性","14.2 CSS新特性",[596,137393,137395],{"id":137394},"_1421-新增选择器","14.2.1 新增选择器",[22478,137397,137399],{"id":137398},"_14211-属性选择器","14.2.1.1 属性选择器",[519,137401],{"style":126809,"src":137402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,137404,137406],{"className":126953,"code":137405,"language":126955,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,137407,137408,137423,137439],{"__ignoreMap":31},[36,137409,137410,137412,137414,137416,137418,137420],{"class":38,"line":39},[36,137411,54298],{"class":51777},[36,137413,1503],{"class":42},[36,137415,103508],{"class":2443},[36,137417,47],{"class":46},[36,137419,63176],{"class":405},[36,137421,137422],{"class":42},"] {\n",[36,137424,137425,137427,137429,137431,137433,137435,137437],{"class":38,"line":66},[36,137426,71373],{"class":53},[36,137428,51914],{"class":42},[36,137430,54],{"class":53},[36,137432,51969],{"class":46},[36,137434,51998],{"class":53},[36,137436,130533],{"class":53},[36,137438,1774],{"class":42},[36,137440,137441],{"class":38,"line":73},[36,137442,2045],{"class":42},[519,137444],{"style":126809,"src":137445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137447,656],{},[1620,137449,137450,137453,137456,137459],{},[582,137451,137452],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[582,137454,137455],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[582,137457,137458],{},"属性选择器也可以选择出来自定义的属性",[582,137460,137461,137463],{},[770,137462,9505],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22478,137465,137467],{"id":137466},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[519,137469],{"style":126809,"src":137470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[579,137472,137473],{},[582,137474,137475],{},"fist-child",[26,137477,137479],{"className":126953,"code":137478,"language":126955,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[33,137480,137481,137486,137501,137521,137539],{"__ignoreMap":31},[36,137482,137483],{"class":38,"line":39},[36,137484,137485],{"class":69},"\u002F* 属性选择器 *\u002F\n",[36,137487,137488,137490,137492,137494,137496,137498],{"class":38,"line":66},[36,137489,54298],{"class":51777},[36,137491,1503],{"class":42},[36,137493,103508],{"class":2443},[36,137495,47],{"class":46},[36,137497,63176],{"class":405},[36,137499,137500],{"class":42},"] { }\n",[36,137502,137503,137505,137507,137509,137512,137515,137518],{"class":38,"line":73},[36,137504,54298],{"class":51777},[36,137506,1503],{"class":42},[36,137508,15174],{"class":2443},[36,137510,137511],{"class":46},"^=",[36,137513,137514],{"class":405},"\"icon\"",[36,137516,137517],{"class":42},"] { }  ",[36,137519,137520],{"class":69},"\u002F* 以 icon 开头 *\u002F\n",[36,137522,137523,137525,137527,137529,137532,137534,137536],{"class":38,"line":79},[36,137524,54298],{"class":51777},[36,137526,1503],{"class":42},[36,137528,15174],{"class":2443},[36,137530,137531],{"class":46},"$=",[36,137533,137514],{"class":405},[36,137535,137517],{"class":42},[36,137537,137538],{"class":69},"\u002F* 以 icon 结尾 *\u002F\n",[36,137540,137541,137543,137545,137547,137550,137552,137554],{"class":38,"line":85},[36,137542,54298],{"class":51777},[36,137544,1503],{"class":42},[36,137546,15174],{"class":2443},[36,137548,137549],{"class":46},"*=",[36,137551,137514],{"class":405},[36,137553,137517],{"class":42},[36,137555,137556],{"class":69},"\u002F* 包含 icon *\u002F\n",[19,137558,137559],{},"ul的第一个儿子文本为红色",[19,137561,137562],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,137564,137566],{"className":126953,"code":137565,"language":126955,"meta":31,"style":31},".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",[33,137567,137568,137574,137584,137588,137592,137597,137610,137623,137639,137656,137673],{"__ignoreMap":31},[36,137569,137570,137572],{"class":38,"line":39},[36,137571,127244],{"class":2443},[36,137573,16052],{"class":42},[36,137575,137576,137578,137580,137582],{"class":38,"line":66},[36,137577,71382],{"class":53},[36,137579,51914],{"class":42},[36,137581,57898],{"class":53},[36,137583,1774],{"class":42},[36,137585,137586],{"class":38,"line":73},[36,137587,2045],{"class":42},[36,137589,137590],{"class":38,"line":79},[36,137591,136414],{"class":42},[36,137593,137594],{"class":38,"line":85},[36,137595,137596],{"class":69},"\u002F* 结构伪类选择器 *\u002F\n",[36,137598,137599,137601,137604,137607],{"class":38,"line":419},[36,137600,582],{"class":51777},[36,137602,137603],{"class":2443},":first-child",[36,137605,137606],{"class":42}," { }           ",[36,137608,137609],{"class":69},"\u002F* 第一个 *\u002F\n",[36,137611,137612,137614,137617,137620],{"class":38,"line":425},[36,137613,582],{"class":51777},[36,137615,137616],{"class":2443},":last-child",[36,137618,137619],{"class":42}," { }            ",[36,137621,137622],{"class":69},"\u002F* 最后一个 *\u002F\n",[36,137624,137625,137627,137629,137631,137633,137636],{"class":38,"line":431},[36,137626,582],{"class":51777},[36,137628,129867],{"class":2443},[36,137630,345],{"class":42},[36,137632,96],{"class":53},[36,137634,137635],{"class":42},") { }          ",[36,137637,137638],{"class":69},"\u002F* 第2个 *\u002F\n",[36,137640,137641,137643,137645,137647,137650,137653],{"class":38,"line":437},[36,137642,582],{"class":51777},[36,137644,129867],{"class":2443},[36,137646,345],{"class":42},[36,137648,137649],{"class":53},"2n",[36,137651,137652],{"class":42},") { }         ",[36,137654,137655],{"class":69},"\u002F* 偶数 *\u002F\n",[36,137657,137658,137660,137662,137664,137667,137670],{"class":38,"line":443},[36,137659,582],{"class":51777},[36,137661,129867],{"class":2443},[36,137663,345],{"class":42},[36,137665,137666],{"class":53},"2n+1",[36,137668,137669],{"class":42},") { }       ",[36,137671,137672],{"class":69},"\u002F* 奇数 *\u002F\n",[36,137674,137675,137677,137679,137681,137684,137686],{"class":38,"line":2092},[36,137676,582],{"class":51777},[36,137678,129867],{"class":2443},[36,137680,345],{"class":42},[36,137682,137683],{"class":53},"-n+3",[36,137685,137669],{"class":42},[36,137687,137688],{"class":69},"\u002F* 前3个 *\u002F\n",[52088,137690,137693],{"className":137691},[137692],"example","\n  示例内容\n",[19,137695,137696],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1620,137698,137699],{},[582,137700,137701,137704],{},[33,137702,137703],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137706,137707],{},"也就是说它选择的是熊大",[579,137709,137710],{"start":419},[582,137711,137712],{},"权重",[26,137714,137716],{"className":126953,"code":137715,"language":126955,"meta":31,"style":31},"\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",[33,137717,137718,137722,137732,137742,137756,137770,137784],{"__ignoreMap":31},[36,137719,137720],{"class":38,"line":39},[36,137721,137596],{"class":69},[36,137723,137724,137726,137728,137730],{"class":38,"line":66},[36,137725,582],{"class":51777},[36,137727,137603],{"class":2443},[36,137729,137606],{"class":42},[36,137731,137609],{"class":69},[36,137733,137734,137736,137738,137740],{"class":38,"line":73},[36,137735,582],{"class":51777},[36,137737,137616],{"class":2443},[36,137739,137619],{"class":42},[36,137741,137622],{"class":69},[36,137743,137744,137746,137748,137750,137752,137754],{"class":38,"line":79},[36,137745,582],{"class":51777},[36,137747,129867],{"class":2443},[36,137749,345],{"class":42},[36,137751,96],{"class":53},[36,137753,137635],{"class":42},[36,137755,137638],{"class":69},[36,137757,137758,137760,137762,137764,137766,137768],{"class":38,"line":85},[36,137759,582],{"class":51777},[36,137761,129867],{"class":2443},[36,137763,345],{"class":42},[36,137765,137649],{"class":53},[36,137767,137652],{"class":42},[36,137769,137655],{"class":69},[36,137771,137772,137774,137776,137778,137780,137782],{"class":38,"line":419},[36,137773,582],{"class":51777},[36,137775,129867],{"class":2443},[36,137777,345],{"class":42},[36,137779,137666],{"class":53},[36,137781,137669],{"class":42},[36,137783,137672],{"class":69},[36,137785,137786,137788,137790,137792,137794,137796],{"class":38,"line":425},[36,137787,582],{"class":51777},[36,137789,129867],{"class":2443},[36,137791,345],{"class":42},[36,137793,137683],{"class":53},[36,137795,137669],{"class":42},[36,137797,137688],{"class":69},[19,137799,137800],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22478,137802,137804],{"id":137803},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137806,137807],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[519,137809],{"style":126809,"src":137810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[579,137812,137813],{},[582,137814,656],{},[1620,137816,137817,137820,137823,137826,137829,137832],{},[582,137818,137819],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[582,137821,137822],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[582,137824,137825],{},"语法： element::before {}",[582,137827,137828],{},"before 和 after 必须有 content 属性",[582,137830,137831],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[582,137833,137834],{},"伪元素选择器和标签选择器一样，权重为 1",[579,137836,137837],{"start":66},[582,137838,137839],{},"实例",[26,137841,137842],{"className":126953,"code":137715,"language":126955,"meta":31,"style":31},[33,137843,137844,137848,137858,137868,137882,137896,137910],{"__ignoreMap":31},[36,137845,137846],{"class":38,"line":39},[36,137847,137596],{"class":69},[36,137849,137850,137852,137854,137856],{"class":38,"line":66},[36,137851,582],{"class":51777},[36,137853,137603],{"class":2443},[36,137855,137606],{"class":42},[36,137857,137609],{"class":69},[36,137859,137860,137862,137864,137866],{"class":38,"line":73},[36,137861,582],{"class":51777},[36,137863,137616],{"class":2443},[36,137865,137619],{"class":42},[36,137867,137622],{"class":69},[36,137869,137870,137872,137874,137876,137878,137880],{"class":38,"line":79},[36,137871,582],{"class":51777},[36,137873,129867],{"class":2443},[36,137875,345],{"class":42},[36,137877,96],{"class":53},[36,137879,137635],{"class":42},[36,137881,137638],{"class":69},[36,137883,137884,137886,137888,137890,137892,137894],{"class":38,"line":85},[36,137885,582],{"class":51777},[36,137887,129867],{"class":2443},[36,137889,345],{"class":42},[36,137891,137649],{"class":53},[36,137893,137652],{"class":42},[36,137895,137655],{"class":69},[36,137897,137898,137900,137902,137904,137906,137908],{"class":38,"line":419},[36,137899,582],{"class":51777},[36,137901,129867],{"class":2443},[36,137903,345],{"class":42},[36,137905,137666],{"class":53},[36,137907,137669],{"class":42},[36,137909,137672],{"class":69},[36,137911,137912,137914,137916,137918,137920,137922],{"class":38,"line":425},[36,137913,582],{"class":51777},[36,137915,129867],{"class":2443},[36,137917,345],{"class":42},[36,137919,137683],{"class":53},[36,137921,137669],{"class":42},[36,137923,137688],{"class":69},[519,137925],{"style":126809,"src":137926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[579,137928,137929],{"start":73},[582,137930,137931],{},"使用场景1",[519,137933],{"style":126809,"src":137934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137936,137937],{},"不需要再加盒子来整红色那部分了",[26,137939,137941],{"className":126953,"code":137940,"language":126955,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,137942,137943,137948,137957,137968,137978,137982,137991,138002,138012],{"__ignoreMap":31},[36,137944,137945],{"class":38,"line":39},[36,137946,137947],{"class":69},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,137949,137950,137952,137955],{"class":38,"line":66},[36,137951,52088],{"class":51777},[36,137953,137954],{"class":2443},"::before",[36,137956,16052],{"class":42},[36,137958,137959,137962,137964,137966],{"class":38,"line":73},[36,137960,137961],{"class":53},"  content",[36,137963,51914],{"class":42},[36,137965,8132],{"class":405},[36,137967,1774],{"class":42},[36,137969,137970,137972,137974,137976],{"class":38,"line":79},[36,137971,128569],{"class":53},[36,137973,51914],{"class":42},[36,137975,61346],{"class":53},[36,137977,1774],{"class":42},[36,137979,137980],{"class":38,"line":85},[36,137981,2045],{"class":42},[36,137983,137984,137986,137989],{"class":38,"line":419},[36,137985,52088],{"class":51777},[36,137987,137988],{"class":2443},"::after",[36,137990,16052],{"class":42},[36,137992,137993,137995,137997,138000],{"class":38,"line":425},[36,137994,137961],{"class":53},[36,137996,51914],{"class":42},[36,137998,137999],{"class":405},"\"→\"",[36,138001,1774],{"class":42},[36,138003,138004,138006,138008,138010],{"class":38,"line":431},[36,138005,71382],{"class":53},[36,138007,51914],{"class":42},[36,138009,62547],{"class":53},[36,138011,1774],{"class":42},[36,138013,138014],{"class":38,"line":437},[36,138015,2045],{"class":42},[519,138017],{"style":126809,"src":138018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138020,138021],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[519,138023],{"style":126809,"src":138024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138026,138027],{},"但是在引用时需要先转义一下",[19,138029,138030],{},"content='\\e930'",[579,138032,138033],{"start":79},[582,138034,138035],{},"使用场景2",[19,138037,138038],{},"仿土豆效果",[19,138040,138041],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,138043,138044],{"className":126953,"code":137940,"language":126955,"meta":31,"style":31},[33,138045,138046,138050,138058,138068,138078,138082,138090,138100,138110],{"__ignoreMap":31},[36,138047,138048],{"class":38,"line":39},[36,138049,137947],{"class":69},[36,138051,138052,138054,138056],{"class":38,"line":66},[36,138053,52088],{"class":51777},[36,138055,137954],{"class":2443},[36,138057,16052],{"class":42},[36,138059,138060,138062,138064,138066],{"class":38,"line":73},[36,138061,137961],{"class":53},[36,138063,51914],{"class":42},[36,138065,8132],{"class":405},[36,138067,1774],{"class":42},[36,138069,138070,138072,138074,138076],{"class":38,"line":79},[36,138071,128569],{"class":53},[36,138073,51914],{"class":42},[36,138075,61346],{"class":53},[36,138077,1774],{"class":42},[36,138079,138080],{"class":38,"line":85},[36,138081,2045],{"class":42},[36,138083,138084,138086,138088],{"class":38,"line":419},[36,138085,52088],{"class":51777},[36,138087,137988],{"class":2443},[36,138089,16052],{"class":42},[36,138091,138092,138094,138096,138098],{"class":38,"line":425},[36,138093,137961],{"class":53},[36,138095,51914],{"class":42},[36,138097,137999],{"class":405},[36,138099,1774],{"class":42},[36,138101,138102,138104,138106,138108],{"class":38,"line":431},[36,138103,71382],{"class":53},[36,138105,51914],{"class":42},[36,138107,62547],{"class":53},[36,138109,1774],{"class":42},[36,138111,138112],{"class":38,"line":437},[36,138113,2045],{"class":42},[519,138115],{"style":126809,"src":138116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[579,138118,138119],{"start":85},[582,138120,138121],{},"使用场景3",[19,138123,138124],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,138126,138128],{"className":126953,"code":138127,"language":126955,"meta":31,"style":31},".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",[33,138129,138130,138136,138146,138150,138154,138158,138166,138176,138186,138190,138198,138208,138218],{"__ignoreMap":31},[36,138131,138132,138134],{"class":38,"line":39},[36,138133,130801],{"class":2443},[36,138135,16052],{"class":42},[36,138137,138138,138140,138142,138144],{"class":38,"line":66},[36,138139,131433],{"class":53},[36,138141,51914],{"class":42},[36,138143,24216],{"class":53},[36,138145,1774],{"class":42},[36,138147,138148],{"class":38,"line":73},[36,138149,2045],{"class":42},[36,138151,138152],{"class":38,"line":79},[36,138153,136414],{"class":42},[36,138155,138156],{"class":38,"line":85},[36,138157,137947],{"class":69},[36,138159,138160,138162,138164],{"class":38,"line":419},[36,138161,52088],{"class":51777},[36,138163,137954],{"class":2443},[36,138165,16052],{"class":42},[36,138167,138168,138170,138172,138174],{"class":38,"line":425},[36,138169,137961],{"class":53},[36,138171,51914],{"class":42},[36,138173,8132],{"class":405},[36,138175,1774],{"class":42},[36,138177,138178,138180,138182,138184],{"class":38,"line":431},[36,138179,128569],{"class":53},[36,138181,51914],{"class":42},[36,138183,61346],{"class":53},[36,138185,1774],{"class":42},[36,138187,138188],{"class":38,"line":437},[36,138189,2045],{"class":42},[36,138191,138192,138194,138196],{"class":38,"line":443},[36,138193,52088],{"class":51777},[36,138195,137988],{"class":2443},[36,138197,16052],{"class":42},[36,138199,138200,138202,138204,138206],{"class":38,"line":2092},[36,138201,137961],{"class":53},[36,138203,51914],{"class":42},[36,138205,137999],{"class":405},[36,138207,1774],{"class":42},[36,138209,138210,138212,138214,138216],{"class":38,"line":2097},[36,138211,71382],{"class":53},[36,138213,51914],{"class":42},[36,138215,62547],{"class":53},[36,138217,1774],{"class":42},[36,138219,138220],{"class":38,"line":2103},[36,138221,2045],{"class":42},[19,138223,138224],{},"div {\nmargin: 0 auto;\n}",[26,138226,138229],{"className":138227,"code":138228,"language":5667},[5665],"\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",[33,138230,138228],{"__ignoreMap":31},[19,138232,138233],{},"如果想让多个元素都发生变化",[19,138235,138236],{},"不能如下操作：",[19,138238,138239],{},"transition: width 2s ease 0.5s;",[19,138241,138242],{},"transition: height 2s ease 0.5s;不对！！！",[19,138244,138245],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138247,138248],{},"使用如下：加逗号隔开",[19,138250,138251],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138253,138254],{},"transition all 2s ease;",[596,138256,138258],{"id":138257},"_1426-过渡练习","14.2.6 过渡练习",[579,138260,138261],{},[582,138262,138263],{},"进度条",[519,138265],{"style":126809,"src":138266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,138268,138270],{"className":126953,"code":138269,"language":126955,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,138271,138272,138278,138296],{"__ignoreMap":31},[36,138273,138274,138276],{"class":38,"line":39},[36,138275,52088],{"class":51777},[36,138277,16052],{"class":42},[36,138279,138280,138283,138285,138287,138290,138292,138294],{"class":38,"line":66},[36,138281,138282],{"class":53},"  transition",[36,138284,51914],{"class":42},[36,138286,28602],{"class":53},[36,138288,138289],{"class":53}," 0.3",[36,138291,1308],{"class":46},[36,138293,79157],{"class":53},[36,138295,1774],{"class":42},[36,138297,138298],{"class":38,"line":73},[36,138299,2045],{"class":42},[579,138301,138302],{"start":66},[582,138303,138304],{},"小米logo",[19,138306,138307],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,138309,138311],{"className":126953,"code":138310,"language":126955,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,138312,138313,138318,138324,138340,138345],{"__ignoreMap":31},[36,138314,138315],{"class":38,"line":39},[36,138316,138317],{"class":69},"\u002F* CSS3 过渡 *\u002F\n",[36,138319,138320,138322],{"class":38,"line":66},[36,138321,52088],{"class":51777},[36,138323,16052],{"class":42},[36,138325,138326,138328,138330,138332,138334,138336,138338],{"class":38,"line":73},[36,138327,138282],{"class":53},[36,138329,51914],{"class":42},[36,138331,28602],{"class":53},[36,138333,138289],{"class":53},[36,138335,1308],{"class":46},[36,138337,79157],{"class":53},[36,138339,1774],{"class":42},[36,138341,138342],{"class":38,"line":79},[36,138343,138344],{"class":69},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,138346,138347],{"class":38,"line":85},[36,138348,2045],{"class":42},[19,138350,138351],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[539,138353,138354],{},"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":31,"searchDepth":66,"depth":66,"links":138356},[138357,138362],{"id":136687,"depth":66,"text":136688,"children":138358},[138359,138360,138361],{"id":136691,"depth":73,"text":136692},{"id":136768,"depth":73,"text":136769},{"id":137099,"depth":73,"text":137100},{"id":137390,"depth":66,"text":137391,"children":138363},[138364,138365],{"id":137394,"depth":73,"text":137395},{"id":138257,"depth":73,"text":138258},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136679,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138372,"title":138373,"body":138374,"description":550,"extension":551,"meta":140118,"navigation":553,"path":140119,"seo":140120,"stem":140121,"__hash__":140122},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138375,"toc":140099},[138376,138379,138383,138386,138392,138398,138402,138404,138407,138410,138413,138416,138419,138422,138425,138429,138433,138436,138439,138442,138446,138449,138452,138457,138460,138463,138466,138470,138473,138482,138485,138488,138492,138495,138498,138503,138510,138524,138532,138539,138544,138547,138550,138553,138560,138564,138570,138576,138579,138582,138587,138593,138595,138603,138608,138611,138617,138619,138624,138629,138632,138634,138639,138642,138647,138652,138686,138690,138694,138697,138701,138704,138790,138793,138830,138833,138869,138873,138878,138891,138945,138947,138975,138977,139005,139011,139025,139027,139071,139073,139117,139120,139127,139138,139140,139167,139169,139195,139202,139218,139220,139314,139316,139410,139417,139420,139425,139431,139505,139508,139510,139546,139548,139584,139587,139594,139613,139616,139619,139621,139646,139648,139672,139675,139678,139708,139712,139715,139778,139780,139846,139848,139912,139915,139947,139949,139975,139977,140003,140006,140037,140039,140065,140067,140093,140096],[10,138377,138373],{"id":138378},"_15-品优购项目上篇-搭建与公共模块",[14,138380,138382],{"id":138381},"_151-项目规划","15.1 项目规划",[519,138384],{"style":126809,"src":138385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138387,138388,138391],{},[770,138389,138390],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138393,138394,138397],{},[770,138395,138396],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138399,138401],{"id":138400},"_152-项目介绍","15.2 项目介绍",[19,138403,138390],{},[519,138405],{"style":126809,"src":138406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138408,138409],{},"主页：",[519,138411],{"style":126809,"src":138412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138414,138415],{},"列表页：",[519,138417],{"style":126809,"src":138418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138420,138421],{},"注册页：",[519,138423],{"style":126809,"src":138424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138426,138428],{"id":138427},"_153-项目搭建工作","15.3 项目搭建工作",[596,138430,138432],{"id":138431},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[519,138434],{"style":126809,"src":138435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138437,138438],{},"经常更换的图片要放到upload文件夹中",[19,138440,138441],{},"不经常换的放到images文件夹中",[596,138443,138445],{"id":138444},"_1532-创建文件如下","15.3.2 创建文件如下",[519,138447],{"style":126809,"src":138448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[519,138450],{"style":126809,"src":138451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138453,138454],{},[770,138455,138456],{},"初始化样式：",[19,138458,138459],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138461,138462],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138464,138465],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[596,138467,138469],{"id":138468},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138471,138472],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138474,138475,138476,138481],{},"这里最典型的应用就是 ",[770,138477,138478],{},[33,138479,138480],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[519,138483],{"style":126809,"src":138484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138486,138487],{},"通过link方法来引入",[596,138489,138491],{"id":138490},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[519,138493],{"style":126809,"src":138494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138496,138497],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[579,138499,138500],{},[582,138501,138502],{},"制作favicon图标",[19,138504,138505,138506,138509],{},"①把品优购图标切成 ",[33,138507,138508],{},"png"," 图片",[19,138511,138512,138513,138515,138516,138519,138520],{},"②把 ",[33,138514,138508],{}," 图片转换为 ",[33,138517,138518],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[43,138521,138522],{"href":138522,"rel":138523},"http:\u002F\u002Fwww.bitbug.net\u002F",[24345],[579,138525,138526,138529],{"start":66},[582,138527,138528],{},"favicon图标放到网站根目录下",[582,138530,138531],{},"HTML页面引入favicon",[19,138533,138534,138535,138538],{},"在html 页面里面的 ",[33,138536,138537],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138540,138541],{},[33,138542,138543],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138545,138546],{},"复制这行代码或者在生成这个的网站进行复制",[519,138548],{"style":126809,"src":138549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138551,138552],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138554,138555,138556],{},"例如:",[43,138557,138558],{"href":138558,"rel":138559},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24345],[596,138561,138563],{"id":138562},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138565,138566,138569],{},[770,138567,138568],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138571,138572,138575],{},[770,138573,138574],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138577,138578],{},"页面必须有三个标签用来符合 SEO 优化",[519,138580],{"style":126809,"src":138581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[579,138583,138584],{},[582,138585,138586],{},"title网站标题",[19,138588,138589,138592],{},[770,138590,138591],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138594,69267],{},[1620,138596,138597,138600],{},[582,138598,138599],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[582,138601,138602],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[579,138604,138605],{"start":66},[582,138606,138607],{},"description网站描述",[19,138609,138610],{},"简要说明我们网站主要是做什么的",[19,138612,138613,138616],{},[770,138614,138615],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138618,69267],{},[19,138620,138621],{},[33,138622,138623],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[579,138625,138626],{"start":73},[582,138627,138628],{},"keywords关键词",[19,138630,138631],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138633,69267],{},[19,138635,138636],{},[33,138637,138638],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138640,138641],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138643,138644],{},[770,138645,138646],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[579,138648,138649],{"start":79},[582,138650,138651],{},"代码总结",[26,138653,138654],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,138655,138656,138660,138674,138678],{"__ignoreMap":31},[36,138657,138658],{"class":38,"line":39},[36,138659,131064],{"class":69},[36,138661,138662,138664,138666,138668,138670,138672],{"class":38,"line":66},[36,138663,1523],{"class":42},[36,138665,52088],{"class":51777},[36,138667,53963],{"class":2443},[36,138669,47],{"class":42},[36,138671,131077],{"class":405},[36,138673,51784],{"class":42},[36,138675,138676],{"class":38,"line":73},[36,138677,131084],{"class":42},[36,138679,138680,138682,138684],{"class":38,"line":79},[36,138681,52262],{"class":42},[36,138683,52088],{"class":51777},[36,138685,51784],{"class":42},[14,138687,138689],{"id":138688},"_154-项目公共部分制作","15.4 项目公共部分制作",[596,138691,138693],{"id":138692},"_1541-常用模块类命名","15.4.1 常用模块类命名",[519,138695],{"style":126809,"src":138696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[596,138698,138700],{"id":138699},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138702,138703],{},"布局思路：",[1620,138705,138706,138709,138712,138734,138767],{},[582,138707,138708],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[582,138710,138711],{},"里面包含版心的盒子",[582,138713,138714,138715],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1620,138716,138717,138725,138731],{},[582,138718,138719,138720,21980,138722,138724],{},"1 号盒子 里面包含一个",[33,138721,1620],{},[33,138723,1620],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[582,138726,138727,138728,138730],{},"里面的内容是水平排列，所以需要给",[33,138729,582],{},"设置浮动",[582,138732,138733],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[582,138735,138736,138737],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1620,138738,138739,138753,138758],{},[582,138740,138741,138742,21980,138744,138746,138747,138749,138750,138752],{},"2 号盒子 里面包含一个",[33,138743,1620],{},[33,138745,1620],{},"包裹",[33,138748,582],{},"，中间的",[33,138751,1534],{},"可以用样式去设置，也可以用字符 |",[582,138754,138755,138756,138730],{},"里面内容水平排列，给",[33,138757,582],{},[582,138759,138760,138761,138763,138764,138766],{},"找到里面所有偶数的 ",[33,138762,582],{}," 设置样式（偶数的 ",[33,138765,582],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[582,138768,138769,138770],{},"需要用到字体图标",[1620,138771,138772,138778,138781,138784,138787],{},[582,138773,138774,138775],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,138776,138777],{},"arrow-icon",[582,138779,138780],{},"先要引入字体图片的资源",[582,138782,138783],{},"在样式里面利用 font-face 来进行声明",[582,138785,138786],{},"在伪元素的 content属性设置 图标的编码",[582,138788,138789],{},"给伪元素设置font-family属性",[19,138791,138792],{},"结构实例代码：",[26,138794,138796],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,138797,138798,138806,138816,138826],{"__ignoreMap":31},[36,138799,138800,138802,138804],{"class":38,"line":39},[36,138801,52088],{"class":51777},[36,138803,137954],{"class":2443},[36,138805,16052],{"class":42},[36,138807,138808,138810,138812,138814],{"class":38,"line":66},[36,138809,137961],{"class":53},[36,138811,51914],{"class":42},[36,138813,8132],{"class":405},[36,138815,1774],{"class":42},[36,138817,138818,138820,138822,138824],{"class":38,"line":73},[36,138819,128569],{"class":53},[36,138821,51914],{"class":42},[36,138823,61346],{"class":53},[36,138825,1774],{"class":42},[36,138827,138828],{"class":38,"line":79},[36,138829,2045],{"class":42},[19,138831,138832],{},"样式实例代码：",[26,138834,138835],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,138836,138837,138845,138855,138865],{"__ignoreMap":31},[36,138838,138839,138841,138843],{"class":38,"line":39},[36,138840,52088],{"class":51777},[36,138842,137954],{"class":2443},[36,138844,16052],{"class":42},[36,138846,138847,138849,138851,138853],{"class":38,"line":66},[36,138848,137961],{"class":53},[36,138850,51914],{"class":42},[36,138852,8132],{"class":405},[36,138854,1774],{"class":42},[36,138856,138857,138859,138861,138863],{"class":38,"line":73},[36,138858,128569],{"class":53},[36,138860,51914],{"class":42},[36,138862,61346],{"class":53},[36,138864,1774],{"class":42},[36,138866,138867],{"class":38,"line":79},[36,138868,2045],{"class":42},[596,138870,138872],{"id":138871},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1620,138874,138875],{},[582,138876,138877],{},"header 盒子必须要有高度",[19,138879,138880,138881,138883,138884],{},"1 号盒子是 ",[33,138882,131965],{}," 标志定位，在正常开发过程中， ",[770,138885,138886,138887,138890],{},"logo的布局其实是有讲究的，需要进行 ",[33,138888,138889],{},"logoSEO","的优化 （★★★）",[1620,138892,138893,138901,138909,138936],{},[582,138894,138895,138897,138898,138900],{},[33,138896,131965],{}," 里面首先放一个 ",[33,138899,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[582,138902,138903,138905,138906,138908],{},[33,138904,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,138907,131965],{}," 的背景图片给链接即可",[582,138910,138911,138912],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1620,138913,138914,138929],{},[582,138915,138916,138917,138920,138921,138924,138925,138928],{},"方法1：",[33,138918,138919],{},"text-indent"," 移到盒子外面（",[33,138922,138923],{},"text-indent: -9999px",") ，然后 ",[33,138926,138927],{},"overflow:hidden"," ，淘宝的做法",[582,138930,138931,138932,138935],{},"方法2：直接给 ",[33,138933,138934],{},"font-size: 0;"," 就看不到文字了，京东的做法",[582,138937,138938,138939,138941,138942,138944],{},"最后给链接一个 ",[33,138940,51884],{}," 属性，这样鼠标放到 ",[33,138943,131965],{}," 上就可以看到提示文字了",[19,138946,138792],{},[26,138948,138949],{"className":127700,"code":132186,"language":127702,"meta":31,"style":31},[33,138950,138951],{"__ignoreMap":31},[36,138952,138953,138955,138957,138959,138961,138963,138965,138967,138969,138971,138973],{"class":38,"line":39},[36,138954,1523],{"class":42},[36,138956,43],{"class":51777},[36,138958,61534],{"class":2443},[36,138960,47],{"class":42},[36,138962,132201],{"class":405},[36,138964,132204],{"class":2443},[36,138966,47],{"class":42},[36,138968,132209],{"class":405},[36,138970,132212],{"class":42},[36,138972,43],{"class":51777},[36,138974,51784],{"class":42},[19,138976,138832],{},[26,138978,138979],{"className":127700,"code":132186,"language":127702,"meta":31,"style":31},[33,138980,138981],{"__ignoreMap":31},[36,138982,138983,138985,138987,138989,138991,138993,138995,138997,138999,139001,139003],{"class":38,"line":39},[36,138984,1523],{"class":42},[36,138986,43],{"class":51777},[36,138988,61534],{"class":2443},[36,138990,47],{"class":42},[36,138992,132201],{"class":405},[36,138994,132204],{"class":2443},[36,138996,47],{"class":42},[36,138998,132209],{"class":405},[36,139000,132212],{"class":42},[36,139002,43],{"class":51777},[36,139004,51784],{"class":42},[19,139006,139007,139008,139010],{},"2 号盒子是 ",[33,139009,131978],{}," 搜索模块定位",[1620,139012,139013,139016,139019,139022],{},[582,139014,139015],{},"search盒子利用定位的方式放在对应的位置",[582,139017,139018],{},"search盒子设置绝对定位，header盒子设置相对定位",[582,139020,139021],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[582,139023,139024],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139026,138792],{},[26,139028,139029],{"className":126953,"code":132273,"language":126955,"meta":31,"style":31},[33,139030,139031,139053,139057,139067],{"__ignoreMap":31},[36,139032,139033,139035,139037,139039,139041,139043,139045,139047,139049,139051],{"class":38,"line":39},[36,139034,52088],{"class":51777},[36,139036,12915],{"class":42},[36,139038,19],{"class":51777},[36,139040,12915],{"class":42},[36,139042,10],{"class":51777},[36,139044,12915],{"class":42},[36,139046,1620],{"class":51777},[36,139048,12915],{"class":42},[36,139050,582],{"class":51777},[36,139052,16052],{"class":42},[36,139054,139055],{"class":38,"line":66},[36,139056,132302],{"class":69},[36,139058,139059,139061,139063,139065],{"class":38,"line":73},[36,139060,128569],{"class":53},[36,139062,51914],{"class":42},[36,139064,61346],{"class":53},[36,139066,1774],{"class":42},[36,139068,139069],{"class":38,"line":79},[36,139070,2045],{"class":42},[19,139072,138832],{},[26,139074,139075],{"className":126953,"code":132273,"language":126955,"meta":31,"style":31},[33,139076,139077,139099,139103,139113],{"__ignoreMap":31},[36,139078,139079,139081,139083,139085,139087,139089,139091,139093,139095,139097],{"class":38,"line":39},[36,139080,52088],{"class":51777},[36,139082,12915],{"class":42},[36,139084,19],{"class":51777},[36,139086,12915],{"class":42},[36,139088,10],{"class":51777},[36,139090,12915],{"class":42},[36,139092,1620],{"class":51777},[36,139094,12915],{"class":42},[36,139096,582],{"class":51777},[36,139098,16052],{"class":42},[36,139100,139101],{"class":38,"line":66},[36,139102,132302],{"class":69},[36,139104,139105,139107,139109,139111],{"class":38,"line":73},[36,139106,128569],{"class":53},[36,139108,51914],{"class":42},[36,139110,61346],{"class":53},[36,139112,1774],{"class":42},[36,139114,139115],{"class":38,"line":79},[36,139116,2045],{"class":42},[19,139118,139119],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139121,139122,139123,139126],{},"3 号盒子是 ",[33,139124,139125],{},"hotwords"," 热词模块定位",[1620,139128,139129,139132,139135],{},[582,139130,139131],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[582,139133,139134],{},"给里面所有的a标签设置 左右10px的外边距",[582,139136,139137],{},"给第一个a标签设置文字变红色（#c81623）",[19,139139,138792],{},[26,139141,139143],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,139144,139145,139151,139163],{"__ignoreMap":31},[36,139146,139147,139149],{"class":38,"line":39},[36,139148,52088],{"class":51777},[36,139150,16052],{"class":42},[36,139152,139153,139155,139157,139159,139161],{"class":38,"line":66},[36,139154,70947],{"class":53},[36,139156,51914],{"class":42},[36,139158,812],{"class":53},[36,139160,52033],{"class":53},[36,139162,1774],{"class":42},[36,139164,139165],{"class":38,"line":73},[36,139166,2045],{"class":42},[19,139168,138832],{},[26,139170,139171],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,139172,139173,139179,139191],{"__ignoreMap":31},[36,139174,139175,139177],{"class":38,"line":39},[36,139176,52088],{"class":51777},[36,139178,16052],{"class":42},[36,139180,139181,139183,139185,139187,139189],{"class":38,"line":66},[36,139182,70947],{"class":53},[36,139184,51914],{"class":42},[36,139186,812],{"class":53},[36,139188,52033],{"class":53},[36,139190,1774],{"class":42},[36,139192,139193],{"class":38,"line":73},[36,139194,2045],{"class":42},[19,139196,139197,139198,139201],{},"4 号盒子是 ",[33,139199,139200],{},"shopcar"," 购物车模块",[1620,139203,139204,139209,139212,139215],{},[582,139205,123736,139206,139208],{},[33,139207,139200],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[582,139210,139211],{},"count 统计部分用绝对定位做",[582,139213,139214],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[582,139216,139217],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139219,138792],{},[26,139221,139222],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,139223,139224,139228,139242,139246,139260,139264,139278,139282,139296,139300],{"__ignoreMap":31},[36,139225,139226],{"class":38,"line":39},[36,139227,132392],{"class":69},[36,139229,139230,139232,139234,139236,139238,139240],{"class":38,"line":66},[36,139231,132397],{"class":2443},[36,139233,80284],{"class":42},[36,139235,129313],{"class":53},[36,139237,51914],{"class":42},[36,139239,132406],{"class":53},[36,139241,129883],{"class":42},[36,139243,139244],{"class":38,"line":73},[36,139245,132413],{"class":69},[36,139247,139248,139250,139252,139254,139256,139258],{"class":38,"line":79},[36,139249,132418],{"class":2443},[36,139251,80284],{"class":42},[36,139253,129313],{"class":53},[36,139255,51914],{"class":42},[36,139257,55241],{"class":53},[36,139259,129883],{"class":42},[36,139261,139262],{"class":38,"line":85},[36,139263,132433],{"class":69},[36,139265,139266,139268,139270,139272,139274,139276],{"class":38,"line":419},[36,139267,132438],{"class":2443},[36,139269,80284],{"class":42},[36,139271,129313],{"class":53},[36,139273,51914],{"class":42},[36,139275,55308],{"class":53},[36,139277,129883],{"class":42},[36,139279,139280],{"class":38,"line":425},[36,139281,132453],{"class":69},[36,139283,139284,139286,139288,139290,139292,139294],{"class":38,"line":431},[36,139285,132458],{"class":2443},[36,139287,80284],{"class":42},[36,139289,129313],{"class":53},[36,139291,51914],{"class":42},[36,139293,86710],{"class":53},[36,139295,129883],{"class":42},[36,139297,139298],{"class":38,"line":437},[36,139299,132473],{"class":69},[36,139301,139302,139304,139306,139308,139310,139312],{"class":38,"line":443},[36,139303,132478],{"class":2443},[36,139305,80284],{"class":42},[36,139307,129313],{"class":53},[36,139309,51914],{"class":42},[36,139311,132487],{"class":53},[36,139313,129883],{"class":42},[19,139315,138832],{},[26,139317,139318],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,139319,139320,139324,139338,139342,139356,139360,139374,139378,139392,139396],{"__ignoreMap":31},[36,139321,139322],{"class":38,"line":39},[36,139323,132392],{"class":69},[36,139325,139326,139328,139330,139332,139334,139336],{"class":38,"line":66},[36,139327,132397],{"class":2443},[36,139329,80284],{"class":42},[36,139331,129313],{"class":53},[36,139333,51914],{"class":42},[36,139335,132406],{"class":53},[36,139337,129883],{"class":42},[36,139339,139340],{"class":38,"line":73},[36,139341,132413],{"class":69},[36,139343,139344,139346,139348,139350,139352,139354],{"class":38,"line":79},[36,139345,132418],{"class":2443},[36,139347,80284],{"class":42},[36,139349,129313],{"class":53},[36,139351,51914],{"class":42},[36,139353,55241],{"class":53},[36,139355,129883],{"class":42},[36,139357,139358],{"class":38,"line":85},[36,139359,132433],{"class":69},[36,139361,139362,139364,139366,139368,139370,139372],{"class":38,"line":419},[36,139363,132438],{"class":2443},[36,139365,80284],{"class":42},[36,139367,129313],{"class":53},[36,139369,51914],{"class":42},[36,139371,55308],{"class":53},[36,139373,129883],{"class":42},[36,139375,139376],{"class":38,"line":425},[36,139377,132453],{"class":69},[36,139379,139380,139382,139384,139386,139388,139390],{"class":38,"line":431},[36,139381,132458],{"class":2443},[36,139383,80284],{"class":42},[36,139385,129313],{"class":53},[36,139387,51914],{"class":42},[36,139389,86710],{"class":53},[36,139391,129883],{"class":42},[36,139393,139394],{"class":38,"line":437},[36,139395,132473],{"class":69},[36,139397,139398,139400,139402,139404,139406,139408],{"class":38,"line":443},[36,139399,132478],{"class":2443},[36,139401,80284],{"class":42},[36,139403,129313],{"class":53},[36,139405,51914],{"class":42},[36,139407,132487],{"class":53},[36,139409,129883],{"class":42},[596,139411,139413,139414,139416],{"id":139412},"_1544-nav导航模块制作","15.4.4 ",[33,139415,54190],{},"导航模块制作",[519,139418],{"style":126809,"src":139419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139421,139422,139424],{},[33,139423,54190],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139426,139427,139428],{},"1 号盒子左侧浮动，",[33,139429,139430],{},"dropdown",[1620,139432,139433,139443,139451,139457,139465,139475,139483,139494],{},[582,139434,139435,139436,101419,139439,139442],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,139437,139438],{},".dt",[33,139440,139441],{},".dd"," 两个盒子",[582,139444,139445,139447,139448,139450],{},[33,139446,139438],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,139449,139441],{}," 挤到下面去了",[582,139452,139453,139454,139456],{},"给 ",[33,139455,139441],{}," 盒子设置宽度 和 高度，以及背景颜色",[582,139458,139453,139459,139461,139462,120638],{},[33,139460,139441],{}," 盒子里面定义 无序列表 （",[33,139463,139464],{},"ul > li > a",[582,139466,139467,139468,139470,139471,139474],{},"每个 ",[33,139469,582],{}," 都有一个高度（",[33,139472,139473],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[582,139476,139453,139477,139479,139480,120638],{},[33,139478,582],{}," 里面的a设置文字大小（",[33,139481,139482],{},"14px",[582,139484,139453,139485,139487,139488,139490,139491,139493],{},[33,139486,582],{}," 设置 ",[33,139489,128114],{},"，当鼠标移入的时候，让",[33,139492,582],{},"的背景变成白色，让里面的文字变成红色",[582,139495,139496,139498,139499,139501,139502,139504],{},[33,139497,582],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,139500,582],{},"的右侧，那么给",[33,139503,582],{},"设置相对定位",[19,139506,139507],{},"一定要注意相关性",[19,139509,138792],{},[26,139511,139512],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,139513,139514,139522,139532,139542],{"__ignoreMap":31},[36,139515,139516,139518,139520],{"class":38,"line":39},[36,139517,52088],{"class":51777},[36,139519,137954],{"class":2443},[36,139521,16052],{"class":42},[36,139523,139524,139526,139528,139530],{"class":38,"line":66},[36,139525,137961],{"class":53},[36,139527,51914],{"class":42},[36,139529,8132],{"class":405},[36,139531,1774],{"class":42},[36,139533,139534,139536,139538,139540],{"class":38,"line":73},[36,139535,128569],{"class":53},[36,139537,51914],{"class":42},[36,139539,61346],{"class":53},[36,139541,1774],{"class":42},[36,139543,139544],{"class":38,"line":79},[36,139545,2045],{"class":42},[19,139547,138832],{},[26,139549,139550],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,139551,139552,139560,139570,139580],{"__ignoreMap":31},[36,139553,139554,139556,139558],{"class":38,"line":39},[36,139555,52088],{"class":51777},[36,139557,137954],{"class":2443},[36,139559,16052],{"class":42},[36,139561,139562,139564,139566,139568],{"class":38,"line":66},[36,139563,137961],{"class":53},[36,139565,51914],{"class":42},[36,139567,8132],{"class":405},[36,139569,1774],{"class":42},[36,139571,139572,139574,139576,139578],{"class":38,"line":73},[36,139573,128569],{"class":53},[36,139575,51914],{"class":42},[36,139577,61346],{"class":53},[36,139579,1774],{"class":42},[36,139581,139582],{"class":38,"line":79},[36,139583,2045],{"class":42},[19,139585,139586],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139588,139589,139590,139593],{},"2 号盒子左侧浮动，",[33,139591,139592],{},"navitems"," 导航栏组",[1620,139595,139596,139601,139610],{},[582,139597,139598,139599],{},"里面结构是 ",[33,139600,139464],{},[582,139602,139603,139604,139606,139607,139609],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,139605,43],{},"左右的",[33,139608,31361],{},"把两侧撑开",[582,139611,139612],{},"让文字垂直居中（行高等于高度）",[519,139614],{"style":126809,"src":139615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139617,139618],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139620,138792],{},[26,139622,139624],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,139625,139626,139632,139642],{"__ignoreMap":31},[36,139627,139628,139630],{"class":38,"line":39},[36,139629,130801],{"class":2443},[36,139631,16052],{"class":42},[36,139633,139634,139636,139638,139640],{"class":38,"line":66},[36,139635,131433],{"class":53},[36,139637,51914],{"class":42},[36,139639,24216],{"class":53},[36,139641,1774],{"class":42},[36,139643,139644],{"class":38,"line":73},[36,139645,2045],{"class":42},[19,139647,138832],{},[26,139649,139650],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,139651,139652,139658,139668],{"__ignoreMap":31},[36,139653,139654,139656],{"class":38,"line":39},[36,139655,130801],{"class":2443},[36,139657,16052],{"class":42},[36,139659,139660,139662,139664,139666],{"class":38,"line":66},[36,139661,131433],{"class":53},[36,139663,51914],{"class":42},[36,139665,24216],{"class":53},[36,139667,1774],{"class":42},[36,139669,139670],{"class":38,"line":73},[36,139671,2045],{"class":42},[19,139673,139674],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[519,139676],{"style":126809,"src":139677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,139679,139680],{"className":126953,"code":131110,"language":126955,"meta":31,"style":31},[33,139681,139682,139688,139704],{"__ignoreMap":31},[36,139683,139684,139686],{"class":38,"line":39},[36,139685,52088],{"class":51777},[36,139687,16052],{"class":42},[36,139689,139690,139692,139694,139696,139698,139700,139702],{"class":38,"line":66},[36,139691,71373],{"class":53},[36,139693,51914],{"class":42},[36,139695,54],{"class":53},[36,139697,51969],{"class":46},[36,139699,51998],{"class":53},[36,139701,130345],{"class":53},[36,139703,1774],{"class":42},[36,139705,139706],{"class":38,"line":73},[36,139707,2045],{"class":42},[596,139709,139711],{"id":139710},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[519,139713],{"style":126809,"src":139714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1620,139716,139717,139722,139727],{},[582,139718,139719,139721],{},[33,139720,132156],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[582,139723,139724,139726],{},[33,139725,132156],{}," 里面有一个大的版心",[582,139728,139729,139730,139733,139734],{},"版心里面包含 1 号盒子，",[33,139731,139732],{},"mod_service"," 是服务模块，mod 是模块的意思",[1620,139735,139736,139741,139754,139770,139775],{},[582,139737,139453,139738,139740],{},[33,139739,139732],{}," 设置高度（80px）和下边框",[582,139742,139743,139744,139747,139748,139750,139751,139753],{},"在里面定义 ",[33,139745,139746],{},"ul > li"," ,每个",[33,139749,582],{}," 宽度是300px 高度是 50px，给每个",[33,139752,582],{},"设置35px的左内边距",[582,139755,139756,139757,139759,139760,139762,139763,139765,139766,18890,139768,120638],{},"在每个",[33,139758,582],{},"里面，放一个 ",[33,139761,23390],{},"（里面放图标），一个",[33,139764,52088],{},"（里面放",[33,139767,52088],{},[33,139769,19],{},[582,139771,139453,139772,139774],{},[33,139773,23390],{},"设置浮动，让h5与这个div左右排列",[582,139776,139777],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139779,138792],{},[26,139781,139783],{"className":126953,"code":139782,"language":126955,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,139784,139785,139791,139803,139815,139842],{"__ignoreMap":31},[36,139786,139787,139789],{"class":38,"line":39},[36,139788,134710],{"class":2443},[36,139790,16052],{"class":42},[36,139792,139793,139795,139797,139799,139801],{"class":38,"line":66},[36,139794,71045],{"class":53},[36,139796,51914],{"class":42},[36,139798,1313],{"class":53},[36,139800,51969],{"class":46},[36,139802,1774],{"class":42},[36,139804,139805,139807,139809,139811,139813],{"class":38,"line":73},[36,139806,71265],{"class":53},[36,139808,51914],{"class":42},[36,139810,1313],{"class":53},[36,139812,51969],{"class":46},[36,139814,1774],{"class":42},[36,139816,139817,139819,139821,139823,139825,139827,139829,139831,139834,139836,139838,139840],{"class":38,"line":79},[36,139818,71088],{"class":53},[36,139820,51914],{"class":42},[36,139822,62203],{"class":53},[36,139824,345],{"class":42},[36,139826,134749],{"class":5696},[36,139828,14194],{"class":42},[36,139830,62213],{"class":53},[36,139832,139833],{"class":53}," -10",[36,139835,51969],{"class":46},[36,139837,134768],{"class":53},[36,139839,51969],{"class":46},[36,139841,1774],{"class":42},[36,139843,139844],{"class":38,"line":85},[36,139845,2045],{"class":42},[19,139847,138832],{},[26,139849,139850],{"className":126953,"code":139782,"language":126955,"meta":31,"style":31},[33,139851,139852,139858,139870,139882,139908],{"__ignoreMap":31},[36,139853,139854,139856],{"class":38,"line":39},[36,139855,134710],{"class":2443},[36,139857,16052],{"class":42},[36,139859,139860,139862,139864,139866,139868],{"class":38,"line":66},[36,139861,71045],{"class":53},[36,139863,51914],{"class":42},[36,139865,1313],{"class":53},[36,139867,51969],{"class":46},[36,139869,1774],{"class":42},[36,139871,139872,139874,139876,139878,139880],{"class":38,"line":73},[36,139873,71265],{"class":53},[36,139875,51914],{"class":42},[36,139877,1313],{"class":53},[36,139879,51969],{"class":46},[36,139881,1774],{"class":42},[36,139883,139884,139886,139888,139890,139892,139894,139896,139898,139900,139902,139904,139906],{"class":38,"line":79},[36,139885,71088],{"class":53},[36,139887,51914],{"class":42},[36,139889,62203],{"class":53},[36,139891,345],{"class":42},[36,139893,134749],{"class":5696},[36,139895,14194],{"class":42},[36,139897,62213],{"class":53},[36,139899,139833],{"class":53},[36,139901,51969],{"class":46},[36,139903,134768],{"class":53},[36,139905,51969],{"class":46},[36,139907,1774],{"class":42},[36,139909,139910],{"class":38,"line":85},[36,139911,2045],{"class":42},[19,139913,139914],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1620,139916,139917,139920,139926,139932,139944],{},[582,139918,139919],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[582,139921,139922,139923,120638],{},"里面的布局利用 自定义列表来实现（",[33,139924,139925],{},"dl > dt + dd",[582,139927,139453,139928,139931],{},[33,139929,139930],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[582,139933,139453,139934,139937,139938,18890,139940,139943],{},[33,139935,139936],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,139939,139936],{},[33,139941,139942],{},"dd","之间有些距离",[582,139945,139946],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139948,138792],{},[26,139950,139951],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,139952,139953,139959,139971],{"__ignoreMap":31},[36,139954,139955,139957],{"class":38,"line":39},[36,139956,52088],{"class":51777},[36,139958,16052],{"class":42},[36,139960,139961,139963,139965,139967,139969],{"class":38,"line":66},[36,139962,70947],{"class":53},[36,139964,51914],{"class":42},[36,139966,812],{"class":53},[36,139968,52033],{"class":53},[36,139970,1774],{"class":42},[36,139972,139973],{"class":38,"line":73},[36,139974,2045],{"class":42},[19,139976,138832],{},[26,139978,139979],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,139980,139981,139987,139999],{"__ignoreMap":31},[36,139982,139983,139985],{"class":38,"line":39},[36,139984,52088],{"class":51777},[36,139986,16052],{"class":42},[36,139988,139989,139991,139993,139995,139997],{"class":38,"line":66},[36,139990,70947],{"class":53},[36,139992,51914],{"class":42},[36,139994,812],{"class":53},[36,139996,52033],{"class":53},[36,139998,1774],{"class":42},[36,140000,140001],{"class":38,"line":73},[36,140002,2045],{"class":42},[19,140004,140005],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1620,140007,140008,140017,140020,140031],{},[582,140009,140010,140011,140013,140014,140016],{},"分为上下两块，上面是 ",[33,140012,132173],{}," 友情链接，下面是 ",[33,140015,132166],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[582,140018,140019],{},"把内容分别复制到相应模块中",[582,140021,139453,140022,140024,140025,140027,140028,140030],{},[33,140023,132173],{}," 设置 15px 的下外边距，给",[33,140026,132173],{}," 里面 的 ",[33,140029,43],{}," 标签设置 左右 3px 的外边距",[582,140032,140033,140034,140036],{},"给",[33,140035,132166],{}," 设置 20px 的行高",[19,140038,138792],{},[26,140040,140041],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,140042,140043,140049,140061],{"__ignoreMap":31},[36,140044,140045,140047],{"class":38,"line":39},[36,140046,52088],{"class":51777},[36,140048,16052],{"class":42},[36,140050,140051,140053,140055,140057,140059],{"class":38,"line":66},[36,140052,70947],{"class":53},[36,140054,51914],{"class":42},[36,140056,812],{"class":53},[36,140058,52033],{"class":53},[36,140060,1774],{"class":42},[36,140062,140063],{"class":38,"line":73},[36,140064,2045],{"class":42},[19,140066,138832],{},[26,140068,140069],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,140070,140071,140077,140089],{"__ignoreMap":31},[36,140072,140073,140075],{"class":38,"line":39},[36,140074,52088],{"class":51777},[36,140076,16052],{"class":42},[36,140078,140079,140081,140083,140085,140087],{"class":38,"line":66},[36,140080,70947],{"class":53},[36,140082,51914],{"class":42},[36,140084,812],{"class":53},[36,140086,52033],{"class":53},[36,140088,1774],{"class":42},[36,140090,140091],{"class":38,"line":73},[36,140092,2045],{"class":42},[19,140094,140095],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[539,140097,140098],{},"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":31,"searchDepth":66,"depth":66,"links":140100},[140101,140102,140103,140110],{"id":138381,"depth":66,"text":138382},{"id":138400,"depth":66,"text":138401},{"id":138427,"depth":66,"text":138428,"children":140104},[140105,140106,140107,140108,140109],{"id":138431,"depth":73,"text":138432},{"id":138444,"depth":73,"text":138445},{"id":138468,"depth":73,"text":138469},{"id":138490,"depth":73,"text":138491},{"id":138562,"depth":73,"text":138563},{"id":138688,"depth":66,"text":138689,"children":140111},[140112,140113,140114,140115,140117],{"id":138692,"depth":73,"text":138693},{"id":138699,"depth":73,"text":138700},{"id":138871,"depth":73,"text":138872},{"id":139412,"depth":73,"text":140116},"15.4.4 nav导航模块制作",{"id":139710,"depth":73,"text":139711},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138373,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140124,"title":140125,"body":140126,"description":550,"extension":551,"meta":142528,"navigation":553,"path":142529,"seo":142530,"stem":142531,"__hash__":142532},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140127,"toc":142505},[140128,140131,140135,140139,140151,140154,140157,140160,140171,140173,140197,140199,140223,140228,140231,140233,140269,140271,140307,140310,140315,140318,140321,140324,140354,140361,140364,140374,140376,140410,140413,140447,140453,140470,140472,140508,140510,140546,140551,140576,140578,140604,140606,140630,140637,140640,140704,140706,140748,140750,140790,140797,140802,140804,140834,140836,140866,140870,140873,140880,140892,140894,140920,140922,140946,140949,140951,140975,140981,140991,140993,141023,141025,141055,141062,141103,141105,141141,141143,141179,141183,141186,141189,141192,141198,141203,141206,141229,141232,141256,141259,141283,141288,141291,141294,141297,141300,141303,141377,141379,141409,141411,141441,141444,141447,141479,141483,141487,141501,141510,141513,141518,141520,141614,141616,141710,141733,141735,141759,141761,141785,141792,141795,141805,141807,141831,141836,141844,141846,141876,141881,141921,141923,141949,141951,141977,141981,141984,141989,141992,141996,142004,142011,142019,142021,142051,142053,142083,142091,142094,142097,142099,142129,142131,142161,142164,142169,142171,142195,142197,142221,142224,142309,142311,142335,142337,142361,142365,142367,142391,142393,142427,142431,142445,142448,142453,142456,142461,142464,142494,142502],[10,140129,140125],{"id":140130},"_16-品优购项目下篇-主体与页面开发",[14,140132,140134],{"id":140133},"_161-项目主体模块制作","16.1 项目主体模块制作",[596,140136,140138],{"id":140137},"_1611-首页制作","16.1.1 首页制作",[19,140140,140141,140143,140144,140146,140147,140150],{},[770,140142,102459],{}," 主体模块是 ",[770,140145,74535],{}," 里面专有的，注意需要新的样式文件 ",[770,140148,140149],{},"index.css，"," 就不要写在common.css中了",[519,140152],{"style":126809,"src":140153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[519,140155],{"style":126809,"src":140156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140158,140159],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1620,140161,140162,140165,140168],{},[582,140163,140164],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[582,140166,140167],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[582,140169,140170],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140172,138792],{},[26,140174,140175],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,140176,140177,140183,140193],{"__ignoreMap":31},[36,140178,140179,140181],{"class":38,"line":39},[36,140180,130801],{"class":2443},[36,140182,16052],{"class":42},[36,140184,140185,140187,140189,140191],{"class":38,"line":66},[36,140186,131433],{"class":53},[36,140188,51914],{"class":42},[36,140190,24216],{"class":53},[36,140192,1774],{"class":42},[36,140194,140195],{"class":38,"line":73},[36,140196,2045],{"class":42},[19,140198,138832],{},[26,140200,140201],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,140202,140203,140209,140219],{"__ignoreMap":31},[36,140204,140205,140207],{"class":38,"line":39},[36,140206,130801],{"class":2443},[36,140208,16052],{"class":42},[36,140210,140211,140213,140215,140217],{"class":38,"line":66},[36,140212,131433],{"class":53},[36,140214,51914],{"class":42},[36,140216,24216],{"class":53},[36,140218,1774],{"class":42},[36,140220,140221],{"class":38,"line":73},[36,140222,2045],{"class":42},[579,140224,140225],{},[582,140226,140227],{},"左侧focus模块制作",[519,140229],{"style":126809,"src":140230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140232,138792],{},[26,140234,140235],{"className":126953,"code":128276,"language":126955,"meta":31,"style":31},[33,140236,140237,140245,140255,140265],{"__ignoreMap":31},[36,140238,140239,140241,140243],{"class":38,"line":39},[36,140240,54298],{"class":51777},[36,140242,62377],{"class":2443},[36,140244,16052],{"class":42},[36,140246,140247,140249,140251,140253],{"class":38,"line":66},[36,140248,128291],{"class":53},[36,140250,51914],{"class":42},[36,140252,55366],{"class":53},[36,140254,1774],{"class":42},[36,140256,140257,140259,140261,140263],{"class":38,"line":73},[36,140258,71275],{"class":53},[36,140260,51914],{"class":42},[36,140262,55214],{"class":53},[36,140264,1774],{"class":42},[36,140266,140267],{"class":38,"line":79},[36,140268,2045],{"class":42},[19,140270,138832],{},[26,140272,140273],{"className":126953,"code":128276,"language":126955,"meta":31,"style":31},[33,140274,140275,140283,140293,140303],{"__ignoreMap":31},[36,140276,140277,140279,140281],{"class":38,"line":39},[36,140278,54298],{"class":51777},[36,140280,62377],{"class":2443},[36,140282,16052],{"class":42},[36,140284,140285,140287,140289,140291],{"class":38,"line":66},[36,140286,128291],{"class":53},[36,140288,51914],{"class":42},[36,140290,55366],{"class":53},[36,140292,1774],{"class":42},[36,140294,140295,140297,140299,140301],{"class":38,"line":73},[36,140296,71275],{"class":53},[36,140298,51914],{"class":42},[36,140300,55214],{"class":53},[36,140302,1774],{"class":42},[36,140304,140305],{"class":38,"line":79},[36,140306,2045],{"class":42},[19,140308,140309],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[579,140311,140312],{"start":66},[582,140313,140314],{},"右侧newsflash模块制作",[519,140316],{"style":126809,"src":140317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140319,140320],{},"右侧的模块 分为上中下三个盒子",[19,140322,140323],{},"结构代码：",[26,140325,140326],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,140327,140328],{"__ignoreMap":31},[36,140329,140330,140332,140334,140336,140338,140340,140342,140344,140346,140348,140350,140352],{"class":38,"line":39},[36,140331,1523],{"class":42},[36,140333,519],{"class":51777},[36,140335,55716],{"class":2443},[36,140337,47],{"class":42},[36,140339,134470],{"class":405},[36,140341,55724],{"class":2443},[36,140343,47],{"class":42},[36,140345,134477],{"class":405},[36,140347,134480],{"class":2443},[36,140349,47],{"class":42},[36,140351,134485],{"class":405},[36,140353,51784],{"class":42},[19,140355,140356,140357,140360],{},"1 号盒子为 ",[33,140358,140359],{},"news"," 新闻模块 高度为 165px",[519,140362],{"style":126809,"src":140363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140365,140366,140367,140370,140371],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,140368,140369],{},"news-hd","，下面是 ",[33,140372,140373],{},"news-bd",[19,140375,140323],{},[26,140377,140378],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,140379,140380,140384,140398,140402],{"__ignoreMap":31},[36,140381,140382],{"class":38,"line":39},[36,140383,131064],{"class":69},[36,140385,140386,140388,140390,140392,140394,140396],{"class":38,"line":66},[36,140387,1523],{"class":42},[36,140389,52088],{"class":51777},[36,140391,53963],{"class":2443},[36,140393,47],{"class":42},[36,140395,131077],{"class":405},[36,140397,51784],{"class":42},[36,140399,140400],{"class":38,"line":73},[36,140401,131084],{"class":42},[36,140403,140404,140406,140408],{"class":38,"line":79},[36,140405,52262],{"class":42},[36,140407,52088],{"class":51777},[36,140409,51784],{"class":42},[19,140411,140412],{},"样式代码：",[26,140414,140415],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,140416,140417,140421,140435,140439],{"__ignoreMap":31},[36,140418,140419],{"class":38,"line":39},[36,140420,131064],{"class":69},[36,140422,140423,140425,140427,140429,140431,140433],{"class":38,"line":66},[36,140424,1523],{"class":42},[36,140426,52088],{"class":51777},[36,140428,53963],{"class":2443},[36,140430,47],{"class":42},[36,140432,131077],{"class":405},[36,140434,51784],{"class":42},[36,140436,140437],{"class":38,"line":73},[36,140438,131084],{"class":42},[36,140440,140441,140443,140445],{"class":38,"line":79},[36,140442,52262],{"class":42},[36,140444,52088],{"class":51777},[36,140446,51784],{"class":42},[19,140448,140449,140450,140452],{},"上面是",[33,140451,140369],{},"，设置高度是 33px，设置下边框",[1620,140454,140455,140461],{},[582,140456,140457,140458,140460],{},"里面放一个",[33,140459,23390],{}," 标题",[582,140462,140463,140464,140466,140467,140469],{},"放一个a",[33,140465,103094],{},"，内容是 更多，然后让 ",[33,140468,43],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140471,140323],{},[26,140473,140474],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,140475,140476,140484,140494,140504],{"__ignoreMap":31},[36,140477,140478,140480,140482],{"class":38,"line":39},[36,140479,52088],{"class":51777},[36,140481,137954],{"class":2443},[36,140483,16052],{"class":42},[36,140485,140486,140488,140490,140492],{"class":38,"line":66},[36,140487,137961],{"class":53},[36,140489,51914],{"class":42},[36,140491,8132],{"class":405},[36,140493,1774],{"class":42},[36,140495,140496,140498,140500,140502],{"class":38,"line":73},[36,140497,128569],{"class":53},[36,140499,51914],{"class":42},[36,140501,61346],{"class":53},[36,140503,1774],{"class":42},[36,140505,140506],{"class":38,"line":79},[36,140507,2045],{"class":42},[19,140509,140412],{},[26,140511,140512],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,140513,140514,140522,140532,140542],{"__ignoreMap":31},[36,140515,140516,140518,140520],{"class":38,"line":39},[36,140517,52088],{"class":51777},[36,140519,137954],{"class":2443},[36,140521,16052],{"class":42},[36,140523,140524,140526,140528,140530],{"class":38,"line":66},[36,140525,137961],{"class":53},[36,140527,51914],{"class":42},[36,140529,8132],{"class":405},[36,140531,1774],{"class":42},[36,140533,140534,140536,140538,140540],{"class":38,"line":73},[36,140535,128569],{"class":53},[36,140537,51914],{"class":42},[36,140539,61346],{"class":53},[36,140541,1774],{"class":42},[36,140543,140544],{"class":38,"line":79},[36,140545,2045],{"class":42},[19,140547,140548,140549],{},"下面是",[33,140550,140373],{},[1620,140552,140553,140561],{},[582,140554,140555,140556,101419,140558,140560],{},"里面包含 ",[33,140557,1620],{},[33,140559,582],{}," 还有链接",[582,140562,140033,140563,140565,140566,140568,140569,140572,140573],{},[33,140564,582],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,140567,131619],{}," 2.设置 ",[33,140570,140571],{},"white-space: nowrap;"," 3. 设置 ",[33,140574,140575],{},"text-overflow: ellipsis;",[19,140577,140323],{},[26,140579,140581],{"className":126953,"code":140580,"language":126955,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,140582,140583,140589,140600],{"__ignoreMap":31},[36,140584,140585,140587],{"class":38,"line":39},[36,140586,52088],{"class":51777},[36,140588,16052],{"class":42},[36,140590,140591,140594,140596,140598],{"class":38,"line":66},[36,140592,140593],{"class":53},"  overflow",[36,140595,51914],{"class":42},[36,140597,62191],{"class":53},[36,140599,1774],{"class":42},[36,140601,140602],{"class":38,"line":73},[36,140603,2045],{"class":42},[19,140605,140412],{},[26,140607,140608],{"className":126953,"code":140580,"language":126955,"meta":31,"style":31},[33,140609,140610,140616,140626],{"__ignoreMap":31},[36,140611,140612,140614],{"class":38,"line":39},[36,140613,52088],{"class":51777},[36,140615,16052],{"class":42},[36,140617,140618,140620,140622,140624],{"class":38,"line":66},[36,140619,140593],{"class":53},[36,140621,51914],{"class":42},[36,140623,62191],{"class":53},[36,140625,1774],{"class":42},[36,140627,140628],{"class":38,"line":73},[36,140629,2045],{"class":42},[19,140631,140632,140633,140636],{},"2 号盒子为 ",[33,140634,140635],{},"lifeservice"," 生活服务模块 高度为 209px",[519,140638],{"style":126809,"src":140639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1620,140641,140642,140645,140655,140679,140690],{},[582,140643,140644],{},"设置边框（左右下边框）",[582,140646,140647,140648,140651,140652,140654],{},"里面的内容 是 ",[33,140649,140650],{},"ul > 12*li","，给",[33,140653,582],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[582,140656,140657,140658],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1620,140659,140660,140665,140674],{},[582,140661,140662,140664],{},[33,140663,140635],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[582,140666,140667,140668,140670,140671,140673],{},"可以让 ",[33,140669,140635],{}," 里面的 ",[33,140672,1620],{}," 宽度为 252，就可以装的下 4 个 小 li",[582,140675,140676,140678],{},[33,140677,140635],{}," 盒子 overflow 隐藏多余的部分就可以了",[582,140680,116868,140681,140683,140684,140686,140687,140689],{},[33,140682,582],{}," 里面放一个 ",[33,140685,1057],{},"（里面放图标），下面的文本用 ",[33,140688,19],{}," 标签包裹",[582,140691,139453,140692,140694,140695,140697,140698,139487,140700,140703],{},[33,140693,1057],{}," 设置 24px宽和28px的高（注意 ",[33,140696,1057],{}," 是行内元素， 转成行内块），给 ",[33,140699,582],{},[33,140701,140702],{},"text-align:center"," 让里面内容居中显示",[19,140705,140323],{},[26,140707,140709],{"className":126953,"code":140708,"language":126955,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,140710,140711,140729,140734,140744],{"__ignoreMap":31},[36,140712,140713,140715,140717,140719,140721,140723,140725,140727],{"class":38,"line":39},[36,140714,36],{"class":51777},[36,140716,12915],{"class":42},[36,140718,43],{"class":51777},[36,140720,12915],{"class":42},[36,140722,24033],{"class":51777},[36,140724,12915],{"class":42},[36,140726,770],{"class":51777},[36,140728,16052],{"class":42},[36,140730,140731],{"class":38,"line":66},[36,140732,140733],{"class":69},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,140735,140736,140738,140740,140742],{"class":38,"line":73},[36,140737,128569],{"class":53},[36,140739,51914],{"class":42},[36,140741,128631],{"class":53},[36,140743,1774],{"class":42},[36,140745,140746],{"class":38,"line":79},[36,140747,2045],{"class":42},[19,140749,140412],{},[26,140751,140752],{"className":126953,"code":140708,"language":126955,"meta":31,"style":31},[33,140753,140754,140772,140776,140786],{"__ignoreMap":31},[36,140755,140756,140758,140760,140762,140764,140766,140768,140770],{"class":38,"line":39},[36,140757,36],{"class":51777},[36,140759,12915],{"class":42},[36,140761,43],{"class":51777},[36,140763,12915],{"class":42},[36,140765,24033],{"class":51777},[36,140767,12915],{"class":42},[36,140769,770],{"class":51777},[36,140771,16052],{"class":42},[36,140773,140774],{"class":38,"line":66},[36,140775,140733],{"class":69},[36,140777,140778,140780,140782,140784],{"class":38,"line":73},[36,140779,128569],{"class":53},[36,140781,51914],{"class":42},[36,140783,128631],{"class":53},[36,140785,1774],{"class":42},[36,140787,140788],{"class":38,"line":79},[36,140789,2045],{"class":42},[19,140791,140792,140793,140796],{},"3 号盒子为 ",[33,140794,140795],{},"bargain"," 特价商品",[1620,140798,140799],{},[582,140800,140801],{},"这个比较简单，直接插入一张图片即可",[19,140803,140323],{},[26,140805,140806],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,140807,140808],{"__ignoreMap":31},[36,140809,140810,140812,140814,140816,140818,140820,140822,140824,140826,140828,140830,140832],{"class":38,"line":39},[36,140811,1523],{"class":42},[36,140813,519],{"class":51777},[36,140815,55716],{"class":2443},[36,140817,47],{"class":42},[36,140819,134470],{"class":405},[36,140821,55724],{"class":2443},[36,140823,47],{"class":42},[36,140825,134477],{"class":405},[36,140827,134480],{"class":2443},[36,140829,47],{"class":42},[36,140831,134485],{"class":405},[36,140833,51784],{"class":42},[19,140835,140412],{},[26,140837,140838],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,140839,140840],{"__ignoreMap":31},[36,140841,140842,140844,140846,140848,140850,140852,140854,140856,140858,140860,140862,140864],{"class":38,"line":39},[36,140843,1523],{"class":42},[36,140845,519],{"class":51777},[36,140847,55716],{"class":2443},[36,140849,47],{"class":42},[36,140851,134470],{"class":405},[36,140853,55724],{"class":2443},[36,140855,47],{"class":42},[36,140857,134477],{"class":405},[36,140859,134480],{"class":2443},[36,140861,47],{"class":42},[36,140863,134485],{"class":405},[36,140865,51784],{"class":42},[596,140867,140869],{"id":140868},"_1612-推荐模块制作","16.1.2 推荐模块制作",[519,140871],{"style":126809,"src":140872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140874,140875,140876,140879],{},"大盒子 ",[33,140877,140878],{},"recom"," 推荐模块 recommend",[1620,140881,140882],{},[582,140883,140884,140885,140887,140888,140891],{},"给这个 ",[33,140886,140878],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,140889,140890],{},"#ebebeb","），设置距离上边 12px",[19,140893,140323],{},[26,140895,140897],{"className":126953,"code":140896,"language":126955,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,140898,140899,140905,140916],{"__ignoreMap":31},[36,140900,140901,140903],{"class":38,"line":39},[36,140902,52088],{"class":51777},[36,140904,16052],{"class":42},[36,140906,140907,140909,140911,140914],{"class":38,"line":66},[36,140908,71355],{"class":53},[36,140910,51914],{"class":42},[36,140912,140913],{"class":53},"#f0f0f0",[36,140915,1774],{"class":42},[36,140917,140918],{"class":38,"line":73},[36,140919,2045],{"class":42},[19,140921,140412],{},[26,140923,140924],{"className":126953,"code":140896,"language":126955,"meta":31,"style":31},[33,140925,140926,140932,140942],{"__ignoreMap":31},[36,140927,140928,140930],{"class":38,"line":39},[36,140929,52088],{"class":51777},[36,140931,16052],{"class":42},[36,140933,140934,140936,140938,140940],{"class":38,"line":66},[36,140935,71355],{"class":53},[36,140937,51914],{"class":42},[36,140939,140913],{"class":53},[36,140941,1774],{"class":42},[36,140943,140944],{"class":38,"line":73},[36,140945,2045],{"class":42},[19,140947,140948],{},"里面包含 2 个盒子， 浮动即可",[19,140950,140323],{},[26,140952,140953],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,140954,140955,140961,140971],{"__ignoreMap":31},[36,140956,140957,140959],{"class":38,"line":39},[36,140958,130801],{"class":2443},[36,140960,16052],{"class":42},[36,140962,140963,140965,140967,140969],{"class":38,"line":66},[36,140964,131433],{"class":53},[36,140966,51914],{"class":42},[36,140968,24216],{"class":53},[36,140970,1774],{"class":42},[36,140972,140973],{"class":38,"line":73},[36,140974,2045],{"class":42},[19,140976,140977,140978],{},"1 号盒子 ",[33,140979,140980],{},"recom_hd",[1620,140982,140983,140986],{},[582,140984,140985],{},"设置宽度205px，高度163px",[582,140987,140457,140988,140990],{},[33,140989,519],{},"标签，插入图片即可",[19,140992,140323],{},[26,140994,140995],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,140996,140997],{"__ignoreMap":31},[36,140998,140999,141001,141003,141005,141007,141009,141011,141013,141015,141017,141019,141021],{"class":38,"line":39},[36,141000,1523],{"class":42},[36,141002,519],{"class":51777},[36,141004,55716],{"class":2443},[36,141006,47],{"class":42},[36,141008,134470],{"class":405},[36,141010,55724],{"class":2443},[36,141012,47],{"class":42},[36,141014,134477],{"class":405},[36,141016,134480],{"class":2443},[36,141018,47],{"class":42},[36,141020,134485],{"class":405},[36,141022,51784],{"class":42},[19,141024,140412],{},[26,141026,141027],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,141028,141029],{"__ignoreMap":31},[36,141030,141031,141033,141035,141037,141039,141041,141043,141045,141047,141049,141051,141053],{"class":38,"line":39},[36,141032,1523],{"class":42},[36,141034,519],{"class":51777},[36,141036,55716],{"class":2443},[36,141038,47],{"class":42},[36,141040,134470],{"class":405},[36,141042,55724],{"class":2443},[36,141044,47],{"class":42},[36,141046,134477],{"class":405},[36,141048,134480],{"class":2443},[36,141050,47],{"class":42},[36,141052,134485],{"class":405},[36,141054,51784],{"class":42},[19,141056,141057,141058,141061],{},"2 号盒子 ",[33,141059,141060],{},"recom_bd"," ，注意里面的小竖线",[1620,141063,141064,141075,141078,141083,141088],{},[582,141065,141066,141067,141069,141070,141072,141073],{},"右侧结构里面放 ",[33,141068,1620],{}," 包含 4个 ",[33,141071,582],{},"，每个li里面包含一个",[33,141074,519],{},[582,141076,141077],{},"直接利用切片工具把里面的内容当成一张图片",[582,141079,139453,141080,141082],{},[33,141081,582],{}," 设置浮动",[582,141084,139453,141085,141087],{},[33,141086,519],{}," 设置宽高，宽度 248px，高度 163px",[582,141089,141090,141091,140651,141094,141096,141097,141099,141100],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,141092,141093],{},"top 10px",[33,141095,582],{},"设置相对定位（注意，最后一个",[33,141098,582],{},"不用设置伪元素），可以利用 ",[33,141101,141102],{},"nth-child(-n+3){...}",[19,141104,140323],{},[26,141106,141107],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,141108,141109,141117,141127,141137],{"__ignoreMap":31},[36,141110,141111,141113,141115],{"class":38,"line":39},[36,141112,52088],{"class":51777},[36,141114,137954],{"class":2443},[36,141116,16052],{"class":42},[36,141118,141119,141121,141123,141125],{"class":38,"line":66},[36,141120,137961],{"class":53},[36,141122,51914],{"class":42},[36,141124,8132],{"class":405},[36,141126,1774],{"class":42},[36,141128,141129,141131,141133,141135],{"class":38,"line":73},[36,141130,128569],{"class":53},[36,141132,51914],{"class":42},[36,141134,61346],{"class":53},[36,141136,1774],{"class":42},[36,141138,141139],{"class":38,"line":79},[36,141140,2045],{"class":42},[19,141142,140412],{},[26,141144,141145],{"className":126953,"code":138795,"language":126955,"meta":31,"style":31},[33,141146,141147,141155,141165,141175],{"__ignoreMap":31},[36,141148,141149,141151,141153],{"class":38,"line":39},[36,141150,52088],{"class":51777},[36,141152,137954],{"class":2443},[36,141154,16052],{"class":42},[36,141156,141157,141159,141161,141163],{"class":38,"line":66},[36,141158,137961],{"class":53},[36,141160,51914],{"class":42},[36,141162,8132],{"class":405},[36,141164,1774],{"class":42},[36,141166,141167,141169,141171,141173],{"class":38,"line":73},[36,141168,128569],{"class":53},[36,141170,51914],{"class":42},[36,141172,61346],{"class":53},[36,141174,1774],{"class":42},[36,141176,141177],{"class":38,"line":79},[36,141178,2045],{"class":42},[596,141180,141182],{"id":141181},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[519,141184],{"style":126809,"src":141185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141187,141188],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141190,141191],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141193,141194,141197],{},[33,141195,141196],{},"box_hd"," 制作",[19,141199,140977,141200,141202],{},[33,141201,141196],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[519,141204],{"style":126809,"src":141205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1620,141207,141208,141213,141218,141221],{},[582,141209,141210,141212],{},[33,141211,141196],{}," 给 30px 的高度，2个像素的下边框",[582,141214,141215,141216],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,141217,139464],{},[582,141219,141220],{},"左侧盒左浮动，右侧盒子右浮动",[582,141222,141223,141225,141226,141228],{},[33,141224,43],{},"标签之间的距离用左右的",[33,141227,31361],{},"撑开即可",[19,141230,141231],{},"结构代码",[26,141233,141234],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,141235,141236,141242,141252],{"__ignoreMap":31},[36,141237,141238,141240],{"class":38,"line":39},[36,141239,130801],{"class":2443},[36,141241,16052],{"class":42},[36,141243,141244,141246,141248,141250],{"class":38,"line":66},[36,141245,131433],{"class":53},[36,141247,51914],{"class":42},[36,141249,24216],{"class":53},[36,141251,1774],{"class":42},[36,141253,141254],{"class":38,"line":73},[36,141255,2045],{"class":42},[19,141257,141258],{},"样式代码",[26,141260,141261],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,141262,141263,141269,141279],{"__ignoreMap":31},[36,141264,141265,141267],{"class":38,"line":39},[36,141266,130801],{"class":2443},[36,141268,16052],{"class":42},[36,141270,141271,141273,141275,141277],{"class":38,"line":66},[36,141272,131433],{"class":53},[36,141274,51914],{"class":42},[36,141276,24216],{"class":53},[36,141278,1774],{"class":42},[36,141280,141281],{"class":38,"line":73},[36,141282,2045],{"class":42},[19,141284,141285,141197],{},[33,141286,141287],{},"box_bd",[19,141289,141290],{},"2 号盒子 box_bd，不要给高度",[519,141292],{"style":126809,"src":141293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141295,141296],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141298,141299],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141301,141302],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1620,141304,141305,141317,141333],{},[582,141306,141307,141309,141310,141313,141314,141316],{},[33,141308,141287],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,141311,141312],{},"tab_content","，在",[33,141315,141312],{}," 里面包裹tab选项卡对应的内容",[582,141318,141319,141320,141323,141324,141326,141327,141329,141330,141332],{},"内容被一个大盒子包裹（",[33,141321,141322],{},"tab_list_item","），里面是 ",[33,141325,1620],{}," 包裹 5个 ",[33,141328,582],{},"，每个",[33,141331,582],{},"设置对应的宽度，然后设置浮动",[582,141334,141335,141336,141338,141339,141341,141342],{},"而这5个",[33,141337,582],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,141340,582],{},"设置",[1620,141343,141344,141362,141365],{},[582,141345,141346,141347,141349,141350,141352,141353,141355,141356,141358,141359,141361],{},"第一个小 ",[33,141348,582],{}," 分为上下结构，上面是 ",[33,141351,1620],{}," 包裹 ",[33,141354,582],{}," ，",[33,141357,582],{},"里面包裹 ",[33,141360,43],{},"，下面插入一张图片",[582,141363,141364],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[582,141366,141367,141368,141370,141371,141373,141374,141376],{},"后面的小 ",[33,141369,582],{}," 里面先放一个",[33,141372,43],{},"标签，然后在",[33,141375,43],{},"标签里面插入图片即可",[19,141378,141231],{},[26,141380,141381],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,141382,141383],{"__ignoreMap":31},[36,141384,141385,141387,141389,141391,141393,141395,141397,141399,141401,141403,141405,141407],{"class":38,"line":39},[36,141386,1523],{"class":42},[36,141388,519],{"class":51777},[36,141390,55716],{"class":2443},[36,141392,47],{"class":42},[36,141394,134470],{"class":405},[36,141396,55724],{"class":2443},[36,141398,47],{"class":42},[36,141400,134477],{"class":405},[36,141402,134480],{"class":2443},[36,141404,47],{"class":42},[36,141406,134485],{"class":405},[36,141408,51784],{"class":42},[19,141410,141258],{},[26,141412,141413],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,141414,141415],{"__ignoreMap":31},[36,141416,141417,141419,141421,141423,141425,141427,141429,141431,141433,141435,141437,141439],{"class":38,"line":39},[36,141418,1523],{"class":42},[36,141420,519],{"class":51777},[36,141422,55716],{"class":2443},[36,141424,47],{"class":42},[36,141426,134470],{"class":405},[36,141428,55724],{"class":2443},[36,141430,47],{"class":42},[36,141432,134477],{"class":405},[36,141434,134480],{"class":2443},[36,141436,47],{"class":42},[36,141438,134485],{"class":405},[36,141440,51784],{"class":42},[19,141442,141443],{},"tab栏切换需求！！！！！！介绍：",[519,141445],{"style":126809,"src":141446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1620,141448,141449,141457,141463,141466],{},[582,141450,141451,141454,141455],{},[33,141452,141453],{},"tab","栏的布局是 ",[33,141456,139464],{},[582,141458,141459,141460,141462],{},"有多少个",[33,141461,141453],{},"选项卡，那么对应就有多少个内容",[582,141464,141465],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[582,141467,141468,141469,141472,141473,141475,141476,141478],{},"等后面我们学习了",[33,141470,141471],{},"js","之后，我们就会配合",[33,141474,141471],{},"来实现，",[33,141477,141453],{},"栏的切换",[14,141480,141482],{"id":141481},"_162-列表制作","16.2 列表制作",[596,141484,141486],{"id":141485},"_1621-准备工作","16.2.1 准备工作",[1620,141488,141489,141492,141495,141498],{},[582,141490,141491],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[582,141493,141494],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[582,141496,141497],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[582,141499,141500],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[596,141502,141504,141505,101419,141507,141509],{"id":141503},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,141506,131958],{},[33,141508,54190],{}," 修改",[519,141511],{"style":126809,"src":141512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1620,141514,141515],{},[582,141516,141517],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141519,140323],{},[26,141521,141522],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,141523,141524,141528,141542,141546,141560,141564,141578,141582,141596,141600],{"__ignoreMap":31},[36,141525,141526],{"class":38,"line":39},[36,141527,132392],{"class":69},[36,141529,141530,141532,141534,141536,141538,141540],{"class":38,"line":66},[36,141531,132397],{"class":2443},[36,141533,80284],{"class":42},[36,141535,129313],{"class":53},[36,141537,51914],{"class":42},[36,141539,132406],{"class":53},[36,141541,129883],{"class":42},[36,141543,141544],{"class":38,"line":73},[36,141545,132413],{"class":69},[36,141547,141548,141550,141552,141554,141556,141558],{"class":38,"line":79},[36,141549,132418],{"class":2443},[36,141551,80284],{"class":42},[36,141553,129313],{"class":53},[36,141555,51914],{"class":42},[36,141557,55241],{"class":53},[36,141559,129883],{"class":42},[36,141561,141562],{"class":38,"line":85},[36,141563,132433],{"class":69},[36,141565,141566,141568,141570,141572,141574,141576],{"class":38,"line":419},[36,141567,132438],{"class":2443},[36,141569,80284],{"class":42},[36,141571,129313],{"class":53},[36,141573,51914],{"class":42},[36,141575,55308],{"class":53},[36,141577,129883],{"class":42},[36,141579,141580],{"class":38,"line":425},[36,141581,132453],{"class":69},[36,141583,141584,141586,141588,141590,141592,141594],{"class":38,"line":431},[36,141585,132458],{"class":2443},[36,141587,80284],{"class":42},[36,141589,129313],{"class":53},[36,141591,51914],{"class":42},[36,141593,86710],{"class":53},[36,141595,129883],{"class":42},[36,141597,141598],{"class":38,"line":437},[36,141599,132473],{"class":69},[36,141601,141602,141604,141606,141608,141610,141612],{"class":38,"line":443},[36,141603,132478],{"class":2443},[36,141605,80284],{"class":42},[36,141607,129313],{"class":53},[36,141609,51914],{"class":42},[36,141611,132487],{"class":53},[36,141613,129883],{"class":42},[19,141615,140412],{},[26,141617,141618],{"className":126953,"code":132385,"language":126955,"meta":31,"style":31},[33,141619,141620,141624,141638,141642,141656,141660,141674,141678,141692,141696],{"__ignoreMap":31},[36,141621,141622],{"class":38,"line":39},[36,141623,132392],{"class":69},[36,141625,141626,141628,141630,141632,141634,141636],{"class":38,"line":66},[36,141627,132397],{"class":2443},[36,141629,80284],{"class":42},[36,141631,129313],{"class":53},[36,141633,51914],{"class":42},[36,141635,132406],{"class":53},[36,141637,129883],{"class":42},[36,141639,141640],{"class":38,"line":73},[36,141641,132413],{"class":69},[36,141643,141644,141646,141648,141650,141652,141654],{"class":38,"line":79},[36,141645,132418],{"class":2443},[36,141647,80284],{"class":42},[36,141649,129313],{"class":53},[36,141651,51914],{"class":42},[36,141653,55241],{"class":53},[36,141655,129883],{"class":42},[36,141657,141658],{"class":38,"line":85},[36,141659,132433],{"class":69},[36,141661,141662,141664,141666,141668,141670,141672],{"class":38,"line":419},[36,141663,132438],{"class":2443},[36,141665,80284],{"class":42},[36,141667,129313],{"class":53},[36,141669,51914],{"class":42},[36,141671,55308],{"class":53},[36,141673,129883],{"class":42},[36,141675,141676],{"class":38,"line":425},[36,141677,132453],{"class":69},[36,141679,141680,141682,141684,141686,141688,141690],{"class":38,"line":431},[36,141681,132458],{"class":2443},[36,141683,80284],{"class":42},[36,141685,129313],{"class":53},[36,141687,51914],{"class":42},[36,141689,86710],{"class":53},[36,141691,129883],{"class":42},[36,141693,141694],{"class":38,"line":437},[36,141695,132473],{"class":69},[36,141697,141698,141700,141702,141704,141706,141708],{"class":38,"line":443},[36,141699,132478],{"class":2443},[36,141701,80284],{"class":42},[36,141703,129313],{"class":53},[36,141705,51914],{"class":42},[36,141707,132487],{"class":53},[36,141709,129883],{"class":42},[1620,141711,141712,141723],{},[582,141713,141714,141715,141718,141719,101419,141721],{},"1 号盒子左侧浮动 ",[33,141716,141717],{},"sk_list"," 里面包含 ",[33,141720,1620],{},[33,141722,582],{},[582,141724,141725,141726,141718,141729,101419,141731],{},"2 号盒子左侧浮动 ",[33,141727,141728],{},"sk_con",[33,141730,1620],{},[33,141732,582],{},[19,141734,140323],{},[26,141736,141737],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,141738,141739,141745,141755],{"__ignoreMap":31},[36,141740,141741,141743],{"class":38,"line":39},[36,141742,130801],{"class":2443},[36,141744,16052],{"class":42},[36,141746,141747,141749,141751,141753],{"class":38,"line":66},[36,141748,131433],{"class":53},[36,141750,51914],{"class":42},[36,141752,24216],{"class":53},[36,141754,1774],{"class":42},[36,141756,141757],{"class":38,"line":73},[36,141758,2045],{"class":42},[19,141760,140412],{},[26,141762,141763],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,141764,141765,141771,141781],{"__ignoreMap":31},[36,141766,141767,141769],{"class":38,"line":39},[36,141768,130801],{"class":2443},[36,141770,16052],{"class":42},[36,141772,141773,141775,141777,141779],{"class":38,"line":66},[36,141774,131433],{"class":53},[36,141776,51914],{"class":42},[36,141778,24216],{"class":53},[36,141780,1774],{"class":42},[36,141782,141783],{"class":38,"line":73},[36,141784,2045],{"class":42},[596,141786,141788,141789],{"id":141787},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,141790,141791],{},"sk_container",[519,141793],{"style":126809,"src":141794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1620,141796,141797,141802],{},[582,141798,140977,141799,141801],{},[33,141800,141791],{}," 给宽度 1200，不要给高度",[582,141803,141804],{},"一定不要忘记清除浮动",[19,141806,140323],{},[26,141808,141809],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,141810,141811,141817,141827],{"__ignoreMap":31},[36,141812,141813,141815],{"class":38,"line":39},[36,141814,130801],{"class":2443},[36,141816,16052],{"class":42},[36,141818,141819,141821,141823,141825],{"class":38,"line":66},[36,141820,131433],{"class":53},[36,141822,51914],{"class":42},[36,141824,24216],{"class":53},[36,141826,1774],{"class":42},[36,141828,141829],{"class":38,"line":73},[36,141830,2045],{"class":42},[579,141832,141833],{},[582,141834,141835],{},"sk_hd制作",[1620,141837,141838],{},[582,141839,141057,141840,141843],{},[33,141841,141842],{},"sk_hd"," ，插入图片即可",[19,141845,140323],{},[26,141847,141848],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,141849,141850],{"__ignoreMap":31},[36,141851,141852,141854,141856,141858,141860,141862,141864,141866,141868,141870,141872,141874],{"class":38,"line":39},[36,141853,1523],{"class":42},[36,141855,519],{"class":51777},[36,141857,55716],{"class":2443},[36,141859,47],{"class":42},[36,141861,134470],{"class":405},[36,141863,55724],{"class":2443},[36,141865,47],{"class":42},[36,141867,134477],{"class":405},[36,141869,134480],{"class":2443},[36,141871,47],{"class":42},[36,141873,134485],{"class":405},[36,141875,51784],{"class":42},[579,141877,141878],{"start":66},[582,141879,141880],{},"sk_bd制作",[1620,141882,141883],{},[582,141884,141885,141886,141889,141890,101419,141892,141894],{},"3 号盒子 ",[33,141887,141888],{},"sk_bd"," ，里面包含很多的 ",[33,141891,1620],{},[33,141893,582],{},[1620,141895,141896,141905],{},[582,141897,141898,141899,141901,141902,141904],{},"当鼠标移入到 ",[33,141900,582],{}," 上面的时候显示红色的边框，在这里先给 ",[33,141903,582],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[582,141906,141907,141908,141910,141911,141913,141914,141917,141918,141920],{},"由于给每个 ",[33,141909,582],{}," 都设置了外边距，导致一行的最后一个 ",[33,141912,582],{}," 掉了下来，在这里我们利用 ",[33,141915,141916],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,141919,582],{},"，去掉外边距就好了",[19,141922,140323],{},[26,141924,141925],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,141926,141927,141933,141945],{"__ignoreMap":31},[36,141928,141929,141931],{"class":38,"line":39},[36,141930,52088],{"class":51777},[36,141932,16052],{"class":42},[36,141934,141935,141937,141939,141941,141943],{"class":38,"line":66},[36,141936,70947],{"class":53},[36,141938,51914],{"class":42},[36,141940,812],{"class":53},[36,141942,52033],{"class":53},[36,141944,1774],{"class":42},[36,141946,141947],{"class":38,"line":73},[36,141948,2045],{"class":42},[19,141950,140412],{},[26,141952,141953],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,141954,141955,141961,141973],{"__ignoreMap":31},[36,141956,141957,141959],{"class":38,"line":39},[36,141958,52088],{"class":51777},[36,141960,16052],{"class":42},[36,141962,141963,141965,141967,141969,141971],{"class":38,"line":66},[36,141964,70947],{"class":53},[36,141966,51914],{"class":42},[36,141968,812],{"class":53},[36,141970,52033],{"class":53},[36,141972,1774],{"class":42},[36,141974,141975],{"class":38,"line":73},[36,141976,2045],{"class":42},[14,141978,141980],{"id":141979},"_163-注册页面制作","16.3 注册页面制作",[519,141982],{"style":126809,"src":141983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141985,141986,141988],{},[770,141987,9505],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[519,141990],{"style":126809,"src":141991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[596,141993,141995],{"id":141994},"_1631-准备工作","16.3.1 准备工作",[1620,141997,141998,142001],{},[582,141999,142000],{},"创建register.html，引入 base.css，引入favicon图标",[582,142002,142003],{},"创建register.css ，在html页面进行引入",[596,142005,142007,142008,142010],{"id":142006},"_1632-header-头部实现","16.3.2 ",[33,142009,131958],{}," 头部实现",[1620,142012,142013,142016],{},[582,142014,142015],{},"整个内容用 版心 进行包裹",[582,142017,142018],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142020,140323],{},[26,142022,142023],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,142024,142025],{"__ignoreMap":31},[36,142026,142027,142029,142031,142033,142035,142037,142039,142041,142043,142045,142047,142049],{"class":38,"line":39},[36,142028,1523],{"class":42},[36,142030,519],{"class":51777},[36,142032,55716],{"class":2443},[36,142034,47],{"class":42},[36,142036,134470],{"class":405},[36,142038,55724],{"class":2443},[36,142040,47],{"class":42},[36,142042,134477],{"class":405},[36,142044,134480],{"class":2443},[36,142046,47],{"class":42},[36,142048,134485],{"class":405},[36,142050,51784],{"class":42},[19,142052,140412],{},[26,142054,142055],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,142056,142057],{"__ignoreMap":31},[36,142058,142059,142061,142063,142065,142067,142069,142071,142073,142075,142077,142079,142081],{"class":38,"line":39},[36,142060,1523],{"class":42},[36,142062,519],{"class":51777},[36,142064,55716],{"class":2443},[36,142066,47],{"class":42},[36,142068,134470],{"class":405},[36,142070,55724],{"class":2443},[36,142072,47],{"class":42},[36,142074,134477],{"class":405},[36,142076,134480],{"class":2443},[36,142078,47],{"class":42},[36,142080,134485],{"class":405},[36,142082,51784],{"class":42},[596,142084,142086,142087,142090],{"id":142085},"_1633-registerarea-主体模块实现","16.3.3 ",[33,142088,142089],{},"registerarea"," 主体模块实现",[519,142092],{"style":126809,"src":142093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142095,142096],{},"整个大盒子 高度为 522px，设置4个边框",[19,142098,140323],{},[26,142100,142101],{"className":126953,"code":131110,"language":126955,"meta":31,"style":31},[33,142102,142103,142109,142125],{"__ignoreMap":31},[36,142104,142105,142107],{"class":38,"line":39},[36,142106,52088],{"class":51777},[36,142108,16052],{"class":42},[36,142110,142111,142113,142115,142117,142119,142121,142123],{"class":38,"line":66},[36,142112,71373],{"class":53},[36,142114,51914],{"class":42},[36,142116,54],{"class":53},[36,142118,51969],{"class":46},[36,142120,51998],{"class":53},[36,142122,130345],{"class":53},[36,142124,1774],{"class":42},[36,142126,142127],{"class":38,"line":73},[36,142128,2045],{"class":42},[19,142130,140412],{},[26,142132,142133],{"className":126953,"code":131110,"language":126955,"meta":31,"style":31},[33,142134,142135,142141,142157],{"__ignoreMap":31},[36,142136,142137,142139],{"class":38,"line":39},[36,142138,52088],{"class":51777},[36,142140,16052],{"class":42},[36,142142,142143,142145,142147,142149,142151,142153,142155],{"class":38,"line":66},[36,142144,71373],{"class":53},[36,142146,51914],{"class":42},[36,142148,54],{"class":53},[36,142150,51969],{"class":46},[36,142152,51998],{"class":53},[36,142154,130345],{"class":53},[36,142156,1774],{"class":42},[36,142158,142159],{"class":38,"line":73},[36,142160,2045],{"class":42},[19,142162,142163],{},"1号盒子 是一个 h3 标签，放标题",[1620,142165,142166],{},[582,142167,142168],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142170,140323],{},[26,142172,142173],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,142174,142175,142181,142191],{"__ignoreMap":31},[36,142176,142177,142179],{"class":38,"line":39},[36,142178,130801],{"class":2443},[36,142180,16052],{"class":42},[36,142182,142183,142185,142187,142189],{"class":38,"line":66},[36,142184,131433],{"class":53},[36,142186,51914],{"class":42},[36,142188,24216],{"class":53},[36,142190,1774],{"class":42},[36,142192,142193],{"class":38,"line":73},[36,142194,2045],{"class":42},[19,142196,140412],{},[26,142198,142199],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,142200,142201,142207,142217],{"__ignoreMap":31},[36,142202,142203,142205],{"class":38,"line":39},[36,142204,130801],{"class":2443},[36,142206,16052],{"class":42},[36,142208,142209,142211,142213,142215],{"class":38,"line":66},[36,142210,131433],{"class":53},[36,142212,51914],{"class":42},[36,142214,24216],{"class":53},[36,142216,1774],{"class":42},[36,142218,142219],{"class":38,"line":73},[36,142220,2045],{"class":42},[19,142222,142223],{},"2号盒子 里面放注册的内容",[1620,142225,142226,142229,142238,142252,142265,142268,142271,142289,142303],{},[582,142227,142228],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[582,142230,142231,142232,142234,142235,142237],{},"里面的内容利用 ",[33,142233,1620],{}," 包含 ",[33,142236,582],{}," 来实现的（不需要用表格）",[582,142239,139467,142240,142242,142243,142245,142246,142248,142249,142251],{},[33,142241,582],{}," 里面，左侧放 ",[33,142244,34085],{}," 标签， 中间放",[33,142247,54298],{}," 标签， 右侧放 ",[33,142250,36],{}," 提示信息",[582,142253,142254,142255,142257,142258,142260,142261,142264],{},"左侧 ",[33,142256,34085],{},"里面的文字都是右对齐，我们可以给",[33,142259,34085],{},"设置一个宽度（88px），然后利用",[33,142262,142263],{},"text-align"," 来设置右对齐",[582,142266,142267],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[582,142269,142270],{},"右侧 span修饰一下文字颜色",[582,142272,142273,142274],{},"提示信息的样式优化",[1620,142275,142276,142279,142282],{},[582,142277,142278],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[582,142280,142281],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[582,142283,142284,142285,142288],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,142286,142287],{},"vertical-algin"," 来设置 图片与文字对齐方式",[582,142290,142291,142292],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1620,142293,142294,142300],{},[582,142295,142296,142297,142299],{},"设置 ",[33,142298,24033],{}," 的 左右 12px 的内边距，设置一下文字颜色",[582,142301,142302],{},"分别设置 背景颜色",[582,142304,142305,142306,142308],{},"同意协议 和 完成注册 都是用 ",[33,142307,582],{}," 进行包裹",[19,142310,140323],{},[26,142312,142313],{"className":126953,"code":140896,"language":126955,"meta":31,"style":31},[33,142314,142315,142321,142331],{"__ignoreMap":31},[36,142316,142317,142319],{"class":38,"line":39},[36,142318,52088],{"class":51777},[36,142320,16052],{"class":42},[36,142322,142323,142325,142327,142329],{"class":38,"line":66},[36,142324,71355],{"class":53},[36,142326,51914],{"class":42},[36,142328,140913],{"class":53},[36,142330,1774],{"class":42},[36,142332,142333],{"class":38,"line":73},[36,142334,2045],{"class":42},[19,142336,140412],{},[26,142338,142339],{"className":126953,"code":140896,"language":126955,"meta":31,"style":31},[33,142340,142341,142347,142357],{"__ignoreMap":31},[36,142342,142343,142345],{"class":38,"line":39},[36,142344,52088],{"class":51777},[36,142346,16052],{"class":42},[36,142348,142349,142351,142353,142355],{"class":38,"line":66},[36,142350,71355],{"class":53},[36,142352,51914],{"class":42},[36,142354,140913],{"class":53},[36,142356,1774],{"class":42},[36,142358,142359],{"class":38,"line":73},[36,142360,2045],{"class":42},[596,142362,142364],{"id":142363},"_1634-底部实现","16.3.4 底部实现",[19,142366,140323],{},[26,142368,142369],{"className":126953,"code":140896,"language":126955,"meta":31,"style":31},[33,142370,142371,142377,142387],{"__ignoreMap":31},[36,142372,142373,142375],{"class":38,"line":39},[36,142374,52088],{"class":51777},[36,142376,16052],{"class":42},[36,142378,142379,142381,142383,142385],{"class":38,"line":66},[36,142380,71355],{"class":53},[36,142382,51914],{"class":42},[36,142384,140913],{"class":53},[36,142386,1774],{"class":42},[36,142388,142389],{"class":38,"line":73},[36,142390,2045],{"class":42},[19,142392,140412],{},[26,142394,142395],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,142396,142397,142401,142415,142419],{"__ignoreMap":31},[36,142398,142399],{"class":38,"line":39},[36,142400,131064],{"class":69},[36,142402,142403,142405,142407,142409,142411,142413],{"class":38,"line":66},[36,142404,1523],{"class":42},[36,142406,52088],{"class":51777},[36,142408,53963],{"class":2443},[36,142410,47],{"class":42},[36,142412,131077],{"class":405},[36,142414,51784],{"class":42},[36,142416,142417],{"class":38,"line":73},[36,142418,131084],{"class":42},[36,142420,142421,142423,142425],{"class":38,"line":79},[36,142422,52262],{"class":42},[36,142424,52088],{"class":51777},[36,142426,51784],{"class":42},[14,142428,142430],{"id":142429},"_164-项目总结","16.4 项目总结",[579,142432,142433,142436,142439,142442],{},[582,142434,142435],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[582,142437,142438],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[582,142440,142441],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[582,142443,142444],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[519,142446],{"style":126809,"src":142447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[579,142449,142450],{"start":85},[582,142451,142452],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[519,142454],{"style":126809,"src":142455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[579,142457,142458],{"start":419},[582,142459,142460],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[519,142462],{"style":126809,"src":142463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,142465,142466],{"className":127700,"code":137110,"language":127702,"meta":31,"style":31},[33,142467,142468],{"__ignoreMap":31},[36,142469,142470,142472,142474,142476,142478,142480,142482,142484,142486,142488,142490,142492],{"class":38,"line":39},[36,142471,1523],{"class":42},[36,142473,54298],{"class":51777},[36,142475,54301],{"class":2443},[36,142477,47],{"class":42},[36,142479,63176],{"class":405},[36,142481,15400],{"class":2443},[36,142483,47],{"class":42},[36,142485,137131],{"class":405},[36,142487,61497],{"class":2443},[36,142489,47],{"class":42},[36,142491,137138],{"class":405},[36,142493,51784],{"class":42},[579,142495,142496,142499],{"start":425},[582,142497,142498],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[582,142500,142501],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[539,142503,142504],{},"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":31,"searchDepth":66,"depth":66,"links":142506},[142507,142512,142519,142527],{"id":140133,"depth":66,"text":140134,"children":142508},[142509,142510,142511],{"id":140137,"depth":73,"text":140138},{"id":140868,"depth":73,"text":140869},{"id":141181,"depth":73,"text":141182},{"id":141481,"depth":66,"text":141482,"children":142513},[142514,142515,142517],{"id":141485,"depth":73,"text":141486},{"id":141503,"depth":73,"text":142516},"16.2.2 列表页 header 和 nav 修改",{"id":141787,"depth":73,"text":142518},"16.2.3 列表页主体 sk_container",{"id":141979,"depth":66,"text":141980,"children":142520},[142521,142522,142524,142526],{"id":141994,"depth":73,"text":141995},{"id":142006,"depth":73,"text":142523},"16.3.2 header 头部实现",{"id":142085,"depth":73,"text":142525},"16.3.3 registerarea 主体模块实现",{"id":142363,"depth":73,"text":142364},{"id":142429,"depth":66,"text":142430},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140125,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142534,"title":142535,"body":142536,"description":550,"extension":551,"meta":142644,"navigation":553,"path":142645,"seo":142646,"stem":142647,"__hash__":142648},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142537,"toc":142639},[142538,142541,142545,142548,142551,142560,142569,142573,142578,142585,142603,142606,142609,142612,142615,142618,142621,142624,142627,142630,142633,142636],[10,142539,142535],{"id":142540},"_17-web服务器与网站发布",[14,142542,142544],{"id":142543},"_171-web服务器","17.1 Web服务器",[19,142546,142547],{},"把自己网站上传到服务器上，可以让其他人访问",[519,142549],{"style":126809,"src":142550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142552,142553,142556,142557],{},[770,142554,142555],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[770,142558,142559],{},"Web 服务器等",[19,142561,142562,142563,101419,142566,26221],{},"根据服务器在网络中所在的位置不同，又可分为 ",[770,142564,142565],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[770,142567,142568],{},"远程服务器",[596,142570,142572],{"id":142571},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142574,142575],{},[770,142576,142577],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142579,142580,142581],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[43,142582,142583],{"href":142583,"rel":142584},"http:\u002F\u002Ffree.3v.do\u002F",[24345],[1620,142586,142587,142590,142593,142600],{},[582,142588,142589],{},"去免费空间网站注册账号。",[582,142591,142592],{},"记录下主机名、用户名、密码、域名。",[582,142594,142595,142596,142599],{},"利用 ",[33,142597,142598],{},"utftp"," 软件 上传网站到远程服务器",[582,142601,142602],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142604,142605],{},"使用软件上传，对上传软件文件进行解压",[519,142607],{"style":126809,"src":142608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[519,142610],{"style":126809,"src":142611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142613,142614],{},"输入刚刚申请的服务器账号信息：",[519,142616],{"style":126809,"src":142617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[519,142619],{"style":126809,"src":142620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[519,142622],{"style":126809,"src":142623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[519,142625],{"style":126809,"src":142626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142628,142629],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[519,142631],{"style":126809,"src":142632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142634,142635],{},"浏览器输入域名即可访问",[19,142637,142638],{},"首页一定必须是index",{"title":31,"searchDepth":66,"depth":66,"links":142640},[142641],{"id":142543,"depth":66,"text":142544,"children":142642},[142643],{"id":142571,"depth":73,"text":142572},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142535,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142650,"title":142651,"body":142652,"description":550,"extension":551,"meta":143579,"navigation":553,"path":143580,"seo":143581,"stem":143582,"__hash__":143583},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142653,"toc":143562},[142654,142657,142661,142664,142667,142678,142681,142685,142689,142694,142697,142700,142703,142706,142710,142736,142740,142744,142747,142750,142754,142787,142791,142794,142797,142861,142865,142869,142872,142875,142878,142882,142927,142931,142934,142964,142968,142972,142975,142978,142982,142985,143054,143057,143165,143167,143173,143177,143180,143183,143279,143282,143286,143310,143314,143317,143321,143324,143328,143331,143334,143337,143340,143344,143347,143350,143354,143358,143361,143364,143367,143370,143374,143377,143381,143384,143387,143432,143436,143440,143443,143446,143449,143481,143485,143488,143522,143526,143529,143559],[10,142655,142651],{"id":142656},"_18-2d动画与3d转换",[14,142658,142660],{"id":142659},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142662,142663],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142665,142666],{},"转换（transform）你可以简单理解为变形",[1620,142668,142669,142672,142675],{},[582,142670,142671],{},"移动：translate",[582,142673,142674],{},"旋转：rotate",[582,142676,142677],{},"缩放：scale",[519,142679],{"style":126809,"src":142680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[596,142682,142684],{"id":142683},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22478,142686,142688],{"id":142687},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142690,142691,142692],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[770,142693,133612],{},[519,142695],{"style":126809,"src":142696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142698,142699],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142701,142702],{},"对于行内元素无效",[19,142704,142705],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22478,142707,142709],{"id":142708},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,142711,142712],{"className":126953,"code":139142,"language":126955,"meta":31,"style":31},[33,142713,142714,142720,142732],{"__ignoreMap":31},[36,142715,142716,142718],{"class":38,"line":39},[36,142717,52088],{"class":51777},[36,142719,16052],{"class":42},[36,142721,142722,142724,142726,142728,142730],{"class":38,"line":66},[36,142723,70947],{"class":53},[36,142725,51914],{"class":42},[36,142727,812],{"class":53},[36,142729,52033],{"class":53},[36,142731,1774],{"class":42},[36,142733,142734],{"class":38,"line":73},[36,142735,2045],{"class":42},[596,142737,142739],{"id":142738},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22478,142741,142743],{"id":142742},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142745,142746],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[519,142748],{"style":126809,"src":142749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22478,142751,142753],{"id":142752},"_18122-旋转效果","18.1.2.2 旋转效果",[26,142755,142757],{"className":126953,"code":142756,"language":126955,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,142758,142759,142765,142783],{"__ignoreMap":31},[36,142760,142761,142763],{"class":38,"line":39},[36,142762,52088],{"class":51777},[36,142764,16052],{"class":42},[36,142766,142767,142769,142771,142774,142776,142778,142781],{"class":38,"line":66},[36,142768,136937],{"class":53},[36,142770,51914],{"class":42},[36,142772,142773],{"class":53},"rotate",[36,142775,345],{"class":42},[36,142777,1143],{"class":53},[36,142779,142780],{"class":46},"deg",[36,142782,3199],{"class":42},[36,142784,142785],{"class":38,"line":73},[36,142786,2045],{"class":42},[22478,142788,142790],{"id":142789},"_18123-三角做法","18.1.2.3 三角做法",[19,142792,142793],{},"该下标当经过最外层大盒子时会实现向上反转",[519,142795],{"style":126809,"src":142796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,142798,142799],{"className":126953,"code":135473,"language":126955,"meta":31,"style":31},[33,142800,142801,142805,142811,142821,142831,142847,142857],{"__ignoreMap":31},[36,142802,142803],{"class":38,"line":39},[36,142804,135480],{"class":69},[36,142806,142807,142809],{"class":38,"line":66},[36,142808,135485],{"class":2443},[36,142810,16052],{"class":42},[36,142812,142813,142815,142817,142819],{"class":38,"line":73},[36,142814,71045],{"class":53},[36,142816,51914],{"class":42},[36,142818,812],{"class":53},[36,142820,1774],{"class":42},[36,142822,142823,142825,142827,142829],{"class":38,"line":79},[36,142824,71265],{"class":53},[36,142826,51914],{"class":42},[36,142828,812],{"class":53},[36,142830,1774],{"class":42},[36,142832,142833,142835,142837,142839,142841,142843,142845],{"class":38,"line":85},[36,142834,71373],{"class":53},[36,142836,51914],{"class":42},[36,142838,1062],{"class":53},[36,142840,51969],{"class":46},[36,142842,51998],{"class":53},[36,142844,64468],{"class":53},[36,142846,1774],{"class":42},[36,142848,142849,142851,142853,142855],{"class":38,"line":419},[36,142850,135528],{"class":53},[36,142852,51914],{"class":42},[36,142854,62846],{"class":53},[36,142856,1774],{"class":42},[36,142858,142859],{"class":38,"line":425},[36,142860,2045],{"class":42},[596,142862,142864],{"id":142863},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22478,142866,142868],{"id":142867},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142870,142871],{},"设置中心点",[519,142873],{"style":126809,"src":142874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142876,142877],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22478,142879,142881],{"id":142880},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,142883,142885],{"className":126953,"code":142884,"language":126955,"meta":31,"style":31},"\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",[33,142886,142887,142892,142898,142913,142918,142923],{"__ignoreMap":31},[36,142888,142889],{"class":38,"line":39},[36,142890,142891],{"class":69},"\u002F* 转换中心点 *\u002F\n",[36,142893,142894,142896],{"class":38,"line":66},[36,142895,52088],{"class":51777},[36,142897,16052],{"class":42},[36,142899,142900,142903,142905,142907,142909,142911],{"class":38,"line":73},[36,142901,142902],{"class":53},"  transform-origin",[36,142904,51914],{"class":42},[36,142906,52069],{"class":53},[36,142908,17624],{"class":53},[36,142910,130816],{"class":42},[36,142912,135626],{"class":69},[36,142914,142915],{"class":38,"line":79},[36,142916,142917],{"class":69},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,142919,142920],{"class":38,"line":85},[36,142921,142922],{"class":69},"  \u002F* transform-origin: left top; *\u002F\n",[36,142924,142925],{"class":38,"line":419},[36,142926,2045],{"class":42},[22478,142928,142930],{"id":142929},"_18133-旋转案例","18.1.3.3 旋转案例",[519,142932],{"style":126809,"src":142933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,142935,142936],{"className":126953,"code":142756,"language":126955,"meta":31,"style":31},[33,142937,142938,142944,142960],{"__ignoreMap":31},[36,142939,142940,142942],{"class":38,"line":39},[36,142941,52088],{"class":51777},[36,142943,16052],{"class":42},[36,142945,142946,142948,142950,142952,142954,142956,142958],{"class":38,"line":66},[36,142947,136937],{"class":53},[36,142949,51914],{"class":42},[36,142951,142773],{"class":53},[36,142953,345],{"class":42},[36,142955,1143],{"class":53},[36,142957,142780],{"class":46},[36,142959,3199],{"class":42},[36,142961,142962],{"class":38,"line":73},[36,142963,2045],{"class":42},[596,142965,142967],{"id":142966},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22478,142969,142971],{"id":142970},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142973,142974],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[519,142976],{"style":126809,"src":142977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22478,142979,142981],{"id":142980},"_18142-分页按钮","18.1.4.2 分页按钮",[519,142983],{"style":126809,"src":142984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,142986,142988],{"className":126953,"code":142987,"language":126955,"meta":31,"style":31},"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",[33,142989,142990,142996,143012,143016,143020,143025,143031,143045,143050],{"__ignoreMap":31},[36,142991,142992,142994],{"class":38,"line":39},[36,142993,52088],{"class":51777},[36,142995,16052],{"class":42},[36,142997,142998,143000,143002,143005,143007,143010],{"class":38,"line":66},[36,142999,136937],{"class":53},[36,143001,51914],{"class":42},[36,143003,143004],{"class":53},"scale",[36,143006,345],{"class":42},[36,143008,143009],{"class":53},"1.2",[36,143011,3199],{"class":42},[36,143013,143014],{"class":38,"line":73},[36,143015,2045],{"class":42},[36,143017,143018],{"class":38,"line":79},[36,143019,136414],{"class":42},[36,143021,143022],{"class":38,"line":85},[36,143023,143024],{"class":69},"\u002F* 2D 缩放 *\u002F\n",[36,143026,143027,143029],{"class":38,"line":419},[36,143028,52088],{"class":51777},[36,143030,16052],{"class":42},[36,143032,143033,143035,143037,143039,143041,143043],{"class":38,"line":425},[36,143034,136937],{"class":53},[36,143036,51914],{"class":42},[36,143038,143004],{"class":53},[36,143040,345],{"class":42},[36,143042,143009],{"class":53},[36,143044,3199],{"class":42},[36,143046,143047],{"class":38,"line":431},[36,143048,143049],{"class":69},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,143051,143052],{"class":38,"line":437},[36,143053,2045],{"class":42},[19,143055,143056],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,143058,143060],{"className":126953,"code":143059,"language":126955,"meta":31,"style":31},"\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",[33,143061,143062,143067,143077,143098,143119,143123,143128,143134,143161],{"__ignoreMap":31},[36,143063,143064],{"class":38,"line":39},[36,143065,143066],{"class":69},"\u002F* 定义动画 *\u002F\n",[36,143068,143069,143072,143075],{"class":38,"line":66},[36,143070,143071],{"class":46},"@keyframes",[36,143073,143074],{"class":5696}," move",[36,143076,16052],{"class":42},[36,143078,143079,143082,143084,143086,143088,143091,143093,143095],{"class":38,"line":73},[36,143080,143081],{"class":2443},"  0%",[36,143083,80284],{"class":42},[36,143085,48611],{"class":53},[36,143087,51914],{"class":42},[36,143089,143090],{"class":53},"translateX",[36,143092,345],{"class":42},[36,143094,812],{"class":53},[36,143096,143097],{"class":42},"); }\n",[36,143099,143100,143103,143105,143107,143109,143111,143113,143115,143117],{"class":38,"line":79},[36,143101,143102],{"class":2443},"  100%",[36,143104,80284],{"class":42},[36,143106,48611],{"class":53},[36,143108,51914],{"class":42},[36,143110,143090],{"class":53},[36,143112,345],{"class":42},[36,143114,930],{"class":53},[36,143116,51969],{"class":46},[36,143118,143097],{"class":42},[36,143120,143121],{"class":38,"line":85},[36,143122,2045],{"class":42},[36,143124,143125],{"class":38,"line":419},[36,143126,143127],{"class":69},"\u002F* 调用动画 *\u002F\n",[36,143129,143130,143132],{"class":38,"line":425},[36,143131,52088],{"class":51777},[36,143133,16052],{"class":42},[36,143135,143136,143139,143141,143143,143145,143147,143149,143151,143153,143156,143159],{"class":38,"line":431},[36,143137,143138],{"class":53},"  animation",[36,143140,51914],{"class":42},[36,143142,135639],{"class":53},[36,143144,25599],{"class":53},[36,143146,1308],{"class":46},[36,143148,79157],{"class":53},[36,143150,4573],{"class":53},[36,143152,1308],{"class":46},[36,143154,143155],{"class":53}," infinite",[36,143157,143158],{"class":53}," alternate",[36,143160,1774],{"class":42},[36,143162,143163],{"class":38,"line":437},[36,143164,2045],{"class":42},[19,143166,143056],{},[26,143168,143171],{"className":143169,"code":143170,"language":5667},[5665],"\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",[33,143172,143170],{"__ignoreMap":31},[22478,143174,143176],{"id":143175},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143178,143179],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[519,143181],{"style":126809,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,143184,143185],{"className":126953,"code":143059,"language":126955,"meta":31,"style":31},[33,143186,143187,143191,143199,143217,143237,143241,143245,143251,143275],{"__ignoreMap":31},[36,143188,143189],{"class":38,"line":39},[36,143190,143066],{"class":69},[36,143192,143193,143195,143197],{"class":38,"line":66},[36,143194,143071],{"class":46},[36,143196,143074],{"class":5696},[36,143198,16052],{"class":42},[36,143200,143201,143203,143205,143207,143209,143211,143213,143215],{"class":38,"line":73},[36,143202,143081],{"class":2443},[36,143204,80284],{"class":42},[36,143206,48611],{"class":53},[36,143208,51914],{"class":42},[36,143210,143090],{"class":53},[36,143212,345],{"class":42},[36,143214,812],{"class":53},[36,143216,143097],{"class":42},[36,143218,143219,143221,143223,143225,143227,143229,143231,143233,143235],{"class":38,"line":79},[36,143220,143102],{"class":2443},[36,143222,80284],{"class":42},[36,143224,48611],{"class":53},[36,143226,51914],{"class":42},[36,143228,143090],{"class":53},[36,143230,345],{"class":42},[36,143232,930],{"class":53},[36,143234,51969],{"class":46},[36,143236,143097],{"class":42},[36,143238,143239],{"class":38,"line":85},[36,143240,2045],{"class":42},[36,143242,143243],{"class":38,"line":419},[36,143244,143127],{"class":69},[36,143246,143247,143249],{"class":38,"line":425},[36,143248,52088],{"class":51777},[36,143250,16052],{"class":42},[36,143252,143253,143255,143257,143259,143261,143263,143265,143267,143269,143271,143273],{"class":38,"line":431},[36,143254,143138],{"class":53},[36,143256,51914],{"class":42},[36,143258,135639],{"class":53},[36,143260,25599],{"class":53},[36,143262,1308],{"class":46},[36,143264,79157],{"class":53},[36,143266,4573],{"class":53},[36,143268,1308],{"class":46},[36,143270,143155],{"class":53},[36,143272,143158],{"class":53},[36,143274,1774],{"class":42},[36,143276,143277],{"class":38,"line":437},[36,143278,2045],{"class":42},[19,143280,143281],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[596,143283,143285],{"id":143284},"_1823-知识点回顾","18.2.3 知识点回顾",[26,143287,143288],{"className":126953,"code":129122,"language":126955,"meta":31,"style":31},[33,143289,143290,143296,143306],{"__ignoreMap":31},[36,143291,143292,143294],{"class":38,"line":39},[36,143293,52088],{"class":51777},[36,143295,16052],{"class":42},[36,143297,143298,143300,143302,143304],{"class":38,"line":66},[36,143299,129135],{"class":53},[36,143301,51914],{"class":42},[36,143303,62213],{"class":53},[36,143305,1774],{"class":42},[36,143307,143308],{"class":38,"line":73},[36,143309,2045],{"class":42},[14,143311,143313],{"id":143312},"_183-3d-转换","18.3 3D 转换",[19,143315,143316],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[596,143318,143320],{"id":143319},"_1831-坐标轴认识","18.3.1 坐标轴认识",[519,143322],{"style":126809,"src":143323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[596,143325,143327],{"id":143326},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[519,143329],{"style":126809,"src":143330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143332,143333],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143335,143336],{},"translate3d的效果需要搭配透视perspective来使用",[519,143338],{"style":126809,"src":143339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[596,143341,143343],{"id":143342},"_1833-透视-perspective","18.3.3 透视 perspective",[519,143345],{"style":126809,"src":143346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143348,143349],{},"透视写在父盒子上，单位为像素",[596,143351,143353],{"id":143352},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22478,143355,143357],{"id":143356},"_18341-分开解释","18.3.4.1 分开解释",[519,143359],{"style":126809,"src":143360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[519,143362],{"style":126809,"src":143363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[519,143365],{"style":126809,"src":143366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143368,143369],{},"总结来说就是左手原则",[22478,143371,143373],{"id":143372},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[519,143375],{"style":126809,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[596,143378,143380],{"id":143379},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[519,143382],{"style":126809,"src":143383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[519,143385],{"style":126809,"src":143386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,143388,143390],{"className":126953,"code":143389,"language":126955,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,143391,143392,143398,143411,143428],{"__ignoreMap":31},[36,143393,143394,143396],{"class":38,"line":39},[36,143395,52088],{"class":51777},[36,143397,16052],{"class":42},[36,143399,143400,143403,143405,143407,143409],{"class":38,"line":66},[36,143401,143402],{"class":53},"  perspective",[36,143404,51914],{"class":42},[36,143406,65551],{"class":53},[36,143408,51969],{"class":46},[36,143410,1774],{"class":42},[36,143412,143413,143415,143417,143420,143422,143424,143426],{"class":38,"line":73},[36,143414,136937],{"class":53},[36,143416,51914],{"class":42},[36,143418,143419],{"class":53},"rotateX",[36,143421,345],{"class":42},[36,143423,1143],{"class":53},[36,143425,142780],{"class":46},[36,143427,3199],{"class":42},[36,143429,143430],{"class":38,"line":79},[36,143431,2045],{"class":42},[596,143433,143435],{"id":143434},"_1836-案例","18.3.6 案例",[22478,143437,143439],{"id":143438},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[519,143441],{"style":126809,"src":143442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[519,143444],{"style":126809,"src":143445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[519,143447],{"style":126809,"src":143448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,143450,143452],{"className":126953,"code":143451,"language":126955,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,143453,143454,143459,143465,143477],{"__ignoreMap":31},[36,143455,143456],{"class":38,"line":39},[36,143457,143458],{"class":69},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,143460,143461,143463],{"class":38,"line":66},[36,143462,133950],{"class":2443},[36,143464,16052],{"class":42},[36,143466,143467,143469,143471,143473,143475],{"class":38,"line":73},[36,143468,143402],{"class":53},[36,143470,51914],{"class":42},[36,143472,65551],{"class":53},[36,143474,51969],{"class":46},[36,143476,1774],{"class":42},[36,143478,143479],{"class":38,"line":79},[36,143480,2045],{"class":42},[22478,143482,143484],{"id":143483},"_18362-3d导航栏","18.3.6.2 3D导航栏",[519,143486],{"style":126809,"src":143487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,143489,143490],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,143491,143492,143496,143510,143514],{"__ignoreMap":31},[36,143493,143494],{"class":38,"line":39},[36,143495,131064],{"class":69},[36,143497,143498,143500,143502,143504,143506,143508],{"class":38,"line":66},[36,143499,1523],{"class":42},[36,143501,52088],{"class":51777},[36,143503,53963],{"class":2443},[36,143505,47],{"class":42},[36,143507,131077],{"class":405},[36,143509,51784],{"class":42},[36,143511,143512],{"class":38,"line":73},[36,143513,131084],{"class":42},[36,143515,143516,143518,143520],{"class":38,"line":79},[36,143517,52262],{"class":42},[36,143519,52088],{"class":51777},[36,143521,51784],{"class":42},[22478,143523,143525],{"id":143524},"_18363-旋转木马","18.3.6.3 旋转木马",[519,143527],{"style":126809,"src":143528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,143530,143531],{"className":126953,"code":142756,"language":126955,"meta":31,"style":31},[33,143532,143533,143539,143555],{"__ignoreMap":31},[36,143534,143535,143537],{"class":38,"line":39},[36,143536,52088],{"class":51777},[36,143538,16052],{"class":42},[36,143540,143541,143543,143545,143547,143549,143551,143553],{"class":38,"line":66},[36,143542,136937],{"class":53},[36,143544,51914],{"class":42},[36,143546,142773],{"class":53},[36,143548,345],{"class":42},[36,143550,1143],{"class":53},[36,143552,142780],{"class":46},[36,143554,3199],{"class":42},[36,143556,143557],{"class":38,"line":73},[36,143558,2045],{"class":42},[539,143560,143561],{},"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":31,"searchDepth":66,"depth":66,"links":143563},[143564,143571],{"id":142659,"depth":66,"text":142660,"children":143565},[143566,143567,143568,143569,143570],{"id":142683,"depth":73,"text":142684},{"id":142738,"depth":73,"text":142739},{"id":142863,"depth":73,"text":142864},{"id":142966,"depth":73,"text":142967},{"id":143284,"depth":73,"text":143285},{"id":143312,"depth":66,"text":143313,"children":143572},[143573,143574,143575,143576,143577,143578],{"id":143319,"depth":73,"text":143320},{"id":143326,"depth":73,"text":143327},{"id":143342,"depth":73,"text":143343},{"id":143352,"depth":73,"text":143353},{"id":143379,"depth":73,"text":143380},{"id":143434,"depth":73,"text":143435},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142651,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143585,"title":143586,"body":143587,"description":550,"extension":551,"meta":143790,"navigation":553,"path":143791,"seo":143792,"stem":143793,"__hash__":143794},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143588,"toc":143779},[143589,143592,143596,143599,143602,143606,143609,143612,143615,143619,143622,143626,143629,143633,143636,143640,143654,143658,143683,143686,143689,143706,143710,143714,143717,143720,143724,143727,143730,143748,143752,143755,143769,143773,143776],[10,143590,143586],{"id":143591},"_19-移动端基础-前缀现状与视口",[14,143593,143595],{"id":143594},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[519,143597],{"style":126809,"src":143598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143600,143601],{},"意思就是加个前缀，增加兼容性",[14,143603,143605],{"id":143604},"_192-移动端现状认识","19.2 移动端现状认识",[519,143607],{"style":126809,"src":143608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143610,143611],{},"调试方法：",[519,143613],{"style":126809,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143616,143618],{"id":143617},"_193-视口","19.3 视口",[19,143620,143621],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[596,143623,143625],{"id":143624},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[519,143627],{"style":126809,"src":143628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[596,143630,143632],{"id":143631},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[519,143634],{"style":126809,"src":143635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[596,143637,143639],{"id":143638},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1620,143641,143642,143645,143648,143651],{},[582,143643,143644],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[582,143646,143647],{},"理想视口，对设备来讲，是最理想的视口尺寸",[582,143649,143650],{},"需要手动添写meta视口标签通知浏览器操作",[582,143652,143653],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[596,143655,143657],{"id":143656},"_1934-meta视口标签","19.3.4 meta视口标签",[26,143659,143661],{"className":127700,"code":143660,"language":127702,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,143662,143663],{"__ignoreMap":31},[36,143664,143665,143667,143669,143671,143673,143675,143677,143679,143681],{"class":38,"line":39},[36,143666,1523],{"class":42},[36,143668,51821],{"class":51777},[36,143670,15400],{"class":2443},[36,143672,47],{"class":42},[36,143674,51868],{"class":405},[36,143676,51848],{"class":2443},[36,143678,47],{"class":42},[36,143680,51875],{"class":405},[36,143682,51784],{"class":42},[519,143684],{"style":126809,"src":143685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143687,143688],{},"标准视口设置：",[579,143690,143691,143694,143697,143700,143703],{},[582,143692,143693],{},"视口宽度和设备保持一致",[582,143695,143696],{},"视口的默认缩放比例1.0",[582,143698,143699],{},"不允许用户自行缩放",[582,143701,143702],{},"最大允许的缩放比例1.0",[582,143704,143705],{},"最小允许的缩放比例1.0",[596,143707,143709],{"id":143708},"_1935-二倍图","19.3.5 二倍图",[22478,143711,143713],{"id":143712},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[519,143715],{"style":126809,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[519,143718],{"style":126809,"src":143719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22478,143721,143723],{"id":143722},"_19352-多倍图","19.3.5.2 多倍图",[519,143725],{"style":126809,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143728,143729],{},"二倍图法，代码如下：",[26,143731,143733],{"className":126953,"code":143732,"language":126955,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,143734,143735,143740],{"__ignoreMap":31},[36,143736,143737],{"class":38,"line":39},[36,143738,143739],{"class":69},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,143741,143742,143745],{"class":38,"line":66},[36,143743,143744],{"class":51777},"background-size",[36,143746,143747],{"class":42},": 50% 50%;\n",[22478,143749,143751],{"id":143750},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[519,143753],{"style":126809,"src":143754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[579,143756,143757,143760,143763,143766],{},[582,143758,143759],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[582,143761,143762],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[582,143764,143765],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[582,143767,143768],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22478,143770,143772],{"id":143771},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[519,143774],{"style":126809,"src":143775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[539,143777,143778],{},"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":31,"searchDepth":66,"depth":66,"links":143780},[143781,143782,143783],{"id":143594,"depth":66,"text":143595},{"id":143604,"depth":66,"text":143605},{"id":143617,"depth":66,"text":143618,"children":143784},[143785,143786,143787,143788,143789],{"id":143624,"depth":73,"text":143625},{"id":143631,"depth":73,"text":143632},{"id":143638,"depth":73,"text":143639},{"id":143656,"depth":73,"text":143657},{"id":143708,"depth":73,"text":143709},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143586,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143796,"title":143797,"body":143798,"description":550,"extension":551,"meta":144675,"navigation":553,"path":144676,"seo":144677,"stem":144678,"__hash__":144679},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143799,"toc":144659},[143800,143803,143807,143814,143817,143824,143827,143832,143835,143839,143843,143850,143853,143856,143860,143863,143866,143869,143872,143875,143879,143882,143886,143888,143891,143894,143897,143900,143902,143905,143907,143937,143939,143969,143973,143976,143980,143983,144000,144003,144006,144082,144084,144087,144090,144093,144096,144098,144101,144104,144108,144130,144133,144136,144140,144143,144149,144152,144156,144159,144162,144166,144169,144172,144175,144179,144182,144185,144188,144191,144195,144198,144202,144209,144212,144215,144218,144221,144231,144234,144237,144244,144247,144251,144254,144257,144261,144264,144267,144270,144315,144318,144321,144324,144326,144455,144457,144495,144498,144501,144503,144621,144623,144657],[10,143801,143797],{"id":143802},"_20-移动端布局实战上篇",[14,143804,143806],{"id":143805},"_201-移动端主流方案","20.1 移动端主流方案",[579,143808,143809],{},[582,143810,143811],{},[770,143812,143813],{},"单独移动端页面（主流）",[519,143815],{"style":126809,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[579,143818,143819],{"start":66},[582,143820,143821],{},[770,143822,143823],{},"响应式兼容PC移动端",[519,143825],{"style":126809,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[579,143828,143829],{"start":73},[582,143830,143831],{},"两种页面选型布局方式",[519,143833],{"style":126809,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143836,143838],{"id":143837},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[596,143840,143842],{"id":143841},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143844,143845,143846],{},"官网地址： ",[43,143847,143848],{"href":143848,"rel":143849},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24345],[519,143851],{"style":126809,"src":143852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[519,143854],{"style":126809,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[596,143857,143859],{"id":143858},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[519,143861],{"style":126809,"src":143862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[519,143864],{"style":126809,"src":143865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143867,143868],{},"去除高亮：",[19,143870,143871],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143873,143874],{},"-webkit- tap-highlight-color: transparent;",[14,143876,143878],{"id":143877},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[519,143880],{"style":126809,"src":143881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143883,143885],{"id":143884},"_204-流式布局案例","20.4 流式布局案例",[19,143887,656],{},[19,143889,143890],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143892,143893],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143895,143896],{},"图片格式：",[519,143898],{"style":126809,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143901,135996],{},[519,143903],{"style":126809,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143906,140323],{},[26,143908,143909],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,143910,143911],{"__ignoreMap":31},[36,143912,143913,143915,143917,143919,143921,143923,143925,143927,143929,143931,143933,143935],{"class":38,"line":39},[36,143914,1523],{"class":42},[36,143916,519],{"class":51777},[36,143918,55716],{"class":2443},[36,143920,47],{"class":42},[36,143922,134470],{"class":405},[36,143924,55724],{"class":2443},[36,143926,47],{"class":42},[36,143928,134477],{"class":405},[36,143930,134480],{"class":2443},[36,143932,47],{"class":42},[36,143934,134485],{"class":405},[36,143936,51784],{"class":42},[19,143938,140412],{},[26,143940,143941],{"className":127700,"code":134455,"language":127702,"meta":31,"style":31},[33,143942,143943],{"__ignoreMap":31},[36,143944,143945,143947,143949,143951,143953,143955,143957,143959,143961,143963,143965,143967],{"class":38,"line":39},[36,143946,1523],{"class":42},[36,143948,519],{"class":51777},[36,143950,55716],{"class":2443},[36,143952,47],{"class":42},[36,143954,134470],{"class":405},[36,143956,55724],{"class":2443},[36,143958,47],{"class":42},[36,143960,134477],{"class":405},[36,143962,134480],{"class":2443},[36,143964,47],{"class":42},[36,143966,134485],{"class":405},[36,143968,51784],{"class":42},[14,143970,143972],{"id":143971},"_205-flex布局","20.5 flex布局",[519,143974],{"style":126809,"src":143975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[596,143977,143979],{"id":143978},"_2051-布局原理","20.5.1 布局原理",[19,143981,143982],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1620,143984,143985,143988,143991,143994,143997],{},[582,143986,143987],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[582,143989,143990],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[582,143992,143993],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[582,143995,143996],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[582,143998,143999],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144001,144002],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144004,144005],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,144007,144009],{"className":126953,"code":144008,"language":126955,"meta":31,"style":31},"\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",[33,144010,144011,144016,144023,144033,144045,144056,144067,144078],{"__ignoreMap":31},[36,144012,144013],{"class":38,"line":39},[36,144014,144015],{"class":69},"\u002F* Flex 弹性布局 *\u002F\n",[36,144017,144018,144021],{"class":38,"line":66},[36,144019,144020],{"class":2443},".container",[36,144022,16052],{"class":42},[36,144024,144025,144027,144029,144031],{"class":38,"line":73},[36,144026,128569],{"class":53},[36,144028,51914],{"class":42},[36,144030,51954],{"class":53},[36,144032,1774],{"class":42},[36,144034,144035,144038,144040,144043],{"class":38,"line":79},[36,144036,144037],{"class":53},"  flex-direction",[36,144039,51914],{"class":42},[36,144041,144042],{"class":53},"row",[36,144044,1774],{"class":42},[36,144046,144047,144050,144052,144054],{"class":38,"line":85},[36,144048,144049],{"class":53},"  justify-content",[36,144051,51914],{"class":42},[36,144053,52145],{"class":53},[36,144055,1774],{"class":42},[36,144057,144058,144061,144063,144065],{"class":38,"line":419},[36,144059,144060],{"class":53},"  align-items",[36,144062,51914],{"class":42},[36,144064,52069],{"class":53},[36,144066,1774],{"class":42},[36,144068,144069,144072,144074,144076],{"class":38,"line":425},[36,144070,144071],{"class":53},"  flex-wrap",[36,144073,51914],{"class":42},[36,144075,79087],{"class":53},[36,144077,1774],{"class":42},[36,144079,144080],{"class":38,"line":431},[36,144081,2045],{"class":42},[19,144083,70930],{},[19,144085,144086],{},".form-item .male-label {",[19,144088,144089],{},"   margin-right: 20px;",[19,144091,144092],{},"   display: inline-flex;",[19,144094,144095],{},"   align-items: center;",[19,144097,1559],{},[519,144099],{"style":126809,"src":144100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[519,144102],{"style":126809,"src":144103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[596,144105,144107],{"id":144106},"_2052-常见父项属性","20.5.2 常见父项属性",[579,144109,144110,144113,144116,144119,144122,144125,144128],{},[582,144111,144112],{},"flex-direction：设置主轴的方向",[582,144114,144115],{},"justify-content：设置主轴上的子元素排列方式",[582,144117,144118],{},"flex-wrap：设置子元素是否换行",[582,144120,144121],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[582,144123,144124],{},"align-items：设置侧轴上的子元素排列方式（单行）",[582,144126,144127],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[582,144129,144112],{},[519,144131],{"style":126809,"src":144132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[519,144134],{"style":126809,"src":144135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[579,144137,144138],{"start":66},[582,144139,144115],{},[519,144141],{"style":126809,"src":144142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144144,144145,144148],{},[33,144146,144147],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144150,144151],{},"跟着主轴走",[579,144153,144154],{"start":73},[582,144155,144118],{},[519,144157],{"style":126809,"src":144158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144160,144161],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[579,144163,144164],{"start":79},[582,144165,144121],{},[519,144167],{"style":126809,"src":144168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144170,144171],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144173,144174],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[579,144176,144177],{"start":85},[582,144178,144124],{},[519,144180],{"style":126809,"src":144181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144183,144184],{},"align-items与align-content之间的区别：",[19,144186,144187],{},"单找items，多找content",[519,144189],{"style":126809,"src":144190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[579,144192,144193],{"start":419},[582,144194,144127],{},[519,144196],{"style":126809,"src":144197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[596,144199,144201],{"id":144200},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[579,144203,144204],{},[582,144205,144206],{},[770,144207,144208],{},"flex 属性",[19,144210,144211],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[519,144213],{"style":126809,"src":144214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144216,144217],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144219,144220],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[579,144222,144223],{"start":66},[582,144224,144225,14275,144228],{},[770,144226,144227],{},"align-self",[770,144229,144230],{},"控制子项自己在侧轴上的排列方式",[519,144232],{"style":126809,"src":144233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144235,144236],{},"单个子盒子在父盒子侧轴上的排列方式",[579,144238,144239],{"start":73},[582,144240,144241,144243],{},[770,144242,95769],{}," 属性定义项目的排列顺序",[519,144245],{"style":126809,"src":144246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[596,144248,144250],{"id":144249},"_2054-背景线性渐变","20.5.4 背景线性渐变",[519,144252],{"style":126809,"src":144253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144255,144256],{},"必须要添加浏览器的私有前缀",[596,144258,144260],{"id":144259},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144262,144263],{},"学到最重要的知识：",[19,144265,144266],{},"flex处理这样的布局思路",[519,144268],{"style":126809,"src":144269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,144271,144273],{"className":126953,"code":144272,"language":126955,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,144274,144275,144281,144291,144301,144311],{"__ignoreMap":31},[36,144276,144277,144279],{"class":38,"line":39},[36,144278,144020],{"class":2443},[36,144280,16052],{"class":42},[36,144282,144283,144285,144287,144289],{"class":38,"line":66},[36,144284,128569],{"class":53},[36,144286,51914],{"class":42},[36,144288,51954],{"class":53},[36,144290,1774],{"class":42},[36,144292,144293,144295,144297,144299],{"class":38,"line":73},[36,144294,144049],{"class":53},[36,144296,51914],{"class":42},[36,144298,52069],{"class":53},[36,144300,1774],{"class":42},[36,144302,144303,144305,144307,144309],{"class":38,"line":79},[36,144304,144060],{"class":53},[36,144306,51914],{"class":42},[36,144308,52069],{"class":53},[36,144310,1774],{"class":42},[36,144312,144313],{"class":38,"line":85},[36,144314,2045],{"class":42},[19,144316,144317],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144319,144320],{},"使用属性选择器",[519,144322],{"style":126809,"src":144323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144325,69366],{},[26,144327,144329],{"className":127700,"code":144328,"language":127702,"meta":31,"style":31},"\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",[33,144330,144331,144336,144350,144355,144375,144380,144399,144404,144423,144428,144447],{"__ignoreMap":31},[36,144332,144333],{"class":38,"line":39},[36,144334,144335],{"class":69},"\u003C!-- 携程网移动端案例结构 -->\n",[36,144337,144338,144340,144342,144344,144346,144348],{"class":38,"line":66},[36,144339,1523],{"class":42},[36,144341,52088],{"class":51777},[36,144343,53963],{"class":2443},[36,144345,47],{"class":42},[36,144347,92800],{"class":405},[36,144349,51784],{"class":42},[36,144351,144352],{"class":38,"line":73},[36,144353,144354],{"class":69},"  \u003C!-- 搜索栏 -->\n",[36,144356,144357,144359,144361,144363,144365,144368,144371,144373],{"class":38,"line":79},[36,144358,52621],{"class":42},[36,144360,52088],{"class":51777},[36,144362,53963],{"class":2443},[36,144364,47],{"class":42},[36,144366,144367],{"class":405},"\"search-index\"",[36,144369,144370],{"class":42},">...\u003C\u002F",[36,144372,52088],{"class":51777},[36,144374,51784],{"class":42},[36,144376,144377],{"class":38,"line":85},[36,144378,144379],{"class":69},"  \u003C!-- 焦点图 -->\n",[36,144381,144382,144384,144386,144388,144390,144393,144395,144397],{"class":38,"line":419},[36,144383,52621],{"class":42},[36,144385,52088],{"class":51777},[36,144387,53963],{"class":2443},[36,144389,47],{"class":42},[36,144391,144392],{"class":405},"\"focus\"",[36,144394,144370],{"class":42},[36,144396,52088],{"class":51777},[36,144398,51784],{"class":42},[36,144400,144401],{"class":38,"line":425},[36,144402,144403],{"class":69},"  \u003C!-- 主导航 -->\n",[36,144405,144406,144408,144410,144412,144414,144417,144419,144421],{"class":38,"line":431},[36,144407,52621],{"class":42},[36,144409,52088],{"class":51777},[36,144411,53963],{"class":2443},[36,144413,47],{"class":42},[36,144415,144416],{"class":405},"\"local-nav\"",[36,144418,144370],{"class":42},[36,144420,52088],{"class":51777},[36,144422,51784],{"class":42},[36,144424,144425],{"class":38,"line":437},[36,144426,144427],{"class":69},"  \u003C!-- 子导航 -->\n",[36,144429,144430,144432,144434,144436,144438,144441,144443,144445],{"class":38,"line":443},[36,144431,52621],{"class":42},[36,144433,52088],{"class":51777},[36,144435,53963],{"class":2443},[36,144437,47],{"class":42},[36,144439,144440],{"class":405},"\"nav-common\"",[36,144442,144370],{"class":42},[36,144444,52088],{"class":51777},[36,144446,51784],{"class":42},[36,144448,144449,144451,144453],{"class":38,"line":2092},[36,144450,52262],{"class":42},[36,144452,52088],{"class":51777},[36,144454,51784],{"class":42},[19,144456,70930],{},[26,144458,144459],{"className":126953,"code":137405,"language":126955,"meta":31,"style":31},[33,144460,144461,144475,144491],{"__ignoreMap":31},[36,144462,144463,144465,144467,144469,144471,144473],{"class":38,"line":39},[36,144464,54298],{"class":51777},[36,144466,1503],{"class":42},[36,144468,103508],{"class":2443},[36,144470,47],{"class":46},[36,144472,63176],{"class":405},[36,144474,137422],{"class":42},[36,144476,144477,144479,144481,144483,144485,144487,144489],{"class":38,"line":66},[36,144478,71373],{"class":53},[36,144480,51914],{"class":42},[36,144482,54],{"class":53},[36,144484,51969],{"class":46},[36,144486,51998],{"class":53},[36,144488,130533],{"class":53},[36,144490,1774],{"class":42},[36,144492,144493],{"class":38,"line":73},[36,144494,2045],{"class":42},[19,144496,144497],{},"总代码和效果展示：",[519,144499],{"style":126809,"src":144500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144502,69366],{},[26,144504,144505],{"className":127700,"code":144328,"language":127702,"meta":31,"style":31},[33,144506,144507,144511,144525,144529,144547,144551,144569,144573,144591,144595,144613],{"__ignoreMap":31},[36,144508,144509],{"class":38,"line":39},[36,144510,144335],{"class":69},[36,144512,144513,144515,144517,144519,144521,144523],{"class":38,"line":66},[36,144514,1523],{"class":42},[36,144516,52088],{"class":51777},[36,144518,53963],{"class":2443},[36,144520,47],{"class":42},[36,144522,92800],{"class":405},[36,144524,51784],{"class":42},[36,144526,144527],{"class":38,"line":73},[36,144528,144354],{"class":69},[36,144530,144531,144533,144535,144537,144539,144541,144543,144545],{"class":38,"line":79},[36,144532,52621],{"class":42},[36,144534,52088],{"class":51777},[36,144536,53963],{"class":2443},[36,144538,47],{"class":42},[36,144540,144367],{"class":405},[36,144542,144370],{"class":42},[36,144544,52088],{"class":51777},[36,144546,51784],{"class":42},[36,144548,144549],{"class":38,"line":85},[36,144550,144379],{"class":69},[36,144552,144553,144555,144557,144559,144561,144563,144565,144567],{"class":38,"line":419},[36,144554,52621],{"class":42},[36,144556,52088],{"class":51777},[36,144558,53963],{"class":2443},[36,144560,47],{"class":42},[36,144562,144392],{"class":405},[36,144564,144370],{"class":42},[36,144566,52088],{"class":51777},[36,144568,51784],{"class":42},[36,144570,144571],{"class":38,"line":425},[36,144572,144403],{"class":69},[36,144574,144575,144577,144579,144581,144583,144585,144587,144589],{"class":38,"line":431},[36,144576,52621],{"class":42},[36,144578,52088],{"class":51777},[36,144580,53963],{"class":2443},[36,144582,47],{"class":42},[36,144584,144416],{"class":405},[36,144586,144370],{"class":42},[36,144588,52088],{"class":51777},[36,144590,51784],{"class":42},[36,144592,144593],{"class":38,"line":437},[36,144594,144427],{"class":69},[36,144596,144597,144599,144601,144603,144605,144607,144609,144611],{"class":38,"line":443},[36,144598,52621],{"class":42},[36,144600,52088],{"class":51777},[36,144602,53963],{"class":2443},[36,144604,47],{"class":42},[36,144606,144440],{"class":405},[36,144608,144370],{"class":42},[36,144610,52088],{"class":51777},[36,144612,51784],{"class":42},[36,144614,144615,144617,144619],{"class":38,"line":2092},[36,144616,52262],{"class":42},[36,144618,52088],{"class":51777},[36,144620,51784],{"class":42},[19,144622,70930],{},[26,144624,144625],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,144626,144627,144631,144645,144649],{"__ignoreMap":31},[36,144628,144629],{"class":38,"line":39},[36,144630,131064],{"class":69},[36,144632,144633,144635,144637,144639,144641,144643],{"class":38,"line":66},[36,144634,1523],{"class":42},[36,144636,52088],{"class":51777},[36,144638,53963],{"class":2443},[36,144640,47],{"class":42},[36,144642,131077],{"class":405},[36,144644,51784],{"class":42},[36,144646,144647],{"class":38,"line":73},[36,144648,131084],{"class":42},[36,144650,144651,144653,144655],{"class":38,"line":79},[36,144652,52262],{"class":42},[36,144654,52088],{"class":51777},[36,144656,51784],{"class":42},[539,144658,138354],{},{"title":31,"searchDepth":66,"depth":66,"links":144660},[144661,144662,144666,144667,144668],{"id":143805,"depth":66,"text":143806},{"id":143837,"depth":66,"text":143838,"children":144663},[144664,144665],{"id":143841,"depth":73,"text":143842},{"id":143858,"depth":73,"text":143859},{"id":143877,"depth":66,"text":143878},{"id":143884,"depth":66,"text":143885},{"id":143971,"depth":66,"text":143972,"children":144669},[144670,144671,144672,144673,144674],{"id":143978,"depth":73,"text":143979},{"id":144106,"depth":73,"text":144107},{"id":144200,"depth":73,"text":144201},{"id":144249,"depth":73,"text":144250},{"id":144259,"depth":73,"text":144260},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143797,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144681,"title":144682,"body":144683,"description":550,"extension":551,"meta":145910,"navigation":553,"path":145911,"seo":145912,"stem":145913,"__hash__":145914},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144684,"toc":145888},[144685,144688,144692,144696,144699,144702,144706,144711,144714,144717,144720,144723,144726,144783,144786,144791,144794,144797,144801,144812,144816,144819,144822,144829,144834,144838,144841,144847,144850,144854,144857,144864,144867,144870,144877,144880,144887,144890,144893,144900,144903,144906,144908,144925,144929,144932,144935,144938,144942,144945,144948,144951,144954,144957,144960,144962,144965,144968,145030,145033,145143,145150,145156,145159,145162,145166,145169,145173,145178,145181,145188,145191,145197,145202,145205,145208,145211,145214,145217,145220,145223,145226,145282,145284,145310,145314,145317,145320,145323,145331,145334,145337,145341,145397,145400,145404,145410,145421,145424,145429,145432,145435,145441,145444,145447,145450,145453,145456,145459,145462,145465,145490,145496,145499,145502,145505,145508,145511,145514,145519,145522,145525,145528,145536,145539,145546,145549,145552,145554,145578,145580,145583,145586,145589,145592,145595,145598,145601,145635,145638,145641,145675,145682,145685,145688,145691,145694,145697,145700,145707,145710,145713,145716,145719,145726,145729,145732,145739,145742,145745,145749,145752,145755,145758,145761,145764,145767,145770,145773,145775,145799,145801,145825,145829,145840,145843,145846,145849,145852,145855,145858,145861,145864,145867,145870,145873,145876,145879,145882,145885],[10,144686,144682],{"id":144687},"_21-移动端布局实战下篇",[14,144689,144691],{"id":144690},"_211-rem适配布局","21.1 rem适配布局",[596,144693,144695],{"id":144694},"_2111-rem单位","21.1.1 rem单位",[519,144697],{"style":126809,"src":144698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144700,144701],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[596,144703,144705],{"id":144704},"_2112-媒体查询","21.1.2 媒体查询",[579,144707,144708],{},[582,144709,144710],{},"参数介绍",[519,144712],{"style":126809,"src":144713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[519,144715],{"style":126809,"src":144716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[519,144718],{"style":126809,"src":144719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[519,144721],{"style":126809,"src":144722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[519,144724],{"style":126809,"src":144725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,144727,144729],{"className":126953,"code":144728,"language":126955,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,144730,144731,144736,144755,144762,144775,144779],{"__ignoreMap":31},[36,144732,144733],{"class":38,"line":39},[36,144734,144735],{"class":69},"\u002F* 媒体查询 *\u002F\n",[36,144737,144738,144741,144743,144746,144748,144751,144753],{"class":38,"line":66},[36,144739,144740],{"class":46},"@media",[36,144742,2138],{"class":42},[36,144744,144745],{"class":53},"max-width",[36,144747,51914],{"class":42},[36,144749,144750],{"class":53},"768",[36,144752,51969],{"class":46},[36,144754,12922],{"class":42},[36,144756,144757,144760],{"class":38,"line":73},[36,144758,144759],{"class":2443},"  .container",[36,144761,16052],{"class":42},[36,144763,144764,144767,144769,144771,144773],{"class":38,"line":79},[36,144765,144766],{"class":53},"    width",[36,144768,51914],{"class":42},[36,144770,930],{"class":53},[36,144772,947],{"class":46},[36,144774,1774],{"class":42},[36,144776,144777],{"class":38,"line":85},[36,144778,127749],{"class":42},[36,144780,144781],{"class":38,"line":419},[36,144782,2045],{"class":42},[19,144784,144785],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[579,144787,144788],{"start":66},[582,144789,144790],{},"引入资源",[519,144792],{"style":126809,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144795,144796],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[596,144798,144800],{"id":144799},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1620,144802,144803,144806,144809],{},[582,144804,144805],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[582,144807,144808],{},"媒体查询可以根据不同设备宽度来修改样式",[582,144810,144811],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144813,144815],{"id":144814},"_212-less基础","21.2 Less基础",[19,144817,144818],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144820,144821],{},"Less可以解决该问题，它是css的扩展语言",[19,144823,144824,144825],{},"Less中文网址： ",[43,144826,144827],{"href":144827,"rel":144828},"http:\u002F\u002Flesscss.cn\u002F",[24345],[19,144830,144831],{},[770,144832,144833],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[596,144835,144837],{"id":144836},"_2121-less安装","21.2.1 less安装",[19,144839,144840],{},"如果使用vscode，则无需进行下方安装步骤",[19,144842,144843],{},[43,144844,144845],{"href":144845,"rel":144846},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24345],[519,144848],{"style":126809,"src":144849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[596,144851,144853],{"id":144852},"_2122-less使用","21.2.2 less使用",[19,144855,144856],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[579,144858,144859],{},[582,144860,144861],{},[770,144862,144863],{},"Less 变量",[519,144865],{"style":126809,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[519,144868],{"style":126809,"src":144869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[579,144871,144872],{"start":66},[582,144873,144874],{},[770,144875,144876],{},"Less 编译",[519,144878],{"style":126809,"src":144879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[579,144881,144882],{"start":73},[582,144883,144884],{},[770,144885,144886],{},"Less 嵌套",[519,144888],{"style":126809,"src":144889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[519,144891],{"style":126809,"src":144892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[579,144894,144895],{"start":79},[582,144896,144897],{},[770,144898,144899],{},"Less 运算",[519,144901],{"style":126809,"src":144902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144904,144905],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144907,656],{},[1620,144909,144910,144913,144916,144919,144922],{},[582,144911,144912],{},"乘号（*）和除号（\u002F）的写法",[582,144914,144915],{},"运算符中间左右有个空格隔开 1px + 5",[582,144917,144918],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[582,144920,144921],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[582,144923,144924],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144926,144928],{"id":144927},"_213-rem-适配方案","21.3 rem 适配方案",[19,144930,144931],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144933,144934],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[519,144936],{"style":126809,"src":144937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[596,144939,144941],{"id":144940},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144943,144944],{},"rem + 媒体查询 + less 技术",[519,144946],{"style":126809,"src":144947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144949,144950],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144952,144953],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[519,144955],{"style":126809,"src":144956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144958,144959],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144961,15113],{},[519,144963],{"style":126809,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144966,144967],{},"index.html:",[26,144969,144971],{"className":126953,"code":144970,"language":126955,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,144972,144973,144978,144984,145000,145004,145010,145026],{"__ignoreMap":31},[36,144974,144975],{"class":38,"line":39},[36,144976,144977],{"class":69},"\u002F* rem 适配方案 *\u002F\n",[36,144979,144980,144982],{"class":38,"line":66},[36,144981,51112],{"class":51777},[36,144983,16052],{"class":42},[36,144985,144986,144988,144990,144993,144995,144997],{"class":38,"line":73},[36,144987,71103],{"class":53},[36,144989,51914],{"class":42},[36,144991,144992],{"class":53},"62.5",[36,144994,947],{"class":46},[36,144996,130816],{"class":42},[36,144998,144999],{"class":69},"\u002F* 1rem = 10px *\u002F\n",[36,145001,145002],{"class":38,"line":79},[36,145003,2045],{"class":42},[36,145005,145006,145008],{"class":38,"line":85},[36,145007,130801],{"class":2443},[36,145009,16052],{"class":42},[36,145011,145012,145014,145016,145018,145021,145023],{"class":38,"line":419},[36,145013,71045],{"class":53},[36,145015,51914],{"class":42},[36,145017,1062],{"class":53},[36,145019,145020],{"class":46},"rem",[36,145022,130816],{"class":42},[36,145024,145025],{"class":69},"\u002F* 100px *\u002F\n",[36,145027,145028],{"class":38,"line":425},[36,145029,2045],{"class":42},[19,145031,145032],{},"common.less",[26,145034,145036],{"className":126953,"code":145035,"language":126955,"meta":31,"style":31},"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",[33,145037,145038,145044,145059,145063,145069,145083,145087,145091,145095,145101,145115,145119,145125,145139],{"__ignoreMap":31},[36,145039,145040,145042],{"class":38,"line":39},[36,145041,51112],{"class":51777},[36,145043,16052],{"class":42},[36,145045,145046,145048,145050,145052,145054,145056],{"class":38,"line":66},[36,145047,71103],{"class":53},[36,145049,51914],{"class":42},[36,145051,144992],{"class":53},[36,145053,947],{"class":46},[36,145055,26548],{"class":42},[36,145057,145058],{"class":69},"\u002F* 10px *\u002F\n",[36,145060,145061],{"class":38,"line":73},[36,145062,2045],{"class":42},[36,145064,145065,145067],{"class":38,"line":79},[36,145066,52088],{"class":51777},[36,145068,16052],{"class":42},[36,145070,145071,145073,145075,145077,145079,145081],{"class":38,"line":85},[36,145072,71045],{"class":53},[36,145074,51914],{"class":42},[36,145076,1062],{"class":53},[36,145078,145020],{"class":46},[36,145080,26548],{"class":42},[36,145082,145025],{"class":69},[36,145084,145085],{"class":38,"line":419},[36,145086,2045],{"class":42},[36,145088,145089],{"class":38,"line":425},[36,145090,136414],{"class":42},[36,145092,145093],{"class":38,"line":431},[36,145094,144977],{"class":69},[36,145096,145097,145099],{"class":38,"line":437},[36,145098,51112],{"class":51777},[36,145100,16052],{"class":42},[36,145102,145103,145105,145107,145109,145111,145113],{"class":38,"line":443},[36,145104,71103],{"class":53},[36,145106,51914],{"class":42},[36,145108,144992],{"class":53},[36,145110,947],{"class":46},[36,145112,130816],{"class":42},[36,145114,144999],{"class":69},[36,145116,145117],{"class":38,"line":2092},[36,145118,2045],{"class":42},[36,145120,145121,145123],{"class":38,"line":2097},[36,145122,130801],{"class":2443},[36,145124,16052],{"class":42},[36,145126,145127,145129,145131,145133,145135,145137],{"class":38,"line":2103},[36,145128,71045],{"class":53},[36,145130,51914],{"class":42},[36,145132,1062],{"class":53},[36,145134,145020],{"class":46},[36,145136,130816],{"class":42},[36,145138,145025],{"class":69},[36,145140,145141],{"class":38,"line":2108},[36,145142,2045],{"class":42},[19,145144,145145,145146,145149],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24033,145147,145148],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,145151,145154],{"className":145152,"code":145153,"language":5667},[5665],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,145155,145153],{"__ignoreMap":31},[19,145157,145158],{},"less保存时会自动变成.css文件",[19,145160,145161],{},"好好搞懂上述代码写法",[596,145163,145165],{"id":145164},"_2132-样式导入样式","21.3.2 样式导入样式",[519,145167],{"style":126809,"src":145168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[596,145170,145172],{"id":145171},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[579,145174,145175],{},[582,145176,145177],{},"准备工作",[519,145179],{"style":126809,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145182,145183,145184],{},"github地址：",[43,145185,145186],{"href":145186,"rel":145187},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24345],[19,145189,145190],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145192,145193,145194],{},"js文件引入到index.html中使用的是",[33,145195,145196],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[579,145198,145199],{"start":66},[582,145200,145201],{},"vscode插件",[519,145203],{"style":126809,"src":145204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145206,145207],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145209,145210],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[519,145212],{"style":126809,"src":145213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145215,145216],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[519,145218],{"style":126809,"src":145219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145221,145222],{},"修改成75就可以，alt+z为快捷键",[19,145224,145225],{},"index.css：",[26,145227,145228],{"className":126953,"code":144970,"language":126955,"meta":31,"style":31},[33,145229,145230,145234,145240,145254,145258,145264,145278],{"__ignoreMap":31},[36,145231,145232],{"class":38,"line":39},[36,145233,144977],{"class":69},[36,145235,145236,145238],{"class":38,"line":66},[36,145237,51112],{"class":51777},[36,145239,16052],{"class":42},[36,145241,145242,145244,145246,145248,145250,145252],{"class":38,"line":73},[36,145243,71103],{"class":53},[36,145245,51914],{"class":42},[36,145247,144992],{"class":53},[36,145249,947],{"class":46},[36,145251,130816],{"class":42},[36,145253,144999],{"class":69},[36,145255,145256],{"class":38,"line":79},[36,145257,2045],{"class":42},[36,145259,145260,145262],{"class":38,"line":85},[36,145261,130801],{"class":2443},[36,145263,16052],{"class":42},[36,145265,145266,145268,145270,145272,145274,145276],{"class":38,"line":419},[36,145267,71045],{"class":53},[36,145269,51914],{"class":42},[36,145271,1062],{"class":53},[36,145273,145020],{"class":46},[36,145275,130816],{"class":42},[36,145277,145025],{"class":69},[36,145279,145280],{"class":38,"line":425},[36,145281,2045],{"class":42},[19,145283,144967],{},[26,145285,145286],{"className":126953,"code":127357,"language":126955,"meta":31,"style":31},[33,145287,145288,145294,145306],{"__ignoreMap":31},[36,145289,145290,145292],{"class":38,"line":39},[36,145291,52277],{"class":51777},[36,145293,16052],{"class":42},[36,145295,145296,145298,145300,145302,145304],{"class":38,"line":66},[36,145297,71103],{"class":53},[36,145299,51914],{"class":42},[36,145301,1214],{"class":53},[36,145303,51969],{"class":46},[36,145305,1774],{"class":42},[36,145307,145308],{"class":38,"line":73},[36,145309,2045],{"class":42},[14,145311,145313],{"id":145312},"_214-响应式开发","21.4 响应式开发",[19,145315,145316],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[519,145318],{"style":126809,"src":145319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145321,145322],{},"做法：",[1620,145324,145325,145328],{},[582,145326,145327],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[582,145329,145330],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[519,145332],{"style":126809,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145335,145336],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[596,145338,145340],{"id":145339},"_2141-简单代码示范","21.4.1 简单代码示范",[26,145342,145343],{"className":126953,"code":144970,"language":126955,"meta":31,"style":31},[33,145344,145345,145349,145355,145369,145373,145379,145393],{"__ignoreMap":31},[36,145346,145347],{"class":38,"line":39},[36,145348,144977],{"class":69},[36,145350,145351,145353],{"class":38,"line":66},[36,145352,51112],{"class":51777},[36,145354,16052],{"class":42},[36,145356,145357,145359,145361,145363,145365,145367],{"class":38,"line":73},[36,145358,71103],{"class":53},[36,145360,51914],{"class":42},[36,145362,144992],{"class":53},[36,145364,947],{"class":46},[36,145366,130816],{"class":42},[36,145368,144999],{"class":69},[36,145370,145371],{"class":38,"line":79},[36,145372,2045],{"class":42},[36,145374,145375,145377],{"class":38,"line":85},[36,145376,130801],{"class":2443},[36,145378,16052],{"class":42},[36,145380,145381,145383,145385,145387,145389,145391],{"class":38,"line":419},[36,145382,71045],{"class":53},[36,145384,51914],{"class":42},[36,145386,1062],{"class":53},[36,145388,145020],{"class":46},[36,145390,130816],{"class":42},[36,145392,145025],{"class":69},[36,145394,145395],{"class":38,"line":425},[36,145396,2045],{"class":42},[19,145398,145399],{},"父盒子一般命名为container",[596,145401,145403],{"id":145402},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145405,145406,145407],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[770,145408,145409],{},"使得 Web 开发更加快捷",[1620,145411,145412],{},[582,145413,145414,145415],{},"官网：",[770,145416,145417],{},[43,145418,145419],{"href":145419,"rel":145420},"http:\u002F\u002Fgetbootstrap.com\u002F",[24345],[19,145422,145423],{},"可以直接去官网拿现成的东西",[579,145425,145426],{},[582,145427,145428],{},"Bootstrap的使用",[19,145430,145431],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145433,145434],{},"Bootstrap 使用四步曲：",[19,145436,145437,145440],{},[770,145438,145439],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[519,145442],{"style":126809,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145445,145446],{},"打开Bootstrap官网，然后下载",[519,145448],{"style":126809,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[519,145451],{"style":126809,"src":145452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145454,145455],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145457,145458],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145460,145461],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[519,145463],{"style":126809,"src":145464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,145466,145468],{"className":126953,"code":145467,"language":126955,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,145469,145470,145476,145486],{"__ignoreMap":31},[36,145471,145472,145474],{"class":38,"line":39},[36,145473,127244],{"class":2443},[36,145475,16052],{"class":42},[36,145477,145478,145480,145482,145484],{"class":38,"line":66},[36,145479,71382],{"class":53},[36,145481,51914],{"class":42},[36,145483,57898],{"class":53},[36,145485,1774],{"class":42},[36,145487,145488],{"class":38,"line":73},[36,145489,2045],{"class":42},[19,145491,145492,145495],{},[33,145493,145494],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[519,145497],{"style":126809,"src":145498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[519,145500],{"style":126809,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[519,145503],{"style":126809,"src":145504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145506,145507],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[519,145509],{"style":126809,"src":145510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145512,145513],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[579,145515,145516],{"start":66},[582,145517,145518],{},"布局容器",[519,145520],{"style":126809,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145523,145524],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145526,145527],{},"container-fluid用于移动式布局比较方便",[579,145529,145530],{"start":73},[582,145531,145532,145533],{},"bootstrap ",[770,145534,145535],{},"栅格系统原理",[519,145537],{"style":126809,"src":145538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[579,145540,145541],{"start":79},[582,145542,145543],{},[770,145544,145545],{},"栅格选项参数",[519,145547],{"style":126809,"src":145548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145550,145551],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145553,15113],{},[26,145555,145556],{"className":126953,"code":145467,"language":126955,"meta":31,"style":31},[33,145557,145558,145564,145574],{"__ignoreMap":31},[36,145559,145560,145562],{"class":38,"line":39},[36,145561,127244],{"class":2443},[36,145563,16052],{"class":42},[36,145565,145566,145568,145570,145572],{"class":38,"line":66},[36,145567,71382],{"class":53},[36,145569,51914],{"class":42},[36,145571,57898],{"class":53},[36,145573,1774],{"class":42},[36,145575,145576],{"class":38,"line":73},[36,145577,2045],{"class":42},[19,145579,135996],{},[519,145581],{"style":126809,"src":145582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145584,145585],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145587,145588],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145590,145591],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145593,145594],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145596,145597],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145599,145600],{},"汇总展示说明：",[26,145602,145603],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,145604,145605,145609,145623,145627],{"__ignoreMap":31},[36,145606,145607],{"class":38,"line":39},[36,145608,131064],{"class":69},[36,145610,145611,145613,145615,145617,145619,145621],{"class":38,"line":66},[36,145612,1523],{"class":42},[36,145614,52088],{"class":51777},[36,145616,53963],{"class":2443},[36,145618,47],{"class":42},[36,145620,131077],{"class":405},[36,145622,51784],{"class":42},[36,145624,145625],{"class":38,"line":73},[36,145626,131084],{"class":42},[36,145628,145629,145631,145633],{"class":38,"line":79},[36,145630,52262],{"class":42},[36,145632,52088],{"class":51777},[36,145634,51784],{"class":42},[519,145636],{"style":126809,"src":145637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145639,145640],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,145642,145643],{"className":127700,"code":131057,"language":127702,"meta":31,"style":31},[33,145644,145645,145649,145663,145667],{"__ignoreMap":31},[36,145646,145647],{"class":38,"line":39},[36,145648,131064],{"class":69},[36,145650,145651,145653,145655,145657,145659,145661],{"class":38,"line":66},[36,145652,1523],{"class":42},[36,145654,52088],{"class":51777},[36,145656,53963],{"class":2443},[36,145658,47],{"class":42},[36,145660,131077],{"class":405},[36,145662,51784],{"class":42},[36,145664,145665],{"class":38,"line":73},[36,145666,131084],{"class":42},[36,145668,145669,145671,145673],{"class":38,"line":79},[36,145670,52262],{"class":42},[36,145672,52088],{"class":51777},[36,145674,51784],{"class":42},[579,145676,145677],{"start":85},[582,145678,145679],{},[770,145680,145681],{},"列嵌套",[519,145683],{"style":126809,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145686,145687],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145689,145690],{},"没加row内部这样：",[519,145692],{"style":126809,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145695,145696],{},"加上row之后内部为：",[519,145698],{"style":126809,"src":145699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[579,145701,145702],{"start":419},[582,145703,145704],{},[770,145705,145706],{},"列偏移",[519,145708],{"style":126809,"src":145709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145711,145712],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145714,145715],{},"要加偏移量，即偏移份数",[19,145717,145718],{},"偏移的份数=12-两个盒子的份数",[579,145720,145721],{"start":425},[582,145722,145723],{},[770,145724,145725],{},"列排序",[519,145727],{"style":126809,"src":145728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145730,145731],{},"pull拉左；push推右",[579,145733,145734],{"start":431},[582,145735,145736],{},[770,145737,145738],{},"响应式工具",[519,145740],{"style":126809,"src":145741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145743,145744],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[596,145746,145748],{"id":145747},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145750,145751],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145753,145754],{},"ul {",[19,145756,145757],{},"list-style: none;",[19,145759,145760],{},"margin:0;",[19,145762,145763],{},"padding:0; }",[519,145765],{"style":126809,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[519,145768],{"style":126809,"src":145769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145771,145772],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145774,69366],{},[26,145776,145777],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,145778,145779,145785,145795],{"__ignoreMap":31},[36,145780,145781,145783],{"class":38,"line":39},[36,145782,130801],{"class":2443},[36,145784,16052],{"class":42},[36,145786,145787,145789,145791,145793],{"class":38,"line":66},[36,145788,131433],{"class":53},[36,145790,51914],{"class":42},[36,145792,24216],{"class":53},[36,145794,1774],{"class":42},[36,145796,145797],{"class":38,"line":73},[36,145798,2045],{"class":42},[19,145800,70930],{},[26,145802,145803],{"className":126953,"code":139623,"language":126955,"meta":31,"style":31},[33,145804,145805,145811,145821],{"__ignoreMap":31},[36,145806,145807,145809],{"class":38,"line":39},[36,145808,130801],{"class":2443},[36,145810,16052],{"class":42},[36,145812,145813,145815,145817,145819],{"class":38,"line":66},[36,145814,131433],{"class":53},[36,145816,51914],{"class":42},[36,145818,24216],{"class":53},[36,145820,1774],{"class":42},[36,145822,145823],{"class":38,"line":73},[36,145824,2045],{"class":42},[14,145826,145828],{"id":145827},"_215-swiper-插件使用","21.5 swiper 插件使用",[1620,145830,145831,145834,145837],{},[582,145832,145833],{},"下载需要的css和js文件html页面中 引入相关文件",[582,145835,145836],{},"官网找到类似案例，复制html结构，css样式 js 语法",[582,145838,145839],{},"根据需求定制修改模块",[519,145841],{"style":126809,"src":145842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145844,145845],{},"解压后将这两部分放到项目中",[519,145847],{"style":126809,"src":145848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145850,145851],{},"这个插件可以帮助我们实现轮播图效果",[19,145853,145854],{},"用法：",[519,145856],{"style":126809,"src":145857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145859,145860],{},"找到自己喜欢的",[519,145862],{"style":126809,"src":145863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145865,145866],{},"右键，查看网页源代码",[519,145868],{"style":126809,"src":145869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145871,145872],{},"复制人家的结构内容",[19,145874,145875],{},"然后去看API文档：",[519,145877],{"style":126809,"src":145878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145880,145881],{},"可以看看如何修改样式",[19,145883,145884],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[539,145886,145887],{},"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":31,"searchDepth":66,"depth":66,"links":145889},[145890,145895,145899,145904,145909],{"id":144690,"depth":66,"text":144691,"children":145891},[145892,145893,145894],{"id":144694,"depth":73,"text":144695},{"id":144704,"depth":73,"text":144705},{"id":144799,"depth":73,"text":144800},{"id":144814,"depth":66,"text":144815,"children":145896},[145897,145898],{"id":144836,"depth":73,"text":144837},{"id":144852,"depth":73,"text":144853},{"id":144927,"depth":66,"text":144928,"children":145900},[145901,145902,145903],{"id":144940,"depth":73,"text":144941},{"id":145164,"depth":73,"text":145165},{"id":145171,"depth":73,"text":145172},{"id":145312,"depth":66,"text":145313,"children":145905},[145906,145907,145908],{"id":145339,"depth":73,"text":145340},{"id":145402,"depth":73,"text":145403},{"id":145747,"depth":73,"text":145748},{"id":145827,"depth":66,"text":145828},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144682,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145916,"title":145917,"body":145918,"description":550,"extension":551,"meta":146138,"navigation":553,"path":146139,"seo":146140,"stem":146141,"__hash__":146142},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145919,"toc":146134},[145920,145923,145927,145930,145945,145950,145953,145958,145993,145998,146010,146015,146028,146033,146050,146055,146075,146080,146098,146101,146104,146107,146110,146114,146117,146120,146123,146126,146129,146132],[10,145921,145917],{"id":145922},"_22-代码提交与新型相对单位",[14,145924,145926],{"id":145925},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145928,145929],{},"法1：",[579,145931,145932,145939,145942],{},[582,145933,145934,145935],{},"登录网站注册：",[43,145936,145937],{"href":145937,"rel":145938},"https:\u002F\u002Fgitee.com\u002F",[24345],[582,145940,145941],{},"码云创建新的仓库",[582,145943,145944],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1620,145946,145947],{},[582,145948,145949],{},"在网站根目录右键-- Git Bash Here",[519,145951],{"style":126809,"src":145952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1620,145954,145955],{},[582,145956,145957],{},"如果是第一次利用git提交，请配置好全局选项",[26,145959,145961],{"className":117697,"code":145960,"language":117699,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,145962,145963,145979],{"__ignoreMap":31},[36,145964,145965,145968,145970,145973,145976],{"class":38,"line":39},[36,145966,145967],{"class":2443},"git",[36,145969,120120],{"class":405},[36,145971,145972],{"class":53}," --global",[36,145974,145975],{"class":405}," user.name",[36,145977,145978],{"class":405}," \"你的名字\"\n",[36,145980,145981,145983,145985,145987,145990],{"class":38,"line":66},[36,145982,145967],{"class":2443},[36,145984,120120],{"class":405},[36,145986,145972],{"class":53},[36,145988,145989],{"class":405}," user.email",[36,145991,145992],{"class":405}," \"你的邮箱\"\n",[1620,145994,145995],{},[582,145996,145997],{},"初始化仓库",[26,145999,146001],{"className":117697,"code":146000,"language":117699,"meta":31,"style":31},"git init\n",[33,146002,146003],{"__ignoreMap":31},[36,146004,146005,146007],{"class":38,"line":39},[36,146006,145967],{"class":2443},[36,146008,146009],{"class":405}," init\n",[1620,146011,146012],{},[582,146013,146014],{},"把本地文件放到暂存区",[26,146016,146018],{"className":117697,"code":146017,"language":117699,"meta":31,"style":31},"git add .\n",[33,146019,146020],{"__ignoreMap":31},[36,146021,146022,146024,146026],{"class":38,"line":39},[36,146023,145967],{"class":2443},[36,146025,5689],{"class":405},[36,146027,29222],{"class":405},[1620,146029,146030],{},[582,146031,146032],{},"把本地文件放到本地仓库里面",[26,146034,146036],{"className":117697,"code":146035,"language":117699,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,146037,146038],{"__ignoreMap":31},[36,146039,146040,146042,146045,146047],{"class":38,"line":39},[36,146041,145967],{"class":2443},[36,146043,146044],{"class":405}," commit",[36,146046,101283],{"class":53},[36,146048,146049],{"class":405}," \"first commit\"\n",[1620,146051,146052],{},[582,146053,146054],{},"链接远程仓库",[26,146056,146058],{"className":117697,"code":146057,"language":117699,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,146059,146060],{"__ignoreMap":31},[36,146061,146062,146064,146067,146069,146072],{"class":38,"line":39},[36,146063,145967],{"class":2443},[36,146065,146066],{"class":405}," remote",[36,146068,5689],{"class":405},[36,146070,146071],{"class":405}," origin",[36,146073,146074],{"class":405}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1620,146076,146077],{},[582,146078,146079],{},"把本地仓库的文件推送到远程仓库 push",[26,146081,146083],{"className":117697,"code":146082,"language":117699,"meta":31,"style":31},"git push -u origin master\n",[33,146084,146085],{"__ignoreMap":31},[36,146086,146087,146089,146091,146093,146095],{"class":38,"line":39},[36,146088,145967],{"class":2443},[36,146090,29497],{"class":405},[36,146092,28771],{"class":53},[36,146094,146071],{"class":405},[36,146096,146097],{"class":405}," master\n",[519,146099],{"style":126809,"src":146100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146102,146103],{},"上方方法暂未实现，后边学完git后在整",[19,146105,146106],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[519,146108],{"style":126809,"src":146109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146111,146113],{"id":146112},"_222-新型相对单位","22.2 新型相对单位",[519,146115],{"style":126809,"src":146116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[519,146118],{"style":126809,"src":146119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146121,146122],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146124,146125],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[519,146127],{"style":126809,"src":146128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146130,146131],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[539,146133,24438],{},{"title":31,"searchDepth":66,"depth":66,"links":146135},[146136,146137],{"id":145925,"depth":66,"text":145926},{"id":146112,"depth":66,"text":146113},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145917,"description":550},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146144,"title":146145,"body":146146,"description":146150,"extension":551,"meta":146151,"navigation":553,"path":146152,"seo":146153,"stem":146154,"__hash__":146155},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146147,"toc":146148},[],{"title":31,"searchDepth":66,"depth":66,"links":146149},[],"自己正经开始学编程的第一门语言！",{"category":93316},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146145,"description":146150},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146157,"title":146158,"body":146159,"description":550,"extension":551,"meta":147306,"navigation":553,"path":147307,"seo":147308,"stem":147309,"__hash__":147310},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146160,"toc":147282},[146161,146164,146168,146171,146174,146199,146202,146208,146212,146215,146242,146245,146285,146288,146300,146303,146309,146313,146317,146344,146361,146368,146372,146375,146401,146404,146408,146411,146451,146454,146471,146477,146481,146486,146530,146533,146551,146554,146622,146626,146633,146636,146651,146654,146663,146666,146677,146680,146689,146692,146709,146712,146727,146731,146735,146738,146740,146760,146764,146767,146770,146781,146784,146790,146794,146800,146827,146830,146842,146845,146856,146859,146865,146869,146875,146925,146928,146970,146973,147006,147009,147043,147047,147050,147070,147073,147109,147112,147125,147129,147133,147139,147142,147155,147159,147162,147168,147171,147175,147178,147181,147230,147234,147250,147256,147263,147269,147279],[10,146162,146158],{"id":146163},"_1-python环境与第一个程序",[14,146165,146167],{"id":146166},"_11-什么是python","1.1 什么是Python",[19,146169,146170],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146172,146173],{},"理解 Python 时抓住三个关键词：",[579,146175,146176,146179,146182],{},[582,146177,146178],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[582,146180,146181],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[582,146183,146184,146185,833,146188,833,146191,833,146194,833,146196,28866],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,146186,146187],{},"os",[33,146189,146190],{},"sys",[33,146192,146193],{},"json",[33,146195,58337],{},[33,146197,146198],{},"datetime",[19,146200,146201],{},"Python 程序的运行链路：",[26,146203,146206],{"className":146204,"code":146205,"language":5667,"meta":31},[5665],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,146207,146205],{"__ignoreMap":31},[14,146209,146211],{"id":146210},"_12-python解释器","1.2 Python解释器",[19,146213,146214],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,146216,146218],{"className":24302,"code":146217,"language":24304,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,146219,146220,146226,146232,146237],{"__ignoreMap":31},[36,146221,146222,146224],{"class":38,"line":39},[36,146223,30],{"class":2443},[36,146225,26774],{"class":53},[36,146227,146228,146230],{"class":38,"line":66},[36,146229,101280],{"class":2443},[36,146231,26774],{"class":53},[36,146233,146234],{"class":38,"line":73},[36,146235,146236],{"class":2443},"python\n",[36,146238,146239],{"class":38,"line":79},[36,146240,146241],{"class":2443},"python3\n",[19,146243,146244],{},"进入交互模式后，可以直接输入表达式：",[26,146246,146248],{"className":28,"code":146247,"language":30,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,146249,146250,146261,146266,146280],{"__ignoreMap":31},[36,146251,146252,146255,146257,146259],{"class":38,"line":39},[36,146253,146254],{"class":46},">>>",[36,146256,25599],{"class":53},[36,146258,46043],{"class":46},[36,146260,48200],{"class":53},[36,146262,146263],{"class":38,"line":66},[36,146264,146265],{"class":53},"3\n",[36,146267,146268,146270,146273,146275,146278],{"class":38,"line":73},[36,146269,146254],{"class":46},[36,146271,146272],{"class":53}," print",[36,146274,345],{"class":42},[36,146276,146277],{"class":405},"\"hello python\"",[36,146279,63],{"class":42},[36,146281,146282],{"class":38,"line":79},[36,146283,146284],{"class":42},"hello python\n",[19,146286,146287],{},"退出交互模式：",[26,146289,146291],{"className":28,"code":146290,"language":30,"meta":31,"style":31},"exit()\n",[33,146292,146293],{"__ignoreMap":31},[36,146294,146295,146298],{"class":38,"line":39},[36,146296,146297],{"class":53},"exit",[36,146299,2456],{"class":42},[19,146301,146302],{},"或使用快捷键：",[26,146304,146307],{"className":146305,"code":146306,"language":5667,"meta":31},[5665],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,146308,146306],{"__ignoreMap":31},[14,146310,146312],{"id":146311},"_13-安装python","1.3 安装Python",[596,146314,146316],{"id":146315},"_131-windows安装","1.3.1 Windows安装",[579,146318,146319,146326,146329,146335,146341],{},[582,146320,146321,146322],{},"打开 Python 官网：",[43,146323,146324],{"href":146324,"rel":146325},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24345],[582,146327,146328],{},"下载 Windows Installer。",[582,146330,146331,146332,28866],{},"安装时勾选 ",[33,146333,146334],{},"Add Python to PATH",[582,146336,146337,146338,28866],{},"点击 ",[33,146339,146340],{},"Install Now",[582,146342,146343],{},"安装完成后打开命令提示符验证：",[26,146345,146347],{"className":24302,"code":146346,"language":24304,"meta":31,"style":31},"python --version\npip --version\n",[33,146348,146349,146355],{"__ignoreMap":31},[36,146350,146351,146353],{"class":38,"line":39},[36,146352,30],{"class":2443},[36,146354,26774],{"class":53},[36,146356,146357,146359],{"class":38,"line":66},[36,146358,24311],{"class":2443},[36,146360,26774],{"class":53},[19,146362,146363,146364,146367],{},"如果提示 ",[33,146365,146366],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[596,146369,146371],{"id":146370},"_132-macos安装","1.3.2 macOS安装",[19,146373,146374],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,146376,146378],{"className":24302,"code":146377,"language":24304,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,146379,146380,146389,146395],{"__ignoreMap":31},[36,146381,146382,146385,146387],{"class":38,"line":39},[36,146383,146384],{"class":2443},"brew",[36,146386,24314],{"class":405},[36,146388,124719],{"class":405},[36,146390,146391,146393],{"class":38,"line":66},[36,146392,101280],{"class":2443},[36,146394,26774],{"class":53},[36,146396,146397,146399],{"class":38,"line":73},[36,146398,120101],{"class":2443},[36,146400,26774],{"class":53},[19,146402,146403],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[596,146405,146407],{"id":146406},"_133-linux安装","1.3.3 Linux安装",[19,146409,146410],{},"Ubuntu\u002FDebian：",[26,146412,146414],{"className":24302,"code":146413,"language":24304,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,146415,146416,146424,146439,146445],{"__ignoreMap":31},[36,146417,146418,146420,146422],{"class":38,"line":39},[36,146419,25057],{"class":2443},[36,146421,117718],{"class":405},[36,146423,26723],{"class":405},[36,146425,146426,146428,146430,146432,146434,146436],{"class":38,"line":66},[36,146427,25057],{"class":2443},[36,146429,117718],{"class":405},[36,146431,24314],{"class":405},[36,146433,104804],{"class":405},[36,146435,101199],{"class":405},[36,146437,146438],{"class":405}," python3-venv\n",[36,146440,146441,146443],{"class":38,"line":73},[36,146442,101280],{"class":2443},[36,146444,26774],{"class":53},[36,146446,146447,146449],{"class":38,"line":79},[36,146448,120101],{"class":2443},[36,146450,26774],{"class":53},[19,146452,146453],{},"Fedora：",[26,146455,146457],{"className":24302,"code":146456,"language":24304,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,146458,146459],{"__ignoreMap":31},[36,146460,146461,146463,146465,146467,146469],{"class":38,"line":39},[36,146462,25057],{"class":2443},[36,146464,26796],{"class":405},[36,146466,24314],{"class":405},[36,146468,104804],{"class":405},[36,146470,120166],{"class":405},[19,146472,146473,146474,146476],{},"Linux 上通常使用 ",[33,146475,101280],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146478,146480],{"id":146479},"_14-pip包管理器","1.4 pip包管理器",[19,146482,146483,146485],{},[33,146484,24311],{}," 用来安装第三方库。",[26,146487,146489],{"className":24302,"code":146488,"language":24304,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,146490,146491,146500,146509,146517,146523],{"__ignoreMap":31},[36,146492,146493,146495,146497],{"class":38,"line":39},[36,146494,24311],{"class":2443},[36,146496,24314],{"class":405},[36,146498,146499],{"class":405}," requests\n",[36,146501,146502,146504,146507],{"class":38,"line":66},[36,146503,24311],{"class":2443},[36,146505,146506],{"class":405}," uninstall",[36,146508,146499],{"class":405},[36,146510,146511,146513,146515],{"class":38,"line":73},[36,146512,24311],{"class":2443},[36,146514,117975],{"class":405},[36,146516,146499],{"class":405},[36,146518,146519,146521],{"class":38,"line":79},[36,146520,24311],{"class":2443},[36,146522,119356],{"class":405},[36,146524,146525,146527],{"class":38,"line":85},[36,146526,24311],{"class":2443},[36,146528,146529],{"class":405}," freeze\n",[19,146531,146532],{},"国内网络较慢时可以临时使用镜像：",[26,146534,146536],{"className":24302,"code":146535,"language":24304,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,146537,146538],{"__ignoreMap":31},[36,146539,146540,146542,146544,146547,146549],{"class":38,"line":39},[36,146541,24311],{"class":2443},[36,146543,24314],{"class":405},[36,146545,146546],{"class":405}," requests",[36,146548,26911],{"class":53},[36,146550,120129],{"class":405},[19,146552,146553],{},"常见第三方库：",[758,146555,146556,146565],{},[761,146557,146558],{},[764,146559,146560,146563],{},[767,146561,146562],{},"库",[767,146564,103097],{},[805,146566,146567,146575,146582,146590,146598,146606,146614],{},[764,146568,146569,146572],{},[810,146570,146571],{},"requests",[810,146573,146574],{},"网络请求",[764,146576,146577,146579],{},[810,146578,101027],{},[810,146580,146581],{},"数值计算",[764,146583,146584,146587],{},[810,146585,146586],{},"pandas",[810,146588,146589],{},"表格数据处理",[764,146591,146592,146595],{},[810,146593,146594],{},"matplotlib",[810,146596,146597],{},"绘图",[764,146599,146600,146603],{},[810,146601,146602],{},"pyecharts",[810,146604,146605],{},"ECharts 图表",[764,146607,146608,146611],{},[810,146609,146610],{},"flask",[810,146612,146613],{},"Web 后端",[764,146615,146616,146619],{},[810,146617,146618],{},"pytest",[810,146620,146621],{},"自动化测试",[14,146623,146625],{"id":146624},"_15-虚拟环境","1.5 虚拟环境",[19,146627,146628,146629,146632],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,146630,146631],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146634,146635],{},"创建虚拟环境：",[26,146637,146639],{"className":24302,"code":146638,"language":24304,"meta":31,"style":31},"python -m venv .venv\n",[33,146640,146641],{"__ignoreMap":31},[36,146642,146643,146645,146647,146649],{"class":38,"line":39},[36,146644,30],{"class":2443},[36,146646,101283],{"class":53},[36,146648,101286],{"class":405},[36,146650,101289],{"class":405},[19,146652,146653],{},"Windows 激活：",[26,146655,146657],{"className":24302,"code":146656,"language":24304,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,146658,146659],{"__ignoreMap":31},[36,146660,146661],{"class":38,"line":39},[36,146662,146656],{"class":2443},[19,146664,146665],{},"macOS\u002FLinux 激活：",[26,146667,146669],{"className":24302,"code":146668,"language":24304,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,146670,146671],{"__ignoreMap":31},[36,146672,146673,146675],{"class":38,"line":39},[36,146674,101294],{"class":53},[36,146676,101297],{"class":405},[19,146678,146679],{},"退出虚拟环境：",[26,146681,146683],{"className":24302,"code":146682,"language":24304,"meta":31,"style":31},"deactivate\n",[33,146684,146685],{"__ignoreMap":31},[36,146686,146687],{"class":38,"line":39},[36,146688,146682],{"class":2443},[19,146690,146691],{},"保存依赖：",[26,146693,146695],{"className":24302,"code":146694,"language":24304,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,146696,146697],{"__ignoreMap":31},[36,146698,146699,146701,146704,146706],{"class":38,"line":39},[36,146700,24311],{"class":2443},[36,146702,146703],{"class":405}," freeze",[36,146705,26703],{"class":46},[36,146707,146708],{"class":405}," requirements.txt\n",[19,146710,146711],{},"安装依赖：",[26,146713,146715],{"className":24302,"code":146714,"language":24304,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,146716,146717],{"__ignoreMap":31},[36,146718,146719,146721,146723,146725],{"class":38,"line":39},[36,146720,24311],{"class":2443},[36,146722,24314],{"class":405},[36,146724,120040],{"class":53},[36,146726,146708],{"class":405},[14,146728,146730],{"id":146729},"_16-开发工具","1.6 开发工具",[596,146732,146734],{"id":146733},"_161-pycharm","1.6.1 PyCharm",[19,146736,146737],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146739,122463],{},[579,146741,146742,146745,146748,146754,146757],{},[582,146743,146744],{},"New Project：创建项目。",[582,146746,146747],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[582,146749,146750,146751,126384],{},"New Python File：创建 ",[33,146752,146753],{},".py",[582,146755,146756],{},"Run：运行当前文件。",[582,146758,146759],{},"Debug：断点调试。",[596,146761,146763],{"id":146762},"_162-vs-code","1.6.2 VS Code",[19,146765,146766],{},"VS Code 轻量，适合后续多语言开发。",[19,146768,146769],{},"建议安装插件：",[579,146771,146772,146775,146778],{},[582,146773,146774],{},"Python。",[582,146776,146777],{},"Pylance。",[582,146779,146780],{},"Jupyter。",[19,146782,146783],{},"选择解释器：",[26,146785,146788],{"className":146786,"code":146787,"language":5667,"meta":31},[5665],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,146789,146787],{"__ignoreMap":31},[14,146791,146793],{"id":146792},"_17-第一个python程序","1.7 第一个Python程序",[19,146795,146796,146797,25099],{},"创建文件 ",[33,146798,146799],{},"hello.py",[26,146801,146803],{"className":28,"code":146802,"language":30,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,146804,146805,146816],{"__ignoreMap":31},[36,146806,146807,146809,146811,146814],{"class":38,"line":39},[36,146808,30894],{"class":53},[36,146810,345],{"class":42},[36,146812,146813],{"class":405},"\"Hello World\"",[36,146815,63],{"class":42},[36,146817,146818,146820,146822,146825],{"class":38,"line":66},[36,146819,30894],{"class":53},[36,146821,345],{"class":42},[36,146823,146824],{"class":405},"\"你好，Python\"",[36,146826,63],{"class":42},[19,146828,146829],{},"在终端运行：",[26,146831,146833],{"className":24302,"code":146832,"language":24304,"meta":31,"style":31},"python hello.py\n",[33,146834,146835],{"__ignoreMap":31},[36,146836,146837,146839],{"class":38,"line":39},[36,146838,30],{"class":2443},[36,146840,146841],{"class":405}," hello.py\n",[19,146843,146844],{},"或：",[26,146846,146848],{"className":24302,"code":146847,"language":24304,"meta":31,"style":31},"python3 hello.py\n",[33,146849,146850],{"__ignoreMap":31},[36,146851,146852,146854],{"class":38,"line":39},[36,146853,101280],{"class":2443},[36,146855,146841],{"class":405},[19,146857,146858],{},"输出：",[26,146860,146863],{"className":146861,"code":146862,"language":5667,"meta":31},[5665],"Hello World\n你好，Python\n",[33,146864,146862],{"__ignoreMap":31},[14,146866,146868],{"id":146867},"_18-print函数","1.8 print函数",[19,146870,146871,146874],{},[33,146872,146873],{},"print()"," 用来输出内容。",[26,146876,146878],{"className":28,"code":146877,"language":30,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,146879,146880,146890,146900,146910],{"__ignoreMap":31},[36,146881,146882,146884,146886,146888],{"class":38,"line":39},[36,146883,30894],{"class":53},[36,146885,345],{"class":42},[36,146887,6324],{"class":405},[36,146889,63],{"class":42},[36,146891,146892,146894,146896,146898],{"class":38,"line":66},[36,146893,30894],{"class":53},[36,146895,345],{"class":42},[36,146897,930],{"class":53},[36,146899,63],{"class":42},[36,146901,146902,146904,146906,146908],{"class":38,"line":73},[36,146903,30894],{"class":53},[36,146905,345],{"class":42},[36,146907,674],{"class":53},[36,146909,63],{"class":42},[36,146911,146912,146914,146916,146919,146921,146923],{"class":38,"line":79},[36,146913,30894],{"class":53},[36,146915,345],{"class":42},[36,146917,146918],{"class":405},"\"年龄:\"",[36,146920,12915],{"class":42},[36,146922,1263],{"class":53},[36,146924,63],{"class":42},[19,146926,146927],{},"多个内容用逗号隔开，默认中间加空格：",[26,146929,146931],{"className":28,"code":146930,"language":30,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,146932,146933,146943,146953],{"__ignoreMap":31},[36,146934,146935,146938,146940],{"class":38,"line":39},[36,146936,146937],{"class":42},"name ",[36,146939,47],{"class":46},[36,146941,146942],{"class":405}," \"张三\"\n",[36,146944,146945,146948,146950],{"class":38,"line":66},[36,146946,146947],{"class":42},"age ",[36,146949,47],{"class":46},[36,146951,146952],{"class":53}," 18\n",[36,146954,146955,146957,146959,146962,146965,146967],{"class":38,"line":73},[36,146956,30894],{"class":53},[36,146958,345],{"class":42},[36,146960,146961],{"class":405},"\"姓名:\"",[36,146963,146964],{"class":42},", name, ",[36,146966,146918],{"class":405},[36,146968,146969],{"class":42},", age)\n",[19,146971,146972],{},"修改分隔符：",[26,146974,146976],{"className":28,"code":146975,"language":30,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,146977,146978],{"__ignoreMap":31},[36,146979,146980,146982,146984,146987,146989,146991,146993,146995,146997,147000,147002,147004],{"class":38,"line":39},[36,146981,30894],{"class":53},[36,146983,345],{"class":42},[36,146985,146986],{"class":405},"\"2024\"",[36,146988,12915],{"class":42},[36,146990,54793],{"class":405},[36,146992,12915],{"class":42},[36,146994,54793],{"class":405},[36,146996,12915],{"class":42},[36,146998,146999],{"class":5696},"sep",[36,147001,47],{"class":46},[36,147003,32960],{"class":405},[36,147005,63],{"class":42},[19,147007,147008],{},"修改结尾符：",[26,147010,147012],{"className":28,"code":147011,"language":30,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,147013,147014,147032],{"__ignoreMap":31},[36,147015,147016,147018,147020,147022,147024,147026,147028,147030],{"class":38,"line":39},[36,147017,30894],{"class":53},[36,147019,345],{"class":42},[36,147021,6324],{"class":405},[36,147023,12915],{"class":42},[36,147025,46278],{"class":5696},[36,147027,47],{"class":46},[36,147029,4839],{"class":405},[36,147031,63],{"class":42},[36,147033,147034,147036,147038,147041],{"class":38,"line":66},[36,147035,30894],{"class":53},[36,147037,345],{"class":42},[36,147039,147040],{"class":405},"\"python\"",[36,147042,63],{"class":42},[14,147044,147046],{"id":147045},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147048,147049],{},"交互运行适合临时验证：",[26,147051,147053],{"className":28,"code":147052,"language":30,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,147054,147055,147065],{"__ignoreMap":31},[36,147056,147057,147059,147061,147063],{"class":38,"line":39},[36,147058,146254],{"class":46},[36,147060,2518],{"class":53},[36,147062,6998],{"class":46},[36,147064,120437],{"class":53},[36,147066,147067],{"class":38,"line":66},[36,147068,147069],{"class":53},"30\n",[19,147071,147072],{},"脚本运行适合保存程序：",[26,147074,147076],{"className":28,"code":147075,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,147077,147078,147088,147097],{"__ignoreMap":31},[36,147079,147080,147083,147085],{"class":38,"line":39},[36,147081,147082],{"class":42},"price ",[36,147084,47],{"class":46},[36,147086,147087],{"class":53}," 8\n",[36,147089,147090,147093,147095],{"class":38,"line":66},[36,147091,147092],{"class":42},"count ",[36,147094,47],{"class":46},[36,147096,54904],{"class":53},[36,147098,147099,147101,147104,147106],{"class":38,"line":73},[36,147100,30894],{"class":53},[36,147102,147103],{"class":42},"(price ",[36,147105,1071],{"class":46},[36,147107,147108],{"class":42}," count)\n",[19,147110,147111],{},"实际学习中推荐：",[579,147113,147114,147117,147122],{},[582,147115,147116],{},"临时试一个语法，用交互模式。",[582,147118,147119,147120,126384],{},"写完整练习，用 ",[33,147121,146753],{},[582,147123,147124],{},"写项目，用独立目录和虚拟环境。",[14,147126,147128],{"id":147127},"_110-常见错误","1.10 常见错误",[596,147130,147132],{"id":147131},"_1101-命令找不到","1.10.1 命令找不到",[26,147134,147137],{"className":147135,"code":147136,"language":5667,"meta":31},[5665],"python: command not found\n",[33,147138,147136],{"__ignoreMap":31},[19,147140,147141],{},"原因：",[579,147143,147144,147147,147150],{},[582,147145,147146],{},"没安装 Python。",[582,147148,147149],{},"PATH 没配置。",[582,147151,147152,147153,28866],{},"Linux\u002FmacOS 应该使用 ",[33,147154,101280],{},[596,147156,147158],{"id":147157},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147160,147161],{},"不要把文件命名为：",[26,147163,147166],{"className":147164,"code":147165,"language":5667,"meta":31},[5665],"random.py\njson.py\ntime.py\nrequests.py\n",[33,147167,147165],{"__ignoreMap":31},[19,147169,147170],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[596,147172,147174],{"id":147173},"_1103-中文乱码","1.10.3 中文乱码",[19,147176,147177],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147179,147180],{},"如果读写文件出现乱码，要明确指定编码：",[26,147182,147184],{"className":28,"code":147183,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,147185,147186,147220],{"__ignoreMap":31},[36,147187,147188,147190,147193,147195,147198,147200,147203,147205,147208,147210,147213,147215,147217],{"class":38,"line":39},[36,147189,108234],{"class":46},[36,147191,147192],{"class":53}," open",[36,147194,345],{"class":42},[36,147196,147197],{"class":405},"\"data.txt\"",[36,147199,12915],{"class":42},[36,147201,147202],{"class":405},"\"r\"",[36,147204,12915],{"class":42},[36,147206,147207],{"class":5696},"encoding",[36,147209,47],{"class":46},[36,147211,147212],{"class":405},"\"utf-8\"",[36,147214,14194],{"class":42},[36,147216,31861],{"class":46},[36,147218,147219],{"class":42}," f:\n",[36,147221,147222,147225,147227],{"class":38,"line":66},[36,147223,147224],{"class":42},"    content ",[36,147226,47],{"class":46},[36,147228,147229],{"class":42}," f.read()\n",[14,147231,147233],{"id":147232},"_111-本章练习","1.11 本章练习",[579,147235,147236,147239,147245],{},[582,147237,147238],{},"安装 Python，并在终端输出版本号。",[582,147240,147241,147242,147244],{},"新建 ",[33,147243,146799],{},"，输出自己的姓名、年龄、学习目标。",[582,147246,104767,147247,147249],{},[33,147248,146873],{}," 输出下面格式：",[26,147251,147254],{"className":147252,"code":147253,"language":5667,"meta":31},[5665],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,147255,147253],{"__ignoreMap":31},[579,147257,147258],{"start":79},[582,147259,104767,147260,147262],{},[33,147261,146999],{}," 输出日期：",[26,147264,147267],{"className":147265,"code":147266,"language":5667,"meta":31},[5665],"2024-10-10\n",[33,147268,147266],{"__ignoreMap":31},[579,147270,147271],{"start":85},[582,147272,104767,147273,147275,147276,147278],{},[33,147274,46278],{}," 让两次 ",[33,147277,146873],{}," 输出在同一行。",[539,147280,147281],{},"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":31,"searchDepth":66,"depth":66,"links":147283},[147284,147285,147286,147291,147292,147293,147297,147298,147299,147300,147305],{"id":146166,"depth":66,"text":146167},{"id":146210,"depth":66,"text":146211},{"id":146311,"depth":66,"text":146312,"children":147287},[147288,147289,147290],{"id":146315,"depth":73,"text":146316},{"id":146370,"depth":73,"text":146371},{"id":146406,"depth":73,"text":146407},{"id":146479,"depth":66,"text":146480},{"id":146624,"depth":66,"text":146625},{"id":146729,"depth":66,"text":146730,"children":147294},[147295,147296],{"id":146733,"depth":73,"text":146734},{"id":146762,"depth":73,"text":146763},{"id":146792,"depth":66,"text":146793},{"id":146867,"depth":66,"text":146868},{"id":147045,"depth":66,"text":147046},{"id":147127,"depth":66,"text":147128,"children":147301},[147302,147303,147304],{"id":147131,"depth":73,"text":147132},{"id":147157,"depth":73,"text":147158},{"id":147173,"depth":73,"text":147174},{"id":147232,"depth":66,"text":147233},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146158,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147312,"title":147313,"body":147314,"description":550,"extension":551,"meta":149718,"navigation":553,"path":149719,"seo":149720,"stem":149721,"__hash__":149722},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147315,"toc":149703},[147316,147319,147323,147326,147329,147346,147349,147391,147394,147398,147401,147404,147441,147444,147478,147481,147573,147577,147591,147594,147621,147624,147628,147731,147738,147741,147758,147762,147769,147958,147961,148034,148038,148041,148125,148128,148160,148164,148368,148371,148375,148381,148483,148486,148742,148746,148749,148752,148766,148768,148954,148958,149320,149326,149330,149333,149457,149460,149639,149642,149646,149679,149683,149700],[10,147317,147313],{"id":147318},"_10-json与pyecharts折线图",[14,147320,147322],{"id":147321},"_101-数据可视化","10.1 数据可视化",[19,147324,147325],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147327,147328],{},"常见图表：",[579,147330,147331,147334,147337,147340,147343],{},[582,147332,147333],{},"折线图：看趋势。",[582,147335,147336],{},"柱状图：看分类对比。",[582,147338,147339],{},"饼图：看占比。",[582,147341,147342],{},"地图：看地域分布。",[582,147344,147345],{},"散点图：看两个变量之间的关系。",[19,147347,147348],{},"Python 可视化常用库：",[758,147350,147351,147359],{},[761,147352,147353],{},[764,147354,147355,147357],{},[767,147356,146562],{},[767,147358,24220],{},[805,147360,147361,147368,147376,147383],{},[764,147362,147363,147365],{},[810,147364,146594],{},[810,147366,147367],{},"基础、经典、可定制",[764,147369,147370,147373],{},[810,147371,147372],{},"seaborn",[810,147374,147375],{},"统计图表更美观",[764,147377,147378,147380],{},[810,147379,146602],{},[810,147381,147382],{},"生成交互式网页图表",[764,147384,147385,147388],{},[810,147386,147387],{},"plotly",[810,147389,147390],{},"交互图表能力强",[19,147392,147393],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147395,147397],{"id":147396},"_102-json回顾","10.2 JSON回顾",[19,147399,147400],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147402,147403],{},"Python 字典：",[26,147405,147407],{"className":28,"code":147406,"language":30,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,147408,147409,147417,147428,147437],{"__ignoreMap":31},[36,147410,147411,147413,147415],{"class":38,"line":39},[36,147412,102059],{"class":42},[36,147414,47],{"class":46},[36,147416,16052],{"class":42},[36,147418,147419,147422,147424,147426],{"class":38,"line":66},[36,147420,147421],{"class":405},"    \"name\"",[36,147423,51914],{"class":42},[36,147425,69746],{"class":405},[36,147427,31944],{"class":42},[36,147429,147430,147433,147435],{"class":38,"line":73},[36,147431,147432],{"class":405},"    \"value\"",[36,147434,51914],{"class":42},[36,147436,97926],{"class":53},[36,147438,147439],{"class":38,"line":79},[36,147440,2045],{"class":42},[19,147442,147443],{},"JSON 字符串：",[26,147445,147448],{"className":147446,"code":147447,"language":146193,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,147449,147450,147454,147465,147474],{"__ignoreMap":31},[36,147451,147452],{"class":38,"line":39},[36,147453,2026],{"class":42},[36,147455,147456,147459,147461,147463],{"class":38,"line":66},[36,147457,147458],{"class":53},"  \"name\"",[36,147460,51914],{"class":42},[36,147462,69746],{"class":405},[36,147464,31944],{"class":42},[36,147466,147467,147470,147472],{"class":38,"line":73},[36,147468,147469],{"class":53},"  \"value\"",[36,147471,51914],{"class":42},[36,147473,97926],{"class":53},[36,147475,147476],{"class":38,"line":79},[36,147477,2045],{"class":42},[19,147479,147480],{},"Python 与 JSON 的转换：",[26,147482,147484],{"className":28,"code":147483,"language":30,"meta":31,"style":31},"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",[33,147485,147486,147493,147497,147522,147526,147545,147552,147556,147566],{"__ignoreMap":31},[36,147487,147488,147490],{"class":38,"line":39},[36,147489,30871],{"class":46},[36,147491,147492],{"class":42}," json\n",[36,147494,147495],{"class":38,"line":66},[36,147496,2880],{"emptyLinePlaceholder":553},[36,147498,147499,147501,147503,147505,147507,147509,147511,147513,147516,147518,147520],{"class":38,"line":73},[36,147500,102059],{"class":42},[36,147502,47],{"class":46},[36,147504,4928],{"class":42},[36,147506,63156],{"class":405},[36,147508,51914],{"class":42},[36,147510,69746],{"class":405},[36,147512,12915],{"class":42},[36,147514,147515],{"class":405},"\"value\"",[36,147517,51914],{"class":42},[36,147519,930],{"class":53},[36,147521,2045],{"class":42},[36,147523,147524],{"class":38,"line":79},[36,147525,2880],{"emptyLinePlaceholder":553},[36,147527,147528,147531,147533,147536,147539,147541,147543],{"class":38,"line":85},[36,147529,147530],{"class":42},"json_text ",[36,147532,47],{"class":46},[36,147534,147535],{"class":42}," json.dumps(data, ",[36,147537,147538],{"class":5696},"ensure_ascii",[36,147540,47],{"class":46},[36,147542,34464],{"class":53},[36,147544,63],{"class":42},[36,147546,147547,147549],{"class":38,"line":419},[36,147548,30894],{"class":53},[36,147550,147551],{"class":42},"(json_text)\n",[36,147553,147554],{"class":38,"line":425},[36,147555,2880],{"emptyLinePlaceholder":553},[36,147557,147558,147561,147563],{"class":38,"line":431},[36,147559,147560],{"class":42},"new_data ",[36,147562,47],{"class":46},[36,147564,147565],{"class":42}," json.loads(json_text)\n",[36,147567,147568,147570],{"class":38,"line":437},[36,147569,30894],{"class":53},[36,147571,147572],{"class":42},"(new_data)\n",[14,147574,147576],{"id":147575},"_103-安装pyecharts","10.3 安装pyecharts",[26,147578,147580],{"className":24302,"code":147579,"language":24304,"meta":31,"style":31},"pip install pyecharts\n",[33,147581,147582],{"__ignoreMap":31},[36,147583,147584,147586,147588],{"class":38,"line":39},[36,147585,24311],{"class":2443},[36,147587,24314],{"class":405},[36,147589,147590],{"class":405}," pyecharts\n",[19,147592,147593],{},"验证：",[26,147595,147597],{"className":28,"code":147596,"language":30,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,147598,147599,147605,147609],{"__ignoreMap":31},[36,147600,147601,147603],{"class":38,"line":39},[36,147602,30871],{"class":46},[36,147604,147590],{"class":42},[36,147606,147607],{"class":38,"line":66},[36,147608,2880],{"emptyLinePlaceholder":553},[36,147610,147611,147613,147616,147619],{"class":38,"line":73},[36,147612,30894],{"class":53},[36,147614,147615],{"class":42},"(pyecharts.",[36,147617,147618],{"class":53},"__version__",[36,147620,63],{"class":42},[19,147622,147623],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147625,147627],{"id":147626},"_104-第一个折线图","10.4 第一个折线图",[26,147629,147631],{"className":28,"code":147630,"language":30,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[33,147632,147633,147645,147649,147659,147689,147721],{"__ignoreMap":31},[36,147634,147635,147637,147640,147642],{"class":38,"line":39},[36,147636,31215],{"class":46},[36,147638,147639],{"class":42}," pyecharts.charts ",[36,147641,30871],{"class":46},[36,147643,147644],{"class":42}," Line\n",[36,147646,147647],{"class":38,"line":66},[36,147648,2880],{"emptyLinePlaceholder":553},[36,147650,147651,147654,147656],{"class":38,"line":73},[36,147652,147653],{"class":42},"line ",[36,147655,47],{"class":46},[36,147657,147658],{"class":42}," Line()\n",[36,147660,147661,147664,147667,147669,147672,147674,147677,147679,147682,147684,147687],{"class":38,"line":79},[36,147662,147663],{"class":42},"line.add_xaxis([",[36,147665,147666],{"class":405},"\"周一\"",[36,147668,12915],{"class":42},[36,147670,147671],{"class":405},"\"周二\"",[36,147673,12915],{"class":42},[36,147675,147676],{"class":405},"\"周三\"",[36,147678,12915],{"class":42},[36,147680,147681],{"class":405},"\"周四\"",[36,147683,12915],{"class":42},[36,147685,147686],{"class":405},"\"周五\"",[36,147688,5137],{"class":42},[36,147690,147691,147694,147697,147699,147701,147703,147705,147707,147709,147711,147714,147716,147719],{"class":38,"line":85},[36,147692,147693],{"class":42},"line.add_yaxis(",[36,147695,147696],{"class":405},"\"销售额\"",[36,147698,77995],{"class":42},[36,147700,930],{"class":53},[36,147702,12915],{"class":42},[36,147704,1430],{"class":53},[36,147706,12915],{"class":42},[36,147708,1475],{"class":53},[36,147710,12915],{"class":42},[36,147712,147713],{"class":53},"150",[36,147715,12915],{"class":42},[36,147717,147718],{"class":53},"180",[36,147720,5137],{"class":42},[36,147722,147723,147726,147729],{"class":38,"line":419},[36,147724,147725],{"class":42},"line.render(",[36,147727,147728],{"class":405},"\"line.html\"",[36,147730,63],{"class":42},[19,147732,147733,147734,147737],{},"运行后会生成 ",[33,147735,147736],{},"line.html","，用浏览器打开即可看到图表。",[19,147739,147740],{},"核心步骤：",[579,147742,147743,147746,147749,147752,147755],{},[582,147744,147745],{},"导入图表类。",[582,147747,147748],{},"创建图表对象。",[582,147750,147751],{},"添加 x 轴数据。",[582,147753,147754],{},"添加 y 轴数据。",[582,147756,147757],{},"渲染为 HTML。",[14,147759,147761],{"id":147760},"_105-全局配置","10.5 全局配置",[19,147763,147764,147765,147768],{},"常用配置在 ",[33,147766,147767],{},"pyecharts.options"," 中。",[26,147770,147772],{"className":28,"code":147771,"language":30,"meta":31,"style":31},"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",[33,147773,147774,147791,147801,147805,147813,147837,147865,147870,147889,147908,147926,147946,147950],{"__ignoreMap":31},[36,147775,147776,147778,147781,147783,147786,147788],{"class":38,"line":39},[36,147777,31215],{"class":46},[36,147779,147780],{"class":42}," pyecharts ",[36,147782,30871],{"class":46},[36,147784,147785],{"class":42}," options ",[36,147787,31861],{"class":46},[36,147789,147790],{"class":42}," opts\n",[36,147792,147793,147795,147797,147799],{"class":38,"line":66},[36,147794,31215],{"class":46},[36,147796,147639],{"class":42},[36,147798,30871],{"class":46},[36,147800,147644],{"class":42},[36,147802,147803],{"class":38,"line":73},[36,147804,2880],{"emptyLinePlaceholder":553},[36,147806,147807,147809,147811],{"class":38,"line":79},[36,147808,147653],{"class":42},[36,147810,47],{"class":46},[36,147812,147658],{"class":42},[36,147814,147815,147817,147819,147821,147823,147825,147827,147829,147831,147833,147835],{"class":38,"line":85},[36,147816,147663],{"class":42},[36,147818,147666],{"class":405},[36,147820,12915],{"class":42},[36,147822,147671],{"class":405},[36,147824,12915],{"class":42},[36,147826,147676],{"class":405},[36,147828,12915],{"class":42},[36,147830,147681],{"class":405},[36,147832,12915],{"class":42},[36,147834,147686],{"class":405},[36,147836,5137],{"class":42},[36,147838,147839,147841,147843,147845,147847,147849,147851,147853,147855,147857,147859,147861,147863],{"class":38,"line":419},[36,147840,147693],{"class":42},[36,147842,147696],{"class":405},[36,147844,77995],{"class":42},[36,147846,930],{"class":53},[36,147848,12915],{"class":42},[36,147850,1430],{"class":53},[36,147852,12915],{"class":42},[36,147854,1475],{"class":53},[36,147856,12915],{"class":42},[36,147858,147713],{"class":53},[36,147860,12915],{"class":42},[36,147862,147718],{"class":53},[36,147864,5137],{"class":42},[36,147866,147867],{"class":38,"line":425},[36,147868,147869],{"class":42},"line.set_global_opts(\n",[36,147871,147872,147875,147877,147880,147882,147884,147887],{"class":38,"line":431},[36,147873,147874],{"class":5696},"    title_opts",[36,147876,47],{"class":46},[36,147878,147879],{"class":42},"opts.TitleOpts(",[36,147881,51884],{"class":5696},[36,147883,47],{"class":46},[36,147885,147886],{"class":405},"\"一周销售额\"",[36,147888,38524],{"class":42},[36,147890,147891,147894,147896,147899,147901,147903,147906],{"class":38,"line":437},[36,147892,147893],{"class":5696},"    xaxis_opts",[36,147895,47],{"class":46},[36,147897,147898],{"class":42},"opts.AxisOpts(",[36,147900,80287],{"class":5696},[36,147902,47],{"class":46},[36,147904,147905],{"class":405},"\"日期\"",[36,147907,38524],{"class":42},[36,147909,147910,147913,147915,147917,147919,147921,147924],{"class":38,"line":443},[36,147911,147912],{"class":5696},"    yaxis_opts",[36,147914,47],{"class":46},[36,147916,147898],{"class":42},[36,147918,80287],{"class":5696},[36,147920,47],{"class":46},[36,147922,147923],{"class":405},"\"金额\"",[36,147925,38524],{"class":42},[36,147927,147928,147931,147933,147936,147939,147941,147944],{"class":38,"line":2092},[36,147929,147930],{"class":5696},"    tooltip_opts",[36,147932,47],{"class":46},[36,147934,147935],{"class":42},"opts.TooltipOpts(",[36,147937,147938],{"class":5696},"trigger",[36,147940,47],{"class":46},[36,147942,147943],{"class":405},"\"axis\"",[36,147945,38524],{"class":42},[36,147947,147948],{"class":38,"line":2097},[36,147949,63],{"class":42},[36,147951,147952,147954,147956],{"class":38,"line":2103},[36,147953,147725],{"class":42},[36,147955,147728],{"class":405},[36,147957,63],{"class":42},[19,147959,147960],{},"常见全局配置：",[758,147962,147963,147972],{},[761,147964,147965],{},[764,147966,147967,147970],{},[767,147968,147969],{},"配置",[767,147971,103097],{},[805,147973,147974,147984,147994,148004,148014,148024],{},[764,147975,147976,147981],{},[810,147977,147978],{},[33,147979,147980],{},"TitleOpts",[810,147982,147983],{},"标题",[764,147985,147986,147991],{},[810,147987,147988],{},[33,147989,147990],{},"LegendOpts",[810,147992,147993],{},"图例",[764,147995,147996,148001],{},[810,147997,147998],{},[33,147999,148000],{},"TooltipOpts",[810,148002,148003],{},"提示框",[764,148005,148006,148011],{},[810,148007,148008],{},[33,148009,148010],{},"AxisOpts",[810,148012,148013],{},"坐标轴",[764,148015,148016,148021],{},[810,148017,148018],{},[33,148019,148020],{},"VisualMapOpts",[810,148022,148023],{},"视觉映射",[764,148025,148026,148031],{},[810,148027,148028],{},[33,148029,148030],{},"DataZoomOpts",[810,148032,148033],{},"区域缩放",[14,148035,148037],{"id":148036},"_106-系列配置","10.6 系列配置",[19,148039,148040],{},"系列配置作用于某一组数据。",[26,148042,148044],{"className":28,"code":148043,"language":30,"meta":31,"style":31},"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",[33,148045,148046,148051,148062,148091,148102,148121],{"__ignoreMap":31},[36,148047,148048],{"class":38,"line":39},[36,148049,148050],{"class":42},"line.add_yaxis(\n",[36,148052,148053,148056,148058,148060],{"class":38,"line":66},[36,148054,148055],{"class":5696},"    series_name",[36,148057,47],{"class":46},[36,148059,147696],{"class":405},[36,148061,31944],{"class":42},[36,148063,148064,148067,148069,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089],{"class":38,"line":73},[36,148065,148066],{"class":5696},"    y_axis",[36,148068,47],{"class":46},[36,148070,1503],{"class":42},[36,148072,930],{"class":53},[36,148074,12915],{"class":42},[36,148076,1430],{"class":53},[36,148078,12915],{"class":42},[36,148080,1475],{"class":53},[36,148082,12915],{"class":42},[36,148084,147713],{"class":53},[36,148086,12915],{"class":42},[36,148088,147718],{"class":53},[36,148090,88313],{"class":42},[36,148092,148093,148096,148098,148100],{"class":38,"line":79},[36,148094,148095],{"class":5696},"    is_smooth",[36,148097,47],{"class":46},[36,148099,31954],{"class":53},[36,148101,31944],{"class":42},[36,148103,148104,148107,148109,148112,148115,148117,148119],{"class":38,"line":85},[36,148105,148106],{"class":5696},"    label_opts",[36,148108,47],{"class":46},[36,148110,148111],{"class":42},"opts.LabelOpts(",[36,148113,148114],{"class":5696},"is_show",[36,148116,47],{"class":46},[36,148118,31954],{"class":53},[36,148120,38524],{"class":42},[36,148122,148123],{"class":38,"line":419},[36,148124,63],{"class":42},[19,148126,148127],{},"常用参数：",[579,148129,148130,148136,148142,148148,148154],{},[582,148131,148132,148135],{},[33,148133,148134],{},"series_name","：系列名称。",[582,148137,148138,148141],{},[33,148139,148140],{},"y_axis","：y 轴数据。",[582,148143,148144,148147],{},[33,148145,148146],{},"is_smooth","：是否平滑曲线。",[582,148149,148150,148153],{},[33,148151,148152],{},"label_opts","：标签配置。",[582,148155,148156,148159],{},[33,148157,148158],{},"symbol_size","：标记点大小。",[14,148161,148163],{"id":148162},"_107-多条折线","10.7 多条折线",[26,148165,148167],{"className":28,"code":148166,"language":30,"meta":31,"style":31},"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",[33,148168,148169,148183,148193,148197,148226,148230,148238,148243,148281,148318,148322,148339,148355,148359],{"__ignoreMap":31},[36,148170,148171,148173,148175,148177,148179,148181],{"class":38,"line":39},[36,148172,31215],{"class":46},[36,148174,147780],{"class":42},[36,148176,30871],{"class":46},[36,148178,147785],{"class":42},[36,148180,31861],{"class":46},[36,148182,147790],{"class":42},[36,148184,148185,148187,148189,148191],{"class":38,"line":66},[36,148186,31215],{"class":46},[36,148188,147639],{"class":42},[36,148190,30871],{"class":46},[36,148192,147644],{"class":42},[36,148194,148195],{"class":38,"line":73},[36,148196,2880],{"emptyLinePlaceholder":553},[36,148198,148199,148202,148204,148206,148208,148210,148212,148214,148216,148218,148220,148222,148224],{"class":38,"line":79},[36,148200,148201],{"class":42},"dates ",[36,148203,47],{"class":46},[36,148205,52703],{"class":42},[36,148207,147666],{"class":405},[36,148209,12915],{"class":42},[36,148211,147671],{"class":405},[36,148213,12915],{"class":42},[36,148215,147676],{"class":405},[36,148217,12915],{"class":42},[36,148219,147681],{"class":405},[36,148221,12915],{"class":42},[36,148223,147686],{"class":405},[36,148225,33723],{"class":42},[36,148227,148228],{"class":38,"line":85},[36,148229,2880],{"emptyLinePlaceholder":553},[36,148231,148232,148234,148236],{"class":38,"line":419},[36,148233,147653],{"class":42},[36,148235,47],{"class":46},[36,148237,147658],{"class":42},[36,148239,148240],{"class":38,"line":425},[36,148241,148242],{"class":42},"line.add_xaxis(dates)\n",[36,148244,148245,148247,148250,148252,148254,148256,148259,148261,148263,148265,148267,148269,148271,148273,148275,148277,148279],{"class":38,"line":431},[36,148246,147693],{"class":42},[36,148248,148249],{"class":405},"\"线上销售\"",[36,148251,77995],{"class":42},[36,148253,930],{"class":53},[36,148255,12915],{"class":42},[36,148257,148258],{"class":53},"130",[36,148260,12915],{"class":42},[36,148262,1430],{"class":53},[36,148264,12915],{"class":42},[36,148266,21528],{"class":53},[36,148268,12915],{"class":42},[36,148270,2202],{"class":53},[36,148272,112603],{"class":42},[36,148274,148146],{"class":5696},[36,148276,47],{"class":46},[36,148278,31954],{"class":53},[36,148280,63],{"class":42},[36,148282,148283,148285,148288,148290,148292,148294,148296,148298,148300,148302,148304,148306,148308,148310,148312,148314,148316],{"class":38,"line":437},[36,148284,147693],{"class":42},[36,148286,148287],{"class":405},"\"线下销售\"",[36,148289,77995],{"class":42},[36,148291,1225],{"class":53},[36,148293,12915],{"class":42},[36,148295,1475],{"class":53},[36,148297,12915],{"class":42},[36,148299,930],{"class":53},[36,148301,12915],{"class":42},[36,148303,1430],{"class":53},[36,148305,12915],{"class":42},[36,148307,147713],{"class":53},[36,148309,112603],{"class":42},[36,148311,148146],{"class":5696},[36,148313,47],{"class":46},[36,148315,31954],{"class":53},[36,148317,63],{"class":42},[36,148319,148320],{"class":38,"line":443},[36,148321,147869],{"class":42},[36,148323,148324,148326,148328,148330,148332,148334,148337],{"class":38,"line":2092},[36,148325,147874],{"class":5696},[36,148327,47],{"class":46},[36,148329,147879],{"class":42},[36,148331,51884],{"class":5696},[36,148333,47],{"class":46},[36,148335,148336],{"class":405},"\"线上线下销售趋势\"",[36,148338,38524],{"class":42},[36,148340,148341,148343,148345,148347,148349,148351,148353],{"class":38,"line":2097},[36,148342,147930],{"class":5696},[36,148344,47],{"class":46},[36,148346,147935],{"class":42},[36,148348,147938],{"class":5696},[36,148350,47],{"class":46},[36,148352,147943],{"class":405},[36,148354,38524],{"class":42},[36,148356,148357],{"class":38,"line":2103},[36,148358,63],{"class":42},[36,148360,148361,148363,148366],{"class":38,"line":2108},[36,148362,147725],{"class":42},[36,148364,148365],{"class":405},"\"sales.html\"",[36,148367,63],{"class":42},[19,148369,148370],{},"多条折线适合比较不同指标或不同地区。",[14,148372,148374],{"id":148373},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148376,148377,148378,25099],{},"假设 ",[33,148379,148380],{},"sales.json",[26,148382,148384],{"className":147446,"code":148383,"language":146193,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[33,148385,148386,148391,148423,148451,148479],{"__ignoreMap":31},[36,148387,148388],{"class":38,"line":39},[36,148389,148390],{"class":42},"[\n",[36,148392,148393,148396,148399,148401,148403,148405,148408,148410,148412,148414,148417,148419,148421],{"class":38,"line":66},[36,148394,148395],{"class":42},"  {",[36,148397,148398],{"class":53},"\"date\"",[36,148400,51914],{"class":42},[36,148402,147666],{"class":405},[36,148404,12915],{"class":42},[36,148406,148407],{"class":53},"\"online\"",[36,148409,51914],{"class":42},[36,148411,930],{"class":53},[36,148413,12915],{"class":42},[36,148415,148416],{"class":53},"\"offline\"",[36,148418,51914],{"class":42},[36,148420,1225],{"class":53},[36,148422,5410],{"class":42},[36,148424,148425,148427,148429,148431,148433,148435,148437,148439,148441,148443,148445,148447,148449],{"class":38,"line":73},[36,148426,148395],{"class":42},[36,148428,148398],{"class":53},[36,148430,51914],{"class":42},[36,148432,147671],{"class":405},[36,148434,12915],{"class":42},[36,148436,148407],{"class":53},[36,148438,51914],{"class":42},[36,148440,148258],{"class":53},[36,148442,12915],{"class":42},[36,148444,148416],{"class":53},[36,148446,51914],{"class":42},[36,148448,1475],{"class":53},[36,148450,5410],{"class":42},[36,148452,148453,148455,148457,148459,148461,148463,148465,148467,148469,148471,148473,148475,148477],{"class":38,"line":79},[36,148454,148395],{"class":42},[36,148456,148398],{"class":53},[36,148458,51914],{"class":42},[36,148460,147676],{"class":405},[36,148462,12915],{"class":42},[36,148464,148407],{"class":53},[36,148466,51914],{"class":42},[36,148468,1430],{"class":53},[36,148470,12915],{"class":42},[36,148472,148416],{"class":53},[36,148474,51914],{"class":42},[36,148476,930],{"class":53},[36,148478,2045],{"class":42},[36,148480,148481],{"class":38,"line":85},[36,148482,33723],{"class":42},[19,148484,148485],{},"读取并绘图：",[26,148487,148489],{"className":28,"code":148488,"language":30,"meta":31,"style":31},"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",[33,148490,148491,148497,148511,148521,148525,148557,148570,148574,148582,148591,148600,148604,148616,148625,148634,148643,148647,148655,148659,148676,148693,148697,148714,148730,148734],{"__ignoreMap":31},[36,148492,148493,148495],{"class":38,"line":39},[36,148494,30871],{"class":46},[36,148496,147492],{"class":42},[36,148498,148499,148501,148503,148505,148507,148509],{"class":38,"line":66},[36,148500,31215],{"class":46},[36,148502,147780],{"class":42},[36,148504,30871],{"class":46},[36,148506,147785],{"class":42},[36,148508,31861],{"class":46},[36,148510,147790],{"class":42},[36,148512,148513,148515,148517,148519],{"class":38,"line":73},[36,148514,31215],{"class":46},[36,148516,147639],{"class":42},[36,148518,30871],{"class":46},[36,148520,147644],{"class":42},[36,148522,148523],{"class":38,"line":79},[36,148524,2880],{"emptyLinePlaceholder":553},[36,148526,148527,148529,148531,148533,148536,148538,148540,148542,148544,148546,148548,148550,148552,148555],{"class":38,"line":85},[36,148528,108234],{"class":46},[36,148530,147192],{"class":53},[36,148532,345],{"class":42},[36,148534,148535],{"class":405},"\"sales.json\"",[36,148537,12915],{"class":42},[36,148539,147202],{"class":405},[36,148541,12915],{"class":42},[36,148543,147207],{"class":5696},[36,148545,47],{"class":46},[36,148547,147212],{"class":405},[36,148549,14194],{"class":42},[36,148551,31861],{"class":46},[36,148553,148554],{"class":5696}," file",[36,148556,4219],{"class":42},[36,148558,148559,148561,148563,148566,148568],{"class":38,"line":419},[36,148560,101822],{"class":42},[36,148562,47],{"class":46},[36,148564,148565],{"class":42}," json.load(",[36,148567,45831],{"class":5696},[36,148569,63],{"class":42},[36,148571,148572],{"class":38,"line":425},[36,148573,2880],{"emptyLinePlaceholder":553},[36,148575,148576,148578,148580],{"class":38,"line":431},[36,148577,148201],{"class":42},[36,148579,47],{"class":46},[36,148581,52315],{"class":42},[36,148583,148584,148587,148589],{"class":38,"line":437},[36,148585,148586],{"class":42},"online_sales ",[36,148588,47],{"class":46},[36,148590,52315],{"class":42},[36,148592,148593,148596,148598],{"class":38,"line":443},[36,148594,148595],{"class":42},"offline_sales ",[36,148597,47],{"class":46},[36,148599,52315],{"class":42},[36,148601,148602],{"class":38,"line":2092},[36,148603,2880],{"emptyLinePlaceholder":553},[36,148605,148606,148608,148611,148613],{"class":38,"line":2097},[36,148607,3505],{"class":46},[36,148609,148610],{"class":42}," item ",[36,148612,26524],{"class":46},[36,148614,148615],{"class":42}," data:\n",[36,148617,148618,148621,148623],{"class":38,"line":2103},[36,148619,148620],{"class":42},"    dates.append(item[",[36,148622,148398],{"class":405},[36,148624,5137],{"class":42},[36,148626,148627,148630,148632],{"class":38,"line":2108},[36,148628,148629],{"class":42},"    online_sales.append(item[",[36,148631,148407],{"class":405},[36,148633,5137],{"class":42},[36,148635,148636,148639,148641],{"class":38,"line":2122},[36,148637,148638],{"class":42},"    offline_sales.append(item[",[36,148640,148416],{"class":405},[36,148642,5137],{"class":42},[36,148644,148645],{"class":38,"line":2127},[36,148646,2880],{"emptyLinePlaceholder":553},[36,148648,148649,148651,148653],{"class":38,"line":2133},[36,148650,147653],{"class":42},[36,148652,47],{"class":46},[36,148654,147658],{"class":42},[36,148656,148657],{"class":38,"line":2154},[36,148658,148242],{"class":42},[36,148660,148661,148663,148665,148668,148670,148672,148674],{"class":38,"line":2159},[36,148662,147693],{"class":42},[36,148664,148249],{"class":405},[36,148666,148667],{"class":42},", online_sales, ",[36,148669,148146],{"class":5696},[36,148671,47],{"class":46},[36,148673,31954],{"class":53},[36,148675,63],{"class":42},[36,148677,148678,148680,148682,148685,148687,148689,148691],{"class":38,"line":2173},[36,148679,147693],{"class":42},[36,148681,148287],{"class":405},[36,148683,148684],{"class":42},", offline_sales, ",[36,148686,148146],{"class":5696},[36,148688,47],{"class":46},[36,148690,31954],{"class":53},[36,148692,63],{"class":42},[36,148694,148695],{"class":38,"line":2178},[36,148696,147869],{"class":42},[36,148698,148699,148701,148703,148705,148707,148709,148712],{"class":38,"line":2207},[36,148700,147874],{"class":5696},[36,148702,47],{"class":46},[36,148704,147879],{"class":42},[36,148706,51884],{"class":5696},[36,148708,47],{"class":46},[36,148710,148711],{"class":405},"\"销售趋势\"",[36,148713,38524],{"class":42},[36,148715,148716,148718,148720,148722,148724,148726,148728],{"class":38,"line":2212},[36,148717,147930],{"class":5696},[36,148719,47],{"class":46},[36,148721,147935],{"class":42},[36,148723,147938],{"class":5696},[36,148725,47],{"class":46},[36,148727,147943],{"class":405},[36,148729,38524],{"class":42},[36,148731,148732],{"class":38,"line":2229},[36,148733,63],{"class":42},[36,148735,148736,148738,148740],{"class":38,"line":2234},[36,148737,147725],{"class":42},[36,148739,148365],{"class":405},[36,148741,63],{"class":42},[14,148743,148745],{"id":148744},"_109-数据清洗","10.9 数据清洗",[19,148747,148748],{},"真实数据经常不整齐，需要清洗。",[19,148750,148751],{},"常见问题：",[579,148753,148754,148757,148760,148763],{},[582,148755,148756],{},"数字是字符串。",[582,148758,148759],{},"字段缺失。",[582,148761,148762],{},"空值。",[582,148764,148765],{},"日期格式不统一。",[19,148767,15615],{},[26,148769,148771],{"className":28,"code":148770,"language":30,"meta":31,"style":31},"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",[33,148772,148773,148782,148805,148825,148846,148850,148854,148862,148871,148875,148886,148900,148909,148914,148918,148926,148936,148940,148947],{"__ignoreMap":31},[36,148774,148775,148778,148780],{"class":38,"line":39},[36,148776,148777],{"class":42},"raw_data ",[36,148779,47],{"class":46},[36,148781,55924],{"class":42},[36,148783,148784,148787,148789,148791,148793,148795,148798,148800,148803],{"class":38,"line":66},[36,148785,148786],{"class":42},"    {",[36,148788,148398],{"class":405},[36,148790,51914],{"class":42},[36,148792,147666],{"class":405},[36,148794,12915],{"class":42},[36,148796,148797],{"class":405},"\"sales\"",[36,148799,51914],{"class":42},[36,148801,148802],{"class":405},"\"100\"",[36,148804,5410],{"class":42},[36,148806,148807,148809,148811,148813,148815,148817,148819,148821,148823],{"class":38,"line":73},[36,148808,148786],{"class":42},[36,148810,148398],{"class":405},[36,148812,51914],{"class":42},[36,148814,147671],{"class":405},[36,148816,12915],{"class":42},[36,148818,148797],{"class":405},[36,148820,51914],{"class":42},[36,148822,8132],{"class":405},[36,148824,5410],{"class":42},[36,148826,148827,148829,148831,148833,148835,148837,148839,148841,148844],{"class":38,"line":79},[36,148828,148786],{"class":42},[36,148830,148398],{"class":405},[36,148832,51914],{"class":42},[36,148834,147676],{"class":405},[36,148836,12915],{"class":42},[36,148838,148797],{"class":405},[36,148840,51914],{"class":42},[36,148842,148843],{"class":405},"\"120\"",[36,148845,5410],{"class":42},[36,148847,148848],{"class":38,"line":85},[36,148849,33723],{"class":42},[36,148851,148852],{"class":38,"line":419},[36,148853,2880],{"emptyLinePlaceholder":553},[36,148855,148856,148858,148860],{"class":38,"line":425},[36,148857,148201],{"class":42},[36,148859,47],{"class":46},[36,148861,52315],{"class":42},[36,148863,148864,148867,148869],{"class":38,"line":431},[36,148865,148866],{"class":42},"sales ",[36,148868,47],{"class":46},[36,148870,52315],{"class":42},[36,148872,148873],{"class":38,"line":437},[36,148874,2880],{"emptyLinePlaceholder":553},[36,148876,148877,148879,148881,148883],{"class":38,"line":443},[36,148878,3505],{"class":46},[36,148880,148610],{"class":42},[36,148882,26524],{"class":46},[36,148884,148885],{"class":42}," raw_data:\n",[36,148887,148888,148891,148893,148896,148898],{"class":38,"line":2092},[36,148889,148890],{"class":42},"    value ",[36,148892,47],{"class":46},[36,148894,148895],{"class":42}," item.get(",[36,148897,148797],{"class":405},[36,148899,63],{"class":42},[36,148901,148902,148904,148906],{"class":38,"line":2097},[36,148903,3581],{"class":46},[36,148905,39407],{"class":46},[36,148907,148908],{"class":42}," value:\n",[36,148910,148911],{"class":38,"line":2103},[36,148912,148913],{"class":46},"        continue\n",[36,148915,148916],{"class":38,"line":2108},[36,148917,2880],{"emptyLinePlaceholder":553},[36,148919,148920,148922,148924],{"class":38,"line":2122},[36,148921,148620],{"class":42},[36,148923,148398],{"class":405},[36,148925,5137],{"class":42},[36,148927,148928,148931,148933],{"class":38,"line":2127},[36,148929,148930],{"class":42},"    sales.append(",[36,148932,631],{"class":53},[36,148934,148935],{"class":42},"(value))\n",[36,148937,148938],{"class":38,"line":2133},[36,148939,2880],{"emptyLinePlaceholder":553},[36,148941,148942,148944],{"class":38,"line":2154},[36,148943,30894],{"class":53},[36,148945,148946],{"class":42},"(dates)\n",[36,148948,148949,148951],{"class":38,"line":2159},[36,148950,30894],{"class":53},[36,148952,148953],{"class":42},"(sales)\n",[14,148955,148957],{"id":148956},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,148959,148961],{"className":28,"code":148960,"language":30,"meta":31,"style":31},"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",[33,148962,148963,148977,148987,148991,148999,149020,149042,149064,149086,149108,149112,149116,149138,149159,149163,149171,149175,149179,149189,149198,149208,149224,149228,149232,149249,149265,149281,149297,149307,149311],{"__ignoreMap":31},[36,148964,148965,148967,148969,148971,148973,148975],{"class":38,"line":39},[36,148966,31215],{"class":46},[36,148968,147780],{"class":42},[36,148970,30871],{"class":46},[36,148972,147785],{"class":42},[36,148974,31861],{"class":46},[36,148976,147790],{"class":42},[36,148978,148979,148981,148983,148985],{"class":38,"line":66},[36,148980,31215],{"class":46},[36,148982,147639],{"class":42},[36,148984,30871],{"class":46},[36,148986,147644],{"class":42},[36,148988,148989],{"class":38,"line":73},[36,148990,2880],{"emptyLinePlaceholder":553},[36,148992,148993,148995,148997],{"class":38,"line":79},[36,148994,148866],{"class":42},[36,148996,47],{"class":46},[36,148998,55924],{"class":42},[36,149000,149001,149003,149005,149007,149010,149012,149014,149016,149018],{"class":38,"line":85},[36,149002,148786],{"class":42},[36,149004,148398],{"class":405},[36,149006,51914],{"class":42},[36,149008,149009],{"class":405},"\"2024-10-01\"",[36,149011,12915],{"class":42},[36,149013,84561],{"class":405},[36,149015,51914],{"class":42},[36,149017,92500],{"class":53},[36,149019,5410],{"class":42},[36,149021,149022,149024,149026,149028,149031,149033,149035,149037,149040],{"class":38,"line":419},[36,149023,148786],{"class":42},[36,149025,148398],{"class":405},[36,149027,51914],{"class":42},[36,149029,149030],{"class":405},"\"2024-10-02\"",[36,149032,12915],{"class":42},[36,149034,84561],{"class":405},[36,149036,51914],{"class":42},[36,149038,149039],{"class":53},"1800",[36,149041,5410],{"class":42},[36,149043,149044,149046,149048,149050,149053,149055,149057,149059,149062],{"class":38,"line":425},[36,149045,148786],{"class":42},[36,149047,148398],{"class":405},[36,149049,51914],{"class":42},[36,149051,149052],{"class":405},"\"2024-10-03\"",[36,149054,12915],{"class":42},[36,149056,84561],{"class":405},[36,149058,51914],{"class":42},[36,149060,149061],{"class":53},"1500",[36,149063,5410],{"class":42},[36,149065,149066,149068,149070,149072,149075,149077,149079,149081,149084],{"class":38,"line":431},[36,149067,148786],{"class":42},[36,149069,148398],{"class":405},[36,149071,51914],{"class":42},[36,149073,149074],{"class":405},"\"2024-10-04\"",[36,149076,12915],{"class":42},[36,149078,84561],{"class":405},[36,149080,51914],{"class":42},[36,149082,149083],{"class":53},"2100",[36,149085,5410],{"class":42},[36,149087,149088,149090,149092,149094,149097,149099,149101,149103,149106],{"class":38,"line":437},[36,149089,148786],{"class":42},[36,149091,148398],{"class":405},[36,149093,51914],{"class":42},[36,149095,149096],{"class":405},"\"2024-10-05\"",[36,149098,12915],{"class":42},[36,149100,84561],{"class":405},[36,149102,51914],{"class":42},[36,149104,149105],{"class":53},"2600",[36,149107,5410],{"class":42},[36,149109,149110],{"class":38,"line":443},[36,149111,33723],{"class":42},[36,149113,149114],{"class":38,"line":2092},[36,149115,2880],{"emptyLinePlaceholder":553},[36,149117,149118,149120,149122,149125,149127,149129,149131,149133,149135],{"class":38,"line":2097},[36,149119,148201],{"class":42},[36,149121,47],{"class":46},[36,149123,149124],{"class":42}," [item[",[36,149126,148398],{"class":405},[36,149128,4923],{"class":42},[36,149130,3505],{"class":46},[36,149132,148610],{"class":42},[36,149134,26524],{"class":46},[36,149136,149137],{"class":42}," sales]\n",[36,149139,149140,149143,149145,149147,149149,149151,149153,149155,149157],{"class":38,"line":2103},[36,149141,149142],{"class":42},"amounts ",[36,149144,47],{"class":46},[36,149146,149124],{"class":42},[36,149148,84561],{"class":405},[36,149150,4923],{"class":42},[36,149152,3505],{"class":46},[36,149154,148610],{"class":42},[36,149156,26524],{"class":46},[36,149158,149137],{"class":42},[36,149160,149161],{"class":38,"line":2108},[36,149162,2880],{"emptyLinePlaceholder":553},[36,149164,149165,149167,149169],{"class":38,"line":2122},[36,149166,147653],{"class":42},[36,149168,47],{"class":46},[36,149170,147658],{"class":42},[36,149172,149173],{"class":38,"line":2127},[36,149174,148242],{"class":42},[36,149176,149177],{"class":38,"line":2133},[36,149178,148050],{"class":42},[36,149180,149181,149183,149185,149187],{"class":38,"line":2154},[36,149182,148055],{"class":5696},[36,149184,47],{"class":46},[36,149186,147696],{"class":405},[36,149188,31944],{"class":42},[36,149190,149191,149193,149195],{"class":38,"line":2159},[36,149192,148066],{"class":5696},[36,149194,47],{"class":46},[36,149196,149197],{"class":42},"amounts,\n",[36,149199,149200,149202,149204,149206],{"class":38,"line":2173},[36,149201,148095],{"class":5696},[36,149203,47],{"class":46},[36,149205,31954],{"class":53},[36,149207,31944],{"class":42},[36,149209,149210,149212,149214,149216,149218,149220,149222],{"class":38,"line":2178},[36,149211,148106],{"class":5696},[36,149213,47],{"class":46},[36,149215,148111],{"class":42},[36,149217,148114],{"class":5696},[36,149219,47],{"class":46},[36,149221,31954],{"class":53},[36,149223,38524],{"class":42},[36,149225,149226],{"class":38,"line":2207},[36,149227,63],{"class":42},[36,149229,149230],{"class":38,"line":2212},[36,149231,147869],{"class":42},[36,149233,149234,149236,149238,149240,149242,149244,149247],{"class":38,"line":2229},[36,149235,147874],{"class":5696},[36,149237,47],{"class":46},[36,149239,147879],{"class":42},[36,149241,51884],{"class":5696},[36,149243,47],{"class":46},[36,149245,149246],{"class":405},"\"每日销售额\"",[36,149248,38524],{"class":42},[36,149250,149251,149253,149255,149257,149259,149261,149263],{"class":38,"line":2234},[36,149252,147893],{"class":5696},[36,149254,47],{"class":46},[36,149256,147898],{"class":42},[36,149258,80287],{"class":5696},[36,149260,47],{"class":46},[36,149262,147905],{"class":405},[36,149264,38524],{"class":42},[36,149266,149267,149269,149271,149273,149275,149277,149279],{"class":38,"line":2239},[36,149268,147912],{"class":5696},[36,149270,47],{"class":46},[36,149272,147898],{"class":42},[36,149274,80287],{"class":5696},[36,149276,47],{"class":46},[36,149278,147923],{"class":405},[36,149280,38524],{"class":42},[36,149282,149283,149285,149287,149289,149291,149293,149295],{"class":38,"line":2244},[36,149284,147930],{"class":5696},[36,149286,47],{"class":46},[36,149288,147935],{"class":42},[36,149290,147938],{"class":5696},[36,149292,47],{"class":46},[36,149294,147943],{"class":405},[36,149296,38524],{"class":42},[36,149298,149299,149302,149304],{"class":38,"line":2258},[36,149300,149301],{"class":5696},"    datazoom_opts",[36,149303,47],{"class":46},[36,149305,149306],{"class":42},"[opts.DataZoomOpts()],\n",[36,149308,149309],{"class":38,"line":2263},[36,149310,63],{"class":42},[36,149312,149313,149315,149318],{"class":38,"line":3057},[36,149314,147725],{"class":42},[36,149316,149317],{"class":405},"\"daily_sales.html\"",[36,149319,63],{"class":42},[19,149321,149322,149325],{},[33,149323,149324],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149327,149329],{"id":149328},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149331,149332],{},"如果数据结构如下：",[26,149334,149336],{"className":28,"code":149335,"language":30,"meta":31,"style":31},"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",[33,149337,149338,149346,149354,149376,149397,149402,149409,149429,149449,149453],{"__ignoreMap":31},[36,149339,149340,149342,149344],{"class":38,"line":39},[36,149341,102059],{"class":42},[36,149343,47],{"class":46},[36,149345,16052],{"class":42},[36,149347,149348,149351],{"class":38,"line":66},[36,149349,149350],{"class":405},"    \"北京\"",[36,149352,149353],{"class":42},": [\n",[36,149355,149356,149358,149360,149362,149365,149367,149370,149372,149374],{"class":38,"line":73},[36,149357,5397],{"class":42},[36,149359,148398],{"class":405},[36,149361,51914],{"class":42},[36,149363,149364],{"class":405},"\"2024-01-01\"",[36,149366,12915],{"class":42},[36,149368,149369],{"class":405},"\"confirm\"",[36,149371,51914],{"class":42},[36,149373,1062],{"class":53},[36,149375,5410],{"class":42},[36,149377,149378,149380,149382,149384,149387,149389,149391,149393,149395],{"class":38,"line":79},[36,149379,5397],{"class":42},[36,149381,148398],{"class":405},[36,149383,51914],{"class":42},[36,149385,149386],{"class":405},"\"2024-01-02\"",[36,149388,12915],{"class":42},[36,149390,149369],{"class":405},[36,149392,51914],{"class":42},[36,149394,154],{"class":53},[36,149396,5410],{"class":42},[36,149398,149399],{"class":38,"line":85},[36,149400,149401],{"class":42},"    ],\n",[36,149403,149404,149407],{"class":38,"line":419},[36,149405,149406],{"class":405},"    \"上海\"",[36,149408,149353],{"class":42},[36,149410,149411,149413,149415,149417,149419,149421,149423,149425,149427],{"class":38,"line":425},[36,149412,5397],{"class":42},[36,149414,148398],{"class":405},[36,149416,51914],{"class":42},[36,149418,149364],{"class":405},[36,149420,12915],{"class":42},[36,149422,149369],{"class":405},[36,149424,51914],{"class":42},[36,149426,1012],{"class":53},[36,149428,5410],{"class":42},[36,149430,149431,149433,149435,149437,149439,149441,149443,149445,149447],{"class":38,"line":431},[36,149432,5397],{"class":42},[36,149434,148398],{"class":405},[36,149436,51914],{"class":42},[36,149438,149386],{"class":405},[36,149440,12915],{"class":42},[36,149442,149369],{"class":405},[36,149444,51914],{"class":42},[36,149446,60],{"class":53},[36,149448,5410],{"class":42},[36,149450,149451],{"class":38,"line":437},[36,149452,149401],{"class":42},[36,149454,149455],{"class":38,"line":443},[36,149456,2045],{"class":42},[19,149458,149459],{},"绘制多地区趋势：",[26,149461,149463],{"className":28,"code":149462,"language":30,"meta":31,"style":31},"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",[33,149464,149465,149479,149489,149493,149518,149522,149530,149534,149538,149550,149572,149585,149589,149593,149610,149626,149630],{"__ignoreMap":31},[36,149466,149467,149469,149471,149473,149475,149477],{"class":38,"line":39},[36,149468,31215],{"class":46},[36,149470,147780],{"class":42},[36,149472,30871],{"class":46},[36,149474,147785],{"class":42},[36,149476,31861],{"class":46},[36,149478,147790],{"class":42},[36,149480,149481,149483,149485,149487],{"class":38,"line":66},[36,149482,31215],{"class":46},[36,149484,147639],{"class":42},[36,149486,30871],{"class":46},[36,149488,147644],{"class":42},[36,149490,149491],{"class":38,"line":73},[36,149492,2880],{"emptyLinePlaceholder":553},[36,149494,149495,149497,149499,149501,149503,149505,149507,149509,149511,149514,149516],{"class":38,"line":79},[36,149496,148201],{"class":42},[36,149498,47],{"class":46},[36,149500,149124],{"class":42},[36,149502,148398],{"class":405},[36,149504,4923],{"class":42},[36,149506,3505],{"class":46},[36,149508,148610],{"class":42},[36,149510,26524],{"class":46},[36,149512,149513],{"class":42}," data[",[36,149515,69746],{"class":405},[36,149517,78004],{"class":42},[36,149519,149520],{"class":38,"line":85},[36,149521,2880],{"emptyLinePlaceholder":553},[36,149523,149524,149526,149528],{"class":38,"line":419},[36,149525,147653],{"class":42},[36,149527,47],{"class":46},[36,149529,147658],{"class":42},[36,149531,149532],{"class":38,"line":425},[36,149533,148242],{"class":42},[36,149535,149536],{"class":38,"line":431},[36,149537,2880],{"emptyLinePlaceholder":553},[36,149539,149540,149542,149545,149547],{"class":38,"line":437},[36,149541,3505],{"class":46},[36,149543,149544],{"class":42}," city, records ",[36,149546,26524],{"class":46},[36,149548,149549],{"class":42}," data.items():\n",[36,149551,149552,149555,149557,149559,149561,149563,149565,149567,149569],{"class":38,"line":443},[36,149553,149554],{"class":42},"    values ",[36,149556,47],{"class":46},[36,149558,149124],{"class":42},[36,149560,149369],{"class":405},[36,149562,4923],{"class":42},[36,149564,3505],{"class":46},[36,149566,148610],{"class":42},[36,149568,26524],{"class":46},[36,149570,149571],{"class":42}," records]\n",[36,149573,149574,149577,149579,149581,149583],{"class":38,"line":2092},[36,149575,149576],{"class":42},"    line.add_yaxis(city, values, ",[36,149578,148146],{"class":5696},[36,149580,47],{"class":46},[36,149582,31954],{"class":53},[36,149584,63],{"class":42},[36,149586,149587],{"class":38,"line":2097},[36,149588,2880],{"emptyLinePlaceholder":553},[36,149590,149591],{"class":38,"line":2103},[36,149592,147869],{"class":42},[36,149594,149595,149597,149599,149601,149603,149605,149608],{"class":38,"line":2108},[36,149596,147874],{"class":5696},[36,149598,47],{"class":46},[36,149600,147879],{"class":42},[36,149602,51884],{"class":5696},[36,149604,47],{"class":46},[36,149606,149607],{"class":405},"\"多地区趋势图\"",[36,149609,38524],{"class":42},[36,149611,149612,149614,149616,149618,149620,149622,149624],{"class":38,"line":2122},[36,149613,147930],{"class":5696},[36,149615,47],{"class":46},[36,149617,147935],{"class":42},[36,149619,147938],{"class":5696},[36,149621,47],{"class":46},[36,149623,147943],{"class":405},[36,149625,38524],{"class":42},[36,149627,149628],{"class":38,"line":2127},[36,149629,63],{"class":42},[36,149631,149632,149634,149637],{"class":38,"line":2133},[36,149633,147725],{"class":42},[36,149635,149636],{"class":405},"\"trend.html\"",[36,149638,63],{"class":42},[19,149640,149641],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149643,149645],{"id":149644},"_1012-易错点","10.12 易错点",[579,149647,149648,149654,149660,149670,149676],{},[582,149649,149650,149653],{},[33,149651,149652],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[582,149655,149656,149659],{},[33,149657,149658],{},"render()"," 生成的是 HTML，不是图片。",[582,149661,149662,149663,149666,149667,28866],{},"JSON 字符串用 ",[33,149664,149665],{},"json.loads()","，JSON 文件用 ",[33,149668,149669],{},"json.load()",[582,149671,149672,149673,28866],{},"中文 JSON 保存时加 ",[33,149674,149675],{},"ensure_ascii=False",[582,149677,149678],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149680,149682],{"id":149681},"_1013-本章练习","10.13 本章练习",[579,149684,149685,149688,149691,149694,149697],{},[582,149686,149687],{},"安装 pyecharts 并生成第一个折线图。",[582,149689,149690],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[582,149692,149693],{},"绘制两条折线，对比线上和线下销售额。",[582,149695,149696],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[582,149698,149699],{},"对含有空值的销售数据进行清洗后再绘图。",[539,149701,149702],{},"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":31,"searchDepth":66,"depth":66,"links":149704},[149705,149706,149707,149708,149709,149710,149711,149712,149713,149714,149715,149716,149717],{"id":147321,"depth":66,"text":147322},{"id":147396,"depth":66,"text":147397},{"id":147575,"depth":66,"text":147576},{"id":147626,"depth":66,"text":147627},{"id":147760,"depth":66,"text":147761},{"id":148036,"depth":66,"text":148037},{"id":148162,"depth":66,"text":148163},{"id":148373,"depth":66,"text":148374},{"id":148744,"depth":66,"text":148745},{"id":148956,"depth":66,"text":148957},{"id":149328,"depth":66,"text":149329},{"id":149644,"depth":66,"text":149645},{"id":149681,"depth":66,"text":149682},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147313,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149724,"title":149725,"body":149726,"description":550,"extension":551,"meta":152086,"navigation":553,"path":152087,"seo":152088,"stem":152089,"__hash__":152090},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149727,"toc":152063},[149728,149731,149735,149738,149741,149817,149820,149911,149914,149918,149921,149965,149978,149982,149985,150052,150055,150059,150062,150146,150154,150158,150163,150304,150307,150318,150324,150330,150444,150448,150451,150454,150707,150710,150714,150717,150821,150824,150828,150979,150983,150990,151103,151107,151110,151216,151219,151223,151226,151257,151260,151365,151368,151372,151376,151386,151454,151458,151465,151529,151532,151536,151542,151638,151647,151651,151975,151984,151988,152016,152020,152060],[10,149729,149725],{"id":149730},"_11-面向对象基础",[14,149732,149734],{"id":149733},"_111-什么是面向对象","11.1 什么是面向对象",[19,149736,149737],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149739,149740],{},"面向过程：",[26,149742,149744],{"className":28,"code":149743,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[33,149745,149746,149755,149763,149767,149777,149808,149812],{"__ignoreMap":31},[36,149747,149748,149750,149752],{"class":38,"line":39},[36,149749,146937],{"class":42},[36,149751,47],{"class":46},[36,149753,149754],{"class":405}," \"小明\"\n",[36,149756,149757,149759,149761],{"class":38,"line":66},[36,149758,146947],{"class":42},[36,149760,47],{"class":46},[36,149762,146952],{"class":53},[36,149764,149765],{"class":38,"line":73},[36,149766,2880],{"emptyLinePlaceholder":553},[36,149768,149769,149771,149774],{"class":38,"line":79},[36,149770,32424],{"class":46},[36,149772,149773],{"class":2443}," introduce",[36,149775,149776],{"class":42},"(name, age):\n",[36,149778,149779,149781,149783,149785,149788,149790,149792,149794,149797,149799,149801,149803,149806],{"class":38,"line":85},[36,149780,31777],{"class":53},[36,149782,345],{"class":42},[36,149784,677],{"class":46},[36,149786,149787],{"class":405},"\"我叫",[36,149789,1509],{"class":53},[36,149791,80287],{"class":42},[36,149793,1559],{"class":53},[36,149795,149796],{"class":405},"，今年",[36,149798,1509],{"class":53},[36,149800,70698],{"class":42},[36,149802,1559],{"class":53},[36,149804,149805],{"class":405},"岁\"",[36,149807,63],{"class":42},[36,149809,149810],{"class":38,"line":419},[36,149811,2880],{"emptyLinePlaceholder":553},[36,149813,149814],{"class":38,"line":425},[36,149815,149816],{"class":42},"introduce(name, age)\n",[19,149818,149819],{},"面向对象：",[26,149821,149823],{"className":28,"code":149822,"language":30,"meta":31,"style":31},"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",[33,149824,149825,149833,149841,149870,149874,149878,149888,149897,149906],{"__ignoreMap":31},[36,149826,149827,149829,149831],{"class":38,"line":39},[36,149828,15174],{"class":46},[36,149830,8378],{"class":2443},[36,149832,4219],{"class":42},[36,149834,149835,149837,149839],{"class":38,"line":66},[36,149836,31279],{"class":46},[36,149838,149773],{"class":2443},[36,149840,31285],{"class":42},[36,149842,149843,149845,149847,149849,149851,149854,149856,149858,149860,149862,149864,149866,149868],{"class":38,"line":73},[36,149844,32928],{"class":53},[36,149846,345],{"class":42},[36,149848,677],{"class":46},[36,149850,149787],{"class":405},[36,149852,149853],{"class":53},"{self",[36,149855,80778],{"class":42},[36,149857,1559],{"class":53},[36,149859,149796],{"class":405},[36,149861,149853],{"class":53},[36,149863,80790],{"class":42},[36,149865,1559],{"class":53},[36,149867,149805],{"class":405},[36,149869,63],{"class":42},[36,149871,149872],{"class":38,"line":79},[36,149873,2880],{"emptyLinePlaceholder":553},[36,149875,149876],{"class":38,"line":85},[36,149877,2880],{"emptyLinePlaceholder":553},[36,149879,149880,149883,149885],{"class":38,"line":419},[36,149881,149882],{"class":42},"student ",[36,149884,47],{"class":46},[36,149886,149887],{"class":42}," Student()\n",[36,149889,149890,149893,149895],{"class":38,"line":425},[36,149891,149892],{"class":42},"student.name ",[36,149894,47],{"class":46},[36,149896,149754],{"class":405},[36,149898,149899,149902,149904],{"class":38,"line":431},[36,149900,149901],{"class":42},"student.age ",[36,149903,47],{"class":46},[36,149905,146952],{"class":53},[36,149907,149908],{"class":38,"line":437},[36,149909,149910],{"class":42},"student.introduce()\n",[19,149912,149913],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149915,149917],{"id":149916},"_112-类和对象","11.2 类和对象",[19,149919,149920],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,149922,149924],{"className":28,"code":149923,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,149925,149926,149934,149939,149943,149947,149956],{"__ignoreMap":31},[36,149927,149928,149930,149932],{"class":38,"line":39},[36,149929,15174],{"class":46},[36,149931,8378],{"class":2443},[36,149933,4219],{"class":42},[36,149935,149936],{"class":38,"line":66},[36,149937,149938],{"class":46},"    pass\n",[36,149940,149941],{"class":38,"line":73},[36,149942,2880],{"emptyLinePlaceholder":553},[36,149944,149945],{"class":38,"line":79},[36,149946,2880],{"emptyLinePlaceholder":553},[36,149948,149949,149952,149954],{"class":38,"line":85},[36,149950,149951],{"class":42},"student1 ",[36,149953,47],{"class":46},[36,149955,149887],{"class":42},[36,149957,149958,149961,149963],{"class":38,"line":419},[36,149959,149960],{"class":42},"student2 ",[36,149962,47],{"class":46},[36,149964,149887],{"class":42},[19,149966,149967,149970,149971,101419,149974,149977],{},[33,149968,149969],{},"Student"," 是类，",[33,149972,149973],{},"student1",[33,149975,149976],{},"student2"," 是对象。",[14,149979,149981],{"id":149980},"_113-属性","11.3 属性",[19,149983,149984],{},"属性是对象保存的数据。",[26,149986,149988],{"className":28,"code":149987,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[33,149989,149990,149998,150002,150006,150010,150018,150026,150034,150038,150045],{"__ignoreMap":31},[36,149991,149992,149994,149996],{"class":38,"line":39},[36,149993,15174],{"class":46},[36,149995,8378],{"class":2443},[36,149997,4219],{"class":42},[36,149999,150000],{"class":38,"line":66},[36,150001,149938],{"class":46},[36,150003,150004],{"class":38,"line":73},[36,150005,2880],{"emptyLinePlaceholder":553},[36,150007,150008],{"class":38,"line":79},[36,150009,2880],{"emptyLinePlaceholder":553},[36,150011,150012,150014,150016],{"class":38,"line":85},[36,150013,149882],{"class":42},[36,150015,47],{"class":46},[36,150017,149887],{"class":42},[36,150019,150020,150022,150024],{"class":38,"line":419},[36,150021,149892],{"class":42},[36,150023,47],{"class":46},[36,150025,149754],{"class":405},[36,150027,150028,150030,150032],{"class":38,"line":425},[36,150029,149901],{"class":42},[36,150031,47],{"class":46},[36,150033,146952],{"class":53},[36,150035,150036],{"class":38,"line":431},[36,150037,2880],{"emptyLinePlaceholder":553},[36,150039,150040,150042],{"class":38,"line":437},[36,150041,30894],{"class":53},[36,150043,150044],{"class":42},"(student.name)\n",[36,150046,150047,150049],{"class":38,"line":443},[36,150048,30894],{"class":53},[36,150050,150051],{"class":42},"(student.age)\n",[19,150053,150054],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150056,150058],{"id":150057},"_114-方法","11.4 方法",[19,150060,150061],{},"类中的函数叫方法。",[26,150063,150064],{"className":28,"code":149822,"language":30,"meta":31,"style":31},[33,150065,150066,150074,150082,150110,150114,150118,150126,150134,150142],{"__ignoreMap":31},[36,150067,150068,150070,150072],{"class":38,"line":39},[36,150069,15174],{"class":46},[36,150071,8378],{"class":2443},[36,150073,4219],{"class":42},[36,150075,150076,150078,150080],{"class":38,"line":66},[36,150077,31279],{"class":46},[36,150079,149773],{"class":2443},[36,150081,31285],{"class":42},[36,150083,150084,150086,150088,150090,150092,150094,150096,150098,150100,150102,150104,150106,150108],{"class":38,"line":73},[36,150085,32928],{"class":53},[36,150087,345],{"class":42},[36,150089,677],{"class":46},[36,150091,149787],{"class":405},[36,150093,149853],{"class":53},[36,150095,80778],{"class":42},[36,150097,1559],{"class":53},[36,150099,149796],{"class":405},[36,150101,149853],{"class":53},[36,150103,80790],{"class":42},[36,150105,1559],{"class":53},[36,150107,149805],{"class":405},[36,150109,63],{"class":42},[36,150111,150112],{"class":38,"line":79},[36,150113,2880],{"emptyLinePlaceholder":553},[36,150115,150116],{"class":38,"line":85},[36,150117,2880],{"emptyLinePlaceholder":553},[36,150119,150120,150122,150124],{"class":38,"line":419},[36,150121,149882],{"class":42},[36,150123,47],{"class":46},[36,150125,149887],{"class":42},[36,150127,150128,150130,150132],{"class":38,"line":425},[36,150129,149892],{"class":42},[36,150131,47],{"class":46},[36,150133,149754],{"class":405},[36,150135,150136,150138,150140],{"class":38,"line":431},[36,150137,149901],{"class":42},[36,150139,47],{"class":46},[36,150141,146952],{"class":53},[36,150143,150144],{"class":38,"line":437},[36,150145,149910],{"class":42},[19,150147,150148,150150,150151,150153],{},[33,150149,31301],{}," 表示当前对象。调用方法时不需要手动传入 ",[33,150152,31301],{},"，Python 会自动传。",[14,150155,150157],{"id":150156},"_115-构造方法__init__","11.5 构造方法__init__",[19,150159,150160,150162],{},[33,150161,31307],{}," 在对象创建时自动执行，用于初始化属性。",[26,150164,150166],{"className":28,"code":150165,"language":30,"meta":31,"style":31},"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",[33,150167,150168,150176,150185,150197,150209,150220,150224,150232,150270,150274,150278,150300],{"__ignoreMap":31},[36,150169,150170,150172,150174],{"class":38,"line":39},[36,150171,15174],{"class":46},[36,150173,8378],{"class":2443},[36,150175,4219],{"class":42},[36,150177,150178,150180,150182],{"class":38,"line":66},[36,150179,31279],{"class":46},[36,150181,31282],{"class":53},[36,150183,150184],{"class":42},"(self, name, age, score):\n",[36,150186,150187,150189,150192,150194],{"class":38,"line":73},[36,150188,31323],{"class":53},[36,150190,150191],{"class":42},".name ",[36,150193,47],{"class":46},[36,150195,150196],{"class":42}," name\n",[36,150198,150199,150201,150204,150206],{"class":38,"line":79},[36,150200,31323],{"class":53},[36,150202,150203],{"class":42},".age ",[36,150205,47],{"class":46},[36,150207,150208],{"class":42}," age\n",[36,150210,150211,150213,150216,150218],{"class":38,"line":85},[36,150212,31323],{"class":53},[36,150214,150215],{"class":42},".score ",[36,150217,47],{"class":46},[36,150219,2059],{"class":42},[36,150221,150222],{"class":38,"line":419},[36,150223,2880],{"emptyLinePlaceholder":553},[36,150225,150226,150228,150230],{"class":38,"line":425},[36,150227,31279],{"class":46},[36,150229,149773],{"class":2443},[36,150231,31285],{"class":42},[36,150233,150234,150236,150238,150240,150242,150244,150246,150248,150250,150252,150254,150256,150259,150261,150264,150266,150268],{"class":38,"line":431},[36,150235,32928],{"class":53},[36,150237,345],{"class":42},[36,150239,677],{"class":46},[36,150241,149787],{"class":405},[36,150243,149853],{"class":53},[36,150245,80778],{"class":42},[36,150247,1559],{"class":53},[36,150249,149796],{"class":405},[36,150251,149853],{"class":53},[36,150253,80790],{"class":42},[36,150255,1559],{"class":53},[36,150257,150258],{"class":405},"岁，成绩",[36,150260,149853],{"class":53},[36,150262,150263],{"class":42},".score",[36,150265,1559],{"class":53},[36,150267,870],{"class":405},[36,150269,63],{"class":42},[36,150271,150272],{"class":38,"line":437},[36,150273,2880],{"emptyLinePlaceholder":553},[36,150275,150276],{"class":38,"line":443},[36,150277,2880],{"emptyLinePlaceholder":553},[36,150279,150280,150282,150284,150287,150290,150292,150294,150296,150298],{"class":38,"line":2092},[36,150281,149882],{"class":42},[36,150283,47],{"class":46},[36,150285,150286],{"class":42}," Student(",[36,150288,150289],{"class":405},"\"小明\"",[36,150291,12915],{"class":42},[36,150293,1263],{"class":53},[36,150295,12915],{"class":42},[36,150297,1602],{"class":53},[36,150299,63],{"class":42},[36,150301,150302],{"class":38,"line":2097},[36,150303,149910],{"class":42},[19,150305,150306],{},"构造方法的好处：",[579,150308,150309,150312,150315],{},[582,150310,150311],{},"创建对象时必须提供必要数据。",[582,150313,150314],{},"属性初始化集中，不容易漏。",[582,150316,150317],{},"对象状态更完整。",[14,150319,150321,150322],{"id":150320},"_116-str","11.6 ",[770,150323,1783],{},[19,150325,150326,150327,28866],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,150328,150329],{},"__str__",[26,150331,150333],{"className":28,"code":150332,"language":30,"meta":31,"style":31},"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",[33,150334,150335,150343,150352,150362,150372,150376,150385,150413,150417,150421,150437],{"__ignoreMap":31},[36,150336,150337,150339,150341],{"class":38,"line":39},[36,150338,15174],{"class":46},[36,150340,8378],{"class":2443},[36,150342,4219],{"class":42},[36,150344,150345,150347,150349],{"class":38,"line":66},[36,150346,31279],{"class":46},[36,150348,31282],{"class":53},[36,150350,150351],{"class":42},"(self, name, age):\n",[36,150353,150354,150356,150358,150360],{"class":38,"line":73},[36,150355,31323],{"class":53},[36,150357,150191],{"class":42},[36,150359,47],{"class":46},[36,150361,150196],{"class":42},[36,150363,150364,150366,150368,150370],{"class":38,"line":79},[36,150365,31323],{"class":53},[36,150367,150203],{"class":42},[36,150369,47],{"class":46},[36,150371,150208],{"class":42},[36,150373,150374],{"class":38,"line":85},[36,150375,2880],{"emptyLinePlaceholder":553},[36,150377,150378,150380,150383],{"class":38,"line":419},[36,150379,31279],{"class":46},[36,150381,150382],{"class":53}," __str__",[36,150384,31285],{"class":42},[36,150386,150387,150389,150392,150395,150397,150399,150401,150404,150406,150408,150410],{"class":38,"line":425},[36,150388,15232],{"class":46},[36,150390,150391],{"class":46}," f",[36,150393,150394],{"class":405},"\"Student(name=",[36,150396,149853],{"class":53},[36,150398,80778],{"class":42},[36,150400,1559],{"class":53},[36,150402,150403],{"class":405},", age=",[36,150405,149853],{"class":53},[36,150407,80790],{"class":42},[36,150409,1559],{"class":53},[36,150411,150412],{"class":405},")\"\n",[36,150414,150415],{"class":38,"line":431},[36,150416,2880],{"emptyLinePlaceholder":553},[36,150418,150419],{"class":38,"line":437},[36,150420,2880],{"emptyLinePlaceholder":553},[36,150422,150423,150425,150427,150429,150431,150433,150435],{"class":38,"line":443},[36,150424,149882],{"class":42},[36,150426,47],{"class":46},[36,150428,150286],{"class":42},[36,150430,150289],{"class":405},[36,150432,12915],{"class":42},[36,150434,1263],{"class":53},[36,150436,63],{"class":42},[36,150438,150439,150441],{"class":38,"line":2092},[36,150440,30894],{"class":53},[36,150442,150443],{"class":42},"(student)\n",[14,150445,150447],{"id":150446},"_117-封装","11.7 封装",[19,150449,150450],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150452,150453],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,150455,150457],{"className":28,"code":150456,"language":30,"meta":31,"style":31},"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",[33,150458,150459,150468,150477,150489,150501,150505,150514,150523,150527,150537,150550,150561,150566,150577,150581,150590,150602,150613,150617,150630,150641,150645,150656,150660,150664,150682,150691,150700],{"__ignoreMap":31},[36,150460,150461,150463,150466],{"class":38,"line":39},[36,150462,15174],{"class":46},[36,150464,150465],{"class":2443}," Account",[36,150467,4219],{"class":42},[36,150469,150470,150472,150474],{"class":38,"line":66},[36,150471,31279],{"class":46},[36,150473,31282],{"class":53},[36,150475,150476],{"class":42},"(self, owner, balance):\n",[36,150478,150479,150481,150484,150486],{"class":38,"line":73},[36,150480,31323],{"class":53},[36,150482,150483],{"class":42},".owner ",[36,150485,47],{"class":46},[36,150487,150488],{"class":42}," owner\n",[36,150490,150491,150493,150496,150498],{"class":38,"line":79},[36,150492,31323],{"class":53},[36,150494,150495],{"class":42},".__balance ",[36,150497,47],{"class":46},[36,150499,150500],{"class":42}," balance\n",[36,150502,150503],{"class":38,"line":85},[36,150504,2880],{"emptyLinePlaceholder":553},[36,150506,150507,150509,150512],{"class":38,"line":419},[36,150508,31279],{"class":46},[36,150510,150511],{"class":2443}," get_balance",[36,150513,31285],{"class":42},[36,150515,150516,150518,150520],{"class":38,"line":425},[36,150517,15232],{"class":46},[36,150519,39350],{"class":53},[36,150521,150522],{"class":42},".__balance\n",[36,150524,150525],{"class":38,"line":431},[36,150526,2880],{"emptyLinePlaceholder":553},[36,150528,150529,150531,150534],{"class":38,"line":437},[36,150530,31279],{"class":46},[36,150532,150533],{"class":2443}," deposit",[36,150535,150536],{"class":42},"(self, money):\n",[36,150538,150539,150541,150544,150546,150548],{"class":38,"line":443},[36,150540,2977],{"class":46},[36,150542,150543],{"class":42}," money ",[36,150545,2068],{"class":46},[36,150547,4573],{"class":53},[36,150549,4219],{"class":42},[36,150551,150552,150554,150556,150559],{"class":38,"line":2092},[36,150553,35127],{"class":53},[36,150555,345],{"class":42},[36,150557,150558],{"class":405},"\"存款金额必须大于0\"",[36,150560,63],{"class":42},[36,150562,150563],{"class":38,"line":2097},[36,150564,150565],{"class":46},"            return\n",[36,150567,150568,150570,150572,150574],{"class":38,"line":2103},[36,150569,31323],{"class":53},[36,150571,150495],{"class":42},[36,150573,9957],{"class":46},[36,150575,150576],{"class":42}," money\n",[36,150578,150579],{"class":38,"line":2108},[36,150580,2880],{"emptyLinePlaceholder":553},[36,150582,150583,150585,150588],{"class":38,"line":2122},[36,150584,31279],{"class":46},[36,150586,150587],{"class":2443}," withdraw",[36,150589,150536],{"class":42},[36,150591,150592,150594,150596,150598,150600],{"class":38,"line":2127},[36,150593,2977],{"class":46},[36,150595,150543],{"class":42},[36,150597,2068],{"class":46},[36,150599,4573],{"class":53},[36,150601,4219],{"class":42},[36,150603,150604,150606,150608,150611],{"class":38,"line":2133},[36,150605,35127],{"class":53},[36,150607,345],{"class":42},[36,150609,150610],{"class":405},"\"取款金额必须大于0\"",[36,150612,63],{"class":42},[36,150614,150615],{"class":38,"line":2154},[36,150616,150565],{"class":46},[36,150618,150619,150621,150623,150625,150627],{"class":38,"line":2159},[36,150620,2977],{"class":46},[36,150622,150543],{"class":42},[36,150624,1573],{"class":46},[36,150626,39350],{"class":53},[36,150628,150629],{"class":42},".__balance:\n",[36,150631,150632,150634,150636,150639],{"class":38,"line":2173},[36,150633,35127],{"class":53},[36,150635,345],{"class":42},[36,150637,150638],{"class":405},"\"余额不足\"",[36,150640,63],{"class":42},[36,150642,150643],{"class":38,"line":2178},[36,150644,150565],{"class":46},[36,150646,150647,150649,150651,150654],{"class":38,"line":2207},[36,150648,31323],{"class":53},[36,150650,150495],{"class":42},[36,150652,150653],{"class":46},"-=",[36,150655,150576],{"class":42},[36,150657,150658],{"class":38,"line":2212},[36,150659,2880],{"emptyLinePlaceholder":553},[36,150661,150662],{"class":38,"line":2229},[36,150663,2880],{"emptyLinePlaceholder":553},[36,150665,150666,150669,150671,150674,150676,150678,150680],{"class":38,"line":2234},[36,150667,150668],{"class":42},"account ",[36,150670,47],{"class":46},[36,150672,150673],{"class":42}," Account(",[36,150675,150289],{"class":405},[36,150677,12915],{"class":42},[36,150679,6890],{"class":53},[36,150681,63],{"class":42},[36,150683,150684,150687,150689],{"class":38,"line":2239},[36,150685,150686],{"class":42},"account.deposit(",[36,150688,2202],{"class":53},[36,150690,63],{"class":42},[36,150692,150693,150696,150698],{"class":38,"line":2244},[36,150694,150695],{"class":42},"account.withdraw(",[36,150697,930],{"class":53},[36,150699,63],{"class":42},[36,150701,150702,150704],{"class":38,"line":2258},[36,150703,30894],{"class":53},[36,150705,150706],{"class":42},"(account.get_balance())\n",[19,150708,150709],{},"封装的意义是避免外部随意修改内部状态。",[14,150711,150713],{"id":150712},"_118-继承","11.8 继承",[19,150715,150716],{},"继承可以让子类复用父类的属性和方法。",[26,150718,150720],{"className":28,"code":150719,"language":30,"meta":31,"style":31},"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",[33,150721,150722,150731,150740,150751,150755,150759,150773,150782,150793,150797,150801,150811,150816],{"__ignoreMap":31},[36,150723,150724,150726,150729],{"class":38,"line":39},[36,150725,15174],{"class":46},[36,150727,150728],{"class":2443}," Animal",[36,150730,4219],{"class":42},[36,150732,150733,150735,150738],{"class":38,"line":66},[36,150734,31279],{"class":46},[36,150736,150737],{"class":2443}," eat",[36,150739,31285],{"class":42},[36,150741,150742,150744,150746,150749],{"class":38,"line":73},[36,150743,32928],{"class":53},[36,150745,345],{"class":42},[36,150747,150748],{"class":405},"\"吃东西\"",[36,150750,63],{"class":42},[36,150752,150753],{"class":38,"line":79},[36,150754,2880],{"emptyLinePlaceholder":553},[36,150756,150757],{"class":38,"line":85},[36,150758,2880],{"emptyLinePlaceholder":553},[36,150760,150761,150763,150766,150768,150771],{"class":38,"line":419},[36,150762,15174],{"class":46},[36,150764,150765],{"class":2443}," Dog",[36,150767,345],{"class":42},[36,150769,150770],{"class":2443},"Animal",[36,150772,31264],{"class":42},[36,150774,150775,150777,150780],{"class":38,"line":425},[36,150776,31279],{"class":46},[36,150778,150779],{"class":2443}," bark",[36,150781,31285],{"class":42},[36,150783,150784,150786,150788,150791],{"class":38,"line":431},[36,150785,32928],{"class":53},[36,150787,345],{"class":42},[36,150789,150790],{"class":405},"\"汪汪\"",[36,150792,63],{"class":42},[36,150794,150795],{"class":38,"line":437},[36,150796,2880],{"emptyLinePlaceholder":553},[36,150798,150799],{"class":38,"line":443},[36,150800,2880],{"emptyLinePlaceholder":553},[36,150802,150803,150806,150808],{"class":38,"line":2092},[36,150804,150805],{"class":42},"dog ",[36,150807,47],{"class":46},[36,150809,150810],{"class":42}," Dog()\n",[36,150812,150813],{"class":38,"line":2097},[36,150814,150815],{"class":42},"dog.eat()\n",[36,150817,150818],{"class":38,"line":2103},[36,150819,150820],{"class":42},"dog.bark()\n",[19,150822,150823],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150825,150827],{"id":150826},"_119-方法重写","11.9 方法重写",[26,150829,150831],{"className":28,"code":150830,"language":30,"meta":31,"style":31},"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",[33,150832,150833,150841,150850,150861,150865,150869,150881,150889,150899,150903,150907,150920,150928,150939,150943,150947,150955,150965,150969,150974],{"__ignoreMap":31},[36,150834,150835,150837,150839],{"class":38,"line":39},[36,150836,15174],{"class":46},[36,150838,150728],{"class":2443},[36,150840,4219],{"class":42},[36,150842,150843,150845,150848],{"class":38,"line":66},[36,150844,31279],{"class":46},[36,150846,150847],{"class":2443}," speak",[36,150849,31285],{"class":42},[36,150851,150852,150854,150856,150859],{"class":38,"line":73},[36,150853,32928],{"class":53},[36,150855,345],{"class":42},[36,150857,150858],{"class":405},"\"动物叫\"",[36,150860,63],{"class":42},[36,150862,150863],{"class":38,"line":79},[36,150864,2880],{"emptyLinePlaceholder":553},[36,150866,150867],{"class":38,"line":85},[36,150868,2880],{"emptyLinePlaceholder":553},[36,150870,150871,150873,150875,150877,150879],{"class":38,"line":419},[36,150872,15174],{"class":46},[36,150874,150765],{"class":2443},[36,150876,345],{"class":42},[36,150878,150770],{"class":2443},[36,150880,31264],{"class":42},[36,150882,150883,150885,150887],{"class":38,"line":425},[36,150884,31279],{"class":46},[36,150886,150847],{"class":2443},[36,150888,31285],{"class":42},[36,150890,150891,150893,150895,150897],{"class":38,"line":431},[36,150892,32928],{"class":53},[36,150894,345],{"class":42},[36,150896,150790],{"class":405},[36,150898,63],{"class":42},[36,150900,150901],{"class":38,"line":437},[36,150902,2880],{"emptyLinePlaceholder":553},[36,150904,150905],{"class":38,"line":443},[36,150906,2880],{"emptyLinePlaceholder":553},[36,150908,150909,150911,150914,150916,150918],{"class":38,"line":2092},[36,150910,15174],{"class":46},[36,150912,150913],{"class":2443}," Cat",[36,150915,345],{"class":42},[36,150917,150770],{"class":2443},[36,150919,31264],{"class":42},[36,150921,150922,150924,150926],{"class":38,"line":2097},[36,150923,31279],{"class":46},[36,150925,150847],{"class":2443},[36,150927,31285],{"class":42},[36,150929,150930,150932,150934,150937],{"class":38,"line":2103},[36,150931,32928],{"class":53},[36,150933,345],{"class":42},[36,150935,150936],{"class":405},"\"喵喵\"",[36,150938,63],{"class":42},[36,150940,150941],{"class":38,"line":2108},[36,150942,2880],{"emptyLinePlaceholder":553},[36,150944,150945],{"class":38,"line":2122},[36,150946,2880],{"emptyLinePlaceholder":553},[36,150948,150949,150951,150953],{"class":38,"line":2127},[36,150950,150805],{"class":42},[36,150952,47],{"class":46},[36,150954,150810],{"class":42},[36,150956,150957,150960,150962],{"class":38,"line":2133},[36,150958,150959],{"class":42},"cat ",[36,150961,47],{"class":46},[36,150963,150964],{"class":42}," Cat()\n",[36,150966,150967],{"class":38,"line":2154},[36,150968,2880],{"emptyLinePlaceholder":553},[36,150970,150971],{"class":38,"line":2159},[36,150972,150973],{"class":42},"dog.speak()\n",[36,150975,150976],{"class":38,"line":2173},[36,150977,150978],{"class":42},"cat.speak()\n",[14,150980,150982],{"id":150981},"_1110-super","11.10 super",[19,150984,150985,150986,150989],{},"子类可以通过 ",[33,150987,150988],{},"super()"," 调用父类方法。",[26,150991,150993],{"className":28,"code":150992,"language":30,"meta":31,"style":31},"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",[33,150994,150995,151003,151012,151022,151026,151030,151042,151051,151062,151072,151076,151080,151096],{"__ignoreMap":31},[36,150996,150997,150999,151001],{"class":38,"line":39},[36,150998,15174],{"class":46},[36,151000,16049],{"class":2443},[36,151002,4219],{"class":42},[36,151004,151005,151007,151009],{"class":38,"line":66},[36,151006,31279],{"class":46},[36,151008,31282],{"class":53},[36,151010,151011],{"class":42},"(self, name):\n",[36,151013,151014,151016,151018,151020],{"class":38,"line":73},[36,151015,31323],{"class":53},[36,151017,150191],{"class":42},[36,151019,47],{"class":46},[36,151021,150196],{"class":42},[36,151023,151024],{"class":38,"line":79},[36,151025,2880],{"emptyLinePlaceholder":553},[36,151027,151028],{"class":38,"line":85},[36,151029,2880],{"emptyLinePlaceholder":553},[36,151031,151032,151034,151036,151038,151040],{"class":38,"line":419},[36,151033,15174],{"class":46},[36,151035,8378],{"class":2443},[36,151037,345],{"class":42},[36,151039,19526],{"class":2443},[36,151041,31264],{"class":42},[36,151043,151044,151046,151048],{"class":38,"line":425},[36,151045,31279],{"class":46},[36,151047,31282],{"class":53},[36,151049,151050],{"class":42},"(self, name, score):\n",[36,151052,151053,151055,151057,151059],{"class":38,"line":431},[36,151054,31295],{"class":53},[36,151056,17741],{"class":42},[36,151058,31307],{"class":53},[36,151060,151061],{"class":42},"(name)\n",[36,151063,151064,151066,151068,151070],{"class":38,"line":437},[36,151065,31323],{"class":53},[36,151067,150215],{"class":42},[36,151069,47],{"class":46},[36,151071,2059],{"class":42},[36,151073,151074],{"class":38,"line":443},[36,151075,2880],{"emptyLinePlaceholder":553},[36,151077,151078],{"class":38,"line":2092},[36,151079,2880],{"emptyLinePlaceholder":553},[36,151081,151082,151084,151086,151088,151090,151092,151094],{"class":38,"line":2097},[36,151083,149882],{"class":42},[36,151085,47],{"class":46},[36,151087,150286],{"class":42},[36,151089,150289],{"class":405},[36,151091,12915],{"class":42},[36,151093,1602],{"class":53},[36,151095,63],{"class":42},[36,151097,151098,151100],{"class":38,"line":2103},[36,151099,30894],{"class":53},[36,151101,151102],{"class":42},"(student.name, student.score)\n",[14,151104,151106],{"id":151105},"_1111-多态","11.11 多态",[19,151108,151109],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,151111,151113],{"className":28,"code":151112,"language":30,"meta":31,"style":31},"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",[33,151114,151115,151123,151131,151141,151145,151149,151157,151165,151175,151179,151183,151193,151198,151202,151206,151211],{"__ignoreMap":31},[36,151116,151117,151119,151121],{"class":38,"line":39},[36,151118,15174],{"class":46},[36,151120,150765],{"class":2443},[36,151122,4219],{"class":42},[36,151124,151125,151127,151129],{"class":38,"line":66},[36,151126,31279],{"class":46},[36,151128,150847],{"class":2443},[36,151130,31285],{"class":42},[36,151132,151133,151135,151137,151139],{"class":38,"line":73},[36,151134,32928],{"class":53},[36,151136,345],{"class":42},[36,151138,150790],{"class":405},[36,151140,63],{"class":42},[36,151142,151143],{"class":38,"line":79},[36,151144,2880],{"emptyLinePlaceholder":553},[36,151146,151147],{"class":38,"line":85},[36,151148,2880],{"emptyLinePlaceholder":553},[36,151150,151151,151153,151155],{"class":38,"line":419},[36,151152,15174],{"class":46},[36,151154,150913],{"class":2443},[36,151156,4219],{"class":42},[36,151158,151159,151161,151163],{"class":38,"line":425},[36,151160,31279],{"class":46},[36,151162,150847],{"class":2443},[36,151164,31285],{"class":42},[36,151166,151167,151169,151171,151173],{"class":38,"line":431},[36,151168,32928],{"class":53},[36,151170,345],{"class":42},[36,151172,150936],{"class":405},[36,151174,63],{"class":42},[36,151176,151177],{"class":38,"line":437},[36,151178,2880],{"emptyLinePlaceholder":553},[36,151180,151181],{"class":38,"line":443},[36,151182,2880],{"emptyLinePlaceholder":553},[36,151184,151185,151187,151190],{"class":38,"line":2092},[36,151186,32424],{"class":46},[36,151188,151189],{"class":2443}," make_sound",[36,151191,151192],{"class":42},"(animal):\n",[36,151194,151195],{"class":38,"line":2097},[36,151196,151197],{"class":42},"    animal.speak()\n",[36,151199,151200],{"class":38,"line":2103},[36,151201,2880],{"emptyLinePlaceholder":553},[36,151203,151204],{"class":38,"line":2108},[36,151205,2880],{"emptyLinePlaceholder":553},[36,151207,151208],{"class":38,"line":2122},[36,151209,151210],{"class":42},"make_sound(Dog())\n",[36,151212,151213],{"class":38,"line":2127},[36,151214,151215],{"class":42},"make_sound(Cat())\n",[19,151217,151218],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151220,151222],{"id":151221},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151224,151225],{},"实例属性属于对象：",[26,151227,151229],{"className":28,"code":151228,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,151230,151231,151239,151247],{"__ignoreMap":31},[36,151232,151233,151235,151237],{"class":38,"line":39},[36,151234,15174],{"class":46},[36,151236,8378],{"class":2443},[36,151238,4219],{"class":42},[36,151240,151241,151243,151245],{"class":38,"line":66},[36,151242,31279],{"class":46},[36,151244,31282],{"class":53},[36,151246,151011],{"class":42},[36,151248,151249,151251,151253,151255],{"class":38,"line":73},[36,151250,31323],{"class":53},[36,151252,150191],{"class":42},[36,151254,47],{"class":46},[36,151256,150196],{"class":42},[19,151258,151259],{},"类属性属于类，所有对象共享：",[26,151261,151263],{"className":28,"code":151262,"language":30,"meta":31,"style":31},"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",[33,151264,151265,151273,151283,151287,151295,151305,151309,151313,151326,151340,151344,151351,151358],{"__ignoreMap":31},[36,151266,151267,151269,151271],{"class":38,"line":39},[36,151268,15174],{"class":46},[36,151270,8378],{"class":2443},[36,151272,4219],{"class":42},[36,151274,151275,151278,151280],{"class":38,"line":66},[36,151276,151277],{"class":42},"    school ",[36,151279,47],{"class":46},[36,151281,151282],{"class":405}," \"黑马学校\"\n",[36,151284,151285],{"class":38,"line":73},[36,151286,2880],{"emptyLinePlaceholder":553},[36,151288,151289,151291,151293],{"class":38,"line":79},[36,151290,31279],{"class":46},[36,151292,31282],{"class":53},[36,151294,151011],{"class":42},[36,151296,151297,151299,151301,151303],{"class":38,"line":85},[36,151298,31323],{"class":53},[36,151300,150191],{"class":42},[36,151302,47],{"class":46},[36,151304,150196],{"class":42},[36,151306,151307],{"class":38,"line":419},[36,151308,2880],{"emptyLinePlaceholder":553},[36,151310,151311],{"class":38,"line":425},[36,151312,2880],{"emptyLinePlaceholder":553},[36,151314,151315,151318,151320,151322,151324],{"class":38,"line":431},[36,151316,151317],{"class":42},"s1 ",[36,151319,47],{"class":46},[36,151321,150286],{"class":42},[36,151323,150289],{"class":405},[36,151325,63],{"class":42},[36,151327,151328,151331,151333,151335,151338],{"class":38,"line":437},[36,151329,151330],{"class":42},"s2 ",[36,151332,47],{"class":46},[36,151334,150286],{"class":42},[36,151336,151337],{"class":405},"\"小红\"",[36,151339,63],{"class":42},[36,151341,151342],{"class":38,"line":443},[36,151343,2880],{"emptyLinePlaceholder":553},[36,151345,151346,151348],{"class":38,"line":2092},[36,151347,30894],{"class":53},[36,151349,151350],{"class":42},"(s1.school)\n",[36,151352,151353,151355],{"class":38,"line":2097},[36,151354,30894],{"class":53},[36,151356,151357],{"class":42},"(s2.school)\n",[36,151359,151360,151362],{"class":38,"line":2103},[36,151361,30894],{"class":53},[36,151363,151364],{"class":42},"(Student.school)\n",[19,151366,151367],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151369,151371],{"id":151370},"_1113-类方法和静态方法","11.13 类方法和静态方法",[596,151373,151375],{"id":151374},"_11131-类方法","11.13.1 类方法",[19,151377,151378,151379,151382,151383,28866],{},"类方法使用 ",[33,151380,151381],{},"@classmethod","，第一个参数通常是 ",[33,151384,151385],{},"cls",[26,151387,151389],{"className":28,"code":151388,"language":30,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[33,151390,151391,151399,151407,151411,151419,151429,151439,151443,151447],{"__ignoreMap":31},[36,151392,151393,151395,151397],{"class":38,"line":39},[36,151394,15174],{"class":46},[36,151396,8378],{"class":2443},[36,151398,4219],{"class":42},[36,151400,151401,151403,151405],{"class":38,"line":66},[36,151402,151277],{"class":42},[36,151404,47],{"class":46},[36,151406,151282],{"class":405},[36,151408,151409],{"class":38,"line":73},[36,151410,2880],{"emptyLinePlaceholder":553},[36,151412,151413,151416],{"class":38,"line":79},[36,151414,151415],{"class":2443},"    @",[36,151417,151418],{"class":53},"classmethod\n",[36,151420,151421,151423,151426],{"class":38,"line":85},[36,151422,31279],{"class":46},[36,151424,151425],{"class":2443}," get_school",[36,151427,151428],{"class":42},"(cls):\n",[36,151430,151431,151433,151436],{"class":38,"line":419},[36,151432,15232],{"class":46},[36,151434,151435],{"class":53}," cls",[36,151437,151438],{"class":42},".school\n",[36,151440,151441],{"class":38,"line":425},[36,151442,2880],{"emptyLinePlaceholder":553},[36,151444,151445],{"class":38,"line":431},[36,151446,2880],{"emptyLinePlaceholder":553},[36,151448,151449,151451],{"class":38,"line":437},[36,151450,30894],{"class":53},[36,151452,151453],{"class":42},"(Student.get_school())\n",[596,151455,151457],{"id":151456},"_11132-静态方法","11.13.2 静态方法",[19,151459,151460,151461,151464],{},"静态方法使用 ",[33,151462,151463],{},"@staticmethod","，不需要访问实例和类。",[26,151466,151468],{"className":28,"code":151467,"language":30,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[33,151469,151470,151479,151486,151495,151506,151510,151514],{"__ignoreMap":31},[36,151471,151472,151474,151477],{"class":38,"line":39},[36,151473,15174],{"class":46},[36,151475,151476],{"class":2443}," MathUtils",[36,151478,4219],{"class":42},[36,151480,151481,151483],{"class":38,"line":66},[36,151482,151415],{"class":2443},[36,151484,151485],{"class":53},"staticmethod\n",[36,151487,151488,151490,151492],{"class":38,"line":73},[36,151489,31279],{"class":46},[36,151491,5689],{"class":2443},[36,151493,151494],{"class":42},"(a, b):\n",[36,151496,151497,151499,151501,151503],{"class":38,"line":79},[36,151498,15232],{"class":46},[36,151500,11349],{"class":42},[36,151502,1097],{"class":46},[36,151504,151505],{"class":42}," b\n",[36,151507,151508],{"class":38,"line":85},[36,151509,2880],{"emptyLinePlaceholder":553},[36,151511,151512],{"class":38,"line":419},[36,151513,2880],{"emptyLinePlaceholder":553},[36,151515,151516,151518,151521,151523,151525,151527],{"class":38,"line":425},[36,151517,30894],{"class":53},[36,151519,151520],{"class":42},"(MathUtils.add(",[36,151522,54],{"class":53},[36,151524,12915],{"class":42},[36,151526,96],{"class":53},[36,151528,370],{"class":42},[19,151530,151531],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151533,151535],{"id":151534},"_1114-dataclass","11.14 dataclass",[19,151537,151538,151541],{},[33,151539,151540],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,151543,151545],{"className":28,"code":151544,"language":30,"meta":31,"style":31},"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",[33,151546,151547,151559,151563,151567,151572,151580,151588,151596,151604,151608,151612,151632],{"__ignoreMap":31},[36,151548,151549,151551,151554,151556],{"class":38,"line":39},[36,151550,31215],{"class":46},[36,151552,151553],{"class":42}," dataclasses ",[36,151555,30871],{"class":46},[36,151557,151558],{"class":42}," dataclass\n",[36,151560,151561],{"class":38,"line":66},[36,151562,2880],{"emptyLinePlaceholder":553},[36,151564,151565],{"class":38,"line":73},[36,151566,2880],{"emptyLinePlaceholder":553},[36,151568,151569],{"class":38,"line":79},[36,151570,151571],{"class":2443},"@dataclass\n",[36,151573,151574,151576,151578],{"class":38,"line":85},[36,151575,15174],{"class":46},[36,151577,8378],{"class":2443},[36,151579,4219],{"class":42},[36,151581,151582,151585],{"class":38,"line":419},[36,151583,151584],{"class":42},"    name: ",[36,151586,151587],{"class":53},"str\n",[36,151589,151590,151593],{"class":38,"line":425},[36,151591,151592],{"class":42},"    age: ",[36,151594,151595],{"class":53},"int\n",[36,151597,151598,151601],{"class":38,"line":431},[36,151599,151600],{"class":42},"    score: ",[36,151602,151603],{"class":53},"float\n",[36,151605,151606],{"class":38,"line":437},[36,151607,2880],{"emptyLinePlaceholder":553},[36,151609,151610],{"class":38,"line":443},[36,151611,2880],{"emptyLinePlaceholder":553},[36,151613,151614,151616,151618,151620,151622,151624,151626,151628,151630],{"class":38,"line":2092},[36,151615,149882],{"class":42},[36,151617,47],{"class":46},[36,151619,150286],{"class":42},[36,151621,150289],{"class":405},[36,151623,12915],{"class":42},[36,151625,1263],{"class":53},[36,151627,12915],{"class":42},[36,151629,1602],{"class":53},[36,151631,63],{"class":42},[36,151633,151634,151636],{"class":38,"line":2097},[36,151635,30894],{"class":53},[36,151637,150443],{"class":42},[19,151639,151640,151641,833,151643,151646],{},"它会自动生成 ",[33,151642,31307],{},[33,151644,151645],{},"__repr__"," 等方法。适合数据模型类。",[14,151648,151650],{"id":151649},"_1115-小案例学生类","11.15 小案例：学生类",[26,151652,151654],{"className":28,"code":151653,"language":30,"meta":31,"style":31},"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",[33,151655,151656,151664,151673,151685,151695,151705,151715,151719,151728,151741,151745,151754,151760,151772,151784,151796,151808,151812,151816,151822,151832,151841,151851,151859,151867,151876,151880,151884,151892,151928,151932,151936,151961,151968],{"__ignoreMap":31},[36,151657,151658,151660,151662],{"class":38,"line":39},[36,151659,15174],{"class":46},[36,151661,8378],{"class":2443},[36,151663,4219],{"class":42},[36,151665,151666,151668,151670],{"class":38,"line":66},[36,151667,31279],{"class":46},[36,151669,31282],{"class":53},[36,151671,151672],{"class":42},"(self, student_id, name, age, score):\n",[36,151674,151675,151677,151680,151682],{"class":38,"line":73},[36,151676,31323],{"class":53},[36,151678,151679],{"class":42},".student_id ",[36,151681,47],{"class":46},[36,151683,151684],{"class":42}," student_id\n",[36,151686,151687,151689,151691,151693],{"class":38,"line":79},[36,151688,31323],{"class":53},[36,151690,150191],{"class":42},[36,151692,47],{"class":46},[36,151694,150196],{"class":42},[36,151696,151697,151699,151701,151703],{"class":38,"line":85},[36,151698,31323],{"class":53},[36,151700,150203],{"class":42},[36,151702,47],{"class":46},[36,151704,150208],{"class":42},[36,151706,151707,151709,151711,151713],{"class":38,"line":419},[36,151708,31323],{"class":53},[36,151710,150215],{"class":42},[36,151712,47],{"class":46},[36,151714,2059],{"class":42},[36,151716,151717],{"class":38,"line":425},[36,151718,2880],{"emptyLinePlaceholder":553},[36,151720,151721,151723,151726],{"class":38,"line":431},[36,151722,31279],{"class":46},[36,151724,151725],{"class":2443}," is_passed",[36,151727,31285],{"class":42},[36,151729,151730,151732,151734,151736,151738],{"class":38,"line":437},[36,151731,15232],{"class":46},[36,151733,39350],{"class":53},[36,151735,150215],{"class":42},[36,151737,2190],{"class":46},[36,151739,151740],{"class":53}," 60\n",[36,151742,151743],{"class":38,"line":443},[36,151744,2880],{"emptyLinePlaceholder":553},[36,151746,151747,151749,151752],{"class":38,"line":2092},[36,151748,31279],{"class":46},[36,151750,151751],{"class":2443}," to_dict",[36,151753,31285],{"class":42},[36,151755,151756,151758],{"class":38,"line":2097},[36,151757,15232],{"class":46},[36,151759,16052],{"class":42},[36,151761,151762,151765,151767,151769],{"class":38,"line":2103},[36,151763,151764],{"class":405},"            \"student_id\"",[36,151766,51914],{"class":42},[36,151768,31301],{"class":53},[36,151770,151771],{"class":42},".student_id,\n",[36,151773,151774,151777,151779,151781],{"class":38,"line":2108},[36,151775,151776],{"class":405},"            \"name\"",[36,151778,51914],{"class":42},[36,151780,31301],{"class":53},[36,151782,151783],{"class":42},".name,\n",[36,151785,151786,151789,151791,151793],{"class":38,"line":2122},[36,151787,151788],{"class":405},"            \"age\"",[36,151790,51914],{"class":42},[36,151792,31301],{"class":53},[36,151794,151795],{"class":42},".age,\n",[36,151797,151798,151801,151803,151805],{"class":38,"line":2127},[36,151799,151800],{"class":405},"            \"score\"",[36,151802,51914],{"class":42},[36,151804,31301],{"class":53},[36,151806,151807],{"class":42},".score,\n",[36,151809,151810],{"class":38,"line":2133},[36,151811,3009],{"class":42},[36,151813,151814],{"class":38,"line":2154},[36,151815,2880],{"emptyLinePlaceholder":553},[36,151817,151818,151820],{"class":38,"line":2159},[36,151819,151415],{"class":2443},[36,151821,151418],{"class":53},[36,151823,151824,151826,151829],{"class":38,"line":2173},[36,151825,31279],{"class":46},[36,151827,151828],{"class":2443}," from_dict",[36,151830,151831],{"class":42},"(cls, data):\n",[36,151833,151834,151836,151838],{"class":38,"line":2178},[36,151835,15232],{"class":46},[36,151837,151435],{"class":53},[36,151839,151840],{"class":42},"(\n",[36,151842,151843,151846,151849],{"class":38,"line":2207},[36,151844,151845],{"class":42},"            data[",[36,151847,151848],{"class":405},"\"student_id\"",[36,151850,88313],{"class":42},[36,151852,151853,151855,151857],{"class":38,"line":2212},[36,151854,151845],{"class":42},[36,151856,63156],{"class":405},[36,151858,88313],{"class":42},[36,151860,151861,151863,151865],{"class":38,"line":2229},[36,151862,151845],{"class":42},[36,151864,69601],{"class":405},[36,151866,88313],{"class":42},[36,151868,151869,151871,151874],{"class":38,"line":2234},[36,151870,151845],{"class":42},[36,151872,151873],{"class":405},"\"score\"",[36,151875,88313],{"class":42},[36,151877,151878],{"class":38,"line":2239},[36,151879,38603],{"class":42},[36,151881,151882],{"class":38,"line":2244},[36,151883,2880],{"emptyLinePlaceholder":553},[36,151885,151886,151888,151890],{"class":38,"line":2258},[36,151887,31279],{"class":46},[36,151889,150382],{"class":53},[36,151891,31285],{"class":42},[36,151893,151894,151896,151898,151900,151902,151905,151907,151910,151912,151914,151916,151918,151920,151922,151924,151926],{"class":38,"line":2263},[36,151895,15232],{"class":46},[36,151897,150391],{"class":46},[36,151899,870],{"class":405},[36,151901,149853],{"class":53},[36,151903,151904],{"class":42},".student_id",[36,151906,1559],{"class":53},[36,151908,151909],{"class":53}," {self",[36,151911,80778],{"class":42},[36,151913,1559],{"class":53},[36,151915,151909],{"class":53},[36,151917,80790],{"class":42},[36,151919,1559],{"class":53},[36,151921,151909],{"class":53},[36,151923,150263],{"class":42},[36,151925,1559],{"class":53},[36,151927,25614],{"class":405},[36,151929,151930],{"class":38,"line":3057},[36,151931,2880],{"emptyLinePlaceholder":553},[36,151933,151934],{"class":38,"line":3071},[36,151935,2880],{"emptyLinePlaceholder":553},[36,151937,151938,151940,151942,151944,151947,151949,151951,151953,151955,151957,151959],{"class":38,"line":3079},[36,151939,149882],{"class":42},[36,151941,47],{"class":46},[36,151943,150286],{"class":42},[36,151945,151946],{"class":405},"\"001\"",[36,151948,12915],{"class":42},[36,151950,150289],{"class":405},[36,151952,12915],{"class":42},[36,151954,1263],{"class":53},[36,151956,12915],{"class":42},[36,151958,1602],{"class":53},[36,151960,63],{"class":42},[36,151962,151963,151965],{"class":38,"line":3084},[36,151964,30894],{"class":53},[36,151966,151967],{"class":42},"(student.is_passed())\n",[36,151969,151970,151972],{"class":38,"line":3090},[36,151971,30894],{"class":53},[36,151973,151974],{"class":42},"(student.to_dict())\n",[19,151976,151977,101419,151980,151983],{},[33,151978,151979],{},"to_dict()",[33,151981,151982],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151985,151987],{"id":151986},"_1116-易错点","11.16 易错点",[579,151989,151990,151996,152002,152007,152010,152013],{},[582,151991,151992,151993,28866],{},"类名推荐使用大驼峰，如 ",[33,151994,151995],{},"StudentManager",[582,151997,151998,151999,152001],{},"方法第一个参数必须写 ",[33,152000,31301],{},"，调用时不用传。",[582,152003,152004,152006],{},[33,152005,31307],{}," 不是普通方法，它在创建对象时自动执行。",[582,152008,152009],{},"私有属性不是绝对安全，只是约定和名称改写。",[582,152011,152012],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[582,152014,152015],{},"类中方法太多时，说明职责可能过重。",[14,152017,152019],{"id":152018},"_1117-本章练习","11.17 本章练习",[579,152021,152022,152028,152034,152039,152052],{},[582,152023,152024,152025,152027],{},"定义 ",[33,152026,149969],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[582,152029,152024,152030,152033],{},[33,152031,152032],{},"Account"," 类，实现存款、取款、查询余额。",[582,152035,152024,152036,152038],{},[33,152037,17706],{}," 类，计算圆的周长和面积。",[582,152040,152024,152041,833,152044,152047,152048,152051],{},[33,152042,152043],{},"Dog",[33,152045,152046],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,152049,152050],{},"speak()"," 方法。",[582,152053,104767,152054,152056,152057,28866],{},[33,152055,151540],{}," 定义一个商品类 ",[33,152058,152059],{},"Product",[539,152061,152062],{},"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":31,"searchDepth":66,"depth":66,"links":152064},[152065,152066,152067,152068,152069,152070,152072,152073,152074,152075,152076,152077,152078,152082,152083,152084,152085],{"id":149733,"depth":66,"text":149734},{"id":149916,"depth":66,"text":149917},{"id":149980,"depth":66,"text":149981},{"id":150057,"depth":66,"text":150058},{"id":150156,"depth":66,"text":150157},{"id":150320,"depth":66,"text":152071},"11.6 str",{"id":150446,"depth":66,"text":150447},{"id":150712,"depth":66,"text":150713},{"id":150826,"depth":66,"text":150827},{"id":150981,"depth":66,"text":150982},{"id":151105,"depth":66,"text":151106},{"id":151221,"depth":66,"text":151222},{"id":151370,"depth":66,"text":151371,"children":152079},[152080,152081],{"id":151374,"depth":73,"text":151375},{"id":151456,"depth":73,"text":151457},{"id":151534,"depth":66,"text":151535},{"id":151649,"depth":66,"text":151650},{"id":151986,"depth":66,"text":151987},{"id":152018,"depth":66,"text":152019},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149725,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152092,"title":152093,"body":152094,"description":550,"extension":551,"meta":155407,"navigation":553,"path":155408,"seo":155409,"stem":155410,"__hash__":155411},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152095,"toc":155383},[152096,152099,152103,152106,152109,152138,152141,152149,152153,152157,152160,152183,152186,152192,152196,153642,153645,153666,153670,153673,153685,153688,153872,153875,154001,154004,154008,154012,154148,154152,154238,154242,154324,154328,154365,154369,154558,154562,154565,154795,154799,154802,154983,154986,154990,154993,154999,155002,155028,155032,155035,155049,155052,155077,155080,155094,155097,155114,155117,155134,155137,155154,155158,155184,155188,155211,155215,155218,155220,155226,155228,155249,155252,155258,155264,155268,155271,155347,155350,155354,155380],[10,152097,152093],{"id":152098},"_12-综合案例与复习路线",[14,152100,152102],{"id":152101},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152104,152105],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152107,152108],{},"一个合格的入门综合项目最好覆盖：",[579,152110,152111,152114,152117,152120,152123,152126,152129,152132,152135],{},[582,152112,152113],{},"输入输出。",[582,152115,152116],{},"判断和循环。",[582,152118,152119],{},"函数拆分。",[582,152121,152122],{},"列表、字典等容器。",[582,152124,152125],{},"文件持久化。",[582,152127,152128],{},"异常处理。",[582,152130,152131],{},"模块拆分。",[582,152133,152134],{},"可选：面向对象。",[582,152136,152137],{},"可选：数据可视化。",[19,152139,152140],{},"本章整理两个方向：",[579,152142,152143,152146],{},[582,152144,152145],{},"学生管理系统。",[582,152147,152148],{},"销售数据统计和可视化。",[14,152150,152152],{"id":152151},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[596,152154,152156],{"id":152155},"_1221-需求","12.2.1 需求",[19,152158,152159],{},"实现一个命令行学生管理系统：",[579,152161,152162,152165,152168,152171,152174,152177,152180],{},[582,152163,152164],{},"添加学生。",[582,152166,152167],{},"删除学生。",[582,152169,152170],{},"修改学生。",[582,152172,152173],{},"查询学生。",[582,152175,152176],{},"显示所有学生。",[582,152178,152179],{},"保存到 JSON 文件。",[582,152181,152182],{},"程序启动时自动读取 JSON 文件。",[19,152184,152185],{},"学生字段：",[26,152187,152190],{"className":152188,"code":152189,"language":5667,"meta":31},[5665],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,152191,152189],{"__ignoreMap":31},[14,152193,152195],{"id":152194},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,152197,152199],{"className":28,"code":152198,"language":30,"meta":31,"style":31},"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",[33,152200,152201,152207,152217,152221,152235,152239,152243,152252,152264,152270,152274,152280,152311,152321,152328,152339,152345,152349,152353,152363,152394,152420,152424,152428,152437,152448,152459,152470,152481,152492,152503,152514,152518,152522,152532,152544,152560,152567,152574,152578,152582,152592,152600,152607,152620,152630,152641,152645,152649,152658,152666,152672,152684,152692,152703,152707,152711,152720,152736,152740,152747,152758,152763,152767,152783,152798,152813,152817,152822,152830,152838,152846,152854,152858,152863,152874,152878,152882,152891,152906,152916,152920,152932,152943,152947,152951,152956,152960,152971,152975,152979,152988,153003,153011,153015,153027,153037,153041,153045,153060,153073,153086,153090,153103,153115,153127,153131,153135,153146,153150,153154,153163,153178,153186,153190,153202,153212,153216,153220,153225,153229,153233,153243,153249,153271,153290,153309,153328,153333,153337,153341,153350,153358,153369,153373,153377,153403,153413,153418,153422,153426,153434,153444,153448,153456,153461,153477,153481,153495,153500,153514,153519,153532,153537,153550,153555,153568,153573,153586,153597,153601,153607,153618,153622,153626,153638],{"__ignoreMap":31},[36,152202,152203,152205],{"class":38,"line":39},[36,152204,30871],{"class":46},[36,152206,147492],{"class":42},[36,152208,152209,152211,152213,152215],{"class":38,"line":66},[36,152210,31215],{"class":46},[36,152212,108712],{"class":42},[36,152214,30871],{"class":46},[36,152216,108717],{"class":42},[36,152218,152219],{"class":38,"line":73},[36,152220,2880],{"emptyLinePlaceholder":553},[36,152222,152223,152226,152228,152230,152233],{"class":38,"line":79},[36,152224,152225],{"class":53},"DATA_FILE",[36,152227,14044],{"class":46},[36,152229,108946],{"class":42},[36,152231,152232],{"class":405},"\"students.json\"",[36,152234,63],{"class":42},[36,152236,152237],{"class":38,"line":85},[36,152238,2880],{"emptyLinePlaceholder":553},[36,152240,152241],{"class":38,"line":419},[36,152242,2880],{"emptyLinePlaceholder":553},[36,152244,152245,152247,152250],{"class":38,"line":425},[36,152246,32424],{"class":46},[36,152248,152249],{"class":2443}," load_students",[36,152251,32430],{"class":42},[36,152253,152254,152256,152258,152261],{"class":38,"line":431},[36,152255,3581],{"class":46},[36,152257,39407],{"class":46},[36,152259,152260],{"class":53}," DATA_FILE",[36,152262,152263],{"class":42},".exists():\n",[36,152265,152266,152268],{"class":38,"line":437},[36,152267,15232],{"class":46},[36,152269,52315],{"class":42},[36,152271,152272],{"class":38,"line":443},[36,152273,2880],{"emptyLinePlaceholder":553},[36,152275,152276,152278],{"class":38,"line":2092},[36,152277,126185],{"class":46},[36,152279,4219],{"class":42},[36,152281,152282,152285,152287,152289,152291,152293,152295,152297,152299,152301,152303,152305,152307,152309],{"class":38,"line":2097},[36,152283,152284],{"class":46},"        with",[36,152286,147192],{"class":53},[36,152288,345],{"class":42},[36,152290,152225],{"class":53},[36,152292,12915],{"class":42},[36,152294,147202],{"class":405},[36,152296,12915],{"class":42},[36,152298,147207],{"class":5696},[36,152300,47],{"class":46},[36,152302,147212],{"class":405},[36,152304,14194],{"class":42},[36,152306,31861],{"class":46},[36,152308,148554],{"class":5696},[36,152310,4219],{"class":42},[36,152312,152313,152315,152317,152319],{"class":38,"line":2103},[36,152314,16212],{"class":46},[36,152316,148565],{"class":42},[36,152318,45831],{"class":5696},[36,152320,63],{"class":42},[36,152322,152323,152325],{"class":38,"line":2108},[36,152324,126213],{"class":46},[36,152326,152327],{"class":42}," json.JSONDecodeError:\n",[36,152329,152330,152332,152334,152337],{"class":38,"line":2122},[36,152331,32928],{"class":53},[36,152333,345],{"class":42},[36,152335,152336],{"class":405},"\"数据文件格式错误，已使用空数据启动\"",[36,152338,63],{"class":42},[36,152340,152341,152343],{"class":38,"line":2127},[36,152342,15232],{"class":46},[36,152344,52315],{"class":42},[36,152346,152347],{"class":38,"line":2133},[36,152348,2880],{"emptyLinePlaceholder":553},[36,152350,152351],{"class":38,"line":2154},[36,152352,2880],{"emptyLinePlaceholder":553},[36,152354,152355,152357,152360],{"class":38,"line":2159},[36,152356,32424],{"class":46},[36,152358,152359],{"class":2443}," save_students",[36,152361,152362],{"class":42},"(students):\n",[36,152364,152365,152367,152369,152371,152373,152375,152378,152380,152382,152384,152386,152388,152390,152392],{"class":38,"line":2173},[36,152366,34655],{"class":46},[36,152368,147192],{"class":53},[36,152370,345],{"class":42},[36,152372,152225],{"class":53},[36,152374,12915],{"class":42},[36,152376,152377],{"class":405},"\"w\"",[36,152379,12915],{"class":42},[36,152381,147207],{"class":5696},[36,152383,47],{"class":46},[36,152385,147212],{"class":405},[36,152387,14194],{"class":42},[36,152389,31861],{"class":46},[36,152391,148554],{"class":5696},[36,152393,4219],{"class":42},[36,152395,152396,152399,152401,152403,152405,152407,152409,152411,152414,152416,152418],{"class":38,"line":2178},[36,152397,152398],{"class":42},"        json.dump(students, ",[36,152400,45831],{"class":5696},[36,152402,12915],{"class":42},[36,152404,147538],{"class":5696},[36,152406,47],{"class":46},[36,152408,34464],{"class":53},[36,152410,12915],{"class":42},[36,152412,152413],{"class":5696},"indent",[36,152415,47],{"class":46},[36,152417,96],{"class":53},[36,152419,63],{"class":42},[36,152421,152422],{"class":38,"line":2207},[36,152423,2880],{"emptyLinePlaceholder":553},[36,152425,152426],{"class":38,"line":2212},[36,152427,2880],{"emptyLinePlaceholder":553},[36,152429,152430,152432,152435],{"class":38,"line":2229},[36,152431,32424],{"class":46},[36,152433,152434],{"class":2443}," show_menu",[36,152436,32430],{"class":42},[36,152438,152439,152441,152443,152446],{"class":38,"line":2234},[36,152440,31777],{"class":53},[36,152442,345],{"class":42},[36,152444,152445],{"class":405},"\"====== 学生管理系统 ======\"",[36,152447,63],{"class":42},[36,152449,152450,152452,152454,152457],{"class":38,"line":2239},[36,152451,31777],{"class":53},[36,152453,345],{"class":42},[36,152455,152456],{"class":405},"\"1. 添加学生\"",[36,152458,63],{"class":42},[36,152460,152461,152463,152465,152468],{"class":38,"line":2244},[36,152462,31777],{"class":53},[36,152464,345],{"class":42},[36,152466,152467],{"class":405},"\"2. 删除学生\"",[36,152469,63],{"class":42},[36,152471,152472,152474,152476,152479],{"class":38,"line":2258},[36,152473,31777],{"class":53},[36,152475,345],{"class":42},[36,152477,152478],{"class":405},"\"3. 修改学生\"",[36,152480,63],{"class":42},[36,152482,152483,152485,152487,152490],{"class":38,"line":2263},[36,152484,31777],{"class":53},[36,152486,345],{"class":42},[36,152488,152489],{"class":405},"\"4. 查询学生\"",[36,152491,63],{"class":42},[36,152493,152494,152496,152498,152501],{"class":38,"line":3057},[36,152495,31777],{"class":53},[36,152497,345],{"class":42},[36,152499,152500],{"class":405},"\"5. 显示所有学生\"",[36,152502,63],{"class":42},[36,152504,152505,152507,152509,152512],{"class":38,"line":3071},[36,152506,31777],{"class":53},[36,152508,345],{"class":42},[36,152510,152511],{"class":405},"\"0. 退出系统\"",[36,152513,63],{"class":42},[36,152515,152516],{"class":38,"line":3079},[36,152517,2880],{"emptyLinePlaceholder":553},[36,152519,152520],{"class":38,"line":3084},[36,152521,2880],{"emptyLinePlaceholder":553},[36,152523,152524,152526,152529],{"class":38,"line":3090},[36,152525,32424],{"class":46},[36,152527,152528],{"class":2443}," find_student",[36,152530,152531],{"class":42},"(students, student_id):\n",[36,152533,152534,152536,152539,152541],{"class":38,"line":3096},[36,152535,3681],{"class":46},[36,152537,152538],{"class":42}," student ",[36,152540,26524],{"class":46},[36,152542,152543],{"class":42}," students:\n",[36,152545,152546,152548,152551,152553,152555,152557],{"class":38,"line":3101},[36,152547,2977],{"class":46},[36,152549,152550],{"class":42}," student[",[36,152552,151848],{"class":405},[36,152554,4923],{"class":42},[36,152556,3429],{"class":46},[36,152558,152559],{"class":42}," student_id:\n",[36,152561,152562,152564],{"class":38,"line":8428},[36,152563,16212],{"class":46},[36,152565,152566],{"class":42}," student\n",[36,152568,152569,152571],{"class":38,"line":8452},[36,152570,4570],{"class":46},[36,152572,152573],{"class":53}," None\n",[36,152575,152576],{"class":38,"line":8457},[36,152577,2880],{"emptyLinePlaceholder":553},[36,152579,152580],{"class":38,"line":8463},[36,152581,2880],{"emptyLinePlaceholder":553},[36,152583,152584,152586,152589],{"class":38,"line":8490},[36,152585,32424],{"class":46},[36,152587,152588],{"class":2443}," input_int",[36,152590,152591],{"class":42},"(prompt):\n",[36,152593,152594,152596,152598],{"class":38,"line":8495},[36,152595,2731],{"class":46},[36,152597,95764],{"class":53},[36,152599,4219],{"class":42},[36,152601,152602,152605],{"class":38,"line":8501},[36,152603,152604],{"class":46},"        try",[36,152606,4219],{"class":42},[36,152608,152609,152611,152613,152615,152617],{"class":38,"line":8513},[36,152610,16212],{"class":46},[36,152612,2862],{"class":53},[36,152614,345],{"class":42},[36,152616,54298],{"class":53},[36,152618,152619],{"class":42},"(prompt))\n",[36,152621,152622,152625,152628],{"class":38,"line":8525},[36,152623,152624],{"class":46},"        except",[36,152626,152627],{"class":53}," ValueError",[36,152629,4219],{"class":42},[36,152631,152632,152634,152636,152639],{"class":38,"line":8537},[36,152633,35127],{"class":53},[36,152635,345],{"class":42},[36,152637,152638],{"class":405},"\"请输入整数\"",[36,152640,63],{"class":42},[36,152642,152643],{"class":38,"line":10196},[36,152644,2880],{"emptyLinePlaceholder":553},[36,152646,152647],{"class":38,"line":10221},[36,152648,2880],{"emptyLinePlaceholder":553},[36,152650,152651,152653,152656],{"class":38,"line":10244},[36,152652,32424],{"class":46},[36,152654,152655],{"class":2443}," input_float",[36,152657,152591],{"class":42},[36,152659,152660,152662,152664],{"class":38,"line":10268},[36,152661,2731],{"class":46},[36,152663,95764],{"class":53},[36,152665,4219],{"class":42},[36,152667,152668,152670],{"class":38,"line":10273},[36,152669,152604],{"class":46},[36,152671,4219],{"class":42},[36,152673,152674,152676,152678,152680,152682],{"class":38,"line":10278},[36,152675,16212],{"class":46},[36,152677,110198],{"class":53},[36,152679,345],{"class":42},[36,152681,54298],{"class":53},[36,152683,152619],{"class":42},[36,152685,152686,152688,152690],{"class":38,"line":10283},[36,152687,152624],{"class":46},[36,152689,152627],{"class":53},[36,152691,4219],{"class":42},[36,152693,152694,152696,152698,152701],{"class":38,"line":10292},[36,152695,35127],{"class":53},[36,152697,345],{"class":42},[36,152699,152700],{"class":405},"\"请输入数字\"",[36,152702,63],{"class":42},[36,152704,152705],{"class":38,"line":10297},[36,152706,2880],{"emptyLinePlaceholder":553},[36,152708,152709],{"class":38,"line":10303},[36,152710,2880],{"emptyLinePlaceholder":553},[36,152712,152713,152715,152718],{"class":38,"line":10324},[36,152714,32424],{"class":46},[36,152716,152717],{"class":2443}," add_student",[36,152719,152362],{"class":42},[36,152721,152722,152725,152727,152729,152731,152734],{"class":38,"line":10330},[36,152723,152724],{"class":42},"    student_id ",[36,152726,47],{"class":46},[36,152728,61082],{"class":53},[36,152730,345],{"class":42},[36,152732,152733],{"class":405},"\"请输入学号:\"",[36,152735,63],{"class":42},[36,152737,152738],{"class":38,"line":10344},[36,152739,2880],{"emptyLinePlaceholder":553},[36,152741,152742,152744],{"class":38,"line":10350},[36,152743,3581],{"class":46},[36,152745,152746],{"class":42}," find_student(students, student_id):\n",[36,152748,152749,152751,152753,152756],{"class":38,"line":10377},[36,152750,32928],{"class":53},[36,152752,345],{"class":42},[36,152754,152755],{"class":405},"\"学号已存在\"",[36,152757,63],{"class":42},[36,152759,152760],{"class":38,"line":10386},[36,152761,152762],{"class":46},"        return\n",[36,152764,152765],{"class":38,"line":10392},[36,152766,2880],{"emptyLinePlaceholder":553},[36,152768,152769,152772,152774,152776,152778,152781],{"class":38,"line":10400},[36,152770,152771],{"class":42},"    name ",[36,152773,47],{"class":46},[36,152775,61082],{"class":53},[36,152777,345],{"class":42},[36,152779,152780],{"class":405},"\"请输入姓名:\"",[36,152782,63],{"class":42},[36,152784,152785,152788,152790,152793,152796],{"class":38,"line":10405},[36,152786,152787],{"class":42},"    age ",[36,152789,47],{"class":46},[36,152791,152792],{"class":42}," input_int(",[36,152794,152795],{"class":405},"\"请输入年龄:\"",[36,152797,63],{"class":42},[36,152799,152800,152803,152805,152808,152811],{"class":38,"line":17084},[36,152801,152802],{"class":42},"    score ",[36,152804,47],{"class":46},[36,152806,152807],{"class":42}," input_float(",[36,152809,152810],{"class":405},"\"请输入成绩:\"",[36,152812,63],{"class":42},[36,152814,152815],{"class":38,"line":17090},[36,152816,2880],{"emptyLinePlaceholder":553},[36,152818,152819],{"class":38,"line":17113},[36,152820,152821],{"class":42},"    students.append({\n",[36,152823,152824,152827],{"class":38,"line":17119},[36,152825,152826],{"class":405},"        \"student_id\"",[36,152828,152829],{"class":42},": student_id,\n",[36,152831,152832,152835],{"class":38,"line":17142},[36,152833,152834],{"class":405},"        \"name\"",[36,152836,152837],{"class":42},": name,\n",[36,152839,152840,152843],{"class":38,"line":17156},[36,152841,152842],{"class":405},"        \"age\"",[36,152844,152845],{"class":42},": age,\n",[36,152847,152848,152851],{"class":38,"line":17176},[36,152849,152850],{"class":405},"        \"score\"",[36,152852,152853],{"class":42},": score,\n",[36,152855,152856],{"class":38,"line":17182},[36,152857,33938],{"class":42},[36,152859,152860],{"class":38,"line":17193},[36,152861,152862],{"class":42},"    save_students(students)\n",[36,152864,152865,152867,152869,152872],{"class":38,"line":17216},[36,152866,31777],{"class":53},[36,152868,345],{"class":42},[36,152870,152871],{"class":405},"\"添加成功\"",[36,152873,63],{"class":42},[36,152875,152876],{"class":38,"line":17238},[36,152877,2880],{"emptyLinePlaceholder":553},[36,152879,152880],{"class":38,"line":17243},[36,152881,2880],{"emptyLinePlaceholder":553},[36,152883,152884,152886,152889],{"class":38,"line":17249},[36,152885,32424],{"class":46},[36,152887,152888],{"class":2443}," delete_student",[36,152890,152362],{"class":42},[36,152892,152893,152895,152897,152899,152901,152904],{"class":38,"line":17263},[36,152894,152724],{"class":42},[36,152896,47],{"class":46},[36,152898,61082],{"class":53},[36,152900,345],{"class":42},[36,152902,152903],{"class":405},"\"请输入要删除的学号:\"",[36,152905,63],{"class":42},[36,152907,152908,152911,152913],{"class":38,"line":17276},[36,152909,152910],{"class":42},"    student ",[36,152912,47],{"class":46},[36,152914,152915],{"class":42}," find_student(students, student_id)\n",[36,152917,152918],{"class":38,"line":17281},[36,152919,2880],{"emptyLinePlaceholder":553},[36,152921,152922,152924,152926,152928,152930],{"class":38,"line":17295},[36,152923,3581],{"class":46},[36,152925,152538],{"class":42},[36,152927,39404],{"class":46},[36,152929,39410],{"class":53},[36,152931,4219],{"class":42},[36,152933,152934,152936,152938,152941],{"class":38,"line":17300},[36,152935,32928],{"class":53},[36,152937,345],{"class":42},[36,152939,152940],{"class":405},"\"学生不存在\"",[36,152942,63],{"class":42},[36,152944,152945],{"class":38,"line":17306},[36,152946,152762],{"class":46},[36,152948,152949],{"class":38,"line":17311},[36,152950,2880],{"emptyLinePlaceholder":553},[36,152952,152953],{"class":38,"line":17325},[36,152954,152955],{"class":42},"    students.remove(student)\n",[36,152957,152958],{"class":38,"line":17330},[36,152959,152862],{"class":42},[36,152961,152962,152964,152966,152969],{"class":38,"line":17335},[36,152963,31777],{"class":53},[36,152965,345],{"class":42},[36,152967,152968],{"class":405},"\"删除成功\"",[36,152970,63],{"class":42},[36,152972,152973],{"class":38,"line":17349},[36,152974,2880],{"emptyLinePlaceholder":553},[36,152976,152977],{"class":38,"line":17361},[36,152978,2880],{"emptyLinePlaceholder":553},[36,152980,152981,152983,152986],{"class":38,"line":17366},[36,152982,32424],{"class":46},[36,152984,152985],{"class":2443}," update_student",[36,152987,152362],{"class":42},[36,152989,152990,152992,152994,152996,152998,153001],{"class":38,"line":17379},[36,152991,152724],{"class":42},[36,152993,47],{"class":46},[36,152995,61082],{"class":53},[36,152997,345],{"class":42},[36,152999,153000],{"class":405},"\"请输入要修改的学号:\"",[36,153002,63],{"class":42},[36,153004,153005,153007,153009],{"class":38,"line":17384},[36,153006,152910],{"class":42},[36,153008,47],{"class":46},[36,153010,152915],{"class":42},[36,153012,153013],{"class":38,"line":17389},[36,153014,2880],{"emptyLinePlaceholder":553},[36,153016,153017,153019,153021,153023,153025],{"class":38,"line":17394},[36,153018,3581],{"class":46},[36,153020,152538],{"class":42},[36,153022,39404],{"class":46},[36,153024,39410],{"class":53},[36,153026,4219],{"class":42},[36,153028,153029,153031,153033,153035],{"class":38,"line":17407},[36,153030,32928],{"class":53},[36,153032,345],{"class":42},[36,153034,152940],{"class":405},[36,153036,63],{"class":42},[36,153038,153039],{"class":38,"line":17412},[36,153040,152762],{"class":46},[36,153042,153043],{"class":38,"line":33110},[36,153044,2880],{"emptyLinePlaceholder":553},[36,153046,153047,153049,153051,153053,153055,153058],{"class":38,"line":33116},[36,153048,152771],{"class":42},[36,153050,47],{"class":46},[36,153052,61082],{"class":53},[36,153054,345],{"class":42},[36,153056,153057],{"class":405},"\"请输入新姓名:\"",[36,153059,63],{"class":42},[36,153061,153062,153064,153066,153068,153071],{"class":38,"line":33122},[36,153063,152787],{"class":42},[36,153065,47],{"class":46},[36,153067,152792],{"class":42},[36,153069,153070],{"class":405},"\"请输入新年龄:\"",[36,153072,63],{"class":42},[36,153074,153075,153077,153079,153081,153084],{"class":38,"line":33128},[36,153076,152802],{"class":42},[36,153078,47],{"class":46},[36,153080,152807],{"class":42},[36,153082,153083],{"class":405},"\"请输入新成绩:\"",[36,153085,63],{"class":42},[36,153087,153088],{"class":38,"line":33134},[36,153089,2880],{"emptyLinePlaceholder":553},[36,153091,153092,153095,153097,153099,153101],{"class":38,"line":33145},[36,153093,153094],{"class":42},"    student[",[36,153096,63156],{"class":405},[36,153098,4923],{"class":42},[36,153100,47],{"class":46},[36,153102,150196],{"class":42},[36,153104,153105,153107,153109,153111,153113],{"class":38,"line":33151},[36,153106,153094],{"class":42},[36,153108,69601],{"class":405},[36,153110,4923],{"class":42},[36,153112,47],{"class":46},[36,153114,150208],{"class":42},[36,153116,153117,153119,153121,153123,153125],{"class":38,"line":33171},[36,153118,153094],{"class":42},[36,153120,151873],{"class":405},[36,153122,4923],{"class":42},[36,153124,47],{"class":46},[36,153126,2059],{"class":42},[36,153128,153129],{"class":38,"line":33177},[36,153130,2880],{"emptyLinePlaceholder":553},[36,153132,153133],{"class":38,"line":33188},[36,153134,152862],{"class":42},[36,153136,153137,153139,153141,153144],{"class":38,"line":33194},[36,153138,31777],{"class":53},[36,153140,345],{"class":42},[36,153142,153143],{"class":405},"\"修改成功\"",[36,153145,63],{"class":42},[36,153147,153148],{"class":38,"line":33200},[36,153149,2880],{"emptyLinePlaceholder":553},[36,153151,153152],{"class":38,"line":33206},[36,153153,2880],{"emptyLinePlaceholder":553},[36,153155,153156,153158,153161],{"class":38,"line":33212},[36,153157,32424],{"class":46},[36,153159,153160],{"class":2443}," query_student",[36,153162,152362],{"class":42},[36,153164,153165,153167,153169,153171,153173,153176],{"class":38,"line":33218},[36,153166,152724],{"class":42},[36,153168,47],{"class":46},[36,153170,61082],{"class":53},[36,153172,345],{"class":42},[36,153174,153175],{"class":405},"\"请输入要查询的学号:\"",[36,153177,63],{"class":42},[36,153179,153180,153182,153184],{"class":38,"line":33224},[36,153181,152910],{"class":42},[36,153183,47],{"class":46},[36,153185,152915],{"class":42},[36,153187,153188],{"class":38,"line":33230},[36,153189,2880],{"emptyLinePlaceholder":553},[36,153191,153192,153194,153196,153198,153200],{"class":38,"line":33250},[36,153193,3581],{"class":46},[36,153195,152538],{"class":42},[36,153197,39404],{"class":46},[36,153199,39410],{"class":53},[36,153201,4219],{"class":42},[36,153203,153204,153206,153208,153210],{"class":38,"line":33256},[36,153205,32928],{"class":53},[36,153207,345],{"class":42},[36,153209,152940],{"class":405},[36,153211,63],{"class":42},[36,153213,153214],{"class":38,"line":33272},[36,153215,152762],{"class":46},[36,153217,153218],{"class":38,"line":33278},[36,153219,2880],{"emptyLinePlaceholder":553},[36,153221,153222],{"class":38,"line":33292},[36,153223,153224],{"class":42},"    print_student(student)\n",[36,153226,153227],{"class":38,"line":33298},[36,153228,2880],{"emptyLinePlaceholder":553},[36,153230,153231],{"class":38,"line":33313},[36,153232,2880],{"emptyLinePlaceholder":553},[36,153234,153235,153237,153240],{"class":38,"line":33319},[36,153236,32424],{"class":46},[36,153238,153239],{"class":2443}," print_student",[36,153241,153242],{"class":42},"(student):\n",[36,153244,153245,153247],{"class":38,"line":33328},[36,153246,31777],{"class":53},[36,153248,151840],{"class":42},[36,153250,153251,153254,153256,153258,153261,153264,153266,153269],{"class":38,"line":33334},[36,153252,153253],{"class":46},"        f",[36,153255,870],{"class":405},[36,153257,1509],{"class":53},[36,153259,153260],{"class":42},"student[",[36,153262,153263],{"class":405},"'student_id'",[36,153265,1553],{"class":42},[36,153267,153268],{"class":53},"}\\t",[36,153270,25614],{"class":405},[36,153272,153273,153275,153277,153279,153281,153284,153286,153288],{"class":38,"line":33343},[36,153274,153253],{"class":46},[36,153276,870],{"class":405},[36,153278,1509],{"class":53},[36,153280,153260],{"class":42},[36,153282,153283],{"class":405},"'name'",[36,153285,1553],{"class":42},[36,153287,153268],{"class":53},[36,153289,25614],{"class":405},[36,153291,153292,153294,153296,153298,153300,153303,153305,153307],{"class":38,"line":33349},[36,153293,153253],{"class":46},[36,153295,870],{"class":405},[36,153297,1509],{"class":53},[36,153299,153260],{"class":42},[36,153301,153302],{"class":405},"'age'",[36,153304,1553],{"class":42},[36,153306,153268],{"class":53},[36,153308,25614],{"class":405},[36,153310,153311,153313,153315,153317,153319,153322,153324,153326],{"class":38,"line":33355},[36,153312,153253],{"class":46},[36,153314,870],{"class":405},[36,153316,1509],{"class":53},[36,153318,153260],{"class":42},[36,153320,153321],{"class":405},"'score'",[36,153323,1553],{"class":42},[36,153325,1559],{"class":53},[36,153327,25614],{"class":405},[36,153329,153330],{"class":38,"line":33364},[36,153331,153332],{"class":42},"    )\n",[36,153334,153335],{"class":38,"line":33370},[36,153336,2880],{"emptyLinePlaceholder":553},[36,153338,153339],{"class":38,"line":33381},[36,153340,2880],{"emptyLinePlaceholder":553},[36,153342,153343,153345,153348],{"class":38,"line":33387},[36,153344,32424],{"class":46},[36,153346,153347],{"class":2443}," show_all_students",[36,153349,152362],{"class":42},[36,153351,153352,153354,153356],{"class":38,"line":33406},[36,153353,3581],{"class":46},[36,153355,39407],{"class":46},[36,153357,152543],{"class":42},[36,153359,153360,153362,153364,153367],{"class":38,"line":33412},[36,153361,32928],{"class":53},[36,153363,345],{"class":42},[36,153365,153366],{"class":405},"\"暂无学生\"",[36,153368,63],{"class":42},[36,153370,153371],{"class":38,"line":33423},[36,153372,152762],{"class":46},[36,153374,153375],{"class":38,"line":33429},[36,153376,2880],{"emptyLinePlaceholder":553},[36,153378,153379,153381,153383,153386,153388,153391,153393,153396,153398,153401],{"class":38,"line":33449},[36,153380,31777],{"class":53},[36,153382,345],{"class":42},[36,153384,153385],{"class":405},"\"学号",[36,153387,1714],{"class":53},[36,153389,153390],{"class":405},"姓名",[36,153392,1714],{"class":53},[36,153394,153395],{"class":405},"年龄",[36,153397,1714],{"class":53},[36,153399,153400],{"class":405},"成绩\"",[36,153402,63],{"class":42},[36,153404,153405,153407,153409,153411],{"class":38,"line":33465},[36,153406,3681],{"class":46},[36,153408,152538],{"class":42},[36,153410,26524],{"class":46},[36,153412,152543],{"class":42},[36,153414,153415],{"class":38,"line":33471},[36,153416,153417],{"class":42},"        print_student(student)\n",[36,153419,153420],{"class":38,"line":33485},[36,153421,2880],{"emptyLinePlaceholder":553},[36,153423,153424],{"class":38,"line":33491},[36,153425,2880],{"emptyLinePlaceholder":553},[36,153427,153428,153430,153432],{"class":38,"line":33497},[36,153429,32424],{"class":46},[36,153431,2453],{"class":2443},[36,153433,32430],{"class":42},[36,153435,153436,153439,153441],{"class":38,"line":33508},[36,153437,153438],{"class":42},"    students ",[36,153440,47],{"class":46},[36,153442,153443],{"class":42}," load_students()\n",[36,153445,153446],{"class":38,"line":33514},[36,153447,2880],{"emptyLinePlaceholder":553},[36,153449,153450,153452,153454],{"class":38,"line":33520},[36,153451,2731],{"class":46},[36,153453,95764],{"class":53},[36,153455,4219],{"class":42},[36,153457,153458],{"class":38,"line":33530},[36,153459,153460],{"class":42},"        show_menu()\n",[36,153462,153463,153466,153468,153470,153472,153475],{"class":38,"line":33536},[36,153464,153465],{"class":42},"        choice ",[36,153467,47],{"class":46},[36,153469,61082],{"class":53},[36,153471,345],{"class":42},[36,153473,153474],{"class":405},"\"请输入操作:\"",[36,153476,63],{"class":42},[36,153478,153479],{"class":38,"line":33547},[36,153480,2880],{"emptyLinePlaceholder":553},[36,153482,153483,153485,153488,153490,153493],{"class":38,"line":33553},[36,153484,2977],{"class":46},[36,153486,153487],{"class":42}," choice ",[36,153489,3429],{"class":46},[36,153491,153492],{"class":405}," \"1\"",[36,153494,4219],{"class":42},[36,153496,153497],{"class":38,"line":33563},[36,153498,153499],{"class":42},"            add_student(students)\n",[36,153501,153502,153505,153507,153509,153512],{"class":38,"line":33568},[36,153503,153504],{"class":46},"        elif",[36,153506,153487],{"class":42},[36,153508,3429],{"class":46},[36,153510,153511],{"class":405}," \"2\"",[36,153513,4219],{"class":42},[36,153515,153516],{"class":38,"line":33574},[36,153517,153518],{"class":42},"            delete_student(students)\n",[36,153520,153521,153523,153525,153527,153530],{"class":38,"line":33623},[36,153522,153504],{"class":46},[36,153524,153487],{"class":42},[36,153526,3429],{"class":46},[36,153528,153529],{"class":405}," \"3\"",[36,153531,4219],{"class":42},[36,153533,153534],{"class":38,"line":33670},[36,153535,153536],{"class":42},"            update_student(students)\n",[36,153538,153539,153541,153543,153545,153548],{"class":38,"line":33675},[36,153540,153504],{"class":46},[36,153542,153487],{"class":42},[36,153544,3429],{"class":46},[36,153546,153547],{"class":405}," \"4\"",[36,153549,4219],{"class":42},[36,153551,153552],{"class":38,"line":33681},[36,153553,153554],{"class":42},"            query_student(students)\n",[36,153556,153557,153559,153561,153563,153566],{"class":38,"line":33700},[36,153558,153504],{"class":46},[36,153560,153487],{"class":42},[36,153562,3429],{"class":46},[36,153564,153565],{"class":405}," \"5\"",[36,153567,4219],{"class":42},[36,153569,153570],{"class":38,"line":33706},[36,153571,153572],{"class":42},"            show_all_students(students)\n",[36,153574,153575,153577,153579,153581,153584],{"class":38,"line":33726},[36,153576,153504],{"class":46},[36,153578,153487],{"class":42},[36,153580,3429],{"class":46},[36,153582,153583],{"class":405}," \"0\"",[36,153585,4219],{"class":42},[36,153587,153588,153590,153592,153595],{"class":38,"line":33732},[36,153589,35127],{"class":53},[36,153591,345],{"class":42},[36,153593,153594],{"class":405},"\"退出系统\"",[36,153596,63],{"class":42},[36,153598,153599],{"class":38,"line":33738},[36,153600,115499],{"class":46},[36,153602,153603,153605],{"class":38,"line":33748},[36,153604,3014],{"class":46},[36,153606,4219],{"class":42},[36,153608,153609,153611,153613,153616],{"class":38,"line":33753},[36,153610,35127],{"class":53},[36,153612,345],{"class":42},[36,153614,153615],{"class":405},"\"输入错误\"",[36,153617,63],{"class":42},[36,153619,153620],{"class":38,"line":33759},[36,153621,2880],{"emptyLinePlaceholder":553},[36,153623,153624],{"class":38,"line":33775},[36,153625,2880],{"emptyLinePlaceholder":553},[36,153627,153628,153630,153632,153634,153636],{"class":38,"line":33820},[36,153629,2011],{"class":46},[36,153631,31698],{"class":53},[36,153633,101960],{"class":46},[36,153635,101963],{"class":405},[36,153637,4219],{"class":42},[36,153639,153640],{"class":38,"line":33826},[36,153641,101970],{"class":42},[19,153643,153644],{},"这个项目串联了：",[579,153646,153647,153650,153653,153656,153659,153661],{},[582,153648,153649],{},"菜单循环。",[582,153651,153652],{},"函数封装。",[582,153654,153655],{},"列表字典。",[582,153657,153658],{},"JSON 读写。",[582,153660,152128],{},[582,153662,153663,28866],{},[33,153664,153665],{},"if __name__ == \"__main__\"",[14,153667,153669],{"id":153668},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153671,153672],{},"可以进一步拆成两个类：",[579,153674,153675,153680],{},[582,153676,153677,153679],{},[33,153678,149969],{},"：表示单个学生。",[582,153681,153682,153684],{},[33,153683,151995],{},"：负责学生增删改查和文件保存。",[19,153686,153687],{},"示意代码：",[26,153689,153691],{"className":28,"code":153690,"language":30,"meta":31,"style":31},"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",[33,153692,153693,153703,153707,153711,153715,153723,153730,153736,153742,153748,153752,153760,153766,153776,153786,153796,153806,153810,153814,153820,153828,153836,153844,153852,153860,153868],{"__ignoreMap":31},[36,153694,153695,153697,153699,153701],{"class":38,"line":39},[36,153696,31215],{"class":46},[36,153698,151553],{"class":42},[36,153700,30871],{"class":46},[36,153702,151558],{"class":42},[36,153704,153705],{"class":38,"line":66},[36,153706,2880],{"emptyLinePlaceholder":553},[36,153708,153709],{"class":38,"line":73},[36,153710,2880],{"emptyLinePlaceholder":553},[36,153712,153713],{"class":38,"line":79},[36,153714,151571],{"class":2443},[36,153716,153717,153719,153721],{"class":38,"line":85},[36,153718,15174],{"class":46},[36,153720,8378],{"class":2443},[36,153722,4219],{"class":42},[36,153724,153725,153728],{"class":38,"line":419},[36,153726,153727],{"class":42},"    student_id: ",[36,153729,151587],{"class":53},[36,153731,153732,153734],{"class":38,"line":425},[36,153733,151584],{"class":42},[36,153735,151587],{"class":53},[36,153737,153738,153740],{"class":38,"line":431},[36,153739,151592],{"class":42},[36,153741,151595],{"class":53},[36,153743,153744,153746],{"class":38,"line":437},[36,153745,151600],{"class":42},[36,153747,151603],{"class":53},[36,153749,153750],{"class":38,"line":443},[36,153751,2880],{"emptyLinePlaceholder":553},[36,153753,153754,153756,153758],{"class":38,"line":2092},[36,153755,31279],{"class":46},[36,153757,151751],{"class":2443},[36,153759,31285],{"class":42},[36,153761,153762,153764],{"class":38,"line":2097},[36,153763,15232],{"class":46},[36,153765,16052],{"class":42},[36,153767,153768,153770,153772,153774],{"class":38,"line":2103},[36,153769,151764],{"class":405},[36,153771,51914],{"class":42},[36,153773,31301],{"class":53},[36,153775,151771],{"class":42},[36,153777,153778,153780,153782,153784],{"class":38,"line":2108},[36,153779,151776],{"class":405},[36,153781,51914],{"class":42},[36,153783,31301],{"class":53},[36,153785,151783],{"class":42},[36,153787,153788,153790,153792,153794],{"class":38,"line":2122},[36,153789,151788],{"class":405},[36,153791,51914],{"class":42},[36,153793,31301],{"class":53},[36,153795,151795],{"class":42},[36,153797,153798,153800,153802,153804],{"class":38,"line":2127},[36,153799,151800],{"class":405},[36,153801,51914],{"class":42},[36,153803,31301],{"class":53},[36,153805,151807],{"class":42},[36,153807,153808],{"class":38,"line":2133},[36,153809,3009],{"class":42},[36,153811,153812],{"class":38,"line":2154},[36,153813,2880],{"emptyLinePlaceholder":553},[36,153815,153816,153818],{"class":38,"line":2159},[36,153817,151415],{"class":2443},[36,153819,151418],{"class":53},[36,153821,153822,153824,153826],{"class":38,"line":2173},[36,153823,31279],{"class":46},[36,153825,151828],{"class":2443},[36,153827,151831],{"class":42},[36,153829,153830,153832,153834],{"class":38,"line":2178},[36,153831,15232],{"class":46},[36,153833,151435],{"class":53},[36,153835,151840],{"class":42},[36,153837,153838,153840,153842],{"class":38,"line":2207},[36,153839,151845],{"class":42},[36,153841,151848],{"class":405},[36,153843,88313],{"class":42},[36,153845,153846,153848,153850],{"class":38,"line":2212},[36,153847,151845],{"class":42},[36,153849,63156],{"class":405},[36,153851,88313],{"class":42},[36,153853,153854,153856,153858],{"class":38,"line":2229},[36,153855,151845],{"class":42},[36,153857,69601],{"class":405},[36,153859,88313],{"class":42},[36,153861,153862,153864,153866],{"class":38,"line":2234},[36,153863,151845],{"class":42},[36,153865,151873],{"class":405},[36,153867,88313],{"class":42},[36,153869,153870],{"class":38,"line":2239},[36,153871,38603],{"class":42},[19,153873,153874],{},"管理器示意：",[26,153876,153878],{"className":28,"code":153877,"language":30,"meta":31,"style":31},"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",[33,153879,153880,153889,153897,153908,153912,153922,153935,153946,153953,153959,153963,153972,153981,153987,153994],{"__ignoreMap":31},[36,153881,153882,153884,153887],{"class":38,"line":39},[36,153883,15174],{"class":46},[36,153885,153886],{"class":2443}," StudentManager",[36,153888,4219],{"class":42},[36,153890,153891,153893,153895],{"class":38,"line":66},[36,153892,31279],{"class":46},[36,153894,31282],{"class":53},[36,153896,31285],{"class":42},[36,153898,153899,153901,153904,153906],{"class":38,"line":73},[36,153900,31323],{"class":53},[36,153902,153903],{"class":42},".students ",[36,153905,47],{"class":46},[36,153907,52315],{"class":42},[36,153909,153910],{"class":38,"line":79},[36,153911,2880],{"emptyLinePlaceholder":553},[36,153913,153914,153916,153919],{"class":38,"line":85},[36,153915,31279],{"class":46},[36,153917,153918],{"class":2443}," find_by_id",[36,153920,153921],{"class":42},"(self, student_id):\n",[36,153923,153924,153926,153928,153930,153932],{"class":38,"line":419},[36,153925,3883],{"class":46},[36,153927,152538],{"class":42},[36,153929,26524],{"class":46},[36,153931,39350],{"class":53},[36,153933,153934],{"class":42},".students:\n",[36,153936,153937,153939,153942,153944],{"class":38,"line":425},[36,153938,5122],{"class":46},[36,153940,153941],{"class":42}," student.student_id ",[36,153943,3429],{"class":46},[36,153945,152559],{"class":42},[36,153947,153948,153951],{"class":38,"line":431},[36,153949,153950],{"class":46},"                return",[36,153952,152566],{"class":42},[36,153954,153955,153957],{"class":38,"line":437},[36,153956,15232],{"class":46},[36,153958,152573],{"class":53},[36,153960,153961],{"class":38,"line":443},[36,153962,2880],{"emptyLinePlaceholder":553},[36,153964,153965,153967,153969],{"class":38,"line":2092},[36,153966,31279],{"class":46},[36,153968,5689],{"class":2443},[36,153970,153971],{"class":42},"(self, student):\n",[36,153973,153974,153976,153978],{"class":38,"line":2097},[36,153975,2977],{"class":46},[36,153977,39350],{"class":53},[36,153979,153980],{"class":42},".find_by_id(student.student_id):\n",[36,153982,153983,153985],{"class":38,"line":2103},[36,153984,16212],{"class":46},[36,153986,126208],{"class":53},[36,153988,153989,153991],{"class":38,"line":2108},[36,153990,31323],{"class":53},[36,153992,153993],{"class":42},".students.append(student)\n",[36,153995,153996,153998],{"class":38,"line":2122},[36,153997,15232],{"class":46},[36,153999,154000],{"class":53}," True\n",[19,154002,154003],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154005,154007],{"id":154006},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[596,154009,154011],{"id":154010},"_1251-数据结构","12.5.1 数据结构",[26,154013,154015],{"className":28,"code":154014,"language":30,"meta":31,"style":31},"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",[33,154016,154017,154025,154056,154086,154115,154144],{"__ignoreMap":31},[36,154018,154019,154021,154023],{"class":38,"line":39},[36,154020,148866],{"class":42},[36,154022,47],{"class":46},[36,154024,55924],{"class":42},[36,154026,154027,154029,154031,154033,154035,154037,154040,154042,154045,154047,154049,154051,154054],{"class":38,"line":66},[36,154028,148786],{"class":42},[36,154030,148398],{"class":405},[36,154032,51914],{"class":42},[36,154034,149009],{"class":405},[36,154036,12915],{"class":42},[36,154038,154039],{"class":405},"\"category\"",[36,154041,51914],{"class":42},[36,154043,154044],{"class":405},"\"手机\"",[36,154046,12915],{"class":42},[36,154048,84561],{"class":405},[36,154050,51914],{"class":42},[36,154052,154053],{"class":53},"12000",[36,154055,5410],{"class":42},[36,154057,154058,154060,154062,154064,154066,154068,154070,154072,154075,154077,154079,154081,154084],{"class":38,"line":73},[36,154059,148786],{"class":42},[36,154061,148398],{"class":405},[36,154063,51914],{"class":42},[36,154065,149009],{"class":405},[36,154067,12915],{"class":42},[36,154069,154039],{"class":405},[36,154071,51914],{"class":42},[36,154073,154074],{"class":405},"\"电脑\"",[36,154076,12915],{"class":42},[36,154078,84561],{"class":405},[36,154080,51914],{"class":42},[36,154082,154083],{"class":53},"18000",[36,154085,5410],{"class":42},[36,154087,154088,154090,154092,154094,154096,154098,154100,154102,154104,154106,154108,154110,154113],{"class":38,"line":79},[36,154089,148786],{"class":42},[36,154091,148398],{"class":405},[36,154093,51914],{"class":42},[36,154095,149030],{"class":405},[36,154097,12915],{"class":42},[36,154099,154039],{"class":405},[36,154101,51914],{"class":42},[36,154103,154044],{"class":405},[36,154105,12915],{"class":42},[36,154107,84561],{"class":405},[36,154109,51914],{"class":42},[36,154111,154112],{"class":53},"15000",[36,154114,5410],{"class":42},[36,154116,154117,154119,154121,154123,154125,154127,154129,154131,154133,154135,154137,154139,154142],{"class":38,"line":85},[36,154118,148786],{"class":42},[36,154120,148398],{"class":405},[36,154122,51914],{"class":42},[36,154124,149030],{"class":405},[36,154126,12915],{"class":42},[36,154128,154039],{"class":405},[36,154130,51914],{"class":42},[36,154132,154074],{"class":405},[36,154134,12915],{"class":42},[36,154136,84561],{"class":405},[36,154138,51914],{"class":42},[36,154140,154141],{"class":53},"16000",[36,154143,5410],{"class":42},[36,154145,154146],{"class":38,"line":419},[36,154147,33723],{"class":42},[596,154149,154151],{"id":154150},"_1252-按日期统计","12.5.2 按日期统计",[26,154153,154155],{"className":28,"code":154154,"language":30,"meta":31,"style":31},"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",[33,154156,154157,154166,154170,154181,154195,154208,154227,154231],{"__ignoreMap":31},[36,154158,154159,154162,154164],{"class":38,"line":39},[36,154160,154161],{"class":42},"daily_total ",[36,154163,47],{"class":46},[36,154165,88345],{"class":42},[36,154167,154168],{"class":38,"line":66},[36,154169,2880],{"emptyLinePlaceholder":553},[36,154171,154172,154174,154176,154178],{"class":38,"line":73},[36,154173,3505],{"class":46},[36,154175,148610],{"class":42},[36,154177,26524],{"class":46},[36,154179,154180],{"class":42}," sales:\n",[36,154182,154183,154186,154188,154191,154193],{"class":38,"line":79},[36,154184,154185],{"class":42},"    date ",[36,154187,47],{"class":46},[36,154189,154190],{"class":42}," item[",[36,154192,148398],{"class":405},[36,154194,33723],{"class":42},[36,154196,154197,154200,154202,154204,154206],{"class":38,"line":85},[36,154198,154199],{"class":42},"    amount ",[36,154201,47],{"class":46},[36,154203,154190],{"class":42},[36,154205,84561],{"class":405},[36,154207,33723],{"class":42},[36,154209,154210,154213,154215,154218,154220,154222,154224],{"class":38,"line":419},[36,154211,154212],{"class":42},"    daily_total[date] ",[36,154214,47],{"class":46},[36,154216,154217],{"class":42}," daily_total.get(date, ",[36,154219,812],{"class":53},[36,154221,14194],{"class":42},[36,154223,1097],{"class":46},[36,154225,154226],{"class":42}," amount\n",[36,154228,154229],{"class":38,"line":425},[36,154230,2880],{"emptyLinePlaceholder":553},[36,154232,154233,154235],{"class":38,"line":431},[36,154234,30894],{"class":53},[36,154236,154237],{"class":42},"(daily_total)\n",[596,154239,154241],{"id":154240},"_1253-按类别统计","12.5.3 按类别统计",[26,154243,154245],{"className":28,"code":154244,"language":30,"meta":31,"style":31},"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",[33,154246,154247,154256,154260,154270,154283,154295,154313,154317],{"__ignoreMap":31},[36,154248,154249,154252,154254],{"class":38,"line":39},[36,154250,154251],{"class":42},"category_total ",[36,154253,47],{"class":46},[36,154255,88345],{"class":42},[36,154257,154258],{"class":38,"line":66},[36,154259,2880],{"emptyLinePlaceholder":553},[36,154261,154262,154264,154266,154268],{"class":38,"line":73},[36,154263,3505],{"class":46},[36,154265,148610],{"class":42},[36,154267,26524],{"class":46},[36,154269,154180],{"class":42},[36,154271,154272,154275,154277,154279,154281],{"class":38,"line":79},[36,154273,154274],{"class":42},"    category ",[36,154276,47],{"class":46},[36,154278,154190],{"class":42},[36,154280,154039],{"class":405},[36,154282,33723],{"class":42},[36,154284,154285,154287,154289,154291,154293],{"class":38,"line":85},[36,154286,154199],{"class":42},[36,154288,47],{"class":46},[36,154290,154190],{"class":42},[36,154292,84561],{"class":405},[36,154294,33723],{"class":42},[36,154296,154297,154300,154302,154305,154307,154309,154311],{"class":38,"line":419},[36,154298,154299],{"class":42},"    category_total[category] ",[36,154301,47],{"class":46},[36,154303,154304],{"class":42}," category_total.get(category, ",[36,154306,812],{"class":53},[36,154308,14194],{"class":42},[36,154310,1097],{"class":46},[36,154312,154226],{"class":42},[36,154314,154315],{"class":38,"line":425},[36,154316,2880],{"emptyLinePlaceholder":553},[36,154318,154319,154321],{"class":38,"line":431},[36,154320,30894],{"class":53},[36,154322,154323],{"class":42},"(category_total)\n",[596,154325,154327],{"id":154326},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,154329,154331],{"className":28,"code":154330,"language":30,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[33,154332,154333,154358],{"__ignoreMap":31},[36,154334,154335,154338,154340,154342,154345,154348,154351,154354,154356],{"class":38,"line":39},[36,154336,154337],{"class":42},"top_date, top_amount ",[36,154339,47],{"class":46},[36,154341,6431],{"class":53},[36,154343,154344],{"class":42},"(daily_total.items(), ",[36,154346,154347],{"class":5696},"key",[36,154349,154350],{"class":46},"=lambda",[36,154352,154353],{"class":42}," item: item[",[36,154355,54],{"class":53},[36,154357,5137],{"class":42},[36,154359,154360,154362],{"class":38,"line":66},[36,154361,30894],{"class":53},[36,154363,154364],{"class":42},"(top_date, top_amount)\n",[14,154366,154368],{"id":154367},"_126-绘制柱状图","12.6 绘制柱状图",[26,154370,154372],{"className":28,"code":154371,"language":30,"meta":31,"style":31},"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",[33,154373,154374,154388,154399,154403,154411,154423,154435,154446,154450,154454,154464,154475,154489,154494,154511,154528,154544,154548],{"__ignoreMap":31},[36,154375,154376,154378,154380,154382,154384,154386],{"class":38,"line":39},[36,154377,31215],{"class":46},[36,154379,147780],{"class":42},[36,154381,30871],{"class":46},[36,154383,147785],{"class":42},[36,154385,31861],{"class":46},[36,154387,147790],{"class":42},[36,154389,154390,154392,154394,154396],{"class":38,"line":66},[36,154391,31215],{"class":46},[36,154393,147639],{"class":42},[36,154395,30871],{"class":46},[36,154397,154398],{"class":42}," Bar\n",[36,154400,154401],{"class":38,"line":73},[36,154402,2880],{"emptyLinePlaceholder":553},[36,154404,154405,154407,154409],{"class":38,"line":79},[36,154406,154251],{"class":42},[36,154408,47],{"class":46},[36,154410,16052],{"class":42},[36,154412,154413,154416,154418,154421],{"class":38,"line":85},[36,154414,154415],{"class":405},"    \"手机\"",[36,154417,51914],{"class":42},[36,154419,154420],{"class":53},"27000",[36,154422,31944],{"class":42},[36,154424,154425,154428,154430,154433],{"class":38,"line":419},[36,154426,154427],{"class":405},"    \"电脑\"",[36,154429,51914],{"class":42},[36,154431,154432],{"class":53},"34000",[36,154434,31944],{"class":42},[36,154436,154437,154440,154442,154444],{"class":38,"line":425},[36,154438,154439],{"class":405},"    \"耳机\"",[36,154441,51914],{"class":42},[36,154443,124800],{"class":53},[36,154445,31944],{"class":42},[36,154447,154448],{"class":38,"line":431},[36,154449,2045],{"class":42},[36,154451,154452],{"class":38,"line":437},[36,154453,2880],{"emptyLinePlaceholder":553},[36,154455,154456,154459,154461],{"class":38,"line":443},[36,154457,154458],{"class":42},"bar ",[36,154460,47],{"class":46},[36,154462,154463],{"class":42}," Bar()\n",[36,154465,154466,154469,154472],{"class":38,"line":2092},[36,154467,154468],{"class":42},"bar.add_xaxis(",[36,154470,154471],{"class":53},"list",[36,154473,154474],{"class":42},"(category_total.keys()))\n",[36,154476,154477,154480,154482,154484,154486],{"class":38,"line":2097},[36,154478,154479],{"class":42},"bar.add_yaxis(",[36,154481,147696],{"class":405},[36,154483,12915],{"class":42},[36,154485,154471],{"class":53},[36,154487,154488],{"class":42},"(category_total.values()))\n",[36,154490,154491],{"class":38,"line":2103},[36,154492,154493],{"class":42},"bar.set_global_opts(\n",[36,154495,154496,154498,154500,154502,154504,154506,154509],{"class":38,"line":2108},[36,154497,147874],{"class":5696},[36,154499,47],{"class":46},[36,154501,147879],{"class":42},[36,154503,51884],{"class":5696},[36,154505,47],{"class":46},[36,154507,154508],{"class":405},"\"品类销售额\"",[36,154510,38524],{"class":42},[36,154512,154513,154515,154517,154519,154521,154523,154526],{"class":38,"line":2122},[36,154514,147893],{"class":5696},[36,154516,47],{"class":46},[36,154518,147898],{"class":42},[36,154520,80287],{"class":5696},[36,154522,47],{"class":46},[36,154524,154525],{"class":405},"\"品类\"",[36,154527,38524],{"class":42},[36,154529,154530,154532,154534,154536,154538,154540,154542],{"class":38,"line":2127},[36,154531,147912],{"class":5696},[36,154533,47],{"class":46},[36,154535,147898],{"class":42},[36,154537,80287],{"class":5696},[36,154539,47],{"class":46},[36,154541,147696],{"class":405},[36,154543,38524],{"class":42},[36,154545,154546],{"class":38,"line":2133},[36,154547,63],{"class":42},[36,154549,154550,154553,154556],{"class":38,"line":2154},[36,154551,154552],{"class":42},"bar.render(",[36,154554,154555],{"class":405},"\"category_sales.html\"",[36,154557,63],{"class":42},[14,154559,154561],{"id":154560},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154563,154564],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,154566,154568],{"className":28,"code":154567,"language":30,"meta":31,"style":31},"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",[33,154569,154570,154584,154595,154599,154607,154631,154654,154679,154683,154687,154697,154701,154712,154721,154731,154745,154776,154781,154785],{"__ignoreMap":31},[36,154571,154572,154574,154576,154578,154580,154582],{"class":38,"line":39},[36,154573,31215],{"class":46},[36,154575,147780],{"class":42},[36,154577,30871],{"class":46},[36,154579,147785],{"class":42},[36,154581,31861],{"class":46},[36,154583,147790],{"class":42},[36,154585,154586,154588,154590,154592],{"class":38,"line":66},[36,154587,31215],{"class":46},[36,154589,147639],{"class":42},[36,154591,30871],{"class":46},[36,154593,154594],{"class":42}," Bar, Timeline\n",[36,154596,154597],{"class":38,"line":73},[36,154598,2880],{"emptyLinePlaceholder":553},[36,154600,154601,154603,154605],{"class":38,"line":79},[36,154602,102059],{"class":42},[36,154604,47],{"class":46},[36,154606,16052],{"class":42},[36,154608,154609,154612,154615,154617,154619,154621,154623,154625,154627,154629],{"class":38,"line":85},[36,154610,154611],{"class":405},"    \"2024-10-01\"",[36,154613,154614],{"class":42},": {",[36,154616,154044],{"class":405},[36,154618,51914],{"class":42},[36,154620,154053],{"class":53},[36,154622,12915],{"class":42},[36,154624,154074],{"class":405},[36,154626,51914],{"class":42},[36,154628,154083],{"class":53},[36,154630,5410],{"class":42},[36,154632,154633,154636,154638,154640,154642,154644,154646,154648,154650,154652],{"class":38,"line":419},[36,154634,154635],{"class":405},"    \"2024-10-02\"",[36,154637,154614],{"class":42},[36,154639,154044],{"class":405},[36,154641,51914],{"class":42},[36,154643,154112],{"class":53},[36,154645,12915],{"class":42},[36,154647,154074],{"class":405},[36,154649,51914],{"class":42},[36,154651,154141],{"class":53},[36,154653,5410],{"class":42},[36,154655,154656,154659,154661,154663,154665,154668,154670,154672,154674,154677],{"class":38,"line":425},[36,154657,154658],{"class":405},"    \"2024-10-03\"",[36,154660,154614],{"class":42},[36,154662,154044],{"class":405},[36,154664,51914],{"class":42},[36,154666,154667],{"class":53},"17000",[36,154669,12915],{"class":42},[36,154671,154074],{"class":405},[36,154673,51914],{"class":42},[36,154675,154676],{"class":53},"19000",[36,154678,5410],{"class":42},[36,154680,154681],{"class":38,"line":431},[36,154682,2045],{"class":42},[36,154684,154685],{"class":38,"line":437},[36,154686,2880],{"emptyLinePlaceholder":553},[36,154688,154689,154692,154694],{"class":38,"line":443},[36,154690,154691],{"class":42},"timeline ",[36,154693,47],{"class":46},[36,154695,154696],{"class":42}," Timeline()\n",[36,154698,154699],{"class":38,"line":2092},[36,154700,2880],{"emptyLinePlaceholder":553},[36,154702,154703,154705,154708,154710],{"class":38,"line":2097},[36,154704,3505],{"class":46},[36,154706,154707],{"class":42}," date, category_data ",[36,154709,26524],{"class":46},[36,154711,149549],{"class":42},[36,154713,154714,154717,154719],{"class":38,"line":2103},[36,154715,154716],{"class":42},"    bar ",[36,154718,47],{"class":46},[36,154720,154463],{"class":42},[36,154722,154723,154726,154728],{"class":38,"line":2108},[36,154724,154725],{"class":42},"    bar.add_xaxis(",[36,154727,154471],{"class":53},[36,154729,154730],{"class":42},"(category_data.keys()))\n",[36,154732,154733,154736,154738,154740,154742],{"class":38,"line":2122},[36,154734,154735],{"class":42},"    bar.add_yaxis(",[36,154737,147696],{"class":405},[36,154739,12915],{"class":42},[36,154741,154471],{"class":53},[36,154743,154744],{"class":42},"(category_data.values()))\n",[36,154746,154747,154750,154753,154755,154757,154759,154761,154763,154765,154767,154769,154771,154774],{"class":38,"line":2127},[36,154748,154749],{"class":42},"    bar.set_global_opts(",[36,154751,154752],{"class":5696},"title_opts",[36,154754,47],{"class":46},[36,154756,147879],{"class":42},[36,154758,51884],{"class":5696},[36,154760,47],{"class":46},[36,154762,677],{"class":46},[36,154764,870],{"class":405},[36,154766,1509],{"class":53},[36,154768,74403],{"class":42},[36,154770,1559],{"class":53},[36,154772,154773],{"class":405},"销售额\"",[36,154775,370],{"class":42},[36,154777,154778],{"class":38,"line":2133},[36,154779,154780],{"class":42},"    timeline.add(bar, date)\n",[36,154782,154783],{"class":38,"line":2154},[36,154784,2880],{"emptyLinePlaceholder":553},[36,154786,154787,154790,154793],{"class":38,"line":2159},[36,154788,154789],{"class":42},"timeline.render(",[36,154791,154792],{"class":405},"\"timeline_sales.html\"",[36,154794,63],{"class":42},[14,154796,154798],{"id":154797},"_128-绘制地图","12.8 绘制地图",[19,154800,154801],{},"地图适合展示地区数据。",[26,154803,154805],{"className":28,"code":154804,"language":30,"meta":31,"style":31},"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",[33,154806,154807,154821,154832,154836,154844,154857,154869,154882,154895,154899,154903,154913,154928,154933,154950,154969,154973],{"__ignoreMap":31},[36,154808,154809,154811,154813,154815,154817,154819],{"class":38,"line":39},[36,154810,31215],{"class":46},[36,154812,147780],{"class":42},[36,154814,30871],{"class":46},[36,154816,147785],{"class":42},[36,154818,31861],{"class":46},[36,154820,147790],{"class":42},[36,154822,154823,154825,154827,154829],{"class":38,"line":66},[36,154824,31215],{"class":46},[36,154826,147639],{"class":42},[36,154828,30871],{"class":46},[36,154830,154831],{"class":42}," Map\n",[36,154833,154834],{"class":38,"line":73},[36,154835,2880],{"emptyLinePlaceholder":553},[36,154837,154838,154840,154842],{"class":38,"line":79},[36,154839,102059],{"class":42},[36,154841,47],{"class":46},[36,154843,55924],{"class":42},[36,154845,154846,154849,154851,154853,154855],{"class":38,"line":85},[36,154847,154848],{"class":42},"    (",[36,154850,69746],{"class":405},[36,154852,12915],{"class":42},[36,154854,1430],{"class":53},[36,154856,38524],{"class":42},[36,154858,154859,154861,154863,154865,154867],{"class":38,"line":419},[36,154860,154848],{"class":42},[36,154862,69766],{"class":405},[36,154864,12915],{"class":42},[36,154866,147713],{"class":53},[36,154868,38524],{"class":42},[36,154870,154871,154873,154876,154878,154880],{"class":38,"line":425},[36,154872,154848],{"class":42},[36,154874,154875],{"class":405},"\"广东\"",[36,154877,12915],{"class":42},[36,154879,2202],{"class":53},[36,154881,38524],{"class":42},[36,154883,154884,154886,154889,154891,154893],{"class":38,"line":431},[36,154885,154848],{"class":42},[36,154887,154888],{"class":405},"\"浙江\"",[36,154890,12915],{"class":42},[36,154892,147718],{"class":53},[36,154894,38524],{"class":42},[36,154896,154897],{"class":38,"line":437},[36,154898,33723],{"class":42},[36,154900,154901],{"class":38,"line":443},[36,154902,2880],{"emptyLinePlaceholder":553},[36,154904,154905,154908,154910],{"class":38,"line":2092},[36,154906,154907],{"class":42},"map_chart ",[36,154909,47],{"class":46},[36,154911,154912],{"class":42}," Map()\n",[36,154914,154915,154918,154920,154923,154926],{"class":38,"line":2097},[36,154916,154917],{"class":42},"map_chart.add(",[36,154919,147696],{"class":405},[36,154921,154922],{"class":42},", data, ",[36,154924,154925],{"class":405},"\"china\"",[36,154927,63],{"class":42},[36,154929,154930],{"class":38,"line":2103},[36,154931,154932],{"class":42},"map_chart.set_global_opts(\n",[36,154934,154935,154937,154939,154941,154943,154945,154948],{"class":38,"line":2108},[36,154936,147874],{"class":5696},[36,154938,47],{"class":46},[36,154940,147879],{"class":42},[36,154942,51884],{"class":5696},[36,154944,47],{"class":46},[36,154946,154947],{"class":405},"\"地区销售额\"",[36,154949,38524],{"class":42},[36,154951,154952,154955,154957,154960,154963,154965,154967],{"class":38,"line":2122},[36,154953,154954],{"class":5696},"    visualmap_opts",[36,154956,47],{"class":46},[36,154958,154959],{"class":42},"opts.VisualMapOpts(",[36,154961,154962],{"class":5696},"max_",[36,154964,47],{"class":46},[36,154966,2202],{"class":53},[36,154968,38524],{"class":42},[36,154970,154971],{"class":38,"line":2127},[36,154972,63],{"class":42},[36,154974,154975,154978,154981],{"class":38,"line":2133},[36,154976,154977],{"class":42},"map_chart.render(",[36,154979,154980],{"class":405},"\"map_sales.html\"",[36,154982,63],{"class":42},[19,154984,154985],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154987,154989],{"id":154988},"_129-项目拆分建议","12.9 项目拆分建议",[19,154991,154992],{},"当代码超过一个文件时，可以这样组织：",[26,154994,154997],{"className":154995,"code":154996,"language":5667,"meta":31},[5665],"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",[33,154998,154996],{"__ignoreMap":31},[19,155000,155001],{},"职责：",[579,155003,155004,155010,155016,155022],{},[582,155005,155006,155009],{},[33,155007,155008],{},"main.py","：程序入口。",[582,155011,155012,155015],{},[33,155013,155014],{},"file_utils.py","：读写 JSON。",[582,155017,155018,155021],{},[33,155019,155020],{},"sales_service.py","：统计销售数据。",[582,155023,155024,155027],{},[33,155025,155026],{},"chart_builder.py","：生成图表。",[14,155029,155031],{"id":155030},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155033,155034],{},"语法基础：",[579,155036,155037,155040,155043,155046],{},[582,155038,155039],{},"会写变量、注释、输入输出。",[582,155041,155042],{},"会使用 int、float、str、bool。",[582,155044,155045],{},"会做类型转换。",[582,155047,155048],{},"会使用 f-string 格式化输出。",[19,155050,155051],{},"流程控制：",[579,155053,155054,155060,155066,155074],{},[582,155055,155056,155057,28866],{},"会写 ",[33,155058,155059],{},"if elif else",[582,155061,155056,155062,101419,155064,28866],{},[33,155063,109064],{},[33,155065,3505],{},[582,155067,155068,155069,101419,155071,28866],{},"理解 ",[33,155070,2533],{},[33,155072,155073],{},"continue",[582,155075,155076],{},"能写嵌套循环。",[19,155078,155079],{},"函数：",[579,155081,155082,155085,155088,155091],{},[582,155083,155084],{},"会定义和调用函数。",[582,155086,155087],{},"理解参数和返回值。",[582,155089,155090],{},"知道局部变量和全局变量。",[582,155092,155093],{},"会使用默认参数、关键字参数、不定长参数。",[19,155095,155096],{},"容器：",[579,155098,155099,155102,155105,155108,155111],{},[582,155100,155101],{},"会使用列表增删改查。",[582,155103,155104],{},"会遍历列表、字典。",[582,155106,155107],{},"会使用切片。",[582,155109,155110],{},"会用集合去重。",[582,155112,155113],{},"会处理列表嵌套字典。",[19,155115,155116],{},"文件和模块：",[579,155118,155119,155122,155125,155128,155131],{},[582,155120,155121],{},"会读写文本文件。",[582,155123,155124],{},"会读写 JSON。",[582,155126,155127],{},"会捕获常见异常。",[582,155129,155130],{},"会导入模块和第三方包。",[582,155132,155133],{},"会创建简单包结构。",[19,155135,155136],{},"项目能力：",[579,155138,155139,155142,155145,155148,155151],{},[582,155140,155141],{},"能把代码拆成函数。",[582,155143,155144],{},"能把数据保存到文件。",[582,155146,155147],{},"能处理用户输入错误。",[582,155149,155150],{},"能写一个完整菜单程序。",[582,155152,155153],{},"能用 pyecharts 生成图表。",[14,155155,155157],{"id":155156},"_1211-推荐练习顺序","12.11 推荐练习顺序",[579,155159,155160,155163,155166,155169,155172,155175,155178,155181],{},[582,155161,155162],{},"猜数字游戏。",[582,155164,155165],{},"ATM 菜单程序。",[582,155167,155168],{},"学生成绩统计。",[582,155170,155171],{},"学生管理系统函数版。",[582,155173,155174],{},"学生管理系统文件持久化版。",[582,155176,155177],{},"学生管理系统面向对象版。",[582,155179,155180],{},"销售数据统计。",[582,155182,155183],{},"销售数据可视化。",[14,155185,155187],{"id":155186},"_1212-常见学习误区","12.12 常见学习误区",[579,155189,155190,155193,155196,155199,155202,155205,155208],{},[582,155191,155192],{},"只看视频不敲代码。",[582,155194,155195],{},"一报错就复制错误去搜，不先读报错位置。",[582,155197,155198],{},"变量名随便写，后续自己看不懂。",[582,155200,155201],{},"所有代码都写在一个文件一个函数里。",[582,155203,155204],{},"不保存练习代码，复习时没有材料。",[582,155206,155207],{},"还没掌握列表字典就急着学框架。",[582,155209,155210],{},"不会读官方文档，只依赖教程。",[14,155212,155214],{"id":155213},"_1213-如何读报错","12.13 如何读报错",[19,155216,155217],{},"报错通常从下往上看最后几行。",[19,155219,15615],{},[26,155221,155224],{"className":155222,"code":155223,"language":5667,"meta":31},[5665],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,155225,155223],{"__ignoreMap":31},[19,155227,25080],{},[579,155229,155230,155236,155246],{},[582,155231,155232,155233,28866],{},"异常类型是 ",[33,155234,155235],{},"ValueError",[582,155237,107746,155238,155241,155242,155245],{},[33,155239,155240],{},"int()"," 无法把 ",[33,155243,155244],{},"'abc'"," 转成整数。",[582,155247,155248],{},"应该检查输入内容或增加异常处理。",[19,155250,155251],{},"再看文件名和行号：",[26,155253,155256],{"className":155254,"code":155255,"language":5667,"meta":31},[5665],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,155257,155255],{"__ignoreMap":31},[19,155259,155260,155261,155263],{},"表示错误发生在 ",[33,155262,155008],{}," 第 10 行。",[14,155265,155267],{"id":155266},"_1214-后续学习方向","12.14 后续学习方向",[19,155269,155270],{},"Python 基础完成后，可以按兴趣选择方向：",[579,155272,155273,155285,155294,155306,155317,155326,155336],{},[582,155274,155275,155276,833,155279,833,155282,28866],{},"自动化办公：",[33,155277,155278],{},"openpyxl",[33,155280,155281],{},"python-docx",[33,155283,155284],{},"pdfplumber",[582,155286,155287,155288,833,155290,833,155292,28866],{},"数据分析：",[33,155289,101027],{},[33,155291,146586],{},[33,155293,146594],{},[582,155295,155296,155297,833,155300,833,155303,28866],{},"Web 后端：",[33,155298,155299],{},"Flask",[33,155301,155302],{},"FastAPI",[33,155304,155305],{},"Django",[582,155307,155308,155309,833,155311,833,155314,28866],{},"爬虫：",[33,155310,146571],{},[33,155312,155313],{},"BeautifulSoup",[33,155315,155316],{},"Scrapy",[582,155318,155319,155320,833,155322,155325],{},"测试开发：",[33,155321,146618],{},[33,155323,155324],{},"selenium","、接口测试。",[582,155327,155328,155329,833,155331,833,155333,28866],{},"人工智能：",[33,155330,101027],{},[33,155332,146586],{},[33,155334,155335],{},"pytorch",[582,155337,155338,155339,833,155341,833,155344,28866],{},"运维脚本：",[33,155340,146187],{},[33,155342,155343],{},"subprocess",[33,155345,155346],{},"paramiko",[19,155348,155349],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155351,155353],{"id":155352},"_1215-结课练习","12.15 结课练习",[579,155355,155356,155359,155362,155365,155368,155371,155374,155377],{},[582,155357,155358],{},"完成函数版学生管理系统。",[582,155360,155361],{},"给学生管理系统增加 JSON 持久化。",[582,155363,155364],{},"给学生管理系统增加异常处理。",[582,155366,155367],{},"把学生管理系统改成面向对象版。",[582,155369,155370],{},"使用 pyecharts 绘制学生成绩柱状图。",[582,155372,155373],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[582,155375,155376],{},"按品类统计销售额并绘制柱状图。",[582,155378,155379],{},"写一份自己的 Python 学习路线图。",[539,155381,155382],{},"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":31,"searchDepth":66,"depth":66,"links":155384},[155385,155386,155389,155390,155391,155397,155398,155399,155400,155401,155402,155403,155404,155405,155406],{"id":152101,"depth":66,"text":152102},{"id":152151,"depth":66,"text":152152,"children":155387},[155388],{"id":152155,"depth":73,"text":152156},{"id":152194,"depth":66,"text":152195},{"id":153668,"depth":66,"text":153669},{"id":154006,"depth":66,"text":154007,"children":155392},[155393,155394,155395,155396],{"id":154010,"depth":73,"text":154011},{"id":154150,"depth":73,"text":154151},{"id":154240,"depth":73,"text":154241},{"id":154326,"depth":73,"text":154327},{"id":154367,"depth":66,"text":154368},{"id":154560,"depth":66,"text":154561},{"id":154797,"depth":66,"text":154798},{"id":154988,"depth":66,"text":154989},{"id":155030,"depth":66,"text":155031},{"id":155156,"depth":66,"text":155157},{"id":155186,"depth":66,"text":155187},{"id":155213,"depth":66,"text":155214},{"id":155266,"depth":66,"text":155267},{"id":155352,"depth":66,"text":155353},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152093,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155413,"title":155414,"body":155415,"description":550,"extension":551,"meta":157884,"navigation":553,"path":157885,"seo":157886,"stem":157887,"__hash__":157888},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155416,"toc":157859},[155417,155420,155424,155427,155430,155450,155453,155476,155479,155482,155504,155507,155529,155533,155536,155576,155579,155700,155704,155707,155747,155750,155774,155777,155781,155784,155798,155831,155834,155869,155872,155895,155898,155931,155934,155936,155942,156017,156020,156026,156043,156083,156087,156090,156136,156138,156176,156179,156214,156217,156252,156255,156287,156290,156309,156313,156317,156430,156432,156507,156511,156557,156560,156586,156595,156599,156602,156665,156673,156701,156705,156745,156810,156814,156817,156856,156859,156904,156907,156968,156972,156999,157002,157030,157033,157037,157041,157106,157109,157147,157150,157182,157186,157285,157289,157292,157365,157368,157416,157420,157426,157466,157469,157516,157519,157568,157572,157574,157588,157590,157771,157775,157802,157822,157829,157833,157850,157856],[10,155418,155414],{"id":155419},"_2-基础语法变量与字符串",[14,155421,155423],{"id":155422},"_21-注释","2.1 注释",[19,155425,155426],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155428,155429],{},"单行注释：",[26,155431,155433],{"className":28,"code":155432,"language":30,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[33,155434,155435,155440],{"__ignoreMap":31},[36,155436,155437],{"class":38,"line":39},[36,155438,155439],{"class":69},"# 这是单行注释\n",[36,155441,155442,155444,155446,155448],{"class":38,"line":66},[36,155443,30894],{"class":53},[36,155445,345],{"class":42},[36,155447,6324],{"class":405},[36,155449,63],{"class":42},[19,155451,155452],{},"多行说明常用三引号：",[26,155454,155456],{"className":28,"code":155455,"language":30,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,155457,155458,155462,155467,155472],{"__ignoreMap":31},[36,155459,155460],{"class":38,"line":39},[36,155461,96169],{"class":405},[36,155463,155464],{"class":38,"line":66},[36,155465,155466],{"class":405},"这是多行说明。\n",[36,155468,155469],{"class":38,"line":73},[36,155470,155471],{"class":405},"常用于文件顶部说明、函数说明等。\n",[36,155473,155474],{"class":38,"line":79},[36,155475,96169],{"class":405},[19,155477,155478],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155480,155481],{},"不好：",[26,155483,155485],{"className":28,"code":155484,"language":30,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,155486,155487,155492],{"__ignoreMap":31},[36,155488,155489],{"class":38,"line":39},[36,155490,155491],{"class":69},"# age 加 1\n",[36,155493,155494,155496,155498,155500,155502],{"class":38,"line":66},[36,155495,146947],{"class":42},[36,155497,47],{"class":46},[36,155499,16187],{"class":42},[36,155501,1097],{"class":46},[36,155503,56176],{"class":53},[19,155505,155506],{},"较好：",[26,155508,155510],{"className":28,"code":155509,"language":30,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,155511,155512,155517],{"__ignoreMap":31},[36,155513,155514],{"class":38,"line":39},[36,155515,155516],{"class":69},"# 用户过完生日后，年龄增加一岁\n",[36,155518,155519,155521,155523,155525,155527],{"class":38,"line":66},[36,155520,146947],{"class":42},[36,155522,47],{"class":46},[36,155524,16187],{"class":42},[36,155526,1097],{"class":46},[36,155528,56176],{"class":53},[14,155530,155532],{"id":155531},"_22-字面量","2.2 字面量",[19,155534,155535],{},"字面量就是代码中直接写出来的数据。",[26,155537,155539],{"className":28,"code":155538,"language":30,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,155540,155541,155548,155555,155562,155569],{"__ignoreMap":31},[36,155542,155543,155545],{"class":38,"line":39},[36,155544,930],{"class":53},[36,155546,155547],{"class":69},"          # 整数\n",[36,155549,155550,155552],{"class":38,"line":66},[36,155551,674],{"class":53},[36,155553,155554],{"class":69},"         # 小数\n",[36,155556,155557,155559],{"class":38,"line":73},[36,155558,6324],{"class":405},[36,155560,155561],{"class":69},"      # 字符串\n",[36,155563,155564,155566],{"class":38,"line":79},[36,155565,31954],{"class":53},[36,155567,155568],{"class":69},"         # 布尔值\n",[36,155570,155571,155573],{"class":38,"line":85},[36,155572,96157],{"class":53},[36,155574,155575],{"class":69},"         # 空值\n",[19,155577,155578],{},"常见字面量类型：",[758,155580,155581,155591],{},[761,155582,155583],{},[764,155584,155585,155587,155589],{},[767,155586,24217],{},[767,155588,27973],{},[767,155590,26350],{},[805,155592,155593,155604,155615,155626,155638,155650,155662,155675,155687],{},[764,155594,155595,155597,155601],{},[810,155596,631],{},[810,155598,155599],{},[33,155600,930],{},[810,155602,155603],{},"整数",[764,155605,155606,155608,155612],{},[810,155607,666],{},[810,155609,155610],{},[33,155611,674],{},[810,155613,155614],{},"浮点数",[764,155616,155617,155619,155623],{},[810,155618,1783],{},[810,155620,155621],{},[33,155622,6324],{},[810,155624,155625],{},"字符串",[764,155627,155628,155630,155636],{},[810,155629,1835],{},[810,155631,155632,833,155634],{},[33,155633,31954],{},[33,155635,34464],{},[810,155637,66492],{},[764,155639,155640,155643,155647],{},[810,155641,155642],{},"NoneType",[810,155644,155645],{},[33,155646,96157],{},[810,155648,155649],{},"空值",[764,155651,155652,155654,155659],{},[810,155653,154471],{},[810,155655,155656],{},[33,155657,155658],{},"[1, 2, 3]",[810,155660,155661],{},"列表",[764,155663,155664,155667,155672],{},[810,155665,155666],{},"tuple",[810,155668,155669],{},[33,155670,155671],{},"(1, 2, 3)",[810,155673,155674],{},"元组",[764,155676,155677,155679,155684],{},[810,155678,114947],{},[810,155680,155681],{},[33,155682,155683],{},"{\"name\": \"张三\"}",[810,155685,155686],{},"字典",[764,155688,155689,155692,155697],{},[810,155690,155691],{},"set",[810,155693,155694],{},[33,155695,155696],{},"{1, 2, 3}",[810,155698,155699],{},"集合",[14,155701,155703],{"id":155702},"_23-变量","2.3 变量",[19,155705,155706],{},"变量是保存数据的名字。",[26,155708,155710],{"className":28,"code":155709,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,155711,155712,155720,155728,155738],{"__ignoreMap":31},[36,155713,155714,155716,155718],{"class":38,"line":39},[36,155715,146937],{"class":42},[36,155717,47],{"class":46},[36,155719,149754],{"class":405},[36,155721,155722,155724,155726],{"class":38,"line":66},[36,155723,146947],{"class":42},[36,155725,47],{"class":46},[36,155727,146952],{"class":53},[36,155729,155730,155733,155735],{"class":38,"line":73},[36,155731,155732],{"class":42},"height ",[36,155734,47],{"class":46},[36,155736,155737],{"class":53}," 1.75\n",[36,155739,155740,155743,155745],{"class":38,"line":79},[36,155741,155742],{"class":42},"is_student ",[36,155744,47],{"class":46},[36,155746,154000],{"class":53},[19,155748,155749],{},"Python 的变量不需要提前声明类型：",[26,155751,155753],{"className":28,"code":155752,"language":30,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,155754,155755,155765],{"__ignoreMap":31},[36,155756,155757,155760,155762],{"class":38,"line":39},[36,155758,155759],{"class":42},"score ",[36,155761,47],{"class":46},[36,155763,155764],{"class":53}," 100\n",[36,155766,155767,155769,155771],{"class":38,"line":66},[36,155768,155759],{"class":42},[36,155770,47],{"class":46},[36,155772,155773],{"class":405}," \"满分\"\n",[19,155775,155776],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155778,155780],{"id":155779},"_24-变量命名规则","2.4 变量命名规则",[19,155782,155783],{},"硬性规则：",[579,155785,155786,155789,155792,155795],{},[582,155787,155788],{},"只能由字母、数字、下划线组成。",[582,155790,155791],{},"不能以数字开头。",[582,155793,155794],{},"不能使用 Python 关键字。",[582,155796,155797],{},"区分大小写。",[26,155799,155801],{"className":28,"code":155800,"language":30,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,155802,155803,155812,155821],{"__ignoreMap":31},[36,155804,155805,155808,155810],{"class":38,"line":39},[36,155806,155807],{"class":42},"user_name ",[36,155809,47],{"class":46},[36,155811,146942],{"class":405},[36,155813,155814,155817,155819],{"class":38,"line":66},[36,155815,155816],{"class":42},"age2 ",[36,155818,47],{"class":46},[36,155820,146952],{"class":53},[36,155822,155823,155826,155828],{"class":38,"line":73},[36,155824,155825],{"class":42},"_token ",[36,155827,47],{"class":46},[36,155829,155830],{"class":405}," \"abc\"\n",[19,155832,155833],{},"错误写法：",[26,155835,155837],{"className":28,"code":155836,"language":30,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,155838,155839,155848,155860],{"__ignoreMap":31},[36,155840,155841,155844,155846],{"class":38,"line":39},[36,155842,155843],{"class":77880},"2age",[36,155845,14044],{"class":46},[36,155847,146952],{"class":53},[36,155849,155850,155852,155854,155856,155858],{"class":38,"line":66},[36,155851,131985],{"class":42},[36,155853,173],{"class":46},[36,155855,146937],{"class":42},[36,155857,47],{"class":46},[36,155859,146942],{"class":405},[36,155861,155862,155864,155866],{"class":38,"line":73},[36,155863,15174],{"class":46},[36,155865,14044],{"class":46},[36,155867,155868],{"class":405}," \"一班\"\n",[19,155870,155871],{},"查看关键字：",[26,155873,155875],{"className":28,"code":155874,"language":30,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,155876,155877,155884,155888],{"__ignoreMap":31},[36,155878,155879,155881],{"class":38,"line":39},[36,155880,30871],{"class":46},[36,155882,155883],{"class":42}," keyword\n",[36,155885,155886],{"class":38,"line":66},[36,155887,2880],{"emptyLinePlaceholder":553},[36,155889,155890,155892],{"class":38,"line":73},[36,155891,30894],{"class":53},[36,155893,155894],{"class":42},"(keyword.kwlist)\n",[19,155896,155897],{},"推荐命名风格：",[26,155899,155901],{"className":28,"code":155900,"language":30,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,155902,155903,155912,155922],{"__ignoreMap":31},[36,155904,155905,155908,155910],{"class":38,"line":39},[36,155906,155907],{"class":42},"student_name ",[36,155909,47],{"class":46},[36,155911,149754],{"class":405},[36,155913,155914,155917,155919],{"class":38,"line":66},[36,155915,155916],{"class":42},"total_price ",[36,155918,47],{"class":46},[36,155920,155921],{"class":53}," 99.8\n",[36,155923,155924,155927,155929],{"class":38,"line":73},[36,155925,155926],{"class":42},"is_finished ",[36,155928,47],{"class":46},[36,155930,126208],{"class":53},[19,155932,155933],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155935,51209],{"id":51208},[19,155937,104767,155938,155941],{},[33,155939,155940],{},"type()"," 查看数据类型：",[26,155943,155945],{"className":28,"code":155944,"language":30,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,155946,155947,155961,155975,155989,156003],{"__ignoreMap":31},[36,155948,155949,155951,155953,155955,155957,155959],{"class":38,"line":39},[36,155950,30894],{"class":53},[36,155952,345],{"class":42},[36,155954,103508],{"class":53},[36,155956,345],{"class":42},[36,155958,930],{"class":53},[36,155960,370],{"class":42},[36,155962,155963,155965,155967,155969,155971,155973],{"class":38,"line":66},[36,155964,30894],{"class":53},[36,155966,345],{"class":42},[36,155968,103508],{"class":53},[36,155970,345],{"class":42},[36,155972,674],{"class":53},[36,155974,370],{"class":42},[36,155976,155977,155979,155981,155983,155985,155987],{"class":38,"line":73},[36,155978,30894],{"class":53},[36,155980,345],{"class":42},[36,155982,103508],{"class":53},[36,155984,345],{"class":42},[36,155986,6324],{"class":405},[36,155988,370],{"class":42},[36,155990,155991,155993,155995,155997,155999,156001],{"class":38,"line":79},[36,155992,30894],{"class":53},[36,155994,345],{"class":42},[36,155996,103508],{"class":53},[36,155998,345],{"class":42},[36,156000,31954],{"class":53},[36,156002,370],{"class":42},[36,156004,156005,156007,156009,156011,156013,156015],{"class":38,"line":85},[36,156006,30894],{"class":53},[36,156008,345],{"class":42},[36,156010,103508],{"class":53},[36,156012,345],{"class":42},[36,156014,96157],{"class":53},[36,156016,370],{"class":42},[19,156018,156019],{},"输出类似：",[26,156021,156024],{"className":156022,"code":156023,"language":5667,"meta":31},[5665],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[33,156025,156023],{"__ignoreMap":31},[19,156027,9505,156028,107684,156030,156032,156033,156035,156036,21980,156038,156035,156040,156042],{},[33,156029,1835],{},[33,156031,631],{}," 的子类，",[33,156034,31954],{}," 可以当作 ",[33,156037,54],{},[33,156039,34464],{},[33,156041,812],{},"，但业务代码中不要滥用。",[26,156044,156046],{"className":28,"code":156045,"language":30,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,156047,156048,156066],{"__ignoreMap":31},[36,156049,156050,156052,156054,156056,156058,156060,156063],{"class":38,"line":39},[36,156051,30894],{"class":53},[36,156053,345],{"class":42},[36,156055,31954],{"class":53},[36,156057,46043],{"class":46},[36,156059,25599],{"class":53},[36,156061,156062],{"class":42},")   ",[36,156064,156065],{"class":69},"# 2\n",[36,156067,156068,156070,156072,156074,156076,156078,156080],{"class":38,"line":66},[36,156069,30894],{"class":53},[36,156071,345],{"class":42},[36,156073,34464],{"class":53},[36,156075,46043],{"class":46},[36,156077,25599],{"class":53},[36,156079,46285],{"class":42},[36,156081,156082],{"class":69},"# 1\n",[14,156084,156086],{"id":156085},"_26-类型转换","2.6 类型转换",[19,156088,156089],{},"常用转换函数：",[26,156091,156093],{"className":28,"code":156092,"language":30,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,156094,156095,156105,156116,156126],{"__ignoreMap":31},[36,156096,156097,156099,156101,156103],{"class":38,"line":39},[36,156098,631],{"class":53},[36,156100,345],{"class":42},[36,156102,54793],{"class":405},[36,156104,63],{"class":42},[36,156106,156107,156109,156111,156114],{"class":38,"line":66},[36,156108,666],{"class":53},[36,156110,345],{"class":42},[36,156112,156113],{"class":405},"\"3.14\"",[36,156115,63],{"class":42},[36,156117,156118,156120,156122,156124],{"class":38,"line":73},[36,156119,1783],{"class":53},[36,156121,345],{"class":42},[36,156123,930],{"class":53},[36,156125,63],{"class":42},[36,156127,156128,156130,156132,156134],{"class":38,"line":79},[36,156129,1835],{"class":53},[36,156131,345],{"class":42},[36,156133,54],{"class":53},[36,156135,63],{"class":42},[19,156137,15615],{},[26,156139,156141],{"className":28,"code":156140,"language":30,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,156142,156143,156152,156163],{"__ignoreMap":31},[36,156144,156145,156147,156149],{"class":38,"line":39},[36,156146,146947],{"class":42},[36,156148,47],{"class":46},[36,156150,156151],{"class":405}," \"18\"\n",[36,156153,156154,156156,156158,156160],{"class":38,"line":66},[36,156155,146947],{"class":42},[36,156157,47],{"class":46},[36,156159,2862],{"class":53},[36,156161,156162],{"class":42},"(age)\n",[36,156164,156165,156167,156170,156172,156174],{"class":38,"line":73},[36,156166,30894],{"class":53},[36,156168,156169],{"class":42},"(age ",[36,156171,1097],{"class":46},[36,156173,25599],{"class":53},[36,156175,63],{"class":42},[19,156177,156178],{},"输入得到的内容永远是字符串：",[26,156180,156182],{"className":28,"code":156181,"language":30,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,156183,156184,156200],{"__ignoreMap":31},[36,156185,156186,156189,156191,156193,156195,156198],{"class":38,"line":39},[36,156187,156188],{"class":42},"num ",[36,156190,47],{"class":46},[36,156192,61082],{"class":53},[36,156194,345],{"class":42},[36,156196,156197],{"class":405},"\"请输入数字:\"",[36,156199,63],{"class":42},[36,156201,156202,156204,156206,156208,156211],{"class":38,"line":66},[36,156203,30894],{"class":53},[36,156205,345],{"class":42},[36,156207,103508],{"class":53},[36,156209,156210],{"class":42},"(num))  ",[36,156212,156213],{"class":69},"# str\n",[19,156215,156216],{},"如果要做数学运算，必须转换：",[26,156218,156220],{"className":28,"code":156219,"language":30,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,156221,156222,156240],{"__ignoreMap":31},[36,156223,156224,156226,156228,156230,156232,156234,156236,156238],{"class":38,"line":39},[36,156225,156188],{"class":42},[36,156227,47],{"class":46},[36,156229,2862],{"class":53},[36,156231,345],{"class":42},[36,156233,54298],{"class":53},[36,156235,345],{"class":42},[36,156237,156197],{"class":405},[36,156239,370],{"class":42},[36,156241,156242,156244,156246,156248,156250],{"class":38,"line":66},[36,156243,30894],{"class":53},[36,156245,46096],{"class":42},[36,156247,1097],{"class":46},[36,156249,2518],{"class":53},[36,156251,63],{"class":42},[19,156253,156254],{},"常见错误：",[26,156256,156258],{"className":28,"code":156257,"language":30,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,156259,156260,156273],{"__ignoreMap":31},[36,156261,156262,156264,156266,156268,156270],{"class":38,"line":39},[36,156263,631],{"class":53},[36,156265,345],{"class":42},[36,156267,156113],{"class":405},[36,156269,156062],{"class":42},[36,156271,156272],{"class":69},"# 错误\n",[36,156274,156275,156277,156279,156282,156285],{"class":38,"line":66},[36,156276,631],{"class":53},[36,156278,345],{"class":42},[36,156280,156281],{"class":405},"\"abc\"",[36,156283,156284],{"class":42},")    ",[36,156286,156272],{"class":69},[19,156288,156289],{},"正确写法：",[26,156291,156293],{"className":28,"code":156292,"language":30,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,156294,156295],{"__ignoreMap":31},[36,156296,156297,156299,156301,156303,156305,156307],{"class":38,"line":39},[36,156298,156188],{"class":42},[36,156300,47],{"class":46},[36,156302,110198],{"class":53},[36,156304,345],{"class":42},[36,156306,156113],{"class":405},[36,156308,63],{"class":42},[14,156310,156312],{"id":156311},"_27-运算符","2.7 运算符",[596,156314,156316],{"id":156315},"_271-算术运算符","2.7.1 算术运算符",[758,156318,156319,156330],{},[761,156320,156321],{},[764,156322,156323,156326,156328],{},[767,156324,156325],{},"运算符",[767,156327,26350],{},[767,156329,27973],{},[805,156331,156332,156346,156360,156374,156388,156402,156416],{},[764,156333,156334,156338,156341],{},[810,156335,156336],{},[33,156337,1097],{},[810,156339,156340],{},"加法",[810,156342,156343],{},[33,156344,156345],{},"1 + 2",[764,156347,156348,156352,156355],{},[810,156349,156350],{},[33,156351,173],{},[810,156353,156354],{},"减法",[810,156356,156357],{},[33,156358,156359],{},"5 - 3",[764,156361,156362,156366,156369],{},[810,156363,156364],{},[33,156365,1071],{},[810,156367,156368],{},"乘法",[810,156370,156371],{},[33,156372,156373],{},"2 * 3",[764,156375,156376,156380,156383],{},[810,156377,156378],{},[33,156379,1197],{},[810,156381,156382],{},"除法，结果是浮点数",[810,156384,156385],{},[33,156386,156387],{},"5 \u002F 2",[764,156389,156390,156394,156397],{},[810,156391,156392],{},[33,156393,33806],{},[810,156395,156396],{},"整除",[810,156398,156399],{},[33,156400,156401],{},"5 \u002F\u002F 2",[764,156403,156404,156408,156411],{},[810,156405,156406],{},[33,156407,947],{},[810,156409,156410],{},"取余",[810,156412,156413],{},[33,156414,156415],{},"5 % 2",[764,156417,156418,156422,156425],{},[810,156419,156420],{},[33,156421,11141],{},[810,156423,156424],{},"幂运算",[810,156426,156427],{},[33,156428,156429],{},"2 ** 3",[19,156431,15615],{},[26,156433,156435],{"className":28,"code":156434,"language":30,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[33,156436,156437,156455,156472,156489],{"__ignoreMap":31},[36,156438,156439,156441,156443,156445,156448,156450,156452],{"class":38,"line":39},[36,156440,30894],{"class":53},[36,156442,345],{"class":42},[36,156444,938],{"class":53},[36,156446,156447],{"class":46}," \u002F",[36,156449,15235],{"class":53},[36,156451,156062],{"class":42},[36,156453,156454],{"class":69},"# 2.5\n",[36,156456,156457,156459,156461,156463,156466,156468,156470],{"class":38,"line":66},[36,156458,30894],{"class":53},[36,156460,345],{"class":42},[36,156462,938],{"class":53},[36,156464,156465],{"class":46}," \u002F\u002F",[36,156467,15235],{"class":53},[36,156469,46285],{"class":42},[36,156471,156065],{"class":69},[36,156473,156474,156476,156478,156480,156483,156485,156487],{"class":38,"line":73},[36,156475,30894],{"class":53},[36,156477,345],{"class":42},[36,156479,938],{"class":53},[36,156481,156482],{"class":46}," %",[36,156484,15235],{"class":53},[36,156486,156062],{"class":42},[36,156488,156082],{"class":69},[36,156490,156491,156493,156495,156497,156500,156502,156504],{"class":38,"line":79},[36,156492,30894],{"class":53},[36,156494,345],{"class":42},[36,156496,96],{"class":53},[36,156498,156499],{"class":46}," **",[36,156501,78547],{"class":53},[36,156503,46285],{"class":42},[36,156505,156506],{"class":69},"# 8\n",[596,156508,156510],{"id":156509},"_272-赋值运算符","2.7.2 赋值运算符",[26,156512,156514],{"className":28,"code":156513,"language":30,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,156515,156516,156524,156532,156540,156548],{"__ignoreMap":31},[36,156517,156518,156520,156522],{"class":38,"line":39},[36,156519,156188],{"class":42},[36,156521,47],{"class":46},[36,156523,58905],{"class":53},[36,156525,156526,156528,156530],{"class":38,"line":66},[36,156527,156188],{"class":42},[36,156529,9957],{"class":46},[36,156531,54904],{"class":53},[36,156533,156534,156536,156538],{"class":38,"line":73},[36,156535,156188],{"class":42},[36,156537,150653],{"class":46},[36,156539,48200],{"class":53},[36,156541,156542,156544,156546],{"class":38,"line":79},[36,156543,156188],{"class":42},[36,156545,137549],{"class":46},[36,156547,120437],{"class":53},[36,156549,156550,156552,156555],{"class":38,"line":85},[36,156551,156188],{"class":42},[36,156553,156554],{"class":46},"\u002F=",[36,156556,48200],{"class":53},[19,156558,156559],{},"等价关系：",[26,156561,156563],{"className":28,"code":156562,"language":30,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,156564,156565,156573],{"__ignoreMap":31},[36,156566,156567,156569,156571],{"class":38,"line":39},[36,156568,156188],{"class":42},[36,156570,9957],{"class":46},[36,156572,56176],{"class":53},[36,156574,156575,156577,156579,156582,156584],{"class":38,"line":66},[36,156576,156188],{"class":42},[36,156578,47],{"class":46},[36,156580,156581],{"class":42}," num ",[36,156583,1097],{"class":46},[36,156585,56176],{"class":53},[19,156587,156588,156589,101419,156592,28866],{},"Python 没有 ",[33,156590,156591],{},"num++",[33,156593,156594],{},"num--",[596,156596,156598],{"id":156597},"_273-比较运算符","2.7.3 比较运算符",[19,156600,156601],{},"比较运算结果是布尔值。",[26,156603,156605],{"className":28,"code":156604,"language":30,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,156606,156607,156621,156636,156650],{"__ignoreMap":31},[36,156608,156609,156611,156613,156615,156617,156619],{"class":38,"line":39},[36,156610,30894],{"class":53},[36,156612,345],{"class":42},[36,156614,1062],{"class":53},[36,156616,26703],{"class":46},[36,156618,2628],{"class":53},[36,156620,63],{"class":42},[36,156622,156623,156625,156627,156629,156632,156634],{"class":38,"line":66},[36,156624,30894],{"class":53},[36,156626,345],{"class":42},[36,156628,1062],{"class":53},[36,156630,156631],{"class":46}," >=",[36,156633,2518],{"class":53},[36,156635,63],{"class":42},[36,156637,156638,156640,156642,156644,156646,156648],{"class":38,"line":73},[36,156639,30894],{"class":53},[36,156641,345],{"class":42},[36,156643,1062],{"class":53},[36,156645,101960],{"class":46},[36,156647,2563],{"class":53},[36,156649,63],{"class":42},[36,156651,156652,156654,156656,156658,156661,156663],{"class":38,"line":79},[36,156653,30894],{"class":53},[36,156655,345],{"class":42},[36,156657,1062],{"class":53},[36,156659,156660],{"class":46}," !=",[36,156662,2563],{"class":53},[36,156664,63],{"class":42},[19,156666,156667,156668,156670,156671,28866],{},"注意：判断相等用 ",[33,156669,3429],{},"，赋值用 ",[33,156672,47],{},[26,156674,156676],{"className":28,"code":156675,"language":30,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,156677,156678,156690],{"__ignoreMap":31},[36,156679,156680,156682,156684,156687],{"class":38,"line":39},[36,156681,146947],{"class":42},[36,156683,47],{"class":46},[36,156685,156686],{"class":53}," 18",[36,156688,156689],{"class":69},"       # 赋值\n",[36,156691,156692,156694,156696,156698],{"class":38,"line":66},[36,156693,146947],{"class":42},[36,156695,3429],{"class":46},[36,156697,156686],{"class":53},[36,156699,156700],{"class":69},"      # 判断是否相等\n",[596,156702,156704],{"id":156703},"_274-逻辑运算符","2.7.4 逻辑运算符",[758,156706,156707,156715],{},[761,156708,156709],{},[764,156710,156711,156713],{},[767,156712,156325],{},[767,156714,26350],{},[805,156716,156717,156726,156735],{},[764,156718,156719,156723],{},[810,156720,156721],{},[33,156722,30941],{},[810,156724,156725],{},"并且",[764,156727,156728,156732],{},[810,156729,156730],{},[33,156731,115491],{},[810,156733,156734],{},"或者",[764,156736,156737,156742],{},[810,156738,156739],{},[33,156740,156741],{},"not",[810,156743,156744],{},"取反",[26,156746,156748],{"className":28,"code":156747,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[33,156749,156750,156758,156767,156771,156786,156800],{"__ignoreMap":31},[36,156751,156752,156754,156756],{"class":38,"line":39},[36,156753,146947],{"class":42},[36,156755,47],{"class":46},[36,156757,88542],{"class":53},[36,156759,156760,156763,156765],{"class":38,"line":66},[36,156761,156762],{"class":42},"has_ticket ",[36,156764,47],{"class":46},[36,156766,154000],{"class":53},[36,156768,156769],{"class":38,"line":73},[36,156770,2880],{"emptyLinePlaceholder":553},[36,156772,156773,156775,156777,156779,156781,156783],{"class":38,"line":79},[36,156774,30894],{"class":53},[36,156776,156169],{"class":42},[36,156778,2190],{"class":46},[36,156780,156686],{"class":53},[36,156782,120830],{"class":46},[36,156784,156785],{"class":42}," has_ticket)\n",[36,156787,156788,156790,156792,156794,156796,156798],{"class":38,"line":85},[36,156789,30894],{"class":53},[36,156791,156169],{"class":42},[36,156793,1523],{"class":46},[36,156795,156686],{"class":53},[36,156797,114602],{"class":46},[36,156799,156785],{"class":42},[36,156801,156802,156804,156806,156808],{"class":38,"line":419},[36,156803,30894],{"class":53},[36,156805,345],{"class":42},[36,156807,156741],{"class":46},[36,156809,156785],{"class":42},[14,156811,156813],{"id":156812},"_28-字符串定义","2.8 字符串定义",[19,156815,156816],{},"三种常见写法：",[26,156818,156820],{"className":28,"code":156819,"language":30,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,156821,156822,156832,156841,156851],{"__ignoreMap":31},[36,156823,156824,156827,156829],{"class":38,"line":39},[36,156825,156826],{"class":42},"name1 ",[36,156828,47],{"class":46},[36,156830,156831],{"class":405}," '小明'\n",[36,156833,156834,156837,156839],{"class":38,"line":66},[36,156835,156836],{"class":42},"name2 ",[36,156838,47],{"class":46},[36,156840,149754],{"class":405},[36,156842,156843,156846,156848],{"class":38,"line":73},[36,156844,156845],{"class":42},"text ",[36,156847,47],{"class":46},[36,156849,156850],{"class":405}," \"\"\"这是多行字符串\n",[36,156852,156853],{"class":38,"line":79},[36,156854,156855],{"class":405},"可以换行\"\"\"\n",[19,156857,156858],{},"字符串中包含引号：",[26,156860,156862],{"className":28,"code":156861,"language":30,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,156863,156864,156874,156884],{"__ignoreMap":31},[36,156865,156866,156869,156871],{"class":38,"line":39},[36,156867,156868],{"class":42},"msg ",[36,156870,47],{"class":46},[36,156872,156873],{"class":405}," \"他说:'你好'\"\n",[36,156875,156876,156879,156881],{"class":38,"line":66},[36,156877,156878],{"class":42},"msg2 ",[36,156880,47],{"class":46},[36,156882,156883],{"class":405}," '他说:\"你好\"'\n",[36,156885,156886,156889,156891,156894,156897,156900,156902],{"class":38,"line":73},[36,156887,156888],{"class":42},"msg3 ",[36,156890,47],{"class":46},[36,156892,156893],{"class":405}," \"他说:",[36,156895,156896],{"class":53},"\\\"",[36,156898,156899],{"class":405},"你好",[36,156901,156896],{"class":53},[36,156903,25614],{"class":405},[19,156905,156906],{},"常见转义字符：",[758,156908,156909,156918],{},[761,156910,156911],{},[764,156912,156913,156916],{},[767,156914,156915],{},"写法",[767,156917,101101],{},[805,156919,156920,156930,156939,156949,156958],{},[764,156921,156922,156927],{},[810,156923,156924],{},[33,156925,156926],{},"\\n",[810,156928,156929],{},"换行",[764,156931,156932,156936],{},[810,156933,156934],{},[33,156935,1714],{},[810,156937,156938],{},"制表符",[764,156940,156941,156946],{},[810,156942,156943],{},[33,156944,156945],{},"\\\\",[810,156947,156948],{},"反斜杠",[764,156950,156951,156955],{},[810,156952,156953],{},[33,156954,156896],{},[810,156956,156957],{},"双引号",[764,156959,156960,156965],{},[810,156961,156962],{},[33,156963,156964],{},"\\'",[810,156966,156967],{},"单引号",[14,156969,156971],{"id":156970},"_29-字符串拼接","2.9 字符串拼接",[26,156973,156975],{"className":28,"code":156974,"language":30,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,156976,156977,156985],{"__ignoreMap":31},[36,156978,156979,156981,156983],{"class":38,"line":39},[36,156980,146937],{"class":42},[36,156982,47],{"class":46},[36,156984,149754],{"class":405},[36,156986,156987,156989,156991,156994,156996],{"class":38,"line":66},[36,156988,30894],{"class":53},[36,156990,345],{"class":42},[36,156992,156993],{"class":405},"\"你好，\"",[36,156995,46043],{"class":46},[36,156997,156998],{"class":42}," name)\n",[19,157000,157001],{},"字符串只能和字符串拼接：",[26,157003,157005],{"className":28,"code":157004,"language":30,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,157006,157007,157015],{"__ignoreMap":31},[36,157008,157009,157011,157013],{"class":38,"line":39},[36,157010,146947],{"class":42},[36,157012,47],{"class":46},[36,157014,146952],{"class":53},[36,157016,157017,157019,157021,157023,157025,157027],{"class":38,"line":66},[36,157018,30894],{"class":53},[36,157020,345],{"class":42},[36,157022,146918],{"class":405},[36,157024,46043],{"class":46},[36,157026,74396],{"class":53},[36,157028,157029],{"class":42},"(age))\n",[19,157031,157032],{},"更推荐使用格式化字符串。",[14,157034,157036],{"id":157035},"_210-字符串格式化","2.10 字符串格式化",[596,157038,157040],{"id":157039},"_2101-百分号格式化","2.10.1 百分号格式化",[26,157042,157044],{"className":28,"code":157043,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,157045,157046,157054,157062,157071,157075],{"__ignoreMap":31},[36,157047,157048,157050,157052],{"class":38,"line":39},[36,157049,146937],{"class":42},[36,157051,47],{"class":46},[36,157053,149754],{"class":405},[36,157055,157056,157058,157060],{"class":38,"line":66},[36,157057,146947],{"class":42},[36,157059,47],{"class":46},[36,157061,146952],{"class":53},[36,157063,157064,157066,157068],{"class":38,"line":73},[36,157065,155759],{"class":42},[36,157067,47],{"class":46},[36,157069,157070],{"class":53}," 95.5\n",[36,157072,157073],{"class":38,"line":79},[36,157074,2880],{"emptyLinePlaceholder":553},[36,157076,157077,157079,157081,157084,157087,157090,157093,157096,157099,157101,157103],{"class":38,"line":85},[36,157078,30894],{"class":53},[36,157080,345],{"class":42},[36,157082,157083],{"class":405},"\"姓名:",[36,157085,157086],{"class":53},"%s",[36,157088,157089],{"class":405}," 年龄:",[36,157091,157092],{"class":53},"%d",[36,157094,157095],{"class":405}," 分数:",[36,157097,157098],{"class":53},"%.1f",[36,157100,870],{"class":405},[36,157102,156482],{"class":46},[36,157104,157105],{"class":42}," (name, age, score))\n",[19,157107,157108],{},"常用占位符：",[758,157110,157111,157120],{},[761,157112,157113],{},[764,157114,157115,157118],{},[767,157116,157117],{},"占位符",[767,157119,26350],{},[805,157121,157122,157130,157138],{},[764,157123,157124,157128],{},[810,157125,157126],{},[33,157127,157086],{},[810,157129,155625],{},[764,157131,157132,157136],{},[810,157133,157134],{},[33,157135,157092],{},[810,157137,155603],{},[764,157139,157140,157145],{},[810,157141,157142],{},[33,157143,157144],{},"%f",[810,157146,155614],{},[19,157148,157149],{},"精度控制：",[26,157151,157153],{"className":28,"code":157152,"language":30,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,157154,157155,157164],{"__ignoreMap":31},[36,157156,157157,157159,157161],{"class":38,"line":39},[36,157158,147082],{"class":42},[36,157160,47],{"class":46},[36,157162,157163],{"class":53}," 12.3456\n",[36,157165,157166,157168,157170,157172,157175,157177,157179],{"class":38,"line":66},[36,157167,30894],{"class":53},[36,157169,345],{"class":42},[36,157171,870],{"class":405},[36,157173,157174],{"class":53},"%.2f",[36,157176,870],{"class":405},[36,157178,156482],{"class":46},[36,157180,157181],{"class":42}," price)\n",[596,157183,157185],{"id":157184},"_2102-format方法","2.10.2 format方法",[26,157187,157189],{"className":28,"code":157188,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[33,157190,157191,157199,157207,157211,157230,157250],{"__ignoreMap":31},[36,157192,157193,157195,157197],{"class":38,"line":39},[36,157194,146937],{"class":42},[36,157196,47],{"class":46},[36,157198,149754],{"class":405},[36,157200,157201,157203,157205],{"class":38,"line":66},[36,157202,146947],{"class":42},[36,157204,47],{"class":46},[36,157206,146952],{"class":53},[36,157208,157209],{"class":38,"line":73},[36,157210,2880],{"emptyLinePlaceholder":553},[36,157212,157213,157215,157217,157219,157221,157223,157225,157227],{"class":38,"line":79},[36,157214,30894],{"class":53},[36,157216,345],{"class":42},[36,157218,157083],{"class":405},[36,157220,32936],{"class":53},[36,157222,157089],{"class":405},[36,157224,32936],{"class":53},[36,157226,870],{"class":405},[36,157228,157229],{"class":42},".format(name, age))\n",[36,157231,157232,157234,157236,157238,157241,157243,157246,157248],{"class":38,"line":85},[36,157233,30894],{"class":53},[36,157235,345],{"class":42},[36,157237,157083],{"class":405},[36,157239,157240],{"class":53},"{0}",[36,157242,157089],{"class":405},[36,157244,157245],{"class":53},"{1}",[36,157247,870],{"class":405},[36,157249,157229],{"class":42},[36,157251,157252,157254,157256,157258,157261,157263,157266,157268,157271,157273,157275,157278,157280,157282],{"class":38,"line":419},[36,157253,30894],{"class":53},[36,157255,345],{"class":42},[36,157257,157083],{"class":405},[36,157259,157260],{"class":53},"{name}",[36,157262,157089],{"class":405},[36,157264,157265],{"class":53},"{age}",[36,157267,870],{"class":405},[36,157269,157270],{"class":42},".format(",[36,157272,80287],{"class":5696},[36,157274,47],{"class":46},[36,157276,157277],{"class":42},"name, ",[36,157279,70698],{"class":5696},[36,157281,47],{"class":46},[36,157283,157284],{"class":42},"age))\n",[596,157286,157288],{"id":157287},"_2103-f-string","2.10.3 f-string",[19,157290,157291],{},"推荐写法：",[26,157293,157295],{"className":28,"code":157294,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,157296,157297,157305,157313,157321,157325],{"__ignoreMap":31},[36,157298,157299,157301,157303],{"class":38,"line":39},[36,157300,146937],{"class":42},[36,157302,47],{"class":46},[36,157304,149754],{"class":405},[36,157306,157307,157309,157311],{"class":38,"line":66},[36,157308,146947],{"class":42},[36,157310,47],{"class":46},[36,157312,146952],{"class":53},[36,157314,157315,157317,157319],{"class":38,"line":73},[36,157316,155759],{"class":42},[36,157318,47],{"class":46},[36,157320,157070],{"class":53},[36,157322,157323],{"class":38,"line":79},[36,157324,2880],{"emptyLinePlaceholder":553},[36,157326,157327,157329,157331,157333,157335,157337,157339,157341,157343,157345,157347,157349,157351,157353,157356,157359,157361,157363],{"class":38,"line":85},[36,157328,30894],{"class":53},[36,157330,345],{"class":42},[36,157332,677],{"class":46},[36,157334,157083],{"class":405},[36,157336,1509],{"class":53},[36,157338,80287],{"class":42},[36,157340,1559],{"class":53},[36,157342,157089],{"class":405},[36,157344,1509],{"class":53},[36,157346,70698],{"class":42},[36,157348,1559],{"class":53},[36,157350,157095],{"class":405},[36,157352,1509],{"class":53},[36,157354,157355],{"class":42},"score",[36,157357,157358],{"class":46},":.1f",[36,157360,1559],{"class":53},[36,157362,870],{"class":405},[36,157364,63],{"class":42},[19,157366,157367],{},"表达式也可以放进去：",[26,157369,157371],{"className":28,"code":157370,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,157372,157373,157381,157389],{"__ignoreMap":31},[36,157374,157375,157377,157379],{"class":38,"line":39},[36,157376,147082],{"class":42},[36,157378,47],{"class":46},[36,157380,147087],{"class":53},[36,157382,157383,157385,157387],{"class":38,"line":66},[36,157384,147092],{"class":42},[36,157386,47],{"class":46},[36,157388,54904],{"class":53},[36,157390,157391,157393,157395,157397,157400,157402,157404,157406,157409,157411,157414],{"class":38,"line":73},[36,157392,30894],{"class":53},[36,157394,345],{"class":42},[36,157396,677],{"class":46},[36,157398,157399],{"class":405},"\"总价:",[36,157401,1509],{"class":53},[36,157403,147082],{"class":42},[36,157405,1071],{"class":46},[36,157407,157408],{"class":42}," count",[36,157410,1559],{"class":53},[36,157412,157413],{"class":405},"元\"",[36,157415,63],{"class":42},[14,157417,157419],{"id":157418},"_211-input输入","2.11 input输入",[19,157421,157422,157425],{},[33,157423,157424],{},"input()"," 会暂停程序，等待用户输入。",[26,157427,157429],{"className":28,"code":157428,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,157430,157431,157445],{"__ignoreMap":31},[36,157432,157433,157435,157437,157439,157441,157443],{"class":38,"line":39},[36,157434,146937],{"class":42},[36,157436,47],{"class":46},[36,157438,61082],{"class":53},[36,157440,345],{"class":42},[36,157442,152780],{"class":405},[36,157444,63],{"class":42},[36,157446,157447,157449,157451,157453,157456,157458,157460,157462,157464],{"class":38,"line":66},[36,157448,30894],{"class":53},[36,157450,345],{"class":42},[36,157452,677],{"class":46},[36,157454,157455],{"class":405},"\"你好，",[36,157457,1509],{"class":53},[36,157459,80287],{"class":42},[36,157461,1559],{"class":53},[36,157463,870],{"class":405},[36,157465,63],{"class":42},[19,157467,157468],{},"输入整数：",[26,157470,157472],{"className":28,"code":157471,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,157473,157474,157492],{"__ignoreMap":31},[36,157475,157476,157478,157480,157482,157484,157486,157488,157490],{"class":38,"line":39},[36,157477,146947],{"class":42},[36,157479,47],{"class":46},[36,157481,2862],{"class":53},[36,157483,345],{"class":42},[36,157485,54298],{"class":53},[36,157487,345],{"class":42},[36,157489,152795],{"class":405},[36,157491,370],{"class":42},[36,157493,157494,157496,157498,157500,157503,157505,157507,157509,157512,157514],{"class":38,"line":66},[36,157495,30894],{"class":53},[36,157497,345],{"class":42},[36,157499,677],{"class":46},[36,157501,157502],{"class":405},"\"明年你",[36,157504,1509],{"class":53},[36,157506,146947],{"class":42},[36,157508,1097],{"class":46},[36,157510,157511],{"class":53}," 1}",[36,157513,149805],{"class":405},[36,157515,63],{"class":42},[19,157517,157518],{},"输入小数：",[26,157520,157522],{"className":28,"code":157521,"language":30,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,157523,157524,157543],{"__ignoreMap":31},[36,157525,157526,157528,157530,157532,157534,157536,157538,157541],{"class":38,"line":39},[36,157527,155732],{"class":42},[36,157529,47],{"class":46},[36,157531,110198],{"class":53},[36,157533,345],{"class":42},[36,157535,54298],{"class":53},[36,157537,345],{"class":42},[36,157539,157540],{"class":405},"\"请输入身高:\"",[36,157542,370],{"class":42},[36,157544,157545,157547,157549,157551,157554,157556,157558,157561,157563,157566],{"class":38,"line":66},[36,157546,30894],{"class":53},[36,157548,345],{"class":42},[36,157550,677],{"class":46},[36,157552,157553],{"class":405},"\"身高:",[36,157555,1509],{"class":53},[36,157557,25462],{"class":42},[36,157559,157560],{"class":46},":.2f",[36,157562,1559],{"class":53},[36,157564,157565],{"class":405},"米\"",[36,157567,63],{"class":42},[14,157569,157571],{"id":157570},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157573,123693],{},[579,157575,157576,157579,157582,157585],{},[582,157577,157578],{},"输入商品单价。",[582,157580,157581],{},"输入购买数量。",[582,157583,157584],{},"输入折扣，例如 0.8 表示八折。",[582,157586,157587],{},"输出最终金额，保留两位小数。",[19,157589,10515],{},[26,157591,157593],{"className":28,"code":157592,"language":30,"meta":31,"style":31},"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",[33,157594,157595,157614,157633,157653,157657,157677,157681,157704,157725,157747],{"__ignoreMap":31},[36,157596,157597,157599,157601,157603,157605,157607,157609,157612],{"class":38,"line":39},[36,157598,147082],{"class":42},[36,157600,47],{"class":46},[36,157602,110198],{"class":53},[36,157604,345],{"class":42},[36,157606,54298],{"class":53},[36,157608,345],{"class":42},[36,157610,157611],{"class":405},"\"请输入商品单价:\"",[36,157613,370],{"class":42},[36,157615,157616,157618,157620,157622,157624,157626,157628,157631],{"class":38,"line":66},[36,157617,147092],{"class":42},[36,157619,47],{"class":46},[36,157621,2862],{"class":53},[36,157623,345],{"class":42},[36,157625,54298],{"class":53},[36,157627,345],{"class":42},[36,157629,157630],{"class":405},"\"请输入购买数量:\"",[36,157632,370],{"class":42},[36,157634,157635,157638,157640,157642,157644,157646,157648,157651],{"class":38,"line":73},[36,157636,157637],{"class":42},"discount ",[36,157639,47],{"class":46},[36,157641,110198],{"class":53},[36,157643,345],{"class":42},[36,157645,54298],{"class":53},[36,157647,345],{"class":42},[36,157649,157650],{"class":405},"\"请输入折扣:\"",[36,157652,370],{"class":42},[36,157654,157655],{"class":38,"line":79},[36,157656,2880],{"emptyLinePlaceholder":553},[36,157658,157659,157662,157664,157667,157669,157672,157674],{"class":38,"line":85},[36,157660,157661],{"class":42},"total ",[36,157663,47],{"class":46},[36,157665,157666],{"class":42}," price ",[36,157668,1071],{"class":46},[36,157670,157671],{"class":42}," count ",[36,157673,1071],{"class":46},[36,157675,157676],{"class":42}," discount\n",[36,157678,157679],{"class":38,"line":419},[36,157680,2880],{"emptyLinePlaceholder":553},[36,157682,157683,157685,157687,157689,157692,157694,157696,157698,157700,157702],{"class":38,"line":425},[36,157684,30894],{"class":53},[36,157686,345],{"class":42},[36,157688,677],{"class":46},[36,157690,157691],{"class":405},"\"商品单价:",[36,157693,1509],{"class":53},[36,157695,80292],{"class":42},[36,157697,157560],{"class":46},[36,157699,1559],{"class":53},[36,157701,870],{"class":405},[36,157703,63],{"class":42},[36,157705,157706,157708,157710,157712,157715,157717,157719,157721,157723],{"class":38,"line":431},[36,157707,30894],{"class":53},[36,157709,345],{"class":42},[36,157711,677],{"class":46},[36,157713,157714],{"class":405},"\"购买数量:",[36,157716,1509],{"class":53},[36,157718,84911],{"class":42},[36,157720,1559],{"class":53},[36,157722,870],{"class":405},[36,157724,63],{"class":42},[36,157726,157727,157729,157731,157733,157736,157738,157741,157743,157745],{"class":38,"line":437},[36,157728,30894],{"class":53},[36,157730,345],{"class":42},[36,157732,677],{"class":46},[36,157734,157735],{"class":405},"\"折扣:",[36,157737,1509],{"class":53},[36,157739,157740],{"class":42},"discount",[36,157742,1559],{"class":53},[36,157744,870],{"class":405},[36,157746,63],{"class":42},[36,157748,157749,157751,157753,157755,157758,157760,157763,157765,157767,157769],{"class":38,"line":443},[36,157750,30894],{"class":53},[36,157752,345],{"class":42},[36,157754,677],{"class":46},[36,157756,157757],{"class":405},"\"应付金额:",[36,157759,1509],{"class":53},[36,157761,157762],{"class":42},"total",[36,157764,157560],{"class":46},[36,157766,1559],{"class":53},[36,157768,157413],{"class":405},[36,157770,63],{"class":42},[14,157772,157774],{"id":157773},"_213-易错点","2.13 易错点",[579,157776,157777,157782,157788,157796,157799],{},[582,157778,157779,157781],{},[33,157780,157424],{}," 的结果是字符串，做运算前要转换。",[582,157783,157784,157785,28866],{},"字符串拼接时，数字要先 ",[33,157786,157787],{},"str()",[582,157789,157790,157792,157793,157795],{},[33,157791,47],{}," 是赋值，",[33,157794,3429],{}," 是比较。",[582,157797,157798],{},"Python 没有自增自减运算符。",[582,157800,157801],{},"浮点数计算可能有精度误差：",[26,157803,157805],{"className":28,"code":157804,"language":30,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,157806,157807],{"__ignoreMap":31},[36,157808,157809,157811,157813,157815,157817,157820],{"class":38,"line":39},[36,157810,30894],{"class":53},[36,157812,345],{"class":42},[36,157814,86687],{"class":53},[36,157816,46043],{"class":46},[36,157818,157819],{"class":53}," 0.2",[36,157821,63],{"class":42},[19,157823,157824,157825,157828],{},"金额计算如果要求严格，可以后续学习 ",[33,157826,157827],{},"decimal"," 模块。",[14,157830,157832],{"id":157831},"_214-本章练习","2.14 本章练习",[579,157834,157835,157838,157841,157844,157847],{},[582,157836,157837],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[582,157839,157840],{},"输入圆的半径，计算面积，保留两位小数。",[582,157842,157843],{},"输入工资和奖金，计算总收入。",[582,157845,157846],{},"输入摄氏温度，转换为华氏温度。",[582,157848,157849],{},"写一个 BMI 计算程序：",[26,157851,157854],{"className":157852,"code":157853,"language":5667,"meta":31},[5665],"BMI = 体重kg \u002F 身高m ** 2\n",[33,157855,157853],{"__ignoreMap":31},[539,157857,157858],{},"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":31,"searchDepth":66,"depth":66,"links":157860},[157861,157862,157863,157864,157865,157866,157867,157873,157874,157875,157880,157881,157882,157883],{"id":155422,"depth":66,"text":155423},{"id":155531,"depth":66,"text":155532},{"id":155702,"depth":66,"text":155703},{"id":155779,"depth":66,"text":155780},{"id":51208,"depth":66,"text":51209},{"id":156085,"depth":66,"text":156086},{"id":156311,"depth":66,"text":156312,"children":157868},[157869,157870,157871,157872],{"id":156315,"depth":73,"text":156316},{"id":156509,"depth":73,"text":156510},{"id":156597,"depth":73,"text":156598},{"id":156703,"depth":73,"text":156704},{"id":156812,"depth":66,"text":156813},{"id":156970,"depth":66,"text":156971},{"id":157035,"depth":66,"text":157036,"children":157876},[157877,157878,157879],{"id":157039,"depth":73,"text":157040},{"id":157184,"depth":73,"text":157185},{"id":157287,"depth":73,"text":157288},{"id":157418,"depth":66,"text":157419},{"id":157570,"depth":66,"text":157571},{"id":157773,"depth":66,"text":157774},{"id":157831,"depth":66,"text":157832},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155414,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157890,"title":157891,"body":157892,"description":550,"extension":551,"meta":159528,"navigation":553,"path":159529,"seo":159530,"stem":159531,"__hash__":159532},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157893,"toc":159509},[157894,157897,157901,157904,157919,157922,157950,157954,158004,158006,158022,158025,158051,158054,158058,158125,158128,158144,158148,158151,158269,158272,158279,158328,158334,158338,158341,158454,158457,158461,158465,158468,158518,158522,158525,158575,158579,158582,158620,158624,158627,158673,158676,158711,158715,158720,158723,158769,158771,158838,158842,158848,158959,158968,158972,158974,158985,158987,159153,159157,159159,159173,159175,159389,159393,159412,159429,159432,159478,159482,159506],[10,157895,157891],{"id":157896},"_3-判断语句",[14,157898,157900],{"id":157899},"_31-布尔值","3.1 布尔值",[19,157902,157903],{},"判断语句依赖布尔值：",[26,157905,157907],{"className":28,"code":157906,"language":30,"meta":31,"style":31},"True\nFalse\n",[33,157908,157909,157914],{"__ignoreMap":31},[36,157910,157911],{"class":38,"line":39},[36,157912,157913],{"class":53},"True\n",[36,157915,157916],{"class":38,"line":66},[36,157917,157918],{"class":53},"False\n",[19,157920,157921],{},"比较表达式会产生布尔值：",[26,157923,157925],{"className":28,"code":157924,"language":30,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,157926,157927,157935],{"__ignoreMap":31},[36,157928,157929,157931,157933],{"class":38,"line":39},[36,157930,146947],{"class":42},[36,157932,47],{"class":46},[36,157934,146952],{"class":53},[36,157936,157937,157939,157941,157943,157945,157947],{"class":38,"line":66},[36,157938,30894],{"class":53},[36,157940,156169],{"class":42},[36,157942,2190],{"class":46},[36,157944,156686],{"class":53},[36,157946,46285],{"class":42},[36,157948,157949],{"class":69},"# True\n",[14,157951,157953],{"id":157952},"_32-if基础语法","3.2 if基础语法",[26,157955,157957],{"className":28,"code":157956,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,157958,157959,157977,157981,157993],{"__ignoreMap":31},[36,157960,157961,157963,157965,157967,157969,157971,157973,157975],{"class":38,"line":39},[36,157962,146947],{"class":42},[36,157964,47],{"class":46},[36,157966,2862],{"class":53},[36,157968,345],{"class":42},[36,157970,54298],{"class":53},[36,157972,345],{"class":42},[36,157974,152795],{"class":405},[36,157976,370],{"class":42},[36,157978,157979],{"class":38,"line":66},[36,157980,2880],{"emptyLinePlaceholder":553},[36,157982,157983,157985,157987,157989,157991],{"class":38,"line":73},[36,157984,2011],{"class":46},[36,157986,16187],{"class":42},[36,157988,2190],{"class":46},[36,157990,156686],{"class":53},[36,157992,4219],{"class":42},[36,157994,157995,157997,157999,158002],{"class":38,"line":79},[36,157996,31777],{"class":53},[36,157998,345],{"class":42},[36,158000,158001],{"class":405},"\"可以进入网吧\"",[36,158003,63],{"class":42},[19,158005,9505],{},[579,158007,158008,158013,158016,158019],{},[582,158009,158010,158012],{},[33,158011,2011],{}," 后面是条件表达式。",[582,158014,158015],{},"条件后面必须写冒号。",[582,158017,158018],{},"条件成立时执行缩进代码块。",[582,158020,158021],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158023,158024],{},"错误示例：",[26,158026,158028],{"className":28,"code":158027,"language":30,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,158029,158030,158040],{"__ignoreMap":31},[36,158031,158032,158034,158036,158038],{"class":38,"line":39},[36,158033,2011],{"class":46},[36,158035,16187],{"class":42},[36,158037,2190],{"class":46},[36,158039,146952],{"class":53},[36,158041,158042,158044,158046,158049],{"class":38,"line":66},[36,158043,31777],{"class":53},[36,158045,345],{"class":42},[36,158047,158048],{"class":405},"\"可以进入\"",[36,158050,63],{"class":42},[19,158052,158053],{},"缺少冒号。",[14,158055,158057],{"id":158056},"_33-if-else","3.3 if else",[26,158059,158061],{"className":28,"code":158060,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,158062,158063,158081,158085,158097,158108,158114],{"__ignoreMap":31},[36,158064,158065,158067,158069,158071,158073,158075,158077,158079],{"class":38,"line":39},[36,158066,146947],{"class":42},[36,158068,47],{"class":46},[36,158070,2862],{"class":53},[36,158072,345],{"class":42},[36,158074,54298],{"class":53},[36,158076,345],{"class":42},[36,158078,152795],{"class":405},[36,158080,370],{"class":42},[36,158082,158083],{"class":38,"line":66},[36,158084,2880],{"emptyLinePlaceholder":553},[36,158086,158087,158089,158091,158093,158095],{"class":38,"line":73},[36,158088,2011],{"class":46},[36,158090,16187],{"class":42},[36,158092,2190],{"class":46},[36,158094,156686],{"class":53},[36,158096,4219],{"class":42},[36,158098,158099,158101,158103,158106],{"class":38,"line":79},[36,158100,31777],{"class":53},[36,158102,345],{"class":42},[36,158104,158105],{"class":405},"\"成年人\"",[36,158107,63],{"class":42},[36,158109,158110,158112],{"class":38,"line":85},[36,158111,2181],{"class":46},[36,158113,4219],{"class":42},[36,158115,158116,158118,158120,158123],{"class":38,"line":419},[36,158117,31777],{"class":53},[36,158119,345],{"class":42},[36,158121,158122],{"class":405},"\"未成年人\"",[36,158124,63],{"class":42},[19,158126,158127],{},"执行逻辑：",[579,158129,158130,158136,158141],{},[582,158131,158132,158133,158135],{},"条件成立，执行 ",[33,158134,2011],{}," 代码块。",[582,158137,158138,158139,158135],{},"条件不成立，执行 ",[33,158140,2181],{},[582,158142,158143],{},"两个代码块只会执行其中一个。",[14,158145,158147],{"id":158146},"_34-if-elif-else","3.4 if elif else",[19,158149,158150],{},"多条件判断：",[26,158152,158154],{"className":28,"code":158153,"language":30,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[33,158155,158156,158174,158178,158192,158203,158217,158228,158241,158252,158258],{"__ignoreMap":31},[36,158157,158158,158160,158162,158164,158166,158168,158170,158172],{"class":38,"line":39},[36,158159,155759],{"class":42},[36,158161,47],{"class":46},[36,158163,2862],{"class":53},[36,158165,345],{"class":42},[36,158167,54298],{"class":53},[36,158169,345],{"class":42},[36,158171,152810],{"class":405},[36,158173,370],{"class":42},[36,158175,158176],{"class":38,"line":66},[36,158177,2880],{"emptyLinePlaceholder":553},[36,158179,158180,158182,158185,158187,158190],{"class":38,"line":73},[36,158181,2011],{"class":46},[36,158183,158184],{"class":42}," score ",[36,158186,2190],{"class":46},[36,158188,158189],{"class":53}," 90",[36,158191,4219],{"class":42},[36,158193,158194,158196,158198,158201],{"class":38,"line":79},[36,158195,31777],{"class":53},[36,158197,345],{"class":42},[36,158199,158200],{"class":405},"\"优秀\"",[36,158202,63],{"class":42},[36,158204,158205,158208,158210,158212,158215],{"class":38,"line":85},[36,158206,158207],{"class":46},"elif",[36,158209,158184],{"class":42},[36,158211,2190],{"class":46},[36,158213,158214],{"class":53}," 80",[36,158216,4219],{"class":42},[36,158218,158219,158221,158223,158226],{"class":38,"line":419},[36,158220,31777],{"class":53},[36,158222,345],{"class":42},[36,158224,158225],{"class":405},"\"良好\"",[36,158227,63],{"class":42},[36,158229,158230,158232,158234,158236,158239],{"class":38,"line":425},[36,158231,158207],{"class":46},[36,158233,158184],{"class":42},[36,158235,2190],{"class":46},[36,158237,158238],{"class":53}," 60",[36,158240,4219],{"class":42},[36,158242,158243,158245,158247,158250],{"class":38,"line":431},[36,158244,31777],{"class":53},[36,158246,345],{"class":42},[36,158248,158249],{"class":405},"\"及格\"",[36,158251,63],{"class":42},[36,158253,158254,158256],{"class":38,"line":437},[36,158255,2181],{"class":46},[36,158257,4219],{"class":42},[36,158259,158260,158262,158264,158267],{"class":38,"line":443},[36,158261,31777],{"class":53},[36,158263,345],{"class":42},[36,158265,158266],{"class":405},"\"不及格\"",[36,158268,63],{"class":42},[19,158270,158271],{},"注意判断顺序很重要。",[19,158273,158274,158275,158278],{},"如果把 ",[33,158276,158277],{},"score >= 60"," 放在最前面：",[26,158280,158282],{"className":28,"code":158281,"language":30,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,158283,158284,158296,158306,158318],{"__ignoreMap":31},[36,158285,158286,158288,158290,158292,158294],{"class":38,"line":39},[36,158287,2011],{"class":46},[36,158289,158184],{"class":42},[36,158291,2190],{"class":46},[36,158293,158238],{"class":53},[36,158295,4219],{"class":42},[36,158297,158298,158300,158302,158304],{"class":38,"line":66},[36,158299,31777],{"class":53},[36,158301,345],{"class":42},[36,158303,158249],{"class":405},[36,158305,63],{"class":42},[36,158307,158308,158310,158312,158314,158316],{"class":38,"line":73},[36,158309,158207],{"class":46},[36,158311,158184],{"class":42},[36,158313,2190],{"class":46},[36,158315,158189],{"class":53},[36,158317,4219],{"class":42},[36,158319,158320,158322,158324,158326],{"class":38,"line":79},[36,158321,31777],{"class":53},[36,158323,345],{"class":42},[36,158325,158200],{"class":405},[36,158327,63],{"class":42},[19,158329,158330,158331,158333],{},"成绩 95 会先满足 ",[33,158332,158277],{},"，后面的优秀分支就不会执行。",[14,158335,158337],{"id":158336},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158339,158340],{},"嵌套判断就是在一个判断内部再写判断。",[26,158342,158344],{"className":28,"code":158343,"language":30,"meta":31,"style":31},"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",[33,158345,158346,158364,158379,158383,158395,158409,158419,158426,158437,158443],{"__ignoreMap":31},[36,158347,158348,158350,158352,158354,158356,158358,158360,158362],{"class":38,"line":39},[36,158349,146947],{"class":42},[36,158351,47],{"class":46},[36,158353,2862],{"class":53},[36,158355,345],{"class":42},[36,158357,54298],{"class":53},[36,158359,345],{"class":42},[36,158361,152795],{"class":405},[36,158363,370],{"class":42},[36,158365,158366,158368,158370,158372,158374,158377],{"class":38,"line":66},[36,158367,156762],{"class":42},[36,158369,47],{"class":46},[36,158371,61082],{"class":53},[36,158373,345],{"class":42},[36,158375,158376],{"class":405},"\"是否有票(y\u002Fn):\"",[36,158378,63],{"class":42},[36,158380,158381],{"class":38,"line":73},[36,158382,2880],{"emptyLinePlaceholder":553},[36,158384,158385,158387,158389,158391,158393],{"class":38,"line":79},[36,158386,2011],{"class":46},[36,158388,16187],{"class":42},[36,158390,2190],{"class":46},[36,158392,156686],{"class":53},[36,158394,4219],{"class":42},[36,158396,158397,158399,158402,158404,158407],{"class":38,"line":85},[36,158398,3581],{"class":46},[36,158400,158401],{"class":42}," has_ticket ",[36,158403,3429],{"class":46},[36,158405,158406],{"class":405}," \"y\"",[36,158408,4219],{"class":42},[36,158410,158411,158413,158415,158417],{"class":38,"line":419},[36,158412,32928],{"class":53},[36,158414,345],{"class":42},[36,158416,158048],{"class":405},[36,158418,63],{"class":42},[36,158420,158421,158424],{"class":38,"line":425},[36,158422,158423],{"class":46},"    else",[36,158425,4219],{"class":42},[36,158427,158428,158430,158432,158435],{"class":38,"line":431},[36,158429,32928],{"class":53},[36,158431,345],{"class":42},[36,158433,158434],{"class":405},"\"请先买票\"",[36,158436,63],{"class":42},[36,158438,158439,158441],{"class":38,"line":437},[36,158440,2181],{"class":46},[36,158442,4219],{"class":42},[36,158444,158445,158447,158449,158452],{"class":38,"line":443},[36,158446,31777],{"class":53},[36,158448,345],{"class":42},[36,158450,158451],{"class":405},"\"未成年人禁止进入\"",[36,158453,63],{"class":42},[19,158455,158456],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158458,158460],{"id":158459},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[596,158462,158464],{"id":158463},"_361-and","3.6.1 and",[19,158466,158467],{},"两个条件都成立才成立。",[26,158469,158471],{"className":28,"code":158470,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,158472,158473,158481,158489,158493,158508],{"__ignoreMap":31},[36,158474,158475,158477,158479],{"class":38,"line":39},[36,158476,146947],{"class":42},[36,158478,47],{"class":46},[36,158480,88542],{"class":53},[36,158482,158483,158485,158487],{"class":38,"line":66},[36,158484,156762],{"class":42},[36,158486,47],{"class":46},[36,158488,154000],{"class":53},[36,158490,158491],{"class":38,"line":73},[36,158492,2880],{"emptyLinePlaceholder":553},[36,158494,158495,158497,158499,158501,158503,158505],{"class":38,"line":79},[36,158496,2011],{"class":46},[36,158498,16187],{"class":42},[36,158500,2190],{"class":46},[36,158502,156686],{"class":53},[36,158504,120830],{"class":46},[36,158506,158507],{"class":42}," has_ticket:\n",[36,158509,158510,158512,158514,158516],{"class":38,"line":85},[36,158511,31777],{"class":53},[36,158513,345],{"class":42},[36,158515,158048],{"class":405},[36,158517,63],{"class":42},[596,158519,158521],{"id":158520},"_362-or","3.6.2 or",[19,158523,158524],{},"只要一个条件成立就成立。",[26,158526,158528],{"className":28,"code":158527,"language":30,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,158529,158530,158539,158548,158552,158564],{"__ignoreMap":31},[36,158531,158532,158535,158537],{"class":38,"line":39},[36,158533,158534],{"class":42},"is_vip ",[36,158536,47],{"class":46},[36,158538,126208],{"class":53},[36,158540,158541,158544,158546],{"class":38,"line":66},[36,158542,158543],{"class":42},"coupon ",[36,158545,47],{"class":46},[36,158547,154000],{"class":53},[36,158549,158550],{"class":38,"line":73},[36,158551,2880],{"emptyLinePlaceholder":553},[36,158553,158554,158556,158559,158561],{"class":38,"line":79},[36,158555,2011],{"class":46},[36,158557,158558],{"class":42}," is_vip ",[36,158560,115491],{"class":46},[36,158562,158563],{"class":42}," coupon:\n",[36,158565,158566,158568,158570,158573],{"class":38,"line":85},[36,158567,31777],{"class":53},[36,158569,345],{"class":42},[36,158571,158572],{"class":405},"\"可以享受优惠\"",[36,158574,63],{"class":42},[596,158576,158578],{"id":158577},"_363-not","3.6.3 not",[19,158580,158581],{},"取反。",[26,158583,158585],{"className":28,"code":158584,"language":30,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,158586,158587,158596,158600,158609],{"__ignoreMap":31},[36,158588,158589,158592,158594],{"class":38,"line":39},[36,158590,158591],{"class":42},"is_closed ",[36,158593,47],{"class":46},[36,158595,126208],{"class":53},[36,158597,158598],{"class":38,"line":66},[36,158599,2880],{"emptyLinePlaceholder":553},[36,158601,158602,158604,158606],{"class":38,"line":73},[36,158603,2011],{"class":46},[36,158605,39407],{"class":46},[36,158607,158608],{"class":42}," is_closed:\n",[36,158610,158611,158613,158615,158618],{"class":38,"line":79},[36,158612,31777],{"class":53},[36,158614,345],{"class":42},[36,158616,158617],{"class":405},"\"店铺营业中\"",[36,158619,63],{"class":42},[14,158621,158623],{"id":158622},"_37-链式比较","3.7 链式比较",[19,158625,158626],{},"Python 支持链式比较：",[26,158628,158630],{"className":28,"code":158629,"language":30,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,158631,158632,158641,158645,158662],{"__ignoreMap":31},[36,158633,158634,158636,158638],{"class":38,"line":39},[36,158635,155759],{"class":42},[36,158637,47],{"class":46},[36,158639,158640],{"class":53}," 85\n",[36,158642,158643],{"class":38,"line":66},[36,158644,2880],{"emptyLinePlaceholder":553},[36,158646,158647,158649,158651,158654,158656,158658,158660],{"class":38,"line":73},[36,158648,2011],{"class":46},[36,158650,4573],{"class":53},[36,158652,158653],{"class":46}," \u003C=",[36,158655,158184],{"class":42},[36,158657,2068],{"class":46},[36,158659,6234],{"class":53},[36,158661,4219],{"class":42},[36,158663,158664,158666,158668,158671],{"class":38,"line":79},[36,158665,31777],{"class":53},[36,158667,345],{"class":42},[36,158669,158670],{"class":405},"\"成绩合法\"",[36,158672,63],{"class":42},[19,158674,158675],{},"等价于：",[26,158677,158679],{"className":28,"code":158678,"language":30,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,158680,158681,158701],{"__ignoreMap":31},[36,158682,158683,158685,158687,158689,158691,158693,158695,158697,158699],{"class":38,"line":39},[36,158684,2011],{"class":46},[36,158686,158184],{"class":42},[36,158688,2190],{"class":46},[36,158690,4573],{"class":53},[36,158692,120830],{"class":46},[36,158694,158184],{"class":42},[36,158696,2068],{"class":46},[36,158698,6234],{"class":53},[36,158700,4219],{"class":42},[36,158702,158703,158705,158707,158709],{"class":38,"line":66},[36,158704,31777],{"class":53},[36,158706,345],{"class":42},[36,158708,158670],{"class":405},[36,158710,63],{"class":42},[14,158712,158714],{"id":158713},"_38-真值和假值","3.8 真值和假值",[19,158716,116868,158717,158719],{},[33,158718,2011],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158721,158722],{},"假值：",[26,158724,158726],{"className":28,"code":158725,"language":30,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,158727,158728,158732,158737,158741,158745,158750,158754,158758,158763],{"__ignoreMap":31},[36,158729,158730],{"class":38,"line":39},[36,158731,157918],{"class":53},[36,158733,158734],{"class":38,"line":66},[36,158735,158736],{"class":53},"None\n",[36,158738,158739],{"class":38,"line":73},[36,158740,3565],{"class":53},[36,158742,158743],{"class":38,"line":79},[36,158744,32819],{"class":53},[36,158746,158747],{"class":38,"line":85},[36,158748,158749],{"class":405},"\"\"\n",[36,158751,158752],{"class":38,"line":419},[36,158753,32834],{"class":42},[36,158755,158756],{"class":38,"line":425},[36,158757,2456],{"class":42},[36,158759,158760],{"class":38,"line":431},[36,158761,158762],{"class":42},"{}\n",[36,158764,158765,158767],{"class":38,"line":437},[36,158766,155691],{"class":53},[36,158768,2456],{"class":42},[19,158770,15615],{},[26,158772,158774],{"className":28,"code":158773,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,158775,158776,158790,158794,158801,158821,158827],{"__ignoreMap":31},[36,158777,158778,158780,158782,158784,158786,158788],{"class":38,"line":39},[36,158779,146937],{"class":42},[36,158781,47],{"class":46},[36,158783,61082],{"class":53},[36,158785,345],{"class":42},[36,158787,152780],{"class":405},[36,158789,63],{"class":42},[36,158791,158792],{"class":38,"line":66},[36,158793,2880],{"emptyLinePlaceholder":553},[36,158795,158796,158798],{"class":38,"line":73},[36,158797,2011],{"class":46},[36,158799,158800],{"class":42}," name:\n",[36,158802,158803,158805,158807,158809,158811,158813,158815,158817,158819],{"class":38,"line":79},[36,158804,31777],{"class":53},[36,158806,345],{"class":42},[36,158808,677],{"class":46},[36,158810,157455],{"class":405},[36,158812,1509],{"class":53},[36,158814,80287],{"class":42},[36,158816,1559],{"class":53},[36,158818,870],{"class":405},[36,158820,63],{"class":42},[36,158822,158823,158825],{"class":38,"line":85},[36,158824,2181],{"class":46},[36,158826,4219],{"class":42},[36,158828,158829,158831,158833,158836],{"class":38,"line":419},[36,158830,31777],{"class":53},[36,158832,345],{"class":42},[36,158834,158835],{"class":405},"\"姓名不能为空\"",[36,158837,63],{"class":42},[14,158839,158841],{"id":158840},"_39-match语句","3.9 match语句",[19,158843,158844,158845,158847],{},"Python 3.10 开始支持 ",[33,158846,71742],{},"。它适合处理固定选项。",[26,158849,158851],{"className":28,"code":158850,"language":30,"meta":31,"style":31},"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",[33,158852,158853,158869,158873,158880,158890,158901,158910,158921,158930,158941,158948],{"__ignoreMap":31},[36,158854,158855,158858,158860,158862,158864,158867],{"class":38,"line":39},[36,158856,158857],{"class":42},"command ",[36,158859,47],{"class":46},[36,158861,61082],{"class":53},[36,158863,345],{"class":42},[36,158865,158866],{"class":405},"\"请输入命令:\"",[36,158868,63],{"class":42},[36,158870,158871],{"class":38,"line":66},[36,158872,2880],{"emptyLinePlaceholder":553},[36,158874,158875,158877],{"class":38,"line":73},[36,158876,71742],{"class":46},[36,158878,158879],{"class":42}," command:\n",[36,158881,158882,158885,158888],{"class":38,"line":79},[36,158883,158884],{"class":46},"    case",[36,158886,158887],{"class":405}," \"start\"",[36,158889,4219],{"class":42},[36,158891,158892,158894,158896,158899],{"class":38,"line":85},[36,158893,32928],{"class":53},[36,158895,345],{"class":42},[36,158897,158898],{"class":405},"\"启动\"",[36,158900,63],{"class":42},[36,158902,158903,158905,158908],{"class":38,"line":419},[36,158904,158884],{"class":46},[36,158906,158907],{"class":405}," \"stop\"",[36,158909,4219],{"class":42},[36,158911,158912,158914,158916,158919],{"class":38,"line":425},[36,158913,32928],{"class":53},[36,158915,345],{"class":42},[36,158917,158918],{"class":405},"\"停止\"",[36,158920,63],{"class":42},[36,158922,158923,158925,158928],{"class":38,"line":431},[36,158924,158884],{"class":46},[36,158926,158927],{"class":405}," \"restart\"",[36,158929,4219],{"class":42},[36,158931,158932,158934,158936,158939],{"class":38,"line":437},[36,158933,32928],{"class":53},[36,158935,345],{"class":42},[36,158937,158938],{"class":405},"\"重启\"",[36,158940,63],{"class":42},[36,158942,158943,158945],{"class":38,"line":443},[36,158944,158884],{"class":46},[36,158946,158947],{"class":42}," _:\n",[36,158949,158950,158952,158954,158957],{"class":38,"line":2092},[36,158951,32928],{"class":53},[36,158953,345],{"class":42},[36,158955,158956],{"class":405},"\"未知命令\"",[36,158958,63],{"class":42},[19,158960,158961,158962,158964,158965,158967],{},"入门阶段掌握 ",[33,158963,155059],{}," 更重要，",[33,158966,71742],{}," 可以作为补充。",[14,158969,158971],{"id":158970},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158973,123693],{},[579,158975,158976,158979,158982],{},[582,158977,158978],{},"输入成绩。",[582,158980,158981],{},"判断成绩是否合法。",[582,158983,158984],{},"输出等级。",[19,158986,10515],{},[26,158988,158990],{"className":28,"code":158989,"language":30,"meta":31,"style":31},"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",[33,158991,158992,159010,159014,159032,159043,159055,159066,159078,159089,159102,159113,159125,159136,159142],{"__ignoreMap":31},[36,158993,158994,158996,158998,159000,159002,159004,159006,159008],{"class":38,"line":39},[36,158995,155759],{"class":42},[36,158997,47],{"class":46},[36,158999,110198],{"class":53},[36,159001,345],{"class":42},[36,159003,54298],{"class":53},[36,159005,345],{"class":42},[36,159007,152810],{"class":405},[36,159009,370],{"class":42},[36,159011,159012],{"class":38,"line":66},[36,159013,2880],{"emptyLinePlaceholder":553},[36,159015,159016,159018,159020,159022,159024,159026,159028,159030],{"class":38,"line":73},[36,159017,2011],{"class":46},[36,159019,39407],{"class":46},[36,159021,4573],{"class":53},[36,159023,158653],{"class":46},[36,159025,158184],{"class":42},[36,159027,2068],{"class":46},[36,159029,6234],{"class":53},[36,159031,4219],{"class":42},[36,159033,159034,159036,159038,159041],{"class":38,"line":79},[36,159035,31777],{"class":53},[36,159037,345],{"class":42},[36,159039,159040],{"class":405},"\"成绩不合法\"",[36,159042,63],{"class":42},[36,159044,159045,159047,159049,159051,159053],{"class":38,"line":85},[36,159046,158207],{"class":46},[36,159048,158184],{"class":42},[36,159050,2190],{"class":46},[36,159052,158189],{"class":53},[36,159054,4219],{"class":42},[36,159056,159057,159059,159061,159064],{"class":38,"line":419},[36,159058,31777],{"class":53},[36,159060,345],{"class":42},[36,159062,159063],{"class":405},"\"等级:A\"",[36,159065,63],{"class":42},[36,159067,159068,159070,159072,159074,159076],{"class":38,"line":425},[36,159069,158207],{"class":46},[36,159071,158184],{"class":42},[36,159073,2190],{"class":46},[36,159075,158214],{"class":53},[36,159077,4219],{"class":42},[36,159079,159080,159082,159084,159087],{"class":38,"line":431},[36,159081,31777],{"class":53},[36,159083,345],{"class":42},[36,159085,159086],{"class":405},"\"等级:B\"",[36,159088,63],{"class":42},[36,159090,159091,159093,159095,159097,159100],{"class":38,"line":437},[36,159092,158207],{"class":46},[36,159094,158184],{"class":42},[36,159096,2190],{"class":46},[36,159098,159099],{"class":53}," 70",[36,159101,4219],{"class":42},[36,159103,159104,159106,159108,159111],{"class":38,"line":443},[36,159105,31777],{"class":53},[36,159107,345],{"class":42},[36,159109,159110],{"class":405},"\"等级:C\"",[36,159112,63],{"class":42},[36,159114,159115,159117,159119,159121,159123],{"class":38,"line":2092},[36,159116,158207],{"class":46},[36,159118,158184],{"class":42},[36,159120,2190],{"class":46},[36,159122,158238],{"class":53},[36,159124,4219],{"class":42},[36,159126,159127,159129,159131,159134],{"class":38,"line":2097},[36,159128,31777],{"class":53},[36,159130,345],{"class":42},[36,159132,159133],{"class":405},"\"等级:D\"",[36,159135,63],{"class":42},[36,159137,159138,159140],{"class":38,"line":2103},[36,159139,2181],{"class":46},[36,159141,4219],{"class":42},[36,159143,159144,159146,159148,159151],{"class":38,"line":2108},[36,159145,31777],{"class":53},[36,159147,345],{"class":42},[36,159149,159150],{"class":405},"\"等级:E\"",[36,159152,63],{"class":42},[14,159154,159156],{"id":159155},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159158,123693],{},[579,159160,159161,159164,159167,159170],{},[582,159162,159163],{},"输入消费金额。",[582,159165,159166],{},"输入会员等级，普通、银卡、金卡。",[582,159168,159169],{},"普通不打折，银卡 9 折，金卡 8 折。",[582,159171,159172],{},"满 500 再减 50。",[19,159174,10515],{},[26,159176,159178],{"className":28,"code":159177,"language":30,"meta":31,"style":31},"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",[33,159179,159180,159200,159216,159220,159228,159232,159246,159256,159269,159278,159291,159299,159305,159316,159320,159334,159338,159352,159362,159366],{"__ignoreMap":31},[36,159181,159182,159185,159187,159189,159191,159193,159195,159198],{"class":38,"line":39},[36,159183,159184],{"class":42},"amount ",[36,159186,47],{"class":46},[36,159188,110198],{"class":53},[36,159190,345],{"class":42},[36,159192,54298],{"class":53},[36,159194,345],{"class":42},[36,159196,159197],{"class":405},"\"请输入消费金额:\"",[36,159199,370],{"class":42},[36,159201,159202,159205,159207,159209,159211,159214],{"class":38,"line":66},[36,159203,159204],{"class":42},"level ",[36,159206,47],{"class":46},[36,159208,61082],{"class":53},[36,159210,345],{"class":42},[36,159212,159213],{"class":405},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,159215,63],{"class":42},[36,159217,159218],{"class":38,"line":73},[36,159219,2880],{"emptyLinePlaceholder":553},[36,159221,159222,159224,159226],{"class":38,"line":79},[36,159223,157637],{"class":42},[36,159225,47],{"class":46},[36,159227,56176],{"class":53},[36,159229,159230],{"class":38,"line":85},[36,159231,2880],{"emptyLinePlaceholder":553},[36,159233,159234,159236,159239,159241,159244],{"class":38,"line":419},[36,159235,2011],{"class":46},[36,159237,159238],{"class":42}," level ",[36,159240,3429],{"class":46},[36,159242,159243],{"class":405}," \"银卡\"",[36,159245,4219],{"class":42},[36,159247,159248,159251,159253],{"class":38,"line":425},[36,159249,159250],{"class":42},"    discount ",[36,159252,47],{"class":46},[36,159254,159255],{"class":53}," 0.9\n",[36,159257,159258,159260,159262,159264,159267],{"class":38,"line":431},[36,159259,158207],{"class":46},[36,159261,159238],{"class":42},[36,159263,3429],{"class":46},[36,159265,159266],{"class":405}," \"金卡\"",[36,159268,4219],{"class":42},[36,159270,159271,159273,159275],{"class":38,"line":437},[36,159272,159250],{"class":42},[36,159274,47],{"class":46},[36,159276,159277],{"class":53}," 0.8\n",[36,159279,159280,159282,159284,159286,159289],{"class":38,"line":443},[36,159281,158207],{"class":46},[36,159283,159238],{"class":42},[36,159285,3429],{"class":46},[36,159287,159288],{"class":405}," \"普通\"",[36,159290,4219],{"class":42},[36,159292,159293,159295,159297],{"class":38,"line":2092},[36,159294,159250],{"class":42},[36,159296,47],{"class":46},[36,159298,56176],{"class":53},[36,159300,159301,159303],{"class":38,"line":2097},[36,159302,2181],{"class":46},[36,159304,4219],{"class":42},[36,159306,159307,159309,159311,159314],{"class":38,"line":2103},[36,159308,31777],{"class":53},[36,159310,345],{"class":42},[36,159312,159313],{"class":405},"\"会员等级输入错误，按普通会员计算\"",[36,159315,63],{"class":42},[36,159317,159318],{"class":38,"line":2108},[36,159319,2880],{"emptyLinePlaceholder":553},[36,159321,159322,159325,159327,159330,159332],{"class":38,"line":2122},[36,159323,159324],{"class":42},"pay ",[36,159326,47],{"class":46},[36,159328,159329],{"class":42}," amount ",[36,159331,1071],{"class":46},[36,159333,157676],{"class":42},[36,159335,159336],{"class":38,"line":2127},[36,159337,2880],{"emptyLinePlaceholder":553},[36,159339,159340,159342,159345,159347,159350],{"class":38,"line":2133},[36,159341,2011],{"class":46},[36,159343,159344],{"class":42}," pay ",[36,159346,2190],{"class":46},[36,159348,159349],{"class":53}," 500",[36,159351,4219],{"class":42},[36,159353,159354,159357,159359],{"class":38,"line":2154},[36,159355,159356],{"class":42},"    pay ",[36,159358,150653],{"class":46},[36,159360,159361],{"class":53}," 50\n",[36,159363,159364],{"class":38,"line":2159},[36,159365,2880],{"emptyLinePlaceholder":553},[36,159367,159368,159370,159372,159374,159376,159378,159381,159383,159385,159387],{"class":38,"line":2173},[36,159369,30894],{"class":53},[36,159371,345],{"class":42},[36,159373,677],{"class":46},[36,159375,157757],{"class":405},[36,159377,1509],{"class":53},[36,159379,159380],{"class":42},"pay",[36,159382,157560],{"class":46},[36,159384,1559],{"class":53},[36,159386,157413],{"class":405},[36,159388,63],{"class":42},[14,159390,159392],{"id":159391},"_312-易错点","3.12 易错点",[579,159394,159395,159398,159401,159404,159409],{},[582,159396,159397],{},"冒号不能漏。",[582,159399,159400],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[582,159402,159403],{},"多分支判断要注意顺序。",[582,159405,159406,159407,28866],{},"判断相等用 ",[33,159408,3429],{},[582,159410,159411],{},"字符串比较区分大小写：",[26,159413,159415],{"className":28,"code":159414,"language":30,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,159416,159417],{"__ignoreMap":31},[36,159418,159419,159422,159424,159426],{"class":38,"line":39},[36,159420,159421],{"class":405},"\"Y\"",[36,159423,101960],{"class":46},[36,159425,158406],{"class":405},[36,159427,159428],{"class":69},"  # False\n",[19,159430,159431],{},"可转换后再判断：",[26,159433,159435],{"className":28,"code":159434,"language":30,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,159436,159437,159454,159467],{"__ignoreMap":31},[36,159438,159439,159442,159444,159446,159448,159451],{"class":38,"line":39},[36,159440,159441],{"class":42},"answer ",[36,159443,47],{"class":46},[36,159445,61082],{"class":53},[36,159447,345],{"class":42},[36,159449,159450],{"class":405},"\"是否继续(y\u002Fn):\"",[36,159452,159453],{"class":42},").lower()\n",[36,159455,159456,159458,159461,159463,159465],{"class":38,"line":66},[36,159457,2011],{"class":46},[36,159459,159460],{"class":42}," answer ",[36,159462,3429],{"class":46},[36,159464,158406],{"class":405},[36,159466,4219],{"class":42},[36,159468,159469,159471,159473,159476],{"class":38,"line":73},[36,159470,31777],{"class":53},[36,159472,345],{"class":42},[36,159474,159475],{"class":405},"\"继续\"",[36,159477,63],{"class":42},[14,159479,159481],{"id":159480},"_313-本章练习","3.13 本章练习",[579,159483,159484,159487,159490,159493,159503],{},[582,159485,159486],{},"输入年龄，判断是否成年。",[582,159488,159489],{},"输入年份，判断是否为闰年。",[582,159491,159492],{},"输入三个数字，输出最大值。",[582,159494,159495,159496,159499,159500,159502],{},"写登录判断：用户名是 ",[33,159497,159498],{},"admin"," 且密码是 ",[33,159501,15564],{}," 才登录成功。",[582,159504,159505],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[539,159507,159508],{},"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":31,"searchDepth":66,"depth":66,"links":159510},[159511,159512,159513,159514,159515,159516,159521,159522,159523,159524,159525,159526,159527],{"id":157899,"depth":66,"text":157900},{"id":157952,"depth":66,"text":157953},{"id":158056,"depth":66,"text":158057},{"id":158146,"depth":66,"text":158147},{"id":158336,"depth":66,"text":158337},{"id":158459,"depth":66,"text":158460,"children":159517},[159518,159519,159520],{"id":158463,"depth":73,"text":158464},{"id":158520,"depth":73,"text":158521},{"id":158577,"depth":73,"text":158578},{"id":158622,"depth":66,"text":158623},{"id":158713,"depth":66,"text":158714},{"id":158840,"depth":66,"text":158841},{"id":158970,"depth":66,"text":158971},{"id":159155,"depth":66,"text":159156},{"id":159391,"depth":66,"text":159392},{"id":159480,"depth":66,"text":159481},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157891,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159534,"title":159535,"body":159536,"description":550,"extension":551,"meta":161305,"navigation":553,"path":161306,"seo":161307,"stem":161308,"__hash__":161309},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159537,"toc":161285},[159538,159541,159545,159551,159554,159571,159575,159577,159594,159596,159641,159643,159660,159664,159667,159733,159736,159754,159758,159919,159928,159932,159936,159941,159988,159990,159996,160000,160005,160052,160054,160060,160064,160069,160105,160108,160155,160159,160165,160223,160228,160259,160264,160268,160323,160326,160398,160401,160460,160464,160467,160542,160545,160549,160655,160658,160684,160688,160700,160769,160772,160864,160868,160870,160881,160883,161013,161017,161219,161227,161231,161261,161265,161282],[10,159539,159535],{"id":159540},"_4-循环语句",[14,159542,159544],{"id":159543},"_41-为什么需要循环","4.1 为什么需要循环",[19,159546,159547,159548,159550],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,159549,146873],{},"，而应该用循环。",[19,159552,159553],{},"循环适合处理重复任务：",[579,159555,159556,159559,159562,159565,159568],{},[582,159557,159558],{},"重复输出。",[582,159560,159561],{},"重复输入。",[582,159563,159564],{},"遍历数据。",[582,159566,159567],{},"持续执行菜单。",[582,159569,159570],{},"批量处理文件或数据。",[14,159572,159574],{"id":159573},"_42-while循环","4.2 while循环",[19,159576,5661],{},[26,159578,159580],{"className":28,"code":159579,"language":30,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,159581,159582,159589],{"__ignoreMap":31},[36,159583,159584,159586],{"class":38,"line":39},[36,159585,109064],{"class":46},[36,159587,159588],{"class":42}," 条件:\n",[36,159590,159591],{"class":38,"line":66},[36,159592,159593],{"class":42},"    循环体\n",[19,159595,15615],{},[26,159597,159599],{"className":28,"code":159598,"language":30,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,159600,159601,159609,159613,159625,159632],{"__ignoreMap":31},[36,159602,159603,159605,159607],{"class":38,"line":39},[36,159604,100549],{"class":42},[36,159606,47],{"class":46},[36,159608,56176],{"class":53},[36,159610,159611],{"class":38,"line":66},[36,159612,2880],{"emptyLinePlaceholder":553},[36,159614,159615,159617,159619,159621,159623],{"class":38,"line":73},[36,159616,109064],{"class":46},[36,159618,9918],{"class":42},[36,159620,2068],{"class":46},[36,159622,2628],{"class":53},[36,159624,4219],{"class":42},[36,159626,159627,159629],{"class":38,"line":79},[36,159628,31777],{"class":53},[36,159630,159631],{"class":42},"(i)\n",[36,159633,159634,159637,159639],{"class":38,"line":85},[36,159635,159636],{"class":42},"    i ",[36,159638,9957],{"class":46},[36,159640,56176],{"class":53},[19,159642,81406],{},[579,159644,159645,159651,159654,159657],{},[582,159646,159647,159648,28866],{},"判断条件 ",[33,159649,159650],{},"i \u003C= 5",[582,159652,159653],{},"条件成立，执行循环体。",[582,159655,159656],{},"执行完后回到条件判断。",[582,159658,159659],{},"条件不成立，退出循环。",[14,159661,159663],{"id":159662},"_43-while累加","4.3 while累加",[19,159665,159666],{},"计算 1 到 100 的和：",[26,159668,159670],{"className":28,"code":159669,"language":30,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[33,159671,159672,159680,159688,159692,159704,159714,159722,159726],{"__ignoreMap":31},[36,159673,159674,159676,159678],{"class":38,"line":39},[36,159675,100549],{"class":42},[36,159677,47],{"class":46},[36,159679,56176],{"class":53},[36,159681,159682,159684,159686],{"class":38,"line":66},[36,159683,157661],{"class":42},[36,159685,47],{"class":46},[36,159687,47810],{"class":53},[36,159689,159690],{"class":38,"line":73},[36,159691,2880],{"emptyLinePlaceholder":553},[36,159693,159694,159696,159698,159700,159702],{"class":38,"line":79},[36,159695,109064],{"class":46},[36,159697,9918],{"class":42},[36,159699,2068],{"class":46},[36,159701,6234],{"class":53},[36,159703,4219],{"class":42},[36,159705,159706,159709,159711],{"class":38,"line":85},[36,159707,159708],{"class":42},"    total ",[36,159710,9957],{"class":46},[36,159712,159713],{"class":42}," i\n",[36,159715,159716,159718,159720],{"class":38,"line":419},[36,159717,159636],{"class":42},[36,159719,9957],{"class":46},[36,159721,56176],{"class":53},[36,159723,159724],{"class":38,"line":425},[36,159725,2880],{"emptyLinePlaceholder":553},[36,159727,159728,159730],{"class":38,"line":431},[36,159729,30894],{"class":53},[36,159731,159732],{"class":42},"(total)\n",[19,159734,159735],{},"核心思想：",[579,159737,159738,159743,159748],{},[582,159739,159740,159742],{},[33,159741,1057],{}," 控制循环次数。",[582,159744,159745,159747],{},[33,159746,157762],{}," 保存累加结果。",[582,159749,159750,159751,159753],{},"每轮循环都要更新 ",[33,159752,1057],{},"，否则可能死循环。",[14,159755,159757],{"id":159756},"_44-while猜数字","4.4 while猜数字",[26,159759,159761],{"className":28,"code":159760,"language":30,"meta":31,"style":31},"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",[33,159762,159763,159769,159773,159790,159798,159802,159810,159830,159839,159843,159855,159866,159876,159887,159893,159915],{"__ignoreMap":31},[36,159764,159765,159767],{"class":38,"line":39},[36,159766,30871],{"class":46},[36,159768,45805],{"class":42},[36,159770,159771],{"class":38,"line":66},[36,159772,2880],{"emptyLinePlaceholder":553},[36,159774,159775,159777,159779,159782,159784,159786,159788],{"class":38,"line":73},[36,159776,159441],{"class":42},[36,159778,47],{"class":46},[36,159780,159781],{"class":42}," random.randint(",[36,159783,54],{"class":53},[36,159785,12915],{"class":42},[36,159787,930],{"class":53},[36,159789,63],{"class":42},[36,159791,159792,159794,159796],{"class":38,"line":79},[36,159793,147092],{"class":42},[36,159795,47],{"class":46},[36,159797,47810],{"class":53},[36,159799,159800],{"class":38,"line":85},[36,159801,2880],{"emptyLinePlaceholder":553},[36,159803,159804,159806,159808],{"class":38,"line":419},[36,159805,109064],{"class":46},[36,159807,95764],{"class":53},[36,159809,4219],{"class":42},[36,159811,159812,159815,159817,159819,159821,159823,159825,159828],{"class":38,"line":425},[36,159813,159814],{"class":42},"    guess ",[36,159816,47],{"class":46},[36,159818,2862],{"class":53},[36,159820,345],{"class":42},[36,159822,54298],{"class":53},[36,159824,345],{"class":42},[36,159826,159827],{"class":405},"\"请输入1到100之间的数字:\"",[36,159829,370],{"class":42},[36,159831,159832,159835,159837],{"class":38,"line":431},[36,159833,159834],{"class":42},"    count ",[36,159836,9957],{"class":46},[36,159838,56176],{"class":53},[36,159840,159841],{"class":38,"line":437},[36,159842,2880],{"emptyLinePlaceholder":553},[36,159844,159845,159847,159850,159852],{"class":38,"line":443},[36,159846,3581],{"class":46},[36,159848,159849],{"class":42}," guess ",[36,159851,1573],{"class":46},[36,159853,159854],{"class":42}," answer:\n",[36,159856,159857,159859,159861,159864],{"class":38,"line":2092},[36,159858,32928],{"class":53},[36,159860,345],{"class":42},[36,159862,159863],{"class":405},"\"猜大了\"",[36,159865,63],{"class":42},[36,159867,159868,159870,159872,159874],{"class":38,"line":2097},[36,159869,39770],{"class":46},[36,159871,159849],{"class":42},[36,159873,1523],{"class":46},[36,159875,159854],{"class":42},[36,159877,159878,159880,159882,159885],{"class":38,"line":2103},[36,159879,32928],{"class":53},[36,159881,345],{"class":42},[36,159883,159884],{"class":405},"\"猜小了\"",[36,159886,63],{"class":42},[36,159888,159889,159891],{"class":38,"line":2108},[36,159890,158423],{"class":46},[36,159892,4219],{"class":42},[36,159894,159895,159897,159899,159901,159904,159906,159908,159910,159913],{"class":38,"line":2122},[36,159896,32928],{"class":53},[36,159898,345],{"class":42},[36,159900,677],{"class":46},[36,159902,159903],{"class":405},"\"猜对了，一共猜了",[36,159905,1509],{"class":53},[36,159907,84911],{"class":42},[36,159909,1559],{"class":53},[36,159911,159912],{"class":405},"次\"",[36,159914,63],{"class":42},[36,159916,159917],{"class":38,"line":2127},[36,159918,32104],{"class":46},[19,159920,159921,159924,159925,159927],{},[33,159922,159923],{},"while True"," 表示无限循环，通常配合 ",[33,159926,2533],{}," 使用。",[14,159929,159931],{"id":159930},"_45-break和continue","4.5 break和continue",[596,159933,159935],{"id":159934},"_451-break","4.5.1 break",[19,159937,159938,159940],{},[33,159939,2533],{}," 直接结束整个循环。",[26,159942,159944],{"className":28,"code":159943,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,159945,159946,159966,159978,159982],{"__ignoreMap":31},[36,159947,159948,159950,159952,159954,159956,159958,159960,159962,159964],{"class":38,"line":39},[36,159949,3505],{"class":46},[36,159951,9918],{"class":42},[36,159953,26524],{"class":46},[36,159955,32920],{"class":53},[36,159957,345],{"class":42},[36,159959,54],{"class":53},[36,159961,12915],{"class":42},[36,159963,101],{"class":53},[36,159965,31264],{"class":42},[36,159967,159968,159970,159972,159974,159976],{"class":38,"line":66},[36,159969,3581],{"class":46},[36,159971,9918],{"class":42},[36,159973,3429],{"class":46},[36,159975,78547],{"class":53},[36,159977,4219],{"class":42},[36,159979,159980],{"class":38,"line":73},[36,159981,32104],{"class":46},[36,159983,159984,159986],{"class":38,"line":79},[36,159985,31777],{"class":53},[36,159987,159631],{"class":42},[19,159989,146858],{},[26,159991,159994],{"className":159992,"code":159993,"language":5667,"meta":31},[5665],"1\n2\n",[33,159995,159993],{"__ignoreMap":31},[596,159997,159999],{"id":159998},"_452-continue","4.5.2 continue",[19,160001,160002,160004],{},[33,160003,155073],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,160006,160008],{"className":28,"code":160007,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,160009,160010,160030,160042,160046],{"__ignoreMap":31},[36,160011,160012,160014,160016,160018,160020,160022,160024,160026,160028],{"class":38,"line":39},[36,160013,3505],{"class":46},[36,160015,9918],{"class":42},[36,160017,26524],{"class":46},[36,160019,32920],{"class":53},[36,160021,345],{"class":42},[36,160023,54],{"class":53},[36,160025,12915],{"class":42},[36,160027,101],{"class":53},[36,160029,31264],{"class":42},[36,160031,160032,160034,160036,160038,160040],{"class":38,"line":66},[36,160033,3581],{"class":46},[36,160035,9918],{"class":42},[36,160037,3429],{"class":46},[36,160039,78547],{"class":53},[36,160041,4219],{"class":42},[36,160043,160044],{"class":38,"line":73},[36,160045,148913],{"class":46},[36,160047,160048,160050],{"class":38,"line":79},[36,160049,31777],{"class":53},[36,160051,159631],{"class":42},[19,160053,146858],{},[26,160055,160058],{"className":160056,"code":160057,"language":5667,"meta":31},[5665],"1\n2\n4\n5\n",[33,160059,160057],{"__ignoreMap":31},[14,160061,160063],{"id":160062},"_46-for循环","4.6 for循环",[19,160065,160066,160068],{},[33,160067,3505],{}," 常用于遍历序列。",[26,160070,160072],{"className":28,"code":160071,"language":30,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,160073,160074,160083,160087,160098],{"__ignoreMap":31},[36,160075,160076,160078,160080],{"class":38,"line":39},[36,160077,146937],{"class":42},[36,160079,47],{"class":46},[36,160081,160082],{"class":405}," \"python\"\n",[36,160084,160085],{"class":38,"line":66},[36,160086,2880],{"emptyLinePlaceholder":553},[36,160088,160089,160091,160094,160096],{"class":38,"line":73},[36,160090,3505],{"class":46},[36,160092,160093],{"class":42}," ch ",[36,160095,26524],{"class":46},[36,160097,158800],{"class":42},[36,160099,160100,160102],{"class":38,"line":79},[36,160101,31777],{"class":53},[36,160103,160104],{"class":42},"(ch)\n",[19,160106,160107],{},"遍历列表：",[26,160109,160111],{"className":28,"code":160110,"language":30,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,160112,160113,160135,160139,160149],{"__ignoreMap":31},[36,160114,160115,160118,160120,160122,160124,160126,160128,160130,160133],{"class":38,"line":39},[36,160116,160117],{"class":42},"students ",[36,160119,47],{"class":46},[36,160121,52703],{"class":42},[36,160123,150289],{"class":405},[36,160125,12915],{"class":42},[36,160127,151337],{"class":405},[36,160129,12915],{"class":42},[36,160131,160132],{"class":405},"\"小刚\"",[36,160134,33723],{"class":42},[36,160136,160137],{"class":38,"line":66},[36,160138,2880],{"emptyLinePlaceholder":553},[36,160140,160141,160143,160145,160147],{"class":38,"line":73},[36,160142,3505],{"class":46},[36,160144,152538],{"class":42},[36,160146,26524],{"class":46},[36,160148,152543],{"class":42},[36,160150,160151,160153],{"class":38,"line":79},[36,160152,31777],{"class":53},[36,160154,150443],{"class":42},[14,160156,160158],{"id":160157},"_47-range函数","4.7 range函数",[19,160160,160161,160164],{},[33,160162,160163],{},"range()"," 用于生成整数序列。",[26,160166,160168],{"className":28,"code":160167,"language":30,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[33,160169,160170,160184,160202],{"__ignoreMap":31},[36,160171,160172,160174,160176,160178,160181],{"class":38,"line":39},[36,160173,33893],{"class":53},[36,160175,345],{"class":42},[36,160177,938],{"class":53},[36,160179,160180],{"class":42},")          ",[36,160182,160183],{"class":69},"# 0,1,2,3,4\n",[36,160185,160186,160188,160190,160192,160194,160196,160199],{"class":38,"line":66},[36,160187,33893],{"class":53},[36,160189,345],{"class":42},[36,160191,54],{"class":53},[36,160193,12915],{"class":42},[36,160195,938],{"class":53},[36,160197,160198],{"class":42},")       ",[36,160200,160201],{"class":69},"# 1,2,3,4\n",[36,160203,160204,160206,160208,160210,160212,160214,160216,160218,160220],{"class":38,"line":73},[36,160205,33893],{"class":53},[36,160207,345],{"class":42},[36,160209,54],{"class":53},[36,160211,12915],{"class":42},[36,160213,1062],{"class":53},[36,160215,12915],{"class":42},[36,160217,96],{"class":53},[36,160219,156062],{"class":42},[36,160221,160222],{"class":69},"# 1,3,5,7,9\n",[19,160224,160225,160226,25099],{},"配合 ",[33,160227,3505],{},[26,160229,160231],{"className":28,"code":160230,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,160232,160233,160253],{"__ignoreMap":31},[36,160234,160235,160237,160239,160241,160243,160245,160247,160249,160251],{"class":38,"line":39},[36,160236,3505],{"class":46},[36,160238,9918],{"class":42},[36,160240,26524],{"class":46},[36,160242,32920],{"class":53},[36,160244,345],{"class":42},[36,160246,54],{"class":53},[36,160248,12915],{"class":42},[36,160250,101],{"class":53},[36,160252,31264],{"class":42},[36,160254,160255,160257],{"class":38,"line":66},[36,160256,31777],{"class":53},[36,160258,159631],{"class":42},[19,160260,9505,160261,160263],{},[33,160262,33893],{}," 的结束值不包含在内。",[14,160265,160267],{"id":160266},"_48-for循环求和","4.8 for循环求和",[26,160269,160271],{"className":28,"code":160270,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,160272,160273,160281,160285,160305,160313,160317],{"__ignoreMap":31},[36,160274,160275,160277,160279],{"class":38,"line":39},[36,160276,157661],{"class":42},[36,160278,47],{"class":46},[36,160280,47810],{"class":53},[36,160282,160283],{"class":38,"line":66},[36,160284,2880],{"emptyLinePlaceholder":553},[36,160286,160287,160289,160291,160293,160295,160297,160299,160301,160303],{"class":38,"line":73},[36,160288,3505],{"class":46},[36,160290,9918],{"class":42},[36,160292,26524],{"class":46},[36,160294,32920],{"class":53},[36,160296,345],{"class":42},[36,160298,54],{"class":53},[36,160300,12915],{"class":42},[36,160302,956],{"class":53},[36,160304,31264],{"class":42},[36,160306,160307,160309,160311],{"class":38,"line":79},[36,160308,159708],{"class":42},[36,160310,9957],{"class":46},[36,160312,159713],{"class":42},[36,160314,160315],{"class":38,"line":85},[36,160316,2880],{"emptyLinePlaceholder":553},[36,160318,160319,160321],{"class":38,"line":419},[36,160320,30894],{"class":53},[36,160322,159732],{"class":42},[19,160324,160325],{},"求偶数和：",[26,160327,160329],{"className":28,"code":160328,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[33,160330,160331,160339,160343,160363,160379,160388,160392],{"__ignoreMap":31},[36,160332,160333,160335,160337],{"class":38,"line":39},[36,160334,157661],{"class":42},[36,160336,47],{"class":46},[36,160338,47810],{"class":53},[36,160340,160341],{"class":38,"line":66},[36,160342,2880],{"emptyLinePlaceholder":553},[36,160344,160345,160347,160349,160351,160353,160355,160357,160359,160361],{"class":38,"line":73},[36,160346,3505],{"class":46},[36,160348,9918],{"class":42},[36,160350,26524],{"class":46},[36,160352,32920],{"class":53},[36,160354,345],{"class":42},[36,160356,54],{"class":53},[36,160358,12915],{"class":42},[36,160360,956],{"class":53},[36,160362,31264],{"class":42},[36,160364,160365,160367,160369,160371,160373,160375,160377],{"class":38,"line":79},[36,160366,3581],{"class":46},[36,160368,9918],{"class":42},[36,160370,947],{"class":46},[36,160372,15235],{"class":53},[36,160374,101960],{"class":46},[36,160376,4573],{"class":53},[36,160378,4219],{"class":42},[36,160380,160381,160384,160386],{"class":38,"line":85},[36,160382,160383],{"class":42},"        total ",[36,160385,9957],{"class":46},[36,160387,159713],{"class":42},[36,160389,160390],{"class":38,"line":419},[36,160391,2880],{"emptyLinePlaceholder":553},[36,160393,160394,160396],{"class":38,"line":425},[36,160395,30894],{"class":53},[36,160397,159732],{"class":42},[19,160399,160400],{},"也可以：",[26,160402,160404],{"className":28,"code":160403,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,160405,160406,160414,160418,160442,160450,160454],{"__ignoreMap":31},[36,160407,160408,160410,160412],{"class":38,"line":39},[36,160409,157661],{"class":42},[36,160411,47],{"class":46},[36,160413,47810],{"class":53},[36,160415,160416],{"class":38,"line":66},[36,160417,2880],{"emptyLinePlaceholder":553},[36,160419,160420,160422,160424,160426,160428,160430,160432,160434,160436,160438,160440],{"class":38,"line":73},[36,160421,3505],{"class":46},[36,160423,9918],{"class":42},[36,160425,26524],{"class":46},[36,160427,32920],{"class":53},[36,160429,345],{"class":42},[36,160431,96],{"class":53},[36,160433,12915],{"class":42},[36,160435,956],{"class":53},[36,160437,12915],{"class":42},[36,160439,96],{"class":53},[36,160441,31264],{"class":42},[36,160443,160444,160446,160448],{"class":38,"line":79},[36,160445,159708],{"class":42},[36,160447,9957],{"class":46},[36,160449,159713],{"class":42},[36,160451,160452],{"class":38,"line":85},[36,160453,2880],{"emptyLinePlaceholder":553},[36,160455,160456,160458],{"class":38,"line":419},[36,160457,30894],{"class":53},[36,160459,159732],{"class":42},[14,160461,160463],{"id":160462},"_49-循环嵌套","4.9 循环嵌套",[19,160465,160466],{},"嵌套循环就是循环里面再写循环。",[26,160468,160470],{"className":28,"code":160469,"language":30,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[33,160471,160472,160492,160512],{"__ignoreMap":31},[36,160473,160474,160476,160478,160480,160482,160484,160486,160488,160490],{"class":38,"line":39},[36,160475,3505],{"class":46},[36,160477,9918],{"class":42},[36,160479,26524],{"class":46},[36,160481,32920],{"class":53},[36,160483,345],{"class":42},[36,160485,54],{"class":53},[36,160487,12915],{"class":42},[36,160489,912],{"class":53},[36,160491,31264],{"class":42},[36,160493,160494,160496,160498,160500,160502,160504,160506,160508,160510],{"class":38,"line":66},[36,160495,3681],{"class":46},[36,160497,9980],{"class":42},[36,160499,26524],{"class":46},[36,160501,32920],{"class":53},[36,160503,345],{"class":42},[36,160505,54],{"class":53},[36,160507,12915],{"class":42},[36,160509,912],{"class":53},[36,160511,31264],{"class":42},[36,160513,160514,160516,160518,160520,160523,160525,160527,160529,160532,160534,160536,160538,160540],{"class":38,"line":73},[36,160515,32928],{"class":53},[36,160517,345],{"class":42},[36,160519,677],{"class":46},[36,160521,160522],{"class":405},"\"i=",[36,160524,1509],{"class":53},[36,160526,1057],{"class":42},[36,160528,1559],{"class":53},[36,160530,160531],{"class":405},", j=",[36,160533,1509],{"class":53},[36,160535,1083],{"class":42},[36,160537,1559],{"class":53},[36,160539,870],{"class":405},[36,160541,63],{"class":42},[19,160543,160544],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160546,160548],{"id":160547},"_410-九九乘法表","4.10 九九乘法表",[26,160550,160552],{"className":28,"code":160551,"language":30,"meta":31,"style":31},"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",[33,160553,160554,160574,160597,160649],{"__ignoreMap":31},[36,160555,160556,160558,160560,160562,160564,160566,160568,160570,160572],{"class":38,"line":39},[36,160557,3505],{"class":46},[36,160559,9918],{"class":42},[36,160561,26524],{"class":46},[36,160563,32920],{"class":53},[36,160565,345],{"class":42},[36,160567,54],{"class":53},[36,160569,12915],{"class":42},[36,160571,1062],{"class":53},[36,160573,31264],{"class":42},[36,160575,160576,160578,160580,160582,160584,160586,160588,160591,160593,160595],{"class":38,"line":66},[36,160577,3681],{"class":46},[36,160579,9980],{"class":42},[36,160581,26524],{"class":46},[36,160583,32920],{"class":53},[36,160585,345],{"class":42},[36,160587,54],{"class":53},[36,160589,160590],{"class":42},", i ",[36,160592,1097],{"class":46},[36,160594,25599],{"class":53},[36,160596,31264],{"class":42},[36,160598,160599,160601,160603,160605,160607,160609,160611,160613,160615,160617,160619,160621,160623,160625,160627,160629,160631,160633,160635,160637,160639,160641,160643,160645,160647],{"class":38,"line":73},[36,160600,32928],{"class":53},[36,160602,345],{"class":42},[36,160604,677],{"class":46},[36,160606,870],{"class":405},[36,160608,1509],{"class":53},[36,160610,1083],{"class":42},[36,160612,1559],{"class":53},[36,160614,1071],{"class":405},[36,160616,1509],{"class":53},[36,160618,1057],{"class":42},[36,160620,1559],{"class":53},[36,160622,47],{"class":405},[36,160624,1509],{"class":53},[36,160626,100549],{"class":42},[36,160628,1071],{"class":46},[36,160630,3890],{"class":42},[36,160632,1559],{"class":53},[36,160634,870],{"class":405},[36,160636,12915],{"class":42},[36,160638,46278],{"class":5696},[36,160640,47],{"class":46},[36,160642,870],{"class":405},[36,160644,1714],{"class":53},[36,160646,870],{"class":405},[36,160648,63],{"class":42},[36,160650,160651,160653],{"class":38,"line":79},[36,160652,31777],{"class":53},[36,160654,2456],{"class":42},[19,160656,160657],{},"关键点：",[579,160659,160660,160666,160672,160678],{},[582,160661,160662,160663,160665],{},"外层 ",[33,160664,1057],{}," 控制行。",[582,160667,160668,160669,160671],{},"内层 ",[33,160670,1083],{}," 控制列。",[582,160673,160674,160675,160677],{},"每行结束后用 ",[33,160676,146873],{}," 换行。",[582,160679,160680,160683],{},[33,160681,160682],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160685,160687],{"id":160686},"_411-循环else","4.11 循环else",[19,160689,160690,160691,160693,160694,160696,160697,160699],{},"Python 的循环可以带 ",[33,160692,2181],{},"。当循环正常结束时执行 ",[33,160695,2181],{},"，如果被 ",[33,160698,2533],{}," 打断，则不执行。",[26,160701,160703],{"className":28,"code":160702,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,160704,160705,160725,160737,160748,160752,160758],{"__ignoreMap":31},[36,160706,160707,160709,160711,160713,160715,160717,160719,160721,160723],{"class":38,"line":39},[36,160708,3505],{"class":46},[36,160710,9918],{"class":42},[36,160712,26524],{"class":46},[36,160714,32920],{"class":53},[36,160716,345],{"class":42},[36,160718,54],{"class":53},[36,160720,12915],{"class":42},[36,160722,101],{"class":53},[36,160724,31264],{"class":42},[36,160726,160727,160729,160731,160733,160735],{"class":38,"line":66},[36,160728,3581],{"class":46},[36,160730,9918],{"class":42},[36,160732,3429],{"class":46},[36,160734,2518],{"class":53},[36,160736,4219],{"class":42},[36,160738,160739,160741,160743,160746],{"class":38,"line":73},[36,160740,32928],{"class":53},[36,160742,345],{"class":42},[36,160744,160745],{"class":405},"\"找到了\"",[36,160747,63],{"class":42},[36,160749,160750],{"class":38,"line":79},[36,160751,32104],{"class":46},[36,160753,160754,160756],{"class":38,"line":85},[36,160755,2181],{"class":46},[36,160757,4219],{"class":42},[36,160759,160760,160762,160764,160767],{"class":38,"line":419},[36,160761,31777],{"class":53},[36,160763,345],{"class":42},[36,160765,160766],{"class":405},"\"没找到\"",[36,160768,63],{"class":42},[19,160770,160771],{},"常用于搜索。",[26,160773,160775],{"className":28,"code":160774,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,160776,160777,160798,160807,160811,160823,160834,160844,160848,160854],{"__ignoreMap":31},[36,160778,160779,160782,160784,160786,160788,160790,160792,160794,160796],{"class":38,"line":39},[36,160780,160781],{"class":42},"names ",[36,160783,47],{"class":46},[36,160785,52703],{"class":42},[36,160787,150289],{"class":405},[36,160789,12915],{"class":42},[36,160791,151337],{"class":405},[36,160793,12915],{"class":42},[36,160795,160132],{"class":405},[36,160797,33723],{"class":42},[36,160799,160800,160802,160804],{"class":38,"line":66},[36,160801,111979],{"class":42},[36,160803,47],{"class":46},[36,160805,160806],{"class":405}," \"小李\"\n",[36,160808,160809],{"class":38,"line":73},[36,160810,2880],{"emptyLinePlaceholder":553},[36,160812,160813,160815,160818,160820],{"class":38,"line":79},[36,160814,3505],{"class":46},[36,160816,160817],{"class":42}," name ",[36,160819,26524],{"class":46},[36,160821,160822],{"class":42}," names:\n",[36,160824,160825,160827,160829,160831],{"class":38,"line":85},[36,160826,3581],{"class":46},[36,160828,160817],{"class":42},[36,160830,3429],{"class":46},[36,160832,160833],{"class":42}," target:\n",[36,160835,160836,160838,160840,160842],{"class":38,"line":419},[36,160837,32928],{"class":53},[36,160839,345],{"class":42},[36,160841,160745],{"class":405},[36,160843,63],{"class":42},[36,160845,160846],{"class":38,"line":425},[36,160847,32104],{"class":46},[36,160849,160850,160852],{"class":38,"line":431},[36,160851,2181],{"class":46},[36,160853,4219],{"class":42},[36,160855,160856,160858,160860,160862],{"class":38,"line":437},[36,160857,31777],{"class":53},[36,160859,345],{"class":42},[36,160861,160766],{"class":405},[36,160863,63],{"class":42},[14,160865,160867],{"id":160866},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160869,123693],{},[579,160871,160872,160875,160878],{},[582,160873,160874],{},"用户最多输入 3 次密码。",[582,160876,160877],{},"密码正确则登录成功。",[582,160879,160880],{},"3 次都错误则锁定账号。",[19,160882,10515],{},[26,160884,160886],{"className":28,"code":160885,"language":30,"meta":31,"style":31},"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",[33,160887,160888,160898,160902,160918,160934,160938,160950,160961,160965,160971,160996,161002],{"__ignoreMap":31},[36,160889,160890,160893,160895],{"class":38,"line":39},[36,160891,160892],{"class":42},"password ",[36,160894,47],{"class":46},[36,160896,160897],{"class":405}," \"123456\"\n",[36,160899,160900],{"class":38,"line":66},[36,160901,2880],{"emptyLinePlaceholder":553},[36,160903,160904,160906,160908,160910,160912,160914,160916],{"class":38,"line":73},[36,160905,3505],{"class":46},[36,160907,9918],{"class":42},[36,160909,26524],{"class":46},[36,160911,32920],{"class":53},[36,160913,345],{"class":42},[36,160915,127],{"class":53},[36,160917,31264],{"class":42},[36,160919,160920,160923,160925,160927,160929,160932],{"class":38,"line":79},[36,160921,160922],{"class":42},"    user_password ",[36,160924,47],{"class":46},[36,160926,61082],{"class":53},[36,160928,345],{"class":42},[36,160930,160931],{"class":405},"\"请输入密码:\"",[36,160933,63],{"class":42},[36,160935,160936],{"class":38,"line":85},[36,160937,2880],{"emptyLinePlaceholder":553},[36,160939,160940,160942,160945,160947],{"class":38,"line":419},[36,160941,3581],{"class":46},[36,160943,160944],{"class":42}," user_password ",[36,160946,3429],{"class":46},[36,160948,160949],{"class":42}," password:\n",[36,160951,160952,160954,160956,160959],{"class":38,"line":425},[36,160953,32928],{"class":53},[36,160955,345],{"class":42},[36,160957,160958],{"class":405},"\"登录成功\"",[36,160960,63],{"class":42},[36,160962,160963],{"class":38,"line":431},[36,160964,32104],{"class":46},[36,160966,160967,160969],{"class":38,"line":437},[36,160968,158423],{"class":46},[36,160970,4219],{"class":42},[36,160972,160973,160975,160977,160979,160982,160985,160987,160989,160991,160994],{"class":38,"line":443},[36,160974,32928],{"class":53},[36,160976,345],{"class":42},[36,160978,677],{"class":46},[36,160980,160981],{"class":405},"\"密码错误，还剩",[36,160983,160984],{"class":53},"{2",[36,160986,52748],{"class":46},[36,160988,3512],{"class":42},[36,160990,1559],{"class":53},[36,160992,160993],{"class":405},"次机会\"",[36,160995,63],{"class":42},[36,160997,160998,161000],{"class":38,"line":2092},[36,160999,2181],{"class":46},[36,161001,4219],{"class":42},[36,161003,161004,161006,161008,161011],{"class":38,"line":2097},[36,161005,31777],{"class":53},[36,161007,345],{"class":42},[36,161009,161010],{"class":405},"\"账号已锁定\"",[36,161012,63],{"class":42},[14,161014,161016],{"id":161015},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,161018,161020],{"className":28,"code":161019,"language":30,"meta":31,"style":31},"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",[33,161021,161022,161030,161041,161052,161063,161074,161085,161089,161104,161108,161120,161131,161143,161154,161166,161177,161189,161199,161203,161209],{"__ignoreMap":31},[36,161023,161024,161026,161028],{"class":38,"line":39},[36,161025,109064],{"class":46},[36,161027,95764],{"class":53},[36,161029,4219],{"class":42},[36,161031,161032,161034,161036,161039],{"class":38,"line":66},[36,161033,31777],{"class":53},[36,161035,345],{"class":42},[36,161037,161038],{"class":405},"\"====== 菜单 ======\"",[36,161040,63],{"class":42},[36,161042,161043,161045,161047,161050],{"class":38,"line":73},[36,161044,31777],{"class":53},[36,161046,345],{"class":42},[36,161048,161049],{"class":405},"\"1. 查询余额\"",[36,161051,63],{"class":42},[36,161053,161054,161056,161058,161061],{"class":38,"line":79},[36,161055,31777],{"class":53},[36,161057,345],{"class":42},[36,161059,161060],{"class":405},"\"2. 存款\"",[36,161062,63],{"class":42},[36,161064,161065,161067,161069,161072],{"class":38,"line":85},[36,161066,31777],{"class":53},[36,161068,345],{"class":42},[36,161070,161071],{"class":405},"\"3. 取款\"",[36,161073,63],{"class":42},[36,161075,161076,161078,161080,161083],{"class":38,"line":419},[36,161077,31777],{"class":53},[36,161079,345],{"class":42},[36,161081,161082],{"class":405},"\"0. 退出\"",[36,161084,63],{"class":42},[36,161086,161087],{"class":38,"line":425},[36,161088,2880],{"emptyLinePlaceholder":553},[36,161090,161091,161094,161096,161098,161100,161102],{"class":38,"line":431},[36,161092,161093],{"class":42},"    choice ",[36,161095,47],{"class":46},[36,161097,61082],{"class":53},[36,161099,345],{"class":42},[36,161101,153474],{"class":405},[36,161103,63],{"class":42},[36,161105,161106],{"class":38,"line":437},[36,161107,2880],{"emptyLinePlaceholder":553},[36,161109,161110,161112,161114,161116,161118],{"class":38,"line":443},[36,161111,3581],{"class":46},[36,161113,153487],{"class":42},[36,161115,3429],{"class":46},[36,161117,153492],{"class":405},[36,161119,4219],{"class":42},[36,161121,161122,161124,161126,161129],{"class":38,"line":2092},[36,161123,32928],{"class":53},[36,161125,345],{"class":42},[36,161127,161128],{"class":405},"\"余额为1000元\"",[36,161130,63],{"class":42},[36,161132,161133,161135,161137,161139,161141],{"class":38,"line":2097},[36,161134,39770],{"class":46},[36,161136,153487],{"class":42},[36,161138,3429],{"class":46},[36,161140,153511],{"class":405},[36,161142,4219],{"class":42},[36,161144,161145,161147,161149,161152],{"class":38,"line":2103},[36,161146,32928],{"class":53},[36,161148,345],{"class":42},[36,161150,161151],{"class":405},"\"存款功能\"",[36,161153,63],{"class":42},[36,161155,161156,161158,161160,161162,161164],{"class":38,"line":2108},[36,161157,39770],{"class":46},[36,161159,153487],{"class":42},[36,161161,3429],{"class":46},[36,161163,153529],{"class":405},[36,161165,4219],{"class":42},[36,161167,161168,161170,161172,161175],{"class":38,"line":2122},[36,161169,32928],{"class":53},[36,161171,345],{"class":42},[36,161173,161174],{"class":405},"\"取款功能\"",[36,161176,63],{"class":42},[36,161178,161179,161181,161183,161185,161187],{"class":38,"line":2127},[36,161180,39770],{"class":46},[36,161182,153487],{"class":42},[36,161184,3429],{"class":46},[36,161186,153583],{"class":405},[36,161188,4219],{"class":42},[36,161190,161191,161193,161195,161197],{"class":38,"line":2133},[36,161192,32928],{"class":53},[36,161194,345],{"class":42},[36,161196,153594],{"class":405},[36,161198,63],{"class":42},[36,161200,161201],{"class":38,"line":2154},[36,161202,32104],{"class":46},[36,161204,161205,161207],{"class":38,"line":2159},[36,161206,158423],{"class":46},[36,161208,4219],{"class":42},[36,161210,161211,161213,161215,161217],{"class":38,"line":2173},[36,161212,32928],{"class":53},[36,161214,345],{"class":42},[36,161216,153615],{"class":405},[36,161218,63],{"class":42},[19,161220,161221,161222,161224,161225,28866],{},"菜单类程序通常使用 ",[33,161223,159923],{},"，用户选择退出时 ",[33,161226,2533],{},[14,161228,161230],{"id":161229},"_414-易错点","4.14 易错点",[579,161232,161233,161238,161244,161252,161258],{},[582,161234,161235,161237],{},[33,161236,109064],{}," 循环必须更新控制变量。",[582,161239,161240,161243],{},[33,161241,161242],{},"range(1, 10)"," 不包含 10。",[582,161245,161246,161248,161249,161251],{},[33,161247,2533],{}," 结束整个循环，",[33,161250,155073],{}," 只跳过本轮。",[582,161253,161254,161255,161257],{},"嵌套循环中，",[33,161256,2533],{}," 只跳出当前所在的一层循环。",[582,161259,161260],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161262,161264],{"id":161263},"_415-本章练习","4.15 本章练习",[579,161266,161267,161270,161273,161276,161279],{},[582,161268,161269],{},"输出 1 到 100。",[582,161271,161272],{},"计算 1 到 100 的偶数和。",[582,161274,161275],{},"输出 100 以内能被 3 和 5 同时整除的数。",[582,161277,161278],{},"编写猜数字游戏，限制最多猜 7 次。",[582,161280,161281],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[539,161283,161284],{},"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":31,"searchDepth":66,"depth":66,"links":161286},[161287,161288,161289,161290,161291,161295,161296,161297,161298,161299,161300,161301,161302,161303,161304],{"id":159543,"depth":66,"text":159544},{"id":159573,"depth":66,"text":159574},{"id":159662,"depth":66,"text":159663},{"id":159756,"depth":66,"text":159757},{"id":159930,"depth":66,"text":159931,"children":161292},[161293,161294],{"id":159934,"depth":73,"text":159935},{"id":159998,"depth":73,"text":159999},{"id":160062,"depth":66,"text":160063},{"id":160157,"depth":66,"text":160158},{"id":160266,"depth":66,"text":160267},{"id":160462,"depth":66,"text":160463},{"id":160547,"depth":66,"text":160548},{"id":160686,"depth":66,"text":160687},{"id":160866,"depth":66,"text":160867},{"id":161015,"depth":66,"text":161016},{"id":161229,"depth":66,"text":161230},{"id":161263,"depth":66,"text":161264},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159535,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161311,"title":161312,"body":161313,"description":550,"extension":551,"meta":163318,"navigation":553,"path":163319,"seo":163320,"stem":163321,"__hash__":163322},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161314,"toc":163298},[161315,161318,161322,161325,161328,161342,161345,161359,161363,161365,161384,161386,161433,161435,161449,161453,161527,161530,161534,161537,161596,161604,161607,161660,161663,161667,161672,161727,161735,161785,161789,161794,161802,161901,161907,161911,161916,161919,161930,161971,161984,161988,161991,162027,162030,162043,162046,162106,162110,162114,162117,162168,162172,162175,162222,162228,162294,162297,162301,162304,162420,162423,162427,162430,162536,162540,162543,162581,162584,162626,162629,162689,162692,162696,163160,163163,163167,163194,163200,163261,163265,163295],[10,161316,161312],{"id":161317},"_5-函数基础",[14,161319,161321],{"id":161320},"_51-为什么需要函数","5.1 为什么需要函数",[19,161323,161324],{},"函数用于封装一段可以重复使用的代码。",[19,161326,161327],{},"不使用函数的问题：",[579,161329,161330,161333,161336,161339],{},[582,161331,161332],{},"重复代码多。",[582,161334,161335],{},"修改逻辑时容易漏改。",[582,161337,161338],{},"主流程不清晰。",[582,161340,161341],{},"程序越写越长，难以维护。",[19,161343,161344],{},"使用函数后的好处：",[579,161346,161347,161350,161353,161356],{},[582,161348,161349],{},"提高复用性。",[582,161351,161352],{},"提高可读性。",[582,161354,161355],{},"便于调试。",[582,161357,161358],{},"便于分工。",[14,161360,161362],{"id":161361},"_52-函数定义","5.2 函数定义",[19,161364,5661],{},[26,161366,161368],{"className":28,"code":161367,"language":30,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,161369,161370,161379],{"__ignoreMap":31},[36,161371,161372,161374,161377],{"class":38,"line":39},[36,161373,32424],{"class":46},[36,161375,161376],{"class":2443}," 函数名",[36,161378,32430],{"class":42},[36,161380,161381],{"class":38,"line":66},[36,161382,161383],{"class":42},"    函数体\n",[19,161385,15615],{},[26,161387,161389],{"className":28,"code":161388,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,161390,161391,161400,161410,161420,161424,161428],{"__ignoreMap":31},[36,161392,161393,161395,161398],{"class":38,"line":39},[36,161394,32424],{"class":46},[36,161396,161397],{"class":2443}," say_hello",[36,161399,32430],{"class":42},[36,161401,161402,161404,161406,161408],{"class":38,"line":66},[36,161403,31777],{"class":53},[36,161405,345],{"class":42},[36,161407,6324],{"class":405},[36,161409,63],{"class":42},[36,161411,161412,161414,161416,161418],{"class":38,"line":73},[36,161413,31777],{"class":53},[36,161415,345],{"class":42},[36,161417,147040],{"class":405},[36,161419,63],{"class":42},[36,161421,161422],{"class":38,"line":79},[36,161423,2880],{"emptyLinePlaceholder":553},[36,161425,161426],{"class":38,"line":85},[36,161427,2880],{"emptyLinePlaceholder":553},[36,161429,161430],{"class":38,"line":419},[36,161431,161432],{"class":42},"say_hello()\n",[19,161434,9505],{},[579,161436,161437,161440,161443,161446],{},[582,161438,161439],{},"函数必须先定义，再调用。",[582,161441,161442],{},"函数名遵循变量命名规则。",[582,161444,161445],{},"函数体需要缩进。",[582,161447,161448],{},"函数不调用就不会执行。",[14,161450,161452],{"id":161451},"_53-函数调用","5.3 函数调用",[26,161454,161456],{"className":28,"code":161455,"language":30,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[33,161457,161458,161467,161478,161489,161500,161510,161514,161518,161523],{"__ignoreMap":31},[36,161459,161460,161462,161465],{"class":38,"line":39},[36,161461,32424],{"class":46},[36,161463,161464],{"class":2443}," print_menu",[36,161466,32430],{"class":42},[36,161468,161469,161471,161473,161476],{"class":38,"line":66},[36,161470,31777],{"class":53},[36,161472,345],{"class":42},[36,161474,161475],{"class":405},"\"1. 查询\"",[36,161477,63],{"class":42},[36,161479,161480,161482,161484,161487],{"class":38,"line":73},[36,161481,31777],{"class":53},[36,161483,345],{"class":42},[36,161485,161486],{"class":405},"\"2. 添加\"",[36,161488,63],{"class":42},[36,161490,161491,161493,161495,161498],{"class":38,"line":79},[36,161492,31777],{"class":53},[36,161494,345],{"class":42},[36,161496,161497],{"class":405},"\"3. 删除\"",[36,161499,63],{"class":42},[36,161501,161502,161504,161506,161508],{"class":38,"line":85},[36,161503,31777],{"class":53},[36,161505,345],{"class":42},[36,161507,161082],{"class":405},[36,161509,63],{"class":42},[36,161511,161512],{"class":38,"line":419},[36,161513,2880],{"emptyLinePlaceholder":553},[36,161515,161516],{"class":38,"line":425},[36,161517,2880],{"emptyLinePlaceholder":553},[36,161519,161520],{"class":38,"line":431},[36,161521,161522],{"class":42},"print_menu()\n",[36,161524,161525],{"class":38,"line":437},[36,161526,161522],{"class":42},[19,161528,161529],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161531,161533],{"id":161532},"_54-参数","5.4 参数",[19,161535,161536],{},"参数用于向函数传递数据。",[26,161538,161540],{"className":28,"code":161539,"language":30,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,161541,161542,161551,161571,161575,161579,161588],{"__ignoreMap":31},[36,161543,161544,161546,161548],{"class":38,"line":39},[36,161545,32424],{"class":46},[36,161547,161397],{"class":2443},[36,161549,161550],{"class":42},"(name):\n",[36,161552,161553,161555,161557,161559,161561,161563,161565,161567,161569],{"class":38,"line":66},[36,161554,31777],{"class":53},[36,161556,345],{"class":42},[36,161558,677],{"class":46},[36,161560,157455],{"class":405},[36,161562,1509],{"class":53},[36,161564,80287],{"class":42},[36,161566,1559],{"class":53},[36,161568,870],{"class":405},[36,161570,63],{"class":42},[36,161572,161573],{"class":38,"line":73},[36,161574,2880],{"emptyLinePlaceholder":553},[36,161576,161577],{"class":38,"line":79},[36,161578,2880],{"emptyLinePlaceholder":553},[36,161580,161581,161584,161586],{"class":38,"line":85},[36,161582,161583],{"class":42},"say_hello(",[36,161585,150289],{"class":405},[36,161587,63],{"class":42},[36,161589,161590,161592,161594],{"class":38,"line":419},[36,161591,161583],{"class":42},[36,161593,151337],{"class":405},[36,161595,63],{"class":42},[19,161597,161598,161600,161601,161603],{},[33,161599,80287],{}," 是形参，",[33,161602,150289],{}," 是实参。",[19,161605,161606],{},"多个参数：",[26,161608,161610],{"className":28,"code":161609,"language":30,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,161611,161612,161620,161633,161639,161643,161647],{"__ignoreMap":31},[36,161613,161614,161616,161618],{"class":38,"line":39},[36,161615,32424],{"class":46},[36,161617,5689],{"class":2443},[36,161619,151494],{"class":42},[36,161621,161622,161625,161627,161629,161631],{"class":38,"line":66},[36,161623,161624],{"class":42},"    result ",[36,161626,47],{"class":46},[36,161628,11349],{"class":42},[36,161630,1097],{"class":46},[36,161632,151505],{"class":42},[36,161634,161635,161637],{"class":38,"line":73},[36,161636,31777],{"class":53},[36,161638,77062],{"class":42},[36,161640,161641],{"class":38,"line":79},[36,161642,2880],{"emptyLinePlaceholder":553},[36,161644,161645],{"class":38,"line":85},[36,161646,2880],{"emptyLinePlaceholder":553},[36,161648,161649,161652,161654,161656,161658],{"class":38,"line":419},[36,161650,161651],{"class":42},"add(",[36,161653,1062],{"class":53},[36,161655,12915],{"class":42},[36,161657,1313],{"class":53},[36,161659,63],{"class":42},[19,161661,161662],{},"调用时参数数量必须匹配。",[14,161664,161666],{"id":161665},"_55-返回值","5.5 返回值",[19,161668,161669,161671],{},[33,161670,17526],{}," 用于把函数内部的结果返回给调用者。",[26,161673,161675],{"className":28,"code":161674,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,161676,161677,161685,161695,161699,161703,161721],{"__ignoreMap":31},[36,161678,161679,161681,161683],{"class":38,"line":39},[36,161680,32424],{"class":46},[36,161682,5689],{"class":2443},[36,161684,151494],{"class":42},[36,161686,161687,161689,161691,161693],{"class":38,"line":66},[36,161688,4570],{"class":46},[36,161690,11349],{"class":42},[36,161692,1097],{"class":46},[36,161694,151505],{"class":42},[36,161696,161697],{"class":38,"line":73},[36,161698,2880],{"emptyLinePlaceholder":553},[36,161700,161701],{"class":38,"line":79},[36,161702,2880],{"emptyLinePlaceholder":553},[36,161704,161705,161708,161710,161713,161715,161717,161719],{"class":38,"line":85},[36,161706,161707],{"class":42},"result ",[36,161709,47],{"class":46},[36,161711,161712],{"class":42}," add(",[36,161714,1062],{"class":53},[36,161716,12915],{"class":42},[36,161718,1313],{"class":53},[36,161720,63],{"class":42},[36,161722,161723,161725],{"class":38,"line":419},[36,161724,30894],{"class":53},[36,161726,77062],{"class":42},[19,161728,161729,161730,161732,161733,28866],{},"如果函数没有写 ",[33,161731,17526],{},"，默认返回 ",[33,161734,96157],{},[26,161736,161738],{"className":28,"code":161737,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,161739,161740,161748,161758,161762,161766,161775],{"__ignoreMap":31},[36,161741,161742,161744,161746],{"class":38,"line":39},[36,161743,32424],{"class":46},[36,161745,161397],{"class":2443},[36,161747,32430],{"class":42},[36,161749,161750,161752,161754,161756],{"class":38,"line":66},[36,161751,31777],{"class":53},[36,161753,345],{"class":42},[36,161755,6324],{"class":405},[36,161757,63],{"class":42},[36,161759,161760],{"class":38,"line":73},[36,161761,2880],{"emptyLinePlaceholder":553},[36,161763,161764],{"class":38,"line":79},[36,161765,2880],{"emptyLinePlaceholder":553},[36,161767,161768,161770,161772],{"class":38,"line":85},[36,161769,161707],{"class":42},[36,161771,47],{"class":46},[36,161773,161774],{"class":42}," say_hello()\n",[36,161776,161777,161779,161782],{"class":38,"line":419},[36,161778,30894],{"class":53},[36,161780,161781],{"class":42},"(result)  ",[36,161783,161784],{"class":69},"# None\n",[14,161786,161788],{"id":161787},"_56-return的作用","5.6 return的作用",[19,161790,161791,161793],{},[33,161792,17526],{}," 有两个作用：",[579,161795,161796,161799],{},[582,161797,161798],{},"返回结果。",[582,161800,161801],{},"结束函数。",[26,161803,161805],{"className":28,"code":161804,"language":30,"meta":31,"style":31},"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",[33,161806,161807,161817,161829,161836,161840,161852,161859,161863,161870,161874,161878,161889],{"__ignoreMap":31},[36,161808,161809,161811,161814],{"class":38,"line":39},[36,161810,32424],{"class":46},[36,161812,161813],{"class":2443}," check_age",[36,161815,161816],{"class":42},"(age):\n",[36,161818,161819,161821,161823,161825,161827],{"class":38,"line":66},[36,161820,3581],{"class":46},[36,161822,16187],{"class":42},[36,161824,1523],{"class":46},[36,161826,4573],{"class":53},[36,161828,4219],{"class":42},[36,161830,161831,161833],{"class":38,"line":73},[36,161832,15232],{"class":46},[36,161834,161835],{"class":405}," \"年龄不合法\"\n",[36,161837,161838],{"class":38,"line":79},[36,161839,2880],{"emptyLinePlaceholder":553},[36,161841,161842,161844,161846,161848,161850],{"class":38,"line":85},[36,161843,3581],{"class":46},[36,161845,16187],{"class":42},[36,161847,2190],{"class":46},[36,161849,156686],{"class":53},[36,161851,4219],{"class":42},[36,161853,161854,161856],{"class":38,"line":419},[36,161855,15232],{"class":46},[36,161857,161858],{"class":405}," \"成年人\"\n",[36,161860,161861],{"class":38,"line":425},[36,161862,2880],{"emptyLinePlaceholder":553},[36,161864,161865,161867],{"class":38,"line":431},[36,161866,4570],{"class":46},[36,161868,161869],{"class":405}," \"未成年人\"\n",[36,161871,161872],{"class":38,"line":437},[36,161873,2880],{"emptyLinePlaceholder":553},[36,161875,161876],{"class":38,"line":443},[36,161877,2880],{"emptyLinePlaceholder":553},[36,161879,161880,161882,161885,161887],{"class":38,"line":2092},[36,161881,30894],{"class":53},[36,161883,161884],{"class":42},"(check_age(",[36,161886,1313],{"class":53},[36,161888,370],{"class":42},[36,161890,161891,161893,161895,161897,161899],{"class":38,"line":2097},[36,161892,30894],{"class":53},[36,161894,161884],{"class":42},[36,161896,173],{"class":46},[36,161898,54],{"class":53},[36,161900,370],{"class":42},[19,161902,161903,161904,161906],{},"函数执行到 ",[33,161905,17526],{}," 后，后面的代码不会继续执行。",[14,161908,161910],{"id":161909},"_57-none","5.7 None",[19,161912,161913,161915],{},[33,161914,96157],{}," 表示空值或没有结果。",[19,161917,161918],{},"常见使用场景：",[579,161920,161921,161924,161927],{},[582,161922,161923],{},"函数没有返回值。",[582,161925,161926],{},"变量暂时没有具体值。",[582,161928,161929],{},"表示查询不到结果。",[26,161931,161933],{"className":28,"code":161932,"language":30,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,161934,161935,161943,161947,161960],{"__ignoreMap":31},[36,161936,161937,161939,161941],{"class":38,"line":39},[36,161938,161707],{"class":42},[36,161940,47],{"class":46},[36,161942,152573],{"class":53},[36,161944,161945],{"class":38,"line":66},[36,161946,2880],{"emptyLinePlaceholder":553},[36,161948,161949,161951,161954,161956,161958],{"class":38,"line":73},[36,161950,2011],{"class":46},[36,161952,161953],{"class":42}," result ",[36,161955,39404],{"class":46},[36,161957,39410],{"class":53},[36,161959,4219],{"class":42},[36,161961,161962,161964,161966,161969],{"class":38,"line":79},[36,161963,31777],{"class":53},[36,161965,345],{"class":42},[36,161967,161968],{"class":405},"\"没有数据\"",[36,161970,63],{"class":42},[19,161972,161973,161974,161976,161977,161980,161981,28866],{},"判断 ",[33,161975,96157],{}," 推荐使用 ",[33,161978,161979],{},"is None","，不要写成 ",[33,161982,161983],{},"== None",[14,161985,161987],{"id":161986},"_58-函数文档字符串","5.8 函数文档字符串",[19,161989,161990],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,161992,161994],{"className":28,"code":161993,"language":30,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,161995,161996,162006,162011],{"__ignoreMap":31},[36,161997,161998,162000,162003],{"class":38,"line":39},[36,161999,32424],{"class":46},[36,162001,162002],{"class":2443}," calculate_bmi",[36,162004,162005],{"class":42},"(weight, height):\n",[36,162007,162008],{"class":38,"line":66},[36,162009,162010],{"class":405},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,162012,162013,162015,162018,162020,162023,162025],{"class":38,"line":73},[36,162014,4570],{"class":46},[36,162016,162017],{"class":42}," weight ",[36,162019,1197],{"class":46},[36,162021,162022],{"class":42}," height ",[36,162024,11141],{"class":46},[36,162026,48200],{"class":53},[19,162028,162029],{},"查看说明：",[26,162031,162033],{"className":28,"code":162032,"language":30,"meta":31,"style":31},"help(calculate_bmi)\n",[33,162034,162035],{"__ignoreMap":31},[36,162036,162037,162040],{"class":38,"line":39},[36,162038,162039],{"class":53},"help",[36,162041,162042],{"class":42},"(calculate_bmi)\n",[19,162044,162045],{},"较完整的写法：",[26,162047,162049],{"className":28,"code":162048,"language":30,"meta":31,"style":31},"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",[33,162050,162051,162059,162064,162069,162073,162078,162083,162088,162092],{"__ignoreMap":31},[36,162052,162053,162055,162057],{"class":38,"line":39},[36,162054,32424],{"class":46},[36,162056,162002],{"class":2443},[36,162058,162005],{"class":42},[36,162060,162061],{"class":38,"line":66},[36,162062,162063],{"class":405},"    \"\"\"\n",[36,162065,162066],{"class":38,"line":73},[36,162067,162068],{"class":405},"    计算BMI。\n",[36,162070,162071],{"class":38,"line":79},[36,162072,2880],{"emptyLinePlaceholder":553},[36,162074,162075],{"class":38,"line":85},[36,162076,162077],{"class":405},"    :param weight: 体重，单位kg\n",[36,162079,162080],{"class":38,"line":419},[36,162081,162082],{"class":405},"    :param height: 身高，单位m\n",[36,162084,162085],{"class":38,"line":425},[36,162086,162087],{"class":405},"    :return: BMI数值\n",[36,162089,162090],{"class":38,"line":431},[36,162091,162063],{"class":405},[36,162093,162094,162096,162098,162100,162102,162104],{"class":38,"line":437},[36,162095,4570],{"class":46},[36,162097,162017],{"class":42},[36,162099,1197],{"class":46},[36,162101,162022],{"class":42},[36,162103,11141],{"class":46},[36,162105,48200],{"class":53},[14,162107,162109],{"id":162108},"_59-变量作用域","5.9 变量作用域",[596,162111,162113],{"id":162112},"_591-局部变量","5.9.1 局部变量",[19,162115,162116],{},"在函数内部定义的变量，只能在函数内部使用。",[26,162118,162120],{"className":28,"code":162119,"language":30,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,162121,162122,162131,162139,162145,162149,162153,162158],{"__ignoreMap":31},[36,162123,162124,162126,162129],{"class":38,"line":39},[36,162125,32424],{"class":46},[36,162127,162128],{"class":2443}," test",[36,162130,32430],{"class":42},[36,162132,162133,162135,162137],{"class":38,"line":66},[36,162134,46070],{"class":42},[36,162136,47],{"class":46},[36,162138,58905],{"class":53},[36,162140,162141,162143],{"class":38,"line":73},[36,162142,31777],{"class":53},[36,162144,640],{"class":42},[36,162146,162147],{"class":38,"line":79},[36,162148,2880],{"emptyLinePlaceholder":553},[36,162150,162151],{"class":38,"line":85},[36,162152,2880],{"emptyLinePlaceholder":553},[36,162154,162155],{"class":38,"line":419},[36,162156,162157],{"class":42},"test()\n",[36,162159,162160,162162,162165],{"class":38,"line":425},[36,162161,30894],{"class":53},[36,162163,162164],{"class":42},"(num)  ",[36,162166,162167],{"class":69},"# 报错\n",[596,162169,162171],{"id":162170},"_592-全局变量","5.9.2 全局变量",[19,162173,162174],{},"在函数外部定义的变量，可以在函数内部读取。",[26,162176,162178],{"className":28,"code":162177,"language":30,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,162179,162180,162188,162192,162196,162204,162210,162214,162218],{"__ignoreMap":31},[36,162181,162182,162184,162186],{"class":38,"line":39},[36,162183,146937],{"class":42},[36,162185,47],{"class":46},[36,162187,149754],{"class":405},[36,162189,162190],{"class":38,"line":66},[36,162191,2880],{"emptyLinePlaceholder":553},[36,162193,162194],{"class":38,"line":73},[36,162195,2880],{"emptyLinePlaceholder":553},[36,162197,162198,162200,162202],{"class":38,"line":79},[36,162199,32424],{"class":46},[36,162201,161397],{"class":2443},[36,162203,32430],{"class":42},[36,162205,162206,162208],{"class":38,"line":85},[36,162207,31777],{"class":53},[36,162209,151061],{"class":42},[36,162211,162212],{"class":38,"line":419},[36,162213,2880],{"emptyLinePlaceholder":553},[36,162215,162216],{"class":38,"line":425},[36,162217,2880],{"emptyLinePlaceholder":553},[36,162219,162220],{"class":38,"line":431},[36,162221,161432],{"class":42},[19,162223,162224,162225,28866],{},"如果要在函数内部修改全局变量，需要 ",[33,162226,162227],{},"global",[26,162229,162231],{"className":28,"code":162230,"language":30,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[33,162232,162233,162241,162245,162249,162258,162266,162274,162278,162282,162287],{"__ignoreMap":31},[36,162234,162235,162237,162239],{"class":38,"line":39},[36,162236,147092],{"class":42},[36,162238,47],{"class":46},[36,162240,47810],{"class":53},[36,162242,162243],{"class":38,"line":66},[36,162244,2880],{"emptyLinePlaceholder":553},[36,162246,162247],{"class":38,"line":73},[36,162248,2880],{"emptyLinePlaceholder":553},[36,162250,162251,162253,162256],{"class":38,"line":79},[36,162252,32424],{"class":46},[36,162254,162255],{"class":2443}," add_count",[36,162257,32430],{"class":42},[36,162259,162260,162263],{"class":38,"line":85},[36,162261,162262],{"class":46},"    global",[36,162264,162265],{"class":42}," count\n",[36,162267,162268,162270,162272],{"class":38,"line":419},[36,162269,159834],{"class":42},[36,162271,9957],{"class":46},[36,162273,56176],{"class":53},[36,162275,162276],{"class":38,"line":425},[36,162277,2880],{"emptyLinePlaceholder":553},[36,162279,162280],{"class":38,"line":431},[36,162281,2880],{"emptyLinePlaceholder":553},[36,162283,162284],{"class":38,"line":437},[36,162285,162286],{"class":42},"add_count()\n",[36,162288,162289,162291],{"class":38,"line":443},[36,162290,30894],{"class":53},[36,162292,162293],{"class":42},"(count)\n",[19,162295,162296],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162298,162300],{"id":162299},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162302,162303],{},"一个函数中可以调用另一个函数。",[26,162305,162307],{"className":28,"code":162306,"language":30,"meta":31,"style":31},"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",[33,162308,162309,162318,162332,162336,162340,162349,162354,162374,162395,162399,162403,162407],{"__ignoreMap":31},[36,162310,162311,162313,162316],{"class":38,"line":39},[36,162312,32424],{"class":46},[36,162314,162315],{"class":2443}," print_line",[36,162317,32430],{"class":42},[36,162319,162320,162322,162324,162326,162328,162330],{"class":38,"line":66},[36,162321,31777],{"class":53},[36,162323,345],{"class":42},[36,162325,32960],{"class":405},[36,162327,6998],{"class":46},[36,162329,79142],{"class":53},[36,162331,63],{"class":42},[36,162333,162334],{"class":38,"line":73},[36,162335,2880],{"emptyLinePlaceholder":553},[36,162337,162338],{"class":38,"line":79},[36,162339,2880],{"emptyLinePlaceholder":553},[36,162341,162342,162344,162347],{"class":38,"line":85},[36,162343,32424],{"class":46},[36,162345,162346],{"class":2443}," print_info",[36,162348,149776],{"class":42},[36,162350,162351],{"class":38,"line":419},[36,162352,162353],{"class":42},"    print_line()\n",[36,162355,162356,162358,162360,162362,162364,162366,162368,162370,162372],{"class":38,"line":425},[36,162357,31777],{"class":53},[36,162359,345],{"class":42},[36,162361,677],{"class":46},[36,162363,157083],{"class":405},[36,162365,1509],{"class":53},[36,162367,80287],{"class":42},[36,162369,1559],{"class":53},[36,162371,870],{"class":405},[36,162373,63],{"class":42},[36,162375,162376,162378,162380,162382,162385,162387,162389,162391,162393],{"class":38,"line":431},[36,162377,31777],{"class":53},[36,162379,345],{"class":42},[36,162381,677],{"class":46},[36,162383,162384],{"class":405},"\"年龄:",[36,162386,1509],{"class":53},[36,162388,70698],{"class":42},[36,162390,1559],{"class":53},[36,162392,870],{"class":405},[36,162394,63],{"class":42},[36,162396,162397],{"class":38,"line":437},[36,162398,162353],{"class":42},[36,162400,162401],{"class":38,"line":443},[36,162402,2880],{"emptyLinePlaceholder":553},[36,162404,162405],{"class":38,"line":2092},[36,162406,2880],{"emptyLinePlaceholder":553},[36,162408,162409,162412,162414,162416,162418],{"class":38,"line":2097},[36,162410,162411],{"class":42},"print_info(",[36,162413,150289],{"class":405},[36,162415,12915],{"class":42},[36,162417,1263],{"class":53},[36,162419,63],{"class":42},[19,162421,162422],{},"这种方式可以把小功能组合成大功能。",[14,162424,162426],{"id":162425},"_511-参数检查","5.11 参数检查",[19,162428,162429],{},"函数内部可以检查参数是否合法。",[26,162431,162433],{"className":28,"code":162432,"language":30,"meta":31,"style":31},"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",[33,162434,162435,162444,162456,162462,162472,162476,162480,162497,162501,162513,162524,162530],{"__ignoreMap":31},[36,162436,162437,162439,162442],{"class":38,"line":39},[36,162438,32424],{"class":46},[36,162440,162441],{"class":2443}," divide",[36,162443,151494],{"class":42},[36,162445,162446,162448,162450,162452,162454],{"class":38,"line":66},[36,162447,3581],{"class":46},[36,162449,11362],{"class":42},[36,162451,3429],{"class":46},[36,162453,4573],{"class":53},[36,162455,4219],{"class":42},[36,162457,162458,162460],{"class":38,"line":73},[36,162459,15232],{"class":46},[36,162461,152573],{"class":53},[36,162463,162464,162466,162468,162470],{"class":38,"line":79},[36,162465,4570],{"class":46},[36,162467,11349],{"class":42},[36,162469,1197],{"class":46},[36,162471,151505],{"class":42},[36,162473,162474],{"class":38,"line":85},[36,162475,2880],{"emptyLinePlaceholder":553},[36,162477,162478],{"class":38,"line":419},[36,162479,2880],{"emptyLinePlaceholder":553},[36,162481,162482,162484,162486,162489,162491,162493,162495],{"class":38,"line":425},[36,162483,161707],{"class":42},[36,162485,47],{"class":46},[36,162487,162488],{"class":42}," divide(",[36,162490,1062],{"class":53},[36,162492,12915],{"class":42},[36,162494,812],{"class":53},[36,162496,63],{"class":42},[36,162498,162499],{"class":38,"line":431},[36,162500,2880],{"emptyLinePlaceholder":553},[36,162502,162503,162505,162507,162509,162511],{"class":38,"line":437},[36,162504,2011],{"class":46},[36,162506,161953],{"class":42},[36,162508,39404],{"class":46},[36,162510,39410],{"class":53},[36,162512,4219],{"class":42},[36,162514,162515,162517,162519,162522],{"class":38,"line":443},[36,162516,31777],{"class":53},[36,162518,345],{"class":42},[36,162520,162521],{"class":405},"\"除数不能为0\"",[36,162523,63],{"class":42},[36,162525,162526,162528],{"class":38,"line":2092},[36,162527,2181],{"class":46},[36,162529,4219],{"class":42},[36,162531,162532,162534],{"class":38,"line":2097},[36,162533,31777],{"class":53},[36,162535,77062],{"class":42},[14,162537,162539],{"id":162538},"_512-类型提示","5.12 类型提示",[19,162541,162542],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,162544,162546],{"className":28,"code":162545,"language":30,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,162547,162548,162571],{"__ignoreMap":31},[36,162549,162550,162552,162554,162557,162559,162562,162564,162567,162569],{"class":38,"line":39},[36,162551,32424],{"class":46},[36,162553,5689],{"class":2443},[36,162555,162556],{"class":42},"(a: ",[36,162558,631],{"class":53},[36,162560,162561],{"class":42},", b: ",[36,162563,631],{"class":53},[36,162565,162566],{"class":42},") -> ",[36,162568,631],{"class":53},[36,162570,4219],{"class":42},[36,162572,162573,162575,162577,162579],{"class":38,"line":66},[36,162574,4570],{"class":46},[36,162576,11349],{"class":42},[36,162578,1097],{"class":46},[36,162580,151505],{"class":42},[19,162582,162583],{},"字符串参数：",[26,162585,162587],{"className":28,"code":162586,"language":30,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,162588,162589,162606],{"__ignoreMap":31},[36,162590,162591,162593,162595,162598,162600,162602,162604],{"class":38,"line":39},[36,162592,32424],{"class":46},[36,162594,161397],{"class":2443},[36,162596,162597],{"class":42},"(name: ",[36,162599,1783],{"class":53},[36,162601,162566],{"class":42},[36,162603,96157],{"class":53},[36,162605,4219],{"class":42},[36,162607,162608,162610,162612,162614,162616,162618,162620,162622,162624],{"class":38,"line":66},[36,162609,31777],{"class":53},[36,162611,345],{"class":42},[36,162613,677],{"class":46},[36,162615,157455],{"class":405},[36,162617,1509],{"class":53},[36,162619,80287],{"class":42},[36,162621,1559],{"class":53},[36,162623,870],{"class":405},[36,162625,63],{"class":42},[19,162627,162628],{},"列表参数：",[26,162630,162632],{"className":28,"code":162631,"language":30,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[33,162633,162634,162653,162661,162673,162682],{"__ignoreMap":31},[36,162635,162636,162638,162641,162644,162646,162649,162651],{"class":38,"line":39},[36,162637,32424],{"class":46},[36,162639,162640],{"class":2443}," get_total",[36,162642,162643],{"class":42},"(numbers: list[",[36,162645,631],{"class":53},[36,162647,162648],{"class":42},"]) -> ",[36,162650,631],{"class":53},[36,162652,4219],{"class":42},[36,162654,162655,162657,162659],{"class":38,"line":66},[36,162656,159708],{"class":42},[36,162658,47],{"class":46},[36,162660,47810],{"class":53},[36,162662,162663,162665,162668,162670],{"class":38,"line":73},[36,162664,3681],{"class":46},[36,162666,162667],{"class":42}," number ",[36,162669,26524],{"class":46},[36,162671,162672],{"class":42}," numbers:\n",[36,162674,162675,162677,162679],{"class":38,"line":79},[36,162676,160383],{"class":42},[36,162678,9957],{"class":46},[36,162680,162681],{"class":42}," number\n",[36,162683,162684,162686],{"class":38,"line":85},[36,162685,4570],{"class":46},[36,162687,162688],{"class":42}," total\n",[19,162690,162691],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162693,162695],{"id":162694},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,162697,162699],{"className":28,"code":162698,"language":30,"meta":31,"style":31},"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",[33,162700,162701,162711,162715,162719,162727,162738,162748,162758,162768,162778,162782,162786,162795,162817,162821,162825,162834,162840,162860,162872,162883,162887,162896,162907,162912,162916,162920,162929,162935,162954,162966,162976,162980,162991,163001,163005,163013,163024,163028,163032,163036,163044,163049,163063,163067,163079,163084,163096,163101,163113,163118,163130,163140,163144,163150],{"__ignoreMap":31},[36,162702,162703,162706,162708],{"class":38,"line":39},[36,162704,162705],{"class":42},"balance ",[36,162707,47],{"class":46},[36,162709,162710],{"class":53}," 1000\n",[36,162712,162713],{"class":38,"line":66},[36,162714,2880],{"emptyLinePlaceholder":553},[36,162716,162717],{"class":38,"line":73},[36,162718,2880],{"emptyLinePlaceholder":553},[36,162720,162721,162723,162725],{"class":38,"line":79},[36,162722,32424],{"class":46},[36,162724,152434],{"class":2443},[36,162726,32430],{"class":42},[36,162728,162729,162731,162733,162736],{"class":38,"line":85},[36,162730,31777],{"class":53},[36,162732,345],{"class":42},[36,162734,162735],{"class":405},"\"====== ATM ======\"",[36,162737,63],{"class":42},[36,162739,162740,162742,162744,162746],{"class":38,"line":419},[36,162741,31777],{"class":53},[36,162743,345],{"class":42},[36,162745,161049],{"class":405},[36,162747,63],{"class":42},[36,162749,162750,162752,162754,162756],{"class":38,"line":425},[36,162751,31777],{"class":53},[36,162753,345],{"class":42},[36,162755,161060],{"class":405},[36,162757,63],{"class":42},[36,162759,162760,162762,162764,162766],{"class":38,"line":431},[36,162761,31777],{"class":53},[36,162763,345],{"class":42},[36,162765,161071],{"class":405},[36,162767,63],{"class":42},[36,162769,162770,162772,162774,162776],{"class":38,"line":437},[36,162771,31777],{"class":53},[36,162773,345],{"class":42},[36,162775,161082],{"class":405},[36,162777,63],{"class":42},[36,162779,162780],{"class":38,"line":443},[36,162781,2880],{"emptyLinePlaceholder":553},[36,162783,162784],{"class":38,"line":2092},[36,162785,2880],{"emptyLinePlaceholder":553},[36,162787,162788,162790,162793],{"class":38,"line":2097},[36,162789,32424],{"class":46},[36,162791,162792],{"class":2443}," show_balance",[36,162794,32430],{"class":42},[36,162796,162797,162799,162801,162803,162806,162808,162811,162813,162815],{"class":38,"line":2103},[36,162798,31777],{"class":53},[36,162800,345],{"class":42},[36,162802,677],{"class":46},[36,162804,162805],{"class":405},"\"当前余额:",[36,162807,1509],{"class":53},[36,162809,162810],{"class":42},"balance",[36,162812,1559],{"class":53},[36,162814,157413],{"class":405},[36,162816,63],{"class":42},[36,162818,162819],{"class":38,"line":2108},[36,162820,2880],{"emptyLinePlaceholder":553},[36,162822,162823],{"class":38,"line":2122},[36,162824,2880],{"emptyLinePlaceholder":553},[36,162826,162827,162829,162832],{"class":38,"line":2127},[36,162828,32424],{"class":46},[36,162830,162831],{"class":2443}," save_money",[36,162833,32430],{"class":42},[36,162835,162836,162838],{"class":38,"line":2133},[36,162837,162262],{"class":46},[36,162839,150500],{"class":42},[36,162841,162842,162845,162847,162849,162851,162853,162855,162858],{"class":38,"line":2154},[36,162843,162844],{"class":42},"    money ",[36,162846,47],{"class":46},[36,162848,110198],{"class":53},[36,162850,345],{"class":42},[36,162852,54298],{"class":53},[36,162854,345],{"class":42},[36,162856,162857],{"class":405},"\"请输入存款金额:\"",[36,162859,370],{"class":42},[36,162861,162862,162864,162866,162868,162870],{"class":38,"line":2159},[36,162863,3581],{"class":46},[36,162865,150543],{"class":42},[36,162867,2068],{"class":46},[36,162869,4573],{"class":53},[36,162871,4219],{"class":42},[36,162873,162874,162876,162878,162881],{"class":38,"line":2173},[36,162875,32928],{"class":53},[36,162877,345],{"class":42},[36,162879,162880],{"class":405},"\"金额必须大于0\"",[36,162882,63],{"class":42},[36,162884,162885],{"class":38,"line":2178},[36,162886,152762],{"class":46},[36,162888,162889,162892,162894],{"class":38,"line":2207},[36,162890,162891],{"class":42},"    balance ",[36,162893,9957],{"class":46},[36,162895,150576],{"class":42},[36,162897,162898,162900,162902,162905],{"class":38,"line":2212},[36,162899,31777],{"class":53},[36,162901,345],{"class":42},[36,162903,162904],{"class":405},"\"存款成功\"",[36,162906,63],{"class":42},[36,162908,162909],{"class":38,"line":2229},[36,162910,162911],{"class":42},"    show_balance()\n",[36,162913,162914],{"class":38,"line":2234},[36,162915,2880],{"emptyLinePlaceholder":553},[36,162917,162918],{"class":38,"line":2239},[36,162919,2880],{"emptyLinePlaceholder":553},[36,162921,162922,162924,162927],{"class":38,"line":2244},[36,162923,32424],{"class":46},[36,162925,162926],{"class":2443}," withdraw_money",[36,162928,32430],{"class":42},[36,162930,162931,162933],{"class":38,"line":2258},[36,162932,162262],{"class":46},[36,162934,150500],{"class":42},[36,162936,162937,162939,162941,162943,162945,162947,162949,162952],{"class":38,"line":2263},[36,162938,162844],{"class":42},[36,162940,47],{"class":46},[36,162942,110198],{"class":53},[36,162944,345],{"class":42},[36,162946,54298],{"class":53},[36,162948,345],{"class":42},[36,162950,162951],{"class":405},"\"请输入取款金额:\"",[36,162953,370],{"class":42},[36,162955,162956,162958,162960,162962,162964],{"class":38,"line":3057},[36,162957,3581],{"class":46},[36,162959,150543],{"class":42},[36,162961,2068],{"class":46},[36,162963,4573],{"class":53},[36,162965,4219],{"class":42},[36,162967,162968,162970,162972,162974],{"class":38,"line":3071},[36,162969,32928],{"class":53},[36,162971,345],{"class":42},[36,162973,162880],{"class":405},[36,162975,63],{"class":42},[36,162977,162978],{"class":38,"line":3079},[36,162979,152762],{"class":46},[36,162981,162982,162984,162986,162988],{"class":38,"line":3084},[36,162983,3581],{"class":46},[36,162985,150543],{"class":42},[36,162987,1573],{"class":46},[36,162989,162990],{"class":42}," balance:\n",[36,162992,162993,162995,162997,162999],{"class":38,"line":3090},[36,162994,32928],{"class":53},[36,162996,345],{"class":42},[36,162998,150638],{"class":405},[36,163000,63],{"class":42},[36,163002,163003],{"class":38,"line":3096},[36,163004,152762],{"class":46},[36,163006,163007,163009,163011],{"class":38,"line":3101},[36,163008,162891],{"class":42},[36,163010,150653],{"class":46},[36,163012,150576],{"class":42},[36,163014,163015,163017,163019,163022],{"class":38,"line":8428},[36,163016,31777],{"class":53},[36,163018,345],{"class":42},[36,163020,163021],{"class":405},"\"取款成功\"",[36,163023,63],{"class":42},[36,163025,163026],{"class":38,"line":8452},[36,163027,162911],{"class":42},[36,163029,163030],{"class":38,"line":8457},[36,163031,2880],{"emptyLinePlaceholder":553},[36,163033,163034],{"class":38,"line":8463},[36,163035,2880],{"emptyLinePlaceholder":553},[36,163037,163038,163040,163042],{"class":38,"line":8490},[36,163039,109064],{"class":46},[36,163041,95764],{"class":53},[36,163043,4219],{"class":42},[36,163045,163046],{"class":38,"line":8495},[36,163047,163048],{"class":42},"    show_menu()\n",[36,163050,163051,163053,163055,163057,163059,163061],{"class":38,"line":8501},[36,163052,161093],{"class":42},[36,163054,47],{"class":46},[36,163056,61082],{"class":53},[36,163058,345],{"class":42},[36,163060,153474],{"class":405},[36,163062,63],{"class":42},[36,163064,163065],{"class":38,"line":8513},[36,163066,2880],{"emptyLinePlaceholder":553},[36,163068,163069,163071,163073,163075,163077],{"class":38,"line":8525},[36,163070,3581],{"class":46},[36,163072,153487],{"class":42},[36,163074,3429],{"class":46},[36,163076,153492],{"class":405},[36,163078,4219],{"class":42},[36,163080,163081],{"class":38,"line":8537},[36,163082,163083],{"class":42},"        show_balance()\n",[36,163085,163086,163088,163090,163092,163094],{"class":38,"line":10196},[36,163087,39770],{"class":46},[36,163089,153487],{"class":42},[36,163091,3429],{"class":46},[36,163093,153511],{"class":405},[36,163095,4219],{"class":42},[36,163097,163098],{"class":38,"line":10221},[36,163099,163100],{"class":42},"        save_money()\n",[36,163102,163103,163105,163107,163109,163111],{"class":38,"line":10244},[36,163104,39770],{"class":46},[36,163106,153487],{"class":42},[36,163108,3429],{"class":46},[36,163110,153529],{"class":405},[36,163112,4219],{"class":42},[36,163114,163115],{"class":38,"line":10268},[36,163116,163117],{"class":42},"        withdraw_money()\n",[36,163119,163120,163122,163124,163126,163128],{"class":38,"line":10273},[36,163121,39770],{"class":46},[36,163123,153487],{"class":42},[36,163125,3429],{"class":46},[36,163127,153583],{"class":405},[36,163129,4219],{"class":42},[36,163131,163132,163134,163136,163138],{"class":38,"line":10278},[36,163133,32928],{"class":53},[36,163135,345],{"class":42},[36,163137,153594],{"class":405},[36,163139,63],{"class":42},[36,163141,163142],{"class":38,"line":10283},[36,163143,32104],{"class":46},[36,163145,163146,163148],{"class":38,"line":10292},[36,163147,158423],{"class":46},[36,163149,4219],{"class":42},[36,163151,163152,163154,163156,163158],{"class":38,"line":10297},[36,163153,32928],{"class":53},[36,163155,345],{"class":42},[36,163157,153615],{"class":405},[36,163159,63],{"class":42},[19,163161,163162],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163164,163166],{"id":163165},"_514-易错点","5.14 易错点",[579,163168,163169,163172,163175,163180,163185,163188],{},[582,163170,163171],{},"函数定义后必须调用才会执行。",[582,163173,163174],{},"函数名后面有括号才是调用。",[582,163176,163177,163179],{},[33,163178,17526],{}," 后面的代码不会执行。",[582,163181,163182,163183,28866],{},"没有返回值的函数默认返回 ",[33,163184,96157],{},[582,163186,163187],{},"局部变量不能在函数外部访问。",[582,163189,163190,163191,163193],{},"不要滥用 ",[33,163192,162227],{},"，更好的方式是让函数返回新值。",[19,163195,163196,163197,163199],{},"例如不用 ",[33,163198,162227],{}," 改写存款：",[26,163201,163203],{"className":28,"code":163202,"language":30,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[33,163204,163205,163214,163225,163229,163233,163241,163254],{"__ignoreMap":31},[36,163206,163207,163209,163211],{"class":38,"line":39},[36,163208,32424],{"class":46},[36,163210,162831],{"class":2443},[36,163212,163213],{"class":42},"(balance, money):\n",[36,163215,163216,163218,163221,163223],{"class":38,"line":66},[36,163217,4570],{"class":46},[36,163219,163220],{"class":42}," balance ",[36,163222,1097],{"class":46},[36,163224,150576],{"class":42},[36,163226,163227],{"class":38,"line":73},[36,163228,2880],{"emptyLinePlaceholder":553},[36,163230,163231],{"class":38,"line":79},[36,163232,2880],{"emptyLinePlaceholder":553},[36,163234,163235,163237,163239],{"class":38,"line":85},[36,163236,162705],{"class":42},[36,163238,47],{"class":46},[36,163240,162710],{"class":53},[36,163242,163243,163245,163247,163250,163252],{"class":38,"line":419},[36,163244,162705],{"class":42},[36,163246,47],{"class":46},[36,163248,163249],{"class":42}," save_money(balance, ",[36,163251,2202],{"class":53},[36,163253,63],{"class":42},[36,163255,163256,163258],{"class":38,"line":425},[36,163257,30894],{"class":53},[36,163259,163260],{"class":42},"(balance)\n",[14,163262,163264],{"id":163263},"_515-本章练习","5.15 本章练习",[579,163266,163267,163274,163280,163286,163292],{},[582,163268,163269,163270,163273],{},"定义函数 ",[33,163271,163272],{},"print_student(name, age)","，输出学生信息。",[582,163275,163269,163276,163279],{},[33,163277,163278],{},"get_max(a, b, c)","，返回三个数中的最大值。",[582,163281,163269,163282,163285],{},[33,163283,163284],{},"is_even(num)","，判断一个数是否为偶数。",[582,163287,163269,163288,163291],{},[33,163289,163290],{},"calculate_bmi(weight, height)","，返回 BMI。",[582,163293,163294],{},"把第 4 章的菜单程序拆分成多个函数。",[539,163296,163297],{},"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":31,"searchDepth":66,"depth":66,"links":163299},[163300,163301,163302,163303,163304,163305,163306,163307,163308,163312,163313,163314,163315,163316,163317],{"id":161320,"depth":66,"text":161321},{"id":161361,"depth":66,"text":161362},{"id":161451,"depth":66,"text":161452},{"id":161532,"depth":66,"text":161533},{"id":161665,"depth":66,"text":161666},{"id":161787,"depth":66,"text":161788},{"id":161909,"depth":66,"text":161910},{"id":161986,"depth":66,"text":161987},{"id":162108,"depth":66,"text":162109,"children":163309},[163310,163311],{"id":162112,"depth":73,"text":162113},{"id":162170,"depth":73,"text":162171},{"id":162299,"depth":66,"text":162300},{"id":162425,"depth":66,"text":162426},{"id":162538,"depth":66,"text":162539},{"id":162694,"depth":66,"text":162695},{"id":163165,"depth":66,"text":163166},{"id":163263,"depth":66,"text":163264},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161312,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163324,"title":163325,"body":163326,"description":550,"extension":551,"meta":166370,"navigation":553,"path":166371,"seo":166372,"stem":166373,"__hash__":166374},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163327,"toc":166351},[163328,163331,163335,163338,163341,163445,163448,163452,163455,163535,163538,163542,163545,163605,163608,163644,163647,163662,163666,163739,163742,163797,163800,163870,163873,163957,163967,164025,164029,164074,164077,164103,164106,164212,164216,164219,164261,164264,164328,164331,164335,164338,164399,164402,164432,164435,164473,164477,164480,164489,164492,164616,164619,164660,164664,164667,164678,164718,164721,164736,164741,164744,164811,164814,164904,164908,164911,164959,164962,164989,164991,165021,165024,165044,165047,165078,165081,165114,165118,165121,165145,165148,165172,165175,165199,165203,165206,165336,165339,165419,165422,165497,165501,165504,165554,165557,165599,165602,165626,165628,165652,165655,165710,165713,165779,165783,165786,165789,165827,165830,165883,165886,165932,165935,165968,165971,165975,166294,166298,166327,166331,166348],[10,163329,163325],{"id":163330},"_6-数据容器",[14,163332,163334],{"id":163333},"_61-什么是数据容器","6.1 什么是数据容器",[19,163336,163337],{},"数据容器用于一次保存多个数据。",[19,163339,163340],{},"常见容器：",[758,163342,163343,163360],{},[761,163344,163345],{},[764,163346,163347,163349,163352,163355,163358],{},[767,163348,26252],{},[767,163350,163351],{},"是否有序",[767,163353,163354],{},"是否可变",[767,163356,163357],{},"是否允许重复",[767,163359,27973],{},[805,163361,163362,163380,163396,163411,163428],{},[764,163363,163364,163367,163370,163373,163376],{},[810,163365,163366],{},"list列表",[810,163368,163369],{},"有序",[810,163371,163372],{},"可变",[810,163374,163375],{},"允许",[810,163377,163378],{},[33,163379,155658],{},[764,163381,163382,163385,163387,163390,163392],{},[810,163383,163384],{},"tuple元组",[810,163386,163369],{},[810,163388,163389],{},"不可变",[810,163391,163375],{},[810,163393,163394],{},[33,163395,155671],{},[764,163397,163398,163401,163403,163405,163407],{},[810,163399,163400],{},"str字符串",[810,163402,163369],{},[810,163404,163389],{},[810,163406,163375],{},[810,163408,163409],{},[33,163410,156281],{},[764,163412,163413,163416,163419,163421,163424],{},[810,163414,163415],{},"set集合",[810,163417,163418],{},"无序",[810,163420,163372],{},[810,163422,163423],{},"不允许",[810,163425,163426],{},[33,163427,155696],{},[764,163429,163430,163433,163435,163437,163440],{},[810,163431,163432],{},"dict字典",[810,163434,163369],{},[810,163436,163372],{},[810,163438,163439],{},"key不允许重复",[810,163441,163442],{},[33,163443,163444],{},"{\"name\": \"小明\"}",[19,163446,163447],{},"Python 3.7 之后，字典保持插入顺序。",[14,163449,163451],{"id":163450},"_62-列表list","6.2 列表list",[19,163453,163454],{},"列表用于保存一组有顺序的数据。",[26,163456,163458],{"className":28,"code":163457,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,163459,163460,163480,163505,163526],{"__ignoreMap":31},[36,163461,163462,163464,163466,163468,163470,163472,163474,163476,163478],{"class":38,"line":39},[36,163463,160781],{"class":42},[36,163465,47],{"class":46},[36,163467,52703],{"class":42},[36,163469,150289],{"class":405},[36,163471,12915],{"class":42},[36,163473,151337],{"class":405},[36,163475,12915],{"class":42},[36,163477,160132],{"class":405},[36,163479,33723],{"class":42},[36,163481,163482,163485,163487,163489,163491,163493,163495,163497,163499,163501,163503],{"class":38,"line":66},[36,163483,163484],{"class":42},"numbers ",[36,163486,47],{"class":46},[36,163488,52703],{"class":42},[36,163490,54],{"class":53},[36,163492,12915],{"class":42},[36,163494,96],{"class":53},[36,163496,12915],{"class":42},[36,163498,127],{"class":53},[36,163500,12915],{"class":42},[36,163502,912],{"class":53},[36,163504,33723],{"class":42},[36,163506,163507,163510,163512,163514,163516,163518,163520,163522,163524],{"class":38,"line":73},[36,163508,163509],{"class":42},"mixed ",[36,163511,47],{"class":46},[36,163513,52703],{"class":42},[36,163515,150289],{"class":405},[36,163517,12915],{"class":42},[36,163519,1263],{"class":53},[36,163521,12915],{"class":42},[36,163523,31954],{"class":53},[36,163525,33723],{"class":42},[36,163527,163528,163531,163533],{"class":38,"line":79},[36,163529,163530],{"class":42},"empty ",[36,163532,47],{"class":46},[36,163534,52315],{"class":42},[19,163536,163537],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163539,163541],{"id":163540},"_63-列表索引","6.3 列表索引",[19,163543,163544],{},"正向索引从 0 开始：",[26,163546,163548],{"className":28,"code":163547,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,163549,163550,163570,163574,163585,163595],{"__ignoreMap":31},[36,163551,163552,163554,163556,163558,163560,163562,163564,163566,163568],{"class":38,"line":39},[36,163553,160781],{"class":42},[36,163555,47],{"class":46},[36,163557,52703],{"class":42},[36,163559,150289],{"class":405},[36,163561,12915],{"class":42},[36,163563,151337],{"class":405},[36,163565,12915],{"class":42},[36,163567,160132],{"class":405},[36,163569,33723],{"class":42},[36,163571,163572],{"class":38,"line":66},[36,163573,2880],{"emptyLinePlaceholder":553},[36,163575,163576,163578,163581,163583],{"class":38,"line":73},[36,163577,30894],{"class":53},[36,163579,163580],{"class":42},"(names[",[36,163582,812],{"class":53},[36,163584,5137],{"class":42},[36,163586,163587,163589,163591,163593],{"class":38,"line":79},[36,163588,30894],{"class":53},[36,163590,163580],{"class":42},[36,163592,54],{"class":53},[36,163594,5137],{"class":42},[36,163596,163597,163599,163601,163603],{"class":38,"line":85},[36,163598,30894],{"class":53},[36,163600,163580],{"class":42},[36,163602,96],{"class":53},[36,163604,5137],{"class":42},[19,163606,163607],{},"反向索引从 -1 开始：",[26,163609,163611],{"className":28,"code":163610,"language":30,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,163612,163613,163629],{"__ignoreMap":31},[36,163614,163615,163617,163619,163621,163623,163626],{"class":38,"line":39},[36,163616,30894],{"class":53},[36,163618,163580],{"class":42},[36,163620,173],{"class":46},[36,163622,54],{"class":53},[36,163624,163625],{"class":42},"])  ",[36,163627,163628],{"class":69},"# 小刚\n",[36,163630,163631,163633,163635,163637,163639,163641],{"class":38,"line":66},[36,163632,30894],{"class":53},[36,163634,163580],{"class":42},[36,163636,173],{"class":46},[36,163638,96],{"class":53},[36,163640,163625],{"class":42},[36,163642,163643],{"class":69},"# 小红\n",[19,163645,163646],{},"索引越界会报错：",[26,163648,163650],{"className":28,"code":163649,"language":30,"meta":31,"style":31},"print(names[3])\n",[33,163651,163652],{"__ignoreMap":31},[36,163653,163654,163656,163658,163660],{"class":38,"line":39},[36,163655,30894],{"class":53},[36,163657,163580],{"class":42},[36,163659,127],{"class":53},[36,163661,5137],{"class":42},[14,163663,163665],{"id":163664},"_64-列表常用方法","6.4 列表常用方法",[26,163667,163669],{"className":28,"code":163668,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,163670,163671,163687,163691,163700,163714,163728,163732],{"__ignoreMap":31},[36,163672,163673,163675,163677,163679,163681,163683,163685],{"class":38,"line":39},[36,163674,160781],{"class":42},[36,163676,47],{"class":46},[36,163678,52703],{"class":42},[36,163680,150289],{"class":405},[36,163682,12915],{"class":42},[36,163684,151337],{"class":405},[36,163686,33723],{"class":42},[36,163688,163689],{"class":38,"line":66},[36,163690,2880],{"emptyLinePlaceholder":553},[36,163692,163693,163696,163698],{"class":38,"line":73},[36,163694,163695],{"class":42},"names.append(",[36,163697,160132],{"class":405},[36,163699,63],{"class":42},[36,163701,163702,163705,163707,163709,163712],{"class":38,"line":79},[36,163703,163704],{"class":42},"names.insert(",[36,163706,54],{"class":53},[36,163708,12915],{"class":42},[36,163710,163711],{"class":405},"\"小李\"",[36,163713,63],{"class":42},[36,163715,163716,163719,163721,163723,163726],{"class":38,"line":85},[36,163717,163718],{"class":42},"names.extend([",[36,163720,9163],{"class":405},[36,163722,12915],{"class":42},[36,163724,163725],{"class":405},"\"小赵\"",[36,163727,5137],{"class":42},[36,163729,163730],{"class":38,"line":419},[36,163731,2880],{"emptyLinePlaceholder":553},[36,163733,163734,163736],{"class":38,"line":425},[36,163735,30894],{"class":53},[36,163737,163738],{"class":42},"(names)\n",[19,163740,163741],{},"删除元素：",[26,163743,163745],{"className":28,"code":163744,"language":30,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,163746,163747,163756,163766,163780,163792],{"__ignoreMap":31},[36,163748,163749,163752,163754],{"class":38,"line":39},[36,163750,163751],{"class":42},"names.remove(",[36,163753,151337],{"class":405},[36,163755,63],{"class":42},[36,163757,163758,163761,163763],{"class":38,"line":66},[36,163759,163760],{"class":42},"last ",[36,163762,47],{"class":46},[36,163764,163765],{"class":42}," names.pop()\n",[36,163767,163768,163771,163773,163776,163778],{"class":38,"line":73},[36,163769,163770],{"class":42},"first ",[36,163772,47],{"class":46},[36,163774,163775],{"class":42}," names.pop(",[36,163777,812],{"class":53},[36,163779,63],{"class":42},[36,163781,163782,163785,163788,163790],{"class":38,"line":79},[36,163783,163784],{"class":46},"del",[36,163786,163787],{"class":42}," names[",[36,163789,812],{"class":53},[36,163791,33723],{"class":42},[36,163793,163794],{"class":38,"line":85},[36,163795,163796],{"class":42},"names.clear()\n",[19,163798,163799],{},"查询和统计：",[26,163801,163803],{"className":28,"code":163802,"language":30,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[33,163804,163805,163833,163837,163848,163859],{"__ignoreMap":31},[36,163806,163807,163809,163811,163813,163815,163817,163819,163821,163823,163825,163827,163829,163831],{"class":38,"line":39},[36,163808,163484],{"class":42},[36,163810,47],{"class":46},[36,163812,52703],{"class":42},[36,163814,54],{"class":53},[36,163816,12915],{"class":42},[36,163818,96],{"class":53},[36,163820,12915],{"class":42},[36,163822,127],{"class":53},[36,163824,12915],{"class":42},[36,163826,96],{"class":53},[36,163828,12915],{"class":42},[36,163830,912],{"class":53},[36,163832,33723],{"class":42},[36,163834,163835],{"class":38,"line":66},[36,163836,2880],{"emptyLinePlaceholder":553},[36,163838,163839,163841,163844,163846],{"class":38,"line":73},[36,163840,30894],{"class":53},[36,163842,163843],{"class":42},"(numbers.index(",[36,163845,127],{"class":53},[36,163847,370],{"class":42},[36,163849,163850,163852,163855,163857],{"class":38,"line":79},[36,163851,30894],{"class":53},[36,163853,163854],{"class":42},"(numbers.count(",[36,163856,96],{"class":53},[36,163858,370],{"class":42},[36,163860,163861,163863,163865,163867],{"class":38,"line":85},[36,163862,30894],{"class":53},[36,163864,345],{"class":42},[36,163866,7838],{"class":53},[36,163868,163869],{"class":42},"(numbers))\n",[19,163871,163872],{},"排序：",[26,163874,163876],{"className":28,"code":163875,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[33,163877,163878,163902,163906,163911,163918,163922,163936,163942,163946,163951],{"__ignoreMap":31},[36,163879,163880,163882,163884,163886,163888,163890,163892,163894,163896,163898,163900],{"class":38,"line":39},[36,163881,163484],{"class":42},[36,163883,47],{"class":46},[36,163885,52703],{"class":42},[36,163887,127],{"class":53},[36,163889,12915],{"class":42},[36,163891,54],{"class":53},[36,163893,12915],{"class":42},[36,163895,938],{"class":53},[36,163897,12915],{"class":42},[36,163899,96],{"class":53},[36,163901,33723],{"class":42},[36,163903,163904],{"class":38,"line":66},[36,163905,2880],{"emptyLinePlaceholder":553},[36,163907,163908],{"class":38,"line":73},[36,163909,163910],{"class":42},"numbers.sort()\n",[36,163912,163913,163915],{"class":38,"line":79},[36,163914,30894],{"class":53},[36,163916,163917],{"class":42},"(numbers)\n",[36,163919,163920],{"class":38,"line":85},[36,163921,2880],{"emptyLinePlaceholder":553},[36,163923,163924,163927,163930,163932,163934],{"class":38,"line":419},[36,163925,163926],{"class":42},"numbers.sort(",[36,163928,163929],{"class":5696},"reverse",[36,163931,47],{"class":46},[36,163933,31954],{"class":53},[36,163935,63],{"class":42},[36,163937,163938,163940],{"class":38,"line":425},[36,163939,30894],{"class":53},[36,163941,163917],{"class":42},[36,163943,163944],{"class":38,"line":431},[36,163945,2880],{"emptyLinePlaceholder":553},[36,163947,163948],{"class":38,"line":437},[36,163949,163950],{"class":42},"numbers.reverse()\n",[36,163952,163953,163955],{"class":38,"line":443},[36,163954,30894],{"class":53},[36,163956,163917],{"class":42},[19,163958,163959,163962,163963,163966],{},[33,163960,163961],{},"sort()"," 会修改原列表，",[33,163964,163965],{},"sorted()"," 返回新列表。",[26,163968,163970],{"className":28,"code":163969,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,163971,163972,163996,164008,164012,164018],{"__ignoreMap":31},[36,163973,163974,163976,163978,163980,163982,163984,163986,163988,163990,163992,163994],{"class":38,"line":39},[36,163975,163484],{"class":42},[36,163977,47],{"class":46},[36,163979,52703],{"class":42},[36,163981,127],{"class":53},[36,163983,12915],{"class":42},[36,163985,54],{"class":53},[36,163987,12915],{"class":42},[36,163989,938],{"class":53},[36,163991,12915],{"class":42},[36,163993,96],{"class":53},[36,163995,33723],{"class":42},[36,163997,163998,164001,164003,164006],{"class":38,"line":66},[36,163999,164000],{"class":42},"new_numbers ",[36,164002,47],{"class":46},[36,164004,164005],{"class":53}," sorted",[36,164007,163917],{"class":42},[36,164009,164010],{"class":38,"line":73},[36,164011,2880],{"emptyLinePlaceholder":553},[36,164013,164014,164016],{"class":38,"line":79},[36,164015,30894],{"class":53},[36,164017,163917],{"class":42},[36,164019,164020,164022],{"class":38,"line":85},[36,164021,30894],{"class":53},[36,164023,164024],{"class":42},"(new_numbers)\n",[14,164026,164028],{"id":164027},"_65-列表遍历","6.5 列表遍历",[26,164030,164032],{"className":28,"code":164031,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,164033,164034,164054,164058,164068],{"__ignoreMap":31},[36,164035,164036,164038,164040,164042,164044,164046,164048,164050,164052],{"class":38,"line":39},[36,164037,160781],{"class":42},[36,164039,47],{"class":46},[36,164041,52703],{"class":42},[36,164043,150289],{"class":405},[36,164045,12915],{"class":42},[36,164047,151337],{"class":405},[36,164049,12915],{"class":42},[36,164051,160132],{"class":405},[36,164053,33723],{"class":42},[36,164055,164056],{"class":38,"line":66},[36,164057,2880],{"emptyLinePlaceholder":553},[36,164059,164060,164062,164064,164066],{"class":38,"line":73},[36,164061,3505],{"class":46},[36,164063,160817],{"class":42},[36,164065,26524],{"class":46},[36,164067,160822],{"class":42},[36,164069,164070,164072],{"class":38,"line":79},[36,164071,31777],{"class":53},[36,164073,151061],{"class":42},[19,164075,164076],{},"需要索引时：",[26,164078,164080],{"className":28,"code":164079,"language":30,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,164081,164082,164096],{"__ignoreMap":31},[36,164083,164084,164086,164089,164091,164093],{"class":38,"line":39},[36,164085,3505],{"class":46},[36,164087,164088],{"class":42}," index, name ",[36,164090,26524],{"class":46},[36,164092,32083],{"class":53},[36,164094,164095],{"class":42},"(names):\n",[36,164097,164098,164100],{"class":38,"line":66},[36,164099,31777],{"class":53},[36,164101,164102],{"class":42},"(index, name)\n",[19,164104,164105],{},"统计总分：",[26,164107,164109],{"className":28,"code":164108,"language":30,"meta":31,"style":31},"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",[33,164110,164111,164136,164144,164148,164159,164167,164171,164188],{"__ignoreMap":31},[36,164112,164113,164116,164118,164120,164122,164124,164126,164128,164130,164132,164134],{"class":38,"line":39},[36,164114,164115],{"class":42},"scores ",[36,164117,47],{"class":46},[36,164119,52703],{"class":42},[36,164121,1475],{"class":53},[36,164123,12915],{"class":42},[36,164125,1349],{"class":53},[36,164127,12915],{"class":42},[36,164129,873],{"class":53},[36,164131,12915],{"class":42},[36,164133,1174],{"class":53},[36,164135,33723],{"class":42},[36,164137,164138,164140,164142],{"class":38,"line":66},[36,164139,157661],{"class":42},[36,164141,47],{"class":46},[36,164143,47810],{"class":53},[36,164145,164146],{"class":38,"line":73},[36,164147,2880],{"emptyLinePlaceholder":553},[36,164149,164150,164152,164154,164156],{"class":38,"line":79},[36,164151,3505],{"class":46},[36,164153,158184],{"class":42},[36,164155,26524],{"class":46},[36,164157,164158],{"class":42}," scores:\n",[36,164160,164161,164163,164165],{"class":38,"line":85},[36,164162,159708],{"class":42},[36,164164,9957],{"class":46},[36,164166,2059],{"class":42},[36,164168,164169],{"class":38,"line":419},[36,164170,2880],{"emptyLinePlaceholder":553},[36,164172,164173,164176,164178,164181,164183,164185],{"class":38,"line":425},[36,164174,164175],{"class":42},"avg ",[36,164177,47],{"class":46},[36,164179,164180],{"class":42}," total ",[36,164182,1197],{"class":46},[36,164184,7811],{"class":53},[36,164186,164187],{"class":42},"(scores)\n",[36,164189,164190,164192,164194,164196,164199,164201,164204,164206,164208,164210],{"class":38,"line":431},[36,164191,30894],{"class":53},[36,164193,345],{"class":42},[36,164195,677],{"class":46},[36,164197,164198],{"class":405},"\"平均分:",[36,164200,1509],{"class":53},[36,164202,164203],{"class":42},"avg",[36,164205,157560],{"class":46},[36,164207,1559],{"class":53},[36,164209,870],{"class":405},[36,164211,63],{"class":42},[14,164213,164215],{"id":164214},"_66-元组tuple","6.6 元组tuple",[19,164217,164218],{},"元组和列表类似，但不可修改。",[26,164220,164222],{"className":28,"code":164221,"language":30,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,164223,164224,164241],{"__ignoreMap":31},[36,164225,164226,164229,164231,164233,164235,164237,164239],{"class":38,"line":39},[36,164227,164228],{"class":42},"point ",[36,164230,47],{"class":46},[36,164232,2138],{"class":42},[36,164234,1062],{"class":53},[36,164236,12915],{"class":42},[36,164238,1313],{"class":53},[36,164240,63],{"class":42},[36,164242,164243,164245,164247,164249,164251,164253,164255,164257,164259],{"class":38,"line":66},[36,164244,116715],{"class":42},[36,164246,47],{"class":46},[36,164248,2138],{"class":42},[36,164250,150289],{"class":405},[36,164252,12915],{"class":42},[36,164254,1263],{"class":53},[36,164256,12915],{"class":42},[36,164258,69746],{"class":405},[36,164260,63],{"class":42},[19,164262,164263],{},"单元素元组必须加逗号：",[26,164265,164267],{"className":28,"code":164266,"language":30,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,164268,164269,164283,164296,164300,164314],{"__ignoreMap":31},[36,164270,164271,164274,164276,164278,164280],{"class":38,"line":39},[36,164272,164273],{"class":42},"t1 ",[36,164275,47],{"class":46},[36,164277,2138],{"class":42},[36,164279,1062],{"class":53},[36,164281,164282],{"class":42},",)\n",[36,164284,164285,164288,164290,164292,164294],{"class":38,"line":66},[36,164286,164287],{"class":42},"t2 ",[36,164289,47],{"class":46},[36,164291,2138],{"class":42},[36,164293,1062],{"class":53},[36,164295,63],{"class":42},[36,164297,164298],{"class":38,"line":73},[36,164299,2880],{"emptyLinePlaceholder":553},[36,164301,164302,164304,164306,164308,164311],{"class":38,"line":79},[36,164303,30894],{"class":53},[36,164305,345],{"class":42},[36,164307,103508],{"class":53},[36,164309,164310],{"class":42},"(t1))  ",[36,164312,164313],{"class":69},"# tuple\n",[36,164315,164316,164318,164320,164322,164325],{"class":38,"line":85},[36,164317,30894],{"class":53},[36,164319,345],{"class":42},[36,164321,103508],{"class":53},[36,164323,164324],{"class":42},"(t2))  ",[36,164326,164327],{"class":69},"# int\n",[19,164329,164330],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164332,164334],{"id":164333},"_67-字符串str","6.7 字符串str",[19,164336,164337],{},"字符串也是序列，可以索引、切片和遍历。",[26,164339,164341],{"className":28,"code":164340,"language":30,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[33,164342,164343,164351,164355,164366,164378,164382,164393],{"__ignoreMap":31},[36,164344,164345,164347,164349],{"class":38,"line":39},[36,164346,156845],{"class":42},[36,164348,47],{"class":46},[36,164350,160082],{"class":405},[36,164352,164353],{"class":38,"line":66},[36,164354,2880],{"emptyLinePlaceholder":553},[36,164356,164357,164359,164362,164364],{"class":38,"line":73},[36,164358,30894],{"class":53},[36,164360,164361],{"class":42},"(text[",[36,164363,812],{"class":53},[36,164365,5137],{"class":42},[36,164367,164368,164370,164372,164374,164376],{"class":38,"line":79},[36,164369,30894],{"class":53},[36,164371,164361],{"class":42},[36,164373,173],{"class":46},[36,164375,54],{"class":53},[36,164377,5137],{"class":42},[36,164379,164380],{"class":38,"line":85},[36,164381,2880],{"emptyLinePlaceholder":553},[36,164383,164384,164386,164388,164390],{"class":38,"line":419},[36,164385,3505],{"class":46},[36,164387,160093],{"class":42},[36,164389,26524],{"class":46},[36,164391,164392],{"class":42}," text:\n",[36,164394,164395,164397],{"class":38,"line":425},[36,164396,31777],{"class":53},[36,164398,160104],{"class":42},[19,164400,164401],{},"字符串不可变：",[26,164403,164405],{"className":28,"code":164404,"language":30,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,164406,164407,164415],{"__ignoreMap":31},[36,164408,164409,164411,164413],{"class":38,"line":39},[36,164410,156845],{"class":42},[36,164412,47],{"class":46},[36,164414,160082],{"class":405},[36,164416,164417,164420,164422,164424,164426,164429],{"class":38,"line":66},[36,164418,164419],{"class":42},"text[",[36,164421,812],{"class":53},[36,164423,4923],{"class":42},[36,164425,47],{"class":46},[36,164427,164428],{"class":405}," \"P\"",[36,164430,164431],{"class":69},"  # 报错\n",[19,164433,164434],{},"如果要得到新字符串：",[26,164436,164438],{"className":28,"code":164437,"language":30,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,164439,164440,164448,164466],{"__ignoreMap":31},[36,164441,164442,164444,164446],{"class":38,"line":39},[36,164443,156845],{"class":42},[36,164445,47],{"class":46},[36,164447,160082],{"class":405},[36,164449,164450,164452,164454,164456,164458,164461,164463],{"class":38,"line":66},[36,164451,156845],{"class":42},[36,164453,47],{"class":46},[36,164455,164428],{"class":405},[36,164457,46043],{"class":46},[36,164459,164460],{"class":42}," text[",[36,164462,54],{"class":53},[36,164464,164465],{"class":42},":]\n",[36,164467,164468,164470],{"class":38,"line":73},[36,164469,30894],{"class":53},[36,164471,164472],{"class":42},"(text)\n",[14,164474,164476],{"id":164475},"_68-切片","6.8 切片",[19,164478,164479],{},"切片用于从序列中取一部分。",[26,164481,164483],{"className":28,"code":164482,"language":30,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,164484,164485],{"__ignoreMap":31},[36,164486,164487],{"class":38,"line":39},[36,164488,164482],{"class":42},[19,164490,164491],{},"结束位置不包含。",[26,164493,164495],{"className":28,"code":164494,"language":30,"meta":31,"style":31},"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",[33,164496,164497,164534,164538,164557,164572,164586,164600],{"__ignoreMap":31},[36,164498,164499,164502,164504,164506,164508,164510,164512,164514,164516,164518,164520,164522,164524,164526,164528,164530,164532],{"class":38,"line":39},[36,164500,164501],{"class":42},"nums ",[36,164503,47],{"class":46},[36,164505,52703],{"class":42},[36,164507,812],{"class":53},[36,164509,12915],{"class":42},[36,164511,54],{"class":53},[36,164513,12915],{"class":42},[36,164515,96],{"class":53},[36,164517,12915],{"class":42},[36,164519,127],{"class":53},[36,164521,12915],{"class":42},[36,164523,912],{"class":53},[36,164525,12915],{"class":42},[36,164527,938],{"class":53},[36,164529,12915],{"class":42},[36,164531,101],{"class":53},[36,164533,33723],{"class":42},[36,164535,164536],{"class":38,"line":66},[36,164537,2880],{"emptyLinePlaceholder":553},[36,164539,164540,164542,164545,164547,164549,164551,164554],{"class":38,"line":73},[36,164541,30894],{"class":53},[36,164543,164544],{"class":42},"(nums[",[36,164546,54],{"class":53},[36,164548,1472],{"class":42},[36,164550,912],{"class":53},[36,164552,164553],{"class":42},"])    ",[36,164555,164556],{"class":69},"# [1, 2, 3]\n",[36,164558,164559,164561,164564,164566,164569],{"class":38,"line":79},[36,164560,30894],{"class":53},[36,164562,164563],{"class":42},"(nums[:",[36,164565,127],{"class":53},[36,164567,164568],{"class":42},"])     ",[36,164570,164571],{"class":69},"# [0, 1, 2]\n",[36,164573,164574,164576,164578,164580,164583],{"class":38,"line":85},[36,164575,30894],{"class":53},[36,164577,164544],{"class":42},[36,164579,127],{"class":53},[36,164581,164582],{"class":42},":])     ",[36,164584,164585],{"class":69},"# [3, 4, 5, 6]\n",[36,164587,164588,164590,164593,164595,164597],{"class":38,"line":419},[36,164589,30894],{"class":53},[36,164591,164592],{"class":42},"(nums[::",[36,164594,96],{"class":53},[36,164596,164553],{"class":42},[36,164598,164599],{"class":69},"# [0, 2, 4, 6]\n",[36,164601,164602,164604,164606,164608,164610,164613],{"class":38,"line":425},[36,164603,30894],{"class":53},[36,164605,164592],{"class":42},[36,164607,173],{"class":46},[36,164609,54],{"class":53},[36,164611,164612],{"class":42},"])   ",[36,164614,164615],{"class":69},"# 反转\n",[19,164617,164618],{},"字符串切片：",[26,164620,164622],{"className":28,"code":164621,"language":30,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,164623,164624,164633,164647],{"__ignoreMap":31},[36,164625,164626,164628,164630],{"class":38,"line":39},[36,164627,156845],{"class":42},[36,164629,47],{"class":46},[36,164631,164632],{"class":405}," \"abcdef\"\n",[36,164634,164635,164637,164639,164641,164643,164645],{"class":38,"line":66},[36,164636,30894],{"class":53},[36,164638,164361],{"class":42},[36,164640,54],{"class":53},[36,164642,1472],{"class":42},[36,164644,912],{"class":53},[36,164646,5137],{"class":42},[36,164648,164649,164651,164654,164656,164658],{"class":38,"line":73},[36,164650,30894],{"class":53},[36,164652,164653],{"class":42},"(text[::",[36,164655,173],{"class":46},[36,164657,54],{"class":53},[36,164659,5137],{"class":42},[14,164661,164663],{"id":164662},"_69-集合set","6.9 集合set",[19,164665,164666],{},"集合特点：",[579,164668,164669,164672,164675],{},[582,164670,164671],{},"无序。",[582,164673,164674],{},"元素不重复。",[582,164676,164677],{},"可以做交集、并集、差集。",[26,164679,164681],{"className":28,"code":164680,"language":30,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,164682,164683,164711],{"__ignoreMap":31},[36,164684,164685,164687,164689,164691,164693,164695,164697,164699,164701,164703,164705,164707,164709],{"class":38,"line":39},[36,164686,164501],{"class":42},[36,164688,47],{"class":46},[36,164690,4928],{"class":42},[36,164692,54],{"class":53},[36,164694,12915],{"class":42},[36,164696,96],{"class":53},[36,164698,12915],{"class":42},[36,164700,127],{"class":53},[36,164702,12915],{"class":42},[36,164704,127],{"class":53},[36,164706,12915],{"class":42},[36,164708,912],{"class":53},[36,164710,2045],{"class":42},[36,164712,164713,164715],{"class":38,"line":66},[36,164714,30894],{"class":53},[36,164716,164717],{"class":42},"(nums)\n",[19,164719,164720],{},"创建空集合：",[26,164722,164724],{"className":28,"code":164723,"language":30,"meta":31,"style":31},"s = set()\n",[33,164725,164726],{"__ignoreMap":31},[36,164727,164728,164730,164732,164734],{"class":38,"line":39},[36,164729,11059],{"class":42},[36,164731,47],{"class":46},[36,164733,120123],{"class":53},[36,164735,2456],{"class":42},[19,164737,9505,164738,164740],{},[33,164739,32936],{}," 是空字典，不是空集合。",[19,164742,164743],{},"集合常用操作：",[26,164745,164747],{"className":28,"code":164746,"language":30,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[33,164748,164749,164769,164773,164782,164791,164800],{"__ignoreMap":31},[36,164750,164751,164753,164755,164757,164759,164761,164763,164765,164767],{"class":38,"line":39},[36,164752,11059],{"class":42},[36,164754,47],{"class":46},[36,164756,4928],{"class":42},[36,164758,54],{"class":53},[36,164760,12915],{"class":42},[36,164762,96],{"class":53},[36,164764,12915],{"class":42},[36,164766,127],{"class":53},[36,164768,2045],{"class":42},[36,164770,164771],{"class":38,"line":66},[36,164772,2880],{"emptyLinePlaceholder":553},[36,164774,164775,164778,164780],{"class":38,"line":73},[36,164776,164777],{"class":42},"s.add(",[36,164779,912],{"class":53},[36,164781,63],{"class":42},[36,164783,164784,164787,164789],{"class":38,"line":79},[36,164785,164786],{"class":42},"s.remove(",[36,164788,96],{"class":53},[36,164790,63],{"class":42},[36,164792,164793,164796,164798],{"class":38,"line":85},[36,164794,164795],{"class":42},"s.discard(",[36,164797,1062],{"class":53},[36,164799,63],{"class":42},[36,164801,164802,164804,164806,164808],{"class":38,"line":419},[36,164803,30894],{"class":53},[36,164805,345],{"class":42},[36,164807,7838],{"class":53},[36,164809,164810],{"class":42},"(s))\n",[19,164812,164813],{},"交并差：",[26,164815,164817],{"className":28,"code":164816,"language":30,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[33,164818,164819,164839,164859,164863,164878,164891],{"__ignoreMap":31},[36,164820,164821,164823,164825,164827,164829,164831,164833,164835,164837],{"class":38,"line":39},[36,164822,11399],{"class":42},[36,164824,47],{"class":46},[36,164826,4928],{"class":42},[36,164828,54],{"class":53},[36,164830,12915],{"class":42},[36,164832,96],{"class":53},[36,164834,12915],{"class":42},[36,164836,127],{"class":53},[36,164838,2045],{"class":42},[36,164840,164841,164843,164845,164847,164849,164851,164853,164855,164857],{"class":38,"line":66},[36,164842,11425],{"class":42},[36,164844,47],{"class":46},[36,164846,4928],{"class":42},[36,164848,127],{"class":53},[36,164850,12915],{"class":42},[36,164852,912],{"class":53},[36,164854,12915],{"class":42},[36,164856,938],{"class":53},[36,164858,2045],{"class":42},[36,164860,164861],{"class":38,"line":73},[36,164862,2880],{"emptyLinePlaceholder":553},[36,164864,164865,164867,164870,164872,164875],{"class":38,"line":79},[36,164866,30894],{"class":53},[36,164868,164869],{"class":42},"(a ",[36,164871,971],{"class":46},[36,164873,164874],{"class":42}," b)  ",[36,164876,164877],{"class":69},"# 交集\n",[36,164879,164880,164882,164884,164886,164888],{"class":38,"line":85},[36,164881,30894],{"class":53},[36,164883,164869],{"class":42},[36,164885,1534],{"class":46},[36,164887,164874],{"class":42},[36,164889,164890],{"class":69},"# 并集\n",[36,164892,164893,164895,164897,164899,164901],{"class":38,"line":419},[36,164894,30894],{"class":53},[36,164896,164869],{"class":42},[36,164898,173],{"class":46},[36,164900,164874],{"class":42},[36,164902,164903],{"class":69},"# 差集\n",[14,164905,164907],{"id":164906},"_610-字典dict","6.10 字典dict",[19,164909,164910],{},"字典通过 key-value 保存数据。",[26,164912,164914],{"className":28,"code":164913,"language":30,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,164915,164916,164924,164934,164945,164955],{"__ignoreMap":31},[36,164917,164918,164920,164922],{"class":38,"line":39},[36,164919,149882],{"class":42},[36,164921,47],{"class":46},[36,164923,16052],{"class":42},[36,164925,164926,164928,164930,164932],{"class":38,"line":66},[36,164927,147421],{"class":405},[36,164929,51914],{"class":42},[36,164931,150289],{"class":405},[36,164933,31944],{"class":42},[36,164935,164936,164939,164941,164943],{"class":38,"line":73},[36,164937,164938],{"class":405},"    \"age\"",[36,164940,51914],{"class":42},[36,164942,1263],{"class":53},[36,164944,31944],{"class":42},[36,164946,164947,164950,164952],{"class":38,"line":79},[36,164948,164949],{"class":405},"    \"score\"",[36,164951,51914],{"class":42},[36,164953,164954],{"class":53},"95\n",[36,164956,164957],{"class":38,"line":85},[36,164958,2045],{"class":42},[19,164960,164961],{},"获取值：",[26,164963,164965],{"className":28,"code":164964,"language":30,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,164966,164967,164978],{"__ignoreMap":31},[36,164968,164969,164971,164974,164976],{"class":38,"line":39},[36,164970,30894],{"class":53},[36,164972,164973],{"class":42},"(student[",[36,164975,63156],{"class":405},[36,164977,5137],{"class":42},[36,164979,164980,164982,164985,164987],{"class":38,"line":66},[36,164981,30894],{"class":53},[36,164983,164984],{"class":42},"(student.get(",[36,164986,63156],{"class":405},[36,164988,370],{"class":42},[19,164990,15868],{},[26,164992,164994],{"className":28,"code":164993,"language":30,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,164995,164996,165009],{"__ignoreMap":31},[36,164997,164998,165000,165003,165006],{"class":38,"line":39},[36,164999,153260],{"class":42},[36,165001,165002],{"class":405},"\"address\"",[36,165004,165005],{"class":42},"]     ",[36,165007,165008],{"class":69},"# key不存在会报错\n",[36,165010,165011,165014,165016,165018],{"class":38,"line":66},[36,165012,165013],{"class":42},"student.get(",[36,165015,165002],{"class":405},[36,165017,14194],{"class":42},[36,165019,165020],{"class":69},"# key不存在返回None\n",[19,165022,165023],{},"设置默认值：",[26,165025,165027],{"className":28,"code":165026,"language":30,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,165028,165029],{"__ignoreMap":31},[36,165030,165031,165033,165035,165037,165039,165042],{"class":38,"line":39},[36,165032,30894],{"class":53},[36,165034,164984],{"class":42},[36,165036,165002],{"class":405},[36,165038,12915],{"class":42},[36,165040,165041],{"class":405},"\"未知\"",[36,165043,370],{"class":42},[19,165045,165046],{},"新增和修改：",[26,165048,165050],{"className":28,"code":165049,"language":30,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,165051,165052,165065],{"__ignoreMap":31},[36,165053,165054,165056,165058,165060,165062],{"class":38,"line":39},[36,165055,153260],{"class":42},[36,165057,69601],{"class":405},[36,165059,4923],{"class":42},[36,165061,47],{"class":46},[36,165063,165064],{"class":53}," 19\n",[36,165066,165067,165069,165071,165073,165075],{"class":38,"line":66},[36,165068,153260],{"class":42},[36,165070,165002],{"class":405},[36,165072,4923],{"class":42},[36,165074,47],{"class":46},[36,165076,165077],{"class":405}," \"北京\"\n",[19,165079,165080],{},"删除：",[26,165082,165084],{"className":28,"code":165083,"language":30,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,165085,165086,165099,165109],{"__ignoreMap":31},[36,165087,165088,165090,165092,165095,165097],{"class":38,"line":39},[36,165089,155759],{"class":42},[36,165091,47],{"class":46},[36,165093,165094],{"class":42}," student.pop(",[36,165096,151873],{"class":405},[36,165098,63],{"class":42},[36,165100,165101,165103,165105,165107],{"class":38,"line":66},[36,165102,163784],{"class":46},[36,165104,152550],{"class":42},[36,165106,69601],{"class":405},[36,165108,33723],{"class":42},[36,165110,165111],{"class":38,"line":73},[36,165112,165113],{"class":42},"student.clear()\n",[14,165115,165117],{"id":165116},"_611-字典遍历","6.11 字典遍历",[19,165119,165120],{},"遍历 key：",[26,165122,165124],{"className":28,"code":165123,"language":30,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,165125,165126,165138],{"__ignoreMap":31},[36,165127,165128,165130,165133,165135],{"class":38,"line":39},[36,165129,3505],{"class":46},[36,165131,165132],{"class":42}," key ",[36,165134,26524],{"class":46},[36,165136,165137],{"class":42}," student:\n",[36,165139,165140,165142],{"class":38,"line":66},[36,165141,31777],{"class":53},[36,165143,165144],{"class":42},"(key, student[key])\n",[19,165146,165147],{},"遍历 value：",[26,165149,165151],{"className":28,"code":165150,"language":30,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,165152,165153,165165],{"__ignoreMap":31},[36,165154,165155,165157,165160,165162],{"class":38,"line":39},[36,165156,3505],{"class":46},[36,165158,165159],{"class":42}," value ",[36,165161,26524],{"class":46},[36,165163,165164],{"class":42}," student.values():\n",[36,165166,165167,165169],{"class":38,"line":66},[36,165168,31777],{"class":53},[36,165170,165171],{"class":42},"(value)\n",[19,165173,165174],{},"遍历 key 和 value：",[26,165176,165178],{"className":28,"code":165177,"language":30,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,165179,165180,165192],{"__ignoreMap":31},[36,165181,165182,165184,165187,165189],{"class":38,"line":39},[36,165183,3505],{"class":46},[36,165185,165186],{"class":42}," key, value ",[36,165188,26524],{"class":46},[36,165190,165191],{"class":42}," student.items():\n",[36,165193,165194,165196],{"class":38,"line":66},[36,165195,31777],{"class":53},[36,165197,165198],{"class":42},"(key, value)\n",[14,165200,165202],{"id":165201},"_612-嵌套容器","6.12 嵌套容器",[19,165204,165205],{},"列表中保存字典，是项目中最常见的结构之一。",[26,165207,165209],{"className":28,"code":165208,"language":30,"meta":31,"style":31},"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",[33,165210,165211,165219,165247,165275,165303,165307,165311,165321],{"__ignoreMap":31},[36,165212,165213,165215,165217],{"class":38,"line":39},[36,165214,160117],{"class":42},[36,165216,47],{"class":46},[36,165218,55924],{"class":42},[36,165220,165221,165223,165225,165227,165229,165231,165233,165235,165237,165239,165241,165243,165245],{"class":38,"line":66},[36,165222,148786],{"class":42},[36,165224,63156],{"class":405},[36,165226,51914],{"class":42},[36,165228,150289],{"class":405},[36,165230,12915],{"class":42},[36,165232,69601],{"class":405},[36,165234,51914],{"class":42},[36,165236,1263],{"class":53},[36,165238,12915],{"class":42},[36,165240,151873],{"class":405},[36,165242,51914],{"class":42},[36,165244,1602],{"class":53},[36,165246,5410],{"class":42},[36,165248,165249,165251,165253,165255,165257,165259,165261,165263,165265,165267,165269,165271,165273],{"class":38,"line":73},[36,165250,148786],{"class":42},[36,165252,63156],{"class":405},[36,165254,51914],{"class":42},[36,165256,151337],{"class":405},[36,165258,12915],{"class":42},[36,165260,69601],{"class":405},[36,165262,51914],{"class":42},[36,165264,1238],{"class":53},[36,165266,12915],{"class":42},[36,165268,151873],{"class":405},[36,165270,51914],{"class":42},[36,165272,1424],{"class":53},[36,165274,5410],{"class":42},[36,165276,165277,165279,165281,165283,165285,165287,165289,165291,165293,165295,165297,165299,165301],{"class":38,"line":79},[36,165278,148786],{"class":42},[36,165280,63156],{"class":405},[36,165282,51914],{"class":42},[36,165284,160132],{"class":405},[36,165286,12915],{"class":42},[36,165288,69601],{"class":405},[36,165290,51914],{"class":42},[36,165292,1288],{"class":53},[36,165294,12915],{"class":42},[36,165296,151873],{"class":405},[36,165298,51914],{"class":42},[36,165300,1023],{"class":53},[36,165302,5410],{"class":42},[36,165304,165305],{"class":38,"line":85},[36,165306,33723],{"class":42},[36,165308,165309],{"class":38,"line":419},[36,165310,2880],{"emptyLinePlaceholder":553},[36,165312,165313,165315,165317,165319],{"class":38,"line":425},[36,165314,3505],{"class":46},[36,165316,152538],{"class":42},[36,165318,26524],{"class":46},[36,165320,152543],{"class":42},[36,165322,165323,165325,165327,165329,165332,165334],{"class":38,"line":431},[36,165324,31777],{"class":53},[36,165326,164973],{"class":42},[36,165328,63156],{"class":405},[36,165330,165331],{"class":42},"], student[",[36,165333,151873],{"class":405},[36,165335,5137],{"class":42},[19,165337,165338],{},"统计平均分：",[26,165340,165342],{"className":28,"code":165341,"language":30,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[33,165343,165344,165352,165356,165366,165378,165382,165397],{"__ignoreMap":31},[36,165345,165346,165348,165350],{"class":38,"line":39},[36,165347,157661],{"class":42},[36,165349,47],{"class":46},[36,165351,47810],{"class":53},[36,165353,165354],{"class":38,"line":66},[36,165355,2880],{"emptyLinePlaceholder":553},[36,165357,165358,165360,165362,165364],{"class":38,"line":73},[36,165359,3505],{"class":46},[36,165361,152538],{"class":42},[36,165363,26524],{"class":46},[36,165365,152543],{"class":42},[36,165367,165368,165370,165372,165374,165376],{"class":38,"line":79},[36,165369,159708],{"class":42},[36,165371,9957],{"class":46},[36,165373,152550],{"class":42},[36,165375,151873],{"class":405},[36,165377,33723],{"class":42},[36,165379,165380],{"class":38,"line":85},[36,165381,2880],{"emptyLinePlaceholder":553},[36,165383,165384,165386,165388,165390,165392,165394],{"class":38,"line":419},[36,165385,164175],{"class":42},[36,165387,47],{"class":46},[36,165389,164180],{"class":42},[36,165391,1197],{"class":46},[36,165393,7811],{"class":53},[36,165395,165396],{"class":42},"(students)\n",[36,165398,165399,165401,165403,165405,165407,165409,165411,165413,165415,165417],{"class":38,"line":425},[36,165400,30894],{"class":53},[36,165402,345],{"class":42},[36,165404,677],{"class":46},[36,165406,164198],{"class":405},[36,165408,1509],{"class":53},[36,165410,164203],{"class":42},[36,165412,157560],{"class":46},[36,165414,1559],{"class":53},[36,165416,870],{"class":405},[36,165418,63],{"class":42},[19,165420,165421],{},"查找学生：",[26,165423,165425],{"className":28,"code":165424,"language":30,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[33,165426,165427,165442,165446,165456,165470,165476,165480,165486],{"__ignoreMap":31},[36,165428,165429,165431,165433,165435,165437,165440],{"class":38,"line":39},[36,165430,111979],{"class":42},[36,165432,47],{"class":46},[36,165434,61082],{"class":53},[36,165436,345],{"class":42},[36,165438,165439],{"class":405},"\"请输入学生姓名:\"",[36,165441,63],{"class":42},[36,165443,165444],{"class":38,"line":66},[36,165445,2880],{"emptyLinePlaceholder":553},[36,165447,165448,165450,165452,165454],{"class":38,"line":73},[36,165449,3505],{"class":46},[36,165451,152538],{"class":42},[36,165453,26524],{"class":46},[36,165455,152543],{"class":42},[36,165457,165458,165460,165462,165464,165466,165468],{"class":38,"line":79},[36,165459,3581],{"class":46},[36,165461,152550],{"class":42},[36,165463,63156],{"class":405},[36,165465,4923],{"class":42},[36,165467,3429],{"class":46},[36,165469,160833],{"class":42},[36,165471,165472,165474],{"class":38,"line":85},[36,165473,32928],{"class":53},[36,165475,150443],{"class":42},[36,165477,165478],{"class":38,"line":419},[36,165479,32104],{"class":46},[36,165481,165482,165484],{"class":38,"line":425},[36,165483,2181],{"class":46},[36,165485,4219],{"class":42},[36,165487,165488,165490,165492,165495],{"class":38,"line":431},[36,165489,31777],{"class":53},[36,165491,345],{"class":42},[36,165493,165494],{"class":405},"\"没有找到\"",[36,165496,63],{"class":42},[14,165498,165500],{"id":165499},"_613-容器通用操作","6.13 容器通用操作",[19,165502,165503],{},"长度：",[26,165505,165507],{"className":28,"code":165506,"language":30,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,165508,165509,165528,165538],{"__ignoreMap":31},[36,165510,165511,165513,165516,165518,165520,165522,165524,165526],{"class":38,"line":39},[36,165512,7838],{"class":53},[36,165514,165515],{"class":42},"([",[36,165517,54],{"class":53},[36,165519,12915],{"class":42},[36,165521,96],{"class":53},[36,165523,12915],{"class":42},[36,165525,127],{"class":53},[36,165527,5137],{"class":42},[36,165529,165530,165532,165534,165536],{"class":38,"line":66},[36,165531,7838],{"class":53},[36,165533,345],{"class":42},[36,165535,156281],{"class":405},[36,165537,63],{"class":42},[36,165539,165540,165542,165545,165547,165549,165551],{"class":38,"line":73},[36,165541,7838],{"class":53},[36,165543,165544],{"class":42},"({",[36,165546,63156],{"class":405},[36,165548,51914],{"class":42},[36,165550,150289],{"class":405},[36,165552,165553],{"class":42},"})\n",[19,165555,165556],{},"最大最小：",[26,165558,165560],{"className":28,"code":165559,"language":30,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,165561,165562,165580],{"__ignoreMap":31},[36,165563,165564,165566,165568,165570,165572,165574,165576,165578],{"class":38,"line":39},[36,165565,6495],{"class":53},[36,165567,165515],{"class":42},[36,165569,54],{"class":53},[36,165571,12915],{"class":42},[36,165573,96],{"class":53},[36,165575,12915],{"class":42},[36,165577,127],{"class":53},[36,165579,5137],{"class":42},[36,165581,165582,165585,165587,165589,165591,165593,165595,165597],{"class":38,"line":66},[36,165583,165584],{"class":53},"min",[36,165586,165515],{"class":42},[36,165588,54],{"class":53},[36,165590,12915],{"class":42},[36,165592,96],{"class":53},[36,165594,12915],{"class":42},[36,165596,127],{"class":53},[36,165598,5137],{"class":42},[19,165600,165601],{},"求和：",[26,165603,165605],{"className":28,"code":165604,"language":30,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,165606,165607],{"__ignoreMap":31},[36,165608,165609,165612,165614,165616,165618,165620,165622,165624],{"class":38,"line":39},[36,165610,165611],{"class":53},"sum",[36,165613,165515],{"class":42},[36,165615,54],{"class":53},[36,165617,12915],{"class":42},[36,165619,96],{"class":53},[36,165621,12915],{"class":42},[36,165623,127],{"class":53},[36,165625,5137],{"class":42},[19,165627,163872],{},[26,165629,165631],{"className":28,"code":165630,"language":30,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,165632,165633],{"__ignoreMap":31},[36,165634,165635,165638,165640,165642,165644,165646,165648,165650],{"class":38,"line":39},[36,165636,165637],{"class":53},"sorted",[36,165639,165515],{"class":42},[36,165641,127],{"class":53},[36,165643,12915],{"class":42},[36,165645,54],{"class":53},[36,165647,12915],{"class":42},[36,165649,96],{"class":53},[36,165651,5137],{"class":42},[19,165653,165654],{},"类型转换：",[26,165656,165658],{"className":28,"code":165657,"language":30,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,165659,165660,165670,165688],{"__ignoreMap":31},[36,165661,165662,165664,165666,165668],{"class":38,"line":39},[36,165663,154471],{"class":53},[36,165665,345],{"class":42},[36,165667,156281],{"class":405},[36,165669,63],{"class":42},[36,165671,165672,165674,165676,165678,165680,165682,165684,165686],{"class":38,"line":66},[36,165673,155666],{"class":53},[36,165675,165515],{"class":42},[36,165677,54],{"class":53},[36,165679,12915],{"class":42},[36,165681,96],{"class":53},[36,165683,12915],{"class":42},[36,165685,127],{"class":53},[36,165687,5137],{"class":42},[36,165689,165690,165692,165694,165696,165698,165700,165702,165704,165706,165708],{"class":38,"line":73},[36,165691,155691],{"class":53},[36,165693,165515],{"class":42},[36,165695,54],{"class":53},[36,165697,12915],{"class":42},[36,165699,54],{"class":53},[36,165701,12915],{"class":42},[36,165703,96],{"class":53},[36,165705,12915],{"class":42},[36,165707,127],{"class":53},[36,165709,5137],{"class":42},[19,165711,165712],{},"成员判断：",[26,165714,165716],{"className":28,"code":165715,"language":30,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,165717,165718,165735,165759],{"__ignoreMap":31},[36,165719,165720,165722,165724,165727,165730,165733],{"class":38,"line":39},[36,165721,30894],{"class":53},[36,165723,345],{"class":42},[36,165725,165726],{"class":405},"\"a\"",[36,165728,165729],{"class":46}," in",[36,165731,165732],{"class":405}," \"abc\"",[36,165734,63],{"class":42},[36,165736,165737,165739,165741,165743,165745,165747,165749,165751,165753,165755,165757],{"class":38,"line":66},[36,165738,30894],{"class":53},[36,165740,345],{"class":42},[36,165742,54],{"class":53},[36,165744,165729],{"class":46},[36,165746,52703],{"class":42},[36,165748,54],{"class":53},[36,165750,12915],{"class":42},[36,165752,96],{"class":53},[36,165754,12915],{"class":42},[36,165756,127],{"class":53},[36,165758,5137],{"class":42},[36,165760,165761,165763,165765,165767,165769,165771,165773,165775,165777],{"class":38,"line":73},[36,165762,30894],{"class":53},[36,165764,345],{"class":42},[36,165766,63156],{"class":405},[36,165768,165729],{"class":46},[36,165770,4928],{"class":42},[36,165772,63156],{"class":405},[36,165774,51914],{"class":42},[36,165776,150289],{"class":405},[36,165778,165553],{"class":42},[14,165780,165782],{"id":165781},"_614-推导式","6.14 推导式",[19,165784,165785],{},"推导式用于快速生成容器。",[19,165787,165788],{},"列表推导式：",[26,165790,165792],{"className":28,"code":165791,"language":30,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,165793,165794,165821],{"__ignoreMap":31},[36,165795,165796,165798,165800,165803,165805,165807,165809,165811,165813,165815,165817,165819],{"class":38,"line":39},[36,165797,164501],{"class":42},[36,165799,47],{"class":46},[36,165801,165802],{"class":42}," [i ",[36,165804,3505],{"class":46},[36,165806,9918],{"class":42},[36,165808,26524],{"class":46},[36,165810,32920],{"class":53},[36,165812,345],{"class":42},[36,165814,54],{"class":53},[36,165816,12915],{"class":42},[36,165818,101],{"class":53},[36,165820,97768],{"class":42},[36,165822,165823,165825],{"class":38,"line":66},[36,165824,30894],{"class":53},[36,165826,164717],{"class":42},[19,165828,165829],{},"带条件：",[26,165831,165833],{"className":28,"code":165832,"language":30,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,165834,165835,165876],{"__ignoreMap":31},[36,165836,165837,165840,165842,165844,165846,165848,165850,165852,165854,165856,165858,165860,165862,165864,165866,165868,165870,165872,165874],{"class":38,"line":39},[36,165838,165839],{"class":42},"even_nums ",[36,165841,47],{"class":46},[36,165843,165802],{"class":42},[36,165845,3505],{"class":46},[36,165847,9918],{"class":42},[36,165849,26524],{"class":46},[36,165851,32920],{"class":53},[36,165853,345],{"class":42},[36,165855,54],{"class":53},[36,165857,12915],{"class":42},[36,165859,956],{"class":53},[36,165861,14194],{"class":42},[36,165863,2011],{"class":46},[36,165865,9918],{"class":42},[36,165867,947],{"class":46},[36,165869,15235],{"class":53},[36,165871,101960],{"class":46},[36,165873,4573],{"class":53},[36,165875,33723],{"class":42},[36,165877,165878,165880],{"class":38,"line":66},[36,165879,30894],{"class":53},[36,165881,165882],{"class":42},"(even_nums)\n",[19,165884,165885],{},"字典推导式：",[26,165887,165889],{"className":28,"code":165888,"language":30,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,165890,165891,165925],{"__ignoreMap":31},[36,165892,165893,165896,165898,165901,165903,165905,165908,165910,165912,165914,165916,165918,165920,165922],{"class":38,"line":39},[36,165894,165895],{"class":42},"squares ",[36,165897,47],{"class":46},[36,165899,165900],{"class":42}," {i: i ",[36,165902,11141],{"class":46},[36,165904,15235],{"class":53},[36,165906,165907],{"class":46}," for",[36,165909,9918],{"class":42},[36,165911,26524],{"class":46},[36,165913,32920],{"class":53},[36,165915,345],{"class":42},[36,165917,54],{"class":53},[36,165919,12915],{"class":42},[36,165921,101],{"class":53},[36,165923,165924],{"class":42},")}\n",[36,165926,165927,165929],{"class":38,"line":66},[36,165928,30894],{"class":53},[36,165930,165931],{"class":42},"(squares)\n",[19,165933,165934],{},"集合推导式：",[26,165936,165938],{"className":28,"code":165937,"language":30,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,165939,165940,165961],{"__ignoreMap":31},[36,165941,165942,165945,165947,165950,165952,165954,165956,165959],{"class":38,"line":39},[36,165943,165944],{"class":42},"chars ",[36,165946,47],{"class":46},[36,165948,165949],{"class":42}," {ch ",[36,165951,3505],{"class":46},[36,165953,160093],{"class":42},[36,165955,26524],{"class":46},[36,165957,165958],{"class":405}," \"hello\"",[36,165960,2045],{"class":42},[36,165962,165963,165965],{"class":38,"line":66},[36,165964,30894],{"class":53},[36,165966,165967],{"class":42},"(chars)\n",[19,165969,165970],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165972,165974],{"id":165973},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,165976,165978],{"className":28,"code":165977,"language":30,"meta":31,"style":31},"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",[33,165979,165980,165988,166008,166028,166048,166068,166072,166076,166084,166098,166107,166111,166121,166133,166137,166157,166166,166170,166186,166191,166195,166209,166213,166235,166271],{"__ignoreMap":31},[36,165981,165982,165984,165986],{"class":38,"line":39},[36,165983,160117],{"class":42},[36,165985,47],{"class":46},[36,165987,55924],{"class":42},[36,165989,165990,165992,165994,165996,165998,166000,166002,166004,166006],{"class":38,"line":66},[36,165991,148786],{"class":42},[36,165993,63156],{"class":405},[36,165995,51914],{"class":42},[36,165997,150289],{"class":405},[36,165999,12915],{"class":42},[36,166001,151873],{"class":405},[36,166003,51914],{"class":42},[36,166005,1602],{"class":53},[36,166007,5410],{"class":42},[36,166009,166010,166012,166014,166016,166018,166020,166022,166024,166026],{"class":38,"line":73},[36,166011,148786],{"class":42},[36,166013,63156],{"class":405},[36,166015,51914],{"class":42},[36,166017,151337],{"class":405},[36,166019,12915],{"class":42},[36,166021,151873],{"class":405},[36,166023,51914],{"class":42},[36,166025,1424],{"class":53},[36,166027,5410],{"class":42},[36,166029,166030,166032,166034,166036,166038,166040,166042,166044,166046],{"class":38,"line":79},[36,166031,148786],{"class":42},[36,166033,63156],{"class":405},[36,166035,51914],{"class":42},[36,166037,160132],{"class":405},[36,166039,12915],{"class":42},[36,166041,151873],{"class":405},[36,166043,51914],{"class":42},[36,166045,1023],{"class":53},[36,166047,5410],{"class":42},[36,166049,166050,166052,166054,166056,166058,166060,166062,166064,166066],{"class":38,"line":85},[36,166051,148786],{"class":42},[36,166053,63156],{"class":405},[36,166055,51914],{"class":42},[36,166057,163711],{"class":405},[36,166059,12915],{"class":42},[36,166061,151873],{"class":405},[36,166063,51914],{"class":42},[36,166065,1495],{"class":53},[36,166067,5410],{"class":42},[36,166069,166070],{"class":38,"line":419},[36,166071,33723],{"class":42},[36,166073,166074],{"class":38,"line":425},[36,166075,2880],{"emptyLinePlaceholder":553},[36,166077,166078,166080,166082],{"class":38,"line":431},[36,166079,157661],{"class":42},[36,166081,47],{"class":46},[36,166083,47810],{"class":53},[36,166085,166086,166089,166091,166094,166096],{"class":38,"line":437},[36,166087,166088],{"class":42},"max_student ",[36,166090,47],{"class":46},[36,166092,166093],{"class":42}," students[",[36,166095,812],{"class":53},[36,166097,33723],{"class":42},[36,166099,166100,166103,166105],{"class":38,"line":443},[36,166101,166102],{"class":42},"passed ",[36,166104,47],{"class":46},[36,166106,52315],{"class":42},[36,166108,166109],{"class":38,"line":2092},[36,166110,2880],{"emptyLinePlaceholder":553},[36,166112,166113,166115,166117,166119],{"class":38,"line":2097},[36,166114,3505],{"class":46},[36,166116,152538],{"class":42},[36,166118,26524],{"class":46},[36,166120,152543],{"class":42},[36,166122,166123,166125,166127,166129,166131],{"class":38,"line":2103},[36,166124,159708],{"class":42},[36,166126,9957],{"class":46},[36,166128,152550],{"class":42},[36,166130,151873],{"class":405},[36,166132,33723],{"class":42},[36,166134,166135],{"class":38,"line":2108},[36,166136,2880],{"emptyLinePlaceholder":553},[36,166138,166139,166141,166143,166145,166147,166149,166152,166154],{"class":38,"line":2122},[36,166140,3581],{"class":46},[36,166142,152550],{"class":42},[36,166144,151873],{"class":405},[36,166146,4923],{"class":42},[36,166148,1573],{"class":46},[36,166150,166151],{"class":42}," max_student[",[36,166153,151873],{"class":405},[36,166155,166156],{"class":42},"]:\n",[36,166158,166159,166162,166164],{"class":38,"line":2127},[36,166160,166161],{"class":42},"        max_student ",[36,166163,47],{"class":46},[36,166165,152566],{"class":42},[36,166167,166168],{"class":38,"line":2133},[36,166169,2880],{"emptyLinePlaceholder":553},[36,166171,166172,166174,166176,166178,166180,166182,166184],{"class":38,"line":2154},[36,166173,3581],{"class":46},[36,166175,152550],{"class":42},[36,166177,151873],{"class":405},[36,166179,4923],{"class":42},[36,166181,2190],{"class":46},[36,166183,158238],{"class":53},[36,166185,4219],{"class":42},[36,166187,166188],{"class":38,"line":2159},[36,166189,166190],{"class":42},"        passed.append(student)\n",[36,166192,166193],{"class":38,"line":2173},[36,166194,2880],{"emptyLinePlaceholder":553},[36,166196,166197,166199,166201,166203,166205,166207],{"class":38,"line":2178},[36,166198,164175],{"class":42},[36,166200,47],{"class":46},[36,166202,164180],{"class":42},[36,166204,1197],{"class":46},[36,166206,7811],{"class":53},[36,166208,165396],{"class":42},[36,166210,166211],{"class":38,"line":2207},[36,166212,2880],{"emptyLinePlaceholder":553},[36,166214,166215,166217,166219,166221,166223,166225,166227,166229,166231,166233],{"class":38,"line":2212},[36,166216,30894],{"class":53},[36,166218,345],{"class":42},[36,166220,677],{"class":46},[36,166222,164198],{"class":405},[36,166224,1509],{"class":53},[36,166226,164203],{"class":42},[36,166228,157560],{"class":46},[36,166230,1559],{"class":53},[36,166232,870],{"class":405},[36,166234,63],{"class":42},[36,166236,166237,166239,166241,166243,166246,166248,166251,166253,166255,166257,166259,166261,166263,166265,166267,166269],{"class":38,"line":2229},[36,166238,30894],{"class":53},[36,166240,345],{"class":42},[36,166242,677],{"class":46},[36,166244,166245],{"class":405},"\"最高分学生:",[36,166247,1509],{"class":53},[36,166249,166250],{"class":42},"max_student[",[36,166252,153283],{"class":405},[36,166254,1553],{"class":42},[36,166256,1559],{"class":53},[36,166258,4928],{"class":53},[36,166260,166250],{"class":42},[36,166262,153321],{"class":405},[36,166264,1553],{"class":42},[36,166266,1559],{"class":53},[36,166268,870],{"class":405},[36,166270,63],{"class":42},[36,166272,166273,166275,166277,166279,166282,166285,166288,166290,166292],{"class":38,"line":2234},[36,166274,30894],{"class":53},[36,166276,345],{"class":42},[36,166278,677],{"class":46},[36,166280,166281],{"class":405},"\"及格人数:",[36,166283,166284],{"class":53},"{len",[36,166286,166287],{"class":42},"(passed)",[36,166289,1559],{"class":53},[36,166291,870],{"class":405},[36,166293,63],{"class":42},[14,166295,166297],{"id":166296},"_616-易错点","6.16 易错点",[579,166299,166300,166303,166306,166309,166315,166324],{},[582,166301,166302],{},"列表可变，元组和字符串不可变。",[582,166304,166305],{},"切片结束位置不包含。",[582,166307,166308],{},"字典通过 key 取值，不是通过索引。",[582,166310,166311,166312,28866],{},"空集合要用 ",[33,166313,166314],{},"set()",[582,166316,104767,166317,166320,166321,28866],{},[33,166318,166319],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,166322,166323],{},"get()",[582,166325,166326],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166328,166330],{"id":166329},"_617-本章练习","6.17 本章练习",[579,166332,166333,166336,166339,166342,166345],{},[582,166334,166335],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[582,166337,166338],{},"输入一句话，统计每个字符出现次数。",[582,166340,166341],{},"使用集合去除列表中的重复元素。",[582,166343,166344],{},"使用字典保存一个学生的信息，并实现修改成绩。",[582,166346,166347],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[539,166349,166350],{},"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":31,"searchDepth":66,"depth":66,"links":166352},[166353,166354,166355,166356,166357,166358,166359,166360,166361,166362,166363,166364,166365,166366,166367,166368,166369],{"id":163333,"depth":66,"text":163334},{"id":163450,"depth":66,"text":163451},{"id":163540,"depth":66,"text":163541},{"id":163664,"depth":66,"text":163665},{"id":164027,"depth":66,"text":164028},{"id":164214,"depth":66,"text":164215},{"id":164333,"depth":66,"text":164334},{"id":164475,"depth":66,"text":164476},{"id":164662,"depth":66,"text":164663},{"id":164906,"depth":66,"text":164907},{"id":165116,"depth":66,"text":165117},{"id":165201,"depth":66,"text":165202},{"id":165499,"depth":66,"text":165500},{"id":165781,"depth":66,"text":165782},{"id":165973,"depth":66,"text":165974},{"id":166296,"depth":66,"text":166297},{"id":166329,"depth":66,"text":166330},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163325,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166376,"title":166377,"body":166378,"description":550,"extension":551,"meta":168550,"navigation":553,"path":168551,"seo":168552,"stem":168553,"__hash__":168554},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166379,"toc":168525},[166380,166383,166387,166390,166470,166473,166494,166497,166501,166504,166566,166569,166586,166590,166593,166638,166640,166648,166652,166655,166737,166740,166743,166768,166771,166794,166798,166801,166803,166865,166868,166870,166921,166925,166929,166935,167040,167044,167050,167121,167125,167128,167196,167199,167279,167283,167289,167325,167328,167331,167441,167447,167451,167454,167526,167529,167533,167537,167542,167604,167608,167613,167681,167685,167690,167806,167810,167813,167893,167896,167900,167903,168007,168009,168024,168027,168031,168169,168177,168181,168183,168194,168196,168454,168458,168490,168494,168522],[10,166381,166377],{"id":166382},"_7-函数进阶",[14,166384,166386],{"id":166385},"_71-多返回值","7.1 多返回值",[19,166388,166389],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,166391,166393],{"className":28,"code":166392,"language":30,"meta":31,"style":31},"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",[33,166394,166395,166404,166412,166420,166429,166436,166440,166444,166453,166459],{"__ignoreMap":31},[36,166396,166397,166399,166402],{"class":38,"line":39},[36,166398,32424],{"class":46},[36,166400,166401],{"class":2443}," get_info",[36,166403,32430],{"class":42},[36,166405,166406,166408,166410],{"class":38,"line":66},[36,166407,152771],{"class":42},[36,166409,47],{"class":46},[36,166411,149754],{"class":405},[36,166413,166414,166416,166418],{"class":38,"line":73},[36,166415,152787],{"class":42},[36,166417,47],{"class":46},[36,166419,146952],{"class":53},[36,166421,166422,166424,166426],{"class":38,"line":79},[36,166423,152802],{"class":42},[36,166425,47],{"class":46},[36,166427,166428],{"class":53}," 95\n",[36,166430,166431,166433],{"class":38,"line":85},[36,166432,4570],{"class":46},[36,166434,166435],{"class":42}," name, age, score\n",[36,166437,166438],{"class":38,"line":419},[36,166439,2880],{"emptyLinePlaceholder":553},[36,166441,166442],{"class":38,"line":425},[36,166443,2880],{"emptyLinePlaceholder":553},[36,166445,166446,166448,166450],{"class":38,"line":431},[36,166447,161707],{"class":42},[36,166449,47],{"class":46},[36,166451,166452],{"class":42}," get_info()\n",[36,166454,166455,166457],{"class":38,"line":437},[36,166456,30894],{"class":53},[36,166458,77062],{"class":42},[36,166460,166461,166463,166465,166467],{"class":38,"line":443},[36,166462,30894],{"class":53},[36,166464,345],{"class":42},[36,166466,103508],{"class":53},[36,166468,166469],{"class":42},"(result))\n",[19,166471,166472],{},"可以直接解包：",[26,166474,166476],{"className":28,"code":166475,"language":30,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,166477,166478,166487],{"__ignoreMap":31},[36,166479,166480,166483,166485],{"class":38,"line":39},[36,166481,166482],{"class":42},"name, age, score ",[36,166484,47],{"class":46},[36,166486,166452],{"class":42},[36,166488,166489,166491],{"class":38,"line":66},[36,166490,30894],{"class":53},[36,166492,166493],{"class":42},"(name, age, score)\n",[19,166495,166496],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166498,166500],{"id":166499},"_72-位置参数","7.2 位置参数",[19,166502,166503],{},"位置参数按顺序传递。",[26,166505,166507],{"className":28,"code":166506,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,166508,166509,166517,166545,166549,166553],{"__ignoreMap":31},[36,166510,166511,166513,166515],{"class":38,"line":39},[36,166512,32424],{"class":46},[36,166514,149773],{"class":2443},[36,166516,149776],{"class":42},[36,166518,166519,166521,166523,166525,166527,166529,166531,166533,166535,166537,166539,166541,166543],{"class":38,"line":66},[36,166520,31777],{"class":53},[36,166522,345],{"class":42},[36,166524,677],{"class":46},[36,166526,149787],{"class":405},[36,166528,1509],{"class":53},[36,166530,80287],{"class":42},[36,166532,1559],{"class":53},[36,166534,149796],{"class":405},[36,166536,1509],{"class":53},[36,166538,70698],{"class":42},[36,166540,1559],{"class":53},[36,166542,149805],{"class":405},[36,166544,63],{"class":42},[36,166546,166547],{"class":38,"line":73},[36,166548,2880],{"emptyLinePlaceholder":553},[36,166550,166551],{"class":38,"line":79},[36,166552,2880],{"emptyLinePlaceholder":553},[36,166554,166555,166558,166560,166562,166564],{"class":38,"line":85},[36,166556,166557],{"class":42},"introduce(",[36,166559,150289],{"class":405},[36,166561,12915],{"class":42},[36,166563,1263],{"class":53},[36,166565,63],{"class":42},[19,166567,166568],{},"顺序错了就会得到错误含义：",[26,166570,166572],{"className":28,"code":166571,"language":30,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,166573,166574],{"__ignoreMap":31},[36,166575,166576,166578,166580,166582,166584],{"class":38,"line":39},[36,166577,166557],{"class":42},[36,166579,1263],{"class":53},[36,166581,12915],{"class":42},[36,166583,150289],{"class":405},[36,166585,63],{"class":42},[14,166587,166589],{"id":166588},"_73-关键字参数","7.3 关键字参数",[19,166591,166592],{},"关键字参数按参数名传递。",[26,166594,166596],{"className":28,"code":166595,"language":30,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,166597,166598,166618],{"__ignoreMap":31},[36,166599,166600,166602,166604,166606,166608,166610,166612,166614,166616],{"class":38,"line":39},[36,166601,166557],{"class":42},[36,166603,80287],{"class":5696},[36,166605,47],{"class":46},[36,166607,150289],{"class":405},[36,166609,12915],{"class":42},[36,166611,70698],{"class":5696},[36,166613,47],{"class":46},[36,166615,1263],{"class":53},[36,166617,63],{"class":42},[36,166619,166620,166622,166624,166626,166628,166630,166632,166634,166636],{"class":38,"line":66},[36,166621,166557],{"class":42},[36,166623,70698],{"class":5696},[36,166625,47],{"class":46},[36,166627,1263],{"class":53},[36,166629,12915],{"class":42},[36,166631,80287],{"class":5696},[36,166633,47],{"class":46},[36,166635,150289],{"class":405},[36,166637,63],{"class":42},[19,166639,118335],{},[579,166641,166642,166645],{},[582,166643,166644],{},"顺序不容易错。",[582,166646,166647],{},"调用时可读性更强。",[14,166649,166651],{"id":166650},"_74-默认参数","7.4 默认参数",[19,166653,166654],{},"默认参数给参数设置默认值。",[26,166656,166658],{"className":28,"code":166657,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[33,166659,166660,166676,166706,166710,166714,166724],{"__ignoreMap":31},[36,166661,166662,166664,166666,166669,166671,166674],{"class":38,"line":39},[36,166663,32424],{"class":46},[36,166665,122494],{"class":2443},[36,166667,166668],{"class":42},"(host, port",[36,166670,47],{"class":46},[36,166672,166673],{"class":53},"3306",[36,166675,31264],{"class":42},[36,166677,166678,166680,166682,166684,166687,166689,166691,166693,166695,166697,166700,166702,166704],{"class":38,"line":66},[36,166679,31777],{"class":53},[36,166681,345],{"class":42},[36,166683,677],{"class":46},[36,166685,166686],{"class":405},"\"连接",[36,166688,1509],{"class":53},[36,166690,27876],{"class":42},[36,166692,1559],{"class":53},[36,166694,1472],{"class":405},[36,166696,1509],{"class":53},[36,166698,166699],{"class":42},"port",[36,166701,1559],{"class":53},[36,166703,870],{"class":405},[36,166705,63],{"class":42},[36,166707,166708],{"class":38,"line":73},[36,166709,2880],{"emptyLinePlaceholder":553},[36,166711,166712],{"class":38,"line":79},[36,166713,2880],{"emptyLinePlaceholder":553},[36,166715,166716,166719,166722],{"class":38,"line":85},[36,166717,166718],{"class":42},"connect(",[36,166720,166721],{"class":405},"\"localhost\"",[36,166723,63],{"class":42},[36,166725,166726,166728,166730,166732,166735],{"class":38,"line":419},[36,166727,166718],{"class":42},[36,166729,166721],{"class":405},[36,166731,12915],{"class":42},[36,166733,166734],{"class":53},"6379",[36,166736,63],{"class":42},[19,166738,166739],{},"注意：默认参数必须放在非默认参数后面。",[19,166741,166742],{},"错误：",[26,166744,166746],{"className":28,"code":166745,"language":30,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,166747,166748,166764],{"__ignoreMap":31},[36,166749,166750,166752,166754,166757,166759,166761],{"class":38,"line":39},[36,166751,32424],{"class":46},[36,166753,122494],{"class":2443},[36,166755,166756],{"class":42},"(port",[36,166758,47],{"class":46},[36,166760,166673],{"class":53},[36,166762,166763],{"class":42},", host):\n",[36,166765,166766],{"class":38,"line":66},[36,166767,149938],{"class":46},[19,166769,166770],{},"正确：",[26,166772,166774],{"className":28,"code":166773,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,166775,166776,166790],{"__ignoreMap":31},[36,166777,166778,166780,166782,166784,166786,166788],{"class":38,"line":39},[36,166779,32424],{"class":46},[36,166781,122494],{"class":2443},[36,166783,166668],{"class":42},[36,166785,47],{"class":46},[36,166787,166673],{"class":53},[36,166789,31264],{"class":42},[36,166791,166792],{"class":38,"line":66},[36,166793,149938],{"class":46},[14,166795,166797],{"id":166796},"_75-默认参数的坑","7.5 默认参数的坑",[19,166799,166800],{},"不要使用可变对象作为默认参数。",[19,166802,158024],{},[26,166804,166806],{"className":28,"code":166805,"language":30,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[33,166807,166808,166823,166828,166835,166839,166843,166854],{"__ignoreMap":31},[36,166809,166810,166812,166815,166818,166820],{"class":38,"line":39},[36,166811,32424],{"class":46},[36,166813,166814],{"class":2443}," add_item",[36,166816,166817],{"class":42},"(item, items",[36,166819,47],{"class":46},[36,166821,166822],{"class":42},"[]):\n",[36,166824,166825],{"class":38,"line":66},[36,166826,166827],{"class":42},"    items.append(item)\n",[36,166829,166830,166832],{"class":38,"line":73},[36,166831,4570],{"class":46},[36,166833,166834],{"class":42}," items\n",[36,166836,166837],{"class":38,"line":79},[36,166838,2880],{"emptyLinePlaceholder":553},[36,166840,166841],{"class":38,"line":85},[36,166842,2880],{"emptyLinePlaceholder":553},[36,166844,166845,166847,166850,166852],{"class":38,"line":419},[36,166846,30894],{"class":53},[36,166848,166849],{"class":42},"(add_item(",[36,166851,165726],{"class":405},[36,166853,370],{"class":42},[36,166855,166856,166858,166860,166863],{"class":38,"line":425},[36,166857,30894],{"class":53},[36,166859,166849],{"class":42},[36,166861,166862],{"class":405},"\"b\"",[36,166864,370],{"class":42},[19,166866,166867],{},"第二次调用会复用第一次的列表。",[19,166869,156289],{},[26,166871,166873],{"className":28,"code":166872,"language":30,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[33,166874,166875,166889,166902,166911,166915],{"__ignoreMap":31},[36,166876,166877,166879,166881,166883,166885,166887],{"class":38,"line":39},[36,166878,32424],{"class":46},[36,166880,166814],{"class":2443},[36,166882,166817],{"class":42},[36,166884,47],{"class":46},[36,166886,96157],{"class":53},[36,166888,31264],{"class":42},[36,166890,166891,166893,166896,166898,166900],{"class":38,"line":66},[36,166892,3581],{"class":46},[36,166894,166895],{"class":42}," items ",[36,166897,39404],{"class":46},[36,166899,39410],{"class":53},[36,166901,4219],{"class":42},[36,166903,166904,166907,166909],{"class":38,"line":73},[36,166905,166906],{"class":42},"        items ",[36,166908,47],{"class":46},[36,166910,52315],{"class":42},[36,166912,166913],{"class":38,"line":79},[36,166914,166827],{"class":42},[36,166916,166917,166919],{"class":38,"line":85},[36,166918,4570],{"class":46},[36,166920,166834],{"class":42},[14,166922,166924],{"id":166923},"_76-不定长参数","7.6 不定长参数",[596,166926,166928],{"id":166927},"_761-args","7.6.1 *args",[19,166930,166931,166934],{},[33,166932,166933],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,166936,166938],{"className":28,"code":166937,"language":30,"meta":31,"style":31},"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",[33,166939,166940,166953,166961,166972,166981,166987,166991,166995,167014],{"__ignoreMap":31},[36,166941,166942,166944,166946,166948,166950],{"class":38,"line":39},[36,166943,32424],{"class":46},[36,166945,5689],{"class":2443},[36,166947,345],{"class":42},[36,166949,1071],{"class":46},[36,166951,166952],{"class":42},"args):\n",[36,166954,166955,166957,166959],{"class":38,"line":66},[36,166956,159708],{"class":42},[36,166958,47],{"class":46},[36,166960,47810],{"class":53},[36,166962,166963,166965,166967,166969],{"class":38,"line":73},[36,166964,3681],{"class":46},[36,166966,156581],{"class":42},[36,166968,26524],{"class":46},[36,166970,166971],{"class":42}," args:\n",[36,166973,166974,166976,166978],{"class":38,"line":79},[36,166975,160383],{"class":42},[36,166977,9957],{"class":46},[36,166979,166980],{"class":42}," num\n",[36,166982,166983,166985],{"class":38,"line":85},[36,166984,4570],{"class":46},[36,166986,162688],{"class":42},[36,166988,166989],{"class":38,"line":419},[36,166990,2880],{"emptyLinePlaceholder":553},[36,166992,166993],{"class":38,"line":425},[36,166994,2880],{"emptyLinePlaceholder":553},[36,166996,166997,166999,167002,167004,167006,167008,167010,167012],{"class":38,"line":431},[36,166998,30894],{"class":53},[36,167000,167001],{"class":42},"(add(",[36,167003,54],{"class":53},[36,167005,12915],{"class":42},[36,167007,96],{"class":53},[36,167009,12915],{"class":42},[36,167011,127],{"class":53},[36,167013,370],{"class":42},[36,167015,167016,167018,167020,167022,167024,167026,167028,167030,167032,167034,167036,167038],{"class":38,"line":437},[36,167017,30894],{"class":53},[36,167019,167001],{"class":42},[36,167021,54],{"class":53},[36,167023,12915],{"class":42},[36,167025,96],{"class":53},[36,167027,12915],{"class":42},[36,167029,127],{"class":53},[36,167031,12915],{"class":42},[36,167033,912],{"class":53},[36,167035,12915],{"class":42},[36,167037,938],{"class":53},[36,167039,370],{"class":42},[596,167041,167043],{"id":167042},"_762-kwargs","7.6.2 **kwargs",[19,167045,167046,167049],{},[33,167047,167048],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,167051,167053],{"className":28,"code":167052,"language":30,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[33,167054,167055,167068,167079,167085,167089,167093],{"__ignoreMap":31},[36,167056,167057,167059,167061,167063,167065],{"class":38,"line":39},[36,167058,32424],{"class":46},[36,167060,162346],{"class":2443},[36,167062,345],{"class":42},[36,167064,11141],{"class":46},[36,167066,167067],{"class":42},"kwargs):\n",[36,167069,167070,167072,167074,167076],{"class":38,"line":66},[36,167071,3681],{"class":46},[36,167073,165186],{"class":42},[36,167075,26524],{"class":46},[36,167077,167078],{"class":42}," kwargs.items():\n",[36,167080,167081,167083],{"class":38,"line":73},[36,167082,32928],{"class":53},[36,167084,165198],{"class":42},[36,167086,167087],{"class":38,"line":79},[36,167088,2880],{"emptyLinePlaceholder":553},[36,167090,167091],{"class":38,"line":85},[36,167092,2880],{"emptyLinePlaceholder":553},[36,167094,167095,167097,167099,167101,167103,167105,167107,167109,167111,167113,167115,167117,167119],{"class":38,"line":419},[36,167096,162411],{"class":42},[36,167098,80287],{"class":5696},[36,167100,47],{"class":46},[36,167102,150289],{"class":405},[36,167104,12915],{"class":42},[36,167106,70698],{"class":5696},[36,167108,47],{"class":46},[36,167110,1263],{"class":53},[36,167112,12915],{"class":42},[36,167114,70749],{"class":5696},[36,167116,47],{"class":46},[36,167118,69746],{"class":405},[36,167120,63],{"class":42},[14,167122,167124],{"id":167123},"_77-参数解包","7.7 参数解包",[19,167126,167127],{},"列表或元组解包为位置参数：",[26,167129,167131],{"className":28,"code":167130,"language":30,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[33,167132,167133,167142,167157,167161,167165,167185],{"__ignoreMap":31},[36,167134,167135,167137,167139],{"class":38,"line":39},[36,167136,32424],{"class":46},[36,167138,5689],{"class":2443},[36,167140,167141],{"class":42},"(a, b, c):\n",[36,167143,167144,167146,167148,167150,167152,167154],{"class":38,"line":66},[36,167145,4570],{"class":46},[36,167147,11349],{"class":42},[36,167149,1097],{"class":46},[36,167151,11362],{"class":42},[36,167153,1097],{"class":46},[36,167155,167156],{"class":42}," c\n",[36,167158,167159],{"class":38,"line":73},[36,167160,2880],{"emptyLinePlaceholder":553},[36,167162,167163],{"class":38,"line":79},[36,167164,2880],{"emptyLinePlaceholder":553},[36,167166,167167,167169,167171,167173,167175,167177,167179,167181,167183],{"class":38,"line":85},[36,167168,164501],{"class":42},[36,167170,47],{"class":46},[36,167172,52703],{"class":42},[36,167174,54],{"class":53},[36,167176,12915],{"class":42},[36,167178,96],{"class":53},[36,167180,12915],{"class":42},[36,167182,127],{"class":53},[36,167184,33723],{"class":42},[36,167186,167187,167189,167191,167193],{"class":38,"line":419},[36,167188,30894],{"class":53},[36,167190,167001],{"class":42},[36,167192,1071],{"class":46},[36,167194,167195],{"class":42},"nums))\n",[19,167197,167198],{},"字典解包为关键字参数：",[26,167200,167202],{"className":28,"code":167201,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[33,167203,167204,167212,167238,167242,167246,167270],{"__ignoreMap":31},[36,167205,167206,167208,167210],{"class":38,"line":39},[36,167207,32424],{"class":46},[36,167209,149773],{"class":2443},[36,167211,149776],{"class":42},[36,167213,167214,167216,167218,167220,167222,167224,167226,167228,167230,167232,167234,167236],{"class":38,"line":66},[36,167215,31777],{"class":53},[36,167217,345],{"class":42},[36,167219,677],{"class":46},[36,167221,870],{"class":405},[36,167223,1509],{"class":53},[36,167225,80287],{"class":42},[36,167227,1559],{"class":53},[36,167229,4928],{"class":53},[36,167231,70698],{"class":42},[36,167233,1559],{"class":53},[36,167235,870],{"class":405},[36,167237,63],{"class":42},[36,167239,167240],{"class":38,"line":73},[36,167241,2880],{"emptyLinePlaceholder":553},[36,167243,167244],{"class":38,"line":79},[36,167245,2880],{"emptyLinePlaceholder":553},[36,167247,167248,167250,167252,167254,167256,167258,167260,167262,167264,167266,167268],{"class":38,"line":85},[36,167249,116715],{"class":42},[36,167251,47],{"class":46},[36,167253,4928],{"class":42},[36,167255,63156],{"class":405},[36,167257,51914],{"class":42},[36,167259,150289],{"class":405},[36,167261,12915],{"class":42},[36,167263,69601],{"class":405},[36,167265,51914],{"class":42},[36,167267,1263],{"class":53},[36,167269,2045],{"class":42},[36,167271,167272,167274,167276],{"class":38,"line":419},[36,167273,166557],{"class":42},[36,167275,11141],{"class":46},[36,167277,167278],{"class":42},"info)\n",[14,167280,167282],{"id":167281},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167284,167285,167288],{},[33,167286,167287],{},"lambda"," 用于定义简单匿名函数。",[26,167290,167292],{"className":28,"code":167291,"language":30,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,167293,167294,167311],{"__ignoreMap":31},[36,167295,167296,167299,167301,167304,167307,167309],{"class":38,"line":39},[36,167297,167298],{"class":42},"add ",[36,167300,47],{"class":46},[36,167302,167303],{"class":46}," lambda",[36,167305,167306],{"class":42}," a, b: a ",[36,167308,1097],{"class":46},[36,167310,151505],{"class":42},[36,167312,167313,167315,167317,167319,167321,167323],{"class":38,"line":66},[36,167314,30894],{"class":53},[36,167316,167001],{"class":42},[36,167318,54],{"class":53},[36,167320,12915],{"class":42},[36,167322,96],{"class":53},[36,167324,370],{"class":42},[19,167326,167327],{},"常和排序、过滤等函数一起使用。",[19,167329,167330],{},"按分数排序：",[26,167332,167334],{"className":28,"code":167333,"language":30,"meta":31,"style":31},"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",[33,167335,167336,167344,167364,167384,167404,167408,167412,167435],{"__ignoreMap":31},[36,167337,167338,167340,167342],{"class":38,"line":39},[36,167339,160117],{"class":42},[36,167341,47],{"class":46},[36,167343,55924],{"class":42},[36,167345,167346,167348,167350,167352,167354,167356,167358,167360,167362],{"class":38,"line":66},[36,167347,148786],{"class":42},[36,167349,63156],{"class":405},[36,167351,51914],{"class":42},[36,167353,150289],{"class":405},[36,167355,12915],{"class":42},[36,167357,151873],{"class":405},[36,167359,51914],{"class":42},[36,167361,1602],{"class":53},[36,167363,5410],{"class":42},[36,167365,167366,167368,167370,167372,167374,167376,167378,167380,167382],{"class":38,"line":73},[36,167367,148786],{"class":42},[36,167369,63156],{"class":405},[36,167371,51914],{"class":42},[36,167373,151337],{"class":405},[36,167375,12915],{"class":42},[36,167377,151873],{"class":405},[36,167379,51914],{"class":42},[36,167381,1424],{"class":53},[36,167383,5410],{"class":42},[36,167385,167386,167388,167390,167392,167394,167396,167398,167400,167402],{"class":38,"line":79},[36,167387,148786],{"class":42},[36,167389,63156],{"class":405},[36,167391,51914],{"class":42},[36,167393,160132],{"class":405},[36,167395,12915],{"class":42},[36,167397,151873],{"class":405},[36,167399,51914],{"class":42},[36,167401,1023],{"class":53},[36,167403,5410],{"class":42},[36,167405,167406],{"class":38,"line":85},[36,167407,33723],{"class":42},[36,167409,167410],{"class":38,"line":419},[36,167411,2880],{"emptyLinePlaceholder":553},[36,167413,167414,167417,167419,167421,167423,167425,167427,167429,167431,167433],{"class":38,"line":425},[36,167415,167416],{"class":42},"students.sort(",[36,167418,154347],{"class":5696},[36,167420,154350],{"class":46},[36,167422,154353],{"class":42},[36,167424,151873],{"class":405},[36,167426,112603],{"class":42},[36,167428,163929],{"class":5696},[36,167430,47],{"class":46},[36,167432,31954],{"class":53},[36,167434,63],{"class":42},[36,167436,167437,167439],{"class":38,"line":431},[36,167438,30894],{"class":53},[36,167440,165396],{"class":42},[19,167442,167443,167444,167446],{},"如果逻辑复杂，不要硬写 ",[33,167445,167287],{},"，定义普通函数更清晰。",[14,167448,167450],{"id":167449},"_79-函数作为参数","7.9 函数作为参数",[19,167452,167453],{},"函数可以作为参数传给另一个函数。",[26,167455,167457],{"className":28,"code":167456,"language":30,"meta":31,"style":31},"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",[33,167458,167459,167467,167477,167481,167485,167495,167502,167506,167510],{"__ignoreMap":31},[36,167460,167461,167463,167465],{"class":38,"line":39},[36,167462,32424],{"class":46},[36,167464,5689],{"class":2443},[36,167466,151494],{"class":42},[36,167468,167469,167471,167473,167475],{"class":38,"line":66},[36,167470,4570],{"class":46},[36,167472,11349],{"class":42},[36,167474,1097],{"class":46},[36,167476,151505],{"class":42},[36,167478,167479],{"class":38,"line":73},[36,167480,2880],{"emptyLinePlaceholder":553},[36,167482,167483],{"class":38,"line":79},[36,167484,2880],{"emptyLinePlaceholder":553},[36,167486,167487,167489,167492],{"class":38,"line":85},[36,167488,32424],{"class":46},[36,167490,167491],{"class":2443}," calculate",[36,167493,167494],{"class":42},"(a, b, func):\n",[36,167496,167497,167499],{"class":38,"line":419},[36,167498,4570],{"class":46},[36,167500,167501],{"class":42}," func(a, b)\n",[36,167503,167504],{"class":38,"line":425},[36,167505,2880],{"emptyLinePlaceholder":553},[36,167507,167508],{"class":38,"line":431},[36,167509,2880],{"emptyLinePlaceholder":553},[36,167511,167512,167514,167517,167519,167521,167523],{"class":38,"line":437},[36,167513,30894],{"class":53},[36,167515,167516],{"class":42},"(calculate(",[36,167518,1062],{"class":53},[36,167520,12915],{"class":42},[36,167522,1313],{"class":53},[36,167524,167525],{"class":42},", add))\n",[19,167527,167528],{},"这种思想在排序、回调、框架中经常出现。",[14,167530,167532],{"id":167531},"_710-mapfiltersorted","7.10 map、filter、sorted",[596,167534,167536],{"id":167535},"_7101-map","7.10.1 map",[19,167538,167539,167541],{},[33,167540,74521],{}," 对每个元素执行函数。",[26,167543,167545],{"className":28,"code":167544,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,167546,167547,167571,167594],{"__ignoreMap":31},[36,167548,167549,167551,167553,167555,167557,167559,167561,167563,167565,167567,167569],{"class":38,"line":39},[36,167550,164501],{"class":42},[36,167552,47],{"class":46},[36,167554,52703],{"class":42},[36,167556,54],{"class":53},[36,167558,12915],{"class":42},[36,167560,96],{"class":53},[36,167562,12915],{"class":42},[36,167564,127],{"class":53},[36,167566,12915],{"class":42},[36,167568,912],{"class":53},[36,167570,33723],{"class":42},[36,167572,167573,167575,167577,167580,167582,167584,167587,167589,167591],{"class":38,"line":66},[36,167574,161707],{"class":42},[36,167576,47],{"class":46},[36,167578,167579],{"class":53}," map",[36,167581,345],{"class":42},[36,167583,167287],{"class":46},[36,167585,167586],{"class":42}," x: x ",[36,167588,1071],{"class":46},[36,167590,15235],{"class":53},[36,167592,167593],{"class":42},", nums)\n",[36,167595,167596,167598,167600,167602],{"class":38,"line":73},[36,167597,30894],{"class":53},[36,167599,345],{"class":42},[36,167601,154471],{"class":53},[36,167603,166469],{"class":42},[596,167605,167607],{"id":167606},"_7102-filter","7.10.2 filter",[19,167609,167610,167612],{},[33,167611,80528],{}," 保留满足条件的元素。",[26,167614,167616],{"className":28,"code":167615,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[33,167617,167618,167646,167671],{"__ignoreMap":31},[36,167619,167620,167622,167624,167626,167628,167630,167632,167634,167636,167638,167640,167642,167644],{"class":38,"line":39},[36,167621,164501],{"class":42},[36,167623,47],{"class":46},[36,167625,52703],{"class":42},[36,167627,54],{"class":53},[36,167629,12915],{"class":42},[36,167631,96],{"class":53},[36,167633,12915],{"class":42},[36,167635,127],{"class":53},[36,167637,12915],{"class":42},[36,167639,912],{"class":53},[36,167641,12915],{"class":42},[36,167643,938],{"class":53},[36,167645,33723],{"class":42},[36,167647,167648,167650,167652,167655,167657,167659,167661,167663,167665,167667,167669],{"class":38,"line":66},[36,167649,161707],{"class":42},[36,167651,47],{"class":46},[36,167653,167654],{"class":53}," filter",[36,167656,345],{"class":42},[36,167658,167287],{"class":46},[36,167660,167586],{"class":42},[36,167662,947],{"class":46},[36,167664,15235],{"class":53},[36,167666,101960],{"class":46},[36,167668,4573],{"class":53},[36,167670,167593],{"class":42},[36,167672,167673,167675,167677,167679],{"class":38,"line":73},[36,167674,30894],{"class":53},[36,167676,345],{"class":42},[36,167678,154471],{"class":53},[36,167680,166469],{"class":42},[596,167682,167684],{"id":167683},"_7103-sorted","7.10.3 sorted",[19,167686,167687,167689],{},[33,167688,165637],{}," 返回排序后的新列表。",[26,167691,167693],{"className":28,"code":167692,"language":30,"meta":31,"style":31},"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",[33,167694,167695,167703,167723,167743,167763,167767,167771,167800],{"__ignoreMap":31},[36,167696,167697,167699,167701],{"class":38,"line":39},[36,167698,160117],{"class":42},[36,167700,47],{"class":46},[36,167702,55924],{"class":42},[36,167704,167705,167707,167709,167711,167713,167715,167717,167719,167721],{"class":38,"line":66},[36,167706,148786],{"class":42},[36,167708,63156],{"class":405},[36,167710,51914],{"class":42},[36,167712,150289],{"class":405},[36,167714,12915],{"class":42},[36,167716,151873],{"class":405},[36,167718,51914],{"class":42},[36,167720,1602],{"class":53},[36,167722,5410],{"class":42},[36,167724,167725,167727,167729,167731,167733,167735,167737,167739,167741],{"class":38,"line":73},[36,167726,148786],{"class":42},[36,167728,63156],{"class":405},[36,167730,51914],{"class":42},[36,167732,151337],{"class":405},[36,167734,12915],{"class":42},[36,167736,151873],{"class":405},[36,167738,51914],{"class":42},[36,167740,1424],{"class":53},[36,167742,5410],{"class":42},[36,167744,167745,167747,167749,167751,167753,167755,167757,167759,167761],{"class":38,"line":79},[36,167746,148786],{"class":42},[36,167748,63156],{"class":405},[36,167750,51914],{"class":42},[36,167752,160132],{"class":405},[36,167754,12915],{"class":42},[36,167756,151873],{"class":405},[36,167758,51914],{"class":42},[36,167760,1023],{"class":53},[36,167762,5410],{"class":42},[36,167764,167765],{"class":38,"line":85},[36,167766,33723],{"class":42},[36,167768,167769],{"class":38,"line":419},[36,167770,2880],{"emptyLinePlaceholder":553},[36,167772,167773,167775,167777,167779,167782,167784,167786,167788,167790,167792,167794,167796,167798],{"class":38,"line":425},[36,167774,161707],{"class":42},[36,167776,47],{"class":46},[36,167778,164005],{"class":53},[36,167780,167781],{"class":42},"(students, ",[36,167783,154347],{"class":5696},[36,167785,154350],{"class":46},[36,167787,154353],{"class":42},[36,167789,151873],{"class":405},[36,167791,112603],{"class":42},[36,167793,163929],{"class":5696},[36,167795,47],{"class":46},[36,167797,31954],{"class":53},[36,167799,63],{"class":42},[36,167801,167802,167804],{"class":38,"line":431},[36,167803,30894],{"class":53},[36,167805,77062],{"class":42},[14,167807,167809],{"id":167808},"_711-闭包入门","7.11 闭包入门",[19,167811,167812],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,167814,167816],{"className":28,"code":167815,"language":30,"meta":31,"style":31},"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",[33,167817,167818,167828,167838,167849,167853,167860,167864,167868,167882],{"__ignoreMap":31},[36,167819,167820,167822,167825],{"class":38,"line":39},[36,167821,32424],{"class":46},[36,167823,167824],{"class":2443}," outer",[36,167826,167827],{"class":42},"(base):\n",[36,167829,167830,167832,167835],{"class":38,"line":66},[36,167831,31279],{"class":46},[36,167833,167834],{"class":2443}," inner",[36,167836,167837],{"class":42},"(num):\n",[36,167839,167840,167842,167845,167847],{"class":38,"line":73},[36,167841,15232],{"class":46},[36,167843,167844],{"class":42}," base ",[36,167846,1097],{"class":46},[36,167848,166980],{"class":42},[36,167850,167851],{"class":38,"line":79},[36,167852,2880],{"emptyLinePlaceholder":553},[36,167854,167855,167857],{"class":38,"line":85},[36,167856,4570],{"class":46},[36,167858,167859],{"class":42}," inner\n",[36,167861,167862],{"class":38,"line":419},[36,167863,2880],{"emptyLinePlaceholder":553},[36,167865,167866],{"class":38,"line":425},[36,167867,2880],{"emptyLinePlaceholder":553},[36,167869,167870,167873,167875,167878,167880],{"class":38,"line":431},[36,167871,167872],{"class":42},"add_10 ",[36,167874,47],{"class":46},[36,167876,167877],{"class":42}," outer(",[36,167879,1062],{"class":53},[36,167881,63],{"class":42},[36,167883,167884,167886,167889,167891],{"class":38,"line":437},[36,167885,30894],{"class":53},[36,167887,167888],{"class":42},"(add_10(",[36,167890,938],{"class":53},[36,167892,370],{"class":42},[19,167894,167895],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167897,167899],{"id":167898},"_712-装饰器入门","7.12 装饰器入门",[19,167901,167902],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,167904,167906],{"className":28,"code":167905,"language":30,"meta":31,"style":31},"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",[33,167907,167908,167917,167926,167937,167942,167953,167957,167964,167968,167972,167977,167985,167995,167999,168003],{"__ignoreMap":31},[36,167909,167910,167912,167914],{"class":38,"line":39},[36,167911,32424],{"class":46},[36,167913,87668],{"class":2443},[36,167915,167916],{"class":42},"(func):\n",[36,167918,167919,167921,167924],{"class":38,"line":66},[36,167920,31279],{"class":46},[36,167922,167923],{"class":2443}," wrapper",[36,167925,32430],{"class":42},[36,167927,167928,167930,167932,167935],{"class":38,"line":73},[36,167929,32928],{"class":53},[36,167931,345],{"class":42},[36,167933,167934],{"class":405},"\"函数开始执行\"",[36,167936,63],{"class":42},[36,167938,167939],{"class":38,"line":79},[36,167940,167941],{"class":42},"        func()\n",[36,167943,167944,167946,167948,167951],{"class":38,"line":85},[36,167945,32928],{"class":53},[36,167947,345],{"class":42},[36,167949,167950],{"class":405},"\"函数执行结束\"",[36,167952,63],{"class":42},[36,167954,167955],{"class":38,"line":419},[36,167956,2880],{"emptyLinePlaceholder":553},[36,167958,167959,167961],{"class":38,"line":425},[36,167960,4570],{"class":46},[36,167962,167963],{"class":42}," wrapper\n",[36,167965,167966],{"class":38,"line":431},[36,167967,2880],{"emptyLinePlaceholder":553},[36,167969,167970],{"class":38,"line":437},[36,167971,2880],{"emptyLinePlaceholder":553},[36,167973,167974],{"class":38,"line":443},[36,167975,167976],{"class":2443},"@log\n",[36,167978,167979,167981,167983],{"class":38,"line":2092},[36,167980,32424],{"class":46},[36,167982,161397],{"class":2443},[36,167984,32430],{"class":42},[36,167986,167987,167989,167991,167993],{"class":38,"line":2097},[36,167988,31777],{"class":53},[36,167990,345],{"class":42},[36,167992,6324],{"class":405},[36,167994,63],{"class":42},[36,167996,167997],{"class":38,"line":2103},[36,167998,2880],{"emptyLinePlaceholder":553},[36,168000,168001],{"class":38,"line":2108},[36,168002,2880],{"emptyLinePlaceholder":553},[36,168004,168005],{"class":38,"line":2122},[36,168006,161432],{"class":42},[19,168008,158675],{},[26,168010,168012],{"className":28,"code":168011,"language":30,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,168013,168014],{"__ignoreMap":31},[36,168015,168016,168019,168021],{"class":38,"line":39},[36,168017,168018],{"class":42},"say_hello ",[36,168020,47],{"class":46},[36,168022,168023],{"class":42}," log(say_hello)\n",[19,168025,168026],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168028,168030],{"id":168029},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,168032,168034],{"className":28,"code":168033,"language":30,"meta":31,"style":31},"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",[33,168035,168036,168044,168061,168071,168090,168100,168107,168111,168117,168121,168125,168129,168137,168147,168151,168155],{"__ignoreMap":31},[36,168037,168038,168040,168042],{"class":38,"line":39},[36,168039,32424],{"class":46},[36,168041,87668],{"class":2443},[36,168043,167916],{"class":42},[36,168045,168046,168048,168050,168052,168054,168057,168059],{"class":38,"line":66},[36,168047,31279],{"class":46},[36,168049,167923],{"class":2443},[36,168051,345],{"class":42},[36,168053,1071],{"class":46},[36,168055,168056],{"class":42},"args, ",[36,168058,11141],{"class":46},[36,168060,167067],{"class":42},[36,168062,168063,168065,168067,168069],{"class":38,"line":73},[36,168064,32928],{"class":53},[36,168066,345],{"class":42},[36,168068,167934],{"class":405},[36,168070,63],{"class":42},[36,168072,168073,168076,168078,168081,168083,168085,168087],{"class":38,"line":79},[36,168074,168075],{"class":42},"        result ",[36,168077,47],{"class":46},[36,168079,168080],{"class":42}," func(",[36,168082,1071],{"class":46},[36,168084,168056],{"class":42},[36,168086,11141],{"class":46},[36,168088,168089],{"class":42},"kwargs)\n",[36,168091,168092,168094,168096,168098],{"class":38,"line":85},[36,168093,32928],{"class":53},[36,168095,345],{"class":42},[36,168097,167950],{"class":405},[36,168099,63],{"class":42},[36,168101,168102,168104],{"class":38,"line":419},[36,168103,15232],{"class":46},[36,168105,168106],{"class":42}," result\n",[36,168108,168109],{"class":38,"line":425},[36,168110,2880],{"emptyLinePlaceholder":553},[36,168112,168113,168115],{"class":38,"line":431},[36,168114,4570],{"class":46},[36,168116,167963],{"class":42},[36,168118,168119],{"class":38,"line":437},[36,168120,2880],{"emptyLinePlaceholder":553},[36,168122,168123],{"class":38,"line":443},[36,168124,2880],{"emptyLinePlaceholder":553},[36,168126,168127],{"class":38,"line":2092},[36,168128,167976],{"class":2443},[36,168130,168131,168133,168135],{"class":38,"line":2097},[36,168132,32424],{"class":46},[36,168134,5689],{"class":2443},[36,168136,151494],{"class":42},[36,168138,168139,168141,168143,168145],{"class":38,"line":2103},[36,168140,4570],{"class":46},[36,168142,11349],{"class":42},[36,168144,1097],{"class":46},[36,168146,151505],{"class":42},[36,168148,168149],{"class":38,"line":2108},[36,168150,2880],{"emptyLinePlaceholder":553},[36,168152,168153],{"class":38,"line":2122},[36,168154,2880],{"emptyLinePlaceholder":553},[36,168156,168157,168159,168161,168163,168165,168167],{"class":38,"line":2127},[36,168158,30894],{"class":53},[36,168160,167001],{"class":42},[36,168162,1062],{"class":53},[36,168164,12915],{"class":42},[36,168166,1313],{"class":53},[36,168168,370],{"class":42},[19,168170,168171,168172,101419,168174,168176],{},"这个写法使用 ",[33,168173,166933],{},[33,168175,167048],{}," 接收原函数的所有参数。",[14,168178,168180],{"id":168179},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168182,123693],{},[579,168184,168185,168188,168191],{},[582,168186,168187],{},"给定一组学生数据。",[582,168189,168190],{},"封装函数，根据传入规则筛选学生。",[582,168192,168193],{},"筛选及格、优秀、未成年学生。",[19,168195,10515],{},[26,168197,168199],{"className":28,"code":168198,"language":30,"meta":31,"style":31},"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",[33,168200,168201,168209,168237,168265,168293,168297,168301,168305,168315,168323,168333,168340,168345,168351,168355,168359,168383,168406,168429,168433,168440,168447],{"__ignoreMap":31},[36,168202,168203,168205,168207],{"class":38,"line":39},[36,168204,160117],{"class":42},[36,168206,47],{"class":46},[36,168208,55924],{"class":42},[36,168210,168211,168213,168215,168217,168219,168221,168223,168225,168227,168229,168231,168233,168235],{"class":38,"line":66},[36,168212,148786],{"class":42},[36,168214,63156],{"class":405},[36,168216,51914],{"class":42},[36,168218,150289],{"class":405},[36,168220,12915],{"class":42},[36,168222,69601],{"class":405},[36,168224,51914],{"class":42},[36,168226,1263],{"class":53},[36,168228,12915],{"class":42},[36,168230,151873],{"class":405},[36,168232,51914],{"class":42},[36,168234,1602],{"class":53},[36,168236,5410],{"class":42},[36,168238,168239,168241,168243,168245,168247,168249,168251,168253,168255,168257,168259,168261,168263],{"class":38,"line":73},[36,168240,148786],{"class":42},[36,168242,63156],{"class":405},[36,168244,51914],{"class":42},[36,168246,151337],{"class":405},[36,168248,12915],{"class":42},[36,168250,69601],{"class":405},[36,168252,51914],{"class":42},[36,168254,1238],{"class":53},[36,168256,12915],{"class":42},[36,168258,151873],{"class":405},[36,168260,51914],{"class":42},[36,168262,1424],{"class":53},[36,168264,5410],{"class":42},[36,168266,168267,168269,168271,168273,168275,168277,168279,168281,168283,168285,168287,168289,168291],{"class":38,"line":79},[36,168268,148786],{"class":42},[36,168270,63156],{"class":405},[36,168272,51914],{"class":42},[36,168274,160132],{"class":405},[36,168276,12915],{"class":42},[36,168278,69601],{"class":405},[36,168280,51914],{"class":42},[36,168282,1288],{"class":53},[36,168284,12915],{"class":42},[36,168286,151873],{"class":405},[36,168288,51914],{"class":42},[36,168290,1495],{"class":53},[36,168292,5410],{"class":42},[36,168294,168295],{"class":38,"line":85},[36,168296,33723],{"class":42},[36,168298,168299],{"class":38,"line":419},[36,168300,2880],{"emptyLinePlaceholder":553},[36,168302,168303],{"class":38,"line":425},[36,168304,2880],{"emptyLinePlaceholder":553},[36,168306,168307,168309,168312],{"class":38,"line":431},[36,168308,32424],{"class":46},[36,168310,168311],{"class":2443}," filter_students",[36,168313,168314],{"class":42},"(students, condition):\n",[36,168316,168317,168319,168321],{"class":38,"line":437},[36,168318,161624],{"class":42},[36,168320,47],{"class":46},[36,168322,52315],{"class":42},[36,168324,168325,168327,168329,168331],{"class":38,"line":443},[36,168326,3681],{"class":46},[36,168328,152538],{"class":42},[36,168330,26524],{"class":46},[36,168332,152543],{"class":42},[36,168334,168335,168337],{"class":38,"line":2092},[36,168336,2977],{"class":46},[36,168338,168339],{"class":42}," condition(student):\n",[36,168341,168342],{"class":38,"line":2097},[36,168343,168344],{"class":42},"            result.append(student)\n",[36,168346,168347,168349],{"class":38,"line":2103},[36,168348,4570],{"class":46},[36,168350,168106],{"class":42},[36,168352,168353],{"class":38,"line":2108},[36,168354,2880],{"emptyLinePlaceholder":553},[36,168356,168357],{"class":38,"line":2122},[36,168358,2880],{"emptyLinePlaceholder":553},[36,168360,168361,168363,168365,168368,168370,168373,168375,168377,168379,168381],{"class":38,"line":2127},[36,168362,166102],{"class":42},[36,168364,47],{"class":46},[36,168366,168367],{"class":42}," filter_students(students, ",[36,168369,167287],{"class":46},[36,168371,168372],{"class":42}," s: s[",[36,168374,151873],{"class":405},[36,168376,4923],{"class":42},[36,168378,2190],{"class":46},[36,168380,158238],{"class":53},[36,168382,63],{"class":42},[36,168384,168385,168388,168390,168392,168394,168396,168398,168400,168402,168404],{"class":38,"line":2133},[36,168386,168387],{"class":42},"excellent ",[36,168389,47],{"class":46},[36,168391,168367],{"class":42},[36,168393,167287],{"class":46},[36,168395,168372],{"class":42},[36,168397,151873],{"class":405},[36,168399,4923],{"class":42},[36,168401,2190],{"class":46},[36,168403,158189],{"class":53},[36,168405,63],{"class":42},[36,168407,168408,168411,168413,168415,168417,168419,168421,168423,168425,168427],{"class":38,"line":2154},[36,168409,168410],{"class":42},"under_age ",[36,168412,47],{"class":46},[36,168414,168367],{"class":42},[36,168416,167287],{"class":46},[36,168418,168372],{"class":42},[36,168420,69601],{"class":405},[36,168422,4923],{"class":42},[36,168424,1523],{"class":46},[36,168426,156686],{"class":53},[36,168428,63],{"class":42},[36,168430,168431],{"class":38,"line":2159},[36,168432,2880],{"emptyLinePlaceholder":553},[36,168434,168435,168437],{"class":38,"line":2173},[36,168436,30894],{"class":53},[36,168438,168439],{"class":42},"(passed)\n",[36,168441,168442,168444],{"class":38,"line":2178},[36,168443,30894],{"class":53},[36,168445,168446],{"class":42},"(excellent)\n",[36,168448,168449,168451],{"class":38,"line":2207},[36,168450,30894],{"class":53},[36,168452,168453],{"class":42},"(under_age)\n",[14,168455,168457],{"id":168456},"_715-易错点","7.15 易错点",[579,168459,168460,168463,168471,168476,168487],{},[582,168461,168462],{},"默认参数不要写可变对象。",[582,168464,168465,168467,168468,168470],{},[33,168466,166933],{}," 是元组，",[33,168469,167048],{}," 是字典。",[582,168472,168473,168475],{},[33,168474,167287],{}," 只适合简单表达式。",[582,168477,168478,101419,168480,168482,168483,168486],{},[33,168479,74521],{},[33,168481,80528],{}," 的结果是迭代器，常用 ",[33,168484,168485],{},"list()"," 转换查看。",[582,168488,168489],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168491,168493],{"id":168492},"_716-本章练习","7.16 本章练习",[579,168495,168496,168503,168509,168514,168519],{},[582,168497,168498,168499,168502],{},"写函数 ",[33,168500,168501],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[582,168504,168498,168505,168508],{},[33,168506,168507],{},"print_user(**kwargs)","，输出用户所有字段。",[582,168510,104767,168511,168513],{},[33,168512,167287],{}," 对学生列表按年龄排序。",[582,168515,104767,168516,168518],{},[33,168517,80528],{}," 找出成绩不及格的学生。",[582,168520,168521],{},"写一个装饰器，统计函数执行前后的提示信息。",[539,168523,168524],{},"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":31,"searchDepth":66,"depth":66,"links":168526},[168527,168528,168529,168530,168531,168532,168536,168537,168538,168539,168544,168545,168546,168547,168548,168549],{"id":166385,"depth":66,"text":166386},{"id":166499,"depth":66,"text":166500},{"id":166588,"depth":66,"text":166589},{"id":166650,"depth":66,"text":166651},{"id":166796,"depth":66,"text":166797},{"id":166923,"depth":66,"text":166924,"children":168533},[168534,168535],{"id":166927,"depth":73,"text":166928},{"id":167042,"depth":73,"text":167043},{"id":167123,"depth":66,"text":167124},{"id":167281,"depth":66,"text":167282},{"id":167449,"depth":66,"text":167450},{"id":167531,"depth":66,"text":167532,"children":168540},[168541,168542,168543],{"id":167535,"depth":73,"text":167536},{"id":167606,"depth":73,"text":167607},{"id":167683,"depth":73,"text":167684},{"id":167808,"depth":66,"text":167809},{"id":167898,"depth":66,"text":167899},{"id":168029,"depth":66,"text":168030},{"id":168179,"depth":66,"text":168180},{"id":168456,"depth":66,"text":168457},{"id":168492,"depth":66,"text":168493},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166377,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168556,"title":168557,"body":168558,"description":550,"extension":551,"meta":171077,"navigation":553,"path":171078,"seo":171079,"stem":171080,"__hash__":171081},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168559,"toc":171052},[168560,168563,168567,168570,168573,168604,168608,168612,168615,168642,168646,168649,168700,168703,168718,168721,168756,168760,168762,168786,168789,168849,168853,168857,168860,168917,168920,168940,168944,168947,169010,169014,169017,169073,169080,169104,169108,169111,169174,169178,169183,169234,169237,169241,169246,169313,169316,169398,169402,169407,169458,169461,169465,169468,169471,169479,169482,169528,169531,169577,169581,169587,169631,169634,169680,169683,169723,169726,169787,169791,169794,169884,169887,170029,170032,170099,170103,170106,170109,170250,170253,170331,170334,170510,170514,170516,170527,170529,170728,170732,170976,170980,171014,171018,171049],[10,168561,168557],{"id":168562},"_8-文件操作",[14,168564,168566],{"id":168565},"_81-文件操作的意义","8.1 文件操作的意义",[19,168568,168569],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168571,168572],{},"常见文件类型：",[579,168574,168575,168581,168587,168593,168599],{},[582,168576,168577,168580],{},[33,168578,168579],{},".txt","：普通文本。",[582,168582,168583,168586],{},[33,168584,168585],{},".csv","：表格文本。",[582,168588,168589,168592],{},[33,168590,168591],{},".json","：结构化数据。",[582,168594,168595,168598],{},[33,168596,168597],{},".log","：日志文件。",[582,168600,168601,168603],{},[33,168602,146753],{},"：Python 源代码。",[14,168605,168607],{"id":168606},"_82-路径","8.2 路径",[596,168609,168611],{"id":168610},"_821-相对路径","8.2.1 相对路径",[19,168613,168614],{},"相对当前运行目录：",[26,168616,168618],{"className":28,"code":168617,"language":30,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,168619,168620],{"__ignoreMap":31},[36,168621,168622,168624,168626,168628,168630,168632,168634,168636,168638,168640],{"class":38,"line":39},[36,168623,87392],{"class":53},[36,168625,345],{"class":42},[36,168627,147197],{"class":405},[36,168629,12915],{"class":42},[36,168631,147202],{"class":405},[36,168633,12915],{"class":42},[36,168635,147207],{"class":5696},[36,168637,47],{"class":46},[36,168639,147212],{"class":405},[36,168641,63],{"class":42},[596,168643,168645],{"id":168644},"_822-绝对路径","8.2.2 绝对路径",[19,168647,168648],{},"从根目录或盘符开始：",[26,168650,168652],{"className":28,"code":168651,"language":30,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[33,168653,168654,168677],{"__ignoreMap":31},[36,168655,168656,168658,168660,168663,168665,168667,168669,168671,168673,168675],{"class":38,"line":39},[36,168657,87392],{"class":53},[36,168659,345],{"class":42},[36,168661,168662],{"class":405},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,168664,12915],{"class":42},[36,168666,147202],{"class":405},[36,168668,12915],{"class":42},[36,168670,147207],{"class":5696},[36,168672,47],{"class":46},[36,168674,147212],{"class":405},[36,168676,63],{"class":42},[36,168678,168679,168681,168683,168686,168688,168690,168692,168694,168696,168698],{"class":38,"line":66},[36,168680,87392],{"class":53},[36,168682,345],{"class":42},[36,168684,168685],{"class":405},"\"D:\u002Fdata\u002Fdata.txt\"",[36,168687,12915],{"class":42},[36,168689,147202],{"class":405},[36,168691,12915],{"class":42},[36,168693,147207],{"class":5696},[36,168695,47],{"class":46},[36,168697,147212],{"class":405},[36,168699,63],{"class":42},[19,168701,168702],{},"Windows 路径建议写成：",[26,168704,168706],{"className":28,"code":168705,"language":30,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,168707,168708],{"__ignoreMap":31},[36,168709,168710,168713,168715],{"class":38,"line":39},[36,168711,168712],{"class":42},"path ",[36,168714,47],{"class":46},[36,168716,168717],{"class":405}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168719,168720],{},"或原始字符串：",[26,168722,168724],{"className":28,"code":168723,"language":30,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,168725,168726],{"__ignoreMap":31},[36,168727,168728,168730,168732,168734,168736,168739,168742,168745,168747,168749,168751,168754],{"class":38,"line":39},[36,168729,168712],{"class":42},[36,168731,47],{"class":46},[36,168733,17601],{"class":46},[36,168735,870],{"class":405},[36,168737,168738],{"class":48454},"D:",[36,168740,168741],{"class":53},"\\d",[36,168743,168744],{"class":48454},"ata",[36,168746,168741],{"class":53},[36,168748,168744],{"class":48454},[36,168750,1171],{"class":53},[36,168752,168753],{"class":48454},"txt",[36,168755,25614],{"class":405},[14,168757,168759],{"id":168758},"_83-open函数","8.3 open函数",[19,168761,5661],{},[26,168763,168765],{"className":28,"code":168764,"language":30,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,168766,168767],{"__ignoreMap":31},[36,168768,168769,168771,168773,168775,168778,168780,168782,168784],{"class":38,"line":39},[36,168770,45831],{"class":5696},[36,168772,14044],{"class":46},[36,168774,147192],{"class":53},[36,168776,168777],{"class":42},"(文件路径, 打开模式, ",[36,168779,147207],{"class":5696},[36,168781,47],{"class":46},[36,168783,147212],{"class":405},[36,168785,63],{"class":42},[19,168787,168788],{},"常见模式：",[758,168790,168791,168800],{},[761,168792,168793],{},[764,168794,168795,168798],{},[767,168796,168797],{},"模式",[767,168799,26350],{},[805,168801,168802,168811,168820,168829,168839],{},[764,168803,168804,168808],{},[810,168805,168806],{},[33,168807,1283],{},[810,168809,168810],{},"只读，文件不存在会报错",[764,168812,168813,168817],{},[810,168814,168815],{},[33,168816,1408],{},[810,168818,168819],{},"只写，文件不存在会创建，存在会清空",[764,168821,168822,168826],{},[810,168823,168824],{},[33,168825,43],{},[810,168827,168828],{},"追加，文件不存在会创建",[764,168830,168831,168836],{},[810,168832,168833],{},[33,168834,168835],{},"rb",[810,168837,168838],{},"二进制只读",[764,168840,168841,168846],{},[810,168842,168843],{},[33,168844,168845],{},"wb",[810,168847,168848],{},"二进制只写",[14,168850,168852],{"id":168851},"_84-读取文件","8.4 读取文件",[596,168854,168856],{"id":168855},"_841-read","8.4.1 read",[19,168858,168859],{},"一次读取全部内容：",[26,168861,168863],{"className":28,"code":168862,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,168864,168865,168891,168903,168910],{"__ignoreMap":31},[36,168866,168867,168869,168871,168873,168875,168877,168879,168881,168883,168885,168887,168889],{"class":38,"line":39},[36,168868,45831],{"class":5696},[36,168870,14044],{"class":46},[36,168872,147192],{"class":53},[36,168874,345],{"class":42},[36,168876,147197],{"class":405},[36,168878,12915],{"class":42},[36,168880,147202],{"class":405},[36,168882,12915],{"class":42},[36,168884,147207],{"class":5696},[36,168886,47],{"class":46},[36,168888,147212],{"class":405},[36,168890,63],{"class":42},[36,168892,168893,168896,168898,168900],{"class":38,"line":66},[36,168894,168895],{"class":42},"content ",[36,168897,47],{"class":46},[36,168899,148554],{"class":5696},[36,168901,168902],{"class":42},".read()\n",[36,168904,168905,168907],{"class":38,"line":73},[36,168906,30894],{"class":53},[36,168908,168909],{"class":42},"(content)\n",[36,168911,168912,168914],{"class":38,"line":79},[36,168913,45831],{"class":5696},[36,168915,168916],{"class":42},".close()\n",[19,168918,168919],{},"可以指定读取字符数：",[26,168921,168923],{"className":28,"code":168922,"language":30,"meta":31,"style":31},"content = file.read(10)\n",[33,168924,168925],{"__ignoreMap":31},[36,168926,168927,168929,168931,168933,168936,168938],{"class":38,"line":39},[36,168928,168895],{"class":42},[36,168930,47],{"class":46},[36,168932,148554],{"class":5696},[36,168934,168935],{"class":42},".read(",[36,168937,1062],{"class":53},[36,168939,63],{"class":42},[596,168941,168943],{"id":168942},"_842-readline","8.4.2 readline",[19,168945,168946],{},"一次读取一行：",[26,168948,168950],{"className":28,"code":168949,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[33,168951,168952,168978,168982,168993,169000,169004],{"__ignoreMap":31},[36,168953,168954,168956,168958,168960,168962,168964,168966,168968,168970,168972,168974,168976],{"class":38,"line":39},[36,168955,45831],{"class":5696},[36,168957,14044],{"class":46},[36,168959,147192],{"class":53},[36,168961,345],{"class":42},[36,168963,147197],{"class":405},[36,168965,12915],{"class":42},[36,168967,147202],{"class":405},[36,168969,12915],{"class":42},[36,168971,147207],{"class":5696},[36,168973,47],{"class":46},[36,168975,147212],{"class":405},[36,168977,63],{"class":42},[36,168979,168980],{"class":38,"line":66},[36,168981,2880],{"emptyLinePlaceholder":553},[36,168983,168984,168986,168988,168990],{"class":38,"line":73},[36,168985,147653],{"class":42},[36,168987,47],{"class":46},[36,168989,148554],{"class":5696},[36,168991,168992],{"class":42},".readline()\n",[36,168994,168995,168997],{"class":38,"line":79},[36,168996,30894],{"class":53},[36,168998,168999],{"class":42},"(line)\n",[36,169001,169002],{"class":38,"line":85},[36,169003,2880],{"emptyLinePlaceholder":553},[36,169005,169006,169008],{"class":38,"line":419},[36,169007,45831],{"class":5696},[36,169009,168916],{"class":42},[596,169011,169013],{"id":169012},"_843-readlines","8.4.3 readlines",[19,169015,169016],{},"读取所有行，返回列表：",[26,169018,169020],{"className":28,"code":169019,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,169021,169022,169048,169060,169067],{"__ignoreMap":31},[36,169023,169024,169026,169028,169030,169032,169034,169036,169038,169040,169042,169044,169046],{"class":38,"line":39},[36,169025,45831],{"class":5696},[36,169027,14044],{"class":46},[36,169029,147192],{"class":53},[36,169031,345],{"class":42},[36,169033,147197],{"class":405},[36,169035,12915],{"class":42},[36,169037,147202],{"class":405},[36,169039,12915],{"class":42},[36,169041,147207],{"class":5696},[36,169043,47],{"class":46},[36,169045,147212],{"class":405},[36,169047,63],{"class":42},[36,169049,169050,169053,169055,169057],{"class":38,"line":66},[36,169051,169052],{"class":42},"lines ",[36,169054,47],{"class":46},[36,169056,148554],{"class":5696},[36,169058,169059],{"class":42},".readlines()\n",[36,169061,169062,169064],{"class":38,"line":73},[36,169063,30894],{"class":53},[36,169065,169066],{"class":42},"(lines)\n",[36,169068,169069,169071],{"class":38,"line":79},[36,169070,45831],{"class":5696},[36,169072,168916],{"class":42},[19,169074,169075,169076,169079],{},"每一行通常带有换行符，可以用 ",[33,169077,169078],{},"strip()"," 去掉：",[26,169081,169083],{"className":28,"code":169082,"language":30,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,169084,169085,169097],{"__ignoreMap":31},[36,169086,169087,169089,169092,169094],{"class":38,"line":39},[36,169088,3505],{"class":46},[36,169090,169091],{"class":42}," line ",[36,169093,26524],{"class":46},[36,169095,169096],{"class":42}," lines:\n",[36,169098,169099,169101],{"class":38,"line":66},[36,169100,31777],{"class":53},[36,169102,169103],{"class":42},"(line.strip())\n",[596,169105,169107],{"id":169106},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169109,169110],{},"推荐读取大文件时使用：",[26,169112,169114],{"className":28,"code":169113,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[33,169115,169116,169142,169146,169158,169164,169168],{"__ignoreMap":31},[36,169117,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140],{"class":38,"line":39},[36,169119,45831],{"class":5696},[36,169121,14044],{"class":46},[36,169123,147192],{"class":53},[36,169125,345],{"class":42},[36,169127,147197],{"class":405},[36,169129,12915],{"class":42},[36,169131,147202],{"class":405},[36,169133,12915],{"class":42},[36,169135,147207],{"class":5696},[36,169137,47],{"class":46},[36,169139,147212],{"class":405},[36,169141,63],{"class":42},[36,169143,169144],{"class":38,"line":66},[36,169145,2880],{"emptyLinePlaceholder":553},[36,169147,169148,169150,169152,169154,169156],{"class":38,"line":73},[36,169149,3505],{"class":46},[36,169151,169091],{"class":42},[36,169153,26524],{"class":46},[36,169155,148554],{"class":5696},[36,169157,4219],{"class":42},[36,169159,169160,169162],{"class":38,"line":79},[36,169161,31777],{"class":53},[36,169163,169103],{"class":42},[36,169165,169166],{"class":38,"line":85},[36,169167,2880],{"emptyLinePlaceholder":553},[36,169169,169170,169172],{"class":38,"line":419},[36,169171,45831],{"class":5696},[36,169173,168916],{"class":42},[14,169175,169177],{"id":169176},"_85-with语句","8.5 with语句",[19,169179,169180,169182],{},[33,169181,108234],{}," 会自动关闭文件，推荐使用。",[26,169184,169186],{"className":28,"code":169185,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[33,169187,169188,169218,169228],{"__ignoreMap":31},[36,169189,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214,169216],{"class":38,"line":39},[36,169191,108234],{"class":46},[36,169193,147192],{"class":53},[36,169195,345],{"class":42},[36,169197,147197],{"class":405},[36,169199,12915],{"class":42},[36,169201,147202],{"class":405},[36,169203,12915],{"class":42},[36,169205,147207],{"class":5696},[36,169207,47],{"class":46},[36,169209,147212],{"class":405},[36,169211,14194],{"class":42},[36,169213,31861],{"class":46},[36,169215,148554],{"class":5696},[36,169217,4219],{"class":42},[36,169219,169220,169222,169224,169226],{"class":38,"line":66},[36,169221,147224],{"class":42},[36,169223,47],{"class":46},[36,169225,148554],{"class":5696},[36,169227,168902],{"class":42},[36,169229,169230,169232],{"class":38,"line":73},[36,169231,31777],{"class":53},[36,169233,168909],{"class":42},[19,169235,169236],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169238,169240],{"id":169239},"_86-写入文件","8.6 写入文件",[19,169242,169243,169245],{},[33,169244,1408],{}," 模式会清空原文件。",[26,169247,169249],{"className":28,"code":169248,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[33,169250,169251,169281,169298],{"__ignoreMap":31},[36,169252,169253,169255,169257,169259,169261,169263,169265,169267,169269,169271,169273,169275,169277,169279],{"class":38,"line":39},[36,169254,108234],{"class":46},[36,169256,147192],{"class":53},[36,169258,345],{"class":42},[36,169260,147197],{"class":405},[36,169262,12915],{"class":42},[36,169264,152377],{"class":405},[36,169266,12915],{"class":42},[36,169268,147207],{"class":5696},[36,169270,47],{"class":46},[36,169272,147212],{"class":405},[36,169274,14194],{"class":42},[36,169276,31861],{"class":46},[36,169278,148554],{"class":5696},[36,169280,4219],{"class":42},[36,169282,169283,169286,169289,169292,169294,169296],{"class":38,"line":66},[36,169284,169285],{"class":5696},"    file",[36,169287,169288],{"class":42},".write(",[36,169290,169291],{"class":405},"\"hello",[36,169293,156926],{"class":53},[36,169295,870],{"class":405},[36,169297,63],{"class":42},[36,169299,169300,169302,169304,169307,169309,169311],{"class":38,"line":73},[36,169301,169285],{"class":5696},[36,169303,169288],{"class":42},[36,169305,169306],{"class":405},"\"python",[36,169308,156926],{"class":53},[36,169310,870],{"class":405},[36,169312,63],{"class":42},[19,169314,169315],{},"写入多行：",[26,169317,169319],{"className":28,"code":169318,"language":30,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[33,169320,169321,169356,169360,169391],{"__ignoreMap":31},[36,169322,169323,169325,169327,169329,169332,169334,169336,169338,169341,169343,169345,169347,169350,169352,169354],{"class":38,"line":39},[36,169324,169052],{"class":42},[36,169326,47],{"class":46},[36,169328,52703],{"class":42},[36,169330,169331],{"class":405},"\"小明,18",[36,169333,156926],{"class":53},[36,169335,870],{"class":405},[36,169337,12915],{"class":42},[36,169339,169340],{"class":405},"\"小红,17",[36,169342,156926],{"class":53},[36,169344,870],{"class":405},[36,169346,12915],{"class":42},[36,169348,169349],{"class":405},"\"小刚,19",[36,169351,156926],{"class":53},[36,169353,870],{"class":405},[36,169355,33723],{"class":42},[36,169357,169358],{"class":38,"line":66},[36,169359,2880],{"emptyLinePlaceholder":553},[36,169361,169362,169364,169366,169368,169371,169373,169375,169377,169379,169381,169383,169385,169387,169389],{"class":38,"line":73},[36,169363,108234],{"class":46},[36,169365,147192],{"class":53},[36,169367,345],{"class":42},[36,169369,169370],{"class":405},"\"students.txt\"",[36,169372,12915],{"class":42},[36,169374,152377],{"class":405},[36,169376,12915],{"class":42},[36,169378,147207],{"class":5696},[36,169380,47],{"class":46},[36,169382,147212],{"class":405},[36,169384,14194],{"class":42},[36,169386,31861],{"class":46},[36,169388,148554],{"class":5696},[36,169390,4219],{"class":42},[36,169392,169393,169395],{"class":38,"line":79},[36,169394,169285],{"class":5696},[36,169396,169397],{"class":42},".writelines(lines)\n",[14,169399,169401],{"id":169400},"_87-追加文件","8.7 追加文件",[19,169403,169404,169406],{},[33,169405,43],{}," 模式不会清空原内容，而是在末尾追加。",[26,169408,169410],{"className":28,"code":169409,"language":30,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,169411,169412,169443],{"__ignoreMap":31},[36,169413,169414,169416,169418,169420,169423,169425,169427,169429,169431,169433,169435,169437,169439,169441],{"class":38,"line":39},[36,169415,108234],{"class":46},[36,169417,147192],{"class":53},[36,169419,345],{"class":42},[36,169421,169422],{"class":405},"\"log.txt\"",[36,169424,12915],{"class":42},[36,169426,165726],{"class":405},[36,169428,12915],{"class":42},[36,169430,147207],{"class":5696},[36,169432,47],{"class":46},[36,169434,147212],{"class":405},[36,169436,14194],{"class":42},[36,169438,31861],{"class":46},[36,169440,148554],{"class":5696},[36,169442,4219],{"class":42},[36,169444,169445,169447,169449,169452,169454,169456],{"class":38,"line":66},[36,169446,169285],{"class":5696},[36,169448,169288],{"class":42},[36,169450,169451],{"class":405},"\"程序启动",[36,169453,156926],{"class":53},[36,169455,870],{"class":405},[36,169457,63],{"class":42},[19,169459,169460],{},"日志类文件常用追加模式。",[14,169462,169464],{"id":169463},"_88-文件编码","8.8 文件编码",[19,169466,169467],{},"编码决定文字如何保存为字节。",[19,169469,169470],{},"常见编码：",[579,169472,169473,169476],{},[582,169474,169475],{},"UTF-8：推荐。",[582,169477,169478],{},"GBK：部分 Windows 中文文件常见。",[19,169480,169481],{},"读取文件乱码时，可以尝试：",[26,169483,169485],{"className":28,"code":169484,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,169486,169487,169518],{"__ignoreMap":31},[36,169488,169489,169491,169493,169495,169497,169499,169501,169503,169505,169507,169510,169512,169514,169516],{"class":38,"line":39},[36,169490,108234],{"class":46},[36,169492,147192],{"class":53},[36,169494,345],{"class":42},[36,169496,147197],{"class":405},[36,169498,12915],{"class":42},[36,169500,147202],{"class":405},[36,169502,12915],{"class":42},[36,169504,147207],{"class":5696},[36,169506,47],{"class":46},[36,169508,169509],{"class":405},"\"gbk\"",[36,169511,14194],{"class":42},[36,169513,31861],{"class":46},[36,169515,148554],{"class":5696},[36,169517,4219],{"class":42},[36,169519,169520,169522,169524,169526],{"class":38,"line":66},[36,169521,147224],{"class":42},[36,169523,47],{"class":46},[36,169525,148554],{"class":5696},[36,169527,168902],{"class":42},[19,169529,169530],{},"写文件时建议统一 UTF-8：",[26,169532,169534],{"className":28,"code":169533,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,169535,169536,169566],{"__ignoreMap":31},[36,169537,169538,169540,169542,169544,169546,169548,169550,169552,169554,169556,169558,169560,169562,169564],{"class":38,"line":39},[36,169539,108234],{"class":46},[36,169541,147192],{"class":53},[36,169543,345],{"class":42},[36,169545,147197],{"class":405},[36,169547,12915],{"class":42},[36,169549,152377],{"class":405},[36,169551,12915],{"class":42},[36,169553,147207],{"class":5696},[36,169555,47],{"class":46},[36,169557,147212],{"class":405},[36,169559,14194],{"class":42},[36,169561,31861],{"class":46},[36,169563,148554],{"class":5696},[36,169565,4219],{"class":42},[36,169567,169568,169570,169572,169575],{"class":38,"line":66},[36,169569,169285],{"class":5696},[36,169571,169288],{"class":42},[36,169573,169574],{"class":405},"\"中文内容\"",[36,169576,63],{"class":42},[14,169578,169580],{"id":169579},"_89-pathlib","8.9 pathlib",[19,169582,169583,169586],{},[33,169584,169585],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,169588,169590],{"className":28,"code":169589,"language":30,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,169591,169592,169602,169606,169624],{"__ignoreMap":31},[36,169593,169594,169596,169598,169600],{"class":38,"line":39},[36,169595,31215],{"class":46},[36,169597,108712],{"class":42},[36,169599,30871],{"class":46},[36,169601,108717],{"class":42},[36,169603,169604],{"class":38,"line":66},[36,169605,2880],{"emptyLinePlaceholder":553},[36,169607,169608,169610,169612,169614,169617,169619,169621],{"class":38,"line":73},[36,169609,168712],{"class":42},[36,169611,47],{"class":46},[36,169613,108946],{"class":42},[36,169615,169616],{"class":405},"\"data\"",[36,169618,14194],{"class":42},[36,169620,1197],{"class":46},[36,169622,169623],{"class":405}," \"students.txt\"\n",[36,169625,169626,169628],{"class":38,"line":79},[36,169627,30894],{"class":53},[36,169629,169630],{"class":42},"(path)\n",[19,169632,169633],{},"创建目录：",[26,169635,169637],{"className":28,"code":169636,"language":30,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,169638,169639,169649,169653,169666],{"__ignoreMap":31},[36,169640,169641,169643,169645,169647],{"class":38,"line":39},[36,169642,31215],{"class":46},[36,169644,108712],{"class":42},[36,169646,30871],{"class":46},[36,169648,108717],{"class":42},[36,169650,169651],{"class":38,"line":66},[36,169652,2880],{"emptyLinePlaceholder":553},[36,169654,169655,169658,169660,169662,169664],{"class":38,"line":73},[36,169656,169657],{"class":42},"data_dir ",[36,169659,47],{"class":46},[36,169661,108946],{"class":42},[36,169663,169616],{"class":405},[36,169665,63],{"class":42},[36,169667,169668,169671,169674,169676,169678],{"class":38,"line":79},[36,169669,169670],{"class":42},"data_dir.mkdir(",[36,169672,169673],{"class":5696},"exist_ok",[36,169675,47],{"class":46},[36,169677,31954],{"class":53},[36,169679,63],{"class":42},[19,169681,169682],{},"判断文件是否存在：",[26,169684,169686],{"className":28,"code":169685,"language":30,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,169687,169688,169701,169705,169712],{"__ignoreMap":31},[36,169689,169690,169692,169694,169696,169699],{"class":38,"line":39},[36,169691,168712],{"class":42},[36,169693,47],{"class":46},[36,169695,108946],{"class":42},[36,169697,169698],{"class":405},"\"data\u002Fstudents.txt\"",[36,169700,63],{"class":42},[36,169702,169703],{"class":38,"line":66},[36,169704,2880],{"emptyLinePlaceholder":553},[36,169706,169707,169709],{"class":38,"line":73},[36,169708,2011],{"class":46},[36,169710,169711],{"class":42}," path.exists():\n",[36,169713,169714,169716,169718,169721],{"class":38,"line":79},[36,169715,31777],{"class":53},[36,169717,345],{"class":42},[36,169719,169720],{"class":405},"\"文件存在\"",[36,169722,63],{"class":42},[19,169724,169725],{},"读写文本：",[26,169727,169729],{"className":28,"code":169728,"language":30,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[33,169730,169731,169743,169747,169764,169781],{"__ignoreMap":31},[36,169732,169733,169735,169737,169739,169741],{"class":38,"line":39},[36,169734,168712],{"class":42},[36,169736,47],{"class":46},[36,169738,108946],{"class":42},[36,169740,147197],{"class":405},[36,169742,63],{"class":42},[36,169744,169745],{"class":38,"line":66},[36,169746,2880],{"emptyLinePlaceholder":553},[36,169748,169749,169752,169754,169756,169758,169760,169762],{"class":38,"line":73},[36,169750,169751],{"class":42},"path.write_text(",[36,169753,146277],{"class":405},[36,169755,12915],{"class":42},[36,169757,147207],{"class":5696},[36,169759,47],{"class":46},[36,169761,147212],{"class":405},[36,169763,63],{"class":42},[36,169765,169766,169768,169770,169773,169775,169777,169779],{"class":38,"line":79},[36,169767,168895],{"class":42},[36,169769,47],{"class":46},[36,169771,169772],{"class":42}," path.read_text(",[36,169774,147207],{"class":5696},[36,169776,47],{"class":46},[36,169778,147212],{"class":405},[36,169780,63],{"class":42},[36,169782,169783,169785],{"class":38,"line":85},[36,169784,30894],{"class":53},[36,169786,168909],{"class":42},[14,169788,169790],{"id":169789},"_810-json文件","8.10 JSON文件",[19,169792,169793],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,169795,169797],{"className":28,"code":169796,"language":30,"meta":31,"style":31},"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",[33,169798,169799,169805,169809,169817,169827,169837,169845,169849,169853,169878],{"__ignoreMap":31},[36,169800,169801,169803],{"class":38,"line":39},[36,169802,30871],{"class":46},[36,169804,147492],{"class":42},[36,169806,169807],{"class":38,"line":66},[36,169808,2880],{"emptyLinePlaceholder":553},[36,169810,169811,169813,169815],{"class":38,"line":73},[36,169812,149882],{"class":42},[36,169814,47],{"class":46},[36,169816,16052],{"class":42},[36,169818,169819,169821,169823,169825],{"class":38,"line":79},[36,169820,147421],{"class":405},[36,169822,51914],{"class":42},[36,169824,150289],{"class":405},[36,169826,31944],{"class":42},[36,169828,169829,169831,169833,169835],{"class":38,"line":85},[36,169830,164938],{"class":405},[36,169832,51914],{"class":42},[36,169834,1263],{"class":53},[36,169836,31944],{"class":42},[36,169838,169839,169841,169843],{"class":38,"line":419},[36,169840,164949],{"class":405},[36,169842,51914],{"class":42},[36,169844,164954],{"class":53},[36,169846,169847],{"class":38,"line":425},[36,169848,2045],{"class":42},[36,169850,169851],{"class":38,"line":431},[36,169852,2880],{"emptyLinePlaceholder":553},[36,169854,169855,169857,169859,169862,169864,169866,169868,169870,169872,169874,169876],{"class":38,"line":437},[36,169856,156845],{"class":42},[36,169858,47],{"class":46},[36,169860,169861],{"class":42}," json.dumps(student, ",[36,169863,147538],{"class":5696},[36,169865,47],{"class":46},[36,169867,34464],{"class":53},[36,169869,12915],{"class":42},[36,169871,152413],{"class":5696},[36,169873,47],{"class":46},[36,169875,96],{"class":53},[36,169877,63],{"class":42},[36,169879,169880,169882],{"class":38,"line":443},[36,169881,30894],{"class":53},[36,169883,164472],{"class":42},[19,169885,169886],{},"写入 JSON 文件：",[26,169888,169890],{"className":28,"code":169889,"language":30,"meta":31,"style":31},"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",[33,169891,169892,169898,169902,169910,169938,169966,169970,169974,170004],{"__ignoreMap":31},[36,169893,169894,169896],{"class":38,"line":39},[36,169895,30871],{"class":46},[36,169897,147492],{"class":42},[36,169899,169900],{"class":38,"line":66},[36,169901,2880],{"emptyLinePlaceholder":553},[36,169903,169904,169906,169908],{"class":38,"line":73},[36,169905,160117],{"class":42},[36,169907,47],{"class":46},[36,169909,55924],{"class":42},[36,169911,169912,169914,169916,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936],{"class":38,"line":79},[36,169913,148786],{"class":42},[36,169915,63156],{"class":405},[36,169917,51914],{"class":42},[36,169919,150289],{"class":405},[36,169921,12915],{"class":42},[36,169923,69601],{"class":405},[36,169925,51914],{"class":42},[36,169927,1263],{"class":53},[36,169929,12915],{"class":42},[36,169931,151873],{"class":405},[36,169933,51914],{"class":42},[36,169935,1602],{"class":53},[36,169937,5410],{"class":42},[36,169939,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962,169964],{"class":38,"line":85},[36,169941,148786],{"class":42},[36,169943,63156],{"class":405},[36,169945,51914],{"class":42},[36,169947,151337],{"class":405},[36,169949,12915],{"class":42},[36,169951,69601],{"class":405},[36,169953,51914],{"class":42},[36,169955,1238],{"class":53},[36,169957,12915],{"class":42},[36,169959,151873],{"class":405},[36,169961,51914],{"class":42},[36,169963,1424],{"class":53},[36,169965,5410],{"class":42},[36,169967,169968],{"class":38,"line":419},[36,169969,33723],{"class":42},[36,169971,169972],{"class":38,"line":425},[36,169973,2880],{"emptyLinePlaceholder":553},[36,169975,169976,169978,169980,169982,169984,169986,169988,169990,169992,169994,169996,169998,170000,170002],{"class":38,"line":431},[36,169977,108234],{"class":46},[36,169979,147192],{"class":53},[36,169981,345],{"class":42},[36,169983,152232],{"class":405},[36,169985,12915],{"class":42},[36,169987,152377],{"class":405},[36,169989,12915],{"class":42},[36,169991,147207],{"class":5696},[36,169993,47],{"class":46},[36,169995,147212],{"class":405},[36,169997,14194],{"class":42},[36,169999,31861],{"class":46},[36,170001,148554],{"class":5696},[36,170003,4219],{"class":42},[36,170005,170006,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027],{"class":38,"line":437},[36,170007,170008],{"class":42},"    json.dump(students, ",[36,170010,45831],{"class":5696},[36,170012,12915],{"class":42},[36,170014,147538],{"class":5696},[36,170016,47],{"class":46},[36,170018,34464],{"class":53},[36,170020,12915],{"class":42},[36,170022,152413],{"class":5696},[36,170024,47],{"class":46},[36,170026,96],{"class":53},[36,170028,63],{"class":42},[19,170030,170031],{},"读取 JSON 文件：",[26,170033,170035],{"className":28,"code":170034,"language":30,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[33,170036,170037,170043,170047,170077,170089,170093],{"__ignoreMap":31},[36,170038,170039,170041],{"class":38,"line":39},[36,170040,30871],{"class":46},[36,170042,147492],{"class":42},[36,170044,170045],{"class":38,"line":66},[36,170046,2880],{"emptyLinePlaceholder":553},[36,170048,170049,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069,170071,170073,170075],{"class":38,"line":73},[36,170050,108234],{"class":46},[36,170052,147192],{"class":53},[36,170054,345],{"class":42},[36,170056,152232],{"class":405},[36,170058,12915],{"class":42},[36,170060,147202],{"class":405},[36,170062,12915],{"class":42},[36,170064,147207],{"class":5696},[36,170066,47],{"class":46},[36,170068,147212],{"class":405},[36,170070,14194],{"class":42},[36,170072,31861],{"class":46},[36,170074,148554],{"class":5696},[36,170076,4219],{"class":42},[36,170078,170079,170081,170083,170085,170087],{"class":38,"line":79},[36,170080,153438],{"class":42},[36,170082,47],{"class":46},[36,170084,148565],{"class":42},[36,170086,45831],{"class":5696},[36,170088,63],{"class":42},[36,170090,170091],{"class":38,"line":85},[36,170092,2880],{"emptyLinePlaceholder":553},[36,170094,170095,170097],{"class":38,"line":419},[36,170096,30894],{"class":53},[36,170098,165396],{"class":42},[14,170100,170102],{"id":170101},"_811-csv文件","8.11 CSV文件",[19,170104,170105],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170107,170108],{},"写入 CSV：",[26,170110,170112],{"className":28,"code":170111,"language":30,"meta":31,"style":31},"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",[33,170113,170114,170121,170125,170133,170151,170167,170183,170187,170191,170231,170245],{"__ignoreMap":31},[36,170115,170116,170118],{"class":38,"line":39},[36,170117,30871],{"class":46},[36,170119,170120],{"class":42}," csv\n",[36,170122,170123],{"class":38,"line":66},[36,170124,2880],{"emptyLinePlaceholder":553},[36,170126,170127,170129,170131],{"class":38,"line":73},[36,170128,160117],{"class":42},[36,170130,47],{"class":46},[36,170132,55924],{"class":42},[36,170134,170135,170138,170140,170142,170144,170146,170149],{"class":38,"line":79},[36,170136,170137],{"class":42},"    [",[36,170139,73576],{"class":405},[36,170141,12915],{"class":42},[36,170143,73609],{"class":405},[36,170145,12915],{"class":42},[36,170147,170148],{"class":405},"\"成绩\"",[36,170150,88313],{"class":42},[36,170152,170153,170155,170157,170159,170161,170163,170165],{"class":38,"line":85},[36,170154,170137],{"class":42},[36,170156,150289],{"class":405},[36,170158,12915],{"class":42},[36,170160,1263],{"class":53},[36,170162,12915],{"class":42},[36,170164,1602],{"class":53},[36,170166,88313],{"class":42},[36,170168,170169,170171,170173,170175,170177,170179,170181],{"class":38,"line":419},[36,170170,170137],{"class":42},[36,170172,151337],{"class":405},[36,170174,12915],{"class":42},[36,170176,1238],{"class":53},[36,170178,12915],{"class":42},[36,170180,1424],{"class":53},[36,170182,88313],{"class":42},[36,170184,170185],{"class":38,"line":425},[36,170186,33723],{"class":42},[36,170188,170189],{"class":38,"line":431},[36,170190,2880],{"emptyLinePlaceholder":553},[36,170192,170193,170195,170197,170199,170202,170204,170206,170208,170210,170212,170214,170216,170219,170221,170223,170225,170227,170229],{"class":38,"line":437},[36,170194,108234],{"class":46},[36,170196,147192],{"class":53},[36,170198,345],{"class":42},[36,170200,170201],{"class":405},"\"students.csv\"",[36,170203,12915],{"class":42},[36,170205,152377],{"class":405},[36,170207,12915],{"class":42},[36,170209,147207],{"class":5696},[36,170211,47],{"class":46},[36,170213,147212],{"class":405},[36,170215,12915],{"class":42},[36,170217,170218],{"class":5696},"newline",[36,170220,47],{"class":46},[36,170222,8132],{"class":405},[36,170224,14194],{"class":42},[36,170226,31861],{"class":46},[36,170228,148554],{"class":5696},[36,170230,4219],{"class":42},[36,170232,170233,170236,170238,170241,170243],{"class":38,"line":443},[36,170234,170235],{"class":42},"    writer ",[36,170237,47],{"class":46},[36,170239,170240],{"class":42}," csv.writer(",[36,170242,45831],{"class":5696},[36,170244,63],{"class":42},[36,170246,170247],{"class":38,"line":2092},[36,170248,170249],{"class":42},"    writer.writerows(students)\n",[19,170251,170252],{},"读取 CSV：",[26,170254,170256],{"className":28,"code":170255,"language":30,"meta":31,"style":31},"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",[33,170257,170258,170264,170268,170298,170312,170324],{"__ignoreMap":31},[36,170259,170260,170262],{"class":38,"line":39},[36,170261,30871],{"class":46},[36,170263,170120],{"class":42},[36,170265,170266],{"class":38,"line":66},[36,170267,2880],{"emptyLinePlaceholder":553},[36,170269,170270,170272,170274,170276,170278,170280,170282,170284,170286,170288,170290,170292,170294,170296],{"class":38,"line":73},[36,170271,108234],{"class":46},[36,170273,147192],{"class":53},[36,170275,345],{"class":42},[36,170277,170201],{"class":405},[36,170279,12915],{"class":42},[36,170281,147202],{"class":405},[36,170283,12915],{"class":42},[36,170285,147207],{"class":5696},[36,170287,47],{"class":46},[36,170289,147212],{"class":405},[36,170291,14194],{"class":42},[36,170293,31861],{"class":46},[36,170295,148554],{"class":5696},[36,170297,4219],{"class":42},[36,170299,170300,170303,170305,170308,170310],{"class":38,"line":79},[36,170301,170302],{"class":42},"    reader ",[36,170304,47],{"class":46},[36,170306,170307],{"class":42}," csv.reader(",[36,170309,45831],{"class":5696},[36,170311,63],{"class":42},[36,170313,170314,170316,170319,170321],{"class":38,"line":85},[36,170315,3681],{"class":46},[36,170317,170318],{"class":42}," row ",[36,170320,26524],{"class":46},[36,170322,170323],{"class":42}," reader:\n",[36,170325,170326,170328],{"class":38,"line":419},[36,170327,32928],{"class":53},[36,170329,170330],{"class":42},"(row)\n",[19,170332,170333],{},"使用字典写入：",[26,170335,170337],{"className":28,"code":170336,"language":30,"meta":31,"style":31},"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",[33,170338,170339,170345,170349,170357,170385,170413,170417,170421,170459,170480,170501,170506],{"__ignoreMap":31},[36,170340,170341,170343],{"class":38,"line":39},[36,170342,30871],{"class":46},[36,170344,170120],{"class":42},[36,170346,170347],{"class":38,"line":66},[36,170348,2880],{"emptyLinePlaceholder":553},[36,170350,170351,170353,170355],{"class":38,"line":73},[36,170352,160117],{"class":42},[36,170354,47],{"class":46},[36,170356,55924],{"class":42},[36,170358,170359,170361,170363,170365,170367,170369,170371,170373,170375,170377,170379,170381,170383],{"class":38,"line":79},[36,170360,148786],{"class":42},[36,170362,63156],{"class":405},[36,170364,51914],{"class":42},[36,170366,150289],{"class":405},[36,170368,12915],{"class":42},[36,170370,69601],{"class":405},[36,170372,51914],{"class":42},[36,170374,1263],{"class":53},[36,170376,12915],{"class":42},[36,170378,151873],{"class":405},[36,170380,51914],{"class":42},[36,170382,1602],{"class":53},[36,170384,5410],{"class":42},[36,170386,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409,170411],{"class":38,"line":85},[36,170388,148786],{"class":42},[36,170390,63156],{"class":405},[36,170392,51914],{"class":42},[36,170394,151337],{"class":405},[36,170396,12915],{"class":42},[36,170398,69601],{"class":405},[36,170400,51914],{"class":42},[36,170402,1238],{"class":53},[36,170404,12915],{"class":42},[36,170406,151873],{"class":405},[36,170408,51914],{"class":42},[36,170410,1424],{"class":53},[36,170412,5410],{"class":42},[36,170414,170415],{"class":38,"line":419},[36,170416,33723],{"class":42},[36,170418,170419],{"class":38,"line":425},[36,170420,2880],{"emptyLinePlaceholder":553},[36,170422,170423,170425,170427,170429,170431,170433,170435,170437,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457],{"class":38,"line":431},[36,170424,108234],{"class":46},[36,170426,147192],{"class":53},[36,170428,345],{"class":42},[36,170430,170201],{"class":405},[36,170432,12915],{"class":42},[36,170434,152377],{"class":405},[36,170436,12915],{"class":42},[36,170438,147207],{"class":5696},[36,170440,47],{"class":46},[36,170442,147212],{"class":405},[36,170444,12915],{"class":42},[36,170446,170218],{"class":5696},[36,170448,47],{"class":46},[36,170450,8132],{"class":405},[36,170452,14194],{"class":42},[36,170454,31861],{"class":46},[36,170456,148554],{"class":5696},[36,170458,4219],{"class":42},[36,170460,170461,170464,170466,170468,170470,170472,170474,170476,170478],{"class":38,"line":437},[36,170462,170463],{"class":42},"    fieldnames ",[36,170465,47],{"class":46},[36,170467,52703],{"class":42},[36,170469,63156],{"class":405},[36,170471,12915],{"class":42},[36,170473,69601],{"class":405},[36,170475,12915],{"class":42},[36,170477,151873],{"class":405},[36,170479,33723],{"class":42},[36,170481,170482,170484,170486,170489,170491,170493,170496,170498],{"class":38,"line":443},[36,170483,170235],{"class":42},[36,170485,47],{"class":46},[36,170487,170488],{"class":42}," csv.DictWriter(",[36,170490,45831],{"class":5696},[36,170492,12915],{"class":42},[36,170494,170495],{"class":5696},"fieldnames",[36,170497,47],{"class":46},[36,170499,170500],{"class":42},"fieldnames)\n",[36,170502,170503],{"class":38,"line":2092},[36,170504,170505],{"class":42},"    writer.writeheader()\n",[36,170507,170508],{"class":38,"line":2097},[36,170509,170249],{"class":42},[14,170511,170513],{"id":170512},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170515,123693],{},[579,170517,170518,170521,170524],{},[582,170519,170520],{},"读取文本文件。",[582,170522,170523],{},"统计每个单词出现次数。",[582,170525,170526],{},"输出出现次数最多的前 10 个单词。",[19,170528,10515],{},[26,170530,170532],{"className":28,"code":170531,"language":30,"meta":31,"style":31},"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",[33,170533,170534,170544,170548,170561,170577,170581,170591,170600,170604,170616,170636,170645,170649,170667,170671,170701,170705,170721],{"__ignoreMap":31},[36,170535,170536,170538,170540,170542],{"class":38,"line":39},[36,170537,31215],{"class":46},[36,170539,108712],{"class":42},[36,170541,30871],{"class":46},[36,170543,108717],{"class":42},[36,170545,170546],{"class":38,"line":66},[36,170547,2880],{"emptyLinePlaceholder":553},[36,170549,170550,170552,170554,170556,170559],{"class":38,"line":73},[36,170551,168712],{"class":42},[36,170553,47],{"class":46},[36,170555,108946],{"class":42},[36,170557,170558],{"class":405},"\"article.txt\"",[36,170560,63],{"class":42},[36,170562,170563,170565,170567,170569,170571,170573,170575],{"class":38,"line":79},[36,170564,168895],{"class":42},[36,170566,47],{"class":46},[36,170568,169772],{"class":42},[36,170570,147207],{"class":5696},[36,170572,47],{"class":46},[36,170574,147212],{"class":405},[36,170576,63],{"class":42},[36,170578,170579],{"class":38,"line":85},[36,170580,2880],{"emptyLinePlaceholder":553},[36,170582,170583,170586,170588],{"class":38,"line":419},[36,170584,170585],{"class":42},"words ",[36,170587,47],{"class":46},[36,170589,170590],{"class":42}," content.lower().split()\n",[36,170592,170593,170596,170598],{"class":38,"line":425},[36,170594,170595],{"class":42},"counter ",[36,170597,47],{"class":46},[36,170599,88345],{"class":42},[36,170601,170602],{"class":38,"line":431},[36,170603,2880],{"emptyLinePlaceholder":553},[36,170605,170606,170608,170611,170613],{"class":38,"line":437},[36,170607,3505],{"class":46},[36,170609,170610],{"class":42}," word ",[36,170612,26524],{"class":46},[36,170614,170615],{"class":42}," words:\n",[36,170617,170618,170621,170623,170626,170629,170631,170634],{"class":38,"line":443},[36,170619,170620],{"class":42},"    word ",[36,170622,47],{"class":46},[36,170624,170625],{"class":42}," word.strip(",[36,170627,170628],{"class":405},"\".,!?;:",[36,170630,156896],{"class":53},[36,170632,170633],{"class":405},"'()[]\"",[36,170635,63],{"class":42},[36,170637,170638,170640,170642],{"class":38,"line":2092},[36,170639,3581],{"class":46},[36,170641,39407],{"class":46},[36,170643,170644],{"class":42}," word:\n",[36,170646,170647],{"class":38,"line":2097},[36,170648,148913],{"class":46},[36,170650,170651,170654,170656,170659,170661,170663,170665],{"class":38,"line":2103},[36,170652,170653],{"class":42},"    counter[word] ",[36,170655,47],{"class":46},[36,170657,170658],{"class":42}," counter.get(word, ",[36,170660,812],{"class":53},[36,170662,14194],{"class":42},[36,170664,1097],{"class":46},[36,170666,56176],{"class":53},[36,170668,170669],{"class":38,"line":2108},[36,170670,2880],{"emptyLinePlaceholder":553},[36,170672,170673,170676,170678,170680,170683,170685,170687,170689,170691,170693,170695,170697,170699],{"class":38,"line":2122},[36,170674,170675],{"class":42},"items ",[36,170677,47],{"class":46},[36,170679,164005],{"class":53},[36,170681,170682],{"class":42},"(counter.items(), ",[36,170684,154347],{"class":5696},[36,170686,154350],{"class":46},[36,170688,154353],{"class":42},[36,170690,54],{"class":53},[36,170692,112603],{"class":42},[36,170694,163929],{"class":5696},[36,170696,47],{"class":46},[36,170698,31954],{"class":53},[36,170700,63],{"class":42},[36,170702,170703],{"class":38,"line":2127},[36,170704,2880],{"emptyLinePlaceholder":553},[36,170706,170707,170709,170712,170714,170717,170719],{"class":38,"line":2133},[36,170708,3505],{"class":46},[36,170710,170711],{"class":42}," word, count ",[36,170713,26524],{"class":46},[36,170715,170716],{"class":42}," items[:",[36,170718,1062],{"class":53},[36,170720,166156],{"class":42},[36,170722,170723,170725],{"class":38,"line":2154},[36,170724,31777],{"class":53},[36,170726,170727],{"class":42},"(word, count)\n",[14,170729,170731],{"id":170730},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,170733,170735],{"className":28,"code":170734,"language":30,"meta":31,"style":31},"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",[33,170736,170737,170743,170753,170757,170769,170773,170777,170785,170795,170801,170805,170835,170845,170849,170853,170861,170891,170915,170919,170923,170931,170960,170965],{"__ignoreMap":31},[36,170738,170739,170741],{"class":38,"line":39},[36,170740,30871],{"class":46},[36,170742,147492],{"class":42},[36,170744,170745,170747,170749,170751],{"class":38,"line":66},[36,170746,31215],{"class":46},[36,170748,108712],{"class":42},[36,170750,30871],{"class":46},[36,170752,108717],{"class":42},[36,170754,170755],{"class":38,"line":73},[36,170756,2880],{"emptyLinePlaceholder":553},[36,170758,170759,170761,170763,170765,170767],{"class":38,"line":79},[36,170760,152225],{"class":53},[36,170762,14044],{"class":46},[36,170764,108946],{"class":42},[36,170766,152232],{"class":405},[36,170768,63],{"class":42},[36,170770,170771],{"class":38,"line":85},[36,170772,2880],{"emptyLinePlaceholder":553},[36,170774,170775],{"class":38,"line":419},[36,170776,2880],{"emptyLinePlaceholder":553},[36,170778,170779,170781,170783],{"class":38,"line":425},[36,170780,32424],{"class":46},[36,170782,152249],{"class":2443},[36,170784,32430],{"class":42},[36,170786,170787,170789,170791,170793],{"class":38,"line":431},[36,170788,3581],{"class":46},[36,170790,39407],{"class":46},[36,170792,152260],{"class":53},[36,170794,152263],{"class":42},[36,170796,170797,170799],{"class":38,"line":437},[36,170798,15232],{"class":46},[36,170800,52315],{"class":42},[36,170802,170803],{"class":38,"line":443},[36,170804,2880],{"emptyLinePlaceholder":553},[36,170806,170807,170809,170811,170813,170815,170817,170819,170821,170823,170825,170827,170829,170831,170833],{"class":38,"line":2092},[36,170808,34655],{"class":46},[36,170810,147192],{"class":53},[36,170812,345],{"class":42},[36,170814,152225],{"class":53},[36,170816,12915],{"class":42},[36,170818,147202],{"class":405},[36,170820,12915],{"class":42},[36,170822,147207],{"class":5696},[36,170824,47],{"class":46},[36,170826,147212],{"class":405},[36,170828,14194],{"class":42},[36,170830,31861],{"class":46},[36,170832,148554],{"class":5696},[36,170834,4219],{"class":42},[36,170836,170837,170839,170841,170843],{"class":38,"line":2097},[36,170838,15232],{"class":46},[36,170840,148565],{"class":42},[36,170842,45831],{"class":5696},[36,170844,63],{"class":42},[36,170846,170847],{"class":38,"line":2103},[36,170848,2880],{"emptyLinePlaceholder":553},[36,170850,170851],{"class":38,"line":2108},[36,170852,2880],{"emptyLinePlaceholder":553},[36,170854,170855,170857,170859],{"class":38,"line":2122},[36,170856,32424],{"class":46},[36,170858,152359],{"class":2443},[36,170860,152362],{"class":42},[36,170862,170863,170865,170867,170869,170871,170873,170875,170877,170879,170881,170883,170885,170887,170889],{"class":38,"line":2127},[36,170864,34655],{"class":46},[36,170866,147192],{"class":53},[36,170868,345],{"class":42},[36,170870,152225],{"class":53},[36,170872,12915],{"class":42},[36,170874,152377],{"class":405},[36,170876,12915],{"class":42},[36,170878,147207],{"class":5696},[36,170880,47],{"class":46},[36,170882,147212],{"class":405},[36,170884,14194],{"class":42},[36,170886,31861],{"class":46},[36,170888,148554],{"class":5696},[36,170890,4219],{"class":42},[36,170892,170893,170895,170897,170899,170901,170903,170905,170907,170909,170911,170913],{"class":38,"line":2133},[36,170894,152398],{"class":42},[36,170896,45831],{"class":5696},[36,170898,12915],{"class":42},[36,170900,147538],{"class":5696},[36,170902,47],{"class":46},[36,170904,34464],{"class":53},[36,170906,12915],{"class":42},[36,170908,152413],{"class":5696},[36,170910,47],{"class":46},[36,170912,96],{"class":53},[36,170914,63],{"class":42},[36,170916,170917],{"class":38,"line":2154},[36,170918,2880],{"emptyLinePlaceholder":553},[36,170920,170921],{"class":38,"line":2159},[36,170922,2880],{"emptyLinePlaceholder":553},[36,170924,170925,170927,170929],{"class":38,"line":2173},[36,170926,160117],{"class":42},[36,170928,47],{"class":46},[36,170930,153443],{"class":42},[36,170932,170933,170936,170938,170940,170942,170944,170946,170948,170950,170952,170954,170956,170958],{"class":38,"line":2178},[36,170934,170935],{"class":42},"students.append({",[36,170937,63156],{"class":405},[36,170939,51914],{"class":42},[36,170941,150289],{"class":405},[36,170943,12915],{"class":42},[36,170945,69601],{"class":405},[36,170947,51914],{"class":42},[36,170949,1263],{"class":53},[36,170951,12915],{"class":42},[36,170953,151873],{"class":405},[36,170955,51914],{"class":42},[36,170957,1602],{"class":53},[36,170959,165553],{"class":42},[36,170961,170962],{"class":38,"line":2207},[36,170963,170964],{"class":42},"save_students(students)\n",[36,170966,170967,170969,170971,170974],{"class":38,"line":2212},[36,170968,30894],{"class":53},[36,170970,345],{"class":42},[36,170972,170973],{"class":405},"\"保存成功\"",[36,170975,63],{"class":42},[14,170977,170979],{"id":170978},"_814-易错点","8.14 易错点",[579,170981,170982,170986,170992,170997,171004,171011],{},[582,170983,170984,169245],{},[33,170985,1408],{},[582,170987,170988,170989,28866],{},"读写中文要指定 ",[33,170990,170991],{},"encoding=\"utf-8\"",[582,170993,170994,170995,28866],{},"打开文件后要关闭，推荐使用 ",[33,170996,108234],{},[582,170998,170999,171000,171003],{},"读取大文件不要直接 ",[33,171001,171002],{},"read()"," 全部内容。",[582,171005,171006,171007,171010],{},"Windows 写 CSV 时建议加 ",[33,171008,171009],{},"newline=\"\"","，避免空行。",[582,171012,171013],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171015,171017],{"id":171016},"_815-本章练习","8.15 本章练习",[579,171019,171020,171027,171032,171035,171038],{},[582,171021,171022,171023,171026],{},"写入一个 ",[33,171024,171025],{},"students.txt","，每行保存一个学生姓名。",[582,171028,104756,171029,171031],{},[33,171030,171025],{}," 并输出所有学生。",[582,171033,171034],{},"把学生列表保存为 JSON 文件。",[582,171036,171037],{},"从 JSON 文件读取学生数据，计算平均分。",[582,171039,171040,171041,171044,171045,171048],{},"写一个日志函数 ",[33,171042,171043],{},"write_log(message)","，每次调用向 ",[33,171046,171047],{},"app.log"," 追加一行。",[539,171050,171051],{},"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":31,"searchDepth":66,"depth":66,"links":171053},[171054,171055,171059,171060,171066,171067,171068,171069,171070,171071,171072,171073,171074,171075,171076],{"id":168565,"depth":66,"text":168566},{"id":168606,"depth":66,"text":168607,"children":171056},[171057,171058],{"id":168610,"depth":73,"text":168611},{"id":168644,"depth":73,"text":168645},{"id":168758,"depth":66,"text":168759},{"id":168851,"depth":66,"text":168852,"children":171061},[171062,171063,171064,171065],{"id":168855,"depth":73,"text":168856},{"id":168942,"depth":73,"text":168943},{"id":169012,"depth":73,"text":169013},{"id":169106,"depth":73,"text":169107},{"id":169176,"depth":66,"text":169177},{"id":169239,"depth":66,"text":169240},{"id":169400,"depth":66,"text":169401},{"id":169463,"depth":66,"text":169464},{"id":169579,"depth":66,"text":169580},{"id":169789,"depth":66,"text":169790},{"id":170101,"depth":66,"text":170102},{"id":170512,"depth":66,"text":170513},{"id":170730,"depth":66,"text":170731},{"id":170978,"depth":66,"text":170979},{"id":171016,"depth":66,"text":171017},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168557,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171083,"title":171084,"body":171085,"description":550,"extension":551,"meta":173271,"navigation":553,"path":173272,"seo":173273,"stem":173274,"__hash__":173275},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171086,"toc":173238},[171087,171090,171094,171097,171100,171192,171194,171213,171218,171222,171225,171228,171257,171264,171267,171271,171274,171303,171305,171357,171363,171416,171420,171518,171521,171588,171592,171649,171651,171657,171661,171666,171672,171763,171768,171772,171775,171853,171856,171894,171898,172016,172019,172023,172026,172071,172074,172078,172083,172089,172139,172142,172173,172177,172181,172211,172215,172250,172254,172289,172329,172333,172349,172352,172356,172360,172439,172443,172484,172488,172543,172547,172581,172585,172615,172624,172631,172637,172694,172697,172705,172708,172712,172719,172722,172728,172731,172748,172753,172757,172763,172776,172779,172816,172819,172830,172833,172847,172850,172864,172868,172875,172908,172911,172913,172919,172922,172926,172928,172934,172939,173112,173116,173179,173183,173207,173211,173235],[10,171088,171084],{"id":171089},"_9-异常模块与包",[14,171091,171093],{"id":171092},"_91-什么是异常","9.1 什么是异常",[19,171095,171096],{},"异常是程序运行过程中出现的错误。",[19,171098,171099],{},"常见异常：",[758,171101,171102,171111],{},[761,171103,171104],{},[764,171105,171106,171109],{},[767,171107,171108],{},"异常",[767,171110,26350],{},[805,171112,171113,171123,171133,171142,171152,171162,171172,171182],{},[764,171114,171115,171120],{},[810,171116,171117],{},[33,171118,171119],{},"NameError",[810,171121,171122],{},"使用了未定义变量",[764,171124,171125,171130],{},[810,171126,171127],{},[33,171128,171129],{},"TypeError",[810,171131,171132],{},"类型不匹配",[764,171134,171135,171139],{},[810,171136,171137],{},[33,171138,155235],{},[810,171140,171141],{},"值不合法",[764,171143,171144,171149],{},[810,171145,171146],{},[33,171147,171148],{},"IndexError",[810,171150,171151],{},"列表索引越界",[764,171153,171154,171159],{},[810,171155,171156],{},[33,171157,171158],{},"KeyError",[810,171160,171161],{},"字典 key 不存在",[764,171163,171164,171169],{},[810,171165,171166],{},[33,171167,171168],{},"FileNotFoundError",[810,171170,171171],{},"文件不存在",[764,171173,171174,171179],{},[810,171175,171176],{},[33,171177,171178],{},"ZeroDivisionError",[810,171180,171181],{},"除数为 0",[764,171183,171184,171189],{},[810,171185,171186],{},[33,171187,171188],{},"ImportError",[810,171190,171191],{},"导入失败",[19,171193,15615],{},[26,171195,171197],{"className":28,"code":171196,"language":30,"meta":31,"style":31},"num = int(\"abc\")\n",[33,171198,171199],{"__ignoreMap":31},[36,171200,171201,171203,171205,171207,171209,171211],{"class":38,"line":39},[36,171202,156188],{"class":42},[36,171204,47],{"class":46},[36,171206,2862],{"class":53},[36,171208,345],{"class":42},[36,171210,156281],{"class":405},[36,171212,63],{"class":42},[19,171214,171215,171216,28866],{},"会触发 ",[33,171217,155235],{},[14,171219,171221],{"id":171220},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171223,171224],{},"如果不处理异常，程序会直接终止。",[19,171226,171227],{},"例如用户输入年龄：",[26,171229,171231],{"className":28,"code":171230,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,171232,171233,171251],{"__ignoreMap":31},[36,171234,171235,171237,171239,171241,171243,171245,171247,171249],{"class":38,"line":39},[36,171236,146947],{"class":42},[36,171238,47],{"class":46},[36,171240,2862],{"class":53},[36,171242,345],{"class":42},[36,171244,54298],{"class":53},[36,171246,345],{"class":42},[36,171248,152795],{"class":405},[36,171250,370],{"class":42},[36,171252,171253,171255],{"class":38,"line":66},[36,171254,30894],{"class":53},[36,171256,156162],{"class":42},[19,171258,171259,171260,171263],{},"用户输入 ",[33,171261,171262],{},"abc","，程序就会报错退出。",[19,171265,171266],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171268,171270],{"id":171269},"_93-try-except","9.3 try except",[19,171272,171273],{},"基础语法：",[26,171275,171277],{"className":28,"code":171276,"language":30,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,171278,171279,171286,171291,171298],{"__ignoreMap":31},[36,171280,171281,171284],{"class":38,"line":39},[36,171282,171283],{"class":46},"try",[36,171285,4219],{"class":42},[36,171287,171288],{"class":38,"line":66},[36,171289,171290],{"class":42},"    可能出错的代码\n",[36,171292,171293,171296],{"class":38,"line":73},[36,171294,171295],{"class":46},"except",[36,171297,4219],{"class":42},[36,171299,171300],{"class":38,"line":79},[36,171301,171302],{"class":42},"    出错后的处理代码\n",[19,171304,15615],{},[26,171306,171308],{"className":28,"code":171307,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,171309,171310,171316,171334,171340,171346],{"__ignoreMap":31},[36,171311,171312,171314],{"class":38,"line":39},[36,171313,171283],{"class":46},[36,171315,4219],{"class":42},[36,171317,171318,171320,171322,171324,171326,171328,171330,171332],{"class":38,"line":66},[36,171319,152787],{"class":42},[36,171321,47],{"class":46},[36,171323,2862],{"class":53},[36,171325,345],{"class":42},[36,171327,54298],{"class":53},[36,171329,345],{"class":42},[36,171331,152795],{"class":405},[36,171333,370],{"class":42},[36,171335,171336,171338],{"class":38,"line":73},[36,171337,31777],{"class":53},[36,171339,156162],{"class":42},[36,171341,171342,171344],{"class":38,"line":79},[36,171343,171295],{"class":46},[36,171345,4219],{"class":42},[36,171347,171348,171350,171352,171355],{"class":38,"line":85},[36,171349,31777],{"class":53},[36,171351,345],{"class":42},[36,171353,171354],{"class":405},"\"年龄必须是数字\"",[36,171356,63],{"class":42},[19,171358,171359,171360,171362],{},"不建议裸写 ",[33,171361,171295],{},"，最好指定异常类型。",[26,171364,171366],{"className":28,"code":171365,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,171367,171368,171374,171392,171398,171406],{"__ignoreMap":31},[36,171369,171370,171372],{"class":38,"line":39},[36,171371,171283],{"class":46},[36,171373,4219],{"class":42},[36,171375,171376,171378,171380,171382,171384,171386,171388,171390],{"class":38,"line":66},[36,171377,152787],{"class":42},[36,171379,47],{"class":46},[36,171381,2862],{"class":53},[36,171383,345],{"class":42},[36,171385,54298],{"class":53},[36,171387,345],{"class":42},[36,171389,152795],{"class":405},[36,171391,370],{"class":42},[36,171393,171394,171396],{"class":38,"line":73},[36,171395,31777],{"class":53},[36,171397,156162],{"class":42},[36,171399,171400,171402,171404],{"class":38,"line":79},[36,171401,171295],{"class":46},[36,171403,152627],{"class":53},[36,171405,4219],{"class":42},[36,171407,171408,171410,171412,171414],{"class":38,"line":85},[36,171409,31777],{"class":53},[36,171411,345],{"class":42},[36,171413,171354],{"class":405},[36,171415,63],{"class":42},[14,171417,171419],{"id":171418},"_94-捕获多个异常","9.4 捕获多个异常",[26,171421,171423],{"className":28,"code":171422,"language":30,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[33,171424,171425,171431,171452,171472,171479,171487,171498,171507],{"__ignoreMap":31},[36,171426,171427,171429],{"class":38,"line":39},[36,171428,171283],{"class":46},[36,171430,4219],{"class":42},[36,171432,171433,171436,171438,171440,171442,171444,171446,171448,171450],{"class":38,"line":66},[36,171434,171435],{"class":42},"    nums ",[36,171437,47],{"class":46},[36,171439,52703],{"class":42},[36,171441,54],{"class":53},[36,171443,12915],{"class":42},[36,171445,96],{"class":53},[36,171447,12915],{"class":42},[36,171449,127],{"class":53},[36,171451,33723],{"class":42},[36,171453,171454,171457,171459,171461,171463,171465,171467,171470],{"class":38,"line":73},[36,171455,171456],{"class":42},"    index ",[36,171458,47],{"class":46},[36,171460,2862],{"class":53},[36,171462,345],{"class":42},[36,171464,54298],{"class":53},[36,171466,345],{"class":42},[36,171468,171469],{"class":405},"\"请输入索引:\"",[36,171471,370],{"class":42},[36,171473,171474,171476],{"class":38,"line":79},[36,171475,31777],{"class":53},[36,171477,171478],{"class":42},"(nums[index])\n",[36,171480,171481,171483,171485],{"class":38,"line":85},[36,171482,171295],{"class":46},[36,171484,152627],{"class":53},[36,171486,4219],{"class":42},[36,171488,171489,171491,171493,171496],{"class":38,"line":419},[36,171490,31777],{"class":53},[36,171492,345],{"class":42},[36,171494,171495],{"class":405},"\"索引必须是整数\"",[36,171497,63],{"class":42},[36,171499,171500,171502,171505],{"class":38,"line":425},[36,171501,171295],{"class":46},[36,171503,171504],{"class":53}," IndexError",[36,171506,4219],{"class":42},[36,171508,171509,171511,171513,171516],{"class":38,"line":431},[36,171510,31777],{"class":53},[36,171512,345],{"class":42},[36,171514,171515],{"class":405},"\"索引越界\"",[36,171517,63],{"class":42},[19,171519,171520],{},"多个异常使用相同处理逻辑：",[26,171522,171524],{"className":28,"code":171523,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,171525,171526,171532,171550,171563,171577],{"__ignoreMap":31},[36,171527,171528,171530],{"class":38,"line":39},[36,171529,171283],{"class":46},[36,171531,4219],{"class":42},[36,171533,171534,171536,171538,171540,171542,171544,171546,171548],{"class":38,"line":66},[36,171535,46070],{"class":42},[36,171537,47],{"class":46},[36,171539,2862],{"class":53},[36,171541,345],{"class":42},[36,171543,54298],{"class":53},[36,171545,345],{"class":42},[36,171547,156197],{"class":405},[36,171549,370],{"class":42},[36,171551,171552,171554,171556,171558,171560],{"class":38,"line":73},[36,171553,31777],{"class":53},[36,171555,345],{"class":42},[36,171557,1062],{"class":53},[36,171559,156447],{"class":46},[36,171561,171562],{"class":42}," num)\n",[36,171564,171565,171567,171569,171571,171573,171575],{"class":38,"line":79},[36,171566,171295],{"class":46},[36,171568,2138],{"class":42},[36,171570,155235],{"class":53},[36,171572,12915],{"class":42},[36,171574,171178],{"class":53},[36,171576,31264],{"class":42},[36,171578,171579,171581,171583,171586],{"class":38,"line":85},[36,171580,31777],{"class":53},[36,171582,345],{"class":42},[36,171584,171585],{"class":405},"\"输入不合法\"",[36,171587,63],{"class":42},[14,171589,171591],{"id":171590},"_95-获取异常信息","9.5 获取异常信息",[26,171593,171595],{"className":28,"code":171594,"language":30,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,171596,171597,171603,171617,171628],{"__ignoreMap":31},[36,171598,171599,171601],{"class":38,"line":39},[36,171600,171283],{"class":46},[36,171602,4219],{"class":42},[36,171604,171605,171607,171609,171611,171613,171615],{"class":38,"line":66},[36,171606,46070],{"class":42},[36,171608,47],{"class":46},[36,171610,2862],{"class":53},[36,171612,345],{"class":42},[36,171614,156281],{"class":405},[36,171616,63],{"class":42},[36,171618,171619,171621,171623,171625],{"class":38,"line":73},[36,171620,171295],{"class":46},[36,171622,152627],{"class":53},[36,171624,65081],{"class":46},[36,171626,171627],{"class":42}," e:\n",[36,171629,171630,171632,171634,171636,171639,171641,171643,171645,171647],{"class":38,"line":79},[36,171631,31777],{"class":53},[36,171633,345],{"class":42},[36,171635,677],{"class":46},[36,171637,171638],{"class":405},"\"出错了:",[36,171640,1509],{"class":53},[36,171642,697],{"class":42},[36,171644,1559],{"class":53},[36,171646,870],{"class":405},[36,171648,63],{"class":42},[19,171650,146858],{},[26,171652,171655],{"className":171653,"code":171654,"language":5667,"meta":31},[5665],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,171656,171654],{"__ignoreMap":31},[14,171658,171660],{"id":171659},"_96-else和finally","9.6 else和finally",[19,171662,171663,171665],{},[33,171664,2181],{},"：没有异常时执行。",[19,171667,171668,171671],{},[33,171669,171670],{},"finally","：无论是否异常都会执行。",[26,171673,171675],{"className":28,"code":171674,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[33,171676,171677,171683,171701,171709,171719,171725,171746,171752],{"__ignoreMap":31},[36,171678,171679,171681],{"class":38,"line":39},[36,171680,171283],{"class":46},[36,171682,4219],{"class":42},[36,171684,171685,171687,171689,171691,171693,171695,171697,171699],{"class":38,"line":66},[36,171686,46070],{"class":42},[36,171688,47],{"class":46},[36,171690,2862],{"class":53},[36,171692,345],{"class":42},[36,171694,54298],{"class":53},[36,171696,345],{"class":42},[36,171698,156197],{"class":405},[36,171700,370],{"class":42},[36,171702,171703,171705,171707],{"class":38,"line":73},[36,171704,171295],{"class":46},[36,171706,152627],{"class":53},[36,171708,4219],{"class":42},[36,171710,171711,171713,171715,171717],{"class":38,"line":79},[36,171712,31777],{"class":53},[36,171714,345],{"class":42},[36,171716,153615],{"class":405},[36,171718,63],{"class":42},[36,171720,171721,171723],{"class":38,"line":85},[36,171722,2181],{"class":46},[36,171724,4219],{"class":42},[36,171726,171727,171729,171731,171733,171736,171738,171740,171742,171744],{"class":38,"line":419},[36,171728,31777],{"class":53},[36,171730,345],{"class":42},[36,171732,677],{"class":46},[36,171734,171735],{"class":405},"\"输入正确:",[36,171737,1509],{"class":53},[36,171739,2145],{"class":42},[36,171741,1559],{"class":53},[36,171743,870],{"class":405},[36,171745,63],{"class":42},[36,171747,171748,171750],{"class":38,"line":425},[36,171749,171670],{"class":46},[36,171751,4219],{"class":42},[36,171753,171754,171756,171758,171761],{"class":38,"line":431},[36,171755,31777],{"class":53},[36,171757,345],{"class":42},[36,171759,171760],{"class":405},"\"程序结束\"",[36,171762,63],{"class":42},[19,171764,171765,171767],{},[33,171766,171670],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171769,171771],{"id":171770},"_97-抛出异常","9.7 抛出异常",[19,171773,171774],{},"程序可以主动抛出异常。",[26,171776,171778],{"className":28,"code":171777,"language":30,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[33,171779,171780,171789,171801,171814,171834,171838,171842],{"__ignoreMap":31},[36,171781,171782,171784,171787],{"class":38,"line":39},[36,171783,32424],{"class":46},[36,171785,171786],{"class":2443}," set_age",[36,171788,161816],{"class":42},[36,171790,171791,171793,171795,171797,171799],{"class":38,"line":66},[36,171792,3581],{"class":46},[36,171794,16187],{"class":42},[36,171796,1523],{"class":46},[36,171798,4573],{"class":53},[36,171800,4219],{"class":42},[36,171802,171803,171805,171807,171809,171812],{"class":38,"line":73},[36,171804,103833],{"class":46},[36,171806,152627],{"class":53},[36,171808,345],{"class":42},[36,171810,171811],{"class":405},"\"年龄不能为负数\"",[36,171813,63],{"class":42},[36,171815,171816,171818,171820,171822,171824,171826,171828,171830,171832],{"class":38,"line":79},[36,171817,31777],{"class":53},[36,171819,345],{"class":42},[36,171821,677],{"class":46},[36,171823,162384],{"class":405},[36,171825,1509],{"class":53},[36,171827,70698],{"class":42},[36,171829,1559],{"class":53},[36,171831,870],{"class":405},[36,171833,63],{"class":42},[36,171835,171836],{"class":38,"line":85},[36,171837,2880],{"emptyLinePlaceholder":553},[36,171839,171840],{"class":38,"line":419},[36,171841,2880],{"emptyLinePlaceholder":553},[36,171843,171844,171847,171849,171851],{"class":38,"line":425},[36,171845,171846],{"class":42},"set_age(",[36,171848,173],{"class":46},[36,171850,54],{"class":53},[36,171852,63],{"class":42},[19,171854,171855],{},"调用者可以捕获：",[26,171857,171859],{"className":28,"code":171858,"language":30,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,171860,171861,171867,171878,171888],{"__ignoreMap":31},[36,171862,171863,171865],{"class":38,"line":39},[36,171864,171283],{"class":46},[36,171866,4219],{"class":42},[36,171868,171869,171872,171874,171876],{"class":38,"line":66},[36,171870,171871],{"class":42},"    set_age(",[36,171873,173],{"class":46},[36,171875,54],{"class":53},[36,171877,63],{"class":42},[36,171879,171880,171882,171884,171886],{"class":38,"line":73},[36,171881,171295],{"class":46},[36,171883,152627],{"class":53},[36,171885,65081],{"class":46},[36,171887,171627],{"class":42},[36,171889,171890,171892],{"class":38,"line":79},[36,171891,31777],{"class":53},[36,171893,67476],{"class":42},[14,171895,171897],{"id":171896},"_98-自定义异常","9.8 自定义异常",[26,171899,171901],{"className":28,"code":171900,"language":30,"meta":31,"style":31},"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",[33,171902,171903,171917,171921,171925,171929,171937,171947,171958,171968,171972,171976,171982,171999,172010],{"__ignoreMap":31},[36,171904,171905,171907,171910,171912,171915],{"class":38,"line":39},[36,171906,15174],{"class":46},[36,171908,171909],{"class":2443}," BalanceNotEnoughError",[36,171911,345],{"class":42},[36,171913,171914],{"class":53},"Exception",[36,171916,31264],{"class":42},[36,171918,171919],{"class":38,"line":66},[36,171920,149938],{"class":46},[36,171922,171923],{"class":38,"line":73},[36,171924,2880],{"emptyLinePlaceholder":553},[36,171926,171927],{"class":38,"line":79},[36,171928,2880],{"emptyLinePlaceholder":553},[36,171930,171931,171933,171935],{"class":38,"line":85},[36,171932,32424],{"class":46},[36,171934,150587],{"class":2443},[36,171936,163213],{"class":42},[36,171938,171939,171941,171943,171945],{"class":38,"line":419},[36,171940,3581],{"class":46},[36,171942,150543],{"class":42},[36,171944,1573],{"class":46},[36,171946,162990],{"class":42},[36,171948,171949,171951,171954,171956],{"class":38,"line":425},[36,171950,103833],{"class":46},[36,171952,171953],{"class":42}," BalanceNotEnoughError(",[36,171955,150638],{"class":405},[36,171957,63],{"class":42},[36,171959,171960,171962,171964,171966],{"class":38,"line":431},[36,171961,4570],{"class":46},[36,171963,163220],{"class":42},[36,171965,173],{"class":46},[36,171967,150576],{"class":42},[36,171969,171970],{"class":38,"line":437},[36,171971,2880],{"emptyLinePlaceholder":553},[36,171973,171974],{"class":38,"line":443},[36,171975,2880],{"emptyLinePlaceholder":553},[36,171977,171978,171980],{"class":38,"line":2092},[36,171979,171283],{"class":46},[36,171981,4219],{"class":42},[36,171983,171984,171986,171988,171991,171993,171995,171997],{"class":38,"line":2097},[36,171985,162891],{"class":42},[36,171987,47],{"class":46},[36,171989,171990],{"class":42}," withdraw(",[36,171992,930],{"class":53},[36,171994,12915],{"class":42},[36,171996,2202],{"class":53},[36,171998,63],{"class":42},[36,172000,172001,172003,172006,172008],{"class":38,"line":2103},[36,172002,171295],{"class":46},[36,172004,172005],{"class":42}," BalanceNotEnoughError ",[36,172007,31861],{"class":46},[36,172009,171627],{"class":42},[36,172011,172012,172014],{"class":38,"line":2108},[36,172013,31777],{"class":53},[36,172015,67476],{"class":42},[19,172017,172018],{},"入门阶段大多数情况使用内置异常即可。",[14,172020,172022],{"id":172021},"_99-traceback","9.9 traceback",[19,172024,172025],{},"调试时可以输出完整异常堆栈。",[26,172027,172029],{"className":28,"code":172028,"language":30,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,172030,172031,172038,172042,172048,172058,172066],{"__ignoreMap":31},[36,172032,172033,172035],{"class":38,"line":39},[36,172034,30871],{"class":46},[36,172036,172037],{"class":42}," traceback\n",[36,172039,172040],{"class":38,"line":66},[36,172041,2880],{"emptyLinePlaceholder":553},[36,172043,172044,172046],{"class":38,"line":73},[36,172045,171283],{"class":46},[36,172047,4219],{"class":42},[36,172049,172050,172052,172054,172056],{"class":38,"line":79},[36,172051,2465],{"class":53},[36,172053,345],{"class":42},[36,172055,156281],{"class":405},[36,172057,63],{"class":42},[36,172059,172060,172062,172064],{"class":38,"line":85},[36,172061,171295],{"class":46},[36,172063,152627],{"class":53},[36,172065,4219],{"class":42},[36,172067,172068],{"class":38,"line":419},[36,172069,172070],{"class":42},"    traceback.print_exc()\n",[19,172072,172073],{},"日志系统中常把异常堆栈记录到文件。",[14,172075,172077],{"id":172076},"_910-什么是模块","9.10 什么是模块",[19,172079,172080,172081,126384],{},"模块就是一个 ",[33,172082,146753],{},[19,172084,172085,172086,25099],{},"例如创建 ",[33,172087,172088],{},"my_math.py",[26,172090,172092],{"className":28,"code":172091,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[33,172093,172094,172102,172112,172116,172120,172129],{"__ignoreMap":31},[36,172095,172096,172098,172100],{"class":38,"line":39},[36,172097,32424],{"class":46},[36,172099,5689],{"class":2443},[36,172101,151494],{"class":42},[36,172103,172104,172106,172108,172110],{"class":38,"line":66},[36,172105,4570],{"class":46},[36,172107,11349],{"class":42},[36,172109,1097],{"class":46},[36,172111,151505],{"class":42},[36,172113,172114],{"class":38,"line":73},[36,172115,2880],{"emptyLinePlaceholder":553},[36,172117,172118],{"class":38,"line":79},[36,172119,2880],{"emptyLinePlaceholder":553},[36,172121,172122,172124,172127],{"class":38,"line":85},[36,172123,32424],{"class":46},[36,172125,172126],{"class":2443}," sub",[36,172128,151494],{"class":42},[36,172130,172131,172133,172135,172137],{"class":38,"line":419},[36,172132,4570],{"class":46},[36,172134,11349],{"class":42},[36,172136,173],{"class":46},[36,172138,151505],{"class":42},[19,172140,172141],{},"在另一个文件中导入：",[26,172143,172145],{"className":28,"code":172144,"language":30,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,172146,172147,172154,172158],{"__ignoreMap":31},[36,172148,172149,172151],{"class":38,"line":39},[36,172150,30871],{"class":46},[36,172152,172153],{"class":42}," my_math\n",[36,172155,172156],{"class":38,"line":66},[36,172157,2880],{"emptyLinePlaceholder":553},[36,172159,172160,172162,172165,172167,172169,172171],{"class":38,"line":73},[36,172161,30894],{"class":53},[36,172163,172164],{"class":42},"(my_math.add(",[36,172166,54],{"class":53},[36,172168,12915],{"class":42},[36,172170,96],{"class":53},[36,172172,370],{"class":42},[14,172174,172176],{"id":172175},"_911-import导入","9.11 import导入",[596,172178,172180],{"id":172179},"_9111-导入模块","9.11.1 导入模块",[26,172182,172184],{"className":28,"code":172183,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,172185,172186,172192,172196],{"__ignoreMap":31},[36,172187,172188,172190],{"class":38,"line":39},[36,172189,30871],{"class":46},[36,172191,45805],{"class":42},[36,172193,172194],{"class":38,"line":66},[36,172195,2880],{"emptyLinePlaceholder":553},[36,172197,172198,172200,172203,172205,172207,172209],{"class":38,"line":73},[36,172199,30894],{"class":53},[36,172201,172202],{"class":42},"(random.randint(",[36,172204,54],{"class":53},[36,172206,12915],{"class":42},[36,172208,1062],{"class":53},[36,172210,370],{"class":42},[596,172212,172214],{"id":172213},"_9112-导入指定内容","9.11.2 导入指定内容",[26,172216,172218],{"className":28,"code":172217,"language":30,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,172219,172220,172231,172235],{"__ignoreMap":31},[36,172221,172222,172224,172226,172228],{"class":38,"line":39},[36,172223,31215],{"class":46},[36,172225,58273],{"class":42},[36,172227,30871],{"class":46},[36,172229,172230],{"class":42}," randint\n",[36,172232,172233],{"class":38,"line":66},[36,172234,2880],{"emptyLinePlaceholder":553},[36,172236,172237,172239,172242,172244,172246,172248],{"class":38,"line":73},[36,172238,30894],{"class":53},[36,172240,172241],{"class":42},"(randint(",[36,172243,54],{"class":53},[36,172245,12915],{"class":42},[36,172247,1062],{"class":53},[36,172249,370],{"class":42},[596,172251,172253],{"id":172252},"_9113-起别名","9.11.3 起别名",[26,172255,172257],{"className":28,"code":172256,"language":30,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,172258,172259,172270,172274],{"__ignoreMap":31},[36,172260,172261,172263,172265,172267],{"class":38,"line":39},[36,172262,30871],{"class":46},[36,172264,58273],{"class":42},[36,172266,31861],{"class":46},[36,172268,172269],{"class":42}," rd\n",[36,172271,172272],{"class":38,"line":66},[36,172273,2880],{"emptyLinePlaceholder":553},[36,172275,172276,172278,172281,172283,172285,172287],{"class":38,"line":73},[36,172277,30894],{"class":53},[36,172279,172280],{"class":42},"(rd.randint(",[36,172282,54],{"class":53},[36,172284,12915],{"class":42},[36,172286,1062],{"class":53},[36,172288,370],{"class":42},[26,172290,172292],{"className":28,"code":172291,"language":30,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,172293,172294,172310,172314],{"__ignoreMap":31},[36,172295,172296,172298,172300,172302,172305,172307],{"class":38,"line":39},[36,172297,31215],{"class":46},[36,172299,58273],{"class":42},[36,172301,30871],{"class":46},[36,172303,172304],{"class":42}," randint ",[36,172306,31861],{"class":46},[36,172308,172309],{"class":42}," rint\n",[36,172311,172312],{"class":38,"line":66},[36,172313,2880],{"emptyLinePlaceholder":553},[36,172315,172316,172318,172321,172323,172325,172327],{"class":38,"line":73},[36,172317,30894],{"class":53},[36,172319,172320],{"class":42},"(rint(",[36,172322,54],{"class":53},[36,172324,12915],{"class":42},[36,172326,1062],{"class":53},[36,172328,370],{"class":42},[596,172330,172332],{"id":172331},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,172334,172336],{"className":28,"code":172335,"language":30,"meta":31,"style":31},"from random import *\n",[33,172337,172338],{"__ignoreMap":31},[36,172339,172340,172342,172344,172346],{"class":38,"line":39},[36,172341,31215],{"class":46},[36,172343,58273],{"class":42},[36,172345,30871],{"class":46},[36,172347,172348],{"class":46}," *\n",[19,172350,172351],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172353,172355],{"id":172354},"_912-常用内置模块","9.12 常用内置模块",[596,172357,172359],{"id":172358},"_9121-random","9.12.1 random",[26,172361,172363],{"className":28,"code":172362,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[33,172364,172365,172371,172375,172389,172408],{"__ignoreMap":31},[36,172366,172367,172369],{"class":38,"line":39},[36,172368,30871],{"class":46},[36,172370,45805],{"class":42},[36,172372,172373],{"class":38,"line":66},[36,172374,2880],{"emptyLinePlaceholder":553},[36,172376,172377,172379,172381,172383,172385,172387],{"class":38,"line":73},[36,172378,30894],{"class":53},[36,172380,172202],{"class":42},[36,172382,54],{"class":53},[36,172384,12915],{"class":42},[36,172386,1062],{"class":53},[36,172388,370],{"class":42},[36,172390,172391,172393,172396,172398,172400,172402,172404,172406],{"class":38,"line":79},[36,172392,30894],{"class":53},[36,172394,172395],{"class":42},"(random.choice([",[36,172397,150289],{"class":405},[36,172399,12915],{"class":42},[36,172401,151337],{"class":405},[36,172403,12915],{"class":42},[36,172405,160132],{"class":405},[36,172407,33620],{"class":42},[36,172409,172410,172412,172415,172417,172419,172421,172423,172425,172427,172429,172431,172433,172435,172437],{"class":38,"line":85},[36,172411,30894],{"class":53},[36,172413,172414],{"class":42},"(random.sample([",[36,172416,54],{"class":53},[36,172418,12915],{"class":42},[36,172420,96],{"class":53},[36,172422,12915],{"class":42},[36,172424,127],{"class":53},[36,172426,12915],{"class":42},[36,172428,912],{"class":53},[36,172430,12915],{"class":42},[36,172432,938],{"class":53},[36,172434,112603],{"class":42},[36,172436,96],{"class":53},[36,172438,370],{"class":42},[596,172440,172442],{"id":172441},"_9122-time","9.12.2 time",[26,172444,172446],{"className":28,"code":172445,"language":30,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,172447,172448,172454,172458,172465,172473],{"__ignoreMap":31},[36,172449,172450,172452],{"class":38,"line":39},[36,172451,30871],{"class":46},[36,172453,32306],{"class":42},[36,172455,172456],{"class":38,"line":66},[36,172457,2880],{"emptyLinePlaceholder":553},[36,172459,172460,172462],{"class":38,"line":73},[36,172461,30894],{"class":53},[36,172463,172464],{"class":42},"(time.time())\n",[36,172466,172467,172469,172471],{"class":38,"line":79},[36,172468,95543],{"class":42},[36,172470,54],{"class":53},[36,172472,63],{"class":42},[36,172474,172475,172477,172479,172482],{"class":38,"line":85},[36,172476,30894],{"class":53},[36,172478,345],{"class":42},[36,172480,172481],{"class":405},"\"1秒后执行\"",[36,172483,63],{"class":42},[596,172485,172487],{"id":172486},"_9123-datetime","9.12.3 datetime",[26,172489,172491],{"className":28,"code":172490,"language":30,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[33,172492,172493,172505,172509,172519,172526],{"__ignoreMap":31},[36,172494,172495,172497,172500,172502],{"class":38,"line":39},[36,172496,31215],{"class":46},[36,172498,172499],{"class":42}," datetime ",[36,172501,30871],{"class":46},[36,172503,172504],{"class":42}," datetime\n",[36,172506,172507],{"class":38,"line":66},[36,172508,2880],{"emptyLinePlaceholder":553},[36,172510,172511,172514,172516],{"class":38,"line":73},[36,172512,172513],{"class":42},"now ",[36,172515,47],{"class":46},[36,172517,172518],{"class":42}," datetime.now()\n",[36,172520,172521,172523],{"class":38,"line":79},[36,172522,30894],{"class":53},[36,172524,172525],{"class":42},"(now)\n",[36,172527,172528,172530,172533,172536,172538,172541],{"class":38,"line":85},[36,172529,30894],{"class":53},[36,172531,172532],{"class":42},"(now.strftime(",[36,172534,172535],{"class":405},"\"%Y-%m-",[36,172537,157092],{"class":53},[36,172539,172540],{"class":405}," %H:%M:%S\"",[36,172542,370],{"class":42},[596,172544,172546],{"id":172545},"_9124-os","9.12.4 os",[26,172548,172550],{"className":28,"code":172549,"language":30,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,172551,172552,172558,172562,172569],{"__ignoreMap":31},[36,172553,172554,172556],{"class":38,"line":39},[36,172555,30871],{"class":46},[36,172557,45782],{"class":42},[36,172559,172560],{"class":38,"line":66},[36,172561,2880],{"emptyLinePlaceholder":553},[36,172563,172564,172566],{"class":38,"line":73},[36,172565,30894],{"class":53},[36,172567,172568],{"class":42},"(os.getcwd())\n",[36,172570,172571,172573,172576,172579],{"class":38,"line":79},[36,172572,30894],{"class":53},[36,172574,172575],{"class":42},"(os.listdir(",[36,172577,172578],{"class":405},"\".\"",[36,172580,370],{"class":42},[596,172582,172584],{"id":172583},"_9125-sys","9.12.5 sys",[26,172586,172588],{"className":28,"code":172587,"language":30,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,172589,172590,172597,172601,172608],{"__ignoreMap":31},[36,172591,172592,172594],{"class":38,"line":39},[36,172593,30871],{"class":46},[36,172595,172596],{"class":42}," sys\n",[36,172598,172599],{"class":38,"line":66},[36,172600,2880],{"emptyLinePlaceholder":553},[36,172602,172603,172605],{"class":38,"line":73},[36,172604,30894],{"class":53},[36,172606,172607],{"class":42},"(sys.version)\n",[36,172609,172610,172612],{"class":38,"line":79},[36,172611,30894],{"class":53},[36,172613,172614],{"class":42},"(sys.path)\n",[14,172616,172618,172619,172621,172622,870],{"id":172617},"_913-if-name-main","9.13 if ",[770,172620,80287],{}," == \"",[770,172623,102459],{},[19,172625,172626,172627,172630],{},"模块被直接运行和被导入时，",[33,172628,172629],{},"__name__"," 的值不同。",[19,172632,172633,172634,25099],{},"创建 ",[33,172635,172636],{},"my_module.py",[26,172638,172640],{"className":28,"code":172639,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[33,172641,172642,172650,172660,172664,172668,172680],{"__ignoreMap":31},[36,172643,172644,172646,172648],{"class":38,"line":39},[36,172645,32424],{"class":46},[36,172647,5689],{"class":2443},[36,172649,151494],{"class":42},[36,172651,172652,172654,172656,172658],{"class":38,"line":66},[36,172653,4570],{"class":46},[36,172655,11349],{"class":42},[36,172657,1097],{"class":46},[36,172659,151505],{"class":42},[36,172661,172662],{"class":38,"line":73},[36,172663,2880],{"emptyLinePlaceholder":553},[36,172665,172666],{"class":38,"line":79},[36,172667,2880],{"emptyLinePlaceholder":553},[36,172669,172670,172672,172674,172676,172678],{"class":38,"line":85},[36,172671,2011],{"class":46},[36,172673,31698],{"class":53},[36,172675,101960],{"class":46},[36,172677,101963],{"class":405},[36,172679,4219],{"class":42},[36,172681,172682,172684,172686,172688,172690,172692],{"class":38,"line":419},[36,172683,31777],{"class":53},[36,172685,167001],{"class":42},[36,172687,54],{"class":53},[36,172689,12915],{"class":42},[36,172691,96],{"class":53},[36,172693,370],{"class":42},[19,172695,172696],{},"作用：",[579,172698,172699,172702],{},[582,172700,172701],{},"直接运行该文件时，执行测试代码。",[582,172703,172704],{},"被其他文件导入时，不执行测试代码。",[19,172706,172707],{},"这是写模块时很常用的习惯。",[14,172709,172711],{"id":172710},"_914-包","9.14 包",[19,172713,172714,172715,172718],{},"包是包含 ",[33,172716,172717],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172720,172721],{},"目录结构：",[26,172723,172726],{"className":172724,"code":172725,"language":5667,"meta":31},[5665],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,172727,172725],{"__ignoreMap":31},[19,172729,172730],{},"导入：",[26,172732,172734],{"className":28,"code":172733,"language":30,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,172735,172736],{"__ignoreMap":31},[36,172737,172738,172740,172743,172745],{"class":38,"line":39},[36,172739,31215],{"class":46},[36,172741,172742],{"class":42}," utils.file_utils ",[36,172744,30871],{"class":46},[36,172746,172747],{"class":42}," read_file\n",[19,172749,172750,172752],{},[33,172751,172717],{}," 可以为空，也可以写包初始化逻辑。",[14,172754,172756],{"id":172755},"_915-第三方包","9.15 第三方包",[19,172758,172759,172760,172762],{},"第三方包通过 ",[33,172761,24311],{}," 安装。",[26,172764,172766],{"className":24302,"code":172765,"language":24304,"meta":31,"style":31},"pip install requests\n",[33,172767,172768],{"__ignoreMap":31},[36,172769,172770,172772,172774],{"class":38,"line":39},[36,172771,24311],{"class":2443},[36,172773,24314],{"class":405},[36,172775,146499],{"class":405},[19,172777,172778],{},"使用：",[26,172780,172782],{"className":28,"code":172781,"language":30,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,172783,172784,172790,172794,172809],{"__ignoreMap":31},[36,172785,172786,172788],{"class":38,"line":39},[36,172787,30871],{"class":46},[36,172789,146499],{"class":42},[36,172791,172792],{"class":38,"line":66},[36,172793,2880],{"emptyLinePlaceholder":553},[36,172795,172796,172799,172801,172804,172807],{"class":38,"line":73},[36,172797,172798],{"class":42},"response ",[36,172800,47],{"class":46},[36,172802,172803],{"class":42}," requests.get(",[36,172805,172806],{"class":405},"\"https:\u002F\u002Fwww.example.com\"",[36,172808,63],{"class":42},[36,172810,172811,172813],{"class":38,"line":79},[36,172812,30894],{"class":53},[36,172814,172815],{"class":42},"(response.status_code)\n",[19,172817,172818],{},"查看已安装包：",[26,172820,172822],{"className":24302,"code":172821,"language":24304,"meta":31,"style":31},"pip list\n",[33,172823,172824],{"__ignoreMap":31},[36,172825,172826,172828],{"class":38,"line":39},[36,172827,24311],{"class":2443},[36,172829,119356],{"class":405},[19,172831,172832],{},"导出项目依赖：",[26,172834,172835],{"className":24302,"code":146694,"language":24304,"meta":31,"style":31},[33,172836,172837],{"__ignoreMap":31},[36,172838,172839,172841,172843,172845],{"class":38,"line":39},[36,172840,24311],{"class":2443},[36,172842,146703],{"class":405},[36,172844,26703],{"class":46},[36,172846,146708],{"class":405},[19,172848,172849],{},"安装项目依赖：",[26,172851,172852],{"className":24302,"code":146714,"language":24304,"meta":31,"style":31},[33,172853,172854],{"__ignoreMap":31},[36,172855,172856,172858,172860,172862],{"class":38,"line":39},[36,172857,24311],{"class":2443},[36,172859,24314],{"class":405},[36,172861,120040],{"class":53},[36,172863,146708],{"class":405},[14,172865,172867],{"id":172866},"_916-模块搜索路径","9.16 模块搜索路径",[19,172869,172870,172871,172874],{},"Python 导入模块时会在 ",[33,172872,172873],{},"sys.path"," 中查找。",[26,172876,172878],{"className":28,"code":172877,"language":30,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,172879,172880,172886,172890,172902],{"__ignoreMap":31},[36,172881,172882,172884],{"class":38,"line":39},[36,172883,30871],{"class":46},[36,172885,172596],{"class":42},[36,172887,172888],{"class":38,"line":66},[36,172889,2880],{"emptyLinePlaceholder":553},[36,172891,172892,172894,172897,172899],{"class":38,"line":73},[36,172893,3505],{"class":46},[36,172895,172896],{"class":42}," path ",[36,172898,26524],{"class":46},[36,172900,172901],{"class":42}," sys.path:\n",[36,172903,172904,172906],{"class":38,"line":79},[36,172905,31777],{"class":53},[36,172907,169630],{"class":42},[19,172909,172910],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172912,158024],{},[26,172914,172917],{"className":172915,"code":172916,"language":5667,"meta":31},[5665],"random.py\njson.py\ntime.py\n",[33,172918,172916],{"__ignoreMap":31},[19,172920,172921],{},"这些文件名可能导致导入异常。",[14,172923,172925],{"id":172924},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172927,172721],{},[26,172929,172932],{"className":172930,"code":172931,"language":5667,"meta":31},[5665],"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",[33,172933,172931],{"__ignoreMap":31},[19,172935,172936,25099],{},[33,172937,172938],{},"utils\u002Ffile_utils.py",[26,172940,172942],{"className":28,"code":172941,"language":30,"meta":31,"style":31},"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",[33,172943,172944,172950,172960,172964,172968,172978,172988,172996,173002,173006,173033,173043,173047,173051,173061,173087],{"__ignoreMap":31},[36,172945,172946,172948],{"class":38,"line":39},[36,172947,30871],{"class":46},[36,172949,147492],{"class":42},[36,172951,172952,172954,172956,172958],{"class":38,"line":66},[36,172953,31215],{"class":46},[36,172955,108712],{"class":42},[36,172957,30871],{"class":46},[36,172959,108717],{"class":42},[36,172961,172962],{"class":38,"line":73},[36,172963,2880],{"emptyLinePlaceholder":553},[36,172965,172966],{"class":38,"line":79},[36,172967,2880],{"emptyLinePlaceholder":553},[36,172969,172970,172972,172975],{"class":38,"line":85},[36,172971,32424],{"class":46},[36,172973,172974],{"class":2443}," read_json",[36,172976,172977],{"class":42},"(path):\n",[36,172979,172980,172983,172985],{"class":38,"line":419},[36,172981,172982],{"class":42},"    path ",[36,172984,47],{"class":46},[36,172986,172987],{"class":42}," Path(path)\n",[36,172989,172990,172992,172994],{"class":38,"line":425},[36,172991,3581],{"class":46},[36,172993,39407],{"class":46},[36,172995,169711],{"class":42},[36,172997,172998,173000],{"class":38,"line":431},[36,172999,15232],{"class":46},[36,173001,52315],{"class":42},[36,173003,173004],{"class":38,"line":437},[36,173005,2880],{"emptyLinePlaceholder":553},[36,173007,173008,173010,173012,173015,173017,173019,173021,173023,173025,173027,173029,173031],{"class":38,"line":443},[36,173009,34655],{"class":46},[36,173011,147192],{"class":53},[36,173013,173014],{"class":42},"(path, ",[36,173016,147202],{"class":405},[36,173018,12915],{"class":42},[36,173020,147207],{"class":5696},[36,173022,47],{"class":46},[36,173024,147212],{"class":405},[36,173026,14194],{"class":42},[36,173028,31861],{"class":46},[36,173030,148554],{"class":5696},[36,173032,4219],{"class":42},[36,173034,173035,173037,173039,173041],{"class":38,"line":2092},[36,173036,15232],{"class":46},[36,173038,148565],{"class":42},[36,173040,45831],{"class":5696},[36,173042,63],{"class":42},[36,173044,173045],{"class":38,"line":2097},[36,173046,2880],{"emptyLinePlaceholder":553},[36,173048,173049],{"class":38,"line":2103},[36,173050,2880],{"emptyLinePlaceholder":553},[36,173052,173053,173055,173058],{"class":38,"line":2108},[36,173054,32424],{"class":46},[36,173056,173057],{"class":2443}," write_json",[36,173059,173060],{"class":42},"(path, data):\n",[36,173062,173063,173065,173067,173069,173071,173073,173075,173077,173079,173081,173083,173085],{"class":38,"line":2122},[36,173064,34655],{"class":46},[36,173066,147192],{"class":53},[36,173068,173014],{"class":42},[36,173070,152377],{"class":405},[36,173072,12915],{"class":42},[36,173074,147207],{"class":5696},[36,173076,47],{"class":46},[36,173078,147212],{"class":405},[36,173080,14194],{"class":42},[36,173082,31861],{"class":46},[36,173084,148554],{"class":5696},[36,173086,4219],{"class":42},[36,173088,173089,173092,173094,173096,173098,173100,173102,173104,173106,173108,173110],{"class":38,"line":2127},[36,173090,173091],{"class":42},"        json.dump(data, ",[36,173093,45831],{"class":5696},[36,173095,12915],{"class":42},[36,173097,147538],{"class":5696},[36,173099,47],{"class":46},[36,173101,34464],{"class":53},[36,173103,12915],{"class":42},[36,173105,152413],{"class":5696},[36,173107,47],{"class":46},[36,173109,96],{"class":53},[36,173111,63],{"class":42},[19,173113,173114,25099],{},[33,173115,155008],{},[26,173117,173119],{"className":28,"code":173118,"language":30,"meta":31,"style":31},"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",[33,173120,173121,173132,173136,173149,173169],{"__ignoreMap":31},[36,173122,173123,173125,173127,173129],{"class":38,"line":39},[36,173124,31215],{"class":46},[36,173126,172742],{"class":42},[36,173128,30871],{"class":46},[36,173130,173131],{"class":42}," read_json, write_json\n",[36,173133,173134],{"class":38,"line":66},[36,173135,2880],{"emptyLinePlaceholder":553},[36,173137,173138,173140,173142,173145,173147],{"class":38,"line":73},[36,173139,160117],{"class":42},[36,173141,47],{"class":46},[36,173143,173144],{"class":42}," read_json(",[36,173146,152232],{"class":405},[36,173148,63],{"class":42},[36,173150,173151,173153,173155,173157,173159,173161,173163,173165,173167],{"class":38,"line":79},[36,173152,170935],{"class":42},[36,173154,63156],{"class":405},[36,173156,51914],{"class":42},[36,173158,150289],{"class":405},[36,173160,12915],{"class":42},[36,173162,151873],{"class":405},[36,173164,51914],{"class":42},[36,173166,1602],{"class":53},[36,173168,165553],{"class":42},[36,173170,173171,173174,173176],{"class":38,"line":85},[36,173172,173173],{"class":42},"write_json(",[36,173175,152232],{"class":405},[36,173177,173178],{"class":42},", students)\n",[14,173180,173182],{"id":173181},"_918-易错点","9.18 易错点",[579,173184,173185,173188,173193,173198,173201,173204],{},[582,173186,173187],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[582,173189,173190,173191,28866],{},"能指定异常类型就不要裸写 ",[33,173192,171295],{},[582,173194,173195,173197],{},[33,173196,171670],{}," 无论是否出错都会执行。",[582,173199,173200],{},"模块文件名不要和标准库重名。",[582,173202,173203],{},"导入自己写的模块时，要注意运行目录。",[582,173205,173206],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173208,173210],{"id":173209},"_919-本章练习","9.19 本章练习",[579,173212,173213,173216,173219,173225,173232],{},[582,173214,173215],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[582,173217,173218],{},"写函数读取文件，如果文件不存在则返回空字符串。",[582,173220,172633,173221,173224],{},[33,173222,173223],{},"math_utils.py","，实现加减乘除函数并导入使用。",[582,173226,173227,173228,173231],{},"创建一个 ",[33,173229,173230],{},"utils"," 包，把 JSON 读写函数放进去。",[582,173233,173234],{},"写一个程序，捕获除零异常和输入格式异常。",[539,173236,173237],{},"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":31,"searchDepth":66,"depth":66,"links":173239},[173240,173241,173242,173243,173244,173245,173246,173247,173248,173249,173250,173256,173263,173265,173266,173267,173268,173269,173270],{"id":171092,"depth":66,"text":171093},{"id":171220,"depth":66,"text":171221},{"id":171269,"depth":66,"text":171270},{"id":171418,"depth":66,"text":171419},{"id":171590,"depth":66,"text":171591},{"id":171659,"depth":66,"text":171660},{"id":171770,"depth":66,"text":171771},{"id":171896,"depth":66,"text":171897},{"id":172021,"depth":66,"text":172022},{"id":172076,"depth":66,"text":172077},{"id":172175,"depth":66,"text":172176,"children":173251},[173252,173253,173254,173255],{"id":172179,"depth":73,"text":172180},{"id":172213,"depth":73,"text":172214},{"id":172252,"depth":73,"text":172253},{"id":172331,"depth":73,"text":172332},{"id":172354,"depth":66,"text":172355,"children":173257},[173258,173259,173260,173261,173262],{"id":172358,"depth":73,"text":172359},{"id":172441,"depth":73,"text":172442},{"id":172486,"depth":73,"text":172487},{"id":172545,"depth":73,"text":172546},{"id":172583,"depth":73,"text":172584},{"id":172617,"depth":66,"text":173264},"9.13 if name == \"main\"",{"id":172710,"depth":66,"text":172711},{"id":172755,"depth":66,"text":172756},{"id":172866,"depth":66,"text":172867},{"id":172924,"depth":66,"text":172925},{"id":173181,"depth":66,"text":173182},{"id":173209,"depth":66,"text":173210},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171084,"description":550},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173277,"title":173278,"body":173279,"description":173442,"extension":551,"meta":173443,"navigation":553,"path":173444,"seo":173445,"stem":173446,"__hash__":173447},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173280,"toc":173437},[173281,173284,173287,173290,173301,173303,173377,173380,173383,173386,173389,173392,173395,173398,173401,173404,173407],[10,173282,173278],{"id":173283},"python教程",[19,173285,173286],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173288,173289],{},"建议学习环境：",[579,173291,173292,173295,173298],{},[582,173293,173294],{},"Python 版本：Python 3.10 及以上。",[582,173296,173297],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[582,173299,173300],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173302,117479],{"id":117479},[579,173304,173305,173311,173317,173323,173329,173335,173341,173347,173353,173359,173365,173371],{},[582,173306,173307],{},[43,173308,173310],{"href":173309},".\u002Fch1-Python","Python环境与第一个程序",[582,173312,173313],{},[43,173314,173316],{"href":173315},".\u002Fch2","基础语法、变量与字符串",[582,173318,173319],{},[43,173320,173322],{"href":173321},".\u002Fch3","判断语句",[582,173324,173325],{},[43,173326,173328],{"href":173327},".\u002Fch4","循环语句",[582,173330,173331],{},[43,173332,173334],{"href":173333},".\u002Fch5","函数基础",[582,173336,173337],{},[43,173338,173340],{"href":173339},".\u002Fch6","数据容器",[582,173342,173343],{},[43,173344,173346],{"href":173345},".\u002Fch7","函数进阶",[582,173348,173349],{},[43,173350,173352],{"href":173351},".\u002Fch8","文件操作",[582,173354,173355],{},[43,173356,173358],{"href":173357},".\u002Fch9","异常、模块与包",[582,173360,173361],{},[43,173362,173364],{"href":173363},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[582,173366,173367],{},[43,173368,173370],{"href":173369},".\u002Fch11","面向对象基础",[582,173372,173373],{},[43,173374,173376],{"href":173375},".\u002Fch12","综合案例与复习路线",[14,173378,173379],{"id":173379},"学习路线",[19,173381,173382],{},"第一阶段：能运行程序。",[19,173384,173385],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173387,173388],{},"第二阶段：能组织数据。",[19,173390,173391],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173393,173394],{},"第三阶段：能封装逻辑。",[19,173396,173397],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173399,173400],{},"第四阶段：能做小项目。",[19,173402,173403],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173405,173406],{"id":173406},"参考资料",[579,173408,173409,173416,173423,173430],{},[582,173410,173411,173412],{},"黑马程序员 Python 入门教程推荐：",[43,173413,173414],{"href":173414,"rel":173415},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24345],[582,173417,173418,173419],{},"Python 官方中文教程：",[43,173420,173421],{"href":173421,"rel":173422},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24345],[582,173424,173425,173426],{},"Python 标准库文档：",[43,173427,173428],{"href":173428,"rel":173429},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24345],[582,173431,173432,173433],{},"pyecharts 文档：",[43,173434,173435],{"href":173435,"rel":173436},"https:\u002F\u002Fpyecharts.org\u002F",[24345],{"title":31,"searchDepth":66,"depth":66,"links":173438},[173439,173440,173441],{"id":117479,"depth":66,"text":117479},{"id":173379,"depth":66,"text":173379},{"id":173406,"depth":66,"text":173406},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23858},"\u002Fwiki\u002F2024-10-10-python",{"title":173278,"description":173442},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331444852]